Container Interface: expose the host's os-release metadata to nspawn and portable guests
Stephan Edel <se@se-it.eu>
Andrey Yashkin <38919268+AndreyYashkin@users.noreply.github.com>
Ronald Tschalär <ronald@innovation.ch>
+Jay Burger <jay.burger@fujitsu.com> <root@new-host-3.home>
env:
- FEDORA_RELEASE="latest"
- TOOL_BASE="/var/tmp/coverity-scan-analysis"
+ - CONT_NAME="coverity-fedora-$FEDORA_RELEASE"
+ - DOCKER_EXEC="docker exec -ti $CONT_NAME"
- DOCKER_RUN="docker run -v $TOOL_BASE:$TOOL_BASE:rw --env-file .cov-env"
# Coverity env variables
- PLATFORM="$(uname)"
systemd System and Service Manager
-CHANGES WITH 246 in spe:
+CHANGES WITH 246:
- * The various programs included in systemd can now optionally output
- their log messages on stderr prefixed with a timestamp, controlled by
- the $SYSTEMD_LOG_TIME environment variable.
+ * The service manager gained basic support for cgroup v2 freezer. Units
+ can now be suspended or resumed either using new systemctl verbs,
+ freeze and thaw respectively, or via D-Bus.
+
+ * PID 1 may now automatically load pre-compiled AppArmor policies from
+ /etc/apparmor/earlypolicy during early boot.
+
+ * The CPUAffinity= setting in service unit files now supports a new
+ special value "numa" that causes the CPU affinity masked to be set
+ based on the NUMA mask.
+
+ * systemd will now log about all left-over processes remaining in a
+ unit when the unit is stopped. It will now warn about services using
+ KillMode=none, as this is generally an unsafe thing to make use of.
+
+ * Two new unit file settings
+ ConditionPathIsEncrypted=/AssertPathIsEncrypted= have been
+ added. They may be used to check whether a specific file system path
+ resides on a block device that is encrypted on the block level
+ (i.e. using dm-crypt/LUKS).
+
+ * Another pair of new settings ConditionEnvironment=/AssertEnvironment=
+ has been added that may be used for simple environment checks. This
+ is particularly useful when passing in environment variables from a
+ container manager (or from PAM in case of the systemd --user
+ instance).
+
+ * .service unit files now accept a new setting CoredumpFilter= which
+ allows configuration of the memory sections coredumps of the
+ service's processes shall include.
+
+ * .mount units gained a new ReadWriteOnly= boolean option. If set
+ it will not be attempted to mount a file system read-only if mounting
+ in read-write mode doesn't succeed. An option x-systemd.rw-only is
+ available in /etc/fstab to control the same.
+
+ * .socket units gained a new boolean setting PassPacketInfo=. If
+ enabled, the kernel will attach additional per-packet metadata to all
+ packets read from the socket, as ancillary message. This controls the
+ IP_PKTINFO, IPV6_RECVPKTINFO, NETLINK_PKTINFO socket options,
+ depending on socket type.
+
+ * .service units gained a new setting RootHash= which may be used to
+ specify the root hash for verity enabled disk images which are
+ specified in RootImage=. RootVerity= may be used to specify a path to
+ the Verity data matching a RootImage= file system. (The latter is
+ only useful for images that do not contain the Verity data embedded
+ into the same image that carries a GPT partition table following the
+ Discoverable Partition Specification). Similarly, systemd-nspawn
+ gained a new switch --verity-data= that takes a path to a file with
+ the verity data of the disk image supplied in --image=, if the image
+ doesn't contain the verity data itself.
+
+ * .service units gained a new setting RootHashSignature= which takes
+ either a base64 encoded PKCS#7 signature of the root hash specified
+ with RootHash=, or a path to a file to read the signature from. This
+ allows validation of the root hash against public keys available in
+ the kernel keyring, and is only supported on recent kernels
+ (>= 5.4)/libcryptsetup (>= 2.30). A similar switch has been added to
+ systemd-nspawn and systemd-dissect (--root-hash-sig=). Support for
+ this mechanism has also been added to systemd-veritysetup.
+
+ * .service unit files gained two new options
+ TimeoutStartFailureMode=/TimeoutStopFailureMode= that may be used to
+ tune behaviour if a start or stop timeout is hit, i.e. whether to
+ terminate the service with SIGTERM, SIGABRT or SIGKILL.
+
+ * Most options in systemd that accept hexadecimal values prefixed with
+ 0x in additional to the usual decimal notation now also support octal
+ notation when the 0o prefix is used and binary notation if the 0b
+ prefix is used.
+
+ * Unit files, tmpfiles.d/ snippets, sysusers.d/ snippets and other
+ configuration files that support specifier expansion learnt six new
+ specifiers: %a resolves to the current architecture, %o/%w/%B/%W
+ resolve to the various ID fields from /etc/os-release, %l resolves to
+ the "short" hostname of the system, i.e. the hostname configured in
+ the kernel truncated at the first dot.
+
+ * Support for the .include syntax in unit files has been removed. The
+ concept has been obsolete for 6 years and we started warning about
+ its pending removal 2 years ago (also see NEWS file below). It's
+ finally gone now.
+
+ * StandardError= and StandardOutput= in unit files no longer support
+ the "syslog" and "syslog-console" switches. They were long removed
+ from the documentation, but will now result in warnings when used,
+ and be converted to "journal" and "journal+console" automatically.
+
+ * If the service setting User= is set to the "nobody" user, a warning
+ message is now written to the logs (but the value is nonetheless
+ accepted). Setting User=nobody is unsafe, since the primary purpose
+ of the "nobody" user is to own all files whose owner cannot be mapped
+ locally. It's in particular used by the NFS subsystem and in user
+ namespacing. By running a service under this user's UID it might get
+ read and even write access to all these otherwise unmappable files,
+ which is quite likely a major security problem.
+
+ * A new kernel command line option systemd.hostname= has been added
+ that allows controlling the hostname that is initialized early during
+ boot.
+
+ * A kernel command line option "udev.blockdev_read_only" has been
+ added. If specified all hardware block devices that show up are
+ immediately marked as read-only by udev. This option is useful for
+ making sure that a specific boot under no circumstances modifies data
+ on disk. Use "blockdev --setrw" to undo the effect of this, per
+ device.
* A new boolean kernel command line option systemd.swap= has been
added, which may be used to turn off automatic activation of swap
- devices, as listed in /etc/fstab.
+ devices listed in /etc/fstab.
- * The CPUAffinity= setting in service unit files now supports a new
- special value "numa". If used, the NUMA mask is copied into the CPU
- affinity mask.
+ * New kernel command line options systemd.condition-needs-update= and
+ systemd.condition-first-boot= have been added, which override the
+ result of the ConditionNeedsUpdate= and ConditionFirstBoot=
+ conditions.
- * The man pages for the sd-bus and sd-hwdb APIs have been completed.
+ * A new kernel command line option systemd.clock-usec= has been added
+ that allows setting the system clock to the specified time in µs
+ since Jan 1st, 1970 early during boot. This is in particular useful
+ in order to make test cases more reliable.
- * networkctl gained the new "forcerenew" command for forcing all DHCP
- server clients to renew their lease. The interface "status" output
- will now show numerous additional fields of information about an
- interface. There are new "up" and "down" commands to bring specific
- interfaces up or down.
+ * The fs.suid_dumpable sysctl is set to 2 / "suidsafe". This allows
+ systemd-coredump to save core files for suid processes. When saving
+ the core file, systemd-coredump will use the effective uid and gid of
+ the process that faulted.
+
+ * The /sys/module/kernel/parameters/crash_kexec_post_notifiers file is
+ now automatically set to "Y" at boot, in order to enable pstore
+ generation for collection with systemd-pstore.
+
+ * A new 'hwdb' file has been added that collects information about PCI
+ and USB devices that correctly support auto-suspend, on top of the
+ databases for this we import from the ChromiumOS project. If you have
+ a device that supports auto-suspend correctly and where it should be
+ enabled by default, please submit a patch that adds it to the
+ database (see /usr/lib/udev/hwdb.d/60-autosuspend.hwdb).
+
+ * systemd-udevd gained new configuration option timeout_signal= as well
+ as corresponding kernel command line option udev.timeout_signal=.
+ The option can be used to configure the UNIX signal that the main
+ daemon sends to the worker processes on timeout. Setting the signal
+ to SIGABRT is useful for debugging.
+
+ * .link files managed by systemd-udevd gained options RxFlowControl=,
+ TxFlowControl=, AutoNegotiationFlowControl= in the [Link] section, in
+ order to configure various flow control parameters. They also gained
+ RxMiniBufferSize= and RxJumboBufferSize= in order to configure jumbo
+ frame ring buffer sizes.
+
+ * networkd.conf gained a new boolean setting ManageForeignRoutes=. If
+ enabled systemd-networkd manages all routes configured by other tools.
+
+ * .network files managed by systemd-networkd gained a new section
+ [SR-IOV], in order to configure SR-IOV capable network devices.
* systemd-networkd's [IPv6Prefix] section in .network files gained a
new boolean setting Assign=. If enabled an address from the prefix is
* systemd-networkd's [Network] section gained a new setting
IPv6PDSubnetId= that allows explicit configuration of the preferred
- subnet that networkd's Prefix Delegation logic assigns to an
- interfaces.
+ subnet that networkd's Prefix Delegation logic assigns to interfaces.
+
+ * systemd-networkd's [Network] section gained a new setting
+ IPv4AcceptLocal=. If enabled the interface accepts packets with local
+ source addresses.
* systemd-networkd gained support for configuring the HTB queuing
discipline in the [HierarchyTokenBucket] and
[GenericRandomEarlyDetection], "SFB" in [StochasticFairBlue], "cake"
in [CAKE], "PIE" in [PIE], "DRR" in [DeficitRoundRobinScheduler] and
[DeficitRoundRobinSchedulerClass], "BFIFO" in [BFIFO],
- "PFIFOHeadDrop" in [PFIFOHeadDrop], "PFIFOFast" in [PFIFOFast] and
- "HHF" in [HeavyHitterFilter].
+ "PFIFOHeadDrop" in [PFIFOHeadDrop], "PFIFOFast" in [PFIFOFast], "HHF"
+ in [HeavyHitterFilter], "ETS" in [EnhancedTransmissionSelection] and
+ "QFQ" in [QuickFairQueueing] and [QuickFairQueueingClass].
* systemd-networkd gained support for a new Termination= setting in the
[CAN] section for configuring the termination resistor. It also
traffic). DataBitRate=, DataSamplePoint=, FDMode=, FDNonISO= have
been added to configure various CAN-FD aspects.
- * .link files managed by systemd-udevd gained options RxFlowControl=,
- TxFlowControl=, AutoNegotiationFlowControl= in the [Link] section, in
- order to configure various flow control parameters. They also gained
- RxMiniBufferSize= and RxJumboBufferSize= in order to configure jumbo
- frame ring buffer sizes.
-
- * systemd-networkd's [DHCPv6] section gained a new WithoutRA= boolean
- setting. If enabled, DHCPv6 will be attempted right-away without
- requiring an Router Advertisement packet suggesting it
- first. Conversely, the [IPv6AcceptRA] gained a boolean option
+ * systemd-networkd's [DHCPv6] section gained a new option WithoutRA=.
+ When enabled, DHCPv6 will be attempted right-away without requiring an
+ Router Advertisement packet suggesting it first (i.e. without the 'M'
+ or 'O' flags set). The [IPv6AcceptRA] section gained a boolean option
DHCPv6Client= that may be used to turn off the DHCPv6 client even if
the RA packets suggest it.
Description"). Support for "MUD" URLs was also added to the LLDP
stack, configurable in the [LLDP] section in .network files.
+ * systemd-networkd's .netdev files now support a new setting
+ VLANProtocol= in the [Bridge] section that allows configuration of
+ the VLAN protocol to use.
+
+ * systemd-networkd supports a new Group= setting in the [Link] section
+ of the .network files, to control the link group.
+
+ * systemd-networkd's [Network] section gained a new
+ IPv6LinkLocalAddressGenerationMode= setting, which specifies how IPv6
+ link local address is generated.
+
+ * A new default .network file is now shipped that matches TUN/TAP
+ devices that begin with "vt-" in their name. Such interfaces will
+ have IP routing onto the host links set up automatically. This is
+ supposed to be used by VM managers to trivially acquire a network
+ interface which is fully set up for host communication, simply by
+ carefully picking an interface name to use.
+
+ * A new boolean option AssignAcquiredDelegatedPrefixAddress= has been
+ added to the [DHCPv6] section of .network files. If enabled (which is
+ the default) an address from any acquired delegated prefix is
+ automatically chosen and assigned to the interface.
+
+ * systemd-networkd's [DHCPv6] section gained a new setting RouteMetric=
+ which sets the route priority for routes specified by the DHCP server.
+
+ * systemd-networkd's [DHCPv6] section gained a new setting VendorClass=
+ which configures the vendor class information sent to DHCP server.
+
+ * The BlackList= settings in .network files' [DHCPv4] and
+ [IPv6AcceptRA] sections have been renamed DenyList=. The old names
+ are still understood to provide compatibility.
+
+ * networkctl gained the new "forcerenew" command for forcing all DHCP
+ server clients to renew their lease. The interface "status" output
+ will now show numerous additional fields of information about an
+ interface. There are new "up" and "down" commands to bring specific
+ interfaces up or down.
+
* systemd-resolved's DNS= configuration option now optionally accepts
DNS server addresses suffixed by "#" followed by a host name. If
used, the DNS-over-TLS certificate is validated to match the
* systemd-resolved's DNS-over-TLS support gained SNI validation.
- * The fs.suid_dumpable sysctl is set to 2 / "suidsafe". This allows
- systemd-coredump to save core files for suid processes. When saving
- the core file, systemd-coredump will use the effective uid and gid of
- the process that faulted.
-
- * "systemctl list-units" and "systemctl list-machines" no longer hide
- their first output column with --no-legend. To hide the first column,
- use --plain.
-
- * The service manager gained basic support for cgroup v2 freezer. Units
- can now be suspended or resumed either using new systemctl verbs,
- freeze and thaw respectively, or via D-Bus.
-
- * systemd-udevd gained new configuration option timeout_signal= as well
- as coresponding kernel command line option udev.timeout_signal.
- The option can be used to configure the UNIX signal that the main
- daemon sends to the worker processes on timeout.
-
- * A new sd-path.h API has been added to libsystemd. It provides a
- simple API for retrieving various search paths and primary
- directories for various resources.
-
- * The sd-bus API gained a number of convenience functions that take
- va_list arguments rather than "...". For example, there's now
- sd_bus_call_methodv() to match sd_bus_call_method(). Previously,
- these were missing since the calls are convenience calls only and
- could be put together from the more low-level functions they build
- on.
-
- * sd-bus vtable entries learnt a new flag SD_BUS_VTABLE_ABSOLUTE_OFFSET
- which alters how the userdata pointer to pass to the callbacks is
- determined. If the flag is set the offset field is converted as-is
- into a pointer, without adding it to the object pointer the vtable is
- associated with.
-
- * sd-bus now exposes four new functions:
- sd_bus_interface_name_is_valid() + sd_bus_service_name_is_valid() +
- sd_bus_member_name_is_valid() + sd_bus_object_path_is_valid() will
- validate strings to check if they qualify as various D-Bus concepts.
+ * systemd-nspawn's --resolv-conf= switch gained a number of new
+ supported values. Specifically, options starting with "replace-" are
+ like those prefixed "copy-" but replace any existing resolv.conf
+ file. And options ending in "-uplink" and "-stub" can now be used to
+ propagate other flavours of resolv.conf into the container (as
+ defined by systemd-resolved).
- * The sd-bus API gained the SD_BUS_METHOD_WITH_ARGS(),
- SD_BUS_METHOD_WITH_ARGS_OFFSET() and SD_BUS_SIGNAL_WITH_ARGS() macros
- that simplify adding argument names to D-Bus methods and signals.
+ * The various programs included in systemd can now optionally output
+ their log messages on stderr prefixed with a timestamp, controlled by
+ the $SYSTEMD_LOG_TIME environment variable.
* systemctl gained a new "-P" switch that is a shortcut for "--value
--property=…".
- * The expectations on user/group name syntax are now documented in
- detail; documentation how classic home directories may be converted
- into home directories managed by homed has been added; documentation
- regarding integration of homed/userdb functionality in desktops has
- been added:
+ * "systemctl list-units" and "systemctl list-machines" no longer hide
+ their first output column with --no-legend. To hide the first column,
+ use --plain.
- https://systemd.io/USER_NAMES
- https://systemd.io/CONVERTING_TO_HOMED
- https://systemd.io/USERDB_AND_DESKTOPS
+ * "systemctl reboot" takes the option "--reboot-argument=".
+ The optional positional argument to "systemctl reboot" is now
+ being deprecated in favor of this option.
* systemd-run gained a new switch --slice-inherit. If specified the
unit it generates is placed in the same slice as the systemd-run
process itself.
- * service unit files now accept a new setting CoredumpFilter= which
- allows configuration of the memory sections coredumps of the
- service's processes shall include.
-
- * coredumpctl gained a new --file= switch, matching the same one in
- journalctl: a specific journal file may be specified to read the
- coredump data from.
-
- * Various D-Bus APIs of systemd daemons now have man pages that
- document the methods, signals and properties.
+ * systemd-journald gained support for zstd compression of large fields
+ in journal files. The hash tables in journal files have been hardened
+ against hash collisions. This is an incompatible change and means
+ that journal files created with new systemd versions are not readable
+ with old versions. If the $SYSTEMD_JOURNAL_KEYED_HASH boolean
+ environment variable for systemd-journald.service is set to 0 this
+ new hardening functionality may be turned off, so that generated
+ journal files remain compatible with older journalctl
+ implementations.
+
+ * journalctl will now include a clickable link in the default output for
+ each log message for which an URL with further documentation is
+ known. This is only supported on terminal emulators that support
+ clickable hyperlinks, and is turned off if a pager is used (since
+ "less" still doesn't support hyperlinks,
+ unfortunately). Documentation URLs may be included in log messages
+ either by including a DOCUMENTATION= journal field in it, or by
+ associating a journal message catalog entry with the log message's
+ MESSAGE_ID, which then carries a "Documentation:" tag.
* journald.conf gained a new boolean setting Audit= that may be used to
control whether systemd-journald will enable audit during
initialization.
- * A new default .network file is now shipped that matches TUN/TAP
- devices that begin with "vt-" in their name. Such interfaces will
- have IP routing onto the host links set up automatically. This is
- supposed to be used by VM managers to trivially acquire a network
- interface which is fully set up for host communication, simply by
- carefully picking an interface name to use.
+ * when systemd-journald's log stream is broken up into multiple lines
+ because the PID of the sender changed this is indicated in the
+ generated log records via the _LINE_BREAK=pid-change field.
- * All D-Bus services shipped in systemd now implement the generic
- LogControl1 D-Bus API which allows clients to change log level +
- target of the service during runtime.
+ * journalctl's "-o cat" output mode will now show one or more journal
+ fields specified with --output-fields= instead of unconditionally
+ MESSAGE=. This is useful to retrieve a very specific set of fields
+ without any decoration.
- * systemd-nspawn's --resolv-conf= switch gained a number of new
- supported values. Specifically, options starting with "replace-" are
- like those prefixed "copy-" but replace any existing resolv.conf
- file. And options ending in "-uplink" and "-stub" can now be used to
- propagate other flavours of resolv.conf into the container (as
- defined by systemd-resolved).
+ * coredumpctl gained a new --file= switch, matching the same one in
+ journalctl: a specific journal file may be specified to read the
+ coredump data from.
+
+ * coredumps collected by systemd-coredump may now be compressed using
+ the zstd algorithm.
* systemd-binfmt gained a new switch --unregister for unregistering all
registered entries at once. This is now invoked automatically at
shutdown, so that binary formats registered with the "F" flag will
not block clean file system unmounting.
- * Unit files, tmpfiles.d/ snippets, sysusers.d/ snippets and other
- configuration files that support specifier expansion learnt six new
- specifiers: %a resolves to the current architecture, %o/%w/%B/%W
- resolve to the various ID fields from /etc/os-release, %l resolves to
- the "short" hostname of the system, i.e. the kernel configured
- hostname, truncated at the first dot.
-
* systemd-notify's --pid= switch gained new values: "parent", "self",
"auto" for controlling which PID to send to the service manager: the
systemd-notify process' PID, or the one of the process invoking it.
- * When sending a file descriptor (fd) to the service manager to keep
- track of, using the sd_notify() mechanism, a new parameter FDPOLL=0
- may be specified. If passed the service manager will refrain from
- poll()ing on the file descriptor. Traditionally (and when the
- parameter is not specified), the service manager will poll it for
- POLLHUP or POLLERR events, and immediately close the fds in that
- case.
-
- * A new call sd_notify_barrier() has been added to the sd-daemon.h
- API. The call will block until all previously sent sd_notify()
- messages have been processed by the service manager. This is useful
- to remove races caused by a process already having disappeared at the
- time a notification message is processed by the service manager,
- making correct attribution impossible. The systemd-notify tool will
- now make use of this call implicitly, but this can be turned off again
- via the new --no-block switch.
-
* systemd-logind's Session bus object learnt a new method call
SetType() for temporarily updating the session type of an already
allocated session. This is useful for upgrading tty sessions to
graphical ones once a compositor is invoked.
- * .mount units gained a new ReadWriteOnly= boolean option. If set
- it will not be attempted to mount a file system read-only if mounting
- in read-write mode doesn't succeed. An option x-systemd.rw-only is
- available in /etc/fstab to control the same.
-
- * coredumps collected by systemd-coredump may now be compressed using
- the zstd algorithm.
-
- * journalctl's "-o cat" output mode will now show one or more journal
- fields specified with --output-fields= instead of unconditionally
- MESSAGE=. This is useful to retrieve a very specific set of fields
- without any decoration.
-
* systemd-socket-proxy gained a new switch --exit-idle-time= for
configuring an exit-on-idle time.
- * systemd-homed's LUKS backend gained the ability to discard empty file
- system blocks automatically when the user logs out. This is enabled
- by default to ensure that home directories take minimal space when
- logged out but get full size guarantees when logged in. This may be
- controlled with the new --luks-offline-discard= switch to homectl.
-
- * If systemd-homed detects that /home/ is encrypted as a whole it will
- now default to the directory or subvolume backends instead of the
- LUKS backend, in order to avoid double encryption. The default
- storage and file system may now be configured explicitly, too, via
- the new /etc/systemd/homed.conf configuration file.
-
- * when systemd-journald's log stream is broken up into multiple lines
- because the PID of the sender changed this is indicated in the
- generated log records via the _LINE_BREAK=pid-change field.
-
- * systemd-networkd's .netdev files now support a new setting
- VLANProtocol= in the [Bridge] section that allows configuration of
- the VLAN protocol to use.
-
* systemd-repart's --empty= setting gained a new value "create". If
specified a new empty regular disk image file is created under the
specified name. Its size may be specified with the new --size=
* systemd-repart drop-ins now support a new UUID= setting to control
the UUID to assign to a newly created partition.
- * StandardError= and StandardOutput= in unit files no longer support
- the "syslog" and "syslog-console" switches. They were long removed
- from the documentation, but will now result in warnings when used,
- and be converted to "journal" and "journal+console" automatically.
-
- * systemd-networkd supports a new Group= setting in the [Link] section
- of the .network files, to control the link group.
+ * systemd-repart's SizeMin= per-partition parameter now defaults to 10M
+ instead of 0.
- * Two new unit file settings
- ConditionPathIsEncrypted=/AssertPathIsEncrypted= have been
- added. They may be used to check whether a specific file system path
- resides on a block device that is encrypted on the block level
- (i.e. using dm-crypt/LUKS).
+ * systemd-repart's Label= setting now support the usual, simple
+ specifier expansion.
- * Another pair of new settings ConditionEnvironment=/AssertEnvironment=
- has been added that may be used for simple environment checks. This
- is particularly useful when passing in environment variables from a
- container manager (or from PAM in case of the systemd --user
- instance).
-
- * The /sys/module/kernel/parameters/crash_kexec_post_notifiers file is
- now automatically set to "Y" at boot, in order to enable pstore
- generation for collection with systemd-pstore.
+ * systemd-homed's LUKS backend gained the ability to discard empty file
+ system blocks automatically when the user logs out. This is enabled
+ by default to ensure that home directories take minimal space when
+ logged out but get full size guarantees when logged in. This may be
+ controlled with the new --luks-offline-discard= switch to homectl.
- * New kernel command line options systemd.condition-needs-update= and
- systemd.condition-first-boot= have been added, which override the
- result of the ConditionNeedsUpdate= and ConditionFirstBoot=
- conditions.
+ * If systemd-homed detects that /home/ is encrypted as a whole it will
+ now default to the directory or subvolume backends instead of the
+ LUKS backend, in order to avoid double encryption. The default
+ storage and file system may now be configured explicitly, too, via
+ the new /etc/systemd/homed.conf configuration file.
- * A new kernel command line option systemd.clock-usec= has been added
- that allows setting the system clock to the specified time in µs
- since Jan 1st, 1970 early during boot. This is in particular useful
- in order to make test cases more reliable.
-
- * A new kernel command line option systemd.hostname= has been added
- that allows controlling the hostname that is initialized early during
- boot.
+ * systemd-homed now supports unlocking home directories with FIDO2
+ security tokens that support the 'hmac-secret' extension, in addition
+ to the existing support for PKCS#11 security token unlocking
+ support. Note that many recent hardware security tokens support both
+ interfaces. The FIDO2 support is accessible via homectl's
+ --fido2-device= option.
+
+ * homectl's --pkcs11-uri= setting now accepts two special parameters:
+ if "auto" is specified and only one suitable PKCS#11 security token
+ is plugged in, its URL is automatically determined and enrolled for
+ unlocking the home directory. If "list" is specified a brief table of
+ suitable PKCS#11 security tokens is shown. Similar, the new
+ --fido2-device= option also supports these two special values, for
+ automatically selecting and listing suitable FIDO2 devices.
* The /etc/crypttab tmp option now optionally takes an argument
selecting the file system to use. Moreover, the default is now
/etc/cryptsetup-keys.d/<volume>.key and
/run/cryptsetup-keys.d/<volume>.key, if any of these files exist.
+ * systemd-cryptsetup may now activate Microsoft BitLocker volumes via
+ /etc/crypttab, during boot.
+
* logind.conf gained a new RuntimeDirectoryInodesMax= setting to
control the inode limit for the per-user $XDG_RUNTIME_DIR tmpfs
instance.
set the /etc/kernel/cmdline file of an OS image.
* A new generator systemd-xdg-autostart-generator has been added. It
- automatically generates systemd unit files from XDG autostart
- .desktop files, and is useful for allowing systemd to manage services
- defined that way safely and automatically.
+ generates systemd unit files from XDG autostart .desktop files, and
+ may be used to let the systemd user instance manage services that are
+ started automatically as part of the desktop session.
+
+ * "bootctl" gained a new verb "reboot-to-firmware" that may be used
+ to query and change the firmware's 'reboot into firmware' setup flag.
+
+ * systemd-firstboot gained a new switch --kernel-command-line= that may
+ be used to initialize the /etc/kernel/cmdline file of the image. It
+ also gained a new switch --root-password-hashed= which is like
+ --root-password= but accepts a pre-hashed UNIX password as
+ argument. The new option --delete-root-password may be used to unset
+ any password for the root user (dangerous!). A new --force option may
+ be used to override any already set settings with the parameters
+ specified on the command line (by default, the tool will not override
+ what has already been set before, i.e. is purely incremental).
- * systemd will now log about all left-over processes remaining in a
- unit when the unit is stopped. It will now warn about services using
- KillMode=none, as this is generally an unsafe thing to make use of.
+ * A new sd-path.h API has been added to libsystemd. It provides a
+ simple API for retrieving various search paths and primary
+ directories for various resources.
- * .socket units gained a new boolean setting PassPacketInfo=. If
- enabled, the kernel will attach additional per-packet metadata to all
- packets read from the socket, as ancillary message. This controls the
- IP_PKTINFO, IPV6_RECVPKTINFO, NETLINK_PKTINFO socket options,
- depending on socket type.
+ * A new call sd_notify_barrier() has been added to the sd-daemon.h
+ API. The call will block until all previously sent sd_notify()
+ messages have been processed by the service manager. This is useful
+ to remove races caused by a process already having disappeared at the
+ time a notification message is processed by the service manager,
+ making correct attribution impossible. The systemd-notify tool will
+ now make use of this call implicitly, but this can be turned off again
+ via the new --no-block switch.
- * A new boolean option AssignAcquiredDelegatedPrefixAddress= has been
- added to the [DHCPv6] section of .network files. If enabled (which is
- the default) an address from any acquired delegated prefix is
- automatically chosen and assigned to the interface.
+ * When sending a file descriptor (fd) to the service manager to keep
+ track of, using the sd_notify() mechanism, a new parameter FDPOLL=0
+ may be specified. If passed the service manager will refrain from
+ poll()ing on the file descriptor. Traditionally (and when the
+ parameter is not specified), the service manager will poll it for
+ POLLHUP or POLLERR events, and immediately close the fds in that
+ case.
- * "systemctl reboot" takes the option "--reboot-argument=".
- The optional positional argument to "systemctl reboot" is now
- being deprecated in favor of this option.
+ * The service manager (PID1) gained a new D-Bus method call
+ SetShowStatus() which may be used to control whether it shall show
+ boot-time status output on the console. This method has a similar
+ effect to sending SIGRTMIN+20/SIGRTMIN+21 to PID 1.
- * Support for the .include syntax in unit files has been removed. The
- concept has been obsolete for 6 years and we started warning about
- its pending removal 2 years ago (also see NEWS file below). It's
- finally gone now.
+ * The sd-bus API gained a number of convenience functions that take
+ va_list arguments rather than "...". For example, there's now
+ sd_bus_call_methodv() to match sd_bus_call_method(). Those calls make
+ it easier to build wrappers that accept variadic arguments and want
+ to pass a ready va_list structure to sd-bus.
+
+ * sd-bus vtable entries can have a new SD_BUS_VTABLE_ABSOLUTE_OFFSET
+ flag which alters how the userdata pointer to pass to the callbacks
+ is determined. When the flag is set, the offset field is converted
+ as-is into a pointer, without adding it to the object pointer the
+ vtable is associated with.
+
+ * sd-bus now exposes four new functions:
+ sd_bus_interface_name_is_valid() + sd_bus_service_name_is_valid() +
+ sd_bus_member_name_is_valid() + sd_bus_object_path_is_valid() will
+ validate strings to check if they qualify as various D-Bus concepts.
+
+ * The sd-bus API gained the SD_BUS_METHOD_WITH_ARGS(),
+ SD_BUS_METHOD_WITH_ARGS_OFFSET() and SD_BUS_SIGNAL_WITH_ARGS() macros
+ that simplify adding argument names to D-Bus methods and signals.
+
+ * The man pages for the sd-bus and sd-hwdb APIs have been completed.
+
+ * Various D-Bus APIs of systemd daemons now have man pages that
+ document the methods, signals and properties.
+
+ * The expectations on user/group name syntax are now documented in
+ detail; documentation how classic home directories may be converted
+ into home directories managed by homed has been added; documentation
+ regarding integration of homed/userdb functionality in desktops has
+ been added:
+
+ https://systemd.io/USER_NAMES
+ https://systemd.io/CONVERTING_TO_HOMED
+ https://systemd.io/USERDB_AND_DESKTOPS
+
+ * Documentation for the on-disk Journal file format has been updated
+ and has now moved to:
+
+ https://systemd.io/JOURNAL_FILE_FORMAT
+
+ * All D-Bus services shipped in systemd now implement the generic
+ LogControl1 D-Bus API which allows clients to change log level +
+ target of the service during runtime.
+
+ Contributions from: 24bisquitz, Adam Nielsen, Alan Perry, Alexander
+ Malafeev, Alin Popa, Amos Bird, Andreas Rammhold, AndreRH, Andrew
+ Doran, Anita Zhang, Ankit Jain, antznin, Arnaud Ferraris, Arthur Moraes
+ do Lago, Arusekk, Balaji Punnuru, Balint Reczey, Bastien Nocera,
+ bemarek, Benjamin Berg, Benjamin Dahlhoff, Benjamin Robin, Chris Down,
+ Chris Kerr, Christian Göttsche, Christian Hesse, Christian Oder,
+ Ciprian Hacman, codicodi, Corey Hinshaw, Daan De Meyer, Dana Olson, Dan
+ Callaghan, Daniel Fullmer, Daniel Rusek, Dan Streetman, Dave Reisner,
+ David Edmundson, David Wood, Denis Pronin, Diego Escalante Urrelo,
+ Dimitri John Ledkov, dolphrundgren, duguxy, Einsler Lee, Elisei Roca,
+ Emmanuel Garette, Eric Anderson, Eric DeVolder, Evgeny Vereshchagin,
+ ExtinctFire, fangxiuning, Ferran Pallarès Roca, Filipe Brandenburger,
+ Finn, Florian Klink, Franck Bui, Frantisek Sumsal, Gaoyi, gaurav, Georg
+ Müller, Gergely Polonkai, Giedrius Statkevičius, Gigadoc2, gogogogi,
+ gzjsgdsb, Hans de Goede, Haochen Tong, ianhi, ignapk, Jakov Smolic,
+ James T. Lee, Jan Janssen, Jan Klötzke, Jan Palus, Jay Burger, Jeremy
+ Cline, Jérémy Rosen, Jian-Hong Pan, Jiri Slaby, Joel Shapiro, Joerg
+ Behrmann, Jörg Thalheim, Jouke Witteveen, Kai-Heng Feng, Kenny
+ Levinsen, Kevin Kuehler, Kumar Kartikeya Dwivedi, layderv, laydervus,
+ Lénaïc Huard, Lennart Poettering, Lidong Zhong, Luca Boccassi, Luca
+ BRUNO, Lucas Werkmeister, Lukas Klingsbo, Lukáš Nykrýn, Łukasz
+ Stelmach, Maciej S. Szmigiero, MadMcCrow, Marc-André Lureau, Marcel
+ Holtmann, Marc Kleine-Budde, Martin Hundebøll, Matthew Leeds, Matt
+ Ranostay, Maxim Fomin, MaxVerevkin, Michael Biebl, Michael Chapman,
+ Michael Gubbels, Michael Marley, Michał Bartoszkiewicz, Michal Koutný,
+ Michal Sekletar, Michal Sekletár, Mike Gilbert, Mike Kazantsev, ml,
+ Motiejus Jakštys, nabijaczleweli, nerdopolis, Niccolò Maggioni, Niklas
+ Hambüchen, Norbert Lange, Paul Cercueil, pelzvieh, Peter Hutterer,
+ Piero La Terza, Pieter Lexis, Piotr Drąg, Rafael Fontenelle, Richard
+ Petri, Ronan Pigott, Ross Lagerwall, Rubens Figueiredo, satmandu,
+ Sean-StarLabs, Sebastian Jennen, sterlinghughes, Susant Sahani, Thomas
+ Haller, Tobias Hunger, Tom, Tomáš Pospíšek, Tomer Shechner, Tom Hughes,
+ Topi Miettinen, Tudor Roman, Uwe Kleine-König, Valery0xff, Vito Caputo,
+ Vladimir Panteleev, Vladyslav Tronko, Wen Yang, Yegor Vialov, Yigal
+ Korman, YmrDtnJu, Yuri Chornoivan, Yu Watanabe, Zbigniew
+ Jędrzejewski-Szmek, Zhu Li, Дамјан Георгиевски, наб
CHANGES WITH 245:
of the PAM session, for example for time-limited logins.
* A new @pkey system call group is now defined to make it easier to
- whitelist memory protection syscalls for containers and services
+ allow-list memory protection syscalls for containers and services
which need to use them.
* systemd-udevd: removed the 30s timeout for killing stale workers on
* udev now provides a program (fido_id) that identifies FIDO CTAP1
("U2F")/CTAP2 security tokens based on the usage declared in their
report and descriptor and outputs suitable environment variables.
- This replaces the externally maintained whitelists of all known
+ This replaces the externally maintained allow lists of all known
security tokens that were used previously.
- * Automatically generated autosuspend udev rules for whitelisted
+ * Automatically generated autosuspend udev rules for allow-listed
devices have been imported from the Chromium OS project. This should
improve power saving with many more devices.
* systemd-networkd's DHCPv4 support now understands a new MaxAttempts=
option for configuring the maximum number of DHCP lease requests. It
- also learnt a new BlackList= option for blacklisting DHCP servers (a
+ also learnt a new BlackList= option for deny-listing DHCP servers (a
similar setting has also been added to the IPv6 RA client), as well
as a SendRelease= option for configuring whether to send a DHCP
RELEASE message when terminating.
any relevant symlinks both in /run and /etc.
* Note that all long-running system services shipped with systemd will
- now default to a system call whitelist (rather than a blacklist, as
+ now default to a system call allow list (rather than a deny list, as
before). In particular, systemd-udevd will now enforce one too. For
most cases this should be safe, however downstream distributions
which disabled sandboxing of systemd-udevd (specifically the
MountFlags= setting), might want to disable this security feature
- too, as the default whitelisting will prohibit all mount, swap,
+ too, as the default allow-listing will prohibit all mount, swap,
reboot and clock changing operations from udev rules.
* sd-boot acquired new loader configuration settings to optionally turn
* systemd-nspawn gained support for a new --system-call-filter= command
line option for adding and removing entries in the default system
call filter it applies. Moreover systemd-nspawn has been changed to
- implement a system call whitelist instead of a blacklist.
+ implement a system call allow list instead of a deny list.
* systemd-run gained support for a new --pipe command line option. If
used the STDIN/STDOUT/STDERR file descriptors passed to systemd-run
fsck's progress report to an AF_UNIX socket in the file
system.
- * udev will no longer create device symlinks for all block
- devices by default. A blacklist for excluding special block
- devices from this logic has been turned into a whitelist
- that requires picking block devices explicitly that require
- device symlinks.
+ * udev will no longer create device symlinks for all block devices by
+ default. A deny list for excluding special block devices from this
+ logic has been turned into a allow list that requires picking block
+ devices explicitly that require device symlinks.
* A new (currently still internal) API sd-device.h has been
added to libsystemd. This modernized API is supposed to
Wikipedia. We explicitly document which base applies for
each configuration option.
- * The DeviceAllow= setting in unit files now supports a syntax
- to whitelist an entire group of devices node majors at once,
- based on the /proc/devices listing. For example, with the
- string "char-pts", it is now possible to whitelist all
- current and future pseudo-TTYs at once.
+ * The DeviceAllow= setting in unit files now supports a syntax to
+ allow-list an entire group of devices node majors at once, based on
+ the /proc/devices listing. For example, with the string "char-pts",
+ it is now possible to allow-list all current and future pseudo-TTYs
+ at once.
* sd-event learned a new "post" event source. Event sources of
this type are triggered by the dispatching of any event
* journalctl gained the new "--header" switch to introspect
header data of journal files.
- * A new setting SystemCallFilters= has been added to services
- which may be used to apply blacklists or whitelists to
- system calls. This is based on SECCOMP Mode 2 of Linux 3.5.
+ * A new setting SystemCallFilters= has been added to services which may
+ be used to apply deny lists or allow lists to system calls. This is
+ based on SECCOMP Mode 2 of Linux 3.5.
* nspawn gained a new --link-journal= switch (and quicker: -j)
to link the container journal with the host. This makes it
REQUIREMENTS:
Linux kernel >= 3.13
Linux kernel >= 4.2 for unified cgroup hierarchy support
+ Linux kernel >= 5.4 for signed Verity images support
Kernel Config Options:
CONFIG_DEVTMPFS
CONFIG_EFIVAR_FS
CONFIG_EFI_PARTITION
+ Required for signed Verity images support:
+ CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG
+
We recommend to turn off Real-Time group scheduling in the
kernel when using systemd. RT group scheduling effectively
makes RT scheduling unavailable for most userspace, since it
libblkid >= 2.24 (from util-linux) (optional)
libkmod >= 15 (optional)
PAM >= 1.1.2 (optional)
- libcryptsetup (optional)
+ libcryptsetup (optional), >= 2.3.0 required for signed Verity images support
libaudit (optional)
libacl (optional)
libselinux (optional)
* Fedora: add an rpmlint check that verifies that all unit files in the RPM are listed in %systemd_post macros.
-* wiki: update journal format documentation for lz4 additions
-
Janitorial Clean-ups:
* Rearrange tests so that the various test-xyz.c match a specific src/basic/xyz.c again
* add --copy-from and --copy-to command to systemd-dissect which copies stuff
in and out of a disk image
-* add systemd.random_seed= on the kernel cmdline, taking some hex or base64
- encoded data. During earliest boot, credit it to entropy. This is not useful
- for general purpose systems, but certainly for testing environments in VMs
- and such, as it allows us to boot up instantly with fully initialized entropy
- pool even if RNG pass-thru is not available.
-
* Support ProtectProc= or so, using: https://patchwork.kernel.org/cover/11310197/
* if /usr/bin/swapoff fails due to OOM, log a friendly explanatory message about it
+* add loud warning to the logs (with catalog entry) if systemd-udev-settle is
+ pulled into the boot process
+
* build short web pages out of each catalog entry, build them along with man
pages, and include hyperlinks to them in the journal output
so that the client side can remain entirely unprivileged, with SUID or
anything like that.
+* journald: do journal file writing out-of-process, with one writer process per
+ client UID, so that synthetic hash table collisions can slow down a specific
+ user's journal stream down but not the others.
+
* add "throttling" to sd-event event sources: optionally, when we wake up too
often for one, let's turn it off entirely for a while. Use that for the
/proc/self/mountinfo logic.
* nspawn: support time namespaces
+* systemd-firstboot: make sure to always use chase_symlinks() before
+ reading/writing files
+
* add ConditionSecurity=tpm2
* Remove any support for booting without /usr pre-mounted in the initrd entirely.
this, it's useful to have one that can dump contents of them, too.
* All tools that support --root= should also learn --image= so that they can
- operate on disk images directly. Specifically: bootctl, firstboot, tmpfiles,
- sysusers, systemctl, repart, journalctl, coredumpctl.
+ operate on disk images directly. Specifically: bootctl, tmpfiles, sysusers,
+ systemctl, repart, journalctl, coredumpctl. (Already done: systemd-nspawn,
+ systemd-firstboot)
* seccomp: by default mask x32 ABI system wide on x86-64. it's on its way out
* homed: support new FS_IOC_ADD_ENCRYPTION_KEY ioctl for setting up fscrypt
-* busctl: maybe expose a verb "ping" for pinging a dbus service to see if it
- exists and responds.
-
* homed: maybe pre-create ~/.cache as subvol so that it can have separate quota
easily?
+* busctl: maybe expose a verb "ping" for pinging a dbus service to see if it
+ exists and responds.
+
* when systemd-nspawn and suchlike dissect an OS image, and there are multiple
root partitions, do an strverscmp() on the partition label and boot
first. That is inspired how sd-boot figures out which kernel to boot, and
thus allows defining OS images which can be A/B updated and we default to the
newest version automatically, both in nspawn and in sd-boot
-* cryptsetup/homed: also support FIDO2 HMAC password logic for unlocking
- devices. (see: https://github.com/mjec/fido2-hmac-secret)
+* cryptsetup: support FIDO2 tokens for deriving keys (i.e. do what homed can do
+ also in plain cryptsetup)
* systemd-gpt-auto should probably set x-systemd.growfs on the mounts it
creates
- teach it to copy in unified kernel images and maybe type #1 boot loader spec entries from host
- make it operate on loopback files, dissecting enough to find ESP to operate on
+* Maybe add a separate GPT partition type to the discoverable partition spec
+ for "hibernate" partitions, that are exactly like swap partitions but only
+ activated right before hibernation and thus never used for regular swapping.
+
* by default, in systemd --user service bump the OOMAdjust to 100, as privs
allow so that systemd survives
end), in order to maximize dd'ability. Requires libfdisk work, see
https://github.com/karelzak/util-linux/issues/907
-* systemd-repart: optionally, allow specifying a path to initialize new
- partitions from, i.e. an fs image file or a source device node. This would
- then turn systemd-repart into a simple installer: with a few .repart files
- you could replicate the host system on another device. a full installer would
- then be: "systemd-repart /dev/sda && bootctl install /dev/sda &&
- systemd-firstboot --image= …"
-
* systemd-repart: MBR partition table support. Care needs to be taken regarding
Type=, so that partition definitions can sanely apply to both the GPT and the
MBR case. Idea: accept syntax "Type=gpt:home mbr:0x83" for setting the types
* systemd-repart: allow managing the gpt read-only partition flag + auto-mount flag
+* systemd-repart: allow boolean option that ensures that if existing partition
+ doesn't exist within the configured size bounds the whole command fails. This
+ is useful to implement ESP vs. XBOOTLDR schemes in installers: have one set
+ of repart files for the case where ESP is large enough and one where it isn't
+ and XBOOTLDR is added in instead. Then apply the former first, and if it
+ fails to apply use the latter.
+
+* systemd-repart: add per-partition option to never reuse existing partition
+ and always create anew even if matching partition already exists.
+
+* systemd-repart: add per-partition option to fail if partition already exist,
+ i.e. is not added new. Similar, add option to fail if partition does not exist yet.
+
+* systemd-repart: add --size=auto for generating/resizing images of minimal
+ size, i.e. where the image file is sized exactly as large as necessary taking
+ SizeMin= into account, but not a single byte larger.
+
* systemd-repart: allow disabling growing of specific partitions, or making
them (think ESP: we don't ever want to grow it, since we cannot resize vfat)
-* systemd-repart: add specifier expansion, add especifier that refers to root
- device node of current system, /usr device node, and matching verity, so that
- an installer can be made a "copy" installer of the booted OS
-
* systemd-repart: make it a static checker during early boot for existence and
absence of other partitions for trusted boot environments
-* systemd-repart: allow config of partition uuid
-
* userdb: allow username prefix searches in varlink API, allow realname and
realname substr searches in varlink API
beefing up logind to make pam session close hook synchronous and wait until
systemd --user is shut down.
- logind: maybe keep a "busy fd" as long as there's a non-released session around or the user@.service
- - maybe make automatic, read-only, time-based reflink-copies of LUKS disk images (think: time machine)
+ - maybe make automatic, read-only, time-based reflink-copies of LUKS disk
+ images (and btrfs snapshots of subvolumes) (think: time machine)
- distinguish destroy / remove (i.e. currently we can unregister a user, unregister+remove their home directory, but not just remove their home directory)
- in systemd's PAMName= logic: query passwords with ssh-askpassword, so that we can make "loginctl set-linger" mode work
- fingerprint authentication, pattern authentication, …
- make slice for users configurable (requires logind rework)
- logind: populate auto-login list bus property from PKCS#11 token
- when determining state of a LUKS home directory, check DM suspended sysfs file
+ - introduce API for "making room", that grows/shrinks home directory
+ according to elastic parameters, discards blocks, and removes additional snapshots. Call it
+ either from UI when disk space gets low
* introduce a new per-process uuid, similar to the boot id, the machine id, the
invocation id, that is derived from process creds, specifically a hashed
It is generally recommended to avoid such overly long mount point paths, or —
if used anyway – manage them independently of systemd, i.e. establish them as
well as tear them down automatically at system shutdown by other software.
+
+-- b480325f9c394a7b802c231e51a2752c
+Subject: Special user @OFFENDING_USER@ configured, this is not safe!
+Defined-By: systemd
+Support: %SUPPORT_URL%
+Documentation: https://systemd.io/UIDS-GIDS
+
+The unit @UNIT@ is configured to use User=@OFFENDING_USER@.
+
+This is not safe. The @OFFENDING_USER@ user's main purpose on Linux-based
+operating systems is to be the owner of files that otherwise cannot be mapped
+to any local user. It's used by the NFS client and Linux user namespacing,
+among others. By running a unit's processes under the identity of this user
+they might possibly get read and even write access to such files that cannot
+otherwise be mapped.
+
+It is strongly recommended to avoid running services under this user identity,
+in particular on systems using NFS or running containers. Allocate a user ID
+specific to this service, either statically via systemd-sysusers or dynamically
+via the DynamicUser= service setting.
Subject: Wyłączono tryb DNSSEC, ponieważ serwer go nie obsługuje
Defined-By: systemd
Support: %SUPPORT_URL%
-Documentation: man:systemd-resolved.service(8) resolved.conf(5)
+Documentation: man:systemd-resolved.service(8)
+Documentation: man:resolved.conf(5)
Usługa resolver (systemd-resolved.service) wykryła, że skonfigurowany serwer
DNS nie obsługuje DNSSEC, w wyniku czego walidacja DNSSEC została wyłączona.
Subject: Przyjmowanie nazwy użytkownika/grupy @USER_GROUP_NAME@, która nie zgadza się ze ścisłymi regułami nazw użytkowników/grup.
Defined-By: systemd
Support: %SUPPORT_URL%
+Documentation: https://systemd.io/USER_NAMES
Podano nazwę użytkownika/grupy @USER_GROUP_NAME@, co zostało przyjęte
zgodnie z rozluźnionymi regułami nazw użytkowników/grup, ale nie spełnia
zawierających tylko cyfry lub ciągów zaczynających się myślnikiem
i zawierających oprócz niego tylko cyfry.
-https://systemd.io/USER_NAMES zawiera więcej informacji o ścisłych
-i rozluźnionych regułach nazw użytkowników/grup.
+-- 1b3bb94037f04bbf81028e135a12d293
+Subject: Utworzenie prawidłowej nazwy jednostki ze ścieżki „@MOUNT_POINT@” się nie powiodło.
+Defined-By: systemd
+Support: %SUPPORT_URL%
+
+Następująca ścieżka do punktu montowania nie może zostać przekonwertowana
+na prawidłową nazwę jednostki .mount:
+
+ @MOUNT_POINT@
+
+Zwykle oznacza to, że ścieżka do punktu montowania jest dłuższa niż dozwolona
+dla prawidłowych nazw jednostek.
+
+systemd dynamicznie syntetyzuje jednostki .mount dla wszystkich punktów
+montowania pojawiających się na komputerze. Stosowany do tego jest prosty
+algorytm: używana jest bezwzględna nazwa ścieżki ze wszystkimi znakami „/”
+zastąpionymi znakami „-” (początkowy jest usuwany). Co więcej, wszystkie
+niealfanumeryczne znaki (a także „:”, „-”, „_”, „.”, „\”) są zastępowane
+„\xNN”, gdzie „NN” jest szesnastkowym kodem znaki. Na końcu dołączany jest
+przyrostek „.mount”. Wynikowy ciąg musi mieć poniżej 256 znaków długości,
+aby był prawidłową nazwą jednostki. To ograniczenie obowiązuje, aby wszystkie
+nazwy jednostek mogły być używane także jako nazwy plików. Jeśli punkt
+montowania — po zastosowaniu algorytmu — jest dłuższy niż to ograniczenie,
+to nie może zostać zmapowany do jednostki. W takim przypadku systemd nie
+zsyntetyzuje jednostki i nie może być używany do zarządzania punktem
+montowania. Nie pojawi się w tabeli jednostek menedżera usług, przez co
+nie zostanie także bezpiecznie i automatycznie zdjęty podczas wyłączania
+komputera.
+
+Zasadniczo zalecane jest unikanie takich za długich ścieżek do punktów
+montowania, a jeśli są używane mimo to, zarządzanie nimi niezależnie
+od systemd, tzn. stawianie ich i automatyczne zdejmowanie podczas
+wyłączania komputera przez inne oprogramowanie.
+
+-- b480325f9c394a7b802c231e51a2752c
+Subject: Skonfigurowany jest szczególny użytkownik @OFFENDING_USER@, jest to niebezpieczne!
+Defined-By: systemd
+Support: %SUPPORT_URL%
+Documentation: https://systemd.io/UIDS-GIDS
+
+Jednostka @UNIT@ jest skonfigurowana do używania User=@OFFENDING_USER@.
+
+Nie jest to bezpieczne. Głównym zastosowaniem użytkownika @OFFENDING_USER@
+w linuksowych systemach operacyjnych jest bycie właścicielem plików, których
+nie można w inny sposób zmapować do żadnego lokalnego użytkownika. Jest
+używany między innymi przez klienta NFS i przestrzenie nazw użytkowników
+Linuksa. Wykonywanie procesów jednostki pod tożsamością tego użytkownika
+może spowodować, że będą one miały dostęp do odczytu, a może nawet do zapisu,
+plików, których nie można zmapować w inny sposób.
+
+Mocno zalecane jest unikanie wykonywania usług pod tą tożsamością użytkownika,
+zwłaszcza na komputerach używających NFS lub mających kontenery. Należy
+przydzielić identyfikator użytkownika dla tej konkretnej usługi, statycznie
+przez systemd-sysusers lub dynamicznie przez ustawienie usługi DynamicUser=.
--- /dev/null
+@@
+local idexpression r;
+expression p, k, x;
+@@
+- r = set_ensure_allocated(&p, k);
+- if (r < 0)
+- return ...;
+- r = set_put(p, x);
++ r = set_ensure_put(&p, k, x);
+@@
+local idexpression r;
+expression p, k, x;
+@@
+- r = set_ensure_allocated(p, k);
+- if (r < 0)
+- return ...;
+- r = set_put(*p, x);
++ r = set_ensure_put(p, k, x);
* The various EFI implementations implement the boot order/boot item logic to different levels. Some firmware implementations do not offer a boot menu at all and instead unconditionally follow the EFI boot order, booting the first item that is working.
* If the firmware setup is used to reset all data usually all EFI boot entries are lost, making the system entirely unbootable, as the firmware setups generally do not offer a UI to define additional boot items. By placing the menu item information on disk, it is always available, regardless if the BIOS setup data is lost.
-* Harddisk images should be moveable between machines and be bootable without requiring explicit EFI variables to be set. This also requires that the list of boot options is defined on disk, and not in EFI variables alone.
+* Harddisk images should be movable between machines and be bootable without requiring explicit EFI variables to be set. This also requires that the list of boot options is defined on disk, and not in EFI variables alone.
* EFI is not universal yet (especially on non-x86 platforms), this specification is useful both for EFI and non-EFI boot loaders.
* Many EFI systems disable USB support during early boot to optimize boot times, thus making keyboard input unavailable in the EFI menu. It is thus useful if the OS UI has a standardized way to discover available boot options which can be booted to.
hence we might want to call it "big endian" right-away.
- Please never use `dup()`. Use `fcntl(fd, F_DUPFD_CLOEXEC, 3)` instead. For
- two reason: first, you want `O_CLOEXEC` set on the new `fd` (see
+ two reasons: first, you want `O_CLOEXEC` set on the new `fd` (see
above). Second, `dup()` will happily duplicate your `fd` as 0, 1, 2,
i.e. stdin, stdout, stderr, should those `fd`s be closed. Given the special
semantics of those `fd`s, it's probably a good idea to avoid
### Older downstream versions
For older versions that are still supported by your distribution please use respective downstream tracker:
* **Fedora** - [bugzilla](https://bugzilla.redhat.com/enter_bug.cgi?product=Fedora&component=systemd)
-* **RHEL-7/CentOS-7** - [bugzilla](https://bugzilla.redhat.com/enter_bug.cgi?product=Red%20Hat%20Enterprise%20Linux%207&component=systemd) or [systemd-rhel github](https://github.com/lnykryn/systemd-rhel/issues)
+* **RHEL/CentOS** - [bugzilla](https://bugzilla.redhat.com/) or [systemd-rhel github](https://github.com/systemd-rhel/)
* **Debian** - [bugs.debian.org](https://bugs.debian.org/cgi-bin/pkgreport.cgi?pkg=systemd)
## Security vulnerability reports
is encouraged.
* The RANDOM should be a string of random characters to ensure that multiple instances
of the application can be launched.
- It can be ommitted in the case of a non-transient application services which can ensure
+ It can be omitted in the case of a non-transient application services which can ensure
multiple instances are not spawned, such as a DBus activated application.
* If no application ID is available, the launcher should generate a reasonable
name when possible (e.g. using `basename(argv[0])`). This name must not
example for allowing a multi-purpose USB stick that contains both a home
directory and a generic storage volume.)
-Rationale for including the encrypted user record in the the LUKS2 header:
+Rationale for including the encrypted user record in the LUKS2 header:
Linux kernel file system implementations are generally not robust towards
maliciously formatted file systems; there's a good chance that file system
images can be used as attack vectors, exploiting the kernel. Thus it is
optionally followed (in `argv[2]`, `argv[3]`, … systemd's original command
line options, for example `--log-level=` and similar.
-* Storage daemons run from the initrd should follow the the guide on [systemd
+* Storage daemons run from the initrd should follow the guide on [systemd
and Storage Daemons for the Root File
System](https://systemd.io/ROOT_STORAGE_DAEMONS) to survive properly from the
boot initrd all the way to the point where systemd jumps back into the initrd
--- /dev/null
+---
+title: Journal File Format
+category: Interfaces
+layout: default
+---
+
+# Journal File Format
+
+_Note that this document describes the binary on-disk format of journals
+only. For interfacing with web technologies there's the [Journal JSON
+Format](http://www.freedesktop.org/wiki/Software/systemd/json). For transfer
+of journal data across the network there's the [Journal Export
+Format](http://www.freedesktop.org/wiki/Software/systemd/export)._
+
+The systemd journal stores log data in a binary format with several features:
+
+* Fully indexed by all fields
+* Can store binary data, up to 2^64-1 in size
+* Seekable
+* Primarily append-based, hence robust to corruption
+* Support for in-line compression
+* Support for in-line Forward Secure Sealing
+
+This document explains the basic structure of the file format on disk. We are
+making this available primarily to allow review and provide documentation. Note
+that the actual implementation in the [systemd
+codebase](https://github.com/systemd/systemd/blob/master/src/journal/) is the
+only ultimately authoritative description of the format, so if this document
+and the code disagree, the code is right. That said we'll of course try hard to
+keep this document up-to-date and accurate.
+
+Instead of implementing your own reader or writer for journal files we ask you
+to use the [Journal's native C
+API](http://www.freedesktop.org/software/systemd/man/sd-journal.html) to access
+these files. It provides you with full access to the files, and will not
+withhold any data. If you find a limitation, please ping us and we might add
+some additional interfaces for you.
+
+If you need access to the raw journal data in serialized stream form without C
+API our recommendation is to make use of the [Journal Export
+Format](http://www.freedesktop.org/wiki/Software/systemd/export), which you can
+get via "journalctl -o export" or via systemd-journal-gatewayd. The export
+format is much simpler to parse, but complete and accurate. Due to its
+stream-based nature it is not indexed.
+
+_Or, to put this in other words: this low-level document is probably not what
+you want to use as base of your project. You want our [C
+API](http://www.freedesktop.org/software/systemd/man/sd-journal.html) instead!
+And if you really don't want the C API, then you want the [Journal Export
+Format](http://www.freedesktop.org/wiki/Software/systemd/export) instead! This
+document is primarily for your entertainment and education. Thank you!_
+
+This document assumes you have a basic understanding of the journal concepts,
+the properties of a journal entry and so on. If not, please go and read up,
+then come back! This is a good opportunity to read about the [basic properties
+of journal
+entries](http://www.freedesktop.org/software/systemd/man/systemd.journal-fields.html),
+in particular realize that they may include binary non-text data (though
+usually don't), and the same field might have multiple values assigned within
+the same entry.
+
+This document describes the current format of systemd 246. The documented
+format is compatible with the format used in the first versions of the journal,
+but received various compatible and incompatible additions since.
+
+If you are wondering why the journal file format has been created in the first
+place instead of adopting an existing database implementation, please have a
+look [at this
+thread](https://lists.freedesktop.org/archives/systemd-devel/2012-October/007054.html).
+
+
+## Basics
+
+* All offsets, sizes, time values, hashes (and most other numeric values) are 64bit unsigned integers in LE format.
+* Offsets are always relative to the beginning of the file.
+* The 64bit hash function siphash24 is used for newer journal files. For older files [Jenkins lookup3](https://en.wikipedia.org/wiki/Jenkins_hash_function) is used, more specifically `jenkins_hashlittle2()` with the first 32bit integer it returns as higher 32bit part of the 64bit value, and the second one uses as lower 32bit part.
+* All structures are aligned to 64bit boundaries and padded to multiples of 64bit
+* The format is designed to be read and written via memory mapping using multiple mapped windows.
+* All time values are stored in usec since the respective epoch.
+* Wall clock time values are relative to the Unix time epoch, i.e. January 1st, 1970. (`CLOCK_REALTIME`)
+* Monotonic time values are always stored jointly with the kernel boot ID value (i.e. `/proc/sys/kernel/random/boot_id`) they belong to. They tend to be relative to the start of the boot, but aren't for containers. (`CLOCK_MONOTONIC`)
+* Randomized, unique 128bit IDs are used in various locations. These are generally UUID v4 compatible, but this is not a requirement.
+
+## General Rules
+
+If any kind of corruption is noticed by a writer it should immediately rotate
+the file and start a new one. No further writes should be attempted to the
+original file, but it should be left around so that as little data as possible
+is lost.
+
+If any kind of corruption is noticed by a reader it should try hard to handle
+this gracefully, such as skipping over the corrupted data, but allowing access
+to as much data around it as possible.
+
+A reader should verify all offsets and other data as it reads it. This includes
+checking for alignment and range of offsets in the file, especially before
+trying to read it via a memory map.
+
+A reader must interleave rotated and corrupted files as good as possible and
+present them as single stream to the user.
+
+All fields marked as "reserved" must be initialized with 0 when writing and be
+ignored on reading. They are currently not used but might be used later on.
+
+
+## Structure
+
+The file format's data structures are declared in
+[journal-def.h](https://github.com/systemd/systemd/blob/master/src/journal/journal-def.h).
+
+The file format begins with a header structure. After the header structure
+object structures follow. Objects are appended to the end as time
+progresses. Most data stored in these objects is not altered anymore after
+having been written once, with the exception of records necessary for
+indexing. When new data is appended to a file the writer first writes all new
+objects to the end of the file, and then links them up at front after that's
+done. Currently, seven different object types are known:
+
+```c
+enum {
+ OBJECT_UNUSED,
+ OBJECT_DATA,
+ OBJECT_FIELD,
+ OBJECT_ENTRY,
+ OBJECT_DATA_HASH_TABLE,
+ OBJECT_FIELD_HASH_TABLE,
+ OBJECT_ENTRY_ARRAY,
+ OBJECT_TAG,
+ _OBJECT_TYPE_MAX
+};
+```
+
+* A **DATA** object, which encapsulates the contents of one field of an entry, i.e. a string such as `_SYSTEMD_UNIT=avahi-daemon.service`, or `MESSAGE=Foobar made a booboo.` but possibly including large or binary data, and always prefixed by the field name and "=".
+* A **FIELD** object, which encapsulates a field name, i.e. a string such as `_SYSTEMD_UNIT` or `MESSAGE`, without any `=` or even value.
+* An **ENTRY** object, which binds several **DATA** objects together into a log entry.
+* A **DATA_HASH_TABLE** object, which encapsulates a hash table for finding existing **DATA** objects.
+* A **FIELD_HASH_TABLE** object, which encapsulates a hash table for finding existing **FIELD** objects.
+* An **ENTRY_ARRAY** object, which encapsulates a sorted array of offsets to entries, used for seeking by binary search.
+* A **TAG** object, consisting of an FSS sealing tag for all data from the beginning of the file or the last tag written (whichever is later).
+
+## Header
+
+The Header struct defines, well, you guessed it, the file header:
+
+```c
+_packed_ struct Header {
+ uint8_t signature[8]; /* "LPKSHHRH" */
+ le32_t compatible_flags;
+ le32_t incompatible_flags;
+ uint8_t state;
+ uint8_t reserved[7];
+ sd_id128_t file_id;
+ sd_id128_t machine_id;
+ sd_id128_t boot_id; /* last writer */
+ sd_id128_t seqnum_id;
+ le64_t header_size;
+ le64_t arena_size;
+ le64_t data_hash_table_offset;
+ le64_t data_hash_table_size;
+ le64_t field_hash_table_offset;
+ le64_t field_hash_table_size;
+ le64_t tail_object_offset;
+ le64_t n_objects;
+ le64_t n_entries;
+ le64_t tail_entry_seqnum;
+ le64_t head_entry_seqnum;
+ le64_t entry_array_offset;
+ le64_t head_entry_realtime;
+ le64_t tail_entry_realtime;
+ le64_t tail_entry_monotonic;
+ /* Added in 187 */
+ le64_t n_data;
+ le64_t n_fields;
+ /* Added in 189 */
+ le64_t n_tags;
+ le64_t n_entry_arrays;
+ /* Added in 246 */
+ le64_t data_hash_chain_depth;
+ le64_t field_hash_chain_depth;
+};
+```
+
+The first 8 bytes of Journal files must contain the ASCII characters `LPKSHHRH`.
+
+If a writer finds that the **machine_id** of a file to write to does not match
+the machine it is running on it should immediately rotate the file and start a
+new one.
+
+When journal file is first created the **file_id** is randomly and uniquely
+initialized.
+
+When a writer opens a file it shall initialize the **boot_id** to the current
+boot id of the system.
+
+The currently used part of the file is the **header_size** plus the
+**arena_size** field of the header. If a writer needs to write to a file where
+the actual file size on disk is smaller than the reported value it shall
+immediately rotate the file and start a new one. If a writer is asked to write
+to a file with a header that is shorter than his own definition of the struct
+Header, he shall immediately rotate the file and start a new one.
+
+The **n_objects** field contains a counter for objects currently available in
+this file. As objects are appended to the end of the file this counter is
+increased.
+
+The first object in the file starts immediately after the header. The last
+object in the file is at the offset **tail_object_offset**, which may be 0 if
+no object is in the file yet.
+
+The **n_entries**, **n_data**, **n_fields**, **n_tags**, **n_entry_arrays** are
+counters of the objects of the specific types.
+
+**tail_entry_seqnum** and **head_entry_seqnum** contain the sequential number
+(see below) of the last or first entry in the file, respectively, or 0 if no
+entry has been written yet.
+
+**tail_entry_realtime** and **head_entry_realtime** contain the wallclock
+timestamp of the last or first entry in the file, respectively, or 0 if no
+entry has been written yet.
+
+**tail_entry_monotonic** is the monotonic timestamp of the last entry in the
+file, referring to monotonic time of the boot identified by **boot_id**.
+
+**data_hash_chain_depth** is a counter of the deepest chain in the data hash
+table, minus one. This is updated whenever a chain is found that is longer than
+the previous deepest chain found. Note that the counter is updated during hash
+table lookups, as the chains are traversed. This counter is used to determine
+when it is a good time to rotate the journal file, because hash collisions
+became too frequent.
+
+Similar, **field_hash_chain_depth** is a counter of the deepest chain in the
+field hash table, minus one.
+
+
+## Extensibility
+
+The format is supposed to be extensible in order to enable future additions of
+features. Readers should simply skip objects of unknown types as they read
+them. If a compatible feature extension is made a new bit is registered in the
+header's **compatible_flags** field. If a feature extension is used that makes
+the format incompatible a new bit is registered in the header's
+**incompatible_flags** field. Readers should check these two bit fields, if
+they find a flag they don't understand in compatible_flags they should continue
+to read the file, but if they find one in **incompatible_flags** they should
+fail, asking for an update of the software. Writers should refuse writing if
+there's an unknown bit flag in either of these fields.
+
+The file header may be extended as new features are added. The size of the file
+header is stored in the header. All header fields up to **n_data** are known to
+unconditionally exist in all revisions of the file format, all fields starting
+with **n_data** needs to be explicitly checked for via a size check, since they
+were additions after the initial release.
+
+Currently only five extensions flagged in the flags fields are known:
+
+```c
+enum {
+ HEADER_INCOMPATIBLE_COMPRESSED_XZ = 1 << 0,
+ HEADER_INCOMPATIBLE_COMPRESSED_LZ4 = 1 << 1,
+ HEADER_INCOMPATIBLE_KEYED_HASH = 1 << 2,
+ HEADER_INCOMPATIBLE_COMPRESSED_ZSTD = 1 << 3,
+};
+
+enum {
+ HEADER_COMPATIBLE_SEALED = 1 << 0,
+};
+```
+
+HEADER_INCOMPATIBLE_COMPRESSED_XZ indicates that the file includes DATA objects
+that are compressed using XZ. Similarly, HEADER_INCOMPATIBLE_COMPRESSED_LZ4
+indicates that the file includes DATA objects that are compressed with the LZ4
+algorithm. And HEADER_INCOMPATIBLE_COMPRESSED_ZSTD indicates that there are
+objects compressed with ZSTD.
+
+HEADER_INCOMPATIBLE_KEYED_HASH indicates that instead of the unkeyed Jenkins
+hash function the keyed siphash24 hash function is used for the two hash
+tables, see below.
+
+HEADER_COMPATIBLE_SEALED indicates that the file includes TAG objects required
+for Forward Secure Sealing.
+
+
+## Dirty Detection
+
+```c
+enum {
+ STATE_OFFLINE = 0,
+ STATE_ONLINE = 1,
+ STATE_ARCHIVED = 2,
+ _STATE_MAX
+};
+```
+
+If a file is opened for writing the **state** field should be set to
+STATE_ONLINE. If a file is closed after writing the **state** field should be
+set to STATE_OFFLINE. After a file has been rotated it should be set to
+STATE_ARCHIVED. If a writer is asked to write to a file that is not in
+STATE_OFFLINE it should immediately rotate the file and start a new one,
+without changing the file.
+
+After and before the state field is changed `fdatasync()` should be executed on
+the file to ensure the dirty state hits disk.
+
+
+## Sequence Numbers
+
+All entries carry sequence numbers that are monotonically counted up for each
+entry (starting at 1) and are unique among all files which carry the same
+**seqnum_id** field. This field is randomly generated when the journal daemon
+creates its first file. All files generated by the same journal daemon instance
+should hence carry the same seqnum_id. This should guarantee a monotonic stream
+of sequential numbers for easy interleaving even if entries are distributed
+among several files, such as the system journal and many per-user journals.
+
+
+## Concurrency
+
+The file format is designed to be usable in a simultaneous
+single-writer/multiple-reader scenario. The synchronization model is very weak
+in order to facilitate storage on the most basic of file systems (well, the
+most basic ones that provide us with `mmap()` that is), and allow good
+performance. No file locking is used. The only time where disk synchronization
+via `fdatasync()` should be enforced is after and before changing the **state**
+field in the file header (see below). It is recommended to execute a memory
+barrier after appending and initializing new objects at the end of the file,
+and before linking them up in the earlier objects.
+
+This weak synchronization model means that it is crucial that readers verify
+the structural integrity of the file as they read it and handle invalid
+structure gracefully. (Checking what you read is a pretty good idea out of
+security considerations anyway.) This specifically includes checking offset
+values, and that they point to valid objects, with valid sizes and of the type
+and hash value expected. All code must be written with the fact in mind that a
+file with inconsistent structure might just be inconsistent temporarily, and
+might become consistent later on. Payload OTOH requires less scrutiny, as it
+should only be linked up (and hence visible to readers) after it was
+successfully written to memory (though not necessarily to disk). On non-local
+file systems it is a good idea to verify the payload hashes when reading, in
+order to avoid annoyances with `mmap()` inconsistencies.
+
+Clients intending to show a live view of the journal should use `inotify()` for
+this to watch for files changes. Since file writes done via `mmap()` do not
+result in `inotify()` writers shall truncate the file to its current size after
+writing one or more entries, which results in inotify events being
+generated. Note that this is not used as a transaction scheme (it doesn't
+protect anything), but merely for triggering wakeups.
+
+Note that inotify will not work on network file systems if reader and writer
+reside on different hosts. Readers which detect they are run on journal files
+on a non-local file system should hence not rely on inotify for live views but
+fall back to simple time based polling of the files (maybe recheck every 2s).
+
+
+## Objects
+
+All objects carry a common header:
+
+```c
+enum {
+ OBJECT_COMPRESSED_XZ = 1 << 0,
+ OBJECT_COMPRESSED_LZ4 = 1 << 1,
+ OBJECT_COMPRESSED_ZSTD = 1 << 2,
+};
+
+_packed_ struct ObjectHeader {
+ uint8_t type;
+ uint8_t flags;
+ uint8_t reserved[6];
+ le64_t size;
+ uint8_t payload[];
+};
+```
+
+The **type** field is one of the object types listed above. The **flags** field
+currently knows three flags: OBJECT_COMPRESSED_XZ, OBJECT_COMPRESSED_LZ4 and
+OBJECT_COMPRESSED_ZSTD. It is only valid for DATA objects and indicates that
+the data payload is compressed with XZ/LZ4/ZSTD. If one of the
+OBJECT_COMPRESSED_* flags is set for an object then the matching
+HEADER_INCOMPATIBLE_COMPRESSED_XZ/HEADER_INCOMPATIBLE_COMPRESSED_LZ4/HEADER_INCOMPATIBLE_COMPRESSED_ZSTD
+flag must be set for the file as well. At most one of these three bits may be
+set. The **size** field encodes the size of the object including all its
+headers and payload.
+
+
+## Data Objects
+
+```c
+_packed_ struct DataObject {
+ ObjectHeader object;
+ le64_t hash;
+ le64_t next_hash_offset;
+ le64_t next_field_offset;
+ le64_t entry_offset; /* the first array entry we store inline */
+ le64_t entry_array_offset;
+ le64_t n_entries;
+ uint8_t payload[];
+};
+```
+
+Data objects carry actual field data in the **payload[]** array, including a
+field name, a `=` and the field data. Example:
+`_SYSTEMD_UNIT=foobar.service`. The **hash** field is a hash value of the
+payload. If the `HEADER_INCOMPATIBLE_KEYED_HASH` flag is set in the file header
+this is the siphash24 hash value of the payload, keyed by the file ID as stored
+in the **file_id** field of the file header. If the flag is not set it is the
+non-keyed Jenkins hash of the payload instead. The keyed hash is preferred as
+it makes the format more robust against attackers that want to trigger hash
+collisions in the hash table.
+
+**next_hash_offset** is used to link up DATA objects in the DATA_HASH_TABLE if
+a hash collision happens (in a singly linked list, with an offset of 0
+indicating the end). **next_field_offset** is used to link up data objects with
+the same field name from the FIELD object of the field used.
+
+**entry_offset** is an offset to the first ENTRY object referring to this DATA
+object. **entry_array_offset** is an offset to an ENTRY_ARRAY object with
+offsets to other entries referencing this DATA object. Storing the offset to
+the first ENTRY object in-line is an optimization given that many DATA objects
+will be referenced from a single entry only (for example, `MESSAGE=` frequently
+includes a practically unique string). **n_entries** is a counter of the total
+number of ENTRY objects that reference this object, i.e. the sum of all
+ENTRY_ARRAYS chained up from this object, plus 1.
+
+The **payload[]** field contains the field name and date unencoded, unless
+OBJECT_COMPRESSED_XZ/OBJECT_COMPRESSED_LZ4/OBJECT_COMPRESSED_ZSTD is set in the
+`ObjectHeader`, in which case the payload is compressed with the indicated
+compression algorithm.
+
+
+## Field Objects
+
+```c
+_packed_ struct FieldObject {
+ ObjectHeader object;
+ le64_t hash;
+ le64_t next_hash_offset;
+ le64_t head_data_offset;
+ uint8_t payload[];
+};
+```
+
+Field objects are used to enumerate all possible values a certain field name
+can take in the entire journal file.
+
+The **payload[]** array contains the actual field name, without '=' or any
+field value. Example: `_SYSTEMD_UNIT`. The **hash** field is a hash value of
+the payload. As for the DATA objects, this too is either the `.file_id` keyed
+siphash24 hash of the payload, or the non-keyed Jenkins hash.
+
+**next_hash_offset** is used to link up FIELD objects in the FIELD_HASH_TABLE
+if a hash collision happens (in singly linked list, offset 0 indicating the
+end). **head_data_offset** points to the first DATA object that shares this
+field name. It is the head of a singly linked list using DATA's
+**next_field_offset** offset.
+
+
+## Entry Objects
+
+```
+_packed_ struct EntryItem {
+ le64_t object_offset;
+ le64_t hash;
+};
+
+_packed_ struct EntryObject {
+ ObjectHeader object;
+ le64_t seqnum;
+ le64_t realtime;
+ le64_t monotonic;
+ sd_id128_t boot_id;
+ le64_t xor_hash;
+ EntryItem items[];
+};
+```
+
+An ENTRY object binds several DATA objects together into one log entry, and
+includes other metadata such as various timestamps.
+
+The **seqnum** field contains the sequence number of the entry, **realtime**
+the realtime timestamp, and **monotonic** the monotonic timestamp for the boot
+identified by **boot_id**.
+
+The **xor_hash** field contains a binary XOR of the hashes of the payload of
+all DATA objects referenced by this ENTRY. This value is usable to check the
+contents of the entry, being independent of the order of the DATA objects in
+the array. Note that even for files that have the
+`HEADER_INCOMPATIBLE_KEYED_HASH` flag set (and thus siphash24 the otherwise
+used hash function) the hash function used for this field, as singular
+exception, is the Jenkins lookup3 hash function. The XOR hash value is used to
+quickly compare the contents of two entries, and to define a well-defined order
+between two entries that otherwise have the same sequence numbers and
+timestamps.
+
+The **items[]** array contains references to all DATA objects of this entry,
+plus their respective hashes (which are calculated the same way as in the DATA
+objects, i.e. keyed by the file ID).
+
+In the file ENTRY objects are written ordered monotonically by sequence
+number. For continuous parts of the file written during the same boot
+(i.e. with the same boot_id) the monotonic timestamp is monotonic too. Modulo
+wallclock time jumps (due to incorrect clocks being corrected) the realtime
+timestamps are monotonic too.
+
+
+## Hash Table Objects
+
+```c
+_packed_ struct HashItem {
+ le64_t head_hash_offset;
+ le64_t tail_hash_offset;
+};
+
+_packed_ struct HashTableObject {
+ ObjectHeader object;
+ HashItem items[];
+};
+```
+
+The structure of both DATA_HASH_TABLE and FIELD_HASH_TABLE objects are
+identical. They implement a simple hash table, which each cell containing
+offsets to the head and tail of the singly linked list of the DATA and FIELD
+objects, respectively. DATA's and FIELD's next_hash_offset field are used to
+chain up the objects. Empty cells have both offsets set to 0.
+
+Each file contains exactly one DATA_HASH_TABLE and one FIELD_HASH_TABLE
+objects. Their payload is directly referred to by the file header in the
+**data_hash_table_offset**, **data_hash_table_size**,
+**field_hash_table_offset**, **field_hash_table_size** fields. These offsets do
+_not_ point to the object headers but directly to the payloads. When a new
+journal file is created the two hash table objects need to be created right
+away as first two objects in the stream.
+
+If the hash table fill level is increasing over a certain fill level (Learning
+from Java's Hashtable for example: > 75%), the writer should rotate the file
+and create a new one.
+
+The DATA_HASH_TABLE should be sized taking into account to the maximum size the
+file is expected to grow, as configured by the administrator or disk space
+considerations. The FIELD_HASH_TABLE should be sized to a fixed size; the
+number of fields should be pretty static as it depends only on developers'
+creativity rather than runtime parameters.
+
+
+## Entry Array Objects
+
+
+```c
+_packed_ struct EntryArrayObject {
+ ObjectHeader object;
+ le64_t next_entry_array_offset;
+ le64_t items[];
+};
+```
+
+Entry Arrays are used to store a sorted array of offsets to entries. Entry
+arrays are strictly sorted by offsets on disk, and hence by their timestamps
+and sequence numbers (with some restrictions, see above).
+
+Entry Arrays are chained up. If one entry array is full another one is
+allocated and the **next_entry_array_offset** field of the old one pointed to
+it. An Entry Array with **next_entry_array_offset** set to 0 is the last in the
+list. To optimize allocation and seeking, as entry arrays are appended to a
+chain of entry arrays they should increase in size (double).
+
+Due to being monotonically ordered entry arrays may be searched with a binary
+search (bisection).
+
+One chain of entry arrays links up all entries written to the journal. The
+first entry array is referenced in the **entry_array_offset** field of the
+header.
+
+Each DATA object also references an entry array chain listing all entries
+referencing a specific DATA object. Since many DATA objects are only referenced
+by a single ENTRY the first offset of the list is stored inside the DATA object
+itself, an ENTRY_ARRAY object is only needed if it is referenced by more than
+one ENTRY.
+
+
+## Tag Object
+
+```c
+#define TAG_LENGTH (256/8)
+
+_packed_ struct TagObject {
+ ObjectHeader object;
+ le64_t seqnum;
+ le64_t epoch;
+ uint8_t tag[TAG_LENGTH]; /* SHA-256 HMAC */
+};
+```
+
+Tag objects are used to seal off the journal for alteration. In regular
+intervals a tag object is appended to the file. The tag object consists of a
+SHA-256 HMAC tag that is calculated from the objects stored in the file since
+the last tag was written, or from the beginning if no tag was written yet. The
+key for the HMAC is calculated via the externally maintained FSPRG logic for
+the epoch that is written into **epoch**. The sequence number **seqnum** is
+increased with each tag. When calculating the HMAC of objects header fields
+that are volatile are excluded (skipped). More specifically all fields that
+might validly be altered to maintain a consistent file structure (such as
+offsets to objects added later for the purpose of linked lists and suchlike)
+after an object has been written are not protected by the tag. This means a
+verifier has to independently check these fields for consistency of
+structure. For the fields excluded from the HMAC please consult the source code
+directly. A verifier should read the file from the beginning to the end, always
+calculating the HMAC for the objects it reads. Each time a tag object is
+encountered the HMAC should be verified and restarted. The tag object sequence
+numbers need to increase strictly monotonically. Tag objects themselves are
+partially protected by the HMAC (i.e. seqnum and epoch is included, the tag
+itself not).
+
+
+## Algorithms
+
+### Reading
+
+Given an offset to an entry all data fields are easily found by following the
+offsets in the data item array of the entry.
+
+Listing entries without filter is done by traversing the list of entry arrays
+starting with the headers' **entry_array_offset** field.
+
+Seeking to an entry by timestamp or sequence number (without any matches) is
+done via binary search in the entry arrays starting with the header's
+**entry_array_offset** field. Since these arrays double in size as more are
+added the time cost of seeking is O(log(n)*log(n)) if n is the number of
+entries in the file.
+
+When seeking or listing with one field match applied the DATA object of the
+match is first identified, and then its data entry array chain traversed. The
+time cost is the same as for seeks/listings with no match.
+
+If multiple matches are applied, multiple chains of entry arrays should be
+traversed in parallel. Since they all are strictly monotonically ordered by
+offset of the entries, advancing in one can be directly applied to the others,
+until an entry matching all matches is found. In the worst case seeking like
+this is O(n) where n is the number of matching entries of the "loosest" match,
+but in the common case should be much more efficient at least for the
+well-known fields, where the set of possible field values tend to be closely
+related. Checking whether an entry matches a number of matches is efficient
+since the item array of the entry contains hashes of all data fields
+referenced, and the number of data fields of an entry is generally small (<
+30).
+
+When interleaving multiple journal files seeking tends to be a frequently used
+operation, but in this case can be effectively suppressed by caching results
+from previous entries.
+
+When listing all possible values a certain field can take it is sufficient to
+look up the FIELD object and follow the chain of links to all DATA it includes.
+
+### Writing
+
+When an entry is appended to the journal for each of its data fields the data
+hash table should be checked. If the data field does not yet exist in the file
+it should be appended and added to the data hash table. When a field data
+object is added the field hash table should be checked for the field name of
+the data field, and a field object be added if necessary. After all data fields
+(and recursively all field names) of the new entry are appended and linked up
+in the hashtables the entry object should be appended and linked up too.
+
+In regular intervals a tag object should be written if sealing is enabled (see
+above). Before the file is closed a tag should be written too, to seal it off.
+
+Before writing an object, time and disk space limits should be checked and
+rotation triggered if necessary.
+
+
+## Optimizing Disk IO
+
+_A few general ideas to keep in mind:_
+
+The hash tables for looking up fields and data should be quickly in the memory
+cache and not hurt performance. All entries and entry arrays are ordered
+strictly by time on disk, and hence should expose an OK access pattern on
+rotating media, when read sequentially (which should be the most common case,
+given the nature of log data).
+
+The disk access patterns of the binary search for entries needed for seeking
+are problematic on rotating disks. This should not be a major issue though,
+since seeking should not be a frequent operation.
+
+When reading, collecting data fields for presenting entries to the user is
+problematic on rotating disks. In order to optimize these patterns the item
+array of entry objects should be sorted by disk offset before
+writing. Effectively, frequently used data objects should be in the memory
+cache quickly. Non-frequently used data objects are likely to be located
+between the previous and current entry when reading and hence should expose an
+OK access pattern. Problematic are data objects that are neither frequently nor
+infrequently referenced, which will cost seek time.
+
+And that's all there is to it.
+
+Thanks for your interest!
| [Unit file format](https://www.freedesktop.org/software/systemd/man/systemd.unit.html) | File format | yes | yes | numerous | no | - | no |
| [Network](https://www.freedesktop.org/software/systemd/man/systemd.network.html) & [Netdev file format](https://www.freedesktop.org/software/systemd/man/systemd.netdev.html) | File format | yes | yes | no | no | - | no |
| [Link file format](https://www.freedesktop.org/software/systemd/man/systemd.link.html) | File format | yes | yes | no | no | - | no |
-| [Journal File Format](https://www.freedesktop.org/wiki/Software/systemd/journal-files) | File format | yes | yes | - | maybe | - | no |
+| [Journal File Format](https://systemd.io/JOURNAL_FILE_FORMAT) | File format | yes | yes | - | maybe | - | no |
| [Journal Export Format](https://www.freedesktop.org/wiki/Software/systemd/export) | File format | yes | yes | - | yes | - | no |
| [Cooperation in cgroup tree](https://www.freedesktop.org/wiki/Software/systemd/PaxControlGroups) | Treaty | yes | yes | libvirt | yes | libvirt | no |
| [Password Agents](https://www.freedesktop.org/wiki/Software/systemd/PasswordAgents) | Socket+Files | yes | yes | - | yes | - | no |
* systemd maintains various hash tables internally. In order to harden them
against [collision
- attacks](https://rt.perl.org/Public/Bug/Display.html?CSRF_Token=165691af9ddaa95f653402f1b68de728)
+ attacks](https://www.cs.auckland.ac.nz/~mcw/Teaching/refs/misc/denial-of-service.pdf)
they are seeded with random numbers.
* At various places systemd needs random bytes for temporary file name
random-seed`](https://www.freedesktop.org/software/systemd/man/bootctl.html#random-seed))
a seed file with an initial seed is placed in a file `/loader/random-seed`
in the ESP. In addition, an identically sized randomized EFI variable called
- the the 'system token' is set, which is written to the machine's firmware
- NVRAM. During boot, when `systemd-boot` finds both the random seed file and
- the system token they are combined and hashed with SHA256 (in counter mode,
- to generate sufficient data), to generate a new random seed file to store in
+ the 'system token' is set, which is written to the machine's firmware NVRAM.
+ During boot, when `systemd-boot` finds both the random seed file and the
+ system token they are combined and hashed with SHA256 (in counter mode, to
+ generate sufficient data), to generate a new random seed file to store in
the ESP as well as a random seed to pass to the OS kernel. The new random
seed file for the ESP is then written to the ESP, ensuring this is completed
before the OS is invoked. Very early during initialization PID 1 will read
file. If done, `systemd-boot` will use the random seed file even if no
system token is found in EFI variables.
-With the three mechanisms described above it should be possible to provide
+4. A kernel command line option `systemd.random_seed=` may be used to pass in a
+ base64 encoded seed to initialize the kernel's entropy pool from during
+ early service manager initialization. This option is only safe in testing
+ environments, as the random seed passed this way is accessible to
+ unprivileged programs via `/proc/cmdline`. Using this option outside of
+ testing environments is a security problem since cryptographic key material
+ derived from the entropy pool initialized with a seed accessible to
+ unprivileged programs should not be considered secret.
+
+With the four mechanisms described above it should be possible to provide
early-boot entropy in most cases. Specifically:
1. On EFI systems, `systemd-boot`'s random seed logic should make sure good
2. On virtualized systems, the early `virtio-rng` hookup should ensure entropy
is available early on — as long as the VM environment provides virtualized
RNG devices, which they really should all do in 2019. Complain to your
- hosting provider if they don't.
+ hosting provider if they don't. For VMs used in testing environments,
+ `systemd.random_seed=` may be used as an alternative to a virtualized RNG.
3. On Intel/AMD systems systemd's own reliance on the kernel entropy pool is
minimal (as RDRAND is used on those for UUID generation). This only works if
boot. Alternatively, consider implementing a solution similar to
systemd-boot's random seed concept in your platform's boot loader.
-2. Virtualized environments that lack both virtio-rng and RDRAND. Tough
- luck. Talk to your hosting provider, and ask them to fix this.
+2. Virtualized environments that lack both virtio-rng and RDRAND, outside of
+ test environments. Tough luck. Talk to your hosting provider, and ask them
+ to fix this.
3. Also note: if you deploy an image without any random seed and/or without
installing any 'system token' in an EFI variable, as described above, this
information to possibly gain too much information about the current state
of the kernel's entropy pool.
+ That said, we actually do implement this with the `systemd.random_seed=`
+ kernel command line option. Don't use this outside of testing environments,
+ however, for the aforementioned reasons.
+
12. *Why doesn't `systemd-boot` rewrite the 'system token' too each time
when updating the random seed file stored in the ESP?*
✓ RestrictRealtime=
✓ RestrictSUIDSGID=
✓ RestrictAddressFamilies=
+✓ RootHash=
+✓ RootHashSignature=
+✓ RootVerity=
✓ LockPersonality=
✓ LimitCPU=
✓ LimitFSIZE=
Most service unit settings are available for transient units.
```
-✓ PIDFile=
+✓ BusName=
✓ ExecCondition=
-✓ ExecStartPre=
+✓ ExecReload=
✓ ExecStart=
✓ ExecStartPost=
-✓ ExecReload=
+✓ ExecStartPre=
✓ ExecStop=
✓ ExecStopPost=
-✓ RestartSec=
-✓ TimeoutStartSec=
-✓ TimeoutStopSec=
-✓ TimeoutAbortSec=
-✓ TimeoutSec=
-✓ RuntimeMaxSec=
-✓ WatchdogSec=
-✓ Type=
-✓ Restart=
-✓ RootDirectoryStartOnly=
-✓ RemainAfterExit=
+✓ FileDescriptorStoreMax=
✓ GuessMainPID=
-✓ RestartPreventExitStatus=
-✓ RestartForceExitStatus=
-✓ SuccessExitStatus=
✓ NonBlocking=
-✓ BusName=
-✓ FileDescriptorStoreMax=
✓ NotifyAccess=
+✓ OOMPolicy=
+✓ PIDFile=
+✓ RemainAfterExit=
+✓ Restart=
+✓ RestartForceExitStatus=
+✓ RestartPreventExitStatus=
+✓ RestartSec=
+✓ RootDirectoryStartOnly=
+✓ RuntimeMaxSec=
Sockets=
+✓ SuccessExitStatus=
+✓ TimeoutAbortSec=
+✓ TimeoutSec=
+✓ TimeoutStartFailureMode=
+✓ TimeoutStartSec=
+✓ TimeoutStopFailureMode=
+✓ TimeoutStopSec=
+✓ Type=
✓ USBFunctionDescriptors=
✓ USBFunctionStrings=
-✓ OOMPolicy=
+✓ WatchdogSec=
```
## Mount Unit Settings
names. An additional, common rule between both modes listed below is that empty
strings are not valid user/group names.
-Philosophically, the strict mode described below enforces a white-list of what's
-allowed and prohibits everything else, while the relaxed mode described below
-implements a blacklist of what's not allowed and permits everything else.
+Philosophically, the strict mode described below enforces an allow list of
+what's allowed and prohibits everything else, while the relaxed mode described
+below implements a deny list of what's not allowed and permits everything else.
### Strict mode
`perMachine` or `binding` sections and can include its data exclusively in the
regular section. A service that uses a separate, private channel for
authenticating users (or that doesn't have a concept of authentication at all)
-does not need to to be concerned with the `secret` section of user records, as
+does not need to be concerned with the `secret` section of user records, as
the fields included therein are only useful when executing authentication
operations natively against JSON user records.
access mask for the home directory when it is first created.
`tasksMax` → Takes an unsigned 64bit integer indicating the maximum number of
-tasks the user may start in parallel during system runtime. This value is
-enforced on all tasks (i.e. processes and threads) the user starts or that are
-forked off these processes regardless if the change user identity (for example
-by setuid binaries/`su`/`sudo` and
-similar). [`systemd-logind.service`](https://www.freedesktop.org/software/systemd/man/systemd-logind.service.html)
+tasks the user may start in parallel during system runtime. This counts
+all tasks (i.e. threads, where each process is at least one thread) the user starts or that are
+forked from these processes even if the user identity is changed (for example
+by setuid binaries/`su`/`sudo` and similar).
+[`systemd-logind.service`](https://www.freedesktop.org/software/systemd/man/systemd-logind.service.html)
enforces this by setting the `TasksMax` slice property for the user's slice
`user-$UID.slice`.
against all plugged in security tokens and if there's exactly one matching
private key found with it it is used.
+`fido2HmacCredential` → An array of strings, each with a Base64-encoded FIDO2
+credential ID that shell be used for authentication with FIDO2 devices that
+implement the `hmac-secret` extension. The salt to pass to the FIDO2 device is
+found in `fido2HmacSalt`.
+
`privileged` → An object, which contains the fields of the `privileged` section
of the user record, see below.
`pkcs11EncryptedKey` → An array of objects. Each element of the array should be
an object consisting of three string fields: `uri` shall contain a PKCS#11
-security token URI, `data` shall contain a Base64 encoded encrypted key and
+security token URI, `data` shall contain a Base64-encoded encrypted key and
`hashedPassword` shall contain a UNIX password hash to test the key
against. Authenticating with a security token against this account shall work
as follows: the encrypted secret key is converted from its Base64
function of the PKCS#11 module referenced by the specified URI, using the
private key found on the same token. The resulting decrypted key is then
Base64-encoded and tested against the specified UNIX hashed password. The
-Base64-enceded decrypted key may also be used to unlock further resources
+Base64-encoded decrypted key may also be used to unlock further resources
during log-in, for example the LUKS or `fscrypt` storage backend. It is
generally recommended that for each entry in `pkcs11EncryptedKey` there's also
a matching one in `pkcs11TokenUri` and vice versa, with the same URI, appearing
in the same order, but this should not be required by applications processing
user records.
+`fido2HmacSalt` → An array of objects, implementing authentication support with
+FIDO2 devices that implement the `hmac-secret` extension. Each element of the
+array should be an object consisting of three string fields: `credential`,
+`salt`, `hashedPassword`. The first two shall contain Base64-encoded binary
+data: the FIDO2 credential ID and the salt value to pass to the FIDO2
+device. During authentication this salt along with the credential ID is sent to
+the FIDO2 token, which will HMAC hash the salt with its internal secret key and
+return the result. This resulting binary key should then be Base64-encoded and
+used as string password for the further layers of the stack. The
+`hashedPassword` field of the `fido2HmacSalt` field shall be a UNIX password
+hash to test this derived secret key against for authentication. It is
+generally recommended that for each entry in `fido2HmacSalt` there's also a
+matching one in `fido2HmacCredential`, and vice versa, with the same credential
+ID, appearing in the same order, but this should not be required by
+applications processing user records.
+
## Fields in the `perMachine` section
As mentioned, the `perMachine` section contains settings that shall apply to
`mountNoDevices`, `mountNoSuid`, `mountNoExecute`, `cifsDomain`,
`cifsUserName`, `cifsService`, `imagePath`, `uid`, `gid`, `memberOf`,
`fileSystemType`, `partitionUuid`, `luksUuid`, `fileSystemUuid`, `luksDiscard`,
-`luksOfflineDiscard`, `luksOfflineDiscard`, `luksCipher`, `luksCipherMode`,
-`luksVolumeKeySize`, `luksPbkdfHashAlgorithm`, `luksPbkdfType`,
-`luksPbkdfTimeCostUSec`, `luksPbkdfMemoryCost`, `luksPbkdfParallelThreads`,
-`rateLimitIntervalUSec`, `rateLimitBurst`, `enforcePasswordPolicy`,
-`autoLogin`, `stopDelayUSec`, `killProcesses`, `passwordChangeMinUSec`,
-`passwordChangeMaxUSec`, `passwordChangeWarnUSec`,
-`passwordChangeInactiveUSec`, `passwordChangeNow`, `pkcs11TokenUri`.
+`luksOfflineDiscard`, `luksCipher`, `luksCipherMode`, `luksVolumeKeySize`,
+`luksPbkdfHashAlgorithm`, `luksPbkdfType`, `luksPbkdfTimeCostUSec`,
+`luksPbkdfMemoryCost`, `luksPbkdfParallelThreads`, `rateLimitIntervalUSec`,
+`rateLimitBurst`, `enforcePasswordPolicy`, `autoLogin`, `stopDelayUSec`,
+`killProcesses`, `passwordChangeMinUSec`, `passwordChangeMaxUSec`,
+`passwordChangeWarnUSec`, `passwordChangeInactiveUSec`, `passwordChangeNow`,
+`pkcs11TokenUri`, `fido2HmacCredential`.
## Fields in the `binding` section
The `signature` field in the top-level user record object is an array of
objects. Each object encapsulates one signature and has two fields: `data` and
`key` (both are strings). The `data` field contains the actual signature,
-encoded in base64, the `key` field contains a copy of the public key whose
+encoded in Base64, the `key` field contains a copy of the public key whose
private key was used to make the signature, in PEM format. Currently only
signatures with Ed25519 keys are defined.
`password` → an array of strings, each containing a plain text password.
-`pkcs11Pin` → an array of strings, each containing a plain text PIN, suitable
-for unlocking PKCS#11 security tokens that require that.
+`tokenPin` → an array of strings, each containing a plain text PIN, suitable
+for unlocking security tokens that require that. (The field `pkcs11Pin` should
+be considered a compatibility alias for this field, and merged with `tokenPin`
+in case both are set.)
`pkcs11ProtectedAuthenticationPathPermitted` → a boolean. If set to true allows
the receiver to use the PKCS#11 "protected authentication path" (i.e. a
physical button/touch element on the security token) for authenticating the
-user. If false or unset authentication this way shall not be attempted.
+user. If false or unset, authentication this way shall not be attempted.
+
+`fido2UserPresencePermitted` → a boolean. If set to true allows the receiver to
+use the FIDO2 "user presence" flag. This is similar to the concept of
+`pkcs11ProtectedAuthenticationPathPermitted`, but exposes the FIDO2 concept
+behind it. If false or unset authentication this way shall not be attempted.
## Mapping to `struct passwd` and `struct spwd`
ID_OUI_FROM_DATABASE=ICANN, IANA Department
OUI:00005F*
- ID_OUI_FROM_DATABASE=Sumitomo Electric Industries,Ltd
+ ID_OUI_FROM_DATABASE=Sumitomo Electric Industries, Ltd
OUI:000060*
ID_OUI_FROM_DATABASE=KONTRON ELEKTRONIK GMBH
ID_OUI_FROM_DATABASE=Arelnet Ltd.
OUI:0002C4*
- ID_OUI_FROM_DATABASE=Vector International BVBA
+ ID_OUI_FROM_DATABASE=OPT Machine Vision Tech Co., Ltd
OUI:0002C5*
ID_OUI_FROM_DATABASE=Evertz Microsystems Ltd.
ID_OUI_FROM_DATABASE=Logostek Co. Ltd.
OUI:0003E8*
- ID_OUI_FROM_DATABASE=Wavelength Digital Limited
+ ID_OUI_FROM_DATABASE=Wavesight Limited
OUI:0003E9*
ID_OUI_FROM_DATABASE=Akara Canada, Inc.
ID_OUI_FROM_DATABASE=VERYTECH
OUI:0005C9*
- ID_OUI_FROM_DATABASE=LG Innotek Co., Ltd.
+ ID_OUI_FROM_DATABASE=LG Innotek
OUI:0005CA*
ID_OUI_FROM_DATABASE=Hitron Technology, Inc.
ID_OUI_FROM_DATABASE=NetEngines Ltd.
OUI:00078E*
- ID_OUI_FROM_DATABASE=Garz & Friche GmbH
+ ID_OUI_FROM_DATABASE=Garz & Fricke GmbH
OUI:00078F*
ID_OUI_FROM_DATABASE=Emkay Innovative Products
ID_OUI_FROM_DATABASE=YESTECHNOLOGY Co.,Ltd.
OUI:0008F6*
- ID_OUI_FROM_DATABASE=Sumitomo Electric Industries,Ltd
+ ID_OUI_FROM_DATABASE=Sumitomo Electric Industries, Ltd
OUI:0008F7*
ID_OUI_FROM_DATABASE=Hitachi Ltd, Semiconductor & Integrated Circuits Gr
ID_OUI_FROM_DATABASE=Fujikura Solutions Ltd.
OUI:000BA2*
- ID_OUI_FROM_DATABASE=Sumitomo Electric Industries,Ltd
+ ID_OUI_FROM_DATABASE=Sumitomo Electric Industries, Ltd
OUI:000BA3*
ID_OUI_FROM_DATABASE=Siemens AG
ID_OUI_FROM_DATABASE=ALAXALA Networks Corporation
OUI:0012E3*
- ID_OUI_FROM_DATABASE=Agat-RT, Ltd.
+ ID_OUI_FROM_DATABASE=Agat Soft LLC
OUI:0012E4*
ID_OUI_FROM_DATABASE=ZIEHL industrie-electronik GmbH + Co KG
ID_OUI_FROM_DATABASE=Hewlett Packard
OUI:001636*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:001637*
ID_OUI_FROM_DATABASE=CITEL SpA
ID_OUI_FROM_DATABASE=Casa Systems Inc.
OUI:001711*
- ID_OUI_FROM_DATABASE=GE Healthcare Bio-Sciences AB
+ ID_OUI_FROM_DATABASE=Cytiva Sweden AB
OUI:001712*
ID_OUI_FROM_DATABASE=ISCO International
ID_OUI_FROM_DATABASE=Balluff GmbH
OUI:001932*
- ID_OUI_FROM_DATABASE=Gude Analog- und Digialsysteme GmbH
+ ID_OUI_FROM_DATABASE=Gude Systems GmbH
OUI:001933*
ID_OUI_FROM_DATABASE=Strix Systems, Inc.
ID_OUI_FROM_DATABASE=SimpleComTools
OUI:001B24*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:001B25*
ID_OUI_FROM_DATABASE=Nortel Networks
ID_OUI_FROM_DATABASE=ENTE Sp. z o.o.
OUI:001BC50A0*
- ID_OUI_FROM_DATABASE=HomerSoft sp. z o.o.
+ ID_OUI_FROM_DATABASE=Silvair
OUI:001BC50A1*
ID_OUI_FROM_DATABASE=Hangzhou Zhiping Technology Co., Ltd.
ID_OUI_FROM_DATABASE=Empacket Corporation
OUI:001C91*
- ID_OUI_FROM_DATABASE=Gefen Inc.
+ ID_OUI_FROM_DATABASE=Gefen LLC
OUI:001C92*
ID_OUI_FROM_DATABASE=Tervela
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:001CFC*
- ID_OUI_FROM_DATABASE=Sumitomo Electric Industries,Ltd
+ ID_OUI_FROM_DATABASE=Sumitomo Electric Industries, Ltd
OUI:001CFD*
ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
ID_OUI_FROM_DATABASE=Zipit Wireless, Inc.
OUI:001D05*
- ID_OUI_FROM_DATABASE=Eaton Corporation
+ ID_OUI_FROM_DATABASE=Cooper Lighting Solutions
OUI:001D06*
ID_OUI_FROM_DATABASE=HM Electronics, Inc.
ID_OUI_FROM_DATABASE=Shireen Inc
OUI:001E31*
- ID_OUI_FROM_DATABASE=INFOMARK CO.,LTD.
+ ID_OUI_FROM_DATABASE=infomark
OUI:001E32*
ID_OUI_FROM_DATABASE=Zensys
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:001E68*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:001E69*
ID_OUI_FROM_DATABASE=Thomson Inc.
ID_OUI_FROM_DATABASE=Cryptsoft Pty Ltd
OUI:001EB2*
- ID_OUI_FROM_DATABASE=LG innotek
+ ID_OUI_FROM_DATABASE=LG Innotek
OUI:001EB3*
ID_OUI_FROM_DATABASE=Primex Wireless
ID_OUI_FROM_DATABASE=Master Industrialization Center Kista
OUI:001EE0*
- ID_OUI_FROM_DATABASE=Urmet Domus SpA
+ ID_OUI_FROM_DATABASE=Urmet SpA
OUI:001EE1*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
ID_OUI_FROM_DATABASE=Ciena Corporation
OUI:00238B*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:00238C*
ID_OUI_FROM_DATABASE=Private
ID_OUI_FROM_DATABASE=ATI Electronics(Shenzhen) Co., LTD
OUI:0025DC*
- ID_OUI_FROM_DATABASE=Sumitomo Electric Industries,Ltd
+ ID_OUI_FROM_DATABASE=Sumitomo Electric Industries, Ltd
OUI:0025DD*
ID_OUI_FROM_DATABASE=SUNNYTEK INFORMATION CO., LTD.
ID_OUI_FROM_DATABASE=M2Mnet Co., Ltd.
OUI:00269E*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:00269F*
ID_OUI_FROM_DATABASE=Private
OUI:002AAF*
ID_OUI_FROM_DATABASE=LARsys-Automation GmbH
+OUI:002B67*
+ ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
+
OUI:002CC8*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
ID_OUI_FROM_DATABASE=Basler AG
OUI:003054*
- ID_OUI_FROM_DATABASE=CASTLENET TECHNOLOGY, INC.
+ ID_OUI_FROM_DATABASE=Castlenet Technology Inc.
OUI:003055*
ID_OUI_FROM_DATABASE=Renesas Technology America, Inc.
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:0050F1*
- ID_OUI_FROM_DATABASE=Intel Corporation
+ ID_OUI_FROM_DATABASE=Maxlinear, Inc
OUI:0050F2*
ID_OUI_FROM_DATABASE=MICROSOFT CORP.
OUI:0062EC*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:0063DE*
+ ID_OUI_FROM_DATABASE=CLOUDWALK TECHNOLOGY CO.,LTD
+
OUI:006440*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:0091FA*
ID_OUI_FROM_DATABASE=Synapse Product Development
+OUI:00927D*
+ ID_OUI_FROM_DATABASE=Ficosa Internationa(Taicang) C0.,Ltd.
+
OUI:0092FA*
ID_OUI_FROM_DATABASE=SHENZHEN WISKY TECHNOLOGY CO.,LTD
OUI:00B8B3*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:00B8B6*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
OUI:00B8C2*
ID_OUI_FROM_DATABASE=Heights Telecom T ltd
OUI:00BE9E*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+OUI:00BED5*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
OUI:00BF15*
ID_OUI_FROM_DATABASE=Genetec Inc.
ID_OUI_FROM_DATABASE=CACHE COMPUTERS, INC.
OUI:00C09F*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:00C0A0*
ID_OUI_FROM_DATABASE=ADVANCE MICRO RESEARCH, INC.
ID_OUI_FROM_DATABASE=SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD
OUI:00CBBD*
- ID_OUI_FROM_DATABASE=Cambridge Broadband Networks Ltd.
+ ID_OUI_FROM_DATABASE=Cambridge Broadband Networks Group
OUI:00CC3F*
ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
ID_OUI_FROM_DATABASE=Entrada Networks
OUI:00E0B7*
- ID_OUI_FROM_DATABASE=PI GROUP, LTD.
+ ID_OUI_FROM_DATABASE=Cosworth Electronics Ltd
OUI:00E0B8*
ID_OUI_FROM_DATABASE=GATEWAY 2000
OUI:00E18C*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:00E22C*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
OUI:00E3B2*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:00E400*
ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd.
+OUI:00E406*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:00E5E4*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co., Ltd.
+
OUI:00E666*
ID_OUI_FROM_DATABASE=ARIMA Communications Corp.
OUI:0444A1*
ID_OUI_FROM_DATABASE=TELECON GALICIA,S.A.
+OUI:044562*
+ ID_OUI_FROM_DATABASE=ANDRA Sp. z o. o.
+
OUI:0445A1*
ID_OUI_FROM_DATABASE=NIRIT- Xinwei Telecom Technology Co., Ltd.
OUI:044665*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+OUI:0446CF*
+ ID_OUI_FROM_DATABASE=Beijing Venustech Cybervision Co.,Ltd.
+
OUI:04489A*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:044A6C*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:044AC6*
+ ID_OUI_FROM_DATABASE=Aipon Electronics Co., Ltd
+
OUI:044BED*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:046B25*
ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOM CO.,LTD
+OUI:046C59*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:046C9D*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
ID_OUI_FROM_DATABASE=Shenzhen Kang Ying Technology Co.Ltd.
OUI:047D7B*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
+
+OUI:047E23*
+ ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
OUI:047E4A*
ID_OUI_FROM_DATABASE=moobox CO., Ltd.
OUI:04A222*
ID_OUI_FROM_DATABASE=Arcadyan Corporation
+OUI:04A2F3*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:04A316*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:04C1B9*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+OUI:04C1D8*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:04C23E*
ID_OUI_FROM_DATABASE=HTC Corporation
OUI:04CB1D*
ID_OUI_FROM_DATABASE=Traka plc
+OUI:04CB88*
+ ID_OUI_FROM_DATABASE=Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd
+
OUI:04CE14*
ID_OUI_FROM_DATABASE=Wilocity LTD.
OUI:04F8C2*
ID_OUI_FROM_DATABASE=Flaircomm Microelectronics, Inc.
+OUI:04F8F8*
+ ID_OUI_FROM_DATABASE=Edgecore Networks Corporation
+
OUI:04F938*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:08318B*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:0831A4*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:08351B*
ID_OUI_FROM_DATABASE=Shenzhen Jialihua Electronic Technology Co., Ltd
OUI:08379C*
ID_OUI_FROM_DATABASE=Topaz Co. LTD.
+OUI:083869*
+ ID_OUI_FROM_DATABASE=Hong Kong AMobile Intelligent Corp. Limited Taiwan Branch
+
OUI:0838A5*
ID_OUI_FROM_DATABASE=Funkwerk plettac electronic GmbH
OUI:083AB8*
ID_OUI_FROM_DATABASE=Shinoda Plasma Co., Ltd.
+OUI:083AF2*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
OUI:083D88*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
ID_OUI_FROM_DATABASE=H2A Systems, LLC
OUI:084EBF*
- ID_OUI_FROM_DATABASE=Broad Net Mux Corporation
+ ID_OUI_FROM_DATABASE=Sumitomo Electric Industries, Ltd
OUI:084F0A*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:085240*
ID_OUI_FROM_DATABASE=EbV Elektronikbau- und Vertriebs GmbH
+OUI:0854BB*
+ ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+
OUI:085700*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
ID_OUI_FROM_DATABASE=SF Software Solutions
OUI:088F2C*
- ID_OUI_FROM_DATABASE=Hills Sound Vision & Lighting
+ ID_OUI_FROM_DATABASE=Amber Technology Ltd.
OUI:0890BA*
ID_OUI_FROM_DATABASE=Danlaw Inc
OUI:089B4B*
ID_OUI_FROM_DATABASE=iKuai Networks
+OUI:089BB9*
+ ID_OUI_FROM_DATABASE=Nokia
+
OUI:089C86*
ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
OUI:089E01*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:089E08*
ID_OUI_FROM_DATABASE=Google, Inc.
OUI:08ACA5*
ID_OUI_FROM_DATABASE=Benu Video, Inc.
+OUI:08ACC4*
+ ID_OUI_FROM_DATABASE=FMTech
+
OUI:08AED6*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:08B055*
ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+OUI:08B0A7*
+ ID_OUI_FROM_DATABASE=Truebeyond Co., Ltd
+
OUI:08B258*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:08E84F*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:08E9F6*
+ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
+
OUI:08EA40*
ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.,LTD
OUI:08ED02E*
ID_OUI_FROM_DATABASE=Telstra Corporation Limited
+OUI:08ED9D*
+ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
+
OUI:08EDB9*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
OUI:08F8BC*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:08FA79*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
OUI:08FAE0*
ID_OUI_FROM_DATABASE=Fohhn Audio AG
+OUI:08FBEA*
+ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
+
OUI:08FC52*
ID_OUI_FROM_DATABASE=OpenXS BV
OUI:0C3021*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:0C31DC*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:0C35FE*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
OUI:0C3956*
ID_OUI_FROM_DATABASE=Observator instruments
+OUI:0C3B50*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:0C3C65*
ID_OUI_FROM_DATABASE=Dome Imaging Inc
OUI:0C5842*
ID_OUI_FROM_DATABASE=DME Micro
+OUI:0C599C*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
OUI:0C5A19*
ID_OUI_FROM_DATABASE=Axtion Sdn Bhd
OUI:0CC81F*
ID_OUI_FROM_DATABASE=Summer Infant, Inc.
+OUI:0CC844*
+ ID_OUI_FROM_DATABASE=Cambridge Mobile Telematics, Inc.
+
OUI:0CC9C6*
ID_OUI_FROM_DATABASE=Samwin Hong Kong Limited
OUI:0CDA41*
ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+OUI:0CDC7E*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
OUI:0CDCCC*
ID_OUI_FROM_DATABASE=Inala Technologies
OUI:0CEAC9*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:0CEC80*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:0CEC84*
ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp.
OUI:1012B4*
ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOM CO.,LTD
+OUI:1012FB*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
OUI:101331*
ID_OUI_FROM_DATABASE=Technicolor
OUI:1033BF*
ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+OUI:10341B*
+ ID_OUI_FROM_DATABASE=Spacelink
+
OUI:10364A*
ID_OUI_FROM_DATABASE=Boston Dynamics
OUI:105CBF*
ID_OUI_FROM_DATABASE=DuroByte Inc
+OUI:105DDC*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:105F06*
ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
ID_OUI_FROM_DATABASE=Dell Inc.
OUI:1065A3*
- ID_OUI_FROM_DATABASE=Core Brands LLC
+ ID_OUI_FROM_DATABASE=Panamax LLC
OUI:1065CF*
ID_OUI_FROM_DATABASE=IQSIM
OUI:107223*
ID_OUI_FROM_DATABASE=TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO
+OUI:10746F*
+ ID_OUI_FROM_DATABASE=MOTOROLA SOLUTIONS MALAYSIA SDN. BHD.
+
OUI:10768A*
ID_OUI_FROM_DATABASE=EoCell
OUI:108A1B*
ID_OUI_FROM_DATABASE=RAONIX Inc.
+OUI:108B6A*
+ ID_OUI_FROM_DATABASE=Antailiye Technology Co.,Ltd
+
OUI:108CCF*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:10BAA5*
ID_OUI_FROM_DATABASE=GANA I&C CO., LTD
+OUI:10BC97*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
OUI:10BD18*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:10E6AE*
ID_OUI_FROM_DATABASE=Source Technologies, LLC
+OUI:10E77A*
+ ID_OUI_FROM_DATABASE=STMicrolectronics International NV
+
OUI:10E7C6*
ID_OUI_FROM_DATABASE=Hewlett Packard
OUI:10F681*
ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+OUI:10F920*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:10F96F*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
OUI:111111*
ID_OUI_FROM_DATABASE=Private
+OUI:14007D*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:140152*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:141357*
ID_OUI_FROM_DATABASE=ATP Electronics, Inc.
+OUI:1413FB*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:14144B*
ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
OUI:144FD7E*
ID_OUI_FROM_DATABASE=Edan Instruments, Inc.
+OUI:145120*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:145290*
ID_OUI_FROM_DATABASE=KNS Group LLC (YADRO Company)
OUI:147DC5*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+OUI:147DDA*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:14825B*
ID_OUI_FROM_DATABASE=Hefei Radio Communication Technology Co., Ltd
OUI:14C126*
ID_OUI_FROM_DATABASE=Nokia Corporation
+OUI:14C14E*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
OUI:14C1FF*
ID_OUI_FROM_DATABASE=ShenZhen QianHai Comlan communication Co.,LTD
OUI:14C697*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+OUI:14C88B*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:14C913*
ID_OUI_FROM_DATABASE=LG Electronics
OUI:14CC20*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+OUI:14CCB3*
+ ID_OUI_FROM_DATABASE=AO GK NATEKS
+
OUI:14CF8D*
ID_OUI_FROM_DATABASE=OHSUNG
OUI:18227E*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:182649*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:182666*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:183BD2*
ID_OUI_FROM_DATABASE=BYD Precision Manufacture Company Ltd.
+OUI:183CB7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:183D5E*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:183DA2*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:183EEF*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:183F47*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:1840A4*
ID_OUI_FROM_DATABASE=Shenzhen Trylong Smart Science and Technology Co., Ltd.
+OUI:1841FE*
+ ID_OUI_FROM_DATABASE=Digital 14
+
OUI:18421D*
ID_OUI_FROM_DATABASE=Private
OUI:1844E6*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:184593*
+ ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+
OUI:184617*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:184644*
ID_OUI_FROM_DATABASE=Home Control Singapore Pte Ltd
+OUI:18473D*
+ ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
+
OUI:1848CA*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
OUI:184C08*
ID_OUI_FROM_DATABASE=Rockwell Automation
+OUI:184E16*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:184E94*
ID_OUI_FROM_DATABASE=MESSOA TECHNOLOGIES INC.
OUI:1894C6*
ID_OUI_FROM_DATABASE=ShenZhen Chenyee Technology Co., Ltd.
+OUI:189552*
+ ID_OUI_FROM_DATABASE=1MORE
+
OUI:1897FF*
ID_OUI_FROM_DATABASE=TechFaith Wireless Technology Limited
OUI:18A99B*
ID_OUI_FROM_DATABASE=Dell Inc.
+OUI:18AA0F*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:18AA45*
ID_OUI_FROM_DATABASE=Fon Technology
OUI:18AACA*
ID_OUI_FROM_DATABASE=Sichuan tianyi kanghe communications co., LTD
+OUI:18AB1D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:18ABF5*
ID_OUI_FROM_DATABASE=Ultra Electronics Electrics
OUI:18D5B6*
ID_OUI_FROM_DATABASE=SMG Holdings LLC
+OUI:18D61C*
+ ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp.
+
OUI:18D66A*
ID_OUI_FROM_DATABASE=Inmarsat
OUI:18DFB4*
ID_OUI_FROM_DATABASE=BOSUNG POWERTEC CO.,LTD.
+OUI:18DFC1*
+ ID_OUI_FROM_DATABASE=Aetheros
+
OUI:18E1CA*
ID_OUI_FROM_DATABASE=wanze
OUI:18E8DD*
ID_OUI_FROM_DATABASE=MODULETEK
+OUI:18ECE7*
+ ID_OUI_FROM_DATABASE=BUFFALO.INC
+
OUI:18EE69*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:1C0042*
ID_OUI_FROM_DATABASE=NARI Technology Co., Ltd.
+OUI:1C012D*
+ ID_OUI_FROM_DATABASE=Ficer Technology
+
OUI:1C0219*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
ID_OUI_FROM_DATABASE=IDY Corporation
OUI:1C08C1*
- ID_OUI_FROM_DATABASE=Lg Innotek
+ ID_OUI_FROM_DATABASE=LG Innotek
OUI:1C0B52*
ID_OUI_FROM_DATABASE=EPICOM S.A
OUI:1C27DD*
ID_OUI_FROM_DATABASE=Datang Gohighsec(zhejiang)Information Technology Co.,Ltd.
+OUI:1C28AF*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
OUI:1C2AA3*
ID_OUI_FROM_DATABASE=Shenzhen HongRui Optical Technology Co., Ltd.
OUI:1C3BF3*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+OUI:1C3D2F*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:1C3DE7*
ID_OUI_FROM_DATABASE=Sigma Koki Co.,Ltd.
OUI:1C5CF2*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:1C5D80*
+ ID_OUI_FROM_DATABASE=Mitubishi Hitachi Power Systems Industries Co., Ltd.
+
OUI:1C5F2B*
ID_OUI_FROM_DATABASE=D-Link International
ID_OUI_FROM_DATABASE=Newps co.,ltd
OUI:1C88791*
- ID_OUI_FROM_DATABASE=ANDRA Sp. z o.o.
+ ID_OUI_FROM_DATABASE=ANDRA Sp. z o. o.
OUI:1C88792*
ID_OUI_FROM_DATABASE=Airsmart System Co.,Ltd
OUI:1C97C5*
ID_OUI_FROM_DATABASE=Ynomia Pty Ltd
+OUI:1C98C1*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
OUI:1C98EC*
ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
OUI:1CD6BD*
ID_OUI_FROM_DATABASE=LEEDARSON LIGHTING CO., LTD.
+OUI:1CD6BE*
+ ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
+
OUI:1CDA27*
ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
OUI:1CE2CC*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:1CE61D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:1CE62B*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:1CFD08E*
ID_OUI_FROM_DATABASE=MESHBOX FOUNDATION PTE. LTD.
+OUI:1CFE2B*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
OUI:1CFEA7*
ID_OUI_FROM_DATABASE=IDentytech Solutins Ltd.
+OUI:1CFF59*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co., Ltd.
+
OUI:20014F*
ID_OUI_FROM_DATABASE=Linea Research Ltd
OUI:206432*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+OUI:2064CB*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
OUI:20658E*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:20689D*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+OUI:206980*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:206A8A*
ID_OUI_FROM_DATABASE=Wistron Infocomm (Zhongshan) Corporation
OUI:20968A*
ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co., Ltd.
+OUI:2098D8*
+ ID_OUI_FROM_DATABASE=Shenzhen Yingdakang Technology CO., LTD
+
OUI:209AE9*
ID_OUI_FROM_DATABASE=Volacomm Co., Ltd
OUI:209BCD*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:209E79*
+ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
+
OUI:209EF7*
ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+OUI:20A171*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
OUI:20A2E4*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:20AB37*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:20AB48*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:20AD56*
ID_OUI_FROM_DATABASE=Continental Automotive Systems Inc.
OUI:20F41B*
ID_OUI_FROM_DATABASE=Shenzhen Bilian electronic CO.,LTD
+OUI:20F44F*
+ ID_OUI_FROM_DATABASE=Nokia
+
OUI:20F452*
ID_OUI_FROM_DATABASE=Shanghai IUV Software Development Co. Ltd
OUI:2400BA*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:2400FA*
+ ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co., Ltd
+
OUI:2401C7*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:2411D0*
ID_OUI_FROM_DATABASE=Chongqing Ehs Science and Technology Development Co.,Ltd.
+OUI:241407*
+ ID_OUI_FROM_DATABASE=Xiamen Sigmastar Technology Ltd.
+
OUI:2415100*
ID_OUI_FROM_DATABASE=Safetrust Inc
ID_OUI_FROM_DATABASE=SuZhou A-rack Information Technology Co.,Ltd
OUI:2415108*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Medicomp, Inc
OUI:2415109*
ID_OUI_FROM_DATABASE=Topgolf Sweden AB
OUI:241A8C*
ID_OUI_FROM_DATABASE=Squarehead Technology AS
+OUI:241AE6*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:241B13*
ID_OUI_FROM_DATABASE=Shanghai Nutshell Electronic Co., Ltd.
OUI:244B81*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:244BFE*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
OUI:244C07*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:245EBE*
ID_OUI_FROM_DATABASE=QNAP Systems, Inc.
+OUI:245F9F*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:245FDF*
ID_OUI_FROM_DATABASE=KYOCERA CORPORATION
OUI:246F8C*
ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+OUI:247152*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
OUI:247189*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:24792A*
ID_OUI_FROM_DATABASE=Ruckus Wireless
+OUI:2479EF*
+ ID_OUI_FROM_DATABASE=Greenpacket Berhad, Taiwan
+
OUI:2479F3*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
OUI:2481AA*
ID_OUI_FROM_DATABASE=KSH International Co., Ltd.
+OUI:2481C7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:24828A*
ID_OUI_FROM_DATABASE=Prowave Technologies Ltd.
OUI:24A074*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:24A160*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
OUI:24A2E1*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:24B0A9*
ID_OUI_FROM_DATABASE=Shanghai Mobiletek Communication Ltd.
+OUI:24B105*
+ ID_OUI_FROM_DATABASE=Prama Hikvision India Private Limited
+
OUI:24B209*
ID_OUI_FROM_DATABASE=Avaya Inc
OUI:24E9B3*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:24E9CA*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:24EA40*
ID_OUI_FROM_DATABASE=Helmholz GmbH & Co. KG
OUI:24F128*
ID_OUI_FROM_DATABASE=Telstra
+OUI:24F150*
+ ID_OUI_FROM_DATABASE=Guangzhou Qi'an Technology Co., Ltd.
+
OUI:24F27F*
ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:24FD0D*
- ID_OUI_FROM_DATABASE=INDÚSTRIA DE TELECOMUNICAÇÃO ELETRÔNICA
+ ID_OUI_FROM_DATABASE=Intelbras
OUI:24FD52*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
OUI:284846*
ID_OUI_FROM_DATABASE=GridCentric Inc.
+OUI:2848E7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:284C53*
ID_OUI_FROM_DATABASE=Intune Networks
OUI:2866E3*
ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+OUI:2868D2*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:286AB8*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:28B2BD*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:28B371*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
OUI:28B3AB*
ID_OUI_FROM_DATABASE=Genmark Automation
OUI:28B4FB*
ID_OUI_FROM_DATABASE=Sprocomm Technologies CO.,LTD.
+OUI:28B77C0*
+ ID_OUI_FROM_DATABASE=SHENZHEN EVIEW GPS TECHNOLOGY
+
+OUI:28B77C1*
+ ID_OUI_FROM_DATABASE=SolarEdge Technologies
+
+OUI:28B77C2*
+ ID_OUI_FROM_DATABASE=Zhuhai RongBang Electronic Technology Co., Ltd.
+
+OUI:28B77C3*
+ ID_OUI_FROM_DATABASE=Beijing Kitten&Puppy Technology Co.,Ltd.
+
+OUI:28B77C4*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:28B77C5*
+ ID_OUI_FROM_DATABASE=GROTHE GmbH
+
+OUI:28B77C6*
+ ID_OUI_FROM_DATABASE=Shanghai Taiji Software Co.,Limited
+
+OUI:28B77C7*
+ ID_OUI_FROM_DATABASE=Convertertec Deutschland GmbH
+
+OUI:28B77C8*
+ ID_OUI_FROM_DATABASE=Shenzhen PUAS Industrial Co.,LTD
+
+OUI:28B77C9*
+ ID_OUI_FROM_DATABASE=Anser Coding Inc.
+
+OUI:28B77CA*
+ ID_OUI_FROM_DATABASE=Simaudio Ltd
+
+OUI:28B77CB*
+ ID_OUI_FROM_DATABASE=Vehant Technologies Pvt Ltd.
+
+OUI:28B77CC*
+ ID_OUI_FROM_DATABASE=AnyLink LLC
+
+OUI:28B77CD*
+ ID_OUI_FROM_DATABASE=Enedo Finland Oy
+
+OUI:28B77CE*
+ ID_OUI_FROM_DATABASE=Ray Pte Ltd
+
OUI:28B9D9*
ID_OUI_FROM_DATABASE=Radisys Corporation
OUI:28C13C*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
+OUI:28C21F*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
OUI:28C2DD*
ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
OUI:28D0CB*
ID_OUI_FROM_DATABASE=Cambridge Communication Systems Ltd
+OUI:28D127*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+
OUI:28D1AF*
ID_OUI_FROM_DATABASE=Nokia Corporation
OUI:28E98E*
ID_OUI_FROM_DATABASE=Mitsubishi Electric Corporation
+OUI:28EC95*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:28EC9A*
ID_OUI_FROM_DATABASE=Texas Instruments
ID_OUI_FROM_DATABASE=Pertronic Industries
OUI:2C600C*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:2C6104*
ID_OUI_FROM_DATABASE=SHENZHEN FENGLIAN TECHNOLOGY CO., LTD.
OUI:2C6E85*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:2C6F51*
+ ID_OUI_FROM_DATABASE=Herospeed Digital Technology Limited
+
OUI:2C6FC9*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
OUI:2CA02F*
ID_OUI_FROM_DATABASE=Veroguard Systems Pty Ltd
+OUI:2CA042*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:2CA157*
ID_OUI_FROM_DATABASE=acromate, Inc.
OUI:2CD05A*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+OUI:2CD066*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
OUI:2CD1410*
ID_OUI_FROM_DATABASE=iCIRROUND Inc
OUI:2CD974*
ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+OUI:2CDB07*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:2CDCAD*
ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
OUI:304225*
ID_OUI_FROM_DATABASE=BURG-WÄCHTER KG
+OUI:304240*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:3042A1*
ID_OUI_FROM_DATABASE=ilumisys Inc. DBA Toggled
OUI:30493B*
ID_OUI_FROM_DATABASE=Nanjing Z-Com Wireless Co.,Ltd
+OUI:3049500*
+ ID_OUI_FROM_DATABASE=Guangzhou Lian-med Technology Co.,Ltd.
+
+OUI:3049501*
+ ID_OUI_FROM_DATABASE=ATLI WORLD LIMITED
+
+OUI:3049502*
+ ID_OUI_FROM_DATABASE=Sercomm Corporation.
+
+OUI:3049503*
+ ID_OUI_FROM_DATABASE=Morgan Schaffer Inc.
+
+OUI:3049504*
+ ID_OUI_FROM_DATABASE=ADVANCED MICROWAVE ENGINEERING SRL
+
+OUI:3049505*
+ ID_OUI_FROM_DATABASE=IK Elektronik GmbH
+
+OUI:3049506*
+ ID_OUI_FROM_DATABASE=Curb, Inc.
+
+OUI:3049507*
+ ID_OUI_FROM_DATABASE=Shenzhen iTG robot Co.,Ltd.
+
+OUI:3049508*
+ ID_OUI_FROM_DATABASE=SHENZHEN LDROBOT CO., LTD.
+
+OUI:3049509*
+ ID_OUI_FROM_DATABASE=Shanghai gatang technology CO.,LTD
+
+OUI:304950A*
+ ID_OUI_FROM_DATABASE=Ledworks SRL
+
+OUI:304950B*
+ ID_OUI_FROM_DATABASE=HANGZHOU EV-TECH CO.,LTD
+
+OUI:304950C*
+ ID_OUI_FROM_DATABASE=Anacove LLC
+
+OUI:304950D*
+ ID_OUI_FROM_DATABASE=Xio Research, Inc
+
+OUI:304950E*
+ ID_OUI_FROM_DATABASE=IoTmaxx GmbH
+
OUI:304A26*
ID_OUI_FROM_DATABASE=Shenzhen Trolink Technology CO, LTD
OUI:3065EC*
ID_OUI_FROM_DATABASE=Wistron (ChongQing)
+OUI:3066D0*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:30688C*
ID_OUI_FROM_DATABASE=Reach Technology Inc.
OUI:3089D3*
ID_OUI_FROM_DATABASE=HONGKONG UCLOUDLINK NETWORK TECHNOLOGY LIMITED
+OUI:308AF7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:308BB2*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:30A2C2*
ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+OUI:30A452*
+ ID_OUI_FROM_DATABASE=Arrival Elements BV
+
OUI:30A889*
ID_OUI_FROM_DATABASE=DECIMATOR DESIGN
OUI:30C507*
ID_OUI_FROM_DATABASE=ECI Telecom Ltd.
+OUI:30C50F*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:30C750*
ID_OUI_FROM_DATABASE=MIC Technology Group
OUI:30C82A*
ID_OUI_FROM_DATABASE=WI-BIZ srl
+OUI:30C9AB*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
OUI:30CBF8*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:30CC21*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:30CDA7*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:340A22*
ID_OUI_FROM_DATABASE=TOP-ACCESS ELECTRONICS CO LTD
+OUI:340A33*
+ ID_OUI_FROM_DATABASE=D-Link International
+
OUI:340A98*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
ID_OUI_FROM_DATABASE=Moduel AB
OUI:340F66*
- ID_OUI_FROM_DATABASE=MicroArx Corporation
+ ID_OUI_FROM_DATABASE=Web Sensing LLC
OUI:341290*
ID_OUI_FROM_DATABASE=Treeview Co.,Ltd.
OUI:342003*
ID_OUI_FROM_DATABASE=Shenzhen Feitengyun Technology Co.,LTD
+OUI:3420E3*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
OUI:342109*
ID_OUI_FROM_DATABASE=Jensen Scandinavia AS
OUI:342EB6*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:342EB7*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:342F6E*
ID_OUI_FROM_DATABASE=Anywire corporation
OUI:343DC4*
ID_OUI_FROM_DATABASE=BUFFALO.INC
+OUI:343EA4*
+ ID_OUI_FROM_DATABASE=Ring LLC
+
OUI:3440B5*
ID_OUI_FROM_DATABASE=IBM
OUI:34543C*
ID_OUI_FROM_DATABASE=TAKAOKA TOKO CO.,LTD.
+OUI:345594*
+ ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD
+
OUI:3456FE*
ID_OUI_FROM_DATABASE=Cisco Meraki
OUI:345760*
ID_OUI_FROM_DATABASE=MitraStar Technology Corp.
+OUI:345840*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:345A06*
ID_OUI_FROM_DATABASE=SHARP Corporation
OUI:346C0F*
ID_OUI_FROM_DATABASE=Pramod Telecom Pvt. Ltd
+OUI:346D9C*
+ ID_OUI_FROM_DATABASE=Carrier Corporation
+
OUI:346E8A*
ID_OUI_FROM_DATABASE=Ecosense
OUI:347C25*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:347DF6*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:347E00*
ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
OUI:3481F4*
ID_OUI_FROM_DATABASE=SST Taiwan Ltd.
+OUI:3482C5*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:3482DE*
ID_OUI_FROM_DATABASE=Kiio Inc
ID_OUI_FROM_DATABASE=Heinz Lackmann GmbH & Co KG
OUI:34873D*
- ID_OUI_FROM_DATABASE=Quectel Wireless Solution Co.,Ltd.
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
OUI:34885D*
ID_OUI_FROM_DATABASE=Logitech Far East
OUI:34EA34*
ID_OUI_FROM_DATABASE=HangZhou Gubei Electronics Technology Co.,Ltd
+OUI:34EAE7*
+ ID_OUI_FROM_DATABASE=Shanghai High-Flying Electronics Technology Co., Ltd
+
OUI:34ED0B*
ID_OUI_FROM_DATABASE=Shanghai XZ-COM.CO.,Ltd.
OUI:38539C*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:38549B*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:385610*
ID_OUI_FROM_DATABASE=CANDY HOUSE, Inc.
OUI:386793*
ID_OUI_FROM_DATABASE=Asia Optical Co., Inc.
+OUI:386893*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:3868A4*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
OUI:388602*
ID_OUI_FROM_DATABASE=Flexoptix GmbH
+OUI:38881E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:38892C*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:388AB7*
ID_OUI_FROM_DATABASE=ITC Networks
+OUI:388ABE*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
OUI:388B59*
ID_OUI_FROM_DATABASE=Google, Inc.
ID_OUI_FROM_DATABASE=Vapor Stone Rail Systems
OUI:38F0C8*
- ID_OUI_FROM_DATABASE=Livestream
+ ID_OUI_FROM_DATABASE=Mevo Inc.
OUI:38F135*
ID_OUI_FROM_DATABASE=SensorTec-Canada
OUI:38F7B2*
ID_OUI_FROM_DATABASE=SEOJUN ELECTRIC
+OUI:38F7CD0*
+ ID_OUI_FROM_DATABASE=Polska Fabryka Wodomierzy i Ciep?omierzy FILA
+
+OUI:38F7CD1*
+ ID_OUI_FROM_DATABASE=NZIA Connect Inc
+
+OUI:38F7CD2*
+ ID_OUI_FROM_DATABASE=RIPower Co.,Ltd
+
+OUI:38F7CD3*
+ ID_OUI_FROM_DATABASE=VANGUARD
+
+OUI:38F7CD4*
+ ID_OUI_FROM_DATABASE=NORDI TELEKOMMUNIKATSIOONI OÜ
+
+OUI:38F7CD5*
+ ID_OUI_FROM_DATABASE=Shanghai qinzhuo Electronic Co., Ltd.
+
+OUI:38F7CD6*
+ ID_OUI_FROM_DATABASE=Fast Cotton(Beijing) Limited
+
+OUI:38F7CD7*
+ ID_OUI_FROM_DATABASE=ARUNAS PTY LTD
+
+OUI:38F7CD8*
+ ID_OUI_FROM_DATABASE=BlastWave Inc.
+
+OUI:38F7CD9*
+ ID_OUI_FROM_DATABASE=RFbeam Microwave GmbH
+
+OUI:38F7CDA*
+ ID_OUI_FROM_DATABASE=Distech Controls
+
+OUI:38F7CDB*
+ ID_OUI_FROM_DATABASE=Fibergate Inc.
+
+OUI:38F7CDC*
+ ID_OUI_FROM_DATABASE=Shenzhen MADIGI Electronic Technology Co., Ltd
+
+OUI:38F7CDD*
+ ID_OUI_FROM_DATABASE=Macherey-Nagel GmbH & Co. KG
+
+OUI:38F7CDE*
+ ID_OUI_FROM_DATABASE=APT MOBILE SATCOM LIMITED
+
OUI:38F85E*
ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
OUI:3C11B2*
ID_OUI_FROM_DATABASE=Fraunhofer FIT
+OUI:3C13CC*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:3C15C2*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:3C1A79*
ID_OUI_FROM_DATABASE=Huayuan Technology CO.,LTD
+OUI:3C1A9E*
+ ID_OUI_FROM_DATABASE=VitalThings AS
+
OUI:3C1CBE*
ID_OUI_FROM_DATABASE=JADAK LLC
OUI:3C300C*
ID_OUI_FROM_DATABASE=Dewar Electronics Pty Ltd
+OUI:3C306F*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:3C3178*
ID_OUI_FROM_DATABASE=Qolsys Inc.
OUI:3C4CD0*
ID_OUI_FROM_DATABASE=CERAGON NETWORKS
+OUI:3C4DBE*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:3C4E47*
ID_OUI_FROM_DATABASE=Etronic A/S
OUI:3C5282*
ID_OUI_FROM_DATABASE=Hewlett Packard
+OUI:3C53D7*
+ ID_OUI_FROM_DATABASE=CEDES AG
+
OUI:3C5731*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:3C83B5*
ID_OUI_FROM_DATABASE=Advance Vision Electronics Co. Ltd.
+OUI:3C846A*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
OUI:3C86A8*
ID_OUI_FROM_DATABASE=Sangshin elecom .co,, LTD
OUI:3C9BD6*
ID_OUI_FROM_DATABASE=Vizio, Inc
+OUI:3C9C0F*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:3C9D56*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:3CA616*
ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+OUI:3CA62F*
+ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+
OUI:3CA72B*
ID_OUI_FROM_DATABASE=MRV Communications (Networks) LTD
OUI:3CB17F*
ID_OUI_FROM_DATABASE=Wattwatchers Pty Ld
+OUI:3CB233*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:3CB53D*
ID_OUI_FROM_DATABASE=HUNAN GOKE MICROELECTRONICS CO.,LTD
OUI:3CE1A1*
ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
+OUI:3CE3E7*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
OUI:3CE5A6*
ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
OUI:400589*
ID_OUI_FROM_DATABASE=T-Mobile, USA
+OUI:400634*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:4006A0*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:408805*
ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+OUI:40882F*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
OUI:4088E0*
ID_OUI_FROM_DATABASE=Beijing Ereneben Information Technology Limited Shenzhen Branch
OUI:40A93F*
ID_OUI_FROM_DATABASE=Pivotal Commware, Inc.
+OUI:40AA56*
+ ID_OUI_FROM_DATABASE=China Dragon Technology Limited
+
OUI:40AC8D*
ID_OUI_FROM_DATABASE=Data Management, Inc.
OUI:40CE24*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:40D25F*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
OUI:40D28A*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
OUI:40DC9D*
ID_OUI_FROM_DATABASE=HAJEN
+OUI:40DCA5*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
+OUI:40DDD1*
+ ID_OUI_FROM_DATABASE=Beautiful Card Corporation
+
OUI:40DEAD*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:44004D*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:4401BB*
+ ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.,LTD
+
OUI:44032C*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:441441*
ID_OUI_FROM_DATABASE=AudioControl Inc.
+OUI:441622*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
OUI:441847*
ID_OUI_FROM_DATABASE=HUNAN SCROWN ELECTRONIC INFORMATION TECH.CO.,LTD
OUI:441C12*
ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+OUI:441C7F*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
OUI:441CA8*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
OUI:441EA1*
ID_OUI_FROM_DATABASE=Hewlett Packard
+OUI:44227C*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:442295*
ID_OUI_FROM_DATABASE=China Mobile Iot Limited company
OUI:4425BB*
ID_OUI_FROM_DATABASE=Bamboo Entertainment Corporation
+OUI:4427F3*
+ ID_OUI_FROM_DATABASE=70mai Co.,Ltd.
+
OUI:4428A3*
ID_OUI_FROM_DATABASE=Jiangsu fulian Communication Technology Co., Ltd.
OUI:4456B7*
ID_OUI_FROM_DATABASE=Spawn Labs, Inc
+OUI:4456E2*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co., Ltd.
+
OUI:445829*
ID_OUI_FROM_DATABASE=Cisco SPVTG
OUI:446755*
ID_OUI_FROM_DATABASE=Orbit Irrigation
+OUI:44680C*
+ ID_OUI_FROM_DATABASE=Wacom Co.,Ltd.
+
OUI:4468AB*
ID_OUI_FROM_DATABASE=JUIN COMPANY, LIMITED
OUI:449160*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+OUI:44917C*
+ ID_OUI_FROM_DATABASE=HMD Global Oy
+
OUI:4491DB*
ID_OUI_FROM_DATABASE=Shanghai Huaqin Telecom Technology Co.,Ltd
OUI:44A466*
ID_OUI_FROM_DATABASE=GROUPE LDLC
+OUI:44A54E*
+ ID_OUI_FROM_DATABASE=Qorvo Utrecht B.V.
+
OUI:44A56E*
ID_OUI_FROM_DATABASE=NETGEAR
OUI:44AD19*
ID_OUI_FROM_DATABASE=XINGFEI (H.K)LIMITED
+OUI:44ADB1*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
OUI:44ADD9*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:44AEAB*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+OUI:44AF28*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:44B295*
ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
OUI:44BA46*
ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+OUI:44BB3B*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
OUI:44BFE3*
ID_OUI_FROM_DATABASE=Shenzhen Longtech Electronics Co.,Ltd
OUI:44E66E*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:44E6B0*
+ ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
+
OUI:44E8A5*
ID_OUI_FROM_DATABASE=Myreka Technologies Sdn. Bhd.
OUI:44F477*
ID_OUI_FROM_DATABASE=Juniper Networks
+OUI:44F4E7*
+ ID_OUI_FROM_DATABASE=Cohesity Inc
+
OUI:44F849*
ID_OUI_FROM_DATABASE=Union Pacific Railroad
OUI:48049F*
ID_OUI_FROM_DATABASE=ELECOM CO., LTD
+OUI:4805E2*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:48066A*
ID_OUI_FROM_DATABASE=Tempered Networks, Inc.
OUI:4813F3*
ID_OUI_FROM_DATABASE=BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
+OUI:481693*
+ ID_OUI_FROM_DATABASE=Lear Corporation GmbH
+
OUI:48174C*
ID_OUI_FROM_DATABASE=MicroPower technologies
OUI:48216C*
ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
+OUI:482335*
+ ID_OUI_FROM_DATABASE=Dialog Semiconductor Hellas SA
+
+OUI:48262C*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:4826E8*
ID_OUI_FROM_DATABASE=Tek-Air Systems, Inc.
OUI:482CA0*
ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+OUI:482CD0*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:482CEA*
ID_OUI_FROM_DATABASE=Motorola Inc Business Light Radios
OUI:48437C*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:4843DD*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
OUI:484487*
ID_OUI_FROM_DATABASE=Cisco SPVTG
OUI:488F5A*
ID_OUI_FROM_DATABASE=Routerboard.com
+OUI:48902F*
+ ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+
OUI:489153*
ID_OUI_FROM_DATABASE=Weinmann Geräte für Medizin GmbH + Co. KG
OUI:48A2B7*
ID_OUI_FROM_DATABASE=Kodofon JSC
+OUI:48A2B8*
+ ID_OUI_FROM_DATABASE=Chengdu Vision-Zenith Tech.Co,.Ltd
+
OUI:48A2E6*
ID_OUI_FROM_DATABASE=Resideo
OUI:4C1FCC*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:4C2113*
+ ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
+
OUI:4C218C*
ID_OUI_FROM_DATABASE=Panasonic India Private limited
OUI:4C21D0*
ID_OUI_FROM_DATABASE=Sony Mobile Communications Inc
+OUI:4C2219*
+ ID_OUI_FROM_DATABASE=YUANFUDAO HK LIMTED
+
OUI:4C2258*
ID_OUI_FROM_DATABASE=cozybit, Inc.
OUI:4C2C83*
ID_OUI_FROM_DATABASE=Zhejiang KaNong Network Technology Co.,Ltd.
+OUI:4C2EFE*
+ ID_OUI_FROM_DATABASE=Shenzhen Comnect Technology Co.,LTD
+
OUI:4C2F9D*
ID_OUI_FROM_DATABASE=ICM Controls
OUI:4C7C5F*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:4C7CD9*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:4C7F62*
ID_OUI_FROM_DATABASE=Nokia Corporation
OUI:4C917AE*
ID_OUI_FROM_DATABASE=Annapurna labs
+OUI:4C93A60*
+ ID_OUI_FROM_DATABASE=Vestaboard, Inc.
+
+OUI:4C93A61*
+ ID_OUI_FROM_DATABASE=Atrie Technology Fzc
+
+OUI:4C93A62*
+ ID_OUI_FROM_DATABASE=Diehl Controls Nanjing Co., Ltd.
+
+OUI:4C93A63*
+ ID_OUI_FROM_DATABASE=Commsignia, Ltd.
+
+OUI:4C93A64*
+ ID_OUI_FROM_DATABASE=4D Sistem Ticaret A.S.
+
+OUI:4C93A65*
+ ID_OUI_FROM_DATABASE=Private
+
+OUI:4C93A66*
+ ID_OUI_FROM_DATABASE=Shandong Senter Electronic Co., Ltd
+
+OUI:4C93A67*
+ ID_OUI_FROM_DATABASE=5Voxel Co., Ltd.
+
+OUI:4C93A68*
+ ID_OUI_FROM_DATABASE=Sercomm Corporation.
+
+OUI:4C93A69*
+ ID_OUI_FROM_DATABASE=Advantics
+
+OUI:4C93A6A*
+ ID_OUI_FROM_DATABASE=Hanwang Technology Co.,Ltd
+
+OUI:4C93A6B*
+ ID_OUI_FROM_DATABASE=Felten Electronics
+
+OUI:4C93A6C*
+ ID_OUI_FROM_DATABASE=Wuhan Maiwe communication Co.,Ltd
+
+OUI:4C93A6D*
+ ID_OUI_FROM_DATABASE=Cantronic Systems (Canada) Inc
+
+OUI:4C93A6E*
+ ID_OUI_FROM_DATABASE=CELLTRON
+
OUI:4C9614*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:4CADA8*
ID_OUI_FROM_DATABASE=PANOPTICS CORP.
+OUI:4CAE13*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:4CAE1C*
ID_OUI_FROM_DATABASE=SaiNXT Technologies LLP
OUI:4CAEA3*
ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
+OUI:4CAEEC*
+ ID_OUI_FROM_DATABASE=Guangzhou limee technology co.,LTD
+
OUI:4CB008*
ID_OUI_FROM_DATABASE=Shenzhen Gwelltimes Technology Co.,Ltd
OUI:4CB911*
ID_OUI_FROM_DATABASE=Raisecom Technology CO.,LTD
+OUI:4CB99B*
+ ID_OUI_FROM_DATABASE=WEIFANG GOERTEK ELECTRONICS CO.,LTD
+
OUI:4CB9C8*
ID_OUI_FROM_DATABASE=CONET CO., LTD.
OUI:4CC94F*
ID_OUI_FROM_DATABASE=Nokia
+OUI:4CC95E*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:4CCA53*
ID_OUI_FROM_DATABASE=Skyera, Inc.
OUI:5027C7*
ID_OUI_FROM_DATABASE=TECHNART Co.,Ltd
+OUI:502873*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:50294D*
ID_OUI_FROM_DATABASE=NANJING IOT SENSOR TECHNOLOGY CO,LTD
OUI:506F9A*
ID_OUI_FROM_DATABASE=Wi-Fi Alliance
+OUI:507043*
+ ID_OUI_FROM_DATABASE=BSkyB Ltd
+
OUI:5070E5*
ID_OUI_FROM_DATABASE=He Shan World Fair Electronics Technology Limited
OUI:50C6AD*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+OUI:50C709*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
OUI:50C7BF*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
OUI:50DF95*
ID_OUI_FROM_DATABASE=Lytx
+OUI:50E039*
+ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+
OUI:50E085*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:50F722*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:50F7ED*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:50F8A5*
ID_OUI_FROM_DATABASE=eWBM Co., Ltd.
+OUI:50F958*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:50FA84*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
OUI:50FAAB*
ID_OUI_FROM_DATABASE=L-tek d.o.o.
+OUI:50FB19*
+ ID_OUI_FROM_DATABASE=CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+
OUI:50FC30*
ID_OUI_FROM_DATABASE=Treehouse Labs
OUI:540593*
ID_OUI_FROM_DATABASE=WOORI ELEC Co.,Ltd
+OUI:5405DB*
+ ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
+
OUI:54068B*
ID_OUI_FROM_DATABASE=Ningbo Deli Kebei Technology Co.LTD
ID_OUI_FROM_DATABASE=CDOUBLES ELECTRONICS CO. LTD.
OUI:5448E6*
- ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co.,Ltd
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
OUI:544A00*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:5454CF*
ID_OUI_FROM_DATABASE=PROBEDIGITAL CO.,LTD
+OUI:5455D5*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:545AA6*
ID_OUI_FROM_DATABASE=Espressif Inc.
OUI:5475D0*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:54778A*
+ ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
+
OUI:54781A*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:54847B*
ID_OUI_FROM_DATABASE=Digital Devices GmbH
+OUI:5484DC*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:5486BC*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:54880E*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+OUI:5488DE*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:548922*
ID_OUI_FROM_DATABASE=Zelfy Inc
ID_OUI_FROM_DATABASE=Minibar Systems
OUI:54AB3A*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:54AE27*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:54D751*
ID_OUI_FROM_DATABASE=Proximus
+OUI:54D9C6*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:54D9E4*
ID_OUI_FROM_DATABASE=BRILLIANTTS CO., LTD
OUI:54EFFE*
ID_OUI_FROM_DATABASE=Fullpower Technologies, Inc.
+OUI:54F15F*
+ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+
OUI:54F201*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
ID_OUI_FROM_DATABASE=TPL SYSTEMES
OUI:5865E6*
- ID_OUI_FROM_DATABASE=INFOMARK CO., LTD.
+ ID_OUI_FROM_DATABASE=infomark
OUI:5866BA*
ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
OUI:58946B*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:5894A2*
+ ID_OUI_FROM_DATABASE=KETEK GmbH
+
OUI:5894B2*
ID_OUI_FROM_DATABASE=BrainCo
OUI:58B568*
ID_OUI_FROM_DATABASE=SECURITAS DIRECT ESPAÑA, SAU
+OUI:58B623*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+
OUI:58B633*
ID_OUI_FROM_DATABASE=Ruckus Wireless
OUI:58E808*
ID_OUI_FROM_DATABASE=AUTONICS CORPORATION
+OUI:58E873*
+ ID_OUI_FROM_DATABASE=HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd
+
OUI:58E8760*
ID_OUI_FROM_DATABASE=Private
OUI:58F102*
ID_OUI_FROM_DATABASE=BLU Products Inc.
+OUI:58F2FC*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:58F387*
ID_OUI_FROM_DATABASE=HCCP
OUI:58FD20*
ID_OUI_FROM_DATABASE=Bravida Sakerhet AB
+OUI:58FDB1*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
OUI:58FDBE*
ID_OUI_FROM_DATABASE=Shenzhen Taikaida Technology Co., Ltd
OUI:5C43D2*
ID_OUI_FROM_DATABASE=HAZEMEYER
+OUI:5C443E*
+ ID_OUI_FROM_DATABASE=Skullcandy
+
OUI:5C4527*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:5C63C9*
ID_OUI_FROM_DATABASE=Intellithings Ltd.
+OUI:5C647A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:5C666C*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
OUI:5C7D5E*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:5C7D7D*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
OUI:5C80B6*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:5C8486*
ID_OUI_FROM_DATABASE=Brightsource Industries Israel LTD
+OUI:5C857E0*
+ ID_OUI_FROM_DATABASE=28 Gorilla
+
+OUI:5C857E1*
+ ID_OUI_FROM_DATABASE=Sichuan C.H Control Technology Co., Ltd.
+
+OUI:5C857E2*
+ ID_OUI_FROM_DATABASE=mobilogix HongKong
+
+OUI:5C857E3*
+ ID_OUI_FROM_DATABASE=Cable Matters Inc.
+
+OUI:5C857E4*
+ ID_OUI_FROM_DATABASE=Shenzhen IP3 Century Intelligent Technology CO.,Ltd
+
+OUI:5C857E5*
+ ID_OUI_FROM_DATABASE=Shanghai Yanhe automation technology co.,LTD
+
+OUI:5C857E6*
+ ID_OUI_FROM_DATABASE=ProdataKey
+
+OUI:5C857E7*
+ ID_OUI_FROM_DATABASE=Beijing HZFD Technology Co., Ltd
+
+OUI:5C857E8*
+ ID_OUI_FROM_DATABASE=BeiJing Xinsheng Technology Co.,Ltd
+
+OUI:5C857E9*
+ ID_OUI_FROM_DATABASE=Express LUCK Industrial Ltd.
+
+OUI:5C857EA*
+ ID_OUI_FROM_DATABASE=Zhejiang Jetron Ark Digital Technology Co., Ltd
+
+OUI:5C857EB*
+ ID_OUI_FROM_DATABASE=HHCC Plant Technology Co., Ltd.
+
+OUI:5C857EC*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:5C857ED*
+ ID_OUI_FROM_DATABASE=Nautech Electronics Ltd
+
+OUI:5C857EE*
+ ID_OUI_FROM_DATABASE=Guoyi Liangzi (Hefei) Technology Co., Ltd(CIQTEK)
+
OUI:5C8613*
ID_OUI_FROM_DATABASE=Beijing Zhoenet Technology Co., Ltd
OUI:5C8FE0*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:5C9012*
+ ID_OUI_FROM_DATABASE=Owl Cyber Defense Solutions, LLC
+
+OUI:5C9157*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:5C925E*
ID_OUI_FROM_DATABASE=Zioncom Electronics (Shenzhen) Ltd.
OUI:5CA48A*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:5CA5BC*
+ ID_OUI_FROM_DATABASE=eero inc.
+
OUI:5CA62D*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:5CD4AB*
ID_OUI_FROM_DATABASE=Zektor
+OUI:5CD5B5*
+ ID_OUI_FROM_DATABASE=Shenzhen WiSiYiLink Technology Co.,Ltd
+
OUI:5CD61F*
ID_OUI_FROM_DATABASE=Qardio, Inc
OUI:5CFC66*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:5CFE9E*
+ ID_OUI_FROM_DATABASE=Wiwynn Corporation Tainan Branch
+
OUI:5CFF35*
ID_OUI_FROM_DATABASE=Wistron Corporation
OUI:60058A*
ID_OUI_FROM_DATABASE=Hitachi Metals, Ltd.
+OUI:60077C*
+ ID_OUI_FROM_DATABASE=Jala Group
+
OUI:600810*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:603197*
ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+OUI:6032B1*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
OUI:6032F0*
ID_OUI_FROM_DATABASE=Mplus technology
OUI:605464*
ID_OUI_FROM_DATABASE=Eyedro Green Solutions Inc.
+OUI:605661*
+ ID_OUI_FROM_DATABASE=IXECLOUD Tech
+
OUI:605718*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:6077E2*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:607EC9*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:607ECD*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:609813*
ID_OUI_FROM_DATABASE=Shanghai Visking Digital Technology Co. LTD
+OUI:609866*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:6099D1*
ID_OUI_FROM_DATABASE=Vuzix / Lenovo
OUI:60A37D*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:60A423*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
OUI:60A44C*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
OUI:60A9B0*
ID_OUI_FROM_DATABASE=Merchandising Technologies, Inc
+OUI:60AAEF*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:60AB14*
ID_OUI_FROM_DATABASE=LG Innotek
OUI:60B617*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+OUI:60B76E*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
OUI:60B933*
ID_OUI_FROM_DATABASE=Deutron Electronics Corp.
OUI:60D30A*
ID_OUI_FROM_DATABASE=Quatius Limited
+OUI:60D4E9*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
OUI:60D755*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:60E956*
ID_OUI_FROM_DATABASE=Ayla Networks, Inc
+OUI:60EB5A*
+ ID_OUI_FROM_DATABASE=Asterfusion Data Technologies Co.,Ltd
+
OUI:60EB69*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:60EE5C*
ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
OUI:640B4A*
ID_OUI_FROM_DATABASE=Digital Telecom Technology Limited
+OUI:640BD7*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:640DCE*
ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
OUI:642B8A*
ID_OUI_FROM_DATABASE=ALL BEST Industrial Co., Ltd.
+OUI:642C0F*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
OUI:642CAC*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:6432A8*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:6433DB*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:643409*
ID_OUI_FROM_DATABASE=BITwave Pte Ltd
OUI:643AB1*
ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+OUI:643AEA*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:643E8C*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:646A74*
ID_OUI_FROM_DATABASE=AUTH-SERVERS, LLC
+OUI:646C80*
+ ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
+
OUI:646CB2*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:64B5C6*
ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+OUI:64B623*
+ ID_OUI_FROM_DATABASE=CCS Care Communication Solutions GmbH
+
OUI:64B64A*
ID_OUI_FROM_DATABASE=ViVOtech, Inc.
OUI:64E682*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:64E7D8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:64E84F*
ID_OUI_FROM_DATABASE=Serialway Communication Technology Co. Ltd
OUI:6851B7*
ID_OUI_FROM_DATABASE=PowerCloud Systems, Inc.
+OUI:6852D6*
+ ID_OUI_FROM_DATABASE=UGame Technology Co.,Ltd
+
OUI:68536C*
ID_OUI_FROM_DATABASE=SPnS Co.,Ltd
OUI:685388*
ID_OUI_FROM_DATABASE=P&S Technology
+OUI:68545A*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:6854C1*
ID_OUI_FROM_DATABASE=ColorTokens, Inc.
OUI:687D6B*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:687DB4*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:687F74*
ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
OUI:68876B*
ID_OUI_FROM_DATABASE=INQ Mobile Limited
+OUI:6888A1*
+ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
+
OUI:688975*
ID_OUI_FROM_DATABASE=nuoxc
OUI:689234*
ID_OUI_FROM_DATABASE=Ruckus Wireless
+OUI:689320*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
OUI:689361*
ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
OUI:68D482*
ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
+OUI:68D6ED*
+ ID_OUI_FROM_DATABASE=GooWi Wireless Technology Co., Limited
+
OUI:68D79A*
ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
OUI:6C4418*
ID_OUI_FROM_DATABASE=Zappware
+OUI:6C442A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:6C4598*
ID_OUI_FROM_DATABASE=Antex Electronic Corp.
OUI:6C98EB*
ID_OUI_FROM_DATABASE=Riverbed Technology, Inc.
+OUI:6C9961*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
OUI:6C9989*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:6CA100*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:6CA4D1*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:6CA604*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:6CB9C5*
ID_OUI_FROM_DATABASE=Delta Networks, Inc.
+OUI:6CBAB8*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
OUI:6CBEE9*
ID_OUI_FROM_DATABASE=Alcatel-Lucent IPD
OUI:6CCA08*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:6CCE44*
+ ID_OUI_FROM_DATABASE=1MORE
+
OUI:6CD032*
ID_OUI_FROM_DATABASE=LG Electronics
OUI:6CDDBC*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:6CDEA9*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
OUI:6CDFFB0*
ID_OUI_FROM_DATABASE=Shenzhen HDCVT Technology
OUI:6CE4DA*
ID_OUI_FROM_DATABASE=NEC Platforms, Ltd.
+OUI:6CE5F7*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
OUI:6CE85C*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:702B1D*
ID_OUI_FROM_DATABASE=E-Domus International Limited
+OUI:702C09*
+ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+
OUI:702C1F*
ID_OUI_FROM_DATABASE=Wisol
OUI:703A73*
ID_OUI_FROM_DATABASE=Shenzhen Sundray Technologies Company Limited
+OUI:703AA6*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
OUI:703ACB*
ID_OUI_FROM_DATABASE=Google, Inc.
OUI:70617B*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:7061EE*
+ ID_OUI_FROM_DATABASE=Sunwoda Electronic Co.,Ltd
+
OUI:7062B8*
ID_OUI_FROM_DATABASE=D-Link International
OUI:70695A*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:7069790*
+ ID_OUI_FROM_DATABASE=Full Solution Telecom
+
+OUI:7069791*
+ ID_OUI_FROM_DATABASE=Linksys Telecom Shenzhen CO., LTD
+
+OUI:7069792*
+ ID_OUI_FROM_DATABASE=Graphcore Ltd
+
+OUI:7069793*
+ ID_OUI_FROM_DATABASE=Hebei Baina Xinda Technology Co., Ltd.
+
+OUI:7069794*
+ ID_OUI_FROM_DATABASE=SelectTech GeoSpatial, LLC
+
+OUI:7069795*
+ ID_OUI_FROM_DATABASE=Ibyte
+
+OUI:7069796*
+ ID_OUI_FROM_DATABASE=Beijing Security Union Information Technology Co.,Ltd
+
+OUI:7069797*
+ ID_OUI_FROM_DATABASE=Intelitech SIA
+
+OUI:7069798*
+ ID_OUI_FROM_DATABASE=An Phat Information Technology Co., Ltd
+
+OUI:7069799*
+ ID_OUI_FROM_DATABASE=Faurecia Clarion Electronics (Dongguan) Co., Ltd
+
+OUI:706979A*
+ ID_OUI_FROM_DATABASE=Foxconn Brasil Industria e Comercio Ltda
+
+OUI:706979B*
+ ID_OUI_FROM_DATABASE=Liquid Instruments Pty Ltd
+
+OUI:706979C*
+ ID_OUI_FROM_DATABASE=Rivian Automotive LLC
+
+OUI:706979D*
+ ID_OUI_FROM_DATABASE=FREUND ELEKTRONIKA D.O.O., IP-INTEGRA TECHNOLOGIES
+
+OUI:706979E*
+ ID_OUI_FROM_DATABASE=BAS-IP LP
+
OUI:706BB9*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:708CB6*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:708CBB*
+ ID_OUI_FROM_DATABASE=MIMODISPLAYKOREA
+
OUI:708D09*
ID_OUI_FROM_DATABASE=Nokia Corporation
OUI:709C8F*
ID_OUI_FROM_DATABASE=Nero AG
+OUI:709CD1*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:709E29*
ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
OUI:70B3D5003*
ID_OUI_FROM_DATABASE=ANYROAM
+OUI:70B3D5005*
+ ID_OUI_FROM_DATABASE=CT Company
+
OUI:70B3D5006*
ID_OUI_FROM_DATABASE=Piranha EMS Inc.
OUI:70B3D500E*
ID_OUI_FROM_DATABASE=Magosys Systems LTD
+OUI:70B3D500F*
+ ID_OUI_FROM_DATABASE=Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
+
OUI:70B3D5010*
ID_OUI_FROM_DATABASE=Hanwa Electronic Ind.Co.,Ltd.
OUI:70B3D5050*
ID_OUI_FROM_DATABASE=Compusign Systems Pty Ltd
+OUI:70B3D5051*
+ ID_OUI_FROM_DATABASE=JT
+
OUI:70B3D5052*
ID_OUI_FROM_DATABASE=Sudo Premium Engineering
OUI:70B3D5088*
ID_OUI_FROM_DATABASE=OptiScan Biomedical Corp.
+OUI:70B3D5089*
+ ID_OUI_FROM_DATABASE=Kazdream Technologies LLP
+
OUI:70B3D508A*
ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
OUI:70B3D5094*
ID_OUI_FROM_DATABASE=Circuitlink Pty Ltd
+OUI:70B3D5095*
+ ID_OUI_FROM_DATABASE=plc-tec AG
+
OUI:70B3D5096*
ID_OUI_FROM_DATABASE=HAVELSAN A.Ş.
OUI:70B3D50B6*
ID_OUI_FROM_DATABASE=Landis Gyr
+OUI:70B3D50B7*
+ ID_OUI_FROM_DATABASE=HAI ROBOTICS Co., Ltd.
+
OUI:70B3D50B8*
ID_OUI_FROM_DATABASE=Lucas-Nülle GmbH
OUI:70B3D50BA*
ID_OUI_FROM_DATABASE=Ayre Acoustics, Inc.
+OUI:70B3D50BB*
+ ID_OUI_FROM_DATABASE=AnaPico AG
+
OUI:70B3D50BC*
ID_OUI_FROM_DATABASE=Practical Software Studio LLC
OUI:70B3D50EA*
ID_OUI_FROM_DATABASE=AEV Broadcast Srl
+OUI:70B3D50EB*
+ ID_OUI_FROM_DATABASE=Tomahawk Robotics
+
OUI:70B3D50EC*
ID_OUI_FROM_DATABASE=ACS MOTION CONTROL
OUI:70B3D510C*
ID_OUI_FROM_DATABASE=Vocality International Ltd
+OUI:70B3D510D*
+ ID_OUI_FROM_DATABASE=CoreEL Technologies Pvt Ltd
+
OUI:70B3D510E*
ID_OUI_FROM_DATABASE=Colorimetry Research, Inc
OUI:70B3D510F*
ID_OUI_FROM_DATABASE=neQis
+OUI:70B3D5110*
+ ID_OUI_FROM_DATABASE=Orion Power Systems, Inc.
+
OUI:70B3D5111*
ID_OUI_FROM_DATABASE=Leonardo Sistemi Integrati S.r.l.
OUI:70B3D5155*
ID_OUI_FROM_DATABASE=Sanwa New Tec Co.,Ltd
+OUI:70B3D5157*
+ ID_OUI_FROM_DATABASE=Shanghai Jupper Technology Co.Ltd
+
OUI:70B3D5158*
ID_OUI_FROM_DATABASE=EAX Labs s.r.o.
OUI:70B3D5164*
ID_OUI_FROM_DATABASE=Tokyo Drawing Ltd.
+OUI:70B3D5165*
+ ID_OUI_FROM_DATABASE=Wuhan Xingtuxinke ELectronic Co.,Ltd
+
OUI:70B3D5166*
ID_OUI_FROM_DATABASE=SERIAL IMAGE INC.
OUI:70B3D5175*
ID_OUI_FROM_DATABASE=Akribis Systems
+OUI:70B3D5177*
+ ID_OUI_FROM_DATABASE=Wired Broadcast Ltd
+
OUI:70B3D5178*
ID_OUI_FROM_DATABASE=Gamber Johnson-LLC
OUI:70B3D517B*
ID_OUI_FROM_DATABASE=Vistec Electron Beam GmbH
+OUI:70B3D517C*
+ ID_OUI_FROM_DATABASE=Farmpro Ltd
+
OUI:70B3D517D*
ID_OUI_FROM_DATABASE=Entech Electronics
OUI:70B3D5190*
ID_OUI_FROM_DATABASE=Fantom Wireless, Inc.
+OUI:70B3D5191*
+ ID_OUI_FROM_DATABASE=Algodue Elettronica Srl
+
OUI:70B3D5192*
ID_OUI_FROM_DATABASE=ASPT, INC.
OUI:70B3D51B1*
ID_OUI_FROM_DATABASE=Shanghai Danyan Information Technology Co., Ltd.
+OUI:70B3D51B2*
+ ID_OUI_FROM_DATABASE=Cavagna Group Spa
+
OUI:70B3D51B3*
ID_OUI_FROM_DATABASE=Graphcore Ltd
OUI:70B3D51C0*
ID_OUI_FROM_DATABASE=W. H. Leary Co., Inc.
+OUI:70B3D51C1*
+ ID_OUI_FROM_DATABASE=Sphere of economical technologies Ltd
+
OUI:70B3D51C2*
ID_OUI_FROM_DATABASE=CENSIS, Uiversity of Glasgow
OUI:70B3D51C9*
ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+OUI:70B3D51CA*
+ ID_OUI_FROM_DATABASE=inomatic GmbH
+
OUI:70B3D51CB*
ID_OUI_FROM_DATABASE=MatchX GmbH
OUI:70B3D5262*
ID_OUI_FROM_DATABASE=OOO Research and Production Center Computer Technologies
+OUI:70B3D5263*
+ ID_OUI_FROM_DATABASE=AXING AG
+
OUI:70B3D5264*
ID_OUI_FROM_DATABASE=ifak technology + service GmbH
OUI:70B3D528F*
ID_OUI_FROM_DATABASE=Overline Systems
+OUI:70B3D5291*
+ ID_OUI_FROM_DATABASE=Sequent AG
+
OUI:70B3D5292*
ID_OUI_FROM_DATABASE=Boston Dynamics
OUI:70B3D5293*
ID_OUI_FROM_DATABASE=Solar RIg Technologies
+OUI:70B3D5294*
+ ID_OUI_FROM_DATABASE=RCH Vietnam Limited Liability Company
+
OUI:70B3D5295*
ID_OUI_FROM_DATABASE=Cello Electronics (UK) Ltd
OUI:70B3D5299*
ID_OUI_FROM_DATABASE=KMtronic ltd
+OUI:70B3D529A*
+ ID_OUI_FROM_DATABASE=Profusion Limited
+
OUI:70B3D529B*
ID_OUI_FROM_DATABASE=DermaLumics S.L.
OUI:70B3D52AE*
ID_OUI_FROM_DATABASE=Alere Technologies AS
+OUI:70B3D52AF*
+ ID_OUI_FROM_DATABASE=Enlaps
+
OUI:70B3D52B0*
ID_OUI_FROM_DATABASE=Beijing Zhongyi Yue Tai Technology Co., Ltd
OUI:70B3D52C7*
ID_OUI_FROM_DATABASE=Worldsensing
+OUI:70B3D52C8*
+ ID_OUI_FROM_DATABASE=SLAT
+
OUI:70B3D52C9*
ID_OUI_FROM_DATABASE=SEASON DESIGN TECHNOLOGY
OUI:70B3D52CA*
ID_OUI_FROM_DATABASE=TATTILE SRL
+OUI:70B3D52CB*
+ ID_OUI_FROM_DATABASE=Yongtong tech
+
OUI:70B3D52CC*
ID_OUI_FROM_DATABASE=WeWork Companies, Inc.
OUI:70B3D52D0*
ID_OUI_FROM_DATABASE=ijin co.,ltd.
+OUI:70B3D52D1*
+ ID_OUI_FROM_DATABASE=Integer.pl S.A.
+
OUI:70B3D52D2*
ID_OUI_FROM_DATABASE=SHANGHAI IRISIAN OPTRONICS TECHNOLOGY CO.,LTD.
+OUI:70B3D52D3*
+ ID_OUI_FROM_DATABASE=Hensoldt Sensors GmbH
+
OUI:70B3D52D4*
ID_OUI_FROM_DATABASE=CT Company
OUI:70B3D52D8*
ID_OUI_FROM_DATABASE=Unisight Digital Products
+OUI:70B3D52D9*
+ ID_OUI_FROM_DATABASE=ZPAS S.A.
+
OUI:70B3D52DA*
ID_OUI_FROM_DATABASE=Skywave Networks Private Limited
OUI:70B3D52F6*
ID_OUI_FROM_DATABASE=TATTILE SRL
+OUI:70B3D52F7*
+ ID_OUI_FROM_DATABASE=Military Research Institute
+
OUI:70B3D52F8*
ID_OUI_FROM_DATABASE=Tunstall A/S
OUI:70B3D52FA*
ID_OUI_FROM_DATABASE=Toray Medical Co.,Ltd
+OUI:70B3D52FB*
+ ID_OUI_FROM_DATABASE=IK MULTIMEDIA PRODUCTION SRL
+
OUI:70B3D52FC*
ID_OUI_FROM_DATABASE=Loanguard T/A SE Controls
OUI:70B3D5300*
ID_OUI_FROM_DATABASE=Novo DR Ltd.
+OUI:70B3D5301*
+ ID_OUI_FROM_DATABASE=WAYNE ANALYTICS LLC
+
OUI:70B3D5302*
ID_OUI_FROM_DATABASE=DogWatch Inc
OUI:70B3D5308*
ID_OUI_FROM_DATABASE=DSD MICROTECHNOLOGY,INC.
+OUI:70B3D530A*
+ ID_OUI_FROM_DATABASE=HongSeok Ltd.
+
OUI:70B3D530B*
ID_OUI_FROM_DATABASE=Ash Technologies
OUI:70B3D532A*
ID_OUI_FROM_DATABASE=Wuhan Xingtuxinke ELectronic Co.,Ltd
+OUI:70B3D532B*
+ ID_OUI_FROM_DATABASE=RTA srl
+
OUI:70B3D532C*
ID_OUI_FROM_DATABASE=ATION Corporation
OUI:70B3D533C*
ID_OUI_FROM_DATABASE=Videri Inc.
+OUI:70B3D533D*
+ ID_OUI_FROM_DATABASE=Schneider Electric Motion USA
+
OUI:70B3D533E*
ID_OUI_FROM_DATABASE=Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
OUI:70B3D5392*
ID_OUI_FROM_DATABASE=Contec Americas Inc.
+OUI:70B3D5393*
+ ID_OUI_FROM_DATABASE=Monnit Corporation
+
OUI:70B3D5394*
ID_OUI_FROM_DATABASE=Romteck Australia
OUI:70B3D53A1*
ID_OUI_FROM_DATABASE=Reckeen HDP Media sp. z o.o. sp. k.
+OUI:70B3D53A3*
+ ID_OUI_FROM_DATABASE=CDS Institute of Management Strategy, Inc.
+
OUI:70B3D53A4*
ID_OUI_FROM_DATABASE=Ascenix Corporation
OUI:70B3D53AA*
ID_OUI_FROM_DATABASE=RCATSONE
+OUI:70B3D53AC*
+ ID_OUI_FROM_DATABASE=RF-Tuote Oy
+
OUI:70B3D53AD*
ID_OUI_FROM_DATABASE=CT Company
OUI:70B3D53B0*
ID_OUI_FROM_DATABASE=Millennial Net, Inc.
+OUI:70B3D53B1*
+ ID_OUI_FROM_DATABASE=Global Power Products
+
OUI:70B3D53B2*
ID_OUI_FROM_DATABASE=Sicon srl
+OUI:70B3D53B4*
+ ID_OUI_FROM_DATABASE=YOUSUNG
+
OUI:70B3D53B5*
ID_OUI_FROM_DATABASE=Preston Industries dba PolyScience
OUI:70B3D53B8*
ID_OUI_FROM_DATABASE=nVideon, Inc.
+OUI:70B3D53B9*
+ ID_OUI_FROM_DATABASE=BirdDog Australia
+
OUI:70B3D53BA*
ID_OUI_FROM_DATABASE=Silex Inside
OUI:70B3D53CC*
ID_OUI_FROM_DATABASE=TerOpta Ltd
+OUI:70B3D53CD*
+ ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos
+
OUI:70B3D53CE*
ID_OUI_FROM_DATABASE=Aditec GmbH
OUI:70B3D53D2*
ID_OUI_FROM_DATABASE=Imagine Inc.
+OUI:70B3D53D3*
+ ID_OUI_FROM_DATABASE=GS Elektromedizinsiche Geräte G. Stemple GmbH
+
OUI:70B3D53D4*
ID_OUI_FROM_DATABASE=Sanmina Israel
OUI:70B3D5422*
ID_OUI_FROM_DATABASE=SUS Corporation
+OUI:70B3D5424*
+ ID_OUI_FROM_DATABASE=Underground Systems, Inc.
+
OUI:70B3D5425*
ID_OUI_FROM_DATABASE=SinterCast
OUI:70B3D543B*
ID_OUI_FROM_DATABASE=Kalycito Infotech Private Limited
+OUI:70B3D543C*
+ ID_OUI_FROM_DATABASE=Scenario Automation
+
OUI:70B3D543D*
ID_OUI_FROM_DATABASE=Veryx Technologies Private Limited
OUI:70B3D5467*
ID_OUI_FROM_DATABASE=GreenWake Technologies
+OUI:70B3D5468*
+ ID_OUI_FROM_DATABASE=Shanghai Junqian Sensing Technology Co., LTD
+
OUI:70B3D5469*
ID_OUI_FROM_DATABASE=Gentec Systems Co.
+OUI:70B3D546A*
+ ID_OUI_FROM_DATABASE=Shenzhen Vikings Technology Co., Ltd.
+
OUI:70B3D546B*
ID_OUI_FROM_DATABASE=Airborne Engineering Limited
OUI:70B3D5482*
ID_OUI_FROM_DATABASE=Aeryon Labs Inc
+OUI:70B3D5484*
+ ID_OUI_FROM_DATABASE=Hermann Sewerin GmbH
+
OUI:70B3D5486*
ID_OUI_FROM_DATABASE=ChongQing JianTao Technology Co., Ltd.
OUI:70B3D54A2*
ID_OUI_FROM_DATABASE=DEVAU Lemppenau GmbH
+OUI:70B3D54A3*
+ ID_OUI_FROM_DATABASE=TUALCOM ELEKTRONIK A.S.
+
OUI:70B3D54A4*
ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
OUI:70B3D54E1*
ID_OUI_FROM_DATABASE=Grupo Epelsa S.L.
+OUI:70B3D54E3*
+ ID_OUI_FROM_DATABASE=adnexo GmbH
+
OUI:70B3D54E4*
ID_OUI_FROM_DATABASE=W.A. Benjamin Electric Co.
OUI:70B3D5533*
ID_OUI_FROM_DATABASE=Nippon Marine Enterprises, Ltd.
+OUI:70B3D5534*
+ ID_OUI_FROM_DATABASE=Weihai Weigao Medical Imaging Technology Co., Ltd
+
OUI:70B3D5535*
ID_OUI_FROM_DATABASE=SITA Messtechnik GmbH
+OUI:70B3D5536*
+ ID_OUI_FROM_DATABASE=LARIMART SPA
+
OUI:70B3D5537*
ID_OUI_FROM_DATABASE=Biennebi s.r.l.
OUI:70B3D5566*
ID_OUI_FROM_DATABASE=Data Informs LLC
+OUI:70B3D5567*
+ ID_OUI_FROM_DATABASE=DogWatch Inc
+
OUI:70B3D5568*
ID_OUI_FROM_DATABASE=Small Data Garden Oy
OUI:70B3D55A0*
ID_OUI_FROM_DATABASE=Ascon Tecnologic S.r.l.
+OUI:70B3D55A1*
+ ID_OUI_FROM_DATABASE=BOE Technology Group Co., Ltd.
+
OUI:70B3D55A2*
ID_OUI_FROM_DATABASE=Wallner Automation GmbH
OUI:70B3D55C6*
ID_OUI_FROM_DATABASE=C4I Systems Ltd
+OUI:70B3D55C7*
+ ID_OUI_FROM_DATABASE=QSnet Visual Technologies Ltd
+
OUI:70B3D55C8*
ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+OUI:70B3D55C9*
+ ID_OUI_FROM_DATABASE=ICTK Holdings
+
OUI:70B3D55CA*
ID_OUI_FROM_DATABASE=ACD Elekronik GmbH
+OUI:70B3D55CB*
+ ID_OUI_FROM_DATABASE=ECoCoMS Ltd.
+
OUI:70B3D55CC*
ID_OUI_FROM_DATABASE=Akse srl
OUI:70B3D55D8*
ID_OUI_FROM_DATABASE=LYNX Technik AG
+OUI:70B3D55D9*
+ ID_OUI_FROM_DATABASE=olympus-ossa
+
OUI:70B3D55DA*
ID_OUI_FROM_DATABASE=Valk Welding B.V.
OUI:70B3D55FD*
ID_OUI_FROM_DATABASE=Windar Photonics
+OUI:70B3D55FE*
+ ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
+
OUI:70B3D55FF*
ID_OUI_FROM_DATABASE=Vaisala Oyj
OUI:70B3D5611*
ID_OUI_FROM_DATABASE=Avionica
+OUI:70B3D5612*
+ ID_OUI_FROM_DATABASE=Edge Power Solutions
+
OUI:70B3D5613*
ID_OUI_FROM_DATABASE=Suprock Technologies
OUI:70B3D5625*
ID_OUI_FROM_DATABASE=VX Instruments GmbH
+OUI:70B3D5626*
+ ID_OUI_FROM_DATABASE=KRONOTECH SRL
+
OUI:70B3D5628*
ID_OUI_FROM_DATABASE=MECT SRL
+OUI:70B3D5629*
+ ID_OUI_FROM_DATABASE=OZRAY
+
OUI:70B3D562A*
ID_OUI_FROM_DATABASE=DOGA
OUI:70B3D5631*
ID_OUI_FROM_DATABASE=SENSO2ME
+OUI:70B3D5632*
+ ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
+
OUI:70B3D5633*
ID_OUI_FROM_DATABASE=OBSERVER FOUNDATION
OUI:70B3D563C*
ID_OUI_FROM_DATABASE=Pivothead
-OUI:70B3D563D*
- ID_OUI_FROM_DATABASE=Storbyte, Inc.
-
OUI:70B3D563E*
ID_OUI_FROM_DATABASE=RIKEN OPTECH CORPORATION
OUI:70B3D563F*
- ID_OUI_FROM_DATABASE=YG COMPANY CO., LTD
+ ID_OUI_FROM_DATABASE=DARBS Inc.
OUI:70B3D5640*
ID_OUI_FROM_DATABASE=Electronic Equipment Company Pvt. Ltd.
OUI:70B3D5656*
ID_OUI_FROM_DATABASE=SonoSound ApS
+OUI:70B3D5657*
+ ID_OUI_FROM_DATABASE=ID Quantique SA
+
OUI:70B3D5658*
ID_OUI_FROM_DATABASE=emperor brands
OUI:70B3D566D*
ID_OUI_FROM_DATABASE=Sanmina Israel
+OUI:70B3D566F*
+ ID_OUI_FROM_DATABASE=Simplified MFG
+
OUI:70B3D5670*
ID_OUI_FROM_DATABASE=Particle sizing systems
OUI:70B3D567B*
ID_OUI_FROM_DATABASE=Stesalit Systems Ltd
+OUI:70B3D567C*
+ ID_OUI_FROM_DATABASE=Benchmark Electronics - Secure Technology
+
OUI:70B3D567D*
ID_OUI_FROM_DATABASE=Acrodea, Inc.
OUI:70B3D5686*
ID_OUI_FROM_DATABASE=Access Protocol Pty Ltd
+OUI:70B3D5687*
+ ID_OUI_FROM_DATABASE=Volution Group UK
+
OUI:70B3D5688*
ID_OUI_FROM_DATABASE=MG s.r.l.
OUI:70B3D569C*
ID_OUI_FROM_DATABASE=Keepen
+OUI:70B3D569D*
+ ID_OUI_FROM_DATABASE=JPEmbedded Mazan Filipek Sp. J.
+
OUI:70B3D569E*
ID_OUI_FROM_DATABASE=PTYPE Co., LTD.
OUI:70B3D56A9*
ID_OUI_FROM_DATABASE=OHMORI ELECTRIC INDUSTRIES CO.LTD
+OUI:70B3D56AA*
+ ID_OUI_FROM_DATABASE=Intermobility
+
OUI:70B3D56AB*
ID_OUI_FROM_DATABASE=ARROW (CHINA) ELECTRONICS TRADING CO., LTD.
+OUI:70B3D56AC*
+ ID_OUI_FROM_DATABASE=Ketronixs Sdn Bhd
+
OUI:70B3D56AD*
ID_OUI_FROM_DATABASE=CONNIT
OUI:70B3D56C7*
ID_OUI_FROM_DATABASE=Becton Dickinson
+OUI:70B3D56C9*
+ ID_OUI_FROM_DATABASE=Redstone Sunshine(Beijing)Technology Co.,Ltd.
+
OUI:70B3D56CA*
ID_OUI_FROM_DATABASE=LINEAGE POWER PVT LTD.,
OUI:70B3D56DA*
ID_OUI_FROM_DATABASE=Enovative Networks, Inc.
+OUI:70B3D56DB*
+ ID_OUI_FROM_DATABASE=Techimp - Altanova group Srl
+
+OUI:70B3D56DC*
+ ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
+
OUI:70B3D56DD*
ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS
OUI:70B3D56F4*
ID_OUI_FROM_DATABASE=Private
+OUI:70B3D56F5*
+ ID_OUI_FROM_DATABASE=Cominfo, Inc.
+
OUI:70B3D56F6*
ID_OUI_FROM_DATABASE=Acco Brands Europe
OUI:70B3D570B*
ID_OUI_FROM_DATABASE=Alere Technologies AS
+OUI:70B3D570C*
+ ID_OUI_FROM_DATABASE=Potter Electric Signal Co. LLC
+
OUI:70B3D570E*
ID_OUI_FROM_DATABASE=Wuhan Xingtuxinke ELectronic Co.,Ltd
OUI:70B3D5735*
ID_OUI_FROM_DATABASE=Swiss Audio
+OUI:70B3D5736*
+ ID_OUI_FROM_DATABASE=Jabil, Inc.
+
OUI:70B3D5737*
ID_OUI_FROM_DATABASE=SD Biosensor
ID_OUI_FROM_DATABASE=Zigencorp, Inc
OUI:70B3D573A*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=DOLBY LABORATORIES, INC.
OUI:70B3D573B*
ID_OUI_FROM_DATABASE=S-I-C
OUI:70B3D573E*
ID_OUI_FROM_DATABASE=Trident RFID Pty Ltd
+OUI:70B3D573F*
+ ID_OUI_FROM_DATABASE=LLC Open Converged Networks
+
OUI:70B3D5740*
ID_OUI_FROM_DATABASE=Prisma Telecom Testing Srl
OUI:70B3D5755*
ID_OUI_FROM_DATABASE=LandmarkTech Systems Technology Co.,Ltd.
+OUI:70B3D5756*
+ ID_OUI_FROM_DATABASE=TimeMachines Inc.
+
OUI:70B3D5757*
ID_OUI_FROM_DATABASE=GABO
OUI:70B3D5761*
ID_OUI_FROM_DATABASE=Critical Link LLC
+OUI:70B3D5762*
+ ID_OUI_FROM_DATABASE=Transformational Security, LLC
+
OUI:70B3D5763*
ID_OUI_FROM_DATABASE=A Trap, USA
OUI:70B3D57D2*
ID_OUI_FROM_DATABASE=SDK Kristall
+OUI:70B3D57D3*
+ ID_OUI_FROM_DATABASE=OLEDCOMM
+
+OUI:70B3D57D4*
+ ID_OUI_FROM_DATABASE=Computechnic AG
+
OUI:70B3D57D5*
ID_OUI_FROM_DATABASE=SICS Swedish ICT
OUI:70B3D57EF*
ID_OUI_FROM_DATABASE=CRAVIS CO., LIMITED
+OUI:70B3D57F0*
+ ID_OUI_FROM_DATABASE=Yokogawa Denshikiki Co.,Ltd
+
OUI:70B3D57F1*
ID_OUI_FROM_DATABASE=AeroVision Avionics, Inc.
OUI:70B3D580B*
ID_OUI_FROM_DATABASE=Fischer Block, Inc.
+OUI:70B3D580C*
+ ID_OUI_FROM_DATABASE=Algra tec AG
+
OUI:70B3D580D*
ID_OUI_FROM_DATABASE=Data Physics Corporation
OUI:70B3D5828*
ID_OUI_FROM_DATABASE=Xacti Corporation
+OUI:70B3D582A*
+ ID_OUI_FROM_DATABASE=C W F Hamilton & Co Ltd
+
OUI:70B3D582C*
ID_OUI_FROM_DATABASE=NELS Ltd.
OUI:70B3D5845*
ID_OUI_FROM_DATABASE=Harborside Technology
+OUI:70B3D5846*
+ ID_OUI_FROM_DATABASE=National Time & Signal Corp.
+
OUI:70B3D5847*
ID_OUI_FROM_DATABASE=Ai-Lynx
OUI:70B3D5863*
ID_OUI_FROM_DATABASE=Shenzhen Wesion Technology Co., Ltd
+OUI:70B3D5864*
+ ID_OUI_FROM_DATABASE=BORMANN EDV und Zubehoer
+
OUI:70B3D5865*
ID_OUI_FROM_DATABASE=Insitu, Inc.
OUI:70B3D5866*
ID_OUI_FROM_DATABASE=MEPS Realtime
+OUI:70B3D5867*
+ ID_OUI_FROM_DATABASE=Specialized Communications Corp.
+
OUI:70B3D5868*
ID_OUI_FROM_DATABASE=U-JIN Mesco Co., Ltd.
OUI:70B3D5879*
ID_OUI_FROM_DATABASE=ZIGPOS GmbH
+OUI:70B3D587A*
+ ID_OUI_FROM_DATABASE=Accolade Technology Inc
+
OUI:70B3D587B*
ID_OUI_FROM_DATABASE=Liquid Instruments Pty Ltd
OUI:70B3D5885*
ID_OUI_FROM_DATABASE=QuirkLogic
+OUI:70B3D5886*
+ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+
OUI:70B3D5888*
ID_OUI_FROM_DATABASE=Zetechtics Ltd
OUI:70B3D589E*
ID_OUI_FROM_DATABASE=Innovative Control Systems, LP
+OUI:70B3D589F*
+ ID_OUI_FROM_DATABASE=Levelup Holding, Inc.
+
OUI:70B3D58A0*
ID_OUI_FROM_DATABASE=DM RADIOCOM
+OUI:70B3D58A1*
+ ID_OUI_FROM_DATABASE=TIAMA
+
OUI:70B3D58A2*
ID_OUI_FROM_DATABASE=WINNERS DIGITAL CORPORATION
+OUI:70B3D58A3*
+ ID_OUI_FROM_DATABASE=Loehnert Elektronik GmbH
+
OUI:70B3D58A4*
ID_OUI_FROM_DATABASE=Phyton, Inc. Microsystems and Development Tools
OUI:70B3D58BC*
ID_OUI_FROM_DATABASE=GSI GeoSolutions International Ltd
+OUI:70B3D58BD*
+ ID_OUI_FROM_DATABASE=MAHLE ELECTRONICS, SLU
+
OUI:70B3D58BE*
ID_OUI_FROM_DATABASE=Connoiseur Electronics Private Limited
OUI:70B3D58D3*
ID_OUI_FROM_DATABASE=PERFORMANCE CONTROLS, INC.
+OUI:70B3D58D5*
+ ID_OUI_FROM_DATABASE=Guangzhou Wanglu
+
OUI:70B3D58D7*
ID_OUI_FROM_DATABASE=Schneider Electric Motion USA
OUI:70B3D58DC*
ID_OUI_FROM_DATABASE=Niveo International BV
+OUI:70B3D58DD*
+ ID_OUI_FROM_DATABASE=Vertex Co.,Ltd.
+
+OUI:70B3D58DE*
+ ID_OUI_FROM_DATABASE=Indutherm Giesstechnologie GmbH
+
OUI:70B3D58DF*
ID_OUI_FROM_DATABASE=DORLET SAU
OUI:70B3D58F0*
ID_OUI_FROM_DATABASE=ERAESEEDS co.,ltd.
+OUI:70B3D58F1*
+ ID_OUI_FROM_DATABASE=Paramount Bed Holdings Co., Ltd.
+
OUI:70B3D58F2*
ID_OUI_FROM_DATABASE=Rimota Limited
OUI:70B3D58FA*
ID_OUI_FROM_DATABASE=DEA SYSTEM SPA
+OUI:70B3D58FC*
+ ID_OUI_FROM_DATABASE=Mianjie Technology
+
+OUI:70B3D58FE*
+ ID_OUI_FROM_DATABASE=Selmatec AS
+
OUI:70B3D58FF*
ID_OUI_FROM_DATABASE=IMST GmbH
OUI:70B3D5904*
ID_OUI_FROM_DATABASE=PHB Eletronica Ltda.
+OUI:70B3D5905*
+ ID_OUI_FROM_DATABASE=Wexiodisk AB
+
OUI:70B3D5906*
ID_OUI_FROM_DATABASE=Aplex Technology Inc.
ID_OUI_FROM_DATABASE=SLAT
OUI:70B3D5922*
- ID_OUI_FROM_DATABASE=Adcole Maryland Aerospace
+ ID_OUI_FROM_DATABASE=Adcole Space
OUI:70B3D5923*
ID_OUI_FROM_DATABASE=eumig industrie-tv GmbH
OUI:70B3D594B*
ID_OUI_FROM_DATABASE=RF Code
+OUI:70B3D594C*
+ ID_OUI_FROM_DATABASE=Honeywell/Intelligrated
+
OUI:70B3D594D*
ID_OUI_FROM_DATABASE=SEASON DESIGN TECHNOLOGY
OUI:70B3D5991*
ID_OUI_FROM_DATABASE=Javasparrow Inc.
+OUI:70B3D5992*
+ ID_OUI_FROM_DATABASE=KAEONIT
+
OUI:70B3D5993*
ID_OUI_FROM_DATABASE=ioThings
OUI:70B3D59A7*
ID_OUI_FROM_DATABASE=Honeywell
+OUI:70B3D59A8*
+ ID_OUI_FROM_DATABASE=Egag, LLC
+
OUI:70B3D59A9*
ID_OUI_FROM_DATABASE=PABLO AIR Co., LTD
OUI:70B3D59C1*
ID_OUI_FROM_DATABASE=Zeroplus Technology Co.,Ltd.
+OUI:70B3D59C2*
+ ID_OUI_FROM_DATABASE=Sportsbeams Lighting, Inc.
+
OUI:70B3D59C3*
ID_OUI_FROM_DATABASE=Sevensense Robotics AG
OUI:70B3D59CC*
ID_OUI_FROM_DATABASE=Zaxcom Inc
+OUI:70B3D59CD*
+ ID_OUI_FROM_DATABASE=WEPTECH elektronik GmbH
+
OUI:70B3D59CE*
ID_OUI_FROM_DATABASE=Terragene S.A
OUI:70B3D59E3*
ID_OUI_FROM_DATABASE=LG Electronics
+OUI:70B3D59E4*
+ ID_OUI_FROM_DATABASE=K&A Electronics Inc.
+
+OUI:70B3D59E5*
+ ID_OUI_FROM_DATABASE=Antek Technology
+
OUI:70B3D59E6*
ID_OUI_FROM_DATABASE=BLOCKSI LLC
OUI:70B3D59E8*
ID_OUI_FROM_DATABASE=Zerospace ICT Services B.V.
+OUI:70B3D59E9*
+ ID_OUI_FROM_DATABASE=LiveCopper Inc.
+
OUI:70B3D59EA*
ID_OUI_FROM_DATABASE=Blue Storm Associates, Inc.
OUI:70B3D5A22*
ID_OUI_FROM_DATABASE=eSys Solutions Sweden AB
+OUI:70B3D5A23*
+ ID_OUI_FROM_DATABASE=LG Electronics
+
OUI:70B3D5A24*
ID_OUI_FROM_DATABASE=Booz Allen Hamilton
OUI:70B3D5AAA*
ID_OUI_FROM_DATABASE=Xemex NV
+OUI:70B3D5AAB*
+ ID_OUI_FROM_DATABASE=QUISS GmbH
+
OUI:70B3D5AAC*
ID_OUI_FROM_DATABASE=SensoTec GmbH
OUI:70B3D5AD8*
ID_OUI_FROM_DATABASE=Euklis by GSG International
+OUI:70B3D5AD9*
+ ID_OUI_FROM_DATABASE=aelettronica group srl
+
OUI:70B3D5ADA*
ID_OUI_FROM_DATABASE=Private
OUI:70B3D5AE3*
ID_OUI_FROM_DATABASE=Zhejiang Wellsun Electric Meter Co.,Ltd
+OUI:70B3D5AE4*
+ ID_OUI_FROM_DATABASE=Nuance Hearing Ltd.
+
OUI:70B3D5AE5*
ID_OUI_FROM_DATABASE=BeatCraft, Inc.
OUI:70B3D5B53*
ID_OUI_FROM_DATABASE=Revolution Retail Systems, LLC
+OUI:70B3D5B54*
+ ID_OUI_FROM_DATABASE=Packet Power
+
OUI:70B3D5B55*
ID_OUI_FROM_DATABASE=CTAG - ESG36871424
OUI:70B3D5B56*
ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
+OUI:70B3D5B57*
+ ID_OUI_FROM_DATABASE=Shanghai Qinyue Communication Technology Co., Ltd.
+
OUI:70B3D5B58*
ID_OUI_FROM_DATABASE=INTERNET PROTOCOLO LOGICA SL
OUI:70B3D5B62*
ID_OUI_FROM_DATABASE=Sakura Seiki Co.,Ltd.
+OUI:70B3D5B63*
+ ID_OUI_FROM_DATABASE=Ideas srl
+
OUI:70B3D5B64*
ID_OUI_FROM_DATABASE=OSUNG LST CO.,LTD.
OUI:70B3D5B67*
ID_OUI_FROM_DATABASE=RedWave Labs Ltd
+OUI:70B3D5B68*
+ ID_OUI_FROM_DATABASE=S-Rain Control A/S
+
OUI:70B3D5B6A*
ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
OUI:70B3D5B6E*
ID_OUI_FROM_DATABASE=Edgeware AB
+OUI:70B3D5B6F*
+ ID_OUI_FROM_DATABASE=Integra Metering SAS
+
OUI:70B3D5B71*
ID_OUI_FROM_DATABASE=Private
OUI:70B3D5B85*
ID_OUI_FROM_DATABASE=Fenotech Inc.
+OUI:70B3D5B86*
+ ID_OUI_FROM_DATABASE=Cubitech
+
OUI:70B3D5B87*
ID_OUI_FROM_DATABASE=CAITRON GmbH
OUI:70B3D5B8F*
ID_OUI_FROM_DATABASE=Assembly Contracts Ltd
+OUI:70B3D5B90*
+ ID_OUI_FROM_DATABASE=Amico Corporation
+
OUI:70B3D5B91*
ID_OUI_FROM_DATABASE=Dynetics, Inc.
OUI:70B3D5BC6*
ID_OUI_FROM_DATABASE=Hatteland Display AS
+OUI:70B3D5BC7*
+ ID_OUI_FROM_DATABASE=Autonomic Controls, Inc.
+
OUI:70B3D5BC9*
ID_OUI_FROM_DATABASE=Yite technology
OUI:70B3D5C01*
ID_OUI_FROM_DATABASE=SmartGuard LLC
+OUI:70B3D5C02*
+ ID_OUI_FROM_DATABASE=Garmo Instruments S.L.
+
OUI:70B3D5C03*
ID_OUI_FROM_DATABASE=XAVi Technologies Corp.
OUI:70B3D5C0C*
ID_OUI_FROM_DATABASE=Tech4Race
+OUI:70B3D5C0D*
+ ID_OUI_FROM_DATABASE=Clarity Medical Pvt Ltd
+
OUI:70B3D5C0E*
ID_OUI_FROM_DATABASE=SYSDEV Srl
OUI:70B3D5C1D*
ID_OUI_FROM_DATABASE=Kranze Technology Solutions
+OUI:70B3D5C1E*
+ ID_OUI_FROM_DATABASE=Kron Medidores
+
OUI:70B3D5C1F*
ID_OUI_FROM_DATABASE=Behr Technologies Inc
OUI:70B3D5C22*
ID_OUI_FROM_DATABASE=Skyriver Communications Inc.
+OUI:70B3D5C23*
+ ID_OUI_FROM_DATABASE=Sumitomo Heavy Industries, Ltd.
+
OUI:70B3D5C24*
ID_OUI_FROM_DATABASE=Elbit Systems of America
OUI:70B3D5C45*
ID_OUI_FROM_DATABASE=Stiebel Eltron GmbH
+OUI:70B3D5C48*
+ ID_OUI_FROM_DATABASE=Weltek Technologies Co. Ltd.
+
OUI:70B3D5C49*
ID_OUI_FROM_DATABASE=BTG Instruments AB
OUI:70B3D5C5D*
ID_OUI_FROM_DATABASE=FOSHAN SHILANTIAN NETWORK S.T. CO., LTD.
+OUI:70B3D5C5E*
+ ID_OUI_FROM_DATABASE=Frog Cellsat Limited
+
OUI:70B3D5C5F*
ID_OUI_FROM_DATABASE=Clean-Lasersysteme GmbH
OUI:70B3D5C74*
ID_OUI_FROM_DATABASE=Qtechnology A/S
+OUI:70B3D5C75*
+ ID_OUI_FROM_DATABASE=BIT Group USA, Inc.
+
OUI:70B3D5C76*
ID_OUI_FROM_DATABASE=ELA INNOVATION
OUI:70B3D5C7B*
ID_OUI_FROM_DATABASE=EM Clarity Pty Ltd
+OUI:70B3D5C7C*
+ ID_OUI_FROM_DATABASE=Beijing Aumiwalker technology CO.,LTD
+
OUI:70B3D5C7D*
ID_OUI_FROM_DATABASE=Metatronics B.V.
OUI:70B3D5C8F*
ID_OUI_FROM_DATABASE=TRIDENT INFOSOL PVT LTD
+OUI:70B3D5C90*
+ ID_OUI_FROM_DATABASE=Diretta
+
OUI:70B3D5C91*
ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
OUI:70B3D5D05*
ID_OUI_FROM_DATABASE=Colmek
+OUI:70B3D5D06*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+
OUI:70B3D5D07*
ID_OUI_FROM_DATABASE=Waversa Systems
OUI:70B3D5D0E*
ID_OUI_FROM_DATABASE=Beijing Aumiwalker technology CO.,LTD
+OUI:70B3D5D0F*
+ ID_OUI_FROM_DATABASE=Alto Aviation
+
OUI:70B3D5D10*
ID_OUI_FROM_DATABASE=Contec Americas Inc.
OUI:70B3D5D16*
ID_OUI_FROM_DATABASE=Monnit Corporation
+OUI:70B3D5D18*
+ ID_OUI_FROM_DATABASE=MetCom Solutions GmbH
+
+OUI:70B3D5D19*
+ ID_OUI_FROM_DATABASE=Senior Group LLC
+
OUI:70B3D5D1A*
ID_OUI_FROM_DATABASE=Monnit Corporation
OUI:70B3D5D34*
ID_OUI_FROM_DATABASE=G-PHILOS CO.,LTD
+OUI:70B3D5D35*
+ ID_OUI_FROM_DATABASE=King-On Technology Ltd.
+
OUI:70B3D5D36*
ID_OUI_FROM_DATABASE=Insitu Inc.
OUI:70B3D5D67*
ID_OUI_FROM_DATABASE=ALPHA Corporation
+OUI:70B3D5D68*
+ ID_OUI_FROM_DATABASE=Tobi Tribe Inc
+
OUI:70B3D5D69*
ID_OUI_FROM_DATABASE=Thermo Fisher Scientific
OUI:70B3D5D7C*
ID_OUI_FROM_DATABASE=D.T.S Illuminazione Srl
+OUI:70B3D5D7D*
+ ID_OUI_FROM_DATABASE=BESO sp. z o.o.
+
OUI:70B3D5D7E*
ID_OUI_FROM_DATABASE=Triax A/S
OUI:70B3D5D87*
ID_OUI_FROM_DATABASE=Zigen Corp
+OUI:70B3D5D88*
+ ID_OUI_FROM_DATABASE=Nidec asi spa
+
OUI:70B3D5D89*
ID_OUI_FROM_DATABASE=Resolution Systems
OUI:70B3D5D95*
ID_OUI_FROM_DATABASE=SANO SERVICE Co.,Ltd
+OUI:70B3D5D96*
+ ID_OUI_FROM_DATABASE=Thermo Fisher Scientific Inc.
+
OUI:70B3D5D97*
- ID_OUI_FROM_DATABASE=BRS Sistemas Eletronicos
+ ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos
OUI:70B3D5D98*
ID_OUI_FROM_DATABASE=ACD Elekronik GmbH
+OUI:70B3D5D99*
+ ID_OUI_FROM_DATABASE=Nilar AB
+
OUI:70B3D5D9A*
ID_OUI_FROM_DATABASE=Wuhan Xingtuxinke ELectronic Co.,Ltd
OUI:70B3D5DA6*
ID_OUI_FROM_DATABASE=Redfish Group Pty Ltd
+OUI:70B3D5DA7*
+ ID_OUI_FROM_DATABASE=Network Innovations
+
OUI:70B3D5DA8*
ID_OUI_FROM_DATABASE=Tagarno AS
OUI:70B3D5DB2*
ID_OUI_FROM_DATABASE=Micro Electroninc Products
+OUI:70B3D5DB3*
+ ID_OUI_FROM_DATABASE=Klaxoon
+
OUI:70B3D5DB4*
ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
OUI:70B3D5DB8*
ID_OUI_FROM_DATABASE=SISTEM SA
+OUI:70B3D5DBA*
+ ID_OUI_FROM_DATABASE=KODENSHI CORP.
+
OUI:70B3D5DBB*
ID_OUI_FROM_DATABASE=Fuhr GmbH Filtertechnik
OUI:70B3D5DC3*
ID_OUI_FROM_DATABASE=Fath Mechatronics
+OUI:70B3D5DC4*
+ ID_OUI_FROM_DATABASE=Peter Huber Kaeltemaschinenbau AG
+
OUI:70B3D5DC5*
ID_OUI_FROM_DATABASE=Excel Medical Electronics LLC
ID_OUI_FROM_DATABASE=Neuron GmbH
OUI:70B3D5E1C*
- ID_OUI_FROM_DATABASE=Xcenter AS
+ ID_OUI_FROM_DATABASE=RoomMate AS
OUI:70B3D5E1E*
ID_OUI_FROM_DATABASE=Umano Medical Inc.
OUI:70B3D5E2E*
ID_OUI_FROM_DATABASE=Merz s.r.o.
+OUI:70B3D5E2F*
+ ID_OUI_FROM_DATABASE=Flextronics International Kft.
+
OUI:70B3D5E30*
ID_OUI_FROM_DATABASE=QUISS AG
OUI:70B3D5E36*
ID_OUI_FROM_DATABASE=Guidance Navigation Limited
+OUI:70B3D5E37*
+ ID_OUI_FROM_DATABASE=Eurotempest AB
+
OUI:70B3D5E38*
ID_OUI_FROM_DATABASE=Cursor Systems NV
OUI:70B3D5E45*
ID_OUI_FROM_DATABASE=Momentum Data Systems
+OUI:70B3D5E46*
+ ID_OUI_FROM_DATABASE=7thSense Design Limited
+
OUI:70B3D5E47*
ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
OUI:70B3D5E50*
ID_OUI_FROM_DATABASE=Advanced Vision Technology Ltd
+OUI:70B3D5E51*
+ ID_OUI_FROM_DATABASE=NooliTIC
+
OUI:70B3D5E52*
ID_OUI_FROM_DATABASE=Guangzhou Moblin Technology Co., Ltd.
OUI:70B3D5E59*
ID_OUI_FROM_DATABASE=Fracarro srl
+OUI:70B3D5E5A*
+ ID_OUI_FROM_DATABASE=Cardinal Scales Manufacturing Co
+
OUI:70B3D5E5B*
ID_OUI_FROM_DATABASE=Argosy Labs Inc.
OUI:70B3D5E63*
ID_OUI_FROM_DATABASE=Potomac Electric Corporation
+OUI:70B3D5E64*
+ ID_OUI_FROM_DATABASE=HONG JIANG ELECTRONICS CO., LTD.
+
OUI:70B3D5E67*
ID_OUI_FROM_DATABASE=APPLIED PROCESSING
OUI:70B3D5E72*
ID_OUI_FROM_DATABASE=KDT Corp.
+OUI:70B3D5E73*
+ ID_OUI_FROM_DATABASE=Zeus Control Systems Ltd
+
OUI:70B3D5E74*
ID_OUI_FROM_DATABASE=Exfrontier Co., Ltd.
OUI:70B3D5E7E*
ID_OUI_FROM_DATABASE=Groupe Citypassenger Inc
+OUI:70B3D5E7F*
+ ID_OUI_FROM_DATABASE=Sankyo Intec Co,ltd
+
OUI:70B3D5E80*
ID_OUI_FROM_DATABASE=Changzhou Rapid Information Technology Co,Ltd
OUI:70B3D5E82*
ID_OUI_FROM_DATABASE=RF Track
+OUI:70B3D5E83*
+ ID_OUI_FROM_DATABASE=Talleres de Escoriaza SA
+
OUI:70B3D5E84*
ID_OUI_FROM_DATABASE=ENTEC Electric & Electronic Co., LTD.
OUI:70B3D5EAE*
ID_OUI_FROM_DATABASE=Orlaco Products B.V.
+OUI:70B3D5EAF*
+ ID_OUI_FROM_DATABASE=Sicon srl
+
OUI:70B3D5EB0*
ID_OUI_FROM_DATABASE=Nautel Limted
OUI:70B3D5EB5*
ID_OUI_FROM_DATABASE=JUSTEK INC
+OUI:70B3D5EB6*
+ ID_OUI_FROM_DATABASE=EnergizeEV
+
OUI:70B3D5EB7*
ID_OUI_FROM_DATABASE=Skreens
OUI:70B3D5ED1*
ID_OUI_FROM_DATABASE=Przemyslowy Instytut Automatyki i Pomiarow
+OUI:70B3D5ED2*
+ ID_OUI_FROM_DATABASE=PCTEL
+
+OUI:70B3D5ED3*
+ ID_OUI_FROM_DATABASE=Beijing Lihong Create Co., Ltd.
+
OUI:70B3D5ED5*
ID_OUI_FROM_DATABASE=hangzhou battle link technology Co.,Ltd
OUI:70B3D5ED8*
ID_OUI_FROM_DATABASE=Wartsila Voyage Limited
+OUI:70B3D5EDA*
+ ID_OUI_FROM_DATABASE=Breas Medical AB
+
OUI:70B3D5EDB*
ID_OUI_FROM_DATABASE=Netfort Solutions
OUI:70B3D5F0D*
ID_OUI_FROM_DATABASE=MeQ Inc.
+OUI:70B3D5F0E*
+ ID_OUI_FROM_DATABASE=TextSpeak Corporation
+
OUI:70B3D5F0F*
ID_OUI_FROM_DATABASE=Kyoto Denkiki
OUI:70B3D5F14*
ID_OUI_FROM_DATABASE=SANYU SWITCH CO., LTD.
+OUI:70B3D5F15*
+ ID_OUI_FROM_DATABASE=ARECA EMBEDDED SYSTEMS PVT LTD
+
OUI:70B3D5F16*
ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos
OUI:70B3D5F30*
ID_OUI_FROM_DATABASE=ADE Technology Inc.
+OUI:70B3D5F33*
+ ID_OUI_FROM_DATABASE=Beijing Vizum Technology Co.,Ltd.
+
OUI:70B3D5F34*
ID_OUI_FROM_DATABASE=MacGray Services
OUI:70B3D5F45*
ID_OUI_FROM_DATABASE=Norbit ODM AS
+OUI:70B3D5F46*
+ ID_OUI_FROM_DATABASE=Season Electronics Ltd
+
OUI:70B3D5F47*
ID_OUI_FROM_DATABASE=TXMission Ltd.
OUI:70B3D5F48*
ID_OUI_FROM_DATABASE=HEITEC AG
+OUI:70B3D5F4A*
+ ID_OUI_FROM_DATABASE=LACS SRL
+
OUI:70B3D5F4B*
ID_OUI_FROM_DATABASE=Chengdu Lingya Technology Co., Ltd.
OUI:70B3D5F4D*
ID_OUI_FROM_DATABASE=Honeywell
+OUI:70B3D5F4E*
+ ID_OUI_FROM_DATABASE=Hunan Lianzhong Technology Co.,Ltd.
+
OUI:70B3D5F4F*
ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
OUI:70B3D5F58*
ID_OUI_FROM_DATABASE=CDR SRL
+OUI:70B3D5F59*
+ ID_OUI_FROM_DATABASE=KOREA SPECTRAL PRODUCTS
+
OUI:70B3D5F5A*
ID_OUI_FROM_DATABASE=HAMEG GmbH
OUI:70B3D5F5F*
ID_OUI_FROM_DATABASE=RFRain LLC
+OUI:70B3D5F60*
+ ID_OUI_FROM_DATABASE=MPM Micro Präzision Marx GmbH
+
OUI:70B3D5F61*
ID_OUI_FROM_DATABASE=Power Diagnostic Service
OUI:70B3D5F65*
ID_OUI_FROM_DATABASE=MARKUS LABS
+OUI:70B3D5F66*
+ ID_OUI_FROM_DATABASE=Seznam.cz, a.s., CZ26168685
+
OUI:70B3D5F67*
ID_OUI_FROM_DATABASE=winsun AG
OUI:70B3D5F7C*
ID_OUI_FROM_DATABASE=Private
+OUI:70B3D5F7D*
+ ID_OUI_FROM_DATABASE=2M Technology
+
OUI:70B3D5F7E*
ID_OUI_FROM_DATABASE=Alpha Elettronica s.r.l.
OUI:70B3D5FC3*
ID_OUI_FROM_DATABASE=myUpTech AB
+OUI:70B3D5FC4*
+ ID_OUI_FROM_DATABASE=AERIAL CAMERA SYSTEMS Ltd
+
OUI:70B3D5FC5*
ID_OUI_FROM_DATABASE=Eltwin A/S
OUI:70B3D5FC6*
ID_OUI_FROM_DATABASE=Tecnint HTE SRL
+OUI:70B3D5FC7*
+ ID_OUI_FROM_DATABASE=Invert Robotics Ltd.
+
OUI:70B3D5FC8*
ID_OUI_FROM_DATABASE=Moduware PTY LTD
OUI:70B3D5FD8*
ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+OUI:70B3D5FD9*
+ ID_OUI_FROM_DATABASE=eSight
+
OUI:70B3D5FDA*
ID_OUI_FROM_DATABASE=ACD Elektronik GmbH
OUI:70B3D5FE4*
ID_OUI_FROM_DATABASE=CARE PVT LTD
+OUI:70B3D5FE5*
+ ID_OUI_FROM_DATABASE=Malin Space Science System
+
OUI:70B3D5FE6*
ID_OUI_FROM_DATABASE=SHIZUKI ELECTRIC CO.,INC
OUI:70B599*
ID_OUI_FROM_DATABASE=Embedded Technologies s.r.o.
+OUI:70B5E8*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
OUI:70B7AA*
ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
OUI:740EDB*
ID_OUI_FROM_DATABASE=Optowiz Co., Ltd
+OUI:7412B3*
+ ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
+
OUI:7412BB*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
OUI:7438B7*
ID_OUI_FROM_DATABASE=CANON INC.
+OUI:743A20*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
OUI:743A65*
ID_OUI_FROM_DATABASE=NEC Corporation
OUI:747818*
ID_OUI_FROM_DATABASE=Jurumani Solutions
+OUI:747A90*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+
OUI:747B7A*
ID_OUI_FROM_DATABASE=ETH Inc.
OUI:74A78E*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:74A7EA*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
+OUI:74AB93*
+ ID_OUI_FROM_DATABASE=Blink by Amazon
+
OUI:74AC5F*
ID_OUI_FROM_DATABASE=Qiku Internet Network Scientific (Shenzhen) Co., Ltd.
OUI:74CA25*
ID_OUI_FROM_DATABASE=Calxeda, Inc.
+OUI:74CBF3*
+ ID_OUI_FROM_DATABASE=Lava international limited
+
OUI:74CC39*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
OUI:74F737*
ID_OUI_FROM_DATABASE=KCE
+OUI:74F7F6*
+ ID_OUI_FROM_DATABASE=Shanghai Sunmi Technology Co.,Ltd.
+
OUI:74F85D*
ID_OUI_FROM_DATABASE=Berkeley Nucleonics Corp
OUI:780473*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:7804E3*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:780541*
ID_OUI_FROM_DATABASE=Queclink Wireless Solutions Co., Ltd
OUI:780F77*
ID_OUI_FROM_DATABASE=HangZhou Gubei Electronics Technology Co.,Ltd
+OUI:781100*
+ ID_OUI_FROM_DATABASE=Quantumsolution
+
OUI:781185*
ID_OUI_FROM_DATABASE=NBS Payment Solutions Inc.
OUI:782B46*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:782B64*
+ ID_OUI_FROM_DATABASE=Bose Corporation
+
OUI:782BCB*
ID_OUI_FROM_DATABASE=Dell Inc.
OUI:7846C4*
ID_OUI_FROM_DATABASE=DAEHAP HYPER-TECH
+OUI:7846D4*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:78471D*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:78F882*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+OUI:78F8B8*
+ ID_OUI_FROM_DATABASE=Rako Controls Ltd
+
OUI:78F944*
ID_OUI_FROM_DATABASE=Private
OUI:7C2587*
ID_OUI_FROM_DATABASE=chaowifi.com
+OUI:7C25DA*
+ ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
+
OUI:7C2634*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:7C2A31*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:7C2ADB*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
OUI:7C2BE1*
ID_OUI_FROM_DATABASE=Shenzhen Ferex Electrical Co.,Ltd
OUI:7CA7B0*
ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.,LTD
+OUI:7CA96B*
+ ID_OUI_FROM_DATABASE=Syrotech Networks. Ltd.
+
OUI:7CA97D*
ID_OUI_FROM_DATABASE=Objenious
OUI:7CACB2*
ID_OUI_FROM_DATABASE=Bosch Software Innovations GmbH
+OUI:7CAD4F*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:7CAD74*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:7CC709*
ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
+OUI:7CC77E*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:7CC8AB*
ID_OUI_FROM_DATABASE=Acro Associates, Inc.
OUI:7CDD90*
ID_OUI_FROM_DATABASE=Shenzhen Ogemray Technology Co., Ltd.
+OUI:7CDDE9*
+ ID_OUI_FROM_DATABASE=ATOM tech Inc.
+
OUI:7CDFA1*
ID_OUI_FROM_DATABASE=Espressif Inc.
OUI:7CF0BA*
ID_OUI_FROM_DATABASE=Linkwell Telesystems Pvt Ltd
+OUI:7CF2DD*
+ ID_OUI_FROM_DATABASE=Vence Corp
+
OUI:7CF31B*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
OUI:7CF95C*
ID_OUI_FROM_DATABASE=U.I. Lapp GmbH
+OUI:7CF9A0*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:7CFADF*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:7CFC3C*
ID_OUI_FROM_DATABASE=Visteon Corporation
+OUI:7CFD6B*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
OUI:7CFD82*
ID_OUI_FROM_DATABASE=GUANGDONG GENIUS TECHNOLOGY CO., LTD.
OUI:800E24*
ID_OUI_FROM_DATABASE=ForgetBox
+OUI:8012DF*
+ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+
OUI:801382*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:8014A8*
ID_OUI_FROM_DATABASE=Guangzhou V-SOLUTION Electronic Technology Co., Ltd.
+OUI:801605*
+ ID_OUI_FROM_DATABASE=Vodafone Italia S.p.A.
+
OUI:801609*
ID_OUI_FROM_DATABASE=Sleep Number
OUI:802BF9*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:802DBF*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:802DE1*
ID_OUI_FROM_DATABASE=Solarbridge Technologies
OUI:805EC0*
ID_OUI_FROM_DATABASE=YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+OUI:805FC5*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:806007*
ID_OUI_FROM_DATABASE=RIM
+OUI:8060B7*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
OUI:80615F*
ID_OUI_FROM_DATABASE=Beijing Sinead Technology Co., Ltd.
OUI:806CBC*
ID_OUI_FROM_DATABASE=NET New Electronic Technology GmbH
+OUI:806D97*
+ ID_OUI_FROM_DATABASE=Private
+
OUI:806FB0*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:80C862*
ID_OUI_FROM_DATABASE=Openpeak, Inc
+OUI:80CC12*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:80CE62*
ID_OUI_FROM_DATABASE=Hewlett Packard
OUI:80E01D*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:80E1BF*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:80E455*
ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
OUI:80E86F*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:80EA07*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
OUI:80EA23*
ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
OUI:8401A7*
ID_OUI_FROM_DATABASE=Greyware Automation Products, Inc
+OUI:840283*
+ ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
+
+OUI:840328*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
OUI:8404D2*
ID_OUI_FROM_DATABASE=Kirale Technologies SL
OUI:8421F1*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:84225E*
+ ID_OUI_FROM_DATABASE=SHENZHEN TECHNEWCHIP TECHNOLOGY CO.,LTD.
+
OUI:84248D*
ID_OUI_FROM_DATABASE=Zebra Technologies Inc
OUI:842999*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:842AFD*
+ ID_OUI_FROM_DATABASE=HP Inc.
+
OUI:842B2B*
ID_OUI_FROM_DATABASE=Dell Inc.
OUI:843611*
ID_OUI_FROM_DATABASE=hyungseul publishing networks
+OUI:8437D5*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:843835*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:846AED*
ID_OUI_FROM_DATABASE=Wireless Tsukamoto.,co.LTD
+OUI:846B48*
+ ID_OUI_FROM_DATABASE=ShenZhen EepuLink Co., Ltd.
+
OUI:846EB1*
ID_OUI_FROM_DATABASE=Park Assist LLC
OUI:84D6D0*
ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+OUI:84D81B*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
OUI:84D931*
ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
OUI:84EA99*
ID_OUI_FROM_DATABASE=Vieworks
+OUI:84EAED*
+ ID_OUI_FROM_DATABASE=Roku, Inc
+
OUI:84EB18*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:880355*
ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation
+OUI:8803E9*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
OUI:88074B*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
OUI:881B99*
ID_OUI_FROM_DATABASE=SHENZHEN XIN FEI JIA ELECTRONIC CO. LTD.
+OUI:881C95*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
OUI:881DFC*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:8828B3*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:882949*
+ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
+
OUI:882950*
ID_OUI_FROM_DATABASE=Netmoon Technology Co., Ltd
OUI:88403B*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:884067*
+ ID_OUI_FROM_DATABASE=infomark
+
OUI:884157*
ID_OUI_FROM_DATABASE=Shenzhen Atsmart Technology Co.,Ltd.
OUI:88947E*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+OUI:88948F*
+ ID_OUI_FROM_DATABASE=Xi'an Zhisensor Technologies Co.,Ltd
+
OUI:8894F9*
ID_OUI_FROM_DATABASE=Gemicom Technology, Inc.
OUI:88BFE4*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:88C08B*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:88C242*
ID_OUI_FROM_DATABASE=Poynt Co.
OUI:8C0D76*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:8C0E60*
+ ID_OUI_FROM_DATABASE=Nanjing Juplink Intelligent Technologies Co., Ltd.
+
OUI:8C0EE3*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
OUI:8C4500*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+OUI:8C47BE*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
OUI:8C4962*
ID_OUI_FROM_DATABASE=Roku, Inc
OUI:8C5D60*
ID_OUI_FROM_DATABASE=UCI Corporation Co.,Ltd.
+OUI:8C5EBD*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:8C5F48*
ID_OUI_FROM_DATABASE=Continental Intelligent Transportation Systems LLC
OUI:8C705A*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:8C7086*
+ ID_OUI_FROM_DATABASE=Gesellschaft für Sonder-EDV-Anlagen mbH
+
OUI:8C71F8*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:8C8590*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:8C85C1*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
OUI:8C85E6*
ID_OUI_FROM_DATABASE=Cleondris GmbH
OUI:8C8B83*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:8C8D28*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:8C8E76*
ID_OUI_FROM_DATABASE=taskit GmbH
OUI:8C9351*
ID_OUI_FROM_DATABASE=Jigowatts Inc.
+OUI:8C941F*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:8C94CF*
ID_OUI_FROM_DATABASE=Encell Technology, Inc.
OUI:8CC121*
ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company
+OUI:8CC5B4*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
OUI:8CC5E1*
ID_OUI_FROM_DATABASE=ShenZhen Konka Telecommunication Technology Co.,Ltd
OUI:8CCDE8*
ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
+OUI:8CCEFD*
+ ID_OUI_FROM_DATABASE=Shenzhen zhouhai technology co.,LTD
+
OUI:8CCF09*
ID_OUI_FROM_DATABASE=Dell EMC
OUI:8CE38E*
ID_OUI_FROM_DATABASE=Kioxia Corporation
+OUI:8CE468*
+ ID_OUI_FROM_DATABASE=Guangzhou Sageran Technology Co., Ltd.
+
OUI:8CE5C0*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:901234*
ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+OUI:9012A1*
+ ID_OUI_FROM_DATABASE=We Corporation Inc.
+
OUI:9013DA*
ID_OUI_FROM_DATABASE=Athom B.V.
+OUI:9016BA*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:901711*
ID_OUI_FROM_DATABASE=Hagenuk Marinekommunikation GmbH
OUI:903EAB*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:903FEA*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:9043E2*
ID_OUI_FROM_DATABASE=Cornami, Inc
OUI:90749D*
ID_OUI_FROM_DATABASE=IRay Technology Co., Ltd.
+OUI:90769F*
+ ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+
+OUI:9077EE*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:907841*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:909060*
ID_OUI_FROM_DATABASE=RSI VIDEO TECHNOLOGIES
+OUI:909164*
+ ID_OUI_FROM_DATABASE=ChongQing Lavid Technology Co., Ltd.
+
OUI:9092B4*
ID_OUI_FROM_DATABASE=Diehl BGT Defence GmbH & Co. KG
OUI:90A7C1*
ID_OUI_FROM_DATABASE=Pakedge Device and Software Inc.
+OUI:90A935*
+ ID_OUI_FROM_DATABASE=JWEntertainment
+
+OUI:90AAC3*
+ ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
+
OUI:90AC3F*
ID_OUI_FROM_DATABASE=BrightSign LLC
OUI:90F4C1*
ID_OUI_FROM_DATABASE=Rand McNally
+OUI:90F644*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:90F652*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
OUI:940070*
ID_OUI_FROM_DATABASE=Nokia Corporation
+OUI:9400B0*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:940149*
ID_OUI_FROM_DATABASE=AutoHotBox
OUI:9405BBE*
ID_OUI_FROM_DATABASE=BAE Systems
+OUI:940853*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
+OUI:9408C7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:940937*
ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
OUI:941673*
ID_OUI_FROM_DATABASE=Point Core SARL
+OUI:941700*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
OUI:941882*
ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
OUI:9424E1*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Enterprise
+OUI:942533*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:942790*
ID_OUI_FROM_DATABASE=TCT mobile ltd
OUI:9436E0*
ID_OUI_FROM_DATABASE=Sichuan Bihong Broadcast & Television New Technologies Co.,Ltd
+OUI:9437F7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:9439E5*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
OUI:944696*
ID_OUI_FROM_DATABASE=BaudTec Corporation
+OUI:9447B0*
+ ID_OUI_FROM_DATABASE=BEIJING ESWIN COMPUTING TECHNOLOGY CO., LTD
+
OUI:944996*
ID_OUI_FROM_DATABASE=WiSilica Inc
OUI:945493*
ID_OUI_FROM_DATABASE=Rigado, LLC
+OUI:9454CE*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
OUI:9454DF*
ID_OUI_FROM_DATABASE=YST CORP.
OUI:94AEE3*
ID_OUI_FROM_DATABASE=Belden Hirschmann Industries (Suzhou) Ltd.
+OUI:94AEF0*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:94B01F*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:94E36D*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:94E3EE*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:94E4BA*
ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
OUI:94E6F7*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:94E70B*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:94E711*
ID_OUI_FROM_DATABASE=Xirka Dama Persada PT
OUI:94FB29*
ID_OUI_FROM_DATABASE=Zebra Technologies Inc.
+OUI:94FBA70*
+ ID_OUI_FROM_DATABASE=Reichert Inc.
+
+OUI:94FBA71*
+ ID_OUI_FROM_DATABASE=Inaxsys Security Systems inc.
+
+OUI:94FBA72*
+ ID_OUI_FROM_DATABASE=Beijing Leja Tech co., Ltd.
+
+OUI:94FBA73*
+ ID_OUI_FROM_DATABASE=GUANG DONG TAKSTAR ELECTRONIC CO.,LTD.
+
+OUI:94FBA74*
+ ID_OUI_FROM_DATABASE=UOI TECHNOLOGY CORPORATION
+
+OUI:94FBA75*
+ ID_OUI_FROM_DATABASE=CAVITY EYE
+
+OUI:94FBA76*
+ ID_OUI_FROM_DATABASE=Sercomm Corporation.
+
+OUI:94FBA77*
+ ID_OUI_FROM_DATABASE=Anvil Systems Group, Inc.
+
OUI:94FBA78*
ID_OUI_FROM_DATABASE=Silver-I Co.,LTD.
OUI:94FBA79*
ID_OUI_FROM_DATABASE=Shanghai Hyco Genyong Technology Co., Ltd.
+OUI:94FBA7A*
+ ID_OUI_FROM_DATABASE=ELKRON
+
+OUI:94FBA7B*
+ ID_OUI_FROM_DATABASE=Shenzhen Golden Star Technology Ltd
+
+OUI:94FBA7C*
+ ID_OUI_FROM_DATABASE=Solaborate Inc.
+
OUI:94FBA7D*
- ID_OUI_FROM_DATABASE=Creotech Instruments S.A.
+ ID_OUI_FROM_DATABASE=Rosenberger Technologies Co.,Ltd.
+
+OUI:94FBA7E*
+ ID_OUI_FROM_DATABASE=Skyring Smart Technologies(Shenzhen) Co., Ltd.
OUI:94FBB2*
ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
OUI:980637E*
ID_OUI_FROM_DATABASE=Shanghai Jinnian information technology Co. Ltd
+OUI:98063C*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:98072D*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:980D67*
ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+OUI:980E24*
+ ID_OUI_FROM_DATABASE=Phytium Technology Co.,Ltd.
+
OUI:980EE4*
ID_OUI_FROM_DATABASE=Private
OUI:982F3C*
ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd.
+OUI:982FF8*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:983000*
ID_OUI_FROM_DATABASE=Beijing KEMACOM Technologies Co., Ltd.
OUI:9844B6*
ID_OUI_FROM_DATABASE=INFRANOR SAS
+OUI:9844CE*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:984562*
ID_OUI_FROM_DATABASE=Shanghai Baud Data Communication Co.,Ltd.
OUI:988BAD*
ID_OUI_FROM_DATABASE=Corintech Ltd.
+OUI:988D46*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:988E34*
ID_OUI_FROM_DATABASE=ZHEJIANG BOXSAM ELECTRONIC CO.,LTD
OUI:988E4A*
ID_OUI_FROM_DATABASE=NOXUS(BEIJING) TECHNOLOGY CO.,LTD
+OUI:988E79*
+ ID_OUI_FROM_DATABASE=Qudelix, Inc.
+
OUI:988ED4*
ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
OUI:98A7B0*
ID_OUI_FROM_DATABASE=MCST ZAO
+OUI:98A942*
+ ID_OUI_FROM_DATABASE=Guangzhou Tozed Kangwei Intelligent Technology Co., LTD
+
OUI:98AA3C*
ID_OUI_FROM_DATABASE=Will i-tech Co., Ltd.
OUI:98B039*
ID_OUI_FROM_DATABASE=Nokia
+OUI:98B3EF*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:98B6E9*
ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
OUI:98B8BA*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+OUI:98B8BC*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:98B8E3*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:98C5DB*
ID_OUI_FROM_DATABASE=Ericsson AB
+OUI:98C7A4*
+ ID_OUI_FROM_DATABASE=Shenzhen HS Fiber Communication Equipment CO., LTD
+
OUI:98C845*
ID_OUI_FROM_DATABASE=PacketAccess
OUI:98C8B8*
ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+OUI:98C97C*
+ ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO,LTD
+
OUI:98CA33*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:98CB27*
ID_OUI_FROM_DATABASE=Galore Networks Pvt. Ltd.
+OUI:98CBA4*
+ ID_OUI_FROM_DATABASE=Benchmark Electronics
+
OUI:98CC4D*
ID_OUI_FROM_DATABASE=Shenzhen mantunsci co., LTD
OUI:98F5A9*
ID_OUI_FROM_DATABASE=OHSUNG
+OUI:98F621*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
OUI:98F781*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:9C1874*
ID_OUI_FROM_DATABASE=Nokia Danmark A/S
+OUI:9C19C2*
+ ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co., Ltd.
+
OUI:9C1C12*
ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
OUI:9C293F*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:9C2976*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:9C2A70*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
ID_OUI_FROM_DATABASE=HK ELEPHONE Communication Tech Co.,Limited
OUI:9C431EE*
- ID_OUI_FROM_DATABASE=Midas Technology, Inc. dba Stem Audio / Phoenix Au
+ ID_OUI_FROM_DATABASE=Phoenix Audio Technologies
OUI:9C443D*
ID_OUI_FROM_DATABASE=CHENGDU XUGUANG TECHNOLOGY CO, LTD
OUI:9C6ABE*
ID_OUI_FROM_DATABASE=QEES ApS.
+OUI:9C6B37*
+ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
+
OUI:9C6B72*
ID_OUI_FROM_DATABASE=Realme Chongqing MobileTelecommunications Corp Ltd
OUI:9C9D5D*
ID_OUI_FROM_DATABASE=Raden Inc
+OUI:9C9D7E*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+
OUI:9CA10A*
ID_OUI_FROM_DATABASE=SCLE SFE
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
OUI:9CF61A*
- ID_OUI_FROM_DATABASE=UTC Fire and Security
+ ID_OUI_FROM_DATABASE=Carrier Fire & Security
OUI:9CF67D*
ID_OUI_FROM_DATABASE=Ricardo Prague, s.r.o.
OUI:A0224EE*
ID_OUI_FROM_DATABASE=Hunan Youmei Science&Technology Development Co.,Ltd.
+OUI:A022DE*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
OUI:A0231B*
ID_OUI_FROM_DATABASE=TeleComp R&D Corp.
OUI:A06090*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:A06260*
+ ID_OUI_FROM_DATABASE=Private
+
OUI:A06391*
ID_OUI_FROM_DATABASE=NETGEAR
OUI:A067BE*
ID_OUI_FROM_DATABASE=Sicon srl
+OUI:A0681C*
+ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
+
OUI:A0687E*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:A09A5A*
ID_OUI_FROM_DATABASE=Time Domain
+OUI:A09B12*
+ ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
+
+OUI:A09B17*
+ ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+
OUI:A09BBD*
ID_OUI_FROM_DATABASE=Total Aviation Solutions Pty Ltd
OUI:A0C9A0*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+OUI:A0CAA5*
+ ID_OUI_FROM_DATABASE=INTELLIGENCE TECHNOLOGY OF CEC CO., LTD
+
OUI:A0CBFD*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:A0CF5B*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:A0CFF5*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:A0D12A*
ID_OUI_FROM_DATABASE=AXPRO Technology Inc.
OUI:A0D807*
ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+OUI:A0D83D*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:A0D86F*
ID_OUI_FROM_DATABASE=ARGO AI, LLC
OUI:A4059E*
ID_OUI_FROM_DATABASE=STA Infinity LLP
+OUI:A406E9*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:A407B6*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:A43A69*
ID_OUI_FROM_DATABASE=Vers Inc
+OUI:A43B0E*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:A43BFA0*
ID_OUI_FROM_DATABASE=Chengdu Territory Technology Co.,Ltd
OUI:A4466B*
ID_OUI_FROM_DATABASE=EOC Technology
+OUI:A446B4*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:A446FA*
ID_OUI_FROM_DATABASE=AmTRAN Video Corporation
OUI:A45055*
ID_OUI_FROM_DATABASE=BUSWARE.DE
+OUI:A45129*
+ ID_OUI_FROM_DATABASE=XAG
+
OUI:A4516F*
ID_OUI_FROM_DATABASE=Microsoft Mobile Oy
OUI:A47C1F*
ID_OUI_FROM_DATABASE=Cobham plc
+OUI:A47CC9*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:A47E39*
ID_OUI_FROM_DATABASE=zte corporation
ID_OUI_FROM_DATABASE=Q Electronics Ltd
OUI:A486AE*
- ID_OUI_FROM_DATABASE=Quectel Wireless Solutions
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
+
+OUI:A48873*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:A4895B*
ID_OUI_FROM_DATABASE=ARK INFOSOLUTIONS PVT LTD
OUI:A4933F*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:A49340*
+ ID_OUI_FROM_DATABASE=Beijing Supvan Information Technology Co.,Ltd.
+
OUI:A4934C*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:A4975C*
ID_OUI_FROM_DATABASE=VTech Telecommunications Ltd.
+OUI:A497B1*
+ ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
+
OUI:A497BB*
ID_OUI_FROM_DATABASE=Hitachi Industrial Equipment Systems Co.,Ltd
OUI:A4A80F*
ID_OUI_FROM_DATABASE=Shenzhen Coship Electronics Co., Ltd.
+OUI:A4AC0F*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:A4AD00*
ID_OUI_FROM_DATABASE=Ragsdale Technology
OUI:A4AE11*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
+OUI:A4AE12*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
+
OUI:A4AE9A*
ID_OUI_FROM_DATABASE=Maestro Wireless Solutions ltd.
OUI:A4BBAF*
ID_OUI_FROM_DATABASE=Lime Instruments
+OUI:A4BDC4*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:A4BE2B*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:A80180*
ID_OUI_FROM_DATABASE=IMAGO Technologies GmbH
+OUI:A802DB*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:A8032A*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
OUI:A80577*
ID_OUI_FROM_DATABASE=Netlist, Inc.
ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
OUI:A81E84*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:A81FAF*
ID_OUI_FROM_DATABASE=KRYPTON POLSKA
OUI:A830AD*
ID_OUI_FROM_DATABASE=WEIFANG GOERTEK ELECTRONICS CO.,LTD
+OUI:A830BC*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:A8329A*
ID_OUI_FROM_DATABASE=Digicom Futuristic Technologies Ltd.
OUI:A8346A*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:A83512*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:A8367A*
ID_OUI_FROM_DATABASE=frogblue TECHNOLOGY GmbH
+OUI:A83759*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:A83944*
ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
OUI:A83FA1E*
ID_OUI_FROM_DATABASE=Guangzhou Navigateworx Technologies Co., Limited
+OUI:A84025*
+ ID_OUI_FROM_DATABASE=Oxide Computer Company
+
OUI:A84041*
ID_OUI_FROM_DATABASE=Dragino Technology Co., Limited
OUI:A845E9*
ID_OUI_FROM_DATABASE=Firich Enterprises CO., LTD.
+OUI:A8469D*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
OUI:A8474A*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
OUI:A8667F*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:A8698C*
+ ID_OUI_FROM_DATABASE=Oracle Corporation
+
OUI:A86A6F*
ID_OUI_FROM_DATABASE=RIM
OUI:A89042*
ID_OUI_FROM_DATABASE=Beijing Wanwei Intelligent Technology Co., Ltd.
+OUI:A8913D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:A8922C*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
OUI:A8E824*
ID_OUI_FROM_DATABASE=INIM ELECTRONICS S.R.L.
+OUI:A8E978*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:A8EEC6*
ID_OUI_FROM_DATABASE=Muuselabs NV/SA
ID_OUI_FROM_DATABASE=WESCO INTEGRATED SUPPLY
OUI:AC1DDFB*
- ID_OUI_FROM_DATABASE=Fine Inc.
+ ID_OUI_FROM_DATABASE=FINEpowerX INC
OUI:AC1DDFC*
ID_OUI_FROM_DATABASE=Beijing Chunhong Technology Co., Ltd.
OUI:AC1ED0*
ID_OUI_FROM_DATABASE=Temic Automotive Philippines Inc.
+OUI:AC1F09*
+ ID_OUI_FROM_DATABASE=shenzhen RAKwireless technology Co.,Ltd
+
OUI:AC1F6B*
ID_OUI_FROM_DATABASE=Super Micro Computer, Inc.
OUI:AC220B*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+OUI:AC2334*
+ ID_OUI_FROM_DATABASE=Infinix mobility limited
+
OUI:AC233F*
ID_OUI_FROM_DATABASE=Shenzhen Minew Technologies Co., Ltd.
OUI:AC5F3E*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+OUI:AC5FEA*
+ ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd
+
OUI:AC6089*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:AC6706*
ID_OUI_FROM_DATABASE=Ruckus Wireless
+OUI:AC675D*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:AC676F*
ID_OUI_FROM_DATABASE=Electrocompaniet A.S.
OUI:AC9403*
ID_OUI_FROM_DATABASE=Envision Peripherals Inc
+OUI:AC9572*
+ ID_OUI_FROM_DATABASE=Jovision Technology Co., Ltd.
+
OUI:AC9A22*
ID_OUI_FROM_DATABASE=NXP Semiconductors
OUI:AC9A96*
- ID_OUI_FROM_DATABASE=Lantiq Deutschland GmbH
+ ID_OUI_FROM_DATABASE=Maxlinear, Inc
OUI:AC9B0A*
ID_OUI_FROM_DATABASE=Sony Corporation
OUI:ACF0B2*
ID_OUI_FROM_DATABASE=Becker Electronics Taiwan Ltd.
+OUI:ACF108*
+ ID_OUI_FROM_DATABASE=LG Innotek
+
OUI:ACF1DF*
ID_OUI_FROM_DATABASE=D-Link International
OUI:B03055*
ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
+OUI:B030C8*
+ ID_OUI_FROM_DATABASE=Teal Drones, Inc.
+
OUI:B033A6*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:B05B67*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:B05CDA*
+ ID_OUI_FROM_DATABASE=HP Inc.
+
OUI:B05CE5*
ID_OUI_FROM_DATABASE=Nokia Corporation
OUI:B075D5*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:B0761B*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:B077AC*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:B07D62*
ID_OUI_FROM_DATABASE=Dipl.-Ing. H. Horstmann GmbH
+OUI:B07D64*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:B07E11*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:B0A454*
ID_OUI_FROM_DATABASE=Tripwire Inc.
+OUI:B0A460*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:B0A6F5*
ID_OUI_FROM_DATABASE=Xaptum, Inc.
OUI:B0AE25*
ID_OUI_FROM_DATABASE=Varikorea
+OUI:B0B113*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:B0B194*
ID_OUI_FROM_DATABASE=zte corporation
OUI:B0FEBD*
ID_OUI_FROM_DATABASE=Private
+OUI:B0FEE5*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:B40016*
ID_OUI_FROM_DATABASE=INGENICO TERMINALS SAS
OUI:B42200*
ID_OUI_FROM_DATABASE=Brother Industries, LTD.
+OUI:B42330*
+ ID_OUI_FROM_DATABASE=Itron Inc
+
OUI:B424E7*
ID_OUI_FROM_DATABASE=Codetek Technology Co.,Ltd
OUI:B46077*
ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd.
+OUI:B460ED*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+
OUI:B461FF*
ID_OUI_FROM_DATABASE=Lumigon A/S
OUI:B46E08*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:B46F2D*
+ ID_OUI_FROM_DATABASE=Wahoo Fitness
+
OUI:B47356*
ID_OUI_FROM_DATABASE=Hangzhou Treebear Networking Co., Ltd.
OUI:B47748*
ID_OUI_FROM_DATABASE=Shenzhen Neoway Technology Co.,Ltd.
+OUI:B47947*
+ ID_OUI_FROM_DATABASE=Nutanix
+
OUI:B479A7*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
OUI:B49DB4*
ID_OUI_FROM_DATABASE=Axion Technologies Inc.
+OUI:B49E80*
+ ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd.
+
OUI:B49EAC*
ID_OUI_FROM_DATABASE=Imagik Int'l Corp
OUI:B4C170*
ID_OUI_FROM_DATABASE=Yi chip Microelectronics (Hangzhou) Co., Ltd
+OUI:B4C26A*
+ ID_OUI_FROM_DATABASE=Garmin International
+
OUI:B4C44E*
ID_OUI_FROM_DATABASE=VXL eTech Pvt Ltd
OUI:B847C6*
ID_OUI_FROM_DATABASE=SanJet Technology Corp.
+OUI:B848AA*
+ ID_OUI_FROM_DATABASE=EM Microelectronic
+
OUI:B84DEE*
ID_OUI_FROM_DATABASE=Hisense broadband multimedia technology Co.,Ltd
OUI:B856BD*
ID_OUI_FROM_DATABASE=ITT LLC
+OUI:B85776*
+ ID_OUI_FROM_DATABASE=lignex1
+
OUI:B857D8*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:B87CF2*
ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+OUI:B88035*
+ ID_OUI_FROM_DATABASE=Shenzhen Qihu Intelligent Technology Company Limited
+
+OUI:B8804F*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:B88198*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:B8CA3A*
ID_OUI_FROM_DATABASE=Dell Inc.
+OUI:B8CB29*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
OUI:B8CD93*
ID_OUI_FROM_DATABASE=Penetek, Inc
OUI:B8DC87*
ID_OUI_FROM_DATABASE=IAI Corporation
+OUI:B8DD71*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:B8DE5E*
ID_OUI_FROM_DATABASE=LONGCHEER TELECOMMUNICATION LIMITED
OUI:BC024A*
ID_OUI_FROM_DATABASE=HMD Global Oy
+OUI:BC03A7*
+ ID_OUI_FROM_DATABASE=MFP MICHELIN
+
OUI:BC0543*
ID_OUI_FROM_DATABASE=AVM GmbH
OUI:BC125E*
ID_OUI_FROM_DATABASE=Beijing WisVideo INC.
+OUI:BC13A8*
+ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+
OUI:BC1401*
ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
OUI:BC16F5*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:BC17B8*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:BC1A67*
ID_OUI_FROM_DATABASE=YF Technology Co., Ltd
OUI:BC2643*
ID_OUI_FROM_DATABASE=Elprotronic Inc.
+OUI:BC26A1*
+ ID_OUI_FROM_DATABASE=FACTORY FIVE Corporation
+
OUI:BC26C7*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:BC7DD1*
ID_OUI_FROM_DATABASE=Radio Data Comms
+OUI:BC7E8B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:BC7F7B*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:BC7FA4*
ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
OUI:BCA920*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:BCA993*
+ ID_OUI_FROM_DATABASE=Cambium Networks Limited
+
OUI:BCA9D6*
ID_OUI_FROM_DATABASE=Cyber-Rain, Inc.
OUI:BCE796*
ID_OUI_FROM_DATABASE=Wireless CCTV Ltd
+OUI:BCE92F*
+ ID_OUI_FROM_DATABASE=HP Inc.
+
OUI:BCEA2B*
ID_OUI_FROM_DATABASE=CityCom GmbH
OUI:C014B8*
ID_OUI_FROM_DATABASE=Nokia
+OUI:C014FE*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:C01692*
ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
OUI:C0174D*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:C01850*
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
+
OUI:C01885*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
OUI:C01B23*
ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOM CO.,LTD
+OUI:C01C30*
+ ID_OUI_FROM_DATABASE=Shenzhen WIFI-3L Technology Co.,Ltd
+
OUI:C01E9B*
ID_OUI_FROM_DATABASE=Pixavi AS
OUI:C03937*
ID_OUI_FROM_DATABASE=GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI
+OUI:C0395A*
+ ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
+
OUI:C03B8F*
ID_OUI_FROM_DATABASE=Minicom Digital Signage
+OUI:C03D03*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:C03D46*
ID_OUI_FROM_DATABASE=Shanghai Sango Network Technology Co.,Ltd
OUI:C03E0F*
ID_OUI_FROM_DATABASE=BSkyB Ltd
+OUI:C03EBA*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
OUI:C03F0E*
ID_OUI_FROM_DATABASE=NETGEAR
OUI:C04DF7*
ID_OUI_FROM_DATABASE=SERELEC
+OUI:C0517E*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
OUI:C05336*
ID_OUI_FROM_DATABASE=Beijing National Railway Research & Design Institute of Signal & Communication Group Co..Ltd.
OUI:C06118*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+OUI:C0619A1*
+ ID_OUI_FROM_DATABASE=KidKraft
+
+OUI:C0619A2*
+ ID_OUI_FROM_DATABASE=Grup Arge Enerji ve Kontrol Sistemleri
+
+OUI:C0619A3*
+ ID_OUI_FROM_DATABASE=LYAND ACOUSTIC TECHNOLOGY CO.,LTD.
+
+OUI:C0619A4*
+ ID_OUI_FROM_DATABASE=Stello
+
+OUI:C0619A5*
+ ID_OUI_FROM_DATABASE=Nanjing Balance Network Technology Co., Ltd
+
+OUI:C0619A6*
+ ID_OUI_FROM_DATABASE=IPG Automotive GmbH
+
+OUI:C0619A7*
+ ID_OUI_FROM_DATABASE=MAD PIECE LLC.
+
+OUI:C0619A8*
+ ID_OUI_FROM_DATABASE=Nanjing SinoVatio Technology Co., Ltd
+
+OUI:C0619A9*
+ ID_OUI_FROM_DATABASE=Wingtech Mobile Communications Co.,Ltd.
+
+OUI:C0619AA*
+ ID_OUI_FROM_DATABASE=Gronn Kontakt AS
+
+OUI:C0619AC*
+ ID_OUI_FROM_DATABASE=JAM-Labs Corp
+
+OUI:C0619AD*
+ ID_OUI_FROM_DATABASE=Uhnder
+
OUI:C0626B*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:C06369*
+ ID_OUI_FROM_DATABASE=BINXIN TECHNOLOGY(ZHEJIANG) LTD.
+
OUI:C06394*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:C08359E*
ID_OUI_FROM_DATABASE=Cyber Sciences, Inc.
+OUI:C083C9*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:C0847A*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:C0854C*
ID_OUI_FROM_DATABASE=Ragentek Technology Group
+OUI:C086B3*
+ ID_OUI_FROM_DATABASE=Shenzhen Voxtech Co., Ltd.
+
OUI:C087EB*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:C08C71*
ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+OUI:C08F20*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd
+
OUI:C09132*
ID_OUI_FROM_DATABASE=Patriot Memory
OUI:C0A364*
ID_OUI_FROM_DATABASE=3D Systems Massachusetts
+OUI:C0A36E*
+ ID_OUI_FROM_DATABASE=BSkyB Ltd
+
OUI:C0A39E*
ID_OUI_FROM_DATABASE=EarthCam, Inc.
OUI:C0B8B1*
ID_OUI_FROM_DATABASE=BitBox Ltd
+OUI:C0B8E6*
+ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
+
OUI:C0BAE6*
ID_OUI_FROM_DATABASE=Application Solutions (Electronics and Vision) Ltd
+OUI:C0BC9A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:C0BD42*
ID_OUI_FROM_DATABASE=ZPA Smart Energy a.s.
OUI:C0CBF1*
ID_OUI_FROM_DATABASE=Mobiwire Mobiles (NingBo) Co., LTD
+OUI:C0CC42*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co., Ltd.
+
OUI:C0CCF8*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:C0D0FF*
ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
+OUI:C0D193*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:C0D2DD*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:C0DF77*
ID_OUI_FROM_DATABASE=Conrad Electronic SE
+OUI:C0E3A0*
+ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
+
OUI:C0E422*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:C0E54E*
ID_OUI_FROM_DATABASE=ARIES Embedded GmbH
+OUI:C0E7BF*
+ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+
OUI:C0E862*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:C0F636*
ID_OUI_FROM_DATABASE=Hangzhou Kuaiyue Technologies, Ltd.
+OUI:C0F6C2*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:C0F79D*
ID_OUI_FROM_DATABASE=Powercode
OUI:C0FD84*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:C0FFA8*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:C0FFD4*
ID_OUI_FROM_DATABASE=NETGEAR
OUI:C40BCB*
ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+OUI:C40D96*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:C40E45*
ID_OUI_FROM_DATABASE=ACK Networks,Inc.
OUI:C42AD0*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:C42B44*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:C42C03*
ID_OUI_FROM_DATABASE=Apple, Inc.
ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
OUI:C45444*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:C455A6*
ID_OUI_FROM_DATABASE=Cadac Holdings Ltd
OUI:C48FC1*
ID_OUI_FROM_DATABASE=DEEPTRACK S.L.U.
+OUI:C4910C*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:C4913A*
ID_OUI_FROM_DATABASE=Shenzhen Sanland Electronic Co., ltd.
OUI:C49880*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:C49886*
+ ID_OUI_FROM_DATABASE=Qorvo Utrecht B.V.
+
OUI:C49A02*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
OUI:C49FF3*
ID_OUI_FROM_DATABASE=Mciao Technologies, Inc.
+OUI:C4A151*
+ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co., Ltd.
+
OUI:C4A366*
ID_OUI_FROM_DATABASE=zte corporation
OUI:C4D655*
ID_OUI_FROM_DATABASE=Tercel technology co.,ltd
+OUI:C4D738*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:C4D8F3*
ID_OUI_FROM_DATABASE=iZotope
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:C80AA9*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:C80CC8*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
OUI:C83DFC*
- ID_OUI_FROM_DATABASE=Pioneer DJ Corporation
+ ID_OUI_FROM_DATABASE=AlphaTheta Corporation
OUI:C83E99*
ID_OUI_FROM_DATABASE=Texas Instruments
OUI:C85B76*
ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
+OUI:C85BA0*
+ ID_OUI_FROM_DATABASE=Shenzhen Qihu Intelligent Technology Company Limited
+
OUI:C85D38*
ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
OUI:C8675E*
ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+OUI:C868DE*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:C869CD*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:C87E75*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:C87EA1*
+ ID_OUI_FROM_DATABASE=TCL MOKA International Limited
+
OUI:C88314*
ID_OUI_FROM_DATABASE=Tempo Communications
OUI:C88447*
ID_OUI_FROM_DATABASE=Beautiful Enterprise Co., Ltd
+OUI:C884A1*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:C88550*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:C8B21E*
ID_OUI_FROM_DATABASE=CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+OUI:C8B29B*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:C8B373*
ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
OUI:C8BBD3*
ID_OUI_FROM_DATABASE=Embrane
+OUI:C8BC9C*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:C8BCC8*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:C8C791*
ID_OUI_FROM_DATABASE=Zero1.tv GmbH
+OUI:C8CA63*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:C8CBB8*
ID_OUI_FROM_DATABASE=Hewlett Packard
OUI:CC4703*
ID_OUI_FROM_DATABASE=Intercon Systems Co., Ltd.
+OUI:CC47BD*
+ ID_OUI_FROM_DATABASE=Rhombus Systems
+
+OUI:CC483A*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
OUI:CC4AE1*
ID_OUI_FROM_DATABASE=fourtec -Fourier Technologies
OUI:CC856C*
ID_OUI_FROM_DATABASE=SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD
+OUI:CC874A*
+ ID_OUI_FROM_DATABASE=Nokia
+
OUI:CC8826*
ID_OUI_FROM_DATABASE=LG Innotek
OUI:CC9EA2*
ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+OUI:CC9ECA*
+ ID_OUI_FROM_DATABASE=HMD Global Oy
+
OUI:CC9F35*
ID_OUI_FROM_DATABASE=Transbit Sp. z o.o.
OUI:CCAF78*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:CCB0A8*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:CCB0DA*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
OUI:CCB11A*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:CCB182*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:CCB255*
ID_OUI_FROM_DATABASE=D-Link International
OUI:CCC104*
ID_OUI_FROM_DATABASE=Applied Technical Systems
+OUI:CCC2610*
+ ID_OUI_FROM_DATABASE=Ebiologic Technology Co., Ltd.
+
+OUI:CCC2611*
+ ID_OUI_FROM_DATABASE=NWL Inc.
+
+OUI:CCC2612*
+ ID_OUI_FROM_DATABASE=Tecnoideal Srl
+
+OUI:CCC2613*
+ ID_OUI_FROM_DATABASE=NETRADYNE, INC.
+
+OUI:CCC2614*
+ ID_OUI_FROM_DATABASE=EDAG Engineering GmbH
+
+OUI:CCC2615*
+ ID_OUI_FROM_DATABASE=Viper Design, LLC
+
+OUI:CCC2616*
+ ID_OUI_FROM_DATABASE=Guardiar USA
+
+OUI:CCC2617*
+ ID_OUI_FROM_DATABASE=Ability Enterprise Co., Ltd
+
+OUI:CCC2619*
+ ID_OUI_FROM_DATABASE=BYTERG LLC
+
+OUI:CCC261A*
+ ID_OUI_FROM_DATABASE=Shenzhen Uyesee Technology Co.,Ltd
+
+OUI:CCC261B*
+ ID_OUI_FROM_DATABASE=Winterthur Gas & Diesel Ltd.
+
+OUI:CCC261C*
+ ID_OUI_FROM_DATABASE=Nortek Security & Control
+
+OUI:CCC261D*
+ ID_OUI_FROM_DATABASE=Dspread Technology (Beijing) Inc.
+
+OUI:CCC261E*
+ ID_OUI_FROM_DATABASE=Toong In Electronic Corp.
+
OUI:CCC2E0*
ID_OUI_FROM_DATABASE=Raisecom Technology CO., LTD
OUI:CCCE40*
ID_OUI_FROM_DATABASE=Janteq Corp
+OUI:CCD083*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
OUI:CCD281*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:CCD539*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:CCD73C*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:CCD811*
ID_OUI_FROM_DATABASE=Aiconn Technology Corporation
OUI:CCD8C1*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:CCD9AC*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:CCD9E9*
ID_OUI_FROM_DATABASE=SCR Engineers Ltd.
+OUI:CCDB93*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:CCDC55*
ID_OUI_FROM_DATABASE=Dragonchip Limited
OUI:CCFE3C*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:CCFF90*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:D0034B*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:D00AAB*
ID_OUI_FROM_DATABASE=Yokogawa Digital Computer Corporation
+OUI:D00DF7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:D00EA4*
ID_OUI_FROM_DATABASE=Porsche Cars North America
OUI:D013FD*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+OUI:D014110*
+ ID_OUI_FROM_DATABASE=EkkoSense Ltd
+
+OUI:D014111*
+ ID_OUI_FROM_DATABASE=Private
+
+OUI:D014112*
+ ID_OUI_FROM_DATABASE=Evoco Labs CO., LTD
+
+OUI:D014113*
+ ID_OUI_FROM_DATABASE=iLOQ Oy
+
+OUI:D014114*
+ ID_OUI_FROM_DATABASE=powerall
+
+OUI:D014116*
+ ID_OUI_FROM_DATABASE=Ahnnet
+
+OUI:D014117*
+ ID_OUI_FROM_DATABASE=Realwave Inc.
+
+OUI:D014118*
+ ID_OUI_FROM_DATABASE=Video Security, Inc.
+
+OUI:D014119*
+ ID_OUI_FROM_DATABASE=Airthings
+
+OUI:D01411A*
+ ID_OUI_FROM_DATABASE=ABB EVI SPA
+
+OUI:D01411B*
+ ID_OUI_FROM_DATABASE=CYLTek Co.,LTD.
+
+OUI:D01411C*
+ ID_OUI_FROM_DATABASE=Shen Zhen HaiHe Hi-Tech Co., Ltd
+
+OUI:D01411D*
+ ID_OUI_FROM_DATABASE=Guangdong Shiqi Manufacture Co., Ltd.
+
+OUI:D01411E*
+ ID_OUI_FROM_DATABASE=Tecnosoft srl
+
OUI:D0154A*
ID_OUI_FROM_DATABASE=zte corporation
OUI:D07650F*
ID_OUI_FROM_DATABASE=Private
+OUI:D0768F*
+ ID_OUI_FROM_DATABASE=Calix Inc.
+
OUI:D076E7*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
ID_OUI_FROM_DATABASE=Hyundai Autohow
OUI:D0D94F7*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Mitsubishi Electric US, Inc.
OUI:D0D94F8*
ID_OUI_FROM_DATABASE=Apption Labs Limited
OUI:D0F27F*
ID_OUI_FROM_DATABASE=SteadyServ Technoligies, LLC
+OUI:D0F3F5*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:D0F73B*
ID_OUI_FROM_DATABASE=Helmut Mauell GmbH Werk Weida
OUI:D43FCB*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:D440D0*
+ ID_OUI_FROM_DATABASE=OCOSMOS Co., LTD
+
OUI:D440F0*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:D445E8*
ID_OUI_FROM_DATABASE=Jiangxi Hongpai Technology Co., Ltd.
+OUI:D44649*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:D446E1*
ID_OUI_FROM_DATABASE=Apple, Inc.
ID_OUI_FROM_DATABASE=Riedo Networks Ltd
OUI:D46761*
- ID_OUI_FROM_DATABASE=United Gulf Gate Co.
+ ID_OUI_FROM_DATABASE=XonTel Technology Co.
OUI:D467D3*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
OUI:D4772B*
ID_OUI_FROM_DATABASE=Nanjing Ztlink Network Technology Co.,Ltd
+OUI:D477B2*
+ ID_OUI_FROM_DATABASE=Netix Global B.V.
+
OUI:D47856*
ID_OUI_FROM_DATABASE=Avaya Inc
OUI:D4A499*
ID_OUI_FROM_DATABASE=InView Technology Corporation
+OUI:D4A651*
+ ID_OUI_FROM_DATABASE=HANGZHOU AIXIANGJI TECHNOLOGY CO., LTD
+
OUI:D4A928*
ID_OUI_FROM_DATABASE=GreenWave Reality Inc
OUI:D4AB82*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:D4ABCD*
+ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+
OUI:D4AC4E*
ID_OUI_FROM_DATABASE=BODi rS, LLC
OUI:D4AE52*
ID_OUI_FROM_DATABASE=Dell Inc.
+OUI:D4AFF7*
+ ID_OUI_FROM_DATABASE=Arista Networks
+
OUI:D4B110*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:D4F207*
ID_OUI_FROM_DATABASE=DIAODIAO(Beijing)Technology CO.,Ltd
+OUI:D4F337*
+ ID_OUI_FROM_DATABASE=Xunison Ltd.
+
OUI:D4F46F*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:D4F63F*
ID_OUI_FROM_DATABASE=IEA S.R.L.
+OUI:D4F756*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:D4F786*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+OUI:D4F829*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
OUI:D4F9A1*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:D8337F*
ID_OUI_FROM_DATABASE=Office FA.com Co.,Ltd.
+OUI:D834EE*
+ ID_OUI_FROM_DATABASE=Stem Audio
+
OUI:D837BE*
ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
OUI:D84DB9*
ID_OUI_FROM_DATABASE=Wu Qi Technologies,Inc.
+OUI:D84F37*
+ ID_OUI_FROM_DATABASE=Proxis, spol. s r.o.
+
OUI:D84FB8*
ID_OUI_FROM_DATABASE=LG ELECTRONICS
OUI:D86CE9*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+OUI:D8714D*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:D87157*
ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
OUI:D8760A*
ID_OUI_FROM_DATABASE=Escort, Inc.
+OUI:D8778B*
+ ID_OUI_FROM_DATABASE=Intelbras
+
OUI:D8787F*
ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited
OUI:D88B4C*
ID_OUI_FROM_DATABASE=KingTing Tech.
+OUI:D88C79*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
OUI:D88D5C*
ID_OUI_FROM_DATABASE=Elentec
OUI:D89E61*
ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+OUI:D89ED4*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:D89EF3*
ID_OUI_FROM_DATABASE=Dell Inc.
OUI:D8C06A*
ID_OUI_FROM_DATABASE=Hunantv.com Interactive Entertainment Media Co.,Ltd.
+OUI:D8C0A6*
+ ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+
OUI:D8C3FB*
ID_OUI_FROM_DATABASE=DETRACOM
OUI:D8C561*
ID_OUI_FROM_DATABASE=CommFront Communications Pte Ltd
+OUI:D8C678*
+ ID_OUI_FROM_DATABASE=MitraStar Technology Corp.
+
OUI:D8C691*
ID_OUI_FROM_DATABASE=Hichan Technology Corp.
OUI:D8DA52*
ID_OUI_FROM_DATABASE=APATOR S.A.
+OUI:D8DC40*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:D8DCE9*
ID_OUI_FROM_DATABASE=Kunshan Erlab ductless filtration system Co.,Ltd
OUI:D8EE78*
ID_OUI_FROM_DATABASE=Moog Protokraft
+OUI:D8EF42*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:D8EFCD*
ID_OUI_FROM_DATABASE=Nokia
OUI:DC1AC5*
ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+OUI:DC1BA1*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:DC1D9F*
ID_OUI_FROM_DATABASE=U & B tech
OUI:DC415F*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:DC41A9*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:DC41E5*
ID_OUI_FROM_DATABASE=Shenzhen Zhixin Data Service Co., Ltd.
OUI:DC4F22*
ID_OUI_FROM_DATABASE=Espressif Inc.
+OUI:DC503A*
+ ID_OUI_FROM_DATABASE=Nanjing Ticom Tech Co., Ltd.
+
OUI:DC5360*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:DC7196*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:DC7223*
+ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+
OUI:DC729B*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:DC7385*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:DC74A8*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:DC9088*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:DC91BF*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
OUI:DC962C*
ID_OUI_FROM_DATABASE=NST Audio Ltd
OUI:DCA333*
ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+OUI:DCA3A2*
+ ID_OUI_FROM_DATABASE=Feng mi(Beijing)technology co., LTD
+
OUI:DCA3AC*
ID_OUI_FROM_DATABASE=RBcloudtech
OUI:DCAE04*
ID_OUI_FROM_DATABASE=CELOXICA Ltd
+OUI:DCAEEB*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
OUI:DCAF68*
ID_OUI_FROM_DATABASE=WEIFANG GOERTEK ELECTRONICS CO.,LTD
OUI:DCB808*
ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+OUI:DCBD7A*
+ ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
+
OUI:DCBE7A*
ID_OUI_FROM_DATABASE=Zhejiang Nurotron Biotechnology Co.
OUI:DCCC8D*
ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
+OUI:DCCD2F*
+ ID_OUI_FROM_DATABASE=Seiko Epson Corporation
+
OUI:DCCE41*
ID_OUI_FROM_DATABASE=FE GLOBAL HONG KONG LIMITED
OUI:DCD3A2*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:DCD444*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:DCD52A*
ID_OUI_FROM_DATABASE=Sunny Heart Limited
OUI:DCD916*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:DCD9AE*
+ ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
+
OUI:DCDA4F*
ID_OUI_FROM_DATABASE=GETCK TECHNOLOGY, INC
OUI:DCEF09*
ID_OUI_FROM_DATABASE=NETGEAR
+OUI:DCEF80*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:DCEFCA*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
OUI:E00EE1*
ID_OUI_FROM_DATABASE=We Corporation Inc.
+OUI:E00EE4*
+ ID_OUI_FROM_DATABASE=DWnet Technologies(Suzhou) Corporation
+
OUI:E0107F*
ID_OUI_FROM_DATABASE=Ruckus Wireless
OUI:E01954*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:E01995*
+ ID_OUI_FROM_DATABASE=Nutanix
+
OUI:E019D8*
ID_OUI_FROM_DATABASE=BH TECHNOLOGIES
OUI:E02AE6*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+OUI:E02B96*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:E02CB2*
ID_OUI_FROM_DATABASE=Lenovo Mobile Communication (Wuhan) Company Limited
OUI:E061B2*
ID_OUI_FROM_DATABASE=HANGZHOU ZENOINTEL TECHNOLOGY CO., LTD
+OUI:E06234*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:E06267*
ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
OUI:E0686D*
ID_OUI_FROM_DATABASE=Raybased AB
+OUI:E0693A*
+ ID_OUI_FROM_DATABASE=Innophase Inc.
+
OUI:E06995*
ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+OUI:E06CA6*
+ ID_OUI_FROM_DATABASE=Creotech Instruments S.A.
+
OUI:E0735F*
ID_OUI_FROM_DATABASE=NUCOM
OUI:E0795E*
ID_OUI_FROM_DATABASE=Wuxi Xiaohu Technology Co.,Ltd.
+OUI:E079C4*
+ ID_OUI_FROM_DATABASE=iRay Technology Company Limited
+
OUI:E07C13*
ID_OUI_FROM_DATABASE=zte corporation
OUI:E091F5*
ID_OUI_FROM_DATABASE=NETGEAR
+OUI:E092A7*
+ ID_OUI_FROM_DATABASE=Feitian Technologies Co., Ltd
+
OUI:E09467*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:E0AF4F*
ID_OUI_FROM_DATABASE=Deutsche Telekom AG
+OUI:E0B260*
+ ID_OUI_FROM_DATABASE=TENO NETWORK TECHNOLOGIES COMPANY LIMITED
+
OUI:E0B2F1*
ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
OUI:E0BC43*
ID_OUI_FROM_DATABASE=C2 Microsystems, Inc.
+OUI:E0BE03*
+ ID_OUI_FROM_DATABASE=Lite-On Network Communication (Dongguan) Limited
+
OUI:E0C0D1*
ID_OUI_FROM_DATABASE=CK Telecom (Shenzhen) Limited
OUI:E0D462*
ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+OUI:E0D464*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:E0D4E8*
ID_OUI_FROM_DATABASE=Intel Corporate
OUI:E41F13*
ID_OUI_FROM_DATABASE=IBM Corp
+OUI:E41F7B*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:E41FE9*
ID_OUI_FROM_DATABASE=Dunkermotoren GmbH
OUI:E42354*
ID_OUI_FROM_DATABASE=SHENZHEN FUZHI SOFTWARE TECHNOLOGY CO.,LTD
+OUI:E4246C*
+ ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
+
OUI:E425E7*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:E42686*
ID_OUI_FROM_DATABASE=DWnet Technologies(Suzhou) Corporation
+OUI:E4268B*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:E42771*
ID_OUI_FROM_DATABASE=Smartlabs
OUI:E43C80*
ID_OUI_FROM_DATABASE=University of Oklahoma
+OUI:E43D1A*
+ ID_OUI_FROM_DATABASE=Broadcom Limited
+
+OUI:E43EC6*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:E43ED7*
ID_OUI_FROM_DATABASE=Arcadyan Corporation
OUI:E440E2*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:E44122*
+ ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd
+
OUI:E441E6*
ID_OUI_FROM_DATABASE=Ottec Technology GmbH
OUI:E45AA2*
ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+OUI:E45AD4*
+ ID_OUI_FROM_DATABASE=Eltex Enterprise Ltd.
+
OUI:E45D37*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:E4D332*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+OUI:E4D373*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:E4D3AA*
ID_OUI_FROM_DATABASE=FUJITSU CONNECTED TECHNOLOGIES LIMITED
OUI:E81367*
ID_OUI_FROM_DATABASE=AIRSOUND Inc.
+OUI:E8136E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:E8150E*
ID_OUI_FROM_DATABASE=Nokia Corporation
OUI:E81B4B*
ID_OUI_FROM_DATABASE=amnimo Inc.
+OUI:E81B69*
+ ID_OUI_FROM_DATABASE=Sercomm Corporation.
+
OUI:E81CBA*
ID_OUI_FROM_DATABASE=Fortinet, Inc.
OUI:E86D6E*
ID_OUI_FROM_DATABASE=voestalpine SIGNALING Fareham Ltd.
+OUI:E86DCB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:E86F38*
ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
OUI:E87AF3*
ID_OUI_FROM_DATABASE=S5 Tech S.r.l.
+OUI:E87F95*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:E8802E*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:E884C6*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:E8854B*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:E887A3*
ID_OUI_FROM_DATABASE=Loxley Public Company Limited
ID_OUI_FROM_DATABASE=HTC Corporation
OUI:E89A8F*
- ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+ ID_OUI_FROM_DATABASE=Quanta Computer Inc.
OUI:E89AFF*
ID_OUI_FROM_DATABASE=Fujian LANDI Commercial Equipment Co.,Ltd
OUI:E89EB4*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:E89F80*
+ ID_OUI_FROM_DATABASE=Belkin International Inc.
+
OUI:E89FEC*
ID_OUI_FROM_DATABASE=CHENGDU KT ELECTRONIC HI-TECH CO.,LTD
+OUI:E8A1F8*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:E8A245*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
OUI:E8A364*
ID_OUI_FROM_DATABASE=Signal Path International / Peachtree Audio
OUI:E8D8D1*
ID_OUI_FROM_DATABASE=HP Inc.
+OUI:E8DA20*
+ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+
OUI:E8DA96*
ID_OUI_FROM_DATABASE=Zhuhai Tianrui Electrical Power Tech. Co., Ltd.
OUI:E8EB11*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:E8EB1B*
+ ID_OUI_FROM_DATABASE=Microchip Technology Inc.
+
OUI:E8ECA3*
ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co.Ltd
OUI:EC24B8*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:EC2651*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
OUI:EC26CA*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
OUI:EC5623*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:EC570D*
+ ID_OUI_FROM_DATABASE=AFE Inc.
+
OUI:EC58EA*
ID_OUI_FROM_DATABASE=Ruckus Wireless
OUI:EC6881*
ID_OUI_FROM_DATABASE=Palo Alto Networks
+OUI:EC6C9A*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
OUI:EC6C9F*
ID_OUI_FROM_DATABASE=Chengdu Volans Technology CO.,LTD
OUI:EC74BA*
ID_OUI_FROM_DATABASE=Hirschmann Automation and Control GmbH
+OUI:EC753E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:EC7949*
ID_OUI_FROM_DATABASE=FUJITSU LIMITED
OUI:ECBEDD*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+OUI:ECC01B*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:ECC06A*
ID_OUI_FROM_DATABASE=PowerChord Group Limited
OUI:ECD9D1*
ID_OUI_FROM_DATABASE=Shenzhen TG-NET Botone Technology Co.,Ltd.
+OUI:ECDB86*
+ ID_OUI_FROM_DATABASE=API-K
+
OUI:ECDE3D*
ID_OUI_FROM_DATABASE=Lamprey Networks, Inc.
OUI:F02A61*
ID_OUI_FROM_DATABASE=Waldo Networks, Inc.
+OUI:F02E51*
+ ID_OUI_FROM_DATABASE=Casa Systems
+
OUI:F02FA7*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:F05494*
ID_OUI_FROM_DATABASE=Honeywell Connected Building
+OUI:F05501*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:F05849*
ID_OUI_FROM_DATABASE=CareView Communications
OUI:F09A51*
ID_OUI_FROM_DATABASE=Shanghai Viroyal Electronic Technology Company Limited
+OUI:F09BB8*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:F09CBB*
ID_OUI_FROM_DATABASE=RaonThink Inc.
OUI:F0D7AA*
ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+OUI:F0D7AF0*
+ ID_OUI_FROM_DATABASE=ID Tech Japan Co.,Ltd.
+
+OUI:F0D7AF1*
+ ID_OUI_FROM_DATABASE=Beijing Serviatech lnformation Tech Co.,Ltd
+
+OUI:F0D7AF2*
+ ID_OUI_FROM_DATABASE=Blacknight Internet Solutions Limited
+
+OUI:F0D7AF3*
+ ID_OUI_FROM_DATABASE=720?bei jing?Health iTech Co.,Ltd
+
+OUI:F0D7AF4*
+ ID_OUI_FROM_DATABASE=ADAM Audio GmbH
+
+OUI:F0D7AF5*
+ ID_OUI_FROM_DATABASE=Dongguan Huili electroacoustic Industrial Co.,ltd
+
+OUI:F0D7AF6*
+ ID_OUI_FROM_DATABASE=Anord Mardix (USA) Inc.
+
+OUI:F0D7AF7*
+ ID_OUI_FROM_DATABASE=Rievtech Electronic Co.,Ltd
+
+OUI:F0D7AF8*
+ ID_OUI_FROM_DATABASE=SHEN ZHEN MICHIP TECHNOLOGIES CO.,LTD.
+
+OUI:F0D7AF9*
+ ID_OUI_FROM_DATABASE=New IT Project LLC
+
+OUI:F0D7AFA*
+ ID_OUI_FROM_DATABASE=MSTAR TECHNOLOGIES,INC
+
+OUI:F0D7AFB*
+ ID_OUI_FROM_DATABASE=EVCO SPA
+
+OUI:F0D7AFC*
+ ID_OUI_FROM_DATABASE=Shenzhen Virtual Clusters Information Technology Co.,Ltd.
+
+OUI:F0D7AFD*
+ ID_OUI_FROM_DATABASE=Dongguan Gedi Electrons Techeology Co.,LTD
+
+OUI:F0D7AFE*
+ ID_OUI_FROM_DATABASE=Wren Associates, LTD
+
OUI:F0D7DC*
ID_OUI_FROM_DATABASE=Wesine (Wuhan) Technology Co., Ltd.
OUI:F0F9F7*
ID_OUI_FROM_DATABASE=IES GmbH & Co. KG
+OUI:F0FAC7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:F0FCC8*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
OUI:F4672D*
ID_OUI_FROM_DATABASE=ShenZhen Topstar Technology Company
+OUI:F46942*
+ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+
+OUI:F469D50*
+ ID_OUI_FROM_DATABASE=Mossman Limited
+
+OUI:F469D51*
+ ID_OUI_FROM_DATABASE=Junchuang (Xiamen) Automation Technology Co.,Ltd
+
+OUI:F469D52*
+ ID_OUI_FROM_DATABASE=Pulsar Engineering srl
+
+OUI:F469D53*
+ ID_OUI_FROM_DATABASE=ITS Co., Ltd.
+
+OUI:F469D54*
+ ID_OUI_FROM_DATABASE=Stype CS d.o.o.
+
+OUI:F469D55*
+ ID_OUI_FROM_DATABASE=Hefei STAROT Technology Co.,Ltd
+
+OUI:F469D56*
+ ID_OUI_FROM_DATABASE=TianJin KCHT Information Technology Co., Ltd.
+
+OUI:F469D57*
+ ID_OUI_FROM_DATABASE=Rosco, Inc
+
+OUI:F469D59*
+ ID_OUI_FROM_DATABASE=Terminus (Shanghai) Technology Co.,Ltd.
+
+OUI:F469D5A*
+ ID_OUI_FROM_DATABASE=ShenZhenShi EVADA technology Co.,Ltd
+
+OUI:F469D5B*
+ ID_OUI_FROM_DATABASE=Konntek Inc
+
+OUI:F469D5C*
+ ID_OUI_FROM_DATABASE=Huaqin Telecom Technology Co.,Ltd.
+
+OUI:F469D5D*
+ ID_OUI_FROM_DATABASE=Nantong ZYDZ Electronic.,Co.Ltd
+
+OUI:F469D5E*
+ ID_OUI_FROM_DATABASE=ORtek Technology, Inc.
+
OUI:F46A92*
ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
OUI:F4BF80*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:F4BFA8*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
+OUI:F4C114*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
OUI:F4C248*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:F4E4AD*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:F4E578*
+ ID_OUI_FROM_DATABASE=LLC Proizvodstvennaya Kompania TransService
+
OUI:F4E5F2*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:F81A67*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+OUI:F81B04*
+ ID_OUI_FROM_DATABASE=Zhong Shan City Richsound Electronic Industrial Ltd
+
OUI:F81CE5*
ID_OUI_FROM_DATABASE=Telefonbau Behnke GmbH
OUI:F82F5B*
ID_OUI_FROM_DATABASE=eGauge Systems LLC
+OUI:F82F65*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:F82F6A*
ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
OUI:F85063*
ID_OUI_FROM_DATABASE=Verathon
+OUI:F85128*
+ ID_OUI_FROM_DATABASE=SimpliSafe
+
OUI:F8516D*
ID_OUI_FROM_DATABASE=Denwa Technology Corp.
OUI:F85C4D*
ID_OUI_FROM_DATABASE=Nokia
+OUI:F85C7D*
+ ID_OUI_FROM_DATABASE=Shenzhen Honesty Electronics Co.,Ltd.
+
OUI:F85E3C*
ID_OUI_FROM_DATABASE=SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD
OUI:F86465*
ID_OUI_FROM_DATABASE=Anova Applied Electronics, Inc.
+OUI:F864B8*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:F86601*
ID_OUI_FROM_DATABASE=Suzhou Chi-tek information technology Co., Ltd
OUI:F86971*
ID_OUI_FROM_DATABASE=Seibu Electric Co.,
+OUI:F86BD9*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:F86C03*
+ ID_OUI_FROM_DATABASE=Shenzhen Teleone Technology Co., Ltd
+
OUI:F86CE1*
ID_OUI_FROM_DATABASE=Taicang T&W Electronics
OUI:F8811A*
ID_OUI_FROM_DATABASE=OVERKIZ
+OUI:F88200*
+ ID_OUI_FROM_DATABASE=CaptionCall
+
OUI:F88479*
ID_OUI_FROM_DATABASE=Yaojin Technology(Shenzhen)Co.,Ltd
OUI:F8A188*
ID_OUI_FROM_DATABASE=LED Roadway Lighting
+OUI:F8A26D*
+ ID_OUI_FROM_DATABASE=CANON INC.
+
OUI:F8A2B4*
ID_OUI_FROM_DATABASE=RHEWA-WAAGENFABRIK August Freudewald GmbH &Co. KG
OUI:F8AB05*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+OUI:F8AC65*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:F8AC6D*
ID_OUI_FROM_DATABASE=Deltenna Ltd
OUI:F8BBBF*
ID_OUI_FROM_DATABASE=eero inc.
+OUI:F8BC0E*
+ ID_OUI_FROM_DATABASE=eero inc.
+
OUI:F8BC12*
ID_OUI_FROM_DATABASE=Dell Inc.
OUI:F8E811*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:F8E877*
+ ID_OUI_FROM_DATABASE=Harman/Becker Automotive Systems GmbH
+
OUI:F8E903*
ID_OUI_FROM_DATABASE=D-Link International
OUI:FC1349*
ID_OUI_FROM_DATABASE=Global Apps Corp.
+OUI:FC1499*
+ ID_OUI_FROM_DATABASE=Aimore Acoustics Incorporation
+
OUI:FC15B4*
ID_OUI_FROM_DATABASE=Hewlett Packard
OUI:FC1910*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:FC1999*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
OUI:FC19D0*
ID_OUI_FROM_DATABASE=Cloud Vision Networks Technology Co.,Ltd.
OUI:FC6018*
ID_OUI_FROM_DATABASE=Zhejiang Kangtai Electric Co., Ltd.
+OUI:FC609B*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
OUI:FC6198*
ID_OUI_FROM_DATABASE=NEC Personal Products, Ltd
OUI:FC71FA*
ID_OUI_FROM_DATABASE=Trane Technologies
+OUI:FC73FB*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:FC7516*
ID_OUI_FROM_DATABASE=D-Link International
OUI:FC8596*
ID_OUI_FROM_DATABASE=Axonne Inc.
+OUI:FC862A*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
OUI:FC8743*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:FCA47AE*
ID_OUI_FROM_DATABASE=Hefei Feier Smart Science&Technology Co. Ltd
+OUI:FCA5D0*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
OUI:FCA621*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:FCBBA1*
ID_OUI_FROM_DATABASE=Shenzhen Minicreate Technology Co.,Ltd
+OUI:FCBC0E*
+ ID_OUI_FROM_DATABASE=Zhejiang Cainiao Supply Chain Management Co., Ltd
+
OUI:FCBC9C*
ID_OUI_FROM_DATABASE=Vimar Spa
---- 20-acpi-vendor.hwdb.base 2020-03-06 12:40:11.417307950 +0100
-+++ 20-acpi-vendor.hwdb 2020-03-06 12:40:11.433308177 +0100
+--- 20-acpi-vendor.hwdb.base 2020-07-06 17:50:38.655308539 +0200
++++ 20-acpi-vendor.hwdb 2020-07-06 17:50:38.678308990 +0200
@@ -3,6 +3,8 @@
# Data imported from:
# https://uefi.org/uefi-pnp-export
pci:v*d*sv*sd*bc0Csc03i30*
ID_PCI_INTERFACE_FROM_DATABASE=XHCI
+pci:v*d*sv*sd*bc0Csc03i40*
+ ID_PCI_INTERFACE_FROM_DATABASE=USB4 Host Interface
+
pci:v*d*sv*sd*bc0Csc03i80*
ID_PCI_INTERFACE_FROM_DATABASE=Unspecified
pci:v00000721*
ID_VENDOR_FROM_DATABASE=Sapphire, Inc.
+pci:v00000731*
+ ID_VENDOR_FROM_DATABASE=Jingjia Microelectronics Co Ltd
+
+pci:v00000731d00007200*
+ ID_MODEL_FROM_DATABASE=JM7200 Series GPU
+
pci:v00000777*
ID_VENDOR_FROM_DATABASE=Ubiquiti Networks, Inc.
pci:v00001000d0000005Fsv00001054sd0000306A*
ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3008 [Fury] (SAS 3004 iMR ROMB)
+pci:v00001000d0000005Fsv00001734sd00001211*
+ ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3008 [Fury] (PRAID CP400i [D3307-A12])
+
pci:v00001000d0000005Fsv00001D49sd000004DB*
ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3008 [Fury] (ServeRAID M1210 SAS/SATA Controller)
pci:v00001000d00000097sv000015D9sd00000808*
ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (AOC-S3008L-L8e)
+pci:v00001000d00000097sv00001BD4sd00000008*
+ ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (12G SAS3008IMR Onboard)
+
pci:v00001000d00000097sv00001BD4sd0000000B*
ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (12G SAS3008IR)
pci:v00001000d00000097sv00001BD4sd00000012*
ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (12Gb SAS3008IR UDM)
+pci:v00001000d00000097sv00001BD4sd0000001F*
+ ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (12G SAS3008IR Onboard)
+
+pci:v00001000d00000097sv00001BD4sd00000020*
+ ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (12G SAS3008IT Onboard)
+
pci:v00001000d00000097sv00001BD4sd00000026*
ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (12G SAS3008IT RACK)
pci:v00001002d00004383sv00001458sd0000A022*
ID_MODEL_FROM_DATABASE=SBx00 Azalia (Intel HDA) (GA-MA770-DS3rev2.0 Motherboard)
+pci:v00001002d00004383sv00001458sd0000A102*
+ ID_MODEL_FROM_DATABASE=SBx00 Azalia (Intel HDA) (GA-880GMA-USB3)
+
pci:v00001002d00004383sv000017F2sd00005000*
ID_MODEL_FROM_DATABASE=SBx00 Azalia (Intel HDA) (KI690-AM2 Motherboard)
pci:v00001002d00004391sv0000105Bsd00000E13*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] (N15235/A74MX mainboard / AMD SB700)
+pci:v00001002d00004391sv00001458sd0000B002*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] (GA-880GMA-USB3)
+
pci:v00001002d00004391sv0000174Bsd00001001*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] (PURE Fusion Mini)
pci:v00001002d00004396sv0000105Bsd00000E13*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB EHCI Controller (N15235/A74MX mainboard / AMD SB700)
+pci:v00001002d00004396sv00001458sd00005004*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB EHCI Controller (GA-880GMA-USB3)
+
pci:v00001002d00004396sv000015D9sd0000A811*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB EHCI Controller (H8DGU)
pci:v00001002d00004397sv0000105Bsd00000E13*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI0 Controller (N15235/A74MX mainboard / AMD SB700)
+pci:v00001002d00004397sv00001458sd00005004*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI0 Controller (GA-880GMA-USB3)
+
pci:v00001002d00004397sv000015D9sd0000A811*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI0 Controller (H8DGU)
pci:v00001002d00004399sv0000105Bsd00000E13*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI2 Controller (N15235/A74MX mainboard / AMD SB700)
+pci:v00001002d00004399sv00001458sd00005004*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI2 Controller (GA-880GMA-USB3)
+
pci:v00001002d00004399sv0000174Bsd00001001*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI2 Controller (PURE Fusion Mini)
pci:v00001002d00006658*
ID_MODEL_FROM_DATABASE=Bonaire XTX [Radeon R7 260X/360]
+pci:v00001002d00006658sv00001043sd0000048F*
+ ID_MODEL_FROM_DATABASE=Bonaire XTX [Radeon R7 260X/360] (R7260X-DC2OC-2GD5)
+
pci:v00001002d00006658sv00001043sd000004D3*
ID_MODEL_FROM_DATABASE=Bonaire XTX [Radeon R7 260X/360] (AMD Radeon R7 260X)
pci:v00001002d000067DFsv00001028sd00001723*
ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (Radeon RX 580X)
+pci:v00001002d000067DFsv0000103Csd0000840E*
+ ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (Radeon RX 580 4GB)
+
pci:v00001002d000067DFsv00001043sd000004A8*
ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (Radeon RX 480)
ID_MODEL_FROM_DATABASE=Vega 10 XTX [Radeon Vega Frontier Edition]
pci:v00001002d00006864*
- ID_MODEL_FROM_DATABASE=Vega
+ ID_MODEL_FROM_DATABASE=Vega 10 [Radeon Pro V340]
pci:v00001002d00006867*
ID_MODEL_FROM_DATABASE=Vega 10 XL [Radeon Pro Vega 56]
ID_MODEL_FROM_DATABASE=Vega 10 XL/XT [Radeon RX Vega 56/64] (RX Vega64)
pci:v00001002d0000687Fsv00001002sd00006B76*
- ID_MODEL_FROM_DATABASE=Vega 10 XL/XT [Radeon RX Vega 56/64] (RX Vega56)
+ ID_MODEL_FROM_DATABASE=Vega 10 XL/XT [Radeon RX Vega 56/64] (RX Vega64)
pci:v00001002d00006880*
ID_MODEL_FROM_DATABASE=Lexington [Radeon HD 6550M]
pci:v00001002d00006907*
ID_MODEL_FROM_DATABASE=Meso XT [Radeon R5 M315]
+pci:v00001002d00006920*
+ ID_MODEL_FROM_DATABASE=Amethyst [Radeon R9 M395/ M395X Mac Edition]
+
pci:v00001002d00006921*
- ID_MODEL_FROM_DATABASE=Amethyst XT [Radeon R9 M295X]
+ ID_MODEL_FROM_DATABASE=Amethyst XT [Radeon R9 M295X / M390X]
pci:v00001002d00006929*
ID_MODEL_FROM_DATABASE=Tonga XT GL [FirePro S7150]
ID_MODEL_FROM_DATABASE=Fiji [Radeon R9 FURY / NANO Series] (Radeon R9 FURY)
pci:v00001002d00007310*
- ID_MODEL_FROM_DATABASE=Navi 10
+ ID_MODEL_FROM_DATABASE=Navi 10 [Radeon Pro W5700X]
pci:v00001002d00007312*
ID_MODEL_FROM_DATABASE=Navi 10 [Radeon Pro W5700]
pci:v00001002d0000731F*
ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
+pci:v00001002d0000731Fsv00001DA2sd0000E411*
+ ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (Radeon RX 5600 XT)
+
pci:v00001002d00007340*
ID_MODEL_FROM_DATABASE=Navi 14 [Radeon RX 5500/5500M / Pro 5500M]
pci:v00001002d0000734F*
ID_MODEL_FROM_DATABASE=Navi 14 [Radeon Pro W5300M]
+pci:v00001002d00007360*
+ ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M]
+
pci:v00001002d00007833*
ID_MODEL_FROM_DATABASE=RS350 Host Bridge
pci:v00001002d000095C0sv00001002sd000095C0*
ID_MODEL_FROM_DATABASE=RV620 PRO [Radeon HD 3470] (Mobility Radeon HD 3470)
+pci:v00001002d000095C0sv00001028sd00003243*
+ ID_MODEL_FROM_DATABASE=RV620 PRO [Radeon HD 3470] (C120D)
+
pci:v00001002d000095C2*
ID_MODEL_FROM_DATABASE=RV620/M82 [Mobility Radeon HD 3410/3430]
pci:v00001002d0000AAC0*
ID_MODEL_FROM_DATABASE=Tobago HDMI Audio [Radeon R7 360 / R9 360 OEM]
+pci:v00001002d0000AAC0sv00001043sd0000AAC0*
+ ID_MODEL_FROM_DATABASE=Tobago HDMI Audio [Radeon R7 360 / R9 360 OEM] (R7260X-DC2OC-2GD5)
+
pci:v00001002d0000AAC8*
ID_MODEL_FROM_DATABASE=Hawaii HDMI Audio [Radeon R9 290/290X / 390/390X]
pci:v0000102Bd0000051Asv0000102Bsd00000100*
ID_MODEL_FROM_DATABASE=MGA 1064SG [Mystique] (MGA-1064SG Mystique)
+pci:v0000102Bd0000051Asv0000102Bsd0000051A*
+ ID_MODEL_FROM_DATABASE=MGA 1064SG [Mystique] (MGA-1164SG Mystique 220)
+
pci:v0000102Bd0000051Asv0000102Bsd00001100*
ID_MODEL_FROM_DATABASE=MGA 1064SG [Mystique] (MGA-1084SG Mystique)
pci:v000010DEd00000FD5*
ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 650M Mac Edition]
+pci:v000010DEd00000FD6*
+ ID_MODEL_FROM_DATABASE=GK107M
+
pci:v000010DEd00000FD8*
ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 640M Mac Edition]
pci:v000010DEd00000FE7sv000010DEsd0000101E*
ID_MODEL_FROM_DATABASE=GK107GL [GRID K100 vGPU] (GRID K100)
+pci:v000010DEd00000FE8*
+ ID_MODEL_FROM_DATABASE=GK107M
+
pci:v000010DEd00000FE9*
ID_MODEL_FROM_DATABASE=GK107M [GeForce GT 750M Mac Edition]
pci:v000010DEd000011A7*
ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 675MX]
+pci:v000010DEd000011A9*
+ ID_MODEL_FROM_DATABASE=GK104M [GeForce GTX 870M]
+
pci:v000010DEd000011AF*
ID_MODEL_FROM_DATABASE=GK104GLM [GRID IceCube]
pci:v000010DEd00001289*
ID_MODEL_FROM_DATABASE=GK208 [GeForce GT 710]
+pci:v000010DEd0000128A*
+ ID_MODEL_FROM_DATABASE=GK208B
+
pci:v000010DEd0000128B*
ID_MODEL_FROM_DATABASE=GK208B [GeForce GT 710]
pci:v000010DEd0000128Bsv00001043sd000085F7*
ID_MODEL_FROM_DATABASE=GK208B [GeForce GT 710] (GT710-SL-1GD5)
+pci:v000010DEd0000128C*
+ ID_MODEL_FROM_DATABASE=GK208B
+
pci:v000010DEd00001290*
ID_MODEL_FROM_DATABASE=GK208M [GeForce GT 730M]
pci:v000010DEd00001AEB*
ID_MODEL_FROM_DATABASE=TU116 High Definition Audio Controller
+pci:v000010DEd00001AEC*
+ ID_MODEL_FROM_DATABASE=TU116 USB 3.1 Host Controller
+
pci:v000010DEd00001AED*
- ID_MODEL_FROM_DATABASE=TU116 [GeForce GTX 1650 SUPER]
+ ID_MODEL_FROM_DATABASE=TU116 USB Type-C UCSI Controller
pci:v000010DEd00001B00*
ID_MODEL_FROM_DATABASE=GP102 [TITAN X]
pci:v000010DEd00001C94*
ID_MODEL_FROM_DATABASE=GP107M [GeForce MX350]
+pci:v000010DEd00001C96*
+ ID_MODEL_FROM_DATABASE=GP107M [GeForce MX350]
+
pci:v000010DEd00001CA7*
ID_MODEL_FROM_DATABASE=GP107GL
pci:v000010DEd00001D52*
ID_MODEL_FROM_DATABASE=GP108BM [GeForce MX250]
+pci:v000010DEd00001D56*
+ ID_MODEL_FROM_DATABASE=GP108BM [GeForce MX330]
+
pci:v000010DEd00001D81*
ID_MODEL_FROM_DATABASE=GV100 [TITAN V]
pci:v000010DEd00001E30sv000010DEsd000012BA*
ID_MODEL_FROM_DATABASE=TU102GL [Quadro RTX 6000/8000] (Quadro RTX 6000)
+pci:v000010DEd00001E36*
+ ID_MODEL_FROM_DATABASE=TU102GL
+
pci:v000010DEd00001E37*
ID_MODEL_FROM_DATABASE=TU102GL [GRID RTX T10-4/T10-8/T10-16]
pci:v000010DEd00001E90*
ID_MODEL_FROM_DATABASE=TU104M [GeForce RTX 2080 Mobile]
+pci:v000010DEd00001E91*
+ ID_MODEL_FROM_DATABASE=TU104M [GeForce RTX 2070 SUPER Mobile / Max-Q]
+
+pci:v000010DEd00001E93*
+ ID_MODEL_FROM_DATABASE=TU104M [GeForce RTX 2080 SUPER Mobile / Max-Q]
+
pci:v000010DEd00001EAB*
ID_MODEL_FROM_DATABASE=TU104M
pci:v000010DEd00001ED0*
ID_MODEL_FROM_DATABASE=TU104BM [GeForce RTX 2080 Mobile]
+pci:v000010DEd00001ED1*
+ ID_MODEL_FROM_DATABASE=TU104BM [GeForce RTX 2070 SUPER Mobile / Max-Q]
+
+pci:v000010DEd00001ED3*
+ ID_MODEL_FROM_DATABASE=TU104BM [GeForce RTX 2080 SUPER Mobile / Max-Q]
+
pci:v000010DEd00001F02*
ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2070]
pci:v000010DEd00001F08*
ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2060 Rev. A]
+pci:v000010DEd00001F09*
+ ID_MODEL_FROM_DATABASE=TU106 [GeForce GTX 1660 SUPER]
+
+pci:v000010DEd00001F0A*
+ ID_MODEL_FROM_DATABASE=TU106 [GeForce GTX 1650]
+
pci:v000010DEd00001F10*
ID_MODEL_FROM_DATABASE=TU106M [GeForce RTX 2070 Mobile]
pci:v000010DEd00001F11*
ID_MODEL_FROM_DATABASE=TU106M [GeForce RTX 2060 Mobile]
+pci:v000010DEd00001F12*
+ ID_MODEL_FROM_DATABASE=TU106M [GeForce RTX 2060 Max-Q]
+
+pci:v000010DEd00001F14*
+ ID_MODEL_FROM_DATABASE=TU106M [GeForce RTX 2070 Mobile / Max-Q Refresh]
+
+pci:v000010DEd00001F15*
+ ID_MODEL_FROM_DATABASE=TU106M [GeForce RTX 2060 Mobile]
+
pci:v000010DEd00001F2E*
ID_MODEL_FROM_DATABASE=TU106M
ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2060 SUPER]
pci:v000010DEd00001F50*
- ID_MODEL_FROM_DATABASE=TU106BM [GeForce RTX 2070 Mobile]
+ ID_MODEL_FROM_DATABASE=TU106BM [GeForce RTX 2070 Mobile / Max-Q]
pci:v000010DEd00001F51*
ID_MODEL_FROM_DATABASE=TU106BM [GeForce RTX 2060 Mobile]
+pci:v000010DEd00001F54*
+ ID_MODEL_FROM_DATABASE=TU106BM [GeForce RTX 2070 Mobile]
+
+pci:v000010DEd00001F55*
+ ID_MODEL_FROM_DATABASE=TU106BM [GeForce RTX 2060 Mobile]
+
pci:v000010DEd00001F81*
ID_MODEL_FROM_DATABASE=TU117
pci:v000010DEd00001F92*
ID_MODEL_FROM_DATABASE=TU117M [GeForce GTX 1650 Mobile]
+pci:v000010DEd00001F94*
+ ID_MODEL_FROM_DATABASE=TU117M [GeForce GTX 1650 Mobile]
+
+pci:v000010DEd00001F95*
+ ID_MODEL_FROM_DATABASE=TU117M [GeForce GTX 1650 Ti Mobile]
+
pci:v000010DEd00001F96*
ID_MODEL_FROM_DATABASE=TU117M [GeForce GTX 1650 Mobile / Max-Q]
+pci:v000010DEd00001F99*
+ ID_MODEL_FROM_DATABASE=TU117M
+
pci:v000010DEd00001FAE*
ID_MODEL_FROM_DATABASE=TU117GL
pci:v000010DEd00001FBF*
ID_MODEL_FROM_DATABASE=TU117GL
+pci:v000010DEd000020B0*
+ ID_MODEL_FROM_DATABASE=GA100 [GRID A100X]
+
+pci:v000010DEd000020BE*
+ ID_MODEL_FROM_DATABASE=GA100 [GRID A100A]
+
+pci:v000010DEd000020BF*
+ ID_MODEL_FROM_DATABASE=GA100 [GRID A100B]
+
+pci:v000010DEd000020F1*
+ ID_MODEL_FROM_DATABASE=GA100 [GRID A100 PCIe 40GB]
+
pci:v000010DEd00002182*
ID_MODEL_FROM_DATABASE=TU116 [GeForce GTX 1660 Ti]
pci:v000010DEd00002187*
ID_MODEL_FROM_DATABASE=TU116 [GeForce GTX 1650 SUPER]
+pci:v000010DEd00002188*
+ ID_MODEL_FROM_DATABASE=TU116 [GeForce GTX 1650]
+
pci:v000010DEd00002191*
ID_MODEL_FROM_DATABASE=TU116M [GeForce GTX 1660 Ti Mobile]
+pci:v000010DEd00002192*
+ ID_MODEL_FROM_DATABASE=TU116M [GeForce GTX 1650 Ti Mobile]
+
pci:v000010DEd000021AE*
ID_MODEL_FROM_DATABASE=TU116GL
pci:v000010ECd0000525A*
ID_MODEL_FROM_DATABASE=RTS525A PCI Express Card Reader
+pci:v000010ECd0000525Asv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=RTS525A PCI Express Card Reader (Latitude 7275 tablet)
+
pci:v000010ECd0000525Asv00001028sd000006DC*
ID_MODEL_FROM_DATABASE=RTS525A PCI Express Card Reader (Latitude E7470)
pci:v000010ECd00008168sv00001028sd000006F3*
ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Latitude 3570)
+pci:v000010ECd00008168sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Vostro 3470)
+
pci:v000010ECd00008168sv0000103Csd00001611*
ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Pavilion DM1Z-3000)
pci:v000010ECd00008168sv000017AAsd00003814*
ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Z50-75)
+pci:v000010ECd00008168sv000017AAsd00003823*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Lenovo V130-15IGM Laptop - Type 81HL)
+
pci:v000010ECd00008168sv000017AAsd00005124*
ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (ThinkPad E595)
pci:v00001102d00000003*
ID_MODEL_FROM_DATABASE=SB AWE64(D)
+pci:v00001102d00000003sv00001102sd00000010*
+ ID_MODEL_FROM_DATABASE=SB AWE64(D) (CT4600 AWE64D)
+
+pci:v00001102d00000003sv00001102sd00000030*
+ ID_MODEL_FROM_DATABASE=SB AWE64(D) (CT4650 AWE64D)
+
+pci:v00001102d00000003sv00001102sd00000031*
+ ID_MODEL_FROM_DATABASE=SB AWE64(D) (CT4655 AWE64D)
+
pci:v00001102d00000004*
ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series]
pci:v000012D8d000001A7*
ID_MODEL_FROM_DATABASE=7C21P100 2-port PCI-X to PCI-X Bridge
+pci:v000012D8d00000303*
+ ID_MODEL_FROM_DATABASE=PCI Express Switch 3-3
+
+pci:v000012D8d00000508*
+ ID_MODEL_FROM_DATABASE=PI7C9X20508GP PCI Express Switch 5Port-8Lane
+
pci:v000012D8d00002304*
ID_MODEL_FROM_DATABASE=PI7C9X2G304 EL/SL PCIe2 3-Port/4-Lane Packet Switch
pci:v0000144Dd0000A824*
ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X
+pci:v0000144Dd0000A824sv00001028sd00002040*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 1.6TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002041*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 3.2TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002042*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 6.4TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002043*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 12.8TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002044*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN MU AIC Gen4 1.6TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002045*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN MU AIC Gen4 3.2TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002046*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN MU AIC Gen4 6.4TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002070*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 1.92TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002071*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 3.84TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002072*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 7.68TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002073*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 15.36TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002074*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN RI AIC Gen4 1.92TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002075*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN RI AIC Gen4 3.84TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002076*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN RI AIC Gen4 7.68TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002090*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 1.6TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002091*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 3.2TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002092*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 6.4TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002093*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 12.8TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002094*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN SED MU AIC Gen4 1.6TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002095*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN SED MU AIC Gen4 3.2TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002096*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN SED MU AIC Gen4 6.4TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002097*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 1.92TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002098*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 3.84TB)
+
+pci:v0000144Dd0000A824sv00001028sd00002099*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM173X (EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 7.68TB)
+
pci:v0000144E*
ID_VENDOR_FROM_DATABASE=OLITEC
pci:v000015B3d00000217*
ID_MODEL_FROM_DATABASE=MT2894 Family [ConnectX-6 Lx Secure Flash Recovery]
+pci:v000015B3d00000218*
+ ID_MODEL_FROM_DATABASE=MT2910 Family [ConnectX-7 Flash Recovery]
+
+pci:v000015B3d00000219*
+ ID_MODEL_FROM_DATABASE=MT2910 Family [ConnectX-7 Secure Flash Recovery]
+
+pci:v000015B3d0000021A*
+ ID_MODEL_FROM_DATABASE=MT43162 Family [BlueField-3 Lx SoC Flash Recovery]
+
+pci:v000015B3d0000021B*
+ ID_MODEL_FROM_DATABASE=MT43162 Family [BlueField-3 Lx Secure Flash Recovery]
+
+pci:v000015B3d0000021C*
+ ID_MODEL_FROM_DATABASE=MT43244 Family [BlueField-3 SoC Flash Recovery]
+
+pci:v000015B3d0000021D*
+ ID_MODEL_FROM_DATABASE=MT43244 Family [BlueField-3 Secure Flash Recovery]
+
pci:v000015B3d0000024E*
ID_MODEL_FROM_DATABASE=MT53100 [Spectrum-2, Flash recovery mode]
pci:v000015B3d00000281*
ID_MODEL_FROM_DATABASE=NPS-600 Flash Recovery
-pci:v000015B3d00000538*
- ID_MODEL_FROM_DATABASE=MT2910 Family [ConnectX-7 Flash Recovery]
-
-pci:v000015B3d00000539*
- ID_MODEL_FROM_DATABASE=MT2910 Family [ConnectX-7 Secure Flash Recovery]
-
pci:v000015B3d00001002*
ID_MODEL_FROM_DATABASE=MT25400 Family [ConnectX-2 Virtual Function]
pci:v000015B3d00001978*
ID_MODEL_FROM_DATABASE=MT42822 Family [BlueField-2 SoC PCIe Bridge]
+pci:v000015B3d00001979*
+ ID_MODEL_FROM_DATABASE=MT2910 Family [ConnectX-7 PCIe Bridge]
+
+pci:v000015B3d0000197A*
+ ID_MODEL_FROM_DATABASE=MT43162 Family [BlueField-3 Lx SoC PCIe Bridge]
+
+pci:v000015B3d0000197B*
+ ID_MODEL_FROM_DATABASE=MT43244 Family [BlueField-3 SoC PCIe Bridge]
+
pci:v000015B3d00004117*
ID_MODEL_FROM_DATABASE=MT27712A0-FDCF-AE
pci:v000015B3d0000A2D6*
ID_MODEL_FROM_DATABASE=MT42822 BlueField-2 integrated ConnectX-6 Dx network controller
+pci:v000015B3d0000A2D7*
+ ID_MODEL_FROM_DATABASE=MT43162 BlueField-3 Lx SoC Crypto enabled
+
+pci:v000015B3d0000A2D8*
+ ID_MODEL_FROM_DATABASE=MT43162 BlueField-3 Lx SoC Crypto disabled
+
+pci:v000015B3d0000A2D9*
+ ID_MODEL_FROM_DATABASE=MT43162 BlueField-3 Lx integrated ConnectX-7 network controller
+
+pci:v000015B3d0000A2DA*
+ ID_MODEL_FROM_DATABASE=MT43244 BlueField-3 SoC Crypto enabled
+
+pci:v000015B3d0000A2DB*
+ ID_MODEL_FROM_DATABASE=MT43244 BlueField-3 SoC Crypto disabled
+
+pci:v000015B3d0000A2DC*
+ ID_MODEL_FROM_DATABASE=MT43244 BlueField-3 integrated ConnectX-7 network controller
+
pci:v000015B3d0000C2D2*
ID_MODEL_FROM_DATABASE=MT416842 BlueField SoC management interfac
pci:v000015B3d0000C2D3*
ID_MODEL_FROM_DATABASE=MT42822 BlueField-2 SoC Management Interface
+pci:v000015B3d0000C2D4*
+ ID_MODEL_FROM_DATABASE=MT43162 BlueField-3 Lx SoC Management Interface
+
+pci:v000015B3d0000C2D5*
+ ID_MODEL_FROM_DATABASE=MT43244 BlueField-3 SoC Management Interface
+
pci:v000015B3d0000C738*
ID_MODEL_FROM_DATABASE=MT51136
pci:v00001688d00001170*
ID_MODEL_FROM_DATABASE=WLAN 802.11b card
+pci:v0000168A*
+ ID_VENDOR_FROM_DATABASE=Utimaco IS GmbH
+
pci:v0000168C*
ID_VENDOR_FROM_DATABASE=Qualcomm Atheros
pci:v0000168Cd00000036*
ID_MODEL_FROM_DATABASE=QCA9565 / AR9565 Wireless Network Adapter
+pci:v0000168Cd00000036sv00001028sd0000020E*
+ ID_MODEL_FROM_DATABASE=QCA9565 / AR9565 Wireless Network Adapter (Vostro 3470)
+
pci:v0000168Cd00000037*
ID_MODEL_FROM_DATABASE=AR9485 Wireless Network Adapter
pci:v00001760d00000123*
ID_MODEL_FROM_DATABASE=PCT-7424 PCI card with standard counters
+pci:v00001760d00000141*
+ ID_MODEL_FROM_DATABASE=PCA7208AL - Analog Inputs/Outputs
+
+pci:v00001760d00000142*
+ ID_MODEL_FROM_DATABASE=PCA7208AS - Analog inputs/Outputs
+
+pci:v00001760d00000143*
+ ID_MODEL_FROM_DATABASE=PCA7408AL - Analog Inputs/Outputs
+
+pci:v00001760d00000144*
+ ID_MODEL_FROM_DATABASE=PCA7408AS - Analog Inputs/Outputs
+
pci:v00001760d00000214*
ID_MODEL_FROM_DATABASE=PCT-7424C (F0) PC card with standard counters
pci:v00001760d00000217*
ID_MODEL_FROM_DATABASE=PCT-7424E (F1) PC card with standard counters
+pci:v00001760d00000240*
+ ID_MODEL_FROM_DATABASE=PCA7428CL_F0 - analog Inputs
+
+pci:v00001760d00000241*
+ ID_MODEL_FROM_DATABASE=PCA7428CL_F1 - analog Inputs
+
+pci:v00001760d00000242*
+ ID_MODEL_FROM_DATABASE=PCA7428CS_F0 - Analog Inputs/Outputs non isolated
+
+pci:v00001760d00000243*
+ ID_MODEL_FROM_DATABASE=PCA7428CS_F1 - Analog Inputs/Outputs non isolated
+
+pci:v00001760d00000244*
+ ID_MODEL_FROM_DATABASE=PCA7428CE_F0 - Analog Inputs isolated
+
+pci:v00001760d00000245*
+ ID_MODEL_FROM_DATABASE=PCA7428CE_F1 - Analog Inputs isolated
+
pci:v00001760d00000303*
ID_MODEL_FROM_DATABASE=PCD-7006C Digital Input & Output PCI Card
+pci:v00001760d00000800*
+ ID_MODEL_FROM_DATABASE=PCD8006 - PCIe digital Inputs/Outputs
+
pci:v00001760d0000FF00*
ID_MODEL_FROM_DATABASE=CTU CAN FD PCIe Card
pci:v000017F3d00001031*
ID_MODEL_FROM_DATABASE=PCI/PCI-X to PCI-E Bridge
+pci:v000017F3d00001070*
+ ID_MODEL_FROM_DATABASE=CAN Bus Controller
+
+pci:v000017F3d00001331*
+ ID_MODEL_FROM_DATABASE=Motion Control Interface
+
+pci:v000017F3d00001930*
+ ID_MODEL_FROM_DATABASE=Hybrid Function Control Register
+
+pci:v000017F3d00002010*
+ ID_MODEL_FROM_DATABASE=RDC M2010 VGA-compatible graphics adapter
+
pci:v000017F3d00002012*
ID_MODEL_FROM_DATABASE=M2012/R3308 VGA-compatible graphics adapter
+pci:v000017F3d00002015*
+ ID_MODEL_FROM_DATABASE=RDC M2015 VGA-compatible graphics adapter
+
+pci:v000017F3d00006011*
+ ID_MODEL_FROM_DATABASE=R6011 ISA Bridge
+
+pci:v000017F3d00006013*
+ ID_MODEL_FROM_DATABASE=R6013 ISA Bridge
+
pci:v000017F3d00006020*
ID_MODEL_FROM_DATABASE=R6020 North Bridge
pci:v000017F3d00006021*
ID_MODEL_FROM_DATABASE=R6021 Host Bridge
+pci:v000017F3d00006023*
+ ID_MODEL_FROM_DATABASE=R6023 Host Bridge
+
+pci:v000017F3d00006025*
+ ID_MODEL_FROM_DATABASE=R6025 Host Bridge
+
+pci:v000017F3d00006026*
+ ID_MODEL_FROM_DATABASE=R6026 Host Bridge
+
pci:v000017F3d00006030*
ID_MODEL_FROM_DATABASE=R6030 ISA Bridge
pci:v000017F3d00006031*
ID_MODEL_FROM_DATABASE=R6031 ISA Bridge
+pci:v000017F3d00006035*
+ ID_MODEL_FROM_DATABASE=R6035 ISA Bridge
+
+pci:v000017F3d00006036*
+ ID_MODEL_FROM_DATABASE=R6036 ISA Bridge
+
pci:v000017F3d00006040*
ID_MODEL_FROM_DATABASE=R6040 MAC Controller
pci:v00001987d00005012*
ID_MODEL_FROM_DATABASE=E12 NVMe Controller
+pci:v00001987d00005013*
+ ID_MODEL_FROM_DATABASE=PS5013 E13 NVMe Controller
+
pci:v00001987d00005016*
ID_MODEL_FROM_DATABASE=E16 PCIe4 NVMe Controller
pci:v000019E5d00000200sv000019E5sd0000D13D*
ID_MODEL_FROM_DATABASE=Hi1822 Family (2*100GE) (Hi1822 SC371 (2*100GE))
+pci:v000019E5d00000200sv000019E5sd0000D147*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (2*100GE) (Hi1822 SP573 (2*100GE))
+
pci:v000019E5d00000202*
ID_MODEL_FROM_DATABASE=Hi1822 Family (2*32G FC)
+pci:v000019E5d00000202sv000019E5sd0000D149*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (2*32G FC) (Hi1822 SP528 (2*32G FC))
+
pci:v000019E5d00000202sv000019E5sd0000D302*
ID_MODEL_FROM_DATABASE=Hi1822 Family (2*32G FC) (Hi1822 SP521 (2*32G FC))
pci:v000019E5d00000203*
ID_MODEL_FROM_DATABASE=Hi1822 Family (2*16G FC)
+pci:v000019E5d00000203sv000019E5sd0000D148*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (2*16G FC) (Hi1822 SP527 (2*16G FC))
+
pci:v000019E5d00000203sv000019E5sd0000D301*
ID_MODEL_FROM_DATABASE=Hi1822 Family (2*16G FC) (Hi1822 SP520 (2*16G FC))
pci:v000019E5d00000206sv000019E5sd0000D13A*
ID_MODEL_FROM_DATABASE=Hi1822 Family (2*25GE) (Hi1822 SC381 (2*25GE))
+pci:v000019E5d00000206sv000019E5sd0000D145*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (2*25GE) (Hi1822 SP586 (2*25GE))
+
pci:v000019E5d00000210*
ID_MODEL_FROM_DATABASE=Hi1822 Family (4*25GE)
pci:v000019E5d00001822sv000019E5sd0000D141*
ID_MODEL_FROM_DATABASE=Hi1822 Family (4*25GE) (Hi1822 SP583 (4*25GE))
+pci:v000019E5d00001822sv000019E5sd0000D146*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (4*25GE) (Hi1822 SP585 (4*25GE))
+
pci:v000019E5d0000371E*
ID_MODEL_FROM_DATABASE=Hi1822 Family Virtual Bridge
pci:v000019E5d0000A221*
ID_MODEL_FROM_DATABASE=HNS GE/10GE/25GE Network Controller
+pci:v000019E5d0000A221sv000019E5sd00000454*
+ ID_MODEL_FROM_DATABASE=HNS GE/10GE/25GE Network Controller (TM280)
+
+pci:v000019E5d0000A221sv000019E5sd000004CC*
+ ID_MODEL_FROM_DATABASE=HNS GE/10GE/25GE Network Controller (TM210)
+
+pci:v000019E5d0000A221sv000019E5sd0000D14A*
+ ID_MODEL_FROM_DATABASE=HNS GE/10GE/25GE Network Controller (TM280 4*25G)
+
+pci:v000019E5d0000A221sv000019E5sd0000D14B*
+ ID_MODEL_FROM_DATABASE=HNS GE/10GE/25GE Network Controller (TM210 4*GE)
+
pci:v000019E5d0000A222*
ID_MODEL_FROM_DATABASE=HNS GE/10GE/25GE RDMA Network Controller
pci:v00001AF4d00001052*
ID_MODEL_FROM_DATABASE=Virtio input
+pci:v00001AF4d00001053*
+ ID_MODEL_FROM_DATABASE=Virtio socket
+
pci:v00001AF4d00001110*
ID_MODEL_FROM_DATABASE=Inter-VM shared memory
pci:v00001B6Fd00007023*
ID_MODEL_FROM_DATABASE=EJ168 USB 3.0 Host Controller
+pci:v00001B6Fd00007023sv00001458sd00005007*
+ ID_MODEL_FROM_DATABASE=EJ168 USB 3.0 Host Controller (GA-880GMA-USB3)
+
pci:v00001B6Fd00007052*
ID_MODEL_FROM_DATABASE=EJ188/EJ198 USB 3.0 Host Controller
pci:v00001BD4*
ID_VENDOR_FROM_DATABASE=Inspur Electronic Information Industry Co., Ltd.
+pci:v00001BD4d00000911*
+ ID_MODEL_FROM_DATABASE=Arria10_PCIe_F10A1150
+
pci:v00001BEE*
ID_VENDOR_FROM_DATABASE=IXXAT Automation GmbH
pci:v00001C1F*
ID_VENDOR_FROM_DATABASE=SoftLab-NSK
+pci:v00001C1Fd00000015*
+ ID_MODEL_FROM_DATABASE=FD842
+
+pci:v00001C1Fd00000019*
+ ID_MODEL_FROM_DATABASE=FD722
+
+pci:v00001C1Fd0000001A*
+ ID_MODEL_FROM_DATABASE=FD788
+
+pci:v00001C1Fd0000001B*
+ ID_MODEL_FROM_DATABASE=FD720
+
+pci:v00001C1Fd0000001C*
+ ID_MODEL_FROM_DATABASE=FD922
+
+pci:v00001C1Fd0000001D*
+ ID_MODEL_FROM_DATABASE=Vega
+
pci:v00001C28*
ID_VENDOR_FROM_DATABASE=Lite-On IT Corp. / Plextor
pci:v00001C2Cd0000A00F*
ID_MODEL_FROM_DATABASE=FB2CG Capture 2x40Gb [Savona]
+pci:v00001C2Cd0000A010*
+ ID_MODEL_FROM_DATABASE=FB2CGHH Capture 2x40Gb [Tivoli]
+
pci:v00001C2Cd0000A011*
ID_MODEL_FROM_DATABASE=FB2CG Capture 2x25Gb [Savona]
pci:v00001C2Cd0000A012*
ID_MODEL_FROM_DATABASE=FB2CG Capture 8x10Gb [Savona]
+pci:v00001C2Cd0000A013*
+ ID_MODEL_FROM_DATABASE=FB2CGHH Capture 2x25Gb [Tivoli]
+
+pci:v00001C2Cd0000A014*
+ ID_MODEL_FROM_DATABASE=FB2CGHH Capture 8x10Gb [Tivoli]
+
+pci:v00001C2Cd0000A015*
+ ID_MODEL_FROM_DATABASE=FB2CGHH Capture 2x100Gb [Tivoli]
+
pci:v00001C32*
ID_VENDOR_FROM_DATABASE=Highland Technology, Inc.
pci:v00001CD7d00000017*
ID_MODEL_FROM_DATABASE=PRO CAPTURE AIO 4K
+pci:v00001CD7d00000051*
+ ID_MODEL_FROM_DATABASE=Eco Capture Dual HDMI M.2
+
+pci:v00001CD7d00000052*
+ ID_MODEL_FROM_DATABASE=Eco Capture HDMI 4K M.2
+
+pci:v00001CD7d00000053*
+ ID_MODEL_FROM_DATABASE=Eco Capture Dual SDI M.2
+
+pci:v00001CD7d00000054*
+ ID_MODEL_FROM_DATABASE=Eco Capture Quad SDI M.2
+
pci:v00001CDD*
ID_VENDOR_FROM_DATABASE=secunet Security Networks AG
pci:v00001D6Ad00000001*
ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+pci:v00001D6Ad000000B1*
+ ID_MODEL_FROM_DATABASE=AQC100 10G Ethernet MAC controller [AQtion]
+
pci:v00001D6Ad000007B1*
ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
pci:v00001D95d00000002*
ID_MODEL_FROM_DATABASE=Colossus GC1 [S1]
+pci:v00001D97*
+ ID_VENDOR_FROM_DATABASE=Shenzhen Longsys Electronics Co., Ltd.
+
pci:v00001D9B*
ID_VENDOR_FROM_DATABASE=Facebook, Inc.
pci:v00001DD8d00001000sv00001DD8sd00004002*
ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (Naples 25Gb 2-port SFP28 x8 4GB)
+pci:v00001DD8d00001000sv00001DD8sd00004008*
+ ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+
pci:v00001DD8d00001001*
ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port
pci:v00001DD8d00001001sv00001DD8sd00004002*
ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (Naples 25Gb 2-port SFP28 x8 4GB)
+pci:v00001DD8d00001001sv00001DD8sd00004008*
+ ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+
pci:v00001DD8d00001002*
ID_MODEL_FROM_DATABASE=DSC Ethernet Controller
pci:v00001DD8d00001002sv00001DD8sd00004002*
ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (Naples 25Gb 2-port SFP28 x8 4GB)
+pci:v00001DD8d00001002sv00001DD8sd00004008*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+
pci:v00001DD8d00001003*
ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF
pci:v00001DD8d00001003sv00001DD8sd00004002*
ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (Naples 25Gb 2-port SFP28 x8 4GB)
+pci:v00001DD8d00001003sv00001DD8sd00004008*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+
pci:v00001DD8d00001004*
ID_MODEL_FROM_DATABASE=DSC Management Controller
pci:v00001DD8d00001004sv00001DD8sd00004002*
ID_MODEL_FROM_DATABASE=DSC Management Controller (Naples 25Gb 2-port SFP28 x8 4GB)
+pci:v00001DD8d00001004sv00001DD8sd00004008*
+ ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+
pci:v00001DD8d00001007*
ID_MODEL_FROM_DATABASE=DSC Storage Accelerator
pci:v00001DD8d00001007sv00001DD8sd00004002*
ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (Naples 25Gb 2-port SFP28 x8 4GB)
+pci:v00001DD8d00001007sv00001DD8sd00004008*
+ ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+
pci:v00001DE0*
ID_VENDOR_FROM_DATABASE=Groq
pci:v00001DFCd00001181*
ID_MODEL_FROM_DATABASE=TDM 8 Port E1/T1/J1 Adapter
+pci:v00001E0F*
+ ID_VENDOR_FROM_DATABASE=KIOXIA Corporation
+
+pci:v00001E0Fd00000007*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6
+
pci:v00001E17*
ID_VENDOR_FROM_DATABASE=Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
pci:v00001E6B*
ID_VENDOR_FROM_DATABASE=Axiado Corp.
+pci:v00001E85*
+ ID_VENDOR_FROM_DATABASE=Heitec AG
+
pci:v00001E89*
ID_VENDOR_FROM_DATABASE=ID Quantique SA
pci:v00001E94*
ID_VENDOR_FROM_DATABASE=Calian SED
+pci:v00001E95*
+ ID_VENDOR_FROM_DATABASE=Solid State Storage Technology Corporation
+
pci:v00001FC0*
ID_VENDOR_FROM_DATABASE=Ascom (Finland) Oy
pci:v00008086d000002E8*
ID_MODEL_FROM_DATABASE=Serial IO I2C Host Controller
+pci:v00008086d000002E9*
+ ID_MODEL_FROM_DATABASE=Comet Lake Serial IO I2C Host Controller
+
pci:v00008086d000002F0*
ID_MODEL_FROM_DATABASE=Wireless-AC 9462
pci:v00008086d0000061F*
ID_MODEL_FROM_DATABASE=80303 I/O Processor
+pci:v00008086d0000068D*
+ ID_MODEL_FROM_DATABASE=Comet Lake LPC Controller
+
+pci:v00008086d000006A3*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH SMBus Controller
+
+pci:v00008086d000006A4*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH SPI Controller
+
+pci:v00008086d000006A8*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Serial IO UART Host Controller #0
+
+pci:v00008086d000006A9*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Serial IO UART Host Controller #1
+
+pci:v00008086d000006AA*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Serial IO SPI Controller #0
+
+pci:v00008086d000006AB*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Serial IO SPI Controller #1
+
+pci:v00008086d000006AC*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #21
+
+pci:v00008086d000006B0*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #9
+
+pci:v00008086d000006C0*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #17
+
+pci:v00008086d000006C8*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH cAVS
+
+pci:v00008086d000006E0*
+ ID_MODEL_FROM_DATABASE=Comet Lake HECI Controller
+
+pci:v00008086d000006E8*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Serial IO I2C Controller #0
+
+pci:v00008086d000006E9*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Serial IO I2C Controller #1
+
+pci:v00008086d000006EA*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Serial IO I2C Controller #2
+
+pci:v00008086d000006EB*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Serial IO I2C Controller #3
+
+pci:v00008086d000006ED*
+ ID_MODEL_FROM_DATABASE=Comet Lake USB 3.1 xHCI Host Controller
+
+pci:v00008086d000006EF*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Shared SRAM
+
+pci:v00008086d000006F0*
+ ID_MODEL_FROM_DATABASE=Wi-Fi 6 AX201
+
+pci:v00008086d000006F9*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Thermal Controller
+
+pci:v00008086d000006FB*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH Serial IO SPI Controller #2
+
pci:v00008086d00000700*
ID_MODEL_FROM_DATABASE=CE Media Processor A/V Bridge
pci:v00008086d00000A55sv00001028sd00001FE9*
ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (Express Flash NVMe 4.0TB HHHL AIC (P4600))
+pci:v00008086d00000B60*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller]
+
+pci:v00008086d00000B60sv00001028sd00002060*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta 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))
+
+pci:v00008086d00000B60sv00001028sd00002062*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta 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))
+
+pci:v00008086d00000B60sv00001028sd00002065*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta 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))
+
+pci:v00008086d00000B60sv00001028sd0000209E*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta 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))
+
+pci:v00008086d00000B60sv00001028sd00002100*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta 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))
+
+pci:v00008086d00000B60sv00001028sd00002103*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta 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))
+
pci:v00008086d00000BE0*
ID_MODEL_FROM_DATABASE=Atom Processor D2xxx/N2xxx Integrated Graphics Controller
pci:v00008086d00000D58sv00008086sd00000001*
ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+pci:v00008086d00000D9F*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller (2) I225-IT
+
pci:v00008086d00000E00*
ID_MODEL_FROM_DATABASE=Xeon E7 v2/Xeon E5 v2/Core i7 DMI2
pci:v00008086d00001572sv000019E5sd0000D11C*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet 2-port X710 10Gb SFP+ Adapter SP330)
+pci:v00008086d00001572sv00001BD4sd00000056*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Network Adapter X710-BM2 for OCP NIC 3.0)
+
pci:v00008086d00001572sv00008086sd00000000*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Converged Network Adapter X710)
pci:v00008086d0000158Bsv00008086sd0000000A*
ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet 25G 2P XXV710 OCP)
+pci:v00008086d0000158Bsv00008086sd0000000C*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet Network Adapter XXV710-DA2 for OCP 3.0)
+
pci:v00008086d0000158Bsv00008086sd00004001*
ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet Network Adapter XXV710-2)
pci:v00008086d00001592*
ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP
+pci:v00008086d00001592sv00001137sd000002BF*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (E810CQDA2 2x100 GbE QSFP28 PCIe NIC)
+
pci:v00008086d00001592sv00008086sd00000002*
ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q2)
pci:v00008086d00001592sv00008086sd00000009*
ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q1)
+pci:v00008086d00001592sv00008086sd0000000A*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q1 for OCP)
+
pci:v00008086d00001593*
ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP
+pci:v00008086d00001593sv00001137sd000002C3*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC)
+
pci:v00008086d00001593sv00008086sd00000002*
ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-L-2)
pci:v00008086d00001593sv00008086sd00000009*
ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-XXV-2 for OCP 2.0)
+pci:v00008086d00001599*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for backplane
+
+pci:v00008086d0000159A*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for QSFP
+
+pci:v00008086d0000159B*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP
+
+pci:v00008086d0000159Bsv00001137sd000002BE*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (E810XXVDA2 2x25/10 GbE SFP28 PCIe NIC)
+
+pci:v00008086d0000159Bsv00001BD4sd00000057*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXVAM2)
+
+pci:v00008086d0000159Bsv00001BD4sd00000058*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXVAM2 for OCP 3.0)
+
+pci:v00008086d0000159Bsv00008086sd00000001*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet 25G 2P E810-XXV OCP)
+
+pci:v00008086d0000159Bsv00008086sd00000002*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet 25G 2P E810-XXV Adapter)
+
+pci:v00008086d0000159Bsv00008086sd00000003*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXV-2)
+
+pci:v00008086d0000159Bsv00008086sd00000005*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXV-2 for OCP 3.0)
+
+pci:v00008086d0000159Bsv00008086sd00004001*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXV-2)
+
+pci:v00008086d0000159Bsv00008086sd00004002*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXV-2 for OCP 3.0)
+
pci:v00008086d000015A0*
ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM
pci:v00008086d000015F0*
ID_MODEL_FROM_DATABASE=JHL7540 Thunderbolt 3 USB Controller [Titan Ridge DD 2018]
+pci:v00008086d000015F2*
+ ID_MODEL_FROM_DATABASE=Intel(R) Ethernet Controller I225-LM
+
+pci:v00008086d000015F3*
+ ID_MODEL_FROM_DATABASE=Intel(R) Ethernet Controller I225-V
+
pci:v00008086d000015F4*
ID_MODEL_FROM_DATABASE=Ethernet Connection (15) I219-LM
pci:v00008086d00001903*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem
+pci:v00008086d00001903sv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (Latitude 7275 tablet)
+
pci:v00008086d00001903sv00001028sd000006DC*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (Latitude E7470)
pci:v00008086d0000190C*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
+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:v00008086d0000190F*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
pci:v00008086d00001911*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model
+pci:v00008086d00001911sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model (Vostro 3470)
+
pci:v00008086d00001911sv000017AAsd00002247*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model (ThinkPad T570)
pci:v00008086d00001919*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Imaging Unit
+pci:v00008086d00001919sv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Imaging Unit (Latitude 7275 tablet)
+
pci:v00008086d0000191B*
ID_MODEL_FROM_DATABASE=HD Graphics 530
pci:v00008086d0000191E*
ID_MODEL_FROM_DATABASE=HD Graphics 515
+pci:v00008086d0000191Esv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=HD Graphics 515 (Latitude 7275 tablet)
+
pci:v00008086d0000191F*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
pci:v00008086d00003166*
ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 3165 Plus Bluetooth
+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
pci:v00008086d00003197*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor PCI-default ISA-bridge
+pci:v00008086d00003198*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor High Definition Audio
+
+pci:v00008086d00003198sv000017AAsd0000380B*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor High Definition Audio (V130-15IGM Laptop (Lenovo) - Type 81HL)
+
pci:v00008086d0000319A*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Trusted Execution Engine Interface
pci:v00008086d00003E92*
ID_MODEL_FROM_DATABASE=UHD Graphics 630 (Desktop)
+pci:v00008086d00003E92sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=UHD Graphics 630 (Desktop) (Vostro 3470)
+
pci:v00008086d00003E93*
ID_MODEL_FROM_DATABASE=UHD Graphics 610
pci:v00008086d00003EC2*
ID_MODEL_FROM_DATABASE=8th Gen Core Processor Host Bridge/DRAM Registers
+pci:v00008086d00003EC2sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=8th Gen Core Processor Host Bridge/DRAM Registers (Vostro 3470)
+
pci:v00008086d00003EC2sv00001043sd00008694*
ID_MODEL_FROM_DATABASE=8th Gen Core Processor Host Bridge/DRAM Registers (PRIME H310M-D)
pci:v00008086d0000530D*
ID_MODEL_FROM_DATABASE=80310 (IOP) IO Processor
+pci:v00008086d00005502*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller (2) I225-LMvP
+
pci:v00008086d00005845*
ID_MODEL_FROM_DATABASE=QEMU NVM Express Controller
pci:v00008086d00008A23*
ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 PCI Express Root Port #3
+pci:v00008086d00008A51*
+ ID_MODEL_FROM_DATABASE=Intel Iris Plus Graphics G7 (Ice Lake)
+
pci:v00008086d00008A52*
ID_MODEL_FROM_DATABASE=Iris Plus Graphics G7
+pci:v00008086d00008A56*
+ ID_MODEL_FROM_DATABASE=Iris Plus Graphics G1 (Ice Lake)
+
+pci:v00008086d00008A5A*
+ ID_MODEL_FROM_DATABASE=Iris Plus Graphics G4 (Ice Lake)
+
+pci:v00008086d00008A5C*
+ ID_MODEL_FROM_DATABASE=Intel Iris Plus Graphics G4 (Ice Lake)
+
pci:v00008086d00008C00*
ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 4-port SATA Controller 1 [IDE mode]
pci:v00008086d00008C10*
ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1
+pci:v00008086d00008C10sv00001043sd00008534*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1 (ASUS H81I-PLUS)
+
pci:v00008086d00008C10sv000017AAsd0000220E*
ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1 (ThinkPad T440p)
pci:v00008086d000096A1*
ID_MODEL_FROM_DATABASE=Integrated RAID
+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:v00008086d00009A13*
+ 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:v00008086d00009A1B*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #0
+
+pci:v00008086d00009A1D*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #1
+
+pci:v00008086d00009A23*
+ 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
+
+pci:v00008086d00009A27*
+ 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
+
+pci:v00008086d00009A33*
+ ID_MODEL_FROM_DATABASE=Tiger Lake Trace Hub
+
+pci:v00008086d00009A49*
+ ID_MODEL_FROM_DATABASE=UHD Graphics
+
pci:v00008086d00009B41*
ID_MODEL_FROM_DATABASE=UHD Graphics
+pci:v00008086d00009B44*
+ ID_MODEL_FROM_DATABASE=10th Gen Core Processor Host Bridge/DRAM Registers
+
+pci:v00008086d00009B54*
+ 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
+
pci:v00008086d00009C00*
ID_MODEL_FROM_DATABASE=8 Series SATA Controller 1 [IDE mode]
pci:v00008086d00009D21sv00001025sd0000115F*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC (Acer Aspire E5-575G)
+pci:v00008086d00009D21sv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC (Latitude 7275 tablet)
+
pci:v00008086d00009D21sv00001028sd000006DC*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC (Latitude E7470)
pci:v00008086d00009D23sv00001025sd0000115F*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP SMBus (Acer Aspire E5-575G)
+pci:v00008086d00009D23sv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP SMBus (Latitude 7275 tablet)
+
pci:v00008086d00009D23sv00001028sd000006DC*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP SMBus (Latitude E7470)
pci:v00008086d00009D2Fsv00001025sd0000115F*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP USB 3.0 xHCI Controller (Acer Aspire E5-575G)
+pci:v00008086d00009D2Fsv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP USB 3.0 xHCI Controller (Latitude 7275 tablet)
+
pci:v00008086d00009D2Fsv00001028sd000006DC*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP USB 3.0 xHCI Controller (Latitude E7470)
pci:v00008086d00009D31sv00001025sd0000115F*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Thermal subsystem (Acer Aspire E5-575G)
+pci:v00008086d00009D31sv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Thermal subsystem (Latitude 7275 tablet)
+
pci:v00008086d00009D31sv00001028sd000006DC*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Thermal subsystem (Latitude E7470)
pci:v00008086d00009D31sv000017AAsd0000382A*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Thermal subsystem (B51-80 Laptop)
+pci:v00008086d00009D32*
+ ID_MODEL_FROM_DATABASE=CSI-2 Host Controller
+
+pci:v00008086d00009D32sv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=CSI-2 Host Controller (Latitude 7275 tablet)
+
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:v00008086d00009D3A*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1
pci:v00008086d00009D3Asv00001025sd0000115F*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1 (Acer Aspire E5-575G)
+pci:v00008086d00009D3Asv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1 (Latitude 7275 tablet)
+
pci:v00008086d00009D3Asv00001028sd000006DC*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1 (Latitude E7470)
pci:v00008086d00009D43sv000017AAsd0000382A*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller (B51-80 Laptop)
+pci:v00008086d00009D46*
+ ID_MODEL_FROM_DATABASE=LPC/eSPI Controller
+
+pci:v00008086d00009D46sv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=LPC/eSPI Controller (Latitude 7275 tablet)
+
pci:v00008086d00009D48*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller
pci:v00008086d00009D60sv00001025sd0000115F*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #0 (Acer Aspire E5-575G)
+pci:v00008086d00009D60sv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #0 (Latitude 7275 tablet)
+
pci:v00008086d00009D60sv00001028sd000006F3*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #0 (Latitude 3570)
pci:v00008086d00009D61*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #1
+pci:v00008086d00009D61sv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #1 (Latitude 7275 tablet)
+
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:v00008086d00009D63*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #3
pci:v00008086d00009D70*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio
+pci:v00008086d00009D70sv00001028sd000006D6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio (Latitude 7275 tablet)
+
pci:v00008086d00009D70sv00001028sd000006DC*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio (Latitude E7470)
pci:v00008086d00009DA4*
ID_MODEL_FROM_DATABASE=Cannon Point-LP SPI Controller
+pci:v00008086d00009DA8*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP Serial IO UART Controller #2
+
+pci:v00008086d00009DAA*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP Serial IO SPI Controller
+
pci:v00008086d00009DB0*
ID_MODEL_FROM_DATABASE=Cannon Point-LP PCI Express Root Port #9
pci:v00008086d0000A013*
ID_MODEL_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx CHAPS counter
+pci:v00008086d0000A082*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP LPC Controller
+
+pci:v00008086d0000A0A3*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP SMBus Controller
+
+pci:v00008086d0000A0A4*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP SPI Controller
+
+pci:v00008086d0000A0A6*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Trace Hub
+
+pci:v00008086d0000A0A8*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Serial IO UART Controller #0
+
+pci:v00008086d0000A0A9*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Serial IO UART Controller #1
+
+pci:v00008086d0000A0AB*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Serial IO SPI Controller #1
+
+pci:v00008086d0000A0B0*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP PCI Express Root Port #9
+
+pci:v00008086d0000A0BF*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP PCI Express Root Port #8
+
+pci:v00008086d0000A0C5*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Serial IO I2C Controller #4
+
+pci:v00008086d0000A0C6*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Serial IO I2C Controller #5
+
+pci:v00008086d0000A0C8*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Smart Sound Technology Audio Controller
+
+pci:v00008086d0000A0E0*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Management Engine Interface
+
+pci:v00008086d0000A0E8*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Serial IO I2C Controller #0
+
+pci:v00008086d0000A0E9*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Serial IO I2C Controller #1
+
+pci:v00008086d0000A0EA*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Serial IO I2C Controller #2
+
+pci:v00008086d0000A0EB*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Serial IO I2C Controller #3
+
+pci:v00008086d0000A0ED*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP USB 3.2 Gen 2x1 xHCI Host Controller
+
+pci:v00008086d0000A0EF*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Shared SRAM
+
+pci:v00008086d0000A0F0*
+ ID_MODEL_FROM_DATABASE=Wi-Fi 6 AX201
+
+pci:v00008086d0000A0FC*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Integrated Sensor Hub
+
pci:v00008086d0000A102*
ID_MODEL_FROM_DATABASE=Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode]
pci:v00008086d0000A304*
ID_MODEL_FROM_DATABASE=H370 Chipset LPC/eSPI Controller
+pci:v00008086d0000A304sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=H370 Chipset LPC/eSPI Controller (Vostro 3470)
+
pci:v00008086d0000A305*
ID_MODEL_FROM_DATABASE=Z390 Chipset LPC/eSPI Controller
pci:v00008086d0000A30C*
ID_MODEL_FROM_DATABASE=QM370 Chipset LPC/eSPI Controller
+pci:v00008086d0000A30D*
+ ID_MODEL_FROM_DATABASE=HM470 Chipset LPC/eSPI Controller
+
+pci:v00008086d0000A30E*
+ ID_MODEL_FROM_DATABASE=Cannon Lake LPC Controller
+
pci:v00008086d0000A323*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH SMBus Controller
+pci:v00008086d0000A323sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH SMBus Controller (Vostro 3470)
+
pci:v00008086d0000A324*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH SPI Controller
+pci:v00008086d0000A324sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH SPI Controller (Vostro 3470)
+
pci:v00008086d0000A328*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH Serial IO UART Host Controller
pci:v00008086d0000A348*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH cAVS
+pci:v00008086d0000A348sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH cAVS (Vostro 3470)
+
pci:v00008086d0000A352*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH SATA AHCI Controller
+pci:v00008086d0000A352sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH SATA AHCI Controller (Vostro 3470)
+
pci:v00008086d0000A353*
ID_MODEL_FROM_DATABASE=Cannon Lake Mobile PCH SATA AHCI Controller
pci:v00008086d0000A360*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH HECI Controller
+pci:v00008086d0000A360sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH HECI Controller (Vostro 3470)
+
pci:v00008086d0000A363*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH Active Management Technology - SOL
pci:v00008086d0000A36D*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH USB 3.1 xHCI Host Controller
+pci:v00008086d0000A36Dsv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH USB 3.1 xHCI Host Controller (Vostro 3470)
+
pci:v00008086d0000A36F*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH Shared SRAM
pci:v00008086d0000A379*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH Thermal Controller
+pci:v00008086d0000A379sv00001028sd00000869*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH Thermal Controller (Vostro 3470)
+
pci:v00008086d0000A620*
ID_MODEL_FROM_DATABASE=6400/6402 Advanced Memory Buffer (AMB)
pci:v00009902d00000003*
ID_MODEL_FROM_DATABASE=SG1010 Starfabric Switch and PCI Bridge
+pci:v00009D32*
+ ID_VENDOR_FROM_DATABASE=Beijing Starblaze Technology Co. Ltd.
+
+pci:v00009D32d00000000*
+ ID_MODEL_FROM_DATABASE=STAR1000 PCIe NVMe SSD Controller
+
+pci:v00009D32d00001001*
+ ID_MODEL_FROM_DATABASE=STAR1000P PCIe NVMe SSD Controller
+
+pci:v00009D32d00001201*
+ ID_MODEL_FROM_DATABASE=STAR1200C NVMe SSD
+
+pci:v00009D32d00001202*
+ ID_MODEL_FROM_DATABASE=STAR1200I NVMe SSD
+
+pci:v00009D32d00001203*
+ ID_MODEL_FROM_DATABASE=STAR1200L NVMe SSD
+
+pci:v00009D32d00001204*
+ ID_MODEL_FROM_DATABASE=STAR1200E NVMe SSD
+
pci:v0000A0A0*
ID_VENDOR_FROM_DATABASE=AOPEN Inc.
usb:v0002*
ID_VENDOR_FROM_DATABASE=Ingram
+usb:v0002p0002*
+ ID_MODEL_FROM_DATABASE=passport00
+
usb:v0003*
ID_VENDOR_FROM_DATABASE=Club Mac
ID_MODEL_FROM_DATABASE=Mayflash GameCube Controller
usb:v0080*
- ID_VENDOR_FROM_DATABASE=Assmann Electronic GmbH
+ ID_VENDOR_FROM_DATABASE=Unknown
usb:v0080pA001*
- ID_MODEL_FROM_DATABASE=Digitus DA-71114 SATA
+ ID_MODEL_FROM_DATABASE=JMS578 based SATA bridge
usb:v0085*
ID_VENDOR_FROM_DATABASE=Boeye Technology Co., Ltd.
usb:v03F0p2424*
ID_MODEL_FROM_DATABASE=LP1965 19" Monitor Hub
+usb:v03F0p2441*
+ ID_MODEL_FROM_DATABASE=Prime G2 [2AP18AA]
+
usb:v03F0p2502*
ID_MODEL_FROM_DATABASE=PhotoSmart 7700 series
usb:v03F0p3517*
ID_MODEL_FROM_DATABASE=LaserJet 3390
+usb:v03F0p354A*
+ ID_MODEL_FROM_DATABASE=Slim Keyboard
+
usb:v03F0p3602*
ID_MODEL_FROM_DATABASE=PhotoSmart 1315
usb:v03F0p3F11*
ID_MODEL_FROM_DATABASE=PSC-1315/PSC-1317
+usb:v03F0p3F17*
+ ID_MODEL_FROM_DATABASE=Laserjet P1505
+
usb:v03F0p4002*
ID_MODEL_FROM_DATABASE=PhotoSmart 635/715/720/735/935/E337 (storage)
usb:v03F0p7A04*
ID_MODEL_FROM_DATABASE=DeskJet D2460
+usb:v03F0p7A11*
+ ID_MODEL_FROM_DATABASE=Photosmart B109
+
usb:v03F0p7A17*
ID_MODEL_FROM_DATABASE=LaserJet M3027 MFP
usb:v0403p6015*
ID_MODEL_FROM_DATABASE=Bridge(I2C/SPI/UART/FIFO)
+usb:v0403p601F*
+ ID_MODEL_FROM_DATABASE=Myriad-RF LimeSDR-Mini
+
usb:v0403p6F70*
ID_MODEL_FROM_DATABASE=HB-RF-USB
usb:v0408p3001*
ID_MODEL_FROM_DATABASE=Optical Touch Screen
+usb:v0408p3008*
+ ID_MODEL_FROM_DATABASE=Optical Touch Screen
+
usb:v0408pA060*
ID_MODEL_FROM_DATABASE=HD Webcam
usb:v0416p5011*
ID_MODEL_FROM_DATABASE=Virtual Com Port
+usb:v0416p511B*
+ ID_MODEL_FROM_DATABASE=Nuvoton Nu-Link1 ICE
+
+usb:v0416p511C*
+ ID_MODEL_FROM_DATABASE=Nuvoton Nu-Link1 ICE
+
+usb:v0416p511D*
+ ID_MODEL_FROM_DATABASE=Nuvoton Nu-Link1 ICE/VCOM
+
+usb:v0416p511E*
+ ID_MODEL_FROM_DATABASE=Nuvoton Nu-Link1 MSC/VCOM
+
+usb:v0416p5200*
+ ID_MODEL_FROM_DATABASE=Nuvoton Nu-Link2-ME ICE/MSC/VCOM
+
+usb:v0416p5201*
+ ID_MODEL_FROM_DATABASE=Nuvoton Nu-Link2-Pro ICE/MSC/VCOM
+
+usb:v0416p5210*
+ ID_MODEL_FROM_DATABASE=Nuvoton Nu-Link2 MSC FW UPGRADE
+
+usb:v0416p5211*
+ ID_MODEL_FROM_DATABASE=Nuvoton Nu-Link2 HID FW UPGRADE
+
usb:v0416p5518*
ID_MODEL_FROM_DATABASE=4-Port Hub
usb:v0424p2807*
ID_MODEL_FROM_DATABASE=Hub
+usb:v0424p3FC7*
+ ID_MODEL_FROM_DATABASE=RME Babyface audio system
+
usb:v0424p3FCC*
ID_MODEL_FROM_DATABASE=RME MADIface
usb:v043Ep3004*
ID_MODEL_FROM_DATABASE=TWFM-B003D 802.11abgn Wireless Module [Broadcom BCM43236B]
+usb:v043Ep3009*
+ ID_MODEL_FROM_DATABASE=VC400
+
usb:v043Ep3101*
ID_MODEL_FROM_DATABASE=AN-WF500 802.11abgn + BT Wireless Adapter [Broadcom BCM43242]
usb:v044FpB315*
ID_MODEL_FROM_DATABASE=Firestorm Dual Analog 3
+usb:v044FpB320*
+ ID_MODEL_FROM_DATABASE=Dual Trigger gamepad PC/PS2 2.0
+
usb:v044FpB323*
ID_MODEL_FROM_DATABASE=Dual Trigger 3-in-1 (PC Mode)
usb:v0451p2F90*
ID_MODEL_FROM_DATABASE=SM-USB-DIG
+usb:v0451p3200*
+ ID_MODEL_FROM_DATABASE=TUSB3200 Boot Loader
+
usb:v0451p3410*
ID_MODEL_FROM_DATABASE=TUSB3410 Microcontroller
ID_MODEL_FROM_DATABASE=Data Collection Sled [Nspire Lab Cradle, Nspire Datatracker Cradle]
usb:v0451pE01E*
- ID_MODEL_FROM_DATABASE=Nspire\99 CX Navigator\99 Access Point
+ ID_MODEL_FROM_DATABASE=Nspire CX Navigator Access Point
usb:v0451pE01F*
ID_MODEL_FROM_DATABASE=Python Adapter (firmware install mode)
usb:v0458p0087*
ID_MODEL_FROM_DATABASE=Ergo 525V Laser Mouse
+usb:v0458p0088*
+ ID_MODEL_FROM_DATABASE=Genius Traveler 515 Laser
+
usb:v0458p0089*
ID_MODEL_FROM_DATABASE=Genius Traveler 350
usb:v045Ap503F*
ID_MODEL_FROM_DATABASE=Cali256 MP3 Player
+usb:v045Ap5042*
+ ID_MODEL_FROM_DATABASE=Rio Forge
+
usb:v045Ap5202*
ID_MODEL_FROM_DATABASE=Rio Riot MP3 Player
ID_MODEL_FROM_DATABASE=Wired Keyboard 200
usb:v045Ep07C6*
- ID_MODEL_FROM_DATABASE=RTL8153 GigE [Surface Dock Ethernet]
+ ID_MODEL_FROM_DATABASE=RTL8153 GigE [Surface Ethernet Adapter]
usb:v045Ep07CA*
ID_MODEL_FROM_DATABASE=Surface Pro 3 Docking Station Audio Device
usb:v045Ep07FD*
ID_MODEL_FROM_DATABASE=Nano Transceiver 1.1
+usb:v045Ep0800*
+ ID_MODEL_FROM_DATABASE=Wireless keyboard (All-in-One-Media)
+
usb:v045Ep0810*
ID_MODEL_FROM_DATABASE=LifeCam HD-3000
+usb:v045Ep0823*
+ ID_MODEL_FROM_DATABASE=Classic IntelliMouse
+
usb:v045Ep0900*
ID_MODEL_FROM_DATABASE=Surface Dock Hub
usb:v045Ep091A*
ID_MODEL_FROM_DATABASE=Hub
+usb:v045Ep0927*
+ ID_MODEL_FROM_DATABASE=RTL8153B GigE [Surface Ethernet Adapter]
+
+usb:v045Ep0955*
+ ID_MODEL_FROM_DATABASE=Hub
+
+usb:v045Ep0957*
+ ID_MODEL_FROM_DATABASE=Hub
+
+usb:v045Ep09A0*
+ ID_MODEL_FROM_DATABASE=RTL8153B GigE [Surface Ethernet Adapter]
+
usb:v045Ep09C0*
ID_MODEL_FROM_DATABASE=Surface Type Cover
usb:v0461p4E04*
ID_MODEL_FROM_DATABASE=Lenovo Keyboard KB1021
+usb:v0461p4E22*
+ ID_MODEL_FROM_DATABASE=Dell Mouse, 2 Buttons, Modell: MS111-P
+
usb:v0461p4E6F*
ID_MODEL_FROM_DATABASE=Acer Wired Keyboard Model KBAY211
usb:v046Dp0A0C*
ID_MODEL_FROM_DATABASE=Clear Chat Comfort USB Headset
+usb:v046Dp0A10*
+ ID_MODEL_FROM_DATABASE=V10 Notebook Speakers
+
usb:v046Dp0A13*
ID_MODEL_FROM_DATABASE=Z-5 Speakers
usb:v046DpC084*
ID_MODEL_FROM_DATABASE=G203 Gaming Mouse
+usb:v046DpC08B*
+ ID_MODEL_FROM_DATABASE=G502 SE HERO Gaming Mouse
+
usb:v046DpC101*
ID_MODEL_FROM_DATABASE=UltraX Media Remote
usb:v046DpC24E*
ID_MODEL_FROM_DATABASE=G500s Laser Gaming Mouse
+usb:v046DpC24F*
+ ID_MODEL_FROM_DATABASE=G29 Driving Force Racing Wheel [PS3]
+
+usb:v046DpC260*
+ ID_MODEL_FROM_DATABASE=G29 Driving Force Racing Wheel [PS4]
+
usb:v046DpC281*
ID_MODEL_FROM_DATABASE=WingMan Force
usb:v0471p262C*
ID_MODEL_FROM_DATABASE=SPC230NC Webcam
+usb:v0471p2721*
+ ID_MODEL_FROM_DATABASE=PTA 317 TV Camera
+
usb:v0471p485D*
ID_MODEL_FROM_DATABASE=Senselock SenseIV v2.x
usb:v047Fp4254*
ID_MODEL_FROM_DATABASE=BUA-100 Bluetooth Adapter
+usb:v047FpAA05*
+ ID_MODEL_FROM_DATABASE=DA45
+
usb:v047FpAC01*
ID_MODEL_FROM_DATABASE=Savi 7xx
usb:v048Dp1345*
ID_MODEL_FROM_DATABASE=Multi Cardreader
+usb:v048Dp8297*
+ ID_MODEL_FROM_DATABASE=IT8297 RGB LED Controller
+
usb:v048Dp9006*
ID_MODEL_FROM_DATABASE=IT9135 BDA Afatech DVB-T HDTV Dongle
usb:v04A9p2737*
ID_MODEL_FROM_DATABASE=MF4410
+usb:v04A9p2742*
+ ID_MODEL_FROM_DATABASE=imageRUNNER1133 series
+
usb:v04A9p2771*
ID_MODEL_FROM_DATABASE=LBP6020
usb:v04B4p0060*
ID_MODEL_FROM_DATABASE=Wireless optical mouse
+usb:v04B4p00F3*
+ ID_MODEL_FROM_DATABASE=FX3 micro-controller (DFU mode)
+
usb:v04B4p0100*
ID_MODEL_FROM_DATABASE=Cino FuzzyScan F760-B
usb:v04B4pF232*
ID_MODEL_FROM_DATABASE=Mono embedded computer
+usb:v04B4pFD10*
+ ID_MODEL_FROM_DATABASE=Gembird MSIS-PM
+
usb:v04B4pFD13*
- ID_MODEL_FROM_DATABASE=Programmable power socket
+ ID_MODEL_FROM_DATABASE=Energenie EG-PMS
+
+usb:v04B4pFD15*
+ ID_MODEL_FROM_DATABASE=Energenie EG-PMS2
usb:v04B5*
ID_VENDOR_FROM_DATABASE=ROHM LSI Systems USA, LLC
ID_MODEL_FROM_DATABASE=Perfection V800 Photo
usb:v04B8p0202*
- ID_MODEL_FROM_DATABASE=Receipt Printer M129C/TM-T70
+ ID_MODEL_FROM_DATABASE=Interface Card UB-U05 for Thermal Receipt Printers [M129C/TM-T70/TM-T88IV]
usb:v04B8p0401*
ID_MODEL_FROM_DATABASE=CP 800 Digital Camera
ID_MODEL_FROM_DATABASE=PX-402A [Stylus SX115/Stylus NX110 Series]
usb:v04B8p084F*
- ID_MODEL_FROM_DATABASE=ME OFFICE 510
+ ID_MODEL_FROM_DATABASE=Multifunctional Printer Scanner [ME Office 510 / Epson Stylus SX215]
usb:v04B8p0850*
ID_MODEL_FROM_DATABASE=EP-702A [Stylus Photo PX650/TX650 Series]
usb:v04B8p0893*
ID_MODEL_FROM_DATABASE=EP-774A
+usb:v04B8p0E03*
+ ID_MODEL_FROM_DATABASE=Thermal Receipt Printer [TM-T20]
+
usb:v04B8p1114*
ID_MODEL_FROM_DATABASE=XP-440 [Expression Home Small-in-One Printer]
usb:v04BBp0101*
ID_MODEL_FROM_DATABASE=USB2-IDE/ATAPI Bridge Adapter
+usb:v04BBp014A*
+ ID_MODEL_FROM_DATABASE=HDCL-UT
+
usb:v04BBp0201*
ID_MODEL_FROM_DATABASE=USB2-IDE/ATAPI Bridge Adapter
usb:v04CA*
ID_VENDOR_FROM_DATABASE=Lite-On Technology Corp.
+usb:v04CAp0020*
+ ID_MODEL_FROM_DATABASE=USB Keyboard
+
usb:v04CAp004B*
ID_MODEL_FROM_DATABASE=Keyboard
usb:v04CAp004F*
ID_MODEL_FROM_DATABASE=SK-9020 keyboard
+usb:v04CAp008A*
+ ID_MODEL_FROM_DATABASE=Acer Wired Mouse Model SM-9023
+
usb:v04CAp1766*
ID_MODEL_FROM_DATABASE=HID Monitor Controls
usb:v04CAp3014*
ID_MODEL_FROM_DATABASE=Qualcomm Atheros Bluetooth
+usb:v04CAp3015*
+ ID_MODEL_FROM_DATABASE=Qualcomm Atheros QCA9377 Bluetooth
+
usb:v04CAp7022*
ID_MODEL_FROM_DATABASE=HP HD Webcam
usb:v04D8p9004*
ID_MODEL_FROM_DATABASE=Microchip REAL ICE
+usb:v04D8p9009*
+ ID_MODEL_FROM_DATABASE=ICD3
+
usb:v04D8p900A*
ID_MODEL_FROM_DATABASE=PICkit3
usb:v04D8pE11C*
ID_MODEL_FROM_DATABASE=TL866CS EEPROM Programmer [MiniPRO]
+usb:v04D8pED16*
+ ID_MODEL_FROM_DATABASE=BeamiRC 2.0 CNC remote controller analoge
+
usb:v04D8pEDB4*
ID_MODEL_FROM_DATABASE=micro PLC (ATSAMD51G19A) [Black Brix ECU II]
usb:v04D9*
ID_VENDOR_FROM_DATABASE=Holtek Semiconductor, Inc.
+usb:v04D9p0006*
+ ID_MODEL_FROM_DATABASE=Wired Keyboard (78/79 key) [RPI Wired Keyboard 5]
+
usb:v04D9p0022*
ID_MODEL_FROM_DATABASE=Portable Keyboard
+usb:v04D9p0348*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
usb:v04D9p048E*
ID_MODEL_FROM_DATABASE=Optical Mouse
usb:v04D9pA11B*
ID_MODEL_FROM_DATABASE=Mouse [MX-3200]
+usb:v04D9pA29F*
+ ID_MODEL_FROM_DATABASE=Microarray fingerprint reader
+
+usb:v04D9pB534*
+ ID_MODEL_FROM_DATABASE=LGT8F328P Microprocessor
+
usb:v04D9pE002*
ID_MODEL_FROM_DATABASE=MCU
usb:v04E8p0300*
ID_MODEL_FROM_DATABASE=E2530 / GT-C3350 Phones (Mass storage mode)
+usb:v04E8p04E8*
+ ID_MODEL_FROM_DATABASE=Galaxy (MIDI mode)
+
usb:v04E8p1003*
ID_MODEL_FROM_DATABASE=MP3 Player and Recorder
usb:v04E8p8001*
ID_MODEL_FROM_DATABASE=Handheld
+usb:v04E8p8002*
+ ID_MODEL_FROM_DATABASE=Portable SSD 500GB Model Number: MU - P8500B
+
+usb:v04E8p8003*
+ ID_MODEL_FROM_DATABASE=Portable SSD T1
+
usb:v04E8pD003*
ID_MODEL_FROM_DATABASE=GT-I9003
usb:v04F2p0860*
ID_MODEL_FROM_DATABASE=2.4G Multimedia Wireless Kit
+usb:v04F2p0939*
+ ID_MODEL_FROM_DATABASE=Amazon Basics mouse
+
usb:v04F2p1061*
ID_MODEL_FROM_DATABASE=HP KG-1061 Wireless Keyboard+Mouse
usb:v04F2pB230*
ID_MODEL_FROM_DATABASE=Integrated HP HD Webcam
+usb:v04F2pB249*
+ ID_MODEL_FROM_DATABASE=HP Integrated Webcam
+
usb:v04F2pB257*
ID_MODEL_FROM_DATABASE=Lenovo Integrated Camera
usb:v04F2pB444*
ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam
+usb:v04F2pB49F*
+ ID_MODEL_FROM_DATABASE=Bluetooth (RTL8723BE)
+
usb:v04F2pB563*
ID_MODEL_FROM_DATABASE=Integrated Camera
usb:v04F2pB604*
ID_MODEL_FROM_DATABASE=Integrated Camera (1280x720@30)
+usb:v04F2pB681*
+ ID_MODEL_FROM_DATABASE=ThinkPad T490 Webcam
+
usb:v04F3*
ID_VENDOR_FROM_DATABASE=Elan Microelectronics Corp.
usb:v04F9p0042*
ID_MODEL_FROM_DATABASE=HL-2270DW Laser Printer
+usb:v04F9p004D*
+ ID_MODEL_FROM_DATABASE=HL-6180DW series
+
+usb:v04F9p0080*
+ ID_MODEL_FROM_DATABASE=HL-L6250DN series
+
usb:v04F9p0100*
ID_MODEL_FROM_DATABASE=MFC8600/9650 series
usb:v04F9p0240*
ID_MODEL_FROM_DATABASE=MFC-J950DN
+usb:v04F9p0245*
+ ID_MODEL_FROM_DATABASE=MFC-9560CDW
+
usb:v04F9p0248*
ID_MODEL_FROM_DATABASE=DCP-7055 scanner/printer
usb:v04F9p03BD*
ID_MODEL_FROM_DATABASE=DCP-J762N
+usb:v04F9p03FD*
+ ID_MODEL_FROM_DATABASE=ADS-2700W
+
usb:v04F9p1000*
ID_MODEL_FROM_DATABASE=Printer
ID_MODEL_FROM_DATABASE=PT-2420PC P-touch Label Printer
usb:v04F9p2015*
- ID_MODEL_FROM_DATABASE=QL-500 P-touch label printer
+ ID_MODEL_FROM_DATABASE=QL-500 label printer
usb:v04F9p2016*
- ID_MODEL_FROM_DATABASE=QL-550 P-touch label printer
+ ID_MODEL_FROM_DATABASE=QL-550 printer
usb:v04F9p201A*
ID_MODEL_FROM_DATABASE=PT-18R P-touch label printer
usb:v04F9p201B*
- ID_MODEL_FROM_DATABASE=QL-650TD P-touch Label Printer
+ ID_MODEL_FROM_DATABASE=QL-650TD Label Printer
+
+usb:v04F9p2020*
+ ID_MODEL_FROM_DATABASE=QL-1050 Label Printer
usb:v04F9p2027*
- ID_MODEL_FROM_DATABASE=QL-560 P-touch Label Printer
+ ID_MODEL_FROM_DATABASE=QL-560 Label Printer
usb:v04F9p2028*
- ID_MODEL_FROM_DATABASE=QL-570 P-touch Label Printer
+ ID_MODEL_FROM_DATABASE=QL-570 Label Printer
+
+usb:v04F9p202A*
+ ID_MODEL_FROM_DATABASE=QL-1060N Label Printer
usb:v04F9p202B*
ID_MODEL_FROM_DATABASE=PT-7600 P-touch Label Printer
+usb:v04F9p202C*
+ ID_MODEL_FROM_DATABASE=PT-1230PC P-touch Label Printer E mode
+
+usb:v04F9p202D*
+ ID_MODEL_FROM_DATABASE=PT-2430PC P-touch Label Printer
+
+usb:v04F9p2030*
+ ID_MODEL_FROM_DATABASE=PT-1230PC P-touch Label Printer EL mode
+
usb:v04F9p2041*
ID_MODEL_FROM_DATABASE=PT-2730 P-touch Label Printer
+usb:v04F9p2042*
+ ID_MODEL_FROM_DATABASE=QL-700 Label Printer
+
+usb:v04F9p2043*
+ ID_MODEL_FROM_DATABASE=QL-710W Label Printer
+
+usb:v04F9p2044*
+ ID_MODEL_FROM_DATABASE=QL-720NW Label Printer
+
+usb:v04F9p204D*
+ ID_MODEL_FROM_DATABASE=QL-720NW Label Printer (mass storage mode)
+
usb:v04F9p2061*
ID_MODEL_FROM_DATABASE=PT-P700 P-touch Label Printer
ID_MODEL_FROM_DATABASE=PT-P700 P-touch Label Printer RemovableDisk
usb:v04F9p209B*
- ID_MODEL_FROM_DATABASE=QL-800 P-touch Label Printer
+ ID_MODEL_FROM_DATABASE=QL-800 Label Printer
usb:v04F9p209C*
- ID_MODEL_FROM_DATABASE=QL-810W P-touch Label Printer
+ ID_MODEL_FROM_DATABASE=QL-810W Label Printer
usb:v04F9p209D*
- ID_MODEL_FROM_DATABASE=QL-820NWB P-touch Label Printer
+ ID_MODEL_FROM_DATABASE=QL-820NWB Label Printer
+
+usb:v04F9p20A7*
+ ID_MODEL_FROM_DATABASE=QL-1100 Label Printer
+
+usb:v04F9p20A8*
+ ID_MODEL_FROM_DATABASE=QL-1110NWB Label Printer
+
+usb:v04F9p20A9*
+ ID_MODEL_FROM_DATABASE=QL-1100 Label Printer (mass storage)
+
+usb:v04F9p20AA*
+ ID_MODEL_FROM_DATABASE=QL-1110NWB Label Printer (mass storage)
+
+usb:v04F9p20AB*
+ ID_MODEL_FROM_DATABASE=QL-1115NWB Label Printer
+
+usb:v04F9p20AC*
+ ID_MODEL_FROM_DATABASE=QL-1115NWB Label Printer (mass storage)
+
+usb:v04F9p20C0*
+ ID_MODEL_FROM_DATABASE=QL-600 Label Printer
usb:v04F9p2100*
ID_MODEL_FROM_DATABASE=Card Reader Writer
ID_MODEL_FROM_DATABASE=Linux-USB user-mode bulk source/sink
usb:v0525pA4A5*
- ID_MODEL_FROM_DATABASE=Pocketbook Pro 903 / Mobius 2 Action Cam
+ ID_MODEL_FROM_DATABASE=Pocketbook Pro 903 / Mobius 2 Action Cam / xDuoo X3
usb:v0525pA4A6*
ID_MODEL_FROM_DATABASE=Linux-USB Serial Gadget
usb:v054Cp02D2*
ID_MODEL_FROM_DATABASE=PSP Slim
+usb:v054Cp02D4*
+ ID_MODEL_FROM_DATABASE=UP-CX1
+
usb:v054Cp02D8*
ID_MODEL_FROM_DATABASE=SBAC-US10 SxS PRO memory card reader/writer
usb:v054Cp03BC*
ID_MODEL_FROM_DATABASE=Webbie HD - MHS-CM1
+usb:v054Cp03C3*
+ ID_MODEL_FROM_DATABASE=UP-DR80MD
+
+usb:v054Cp03C4*
+ ID_MODEL_FROM_DATABASE=Stryker SDP1000
+
+usb:v054Cp03C5*
+ ID_MODEL_FROM_DATABASE=UP-DR80
+
usb:v054Cp03CC*
ID_MODEL_FROM_DATABASE=SD Card Reader
usb:v054Cp0C34*
ID_MODEL_FROM_DATABASE=ILCE-7M3 [A7III] in PC Remote mode
+usb:v054Cp0CD3*
+ ID_MODEL_FROM_DATABASE=WH-1000XM3 [Wireless Noise-Canceling Headphones]
+
usb:v054Cp0CDA*
ID_MODEL_FROM_DATABASE=PlayStation Classic controller
usb:v0566p3004*
ID_MODEL_FROM_DATABASE=Genius KB-29E
+usb:v0566p3013*
+ ID_MODEL_FROM_DATABASE=BakkerElkhuizen Wired Keyboard S-board 840 Design
+
+usb:v0566p3020*
+ ID_MODEL_FROM_DATABASE=BakkerElkhuizen Wired Keyboard S-board 840 Design USB-Hub
+
usb:v0566p3027*
ID_MODEL_FROM_DATABASE=Sun-Flex ProTouch
usb:v056Ap009A*
ID_MODEL_FROM_DATABASE=TPC9A
+usb:v056Ap00A2*
+ ID_MODEL_FROM_DATABASE=STU-300B [LCD signature pad]
+
usb:v056Ap00B0*
ID_MODEL_FROM_DATABASE=PTZ-430 [Intuos3 (4x5)]
usb:v056Ap00F8*
ID_MODEL_FROM_DATABASE=DTH-2400 [Cintiq 24HD touch] tablet
+usb:v056Ap00F9*
+ ID_MODEL_FROM_DATABASE=DTK-2200 [Cintiq 22HD] hub
+
usb:v056Ap00FA*
ID_MODEL_FROM_DATABASE=DTK-2200 [Cintiq 22HD] tablet
ID_MODEL_FROM_DATABASE=DTK-1651
usb:v056Ap0347*
- ID_MODEL_FROM_DATABASE=Integrated Hub
+ ID_MODEL_FROM_DATABASE=DTH-W1620 [MobileStudio Pro 16] internal hub
usb:v056Ap0348*
- ID_MODEL_FROM_DATABASE=Integrated Hub
+ ID_MODEL_FROM_DATABASE=DTH-W1620 [MobileStudio Pro 16] external hub
usb:v056Ap034A*
ID_MODEL_FROM_DATABASE=DTH-W1320 [MobileStudio Pro 13] touchscreen
usb:v056Ap0390*
ID_MODEL_FROM_DATABASE=DTK-1660 [Cintiq 16]
+usb:v056Ap0392*
+ ID_MODEL_FROM_DATABASE=PTH-460 [Intuos Pro (S)]
+
+usb:v056Ap0396*
+ ID_MODEL_FROM_DATABASE=DTK-1660E
+
+usb:v056Ap0398*
+ ID_MODEL_FROM_DATABASE=DTH-W1320 [MobileStudio Pro 13] tablet
+
+usb:v056Ap0399*
+ ID_MODEL_FROM_DATABASE=DTH-W1620 [MobileStudio Pro 16] tablet
+
+usb:v056Ap039A*
+ ID_MODEL_FROM_DATABASE=DTH-W1320 [MobileStudio Pro 13] touchscreen
+
+usb:v056Ap039B*
+ ID_MODEL_FROM_DATABASE=DTH-W1620 [MobileStudio Pro 16] touchscreen
+
+usb:v056Ap039C*
+ ID_MODEL_FROM_DATABASE=DTH-W1320 [MobileStudio Pro 16] external hub
+
+usb:v056Ap039D*
+ ID_MODEL_FROM_DATABASE=DTH-W1320 [MobileStudio Pro 16] internal hub
+
+usb:v056Ap03AA*
+ ID_MODEL_FROM_DATABASE=DTH-W1620 [MobileStudio Pro 16] tablet
+
+usb:v056Ap03AC*
+ ID_MODEL_FROM_DATABASE=DTH-W1620 [MobileStudio Pro 16] touchscreen
+
usb:v056Ap0400*
ID_MODEL_FROM_DATABASE=PenPartner 4x5
usb:v056Dp0003*
ID_MODEL_FROM_DATABASE=Device Bay Controller
+usb:v056Dp4001*
+ ID_MODEL_FROM_DATABASE=Monitor
+
usb:v056E*
ID_VENDOR_FROM_DATABASE=Elecom Co., Ltd
usb:v056Ep00A7*
ID_MODEL_FROM_DATABASE=Blue LED Mouse M-BL08DB
+usb:v056Ep00A8*
+ ID_MODEL_FROM_DATABASE=M-BL09DB Mouse
+
+usb:v056Ep00A9*
+ ID_MODEL_FROM_DATABASE=M-BL10UB Mouse
+
+usb:v056Ep00AA*
+ ID_MODEL_FROM_DATABASE=M-BL11DB Mouse
+
+usb:v056Ep00AC*
+ ID_MODEL_FROM_DATABASE=M-A-BL01UL / M-BL15DB Mouse
+
+usb:v056Ep00B4*
+ ID_MODEL_FROM_DATABASE=Track on Glass Mouse M-TG02DL
+
+usb:v056Ep00B5*
+ ID_MODEL_FROM_DATABASE=Track on Glass Mouse M-TG03UL
+
+usb:v056Ep00B6*
+ ID_MODEL_FROM_DATABASE=Track on Glass Mouse M-TG04DL
+
+usb:v056Ep00B8*
+ ID_MODEL_FROM_DATABASE=M-A-BL01UL or M-ASKL2 Mouse
+
+usb:v056Ep00B9*
+ ID_MODEL_FROM_DATABASE=M-A-BL02DB or M-ASKL Mouse
+
+usb:v056Ep00CB*
+ ID_MODEL_FROM_DATABASE=M-BL21DB Mouse
+
+usb:v056Ep00CD*
+ ID_MODEL_FROM_DATABASE=M-XG1UB Mouse
+
+usb:v056Ep00CE*
+ ID_MODEL_FROM_DATABASE=M-XG1DB Mouse
+
+usb:v056Ep00CF*
+ ID_MODEL_FROM_DATABASE=M-XG1BB Bluetooth Mouse
+
+usb:v056Ep00D0*
+ ID_MODEL_FROM_DATABASE=M-XG2UB Mouse
+
+usb:v056Ep00D1*
+ ID_MODEL_FROM_DATABASE=M-XG2DB Mouse
+
+usb:v056Ep00D2*
+ ID_MODEL_FROM_DATABASE=M-XG2BB Bluetooth Mouse
+
+usb:v056Ep00D3*
+ ID_MODEL_FROM_DATABASE=M-XG3DL Mouse
+
+usb:v056Ep00D4*
+ ID_MODEL_FROM_DATABASE=M-LS11DL Mouse
+
+usb:v056Ep00DA*
+ ID_MODEL_FROM_DATABASE=M-XG4UB Mouse
+
+usb:v056Ep00DB*
+ ID_MODEL_FROM_DATABASE=M-XG4DB Mouse
+
+usb:v056Ep00DC*
+ ID_MODEL_FROM_DATABASE=M-XG4BB Bluetooth Mouse
+
+usb:v056Ep00DD*
+ ID_MODEL_FROM_DATABASE=M-LS12UL Mouse
+
+usb:v056Ep00DE*
+ ID_MODEL_FROM_DATABASE=M-LS13UL Mouse
+
+usb:v056Ep00DF*
+ ID_MODEL_FROM_DATABASE=M-BL22DB Mouse
+
+usb:v056Ep00E1*
+ ID_MODEL_FROM_DATABASE=M-WK01DB or M-A-BL04DB
+
+usb:v056Ep00E2*
+ ID_MODEL_FROM_DATABASE=M-A-BL03DB
+
+usb:v056Ep00E3*
+ ID_MODEL_FROM_DATABASE=M-XGx10UB
+
+usb:v056Ep00E4*
+ ID_MODEL_FROM_DATABASE=M-XGx10DB
+
+usb:v056Ep00E5*
+ ID_MODEL_FROM_DATABASE=M-XGx10BB
+
+usb:v056Ep00E6*
+ ID_MODEL_FROM_DATABASE=M-XGx20DL or M-XGx20DB UltimateLaser Mouse
+
+usb:v056Ep00F1*
+ ID_MODEL_FROM_DATABASE=M-XT1DRBK USB EX-G Wireless Optical TrackBall
+
+usb:v056Ep00F2*
+ ID_MODEL_FROM_DATABASE=M-XT1URBK EX-G Optical Trackball
+
+usb:v056Ep00F3*
+ ID_MODEL_FROM_DATABASE=M-BL23DB
+
+usb:v056Ep00F4*
+ ID_MODEL_FROM_DATABASE=M-BT13BL LBT-UAN05C2
+
+usb:v056Ep00F7*
+ ID_MODEL_FROM_DATABASE=M-KN1DB
+
+usb:v056Ep00F8*
+ ID_MODEL_FROM_DATABASE=M-BL22DB Mouse (other version)
+
+usb:v056Ep00F9*
+ ID_MODEL_FROM_DATABASE=M-XT2URBK EX-G Optical TrackBall
+
+usb:v056Ep00FA*
+ ID_MODEL_FROM_DATABASE=M-XT2DRBK EX-G Wireless Optical TrackBall
+
+usb:v056Ep00FB*
+ ID_MODEL_FROM_DATABASE=M-XT3URBK EX-G Optical TrackBall
+
+usb:v056Ep00FC*
+ ID_MODEL_FROM_DATABASE=M-XT3DRBK EX-G Wireless Optical TrackBall
+
+usb:v056Ep00FD*
+ ID_MODEL_FROM_DATABASE=M-XT4DRBK EX-G Wireless Optical TrackBall
+
+usb:v056Ep00FE*
+ ID_MODEL_FROM_DATABASE=M-DT1URBK or M-DT2URBK DEFT Optical TrackBall
+
+usb:v056Ep00FF*
+ ID_MODEL_FROM_DATABASE=M-DT1DRBK or M-DT2DRBK DEFT Wireless Optical Mouse
+
+usb:v056Ep0101*
+ ID_MODEL_FROM_DATABASE=M-BL25UBS
+
+usb:v056Ep0103*
+ ID_MODEL_FROM_DATABASE=M-BT16BBS
+
+usb:v056Ep0104*
+ ID_MODEL_FROM_DATABASE=M-BL26UBC
+
+usb:v056Ep0105*
+ ID_MODEL_FROM_DATABASE=M-BL26DBC
+
+usb:v056Ep0107*
+ ID_MODEL_FROM_DATABASE=M-LS15UL
+
+usb:v056Ep0108*
+ ID_MODEL_FROM_DATABASE=M-LS15DL
+
+usb:v056Ep0109*
+ ID_MODEL_FROM_DATABASE=M-LS16UL Mouse
+
+usb:v056Ep010A*
+ ID_MODEL_FROM_DATABASE=M-LS16DL / M-KN2DLS
+
+usb:v056Ep010B*
+ ID_MODEL_FROM_DATABASE=M-BL21DB Mouse
+
+usb:v056Ep010C*
+ ID_MODEL_FROM_DATABASE=M-HT1URBK HUGE Optical TrackBall
+
+usb:v056Ep010D*
+ ID_MODEL_FROM_DATABASE=M-HT1DRBK HUGE Wireless Optical TrackBall
+
+usb:v056Ep010E*
+ ID_MODEL_FROM_DATABASE=M-KS1DBS / M-FPG3DBS
+
+usb:v056Ep010F*
+ ID_MODEL_FROM_DATABASE=M-FBG3DB
+
+usb:v056Ep0115*
+ ID_MODEL_FROM_DATABASE=M-BT13BL
+
+usb:v056Ep0121*
+ ID_MODEL_FROM_DATABASE=M-ED01DB
+
+usb:v056Ep0122*
+ ID_MODEL_FROM_DATABASE=M-NK01DB
+
+usb:v056Ep0124*
+ ID_MODEL_FROM_DATABASE=Dual connect Mouse M-DC01MB Bluetooth
+
+usb:v056Ep0128*
+ ID_MODEL_FROM_DATABASE=TrackBall Mouse M-XPT1MR Wired
+
+usb:v056Ep0129*
+ ID_MODEL_FROM_DATABASE=TrackBall Mouse M-XPT1MR Wireless
+
+usb:v056Ep0130*
+ ID_MODEL_FROM_DATABASE=TrackBall Mouse M-XPT1MR Bluetooth
+
+usb:v056Ep0131*
+ ID_MODEL_FROM_DATABASE=TrackBall Mouse M-DPT1MR Wired
+
+usb:v056Ep0132*
+ ID_MODEL_FROM_DATABASE=TrackBall Mouse M-DPT1MR Wireless
+
+usb:v056Ep0133*
+ ID_MODEL_FROM_DATABASE=TrackBall Mouse M-DPT1MR Bluetooth
+
+usb:v056Ep0136*
+ ID_MODEL_FROM_DATABASE=M-BT20BB
+
+usb:v056Ep0137*
+ ID_MODEL_FROM_DATABASE=BlueTooth 4.0 Mouse M-BT21BB
+
+usb:v056Ep0138*
+ ID_MODEL_FROM_DATABASE=M-A-BL07DB
+
+usb:v056Ep0140*
+ ID_MODEL_FROM_DATABASE=M-G01UR
+
+usb:v056Ep0141*
+ ID_MODEL_FROM_DATABASE=M-Y9UB
+
+usb:v056Ep0142*
+ ID_MODEL_FROM_DATABASE=M-DY13DB
+
+usb:v056Ep0144*
+ ID_MODEL_FROM_DATABASE=M-FBL01DB
+
+usb:v056Ep1055*
+ ID_MODEL_FROM_DATABASE=TK-DCP03 WIRED
+
+usb:v056Ep1057*
+ ID_MODEL_FROM_DATABASE=TK-DCP03 BT
+
usb:v056Ep2003*
ID_MODEL_FROM_DATABASE=JC-U3613M
usb:v056Ep200C*
ID_MODEL_FROM_DATABASE=LD-USB/TX
+usb:v056Ep200F*
+ ID_MODEL_FROM_DATABASE=JC-U4013S Gamepad
+
usb:v056Ep2012*
ID_MODEL_FROM_DATABASE=JC-U4013S Gamepad
usb:v057E*
ID_VENDOR_FROM_DATABASE=Nintendo Co., Ltd
+usb:v057Ep0300*
+ ID_MODEL_FROM_DATABASE=USB-EXI Adapter (GCP-2000)
+
+usb:v057Ep0304*
+ ID_MODEL_FROM_DATABASE=RVT-H Reader
+
usb:v057Ep0305*
ID_MODEL_FROM_DATABASE=Broadcom BCM2045A Bluetooth Radio [Nintendo Wii]
usb:v057Ep0337*
ID_MODEL_FROM_DATABASE=Wii U GameCube Controller Adapter
+usb:v057Ep2000*
+ ID_MODEL_FROM_DATABASE=Switch
+
usb:v057Ep2006*
ID_MODEL_FROM_DATABASE=Joy-Con L
usb:v057Ep2007*
ID_MODEL_FROM_DATABASE=Joy-Con R
+usb:v057Ep2009*
+ ID_MODEL_FROM_DATABASE=Switch Pro Controller
+
+usb:v057Ep200E*
+ ID_MODEL_FROM_DATABASE=Joy-Con Charging Grip
+
+usb:v057Ep3000*
+ ID_MODEL_FROM_DATABASE=SDK Debugger
+
usb:v057F*
ID_VENDOR_FROM_DATABASE=QuickShot, Ltd
usb:v0581*
ID_VENDOR_FROM_DATABASE=Racal Data Group
+usb:v0581p0107*
+ ID_MODEL_FROM_DATABASE=Tera Barcode Scanner 2.4 GHz Receiver
+
+usb:v0581p020C*
+ ID_MODEL_FROM_DATABASE=Tera 2D Barcode Scanner EVHK0012
+
usb:v0582*
ID_VENDOR_FROM_DATABASE=Roland Corp.
usb:v0582p015D*
ID_MODEL_FROM_DATABASE=R-88
+usb:v0582p01B5*
+ ID_MODEL_FROM_DATABASE=Boutique Series Synthesizer (Normal mode)
+
+usb:v0582p01B6*
+ ID_MODEL_FROM_DATABASE=Boutique Series Synthesizer (Storage mode)
+
+usb:v0582p01DF*
+ ID_MODEL_FROM_DATABASE=Rubix22
+
+usb:v0582p01E0*
+ ID_MODEL_FROM_DATABASE=Rubix24
+
+usb:v0582p01E1*
+ ID_MODEL_FROM_DATABASE=Rubix44
+
+usb:v0582p01EF*
+ ID_MODEL_FROM_DATABASE=Go:KEYS MIDI
+
usb:v0582p0505*
ID_MODEL_FROM_DATABASE=EDIROL UA-101
usb:v0583p205F*
ID_MODEL_FROM_DATABASE=PSX/USB converter
+usb:v0583p2060*
+ ID_MODEL_FROM_DATABASE=2-axis 8-button gamepad
+
usb:v0583p206F*
ID_MODEL_FROM_DATABASE=USB, 2-axis 8-button gamepad
usb:v058Fp1234*
ID_MODEL_FROM_DATABASE=Flash Drive
+usb:v058Fp198B*
+ ID_MODEL_FROM_DATABASE=Webcam (Gigatech P-09)
+
usb:v058Fp2412*
ID_MODEL_FROM_DATABASE=SCard R/W CSR-145
usb:v058Fp6391*
ID_MODEL_FROM_DATABASE=IDE Bridge
+usb:v058Fp6998*
+ ID_MODEL_FROM_DATABASE=AU6998 Flash Disk Controller
+
usb:v058Fp9213*
ID_MODEL_FROM_DATABASE=MacAlly Kbd Hub
usb:v0590p0028*
ID_MODEL_FROM_DATABASE=HJ-720IT / HEM-7080IT-E / HEM-790IT
+usb:v0590p0051*
+ ID_MODEL_FROM_DATABASE=FT232BM [E58CIFQ1 with FTDI USB2Serial Converter]
+
usb:v0591*
ID_VENDOR_FROM_DATABASE=Questra Consulting
usb:v059Fp0641*
ID_MODEL_FROM_DATABASE=Mobile Hard Drive
+usb:v059Fp0828*
+ ID_MODEL_FROM_DATABASE=d2 Quadra
+
usb:v059Fp0829*
ID_MODEL_FROM_DATABASE=BigDisk Extreme+
usb:v059Fp102A*
ID_MODEL_FROM_DATABASE=Rikiki Hard Drive
+usb:v059Fp103D*
+ ID_MODEL_FROM_DATABASE=D2
+
usb:v059Fp1049*
ID_MODEL_FROM_DATABASE=rikiki Harddrive
usb:v059Fp1052*
ID_MODEL_FROM_DATABASE=P'9220 Mobile Drive
+usb:v059Fp1053*
+ ID_MODEL_FROM_DATABASE=P'9230 2TB [Porsche Design Desktop Drive 2TB]
+
usb:v059Fp1061*
ID_MODEL_FROM_DATABASE=Rugged USB3-FW
usb:v059Fp106E*
ID_MODEL_FROM_DATABASE=Porsche Design Desktop Drive
+usb:v059Fp1094*
+ ID_MODEL_FROM_DATABASE=Rugged THB
+
usb:v059FpA601*
ID_MODEL_FROM_DATABASE=HardDrive
usb:v05A6p0004*
ID_MODEL_FROM_DATABASE=CVA122E Cable Voice Adapter (WDM)
+usb:v05A6p0008*
+ ID_MODEL_FROM_DATABASE=STA1520 Tuning Adapter
+
usb:v05A6p0A00*
ID_MODEL_FROM_DATABASE=Integrated Management Controller Hub
usb:v05A9p2640*
ID_MODEL_FROM_DATABASE=OV2640 Webcam
+usb:v05A9p2642*
+ ID_MODEL_FROM_DATABASE=Integrated Webcam for Dell XPS 2010
+
usb:v05A9p2643*
ID_MODEL_FROM_DATABASE=Monitor Webcam
usb:v05ACp024D*
ID_MODEL_FROM_DATABASE=Internal Keyboard/Trackpad (MacBook Air) (ISO)
+usb:v05ACp024F*
+ ID_MODEL_FROM_DATABASE=Aluminium Keyboard (ANSI)
+
usb:v05ACp0250*
ID_MODEL_FROM_DATABASE=Aluminium Keyboard (ISO)
usb:v05ACp0259*
ID_MODEL_FROM_DATABASE=Internal Keyboard/Trackpad
+usb:v05ACp025A*
+ ID_MODEL_FROM_DATABASE=Internal Keyboard/Trackpad
+
usb:v05ACp0263*
ID_MODEL_FROM_DATABASE=Apple Internal Keyboard / Trackpad (MacBook Retina)
ID_MODEL_FROM_DATABASE=iPad 3 (3G, 16 GB)
usb:v05ACp12A8*
- ID_MODEL_FROM_DATABASE=iPhone5/5C/5S/6
+ ID_MODEL_FROM_DATABASE=iPhone 5/5C/5S/6/SE
usb:v05ACp12A9*
ID_MODEL_FROM_DATABASE=iPad 2
usb:v05ACp1303*
ID_MODEL_FROM_DATABASE=iPod Shuffle 4.Gen
+usb:v05ACp1392*
+ ID_MODEL_FROM_DATABASE=Apple Watch charger
+
+usb:v05ACp1393*
+ ID_MODEL_FROM_DATABASE=AirPods case
+
+usb:v05ACp1395*
+ ID_MODEL_FROM_DATABASE=Smart Battery Case [iPhone 6]
+
+usb:v05ACp1398*
+ ID_MODEL_FROM_DATABASE=Smart Battery Case
+
usb:v05ACp1401*
ID_MODEL_FROM_DATABASE=Modem
usb:v05ACp8286*
ID_MODEL_FROM_DATABASE=Bluetooth Host Controller
+usb:v05ACp8289*
+ ID_MODEL_FROM_DATABASE=Bluetooth Host Controller
+
usb:v05ACp828C*
ID_MODEL_FROM_DATABASE=Bluetooth Host Controller
usb:v05ACp8404*
ID_MODEL_FROM_DATABASE=Internal Memory Card Reader
+usb:v05ACp8406*
+ ID_MODEL_FROM_DATABASE=Internal Memory Card Reader
+
usb:v05ACp8501*
ID_MODEL_FROM_DATABASE=Built-in iSight [Micron]
usb:v05ACp8510*
ID_MODEL_FROM_DATABASE=FaceTime HD Camera (Built-in)
+usb:v05ACp8600*
+ ID_MODEL_FROM_DATABASE=iBridge
+
usb:v05ACp911C*
ID_MODEL_FROM_DATABASE=Hub in A1082 [Cinema HD Display 23"]
ID_VENDOR_FROM_DATABASE=Medianix Semiconductor, Inc.
usb:v05B8*
- ID_VENDOR_FROM_DATABASE=Agiler, Inc.
+ ID_VENDOR_FROM_DATABASE=SYSGRATION
usb:v05B8p3002*
ID_MODEL_FROM_DATABASE=Scroll Mouse
+usb:v05B8p3126*
+ ID_MODEL_FROM_DATABASE=APT-905 Wireless presenter
+
usb:v05B8p3223*
ID_MODEL_FROM_DATABASE=ISY Wireless Presenter
usb:v05C6p0114*
ID_MODEL_FROM_DATABASE=Select RW-200 CDMA Wireless Modem
+usb:v05C6p0A02*
+ ID_MODEL_FROM_DATABASE=Jolla Device Developer Mode
+
+usb:v05C6p0A07*
+ ID_MODEL_FROM_DATABASE=Jolla Device MTP
+
+usb:v05C6p0AFE*
+ ID_MODEL_FROM_DATABASE=Jolla Device Charging Only
+
usb:v05C6p1000*
ID_MODEL_FROM_DATABASE=Mass Storage Device
ID_MODEL_FROM_DATABASE=Qualcomm HSUSB Device
usb:v05C6p9025*
- ID_MODEL_FROM_DATABASE=Qualcomm HSUSB Device
+ ID_MODEL_FROM_DATABASE=HSUSB Device
+
+usb:v05C6p9090*
+ ID_MODEL_FROM_DATABASE=Quectel UC15
+
+usb:v05C6p9091*
+ ID_MODEL_FROM_DATABASE=Intex Aqua Fish & Jolla C Diagnostic Mode
+
+usb:v05C6p9092*
+ ID_MODEL_FROM_DATABASE=Nokia 8110 4G
+
+usb:v05C6p90BA*
+ ID_MODEL_FROM_DATABASE=Audio 1.0 device
+
+usb:v05C6p90BB*
+ ID_MODEL_FROM_DATABASE=Snapdragon interface (MIDI + ADB)
+
+usb:v05C6p90DC*
+ ID_MODEL_FROM_DATABASE=Fairphone 2 (Charging & ADB)
usb:v05C6p9201*
ID_MODEL_FROM_DATABASE=Gobi Wireless Modem (QDL mode)
ID_MODEL_FROM_DATABASE=Acer Gobi 2000 Wireless Modem (QDL mode)
usb:v05C6p9215*
- ID_MODEL_FROM_DATABASE=Acer Gobi 2000 Wireless Modem
+ ID_MODEL_FROM_DATABASE=Quectel EC20 LTE modem / Acer Gobi 2000 Wireless Modem
usb:v05C6p9221*
ID_MODEL_FROM_DATABASE=Gobi Wireless Modem (QDL mode)
usb:v05C6p9275*
ID_MODEL_FROM_DATABASE=iRex Technologies Gobi 2000 Wireless Modem
+usb:v05C6pF003*
+ ID_MODEL_FROM_DATABASE=Nokia 8110 4G
+
usb:v05C7*
ID_VENDOR_FROM_DATABASE=Qtronix Corp.
usb:v05C8p021A*
ID_MODEL_FROM_DATABASE=HP Webcam
+usb:v05C8p0233*
+ ID_MODEL_FROM_DATABASE=HP Webcam
+
usb:v05C8p0318*
ID_MODEL_FROM_DATABASE=Webcam
usb:v05C8p036E*
ID_MODEL_FROM_DATABASE=Webcam
+usb:v05C8p0374*
+ ID_MODEL_FROM_DATABASE=HP EliteBook integrated HD Webcam
+
+usb:v05C8p03A1*
+ ID_MODEL_FROM_DATABASE=XiaoMi Webcam
+
+usb:v05C8p03B1*
+ ID_MODEL_FROM_DATABASE=Webcam
+
+usb:v05C8p03BC*
+ ID_MODEL_FROM_DATABASE=HP Wide Vision HD Integrated Webcam
+
+usb:v05C8p03CB*
+ ID_MODEL_FROM_DATABASE=HP Wide Vision HD Integrated Webcam
+
usb:v05C8p0403*
ID_MODEL_FROM_DATABASE=Webcam
usb:v05CAp0406*
ID_MODEL_FROM_DATABASE=Type 102
+usb:v05CAp0437*
+ ID_MODEL_FROM_DATABASE=Aficio SP 3510SF
+
+usb:v05CAp044E*
+ ID_MODEL_FROM_DATABASE=SP C250SF (multifunction device: printer, scanner, fax)
+
usb:v05CAp1803*
ID_MODEL_FROM_DATABASE=V5 camera [R5U870]
usb:v05CAp183E*
ID_MODEL_FROM_DATABASE=Visual Communication Camera VGP-VCC9 [R5U870]
+usb:v05CAp183F*
+ ID_MODEL_FROM_DATABASE=Sony Visual Communication Camera Integrated Webcam
+
usb:v05CAp1841*
ID_MODEL_FROM_DATABASE=Fujitsu F01/ Lifebook U810 [R5U870]
usb:v05CAp1870*
ID_MODEL_FROM_DATABASE=Webcam 1000
+usb:v05CAp1880*
+ ID_MODEL_FROM_DATABASE=R5U880
+
usb:v05CAp18B0*
ID_MODEL_FROM_DATABASE=Sony Vaio Integrated Webcam
usb:v05DCp4D30*
ID_MODEL_FROM_DATABASE=MP3 Player
+usb:v05DCpA201*
+ ID_MODEL_FROM_DATABASE=JumpDrive S70 4GB
+
usb:v05DCpA209*
ID_MODEL_FROM_DATABASE=JumpDrive S70
usb:v05DD*
ID_VENDOR_FROM_DATABASE=Delta Electronics, Inc.
+usb:v05DDpA011*
+ ID_MODEL_FROM_DATABASE=HID UPS Battery
+
usb:v05DDpFF31*
ID_MODEL_FROM_DATABASE=AWU-120
usb:v05E3p0504*
ID_MODEL_FROM_DATABASE=HID Keyboard Filter
+usb:v05E3p0510*
+ ID_MODEL_FROM_DATABASE=Camera
+
usb:v05E3p0604*
ID_MODEL_FROM_DATABASE=USB 1.1 Hub
usb:v05E3p0605*
- ID_MODEL_FROM_DATABASE=USB 2.0 Hub
+ ID_MODEL_FROM_DATABASE=Hub
usb:v05E3p0606*
ID_MODEL_FROM_DATABASE=USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub
ID_MODEL_FROM_DATABASE=Hub
usb:v05E3p0610*
- ID_MODEL_FROM_DATABASE=4-port hub
+ ID_MODEL_FROM_DATABASE=Hub
usb:v05E3p0612*
ID_MODEL_FROM_DATABASE=Hub
ID_MODEL_FROM_DATABASE=USB 2.0 microSD Reader
usb:v05E3p0716*
- ID_MODEL_FROM_DATABASE=USB 2.0 Multislot Card Reader/Writer
+ ID_MODEL_FROM_DATABASE=Multislot Card Reader/Writer
usb:v05E3p0717*
ID_MODEL_FROM_DATABASE=All-in-1 Card Reader
ID_MODEL_FROM_DATABASE=All-in-One Cardreader
usb:v05E3p0736*
- ID_MODEL_FROM_DATABASE=microSD Reader/Writer
+ ID_MODEL_FROM_DATABASE=Colour arc SD Card Reader [PISEN]
usb:v05E3p0738*
ID_MODEL_FROM_DATABASE=Card reader
usb:v05E3p0748*
ID_MODEL_FROM_DATABASE=All-in-One Cardreader
+usb:v05E3p0749*
+ ID_MODEL_FROM_DATABASE=SD Card Reader and Writer
+
usb:v05E3p0751*
ID_MODEL_FROM_DATABASE=microSD Card Reader
usb:v05F9p1206*
ID_MODEL_FROM_DATABASE=Gryphon series (OEM mode)
+usb:v05F9p120C*
+ ID_MODEL_FROM_DATABASE=Gryphon GD4430-BK
+
usb:v05F9p2202*
ID_MODEL_FROM_DATABASE=Point of Sale Handheld Scanner
usb:v05FDp0286*
ID_MODEL_FROM_DATABASE=SV-286 Cyclone Digital
+usb:v05FDp1007*
+ ID_MODEL_FROM_DATABASE=Mad Catz Controller
+
usb:v05FDp107A*
ID_MODEL_FROM_DATABASE=PowerPad Pro X-Box pad
usb:v05FEp2001*
ID_MODEL_FROM_DATABASE=Microsoft Wireless Receiver 700
+usb:v05FEp3030*
+ ID_MODEL_FROM_DATABASE=Controller
+
+usb:v05FEp3031*
+ ID_MODEL_FROM_DATABASE=Controller
+
usb:v05FF*
ID_VENDOR_FROM_DATABASE=LeCroy Corp.
usb:v0603*
ID_VENDOR_FROM_DATABASE=Novatek Microelectronics Corp.
+usb:v0603p0002*
+ ID_MODEL_FROM_DATABASE=Sino Wealth keyboard/mouse 2.4 GHz receiver
+
usb:v0603p00F1*
ID_MODEL_FROM_DATABASE=Keyboard (Labtec Ultra Flat Keyboard)
usb:v060Bp2270*
ID_MODEL_FROM_DATABASE=Gigabyte K8100 Aivia Gaming Keyboard
+usb:v060Bp500A*
+ ID_MODEL_FROM_DATABASE=Cougar 500k Gaming Keyboard
+
usb:v060Bp5253*
ID_MODEL_FROM_DATABASE=Thermaltake MEKA G-Unit Gaming Keyboard
usb:v0624*
ID_VENDOR_FROM_DATABASE=Avocent Corp.
+usb:v0624p0013*
+ ID_MODEL_FROM_DATABASE=SC Secure KVM
+
usb:v0624p0248*
ID_MODEL_FROM_DATABASE=Virtual Hub
usb:v0624p0251*
ID_MODEL_FROM_DATABASE=Virtual Mass Storage
+usb:v0624p0252*
+ ID_MODEL_FROM_DATABASE=Virtual SD card reader
+
usb:v0624p0294*
ID_MODEL_FROM_DATABASE=Dell 03R874 KVM dongle
usb:v0624p0403*
ID_MODEL_FROM_DATABASE=Cisco Virtual Mass Storage
+usb:v0624p1774*
+ ID_MODEL_FROM_DATABASE=Cybex SC985
+
usb:v0625*
ID_VENDOR_FROM_DATABASE=TiMedia Technology Co., Ltd
usb:v062Ap0001*
ID_MODEL_FROM_DATABASE=Notebook Optical Mouse
+usb:v062Ap0020*
+ ID_MODEL_FROM_DATABASE=Logic3 Gamepad
+
+usb:v062Ap0033*
+ ID_MODEL_FROM_DATABASE=Competition Pro Steering Wheel
+
usb:v062Ap0102*
ID_MODEL_FROM_DATABASE=Wireless Keyboard/Mouse Combo [MK1152WC]
usb:v062Ap4101*
ID_MODEL_FROM_DATABASE=Wireless Keyboard/Mouse
+usb:v062Ap4102*
+ ID_MODEL_FROM_DATABASE=Wireless Mouse
+
+usb:v062Ap4106*
+ ID_MODEL_FROM_DATABASE=Wireless Mouse 2.4G
+
+usb:v062Ap4C01*
+ ID_MODEL_FROM_DATABASE=2,4Ghz Wireless Transceiver [for Delux M618 Plus Wireless Vertical Mouse]
+
usb:v062Ap6301*
ID_MODEL_FROM_DATABASE=Trust Wireless Optical Mouse MI-4150K
usb:v0638p0A16*
ID_MODEL_FROM_DATABASE=Konica Minolta SC-215
+usb:v0638p0A2A*
+ ID_MODEL_FROM_DATABASE=AV220 C2
+
usb:v0638p0A30*
ID_MODEL_FROM_DATABASE=UMAX Astra 6700 Scanner
usb:v064Ep2100*
ID_MODEL_FROM_DATABASE=Sony Visual Communication Camera
+usb:v064Ep3410*
+ ID_MODEL_FROM_DATABASE=RGBIR Camera
+
usb:v064Ep9700*
ID_MODEL_FROM_DATABASE=Asus Integrated Webcam
usb:v064EpA116*
ID_MODEL_FROM_DATABASE=UVC 1.3MPixel WebCam
+usb:v064EpA127*
+ ID_MODEL_FROM_DATABASE=HP Integrated Webcam
+
usb:v064EpA136*
ID_MODEL_FROM_DATABASE=Asus Integrated Webcam [CN031B]
usb:v064EpF103*
ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam [R5U877]
+usb:v064EpF207*
+ ID_MODEL_FROM_DATABASE=Lenovo EasyCamera Integrated Webcam
+
usb:v064EpF209*
ID_MODEL_FROM_DATABASE=HP Webcam
usb:v066Fp835D*
ID_MODEL_FROM_DATABASE=MP3 Player
+usb:v066Fp83B5*
+ ID_MODEL_FROM_DATABASE=Transcend T.sonic 530 MP3 Player
+
usb:v066Fp9000*
ID_MODEL_FROM_DATABASE=MP3 Player
usb:v067Bp0611*
ID_MODEL_FROM_DATABASE=AlDiga AL-11U Quad-band GSM/GPRS/EDGE modem
+usb:v067Bp1231*
+ ID_MODEL_FROM_DATABASE=Orico SATA External Hard Disk Drive Lay-Flat Docking Station with USB 3.0 & eSATA interfaces.
+
usb:v067Bp2303*
ID_MODEL_FROM_DATABASE=PL2303 Serial Port
usb:v067Bp2528*
ID_MODEL_FROM_DATABASE=Storage device (8gB thumb drive)
+usb:v067Bp2571*
+ ID_MODEL_FROM_DATABASE=LG Electronics GE24LU21
+
usb:v067Bp25A1*
ID_MODEL_FROM_DATABASE=PL25A1 Host-Host Bridge
usb:v0686p300C*
ID_MODEL_FROM_DATABASE=PagePro 1300W
+usb:v0686p301B*
+ ID_MODEL_FROM_DATABASE=Develop D 1650iD
+
+usb:v0686p3023*
+ ID_MODEL_FROM_DATABASE=Develop D 2050iD
+
usb:v0686p302E*
ID_MODEL_FROM_DATABASE=Develop D 1650iD PCL
usb:v068Ep0504*
ID_MODEL_FROM_DATABASE=F-16 Combat Stick
+usb:v068F*
+ ID_VENDOR_FROM_DATABASE=Nihon KOHDEN
+
+usb:v068FpC00D*
+ ID_MODEL_FROM_DATABASE=MEK-6500
+
usb:v0690*
ID_VENDOR_FROM_DATABASE=Golden Bridge Electech, Inc.
usb:v0699p0347*
ID_MODEL_FROM_DATABASE=AFG 3022B
+usb:v0699p0365*
+ ID_MODEL_FROM_DATABASE=TDS 2004B
+
usb:v0699p036A*
ID_MODEL_FROM_DATABASE=TDS 2024B
ID_MODEL_FROM_DATABASE=ST290 Pro
usb:v06A3p0200*
- ID_MODEL_FROM_DATABASE=Xbox Adrenalin Hub
+ ID_MODEL_FROM_DATABASE=Racing Wheel
+
+usb:v06A3p0201*
+ ID_MODEL_FROM_DATABASE=Adrenalin Gamepad
usb:v06A3p0241*
ID_MODEL_FROM_DATABASE=Xbox Adrenalin Gamepad
usb:v06A3pF518*
ID_MODEL_FROM_DATABASE=P3200 Rumble Force Game Pad
+usb:v06A3pF51A*
+ ID_MODEL_FROM_DATABASE=P3600
+
usb:v06A3pFF04*
ID_MODEL_FROM_DATABASE=R440 Force Wheel
usb:v06CBp0013*
ID_MODEL_FROM_DATABASE=DisplayPad
+usb:v06CBp009A*
+ ID_MODEL_FROM_DATABASE=Metallica MIS Touch Fingerprint Reader
+
+usb:v06CBp00A2*
+ ID_MODEL_FROM_DATABASE=Metallica MOH Touch Fingerprint Reader
+
+usb:v06CBp00BD*
+ ID_MODEL_FROM_DATABASE=Prometheus MIS Touch Fingerprint Reader
+
usb:v06CBp2970*
ID_MODEL_FROM_DATABASE=touchpad
usb:v06D3p03AE*
ID_MODEL_FROM_DATABASE=CP-9800DW-S
+usb:v06D3p0F10*
+ ID_MODEL_FROM_DATABASE=Hori/Namco FlightStick 2
+
usb:v06D3p3B10*
ID_MODEL_FROM_DATABASE=P95D
usb:v06D3p3B60*
ID_MODEL_FROM_DATABASE=CP-D90DW
+usb:v06D3p3B80*
+ ID_MODEL_FROM_DATABASE=CP-M1
+
usb:v06D4*
ID_VENDOR_FROM_DATABASE=Cisco Systems
usb:v0711p0240*
ID_MODEL_FROM_DATABASE=PS/2 to USB Converter
+usb:v0711p0260*
+ ID_MODEL_FROM_DATABASE=PS/2 Keyboard and Mouse
+
usb:v0711p0300*
ID_MODEL_FROM_DATABASE=BAY-3U1S1P Parallel Port
usb:v0738*
ID_VENDOR_FROM_DATABASE=Mad Catz, Inc.
+usb:v0738p2215*
+ ID_MODEL_FROM_DATABASE=X-55 Rhino Stick
+
+usb:v0738p2237*
+ ID_MODEL_FROM_DATABASE=V.1 Stick
+
+usb:v0738p4506*
+ ID_MODEL_FROM_DATABASE=Wireless Controller
+
usb:v0738p4507*
ID_MODEL_FROM_DATABASE=XBox Device
usb:v0738p4516*
- ID_MODEL_FROM_DATABASE=XBox Device
+ ID_MODEL_FROM_DATABASE=Control Pad
usb:v0738p4520*
- ID_MODEL_FROM_DATABASE=XBox Device
+ ID_MODEL_FROM_DATABASE=Control Pad Pro
+
+usb:v0738p4522*
+ ID_MODEL_FROM_DATABASE=LumiCON
usb:v0738p4526*
- ID_MODEL_FROM_DATABASE=XBox Device
+ ID_MODEL_FROM_DATABASE=Control Pad Pro
+
+usb:v0738p4530*
+ ID_MODEL_FROM_DATABASE=Universal MC2 Racing Wheel and Pedals
usb:v0738p4536*
- ID_MODEL_FROM_DATABASE=XBox Device
+ ID_MODEL_FROM_DATABASE=MicroCON
usb:v0738p4540*
- ID_MODEL_FROM_DATABASE=XBox Device
+ ID_MODEL_FROM_DATABASE=Beat Pad
usb:v0738p4556*
- ID_MODEL_FROM_DATABASE=XBox Device
+ ID_MODEL_FROM_DATABASE=Lynx Wireless Controller
usb:v0738p4566*
ID_MODEL_FROM_DATABASE=XBox Device
ID_MODEL_FROM_DATABASE=XBox Device
usb:v0738p4586*
- ID_MODEL_FROM_DATABASE=XBox Device
+ ID_MODEL_FROM_DATABASE=MicroCON Wireless Controller
usb:v0738p4588*
- ID_MODEL_FROM_DATABASE=XBox Device
+ ID_MODEL_FROM_DATABASE=Blaster
+
+usb:v0738p45FF*
+ ID_MODEL_FROM_DATABASE=Beat Pad
+
+usb:v0738p4716*
+ ID_MODEL_FROM_DATABASE=Wired Xbox 360 Controller
+
+usb:v0738p4718*
+ ID_MODEL_FROM_DATABASE=Street Fighter IV FightStick SE for Xbox 360
+
+usb:v0738p4726*
+ ID_MODEL_FROM_DATABASE=Xbox 360 Controller
+
+usb:v0738p4728*
+ ID_MODEL_FROM_DATABASE=Street Fighter IV FightPad for Xbox 360
+
+usb:v0738p4730*
+ ID_MODEL_FROM_DATABASE=MC2 Racing Wheel for Xbox 360
+
+usb:v0738p4736*
+ ID_MODEL_FROM_DATABASE=MicroCON for Xbox 360
+
+usb:v0738p4738*
+ ID_MODEL_FROM_DATABASE=Street Fighter IV Wired Controller for Xbox 360
+
+usb:v0738p4740*
+ ID_MODEL_FROM_DATABASE=Beat Pad for Xbox 360
+
+usb:v0738p4743*
+ ID_MODEL_FROM_DATABASE=Beat Pad Pro
+
+usb:v0738p4758*
+ ID_MODEL_FROM_DATABASE=Arcade Game Stick
+
+usb:v0738p4A01*
+ ID_MODEL_FROM_DATABASE=FightStick TE 2 for Xbox One
+
+usb:v0738p6040*
+ ID_MODEL_FROM_DATABASE=Beat Pad Pro
usb:v0738p8818*
ID_MODEL_FROM_DATABASE=Street Fighter IV Arcade FightStick (PS3)
+usb:v0738p9871*
+ ID_MODEL_FROM_DATABASE=Portable Drum Kit
+
+usb:v0738pA109*
+ ID_MODEL_FROM_DATABASE=S.T.R.I.K.E.7 Keyboard
+
+usb:v0738pA215*
+ ID_MODEL_FROM_DATABASE=X-55 Rhino Throttle
+
+usb:v0738pB726*
+ ID_MODEL_FROM_DATABASE=Modern Warfare 2 Controller for Xbox 360
+
+usb:v0738pB738*
+ ID_MODEL_FROM_DATABASE=Marvel VS Capcom 2 TE FightStick for Xbox 360
+
+usb:v0738pBEEF*
+ ID_MODEL_FROM_DATABASE=Joytech Neo SE Advanced Gamepad
+
+usb:v0738pCB02*
+ ID_MODEL_FROM_DATABASE=Saitek Cyborg Rumble Pad
+
+usb:v0738pCB03*
+ ID_MODEL_FROM_DATABASE=Saitek P3200 Rumble Pad
+
+usb:v0738pCB29*
+ ID_MODEL_FROM_DATABASE=Saitek Aviator Stick AV8R02
+
+usb:v0738pF738*
+ ID_MODEL_FROM_DATABASE=Super Street Fighter IV FightStick TE S for Xbox 360
+
usb:v073A*
ID_VENDOR_FROM_DATABASE=Chaplet Systems, Inc.
usb:v073D*
ID_VENDOR_FROM_DATABASE=Eutron S.p.a.
+usb:v073Dp0000*
+ ID_MODEL_FROM_DATABASE=SmartKey
+
usb:v073Dp0005*
ID_MODEL_FROM_DATABASE=Crypto Token
usb:v0746*
ID_VENDOR_FROM_DATABASE=Onkyo Corp.
+usb:v0746p4700*
+ ID_MODEL_FROM_DATABASE=Integra MZA-4.7
+
usb:v0746p5500*
ID_MODEL_FROM_DATABASE=SE-U55 Audio Device
usb:v0757*
ID_VENDOR_FROM_DATABASE=Network Technologies, Inc.
+usb:v0757p0A00*
+ ID_MODEL_FROM_DATABASE=SUN Adapter
+
usb:v0758*
ID_VENDOR_FROM_DATABASE=Carl Zeiss Microscopy GmbH
usb:v0766*
ID_VENDOR_FROM_DATABASE=Jess-Link Products Co., Ltd
+usb:v0766p0017*
+ ID_MODEL_FROM_DATABASE=Packard Bell Carbon
+
usb:v0766p001B*
ID_MODEL_FROM_DATABASE=Packard Bell Go
ID_MODEL_FROM_DATABASE=CardMan 6020
usb:v076Bp3021*
- ID_MODEL_FROM_DATABASE=CardMan 3121
+ ID_MODEL_FROM_DATABASE=CardMan 3021 / 3121
usb:v076Bp3022*
- ID_MODEL_FROM_DATABASE=CardMan 3021
+ ID_MODEL_FROM_DATABASE=CardMan 3121 (HID Technologies)
usb:v076Bp3610*
ID_MODEL_FROM_DATABASE=CardMan 3620
usb:v076C*
ID_VENDOR_FROM_DATABASE=Partner Tech
+usb:v076Cp0204*
+ ID_MODEL_FROM_DATABASE=CD7220 Communications Port
+
+usb:v076Cp0302*
+ ID_MODEL_FROM_DATABASE=RP-600
+
usb:v076D*
ID_VENDOR_FROM_DATABASE=Denso Corp.
ID_VENDOR_FROM_DATABASE=Volex, Inc.
usb:v0779*
- ID_VENDOR_FROM_DATABASE=Fairchild Semiconductor
+ ID_VENDOR_FROM_DATABASE=ON Semiconductor (formerly Fairchild)
+
+usb:v0779p0133*
+ ID_MODEL_FROM_DATABASE=FUSB307B
+
+usb:v0779p0134*
+ ID_MODEL_FROM_DATABASE=FUSB308B
usb:v077A*
ID_VENDOR_FROM_DATABASE=Sankyo Seiki Mfg. Co., Ltd
usb:v077Dp627A*
ID_MODEL_FROM_DATABASE=Radio SHARK
+usb:v077E*
+ ID_VENDOR_FROM_DATABASE=Softing AG
+
+usb:v077Ep008A*
+ ID_MODEL_FROM_DATABASE=NetLink Compact MPI/Profibus adapter
+
+usb:v077Ep0160*
+ ID_MODEL_FROM_DATABASE=EDICblue
+
+usb:v077Ep0220*
+ ID_MODEL_FROM_DATABASE=VAS5054A
+
usb:v077F*
ID_VENDOR_FROM_DATABASE=Well Excellent & Most Corp.
ID_MODEL_FROM_DATABASE=Cruzer Pop (8GB)
usb:v0781p557D*
- ID_MODEL_FROM_DATABASE=Cruzer Force (64GB)
+ ID_MODEL_FROM_DATABASE=Cruzer Force
usb:v0781p5580*
ID_MODEL_FROM_DATABASE=SDCZ80 Flash Drive
usb:v0781p5583*
ID_MODEL_FROM_DATABASE=Ultra Fit
+usb:v0781p5588*
+ ID_MODEL_FROM_DATABASE=Extreme Pro
+
+usb:v0781p5589*
+ ID_MODEL_FROM_DATABASE=SD8SB8U512G[Extreme 500]
+
+usb:v0781p558C*
+ ID_MODEL_FROM_DATABASE=Extreme Portable SSD
+
usb:v0781p5590*
ID_MODEL_FROM_DATABASE=Ultra Dual
usb:v0781p6100*
ID_MODEL_FROM_DATABASE=Ultra II SD Plus 2GB
+usb:v0781p6500*
+ ID_MODEL_FROM_DATABASE=uSSD 5000
+
usb:v0781p7100*
ID_MODEL_FROM_DATABASE=Cruzer Mini
usb:v0781pB2B3*
ID_MODEL_FROM_DATABASE=SDDR-103 MobileMate SD+ Reader
+usb:v0781pB2B5*
+ ID_MODEL_FROM_DATABASE=SDDR-104 MobileMate SD+ Reader
+
usb:v0781pB4B5*
ID_MODEL_FROM_DATABASE=SDDR-89 V4 ImageMate 12-in-1 Reader
+usb:v0781pB6B7*
+ ID_MODEL_FROM_DATABASE=SDDR-99 V4 ImageMate 5-in-1 Reader
+
usb:v0781pB6BA*
ID_MODEL_FROM_DATABASE=CF SDDR-289
usb:v0789p00B3*
ID_MODEL_FROM_DATABASE=DVD Multi-plus unit LDR-H443U2
+usb:v0789p00CC*
+ ID_MODEL_FROM_DATABASE=LHD Device
+
usb:v0789p0105*
ID_MODEL_FROM_DATABASE=LAN-TX/U1H2 10/100 Ethernet Adapter [pegasus II]
ID_MODEL_FROM_DATABASE=ADM8511 Pegasus II Ethernet
usb:v07A6p8513*
- ID_MODEL_FROM_DATABASE=AN8513 Ethernet
+ ID_MODEL_FROM_DATABASE=ADM8513 Pegasus II Ethernet
usb:v07A6p8515*
- ID_MODEL_FROM_DATABASE=AN8515 Ethernet
+ ID_MODEL_FROM_DATABASE=ADM8515 Pegasus II Ethernet
usb:v07AA*
ID_VENDOR_FROM_DATABASE=Corega K.K.
usb:v07ABpFC03*
ID_MODEL_FROM_DATABASE=USB2-IDE IDE bridge
+usb:v07ABpFC77*
+ ID_MODEL_FROM_DATABASE=Quattro 3.0
+
usb:v07ABpFCD6*
ID_MODEL_FROM_DATABASE=Freecom HD Classic
usb:v07B2p5121*
ID_MODEL_FROM_DATABASE=Surfboard 5121 Cable Modem
+usb:v07B2p6002*
+ ID_MODEL_FROM_DATABASE=MTR7000 Cable Tuning Adapter
+
usb:v07B2p7030*
ID_MODEL_FROM_DATABASE=WU830G 802.11bg Wireless Adapter [Envara WiND512]
usb:v07B3p0800*
ID_MODEL_FROM_DATABASE=OpticPro ST48 Scanner
+usb:v07B3p0807*
+ ID_MODEL_FROM_DATABASE=OpticFilm 7200 scanner
+
usb:v07B3p0900*
ID_MODEL_FROM_DATABASE=OpticBook 3600 Scanner
usb:v07B3p1301*
ID_MODEL_FROM_DATABASE=OpticBook 4800 Scanner
+usb:v07B3p130F*
+ ID_MODEL_FROM_DATABASE=Bookreader v200
+
usb:v07B4*
ID_VENDOR_FROM_DATABASE=Olympus Optical Co., Ltd
usb:v07B4p0280*
ID_MODEL_FROM_DATABASE=m:robe 100
+usb:v07B4p0295*
+ ID_MODEL_FROM_DATABASE=Digital Voice Recorder VN-541PC
+
usb:v07B5*
ID_VENDOR_FROM_DATABASE=Mega World International, Ltd
usb:v07BE*
ID_VENDOR_FROM_DATABASE=Veridicom
+usb:v07BEp1935*
+ ID_MODEL_FROM_DATABASE=Elektron Music Machines
+
usb:v07C0*
ID_VENDOR_FROM_DATABASE=Code Mercenaries Hard- und Software GmbH
usb:v07CAp1830*
ID_MODEL_FROM_DATABASE=AVerTV Volar Video Capture (H830)
+usb:v07CAp1871*
+ ID_MODEL_FROM_DATABASE=TD310 DVB-T/T2/C dongle
+
usb:v07CAp3835*
ID_MODEL_FROM_DATABASE=AVerTV Volar Green HD (A835B)
usb:v07CDp0001*
ID_MODEL_FROM_DATABASE=USBuart Serial Port
+usb:v07CE*
+ ID_VENDOR_FROM_DATABASE=Nidec Copal
+
+usb:v07CEpC007*
+ ID_MODEL_FROM_DATABASE=DPB-4000
+
+usb:v07CEpC009*
+ ID_MODEL_FROM_DATABASE=DPB-6000
+
+usb:v07CEpC010*
+ ID_MODEL_FROM_DATABASE=CPB-7000
+
usb:v07CF*
ID_VENDOR_FROM_DATABASE=Casio Computer Co., Ltd
usb:v07CFp6802*
ID_MODEL_FROM_DATABASE=MIDI Keyboard
+usb:v07CFp6803*
+ ID_MODEL_FROM_DATABASE=CTK-3500 (MIDI keyboard)
+
usb:v07D0*
ID_VENDOR_FROM_DATABASE=Dazzle
usb:v07FDp0002*
ID_MODEL_FROM_DATABASE=MOTU Audio for 64 bit
+usb:v07FDp0004*
+ ID_MODEL_FROM_DATABASE=MicroBook
+
+usb:v07FDp0008*
+ ID_MODEL_FROM_DATABASE=M Series
+
usb:v07FF*
ID_VENDOR_FROM_DATABASE=Unknown
usb:v07FFp00FF*
ID_MODEL_FROM_DATABASE=Portable Hard Drive
+usb:v07FFpFFFF*
+ ID_MODEL_FROM_DATABASE=Mad Catz Gamepad
+
usb:v0801*
ID_VENDOR_FROM_DATABASE=MagTek
usb:v081EpDF00*
ID_MODEL_FROM_DATABASE=Handheld
+usb:v081F*
+ ID_VENDOR_FROM_DATABASE=Manta
+
+usb:v081FpE401*
+ ID_MODEL_FROM_DATABASE=MM812
+
usb:v0822*
ID_VENDOR_FROM_DATABASE=Reudo Corp.
usb:v0839p1012*
ID_MODEL_FROM_DATABASE=6500 Document Camera
+usb:v0839p103F*
+ ID_MODEL_FROM_DATABASE=Digimax S500
+
usb:v0839p1058*
ID_MODEL_FROM_DATABASE=S730 Camera
usb:v0846p5F00*
ID_MODEL_FROM_DATABASE=WPN111 802.11g Wireless Adapter [Atheros AR5523]
+usb:v0846p68E1*
+ ID_MODEL_FROM_DATABASE=LB1120-100NAS
+
usb:v0846p6A00*
ID_MODEL_FROM_DATABASE=WG111v2 54 Mbps Wireless [RealTek RTL8187L]
usb:v0846p9052*
ID_MODEL_FROM_DATABASE=A6100 AC600 DB Wireless Adapter [Realtek RTL8811AU]
+usb:v0846p9054*
+ ID_MODEL_FROM_DATABASE=Nighthawk A7000 802.11ac Wireless Adapter AC1900 [Realtek 8814AU]
+
usb:v0846pA001*
ID_MODEL_FROM_DATABASE=PA101 10 Mbps HPNA Home Phoneline RJ-1
usb:v0853p0100*
ID_MODEL_FROM_DATABASE=HHKB Professional
+usb:v0853p0119*
+ ID_MODEL_FROM_DATABASE=RealForce 105UB
+
+usb:v0853p0200*
+ ID_MODEL_FROM_DATABASE=RealForce Compact Keyboard
+
usb:v0854*
ID_VENDOR_FROM_DATABASE=ActiveWire, Inc.
usb:v0911*
ID_VENDOR_FROM_DATABASE=Philips Speech Processing
+usb:v0911p0C1C*
+ ID_MODEL_FROM_DATABASE=SpeechMike III
+
usb:v0911p149A*
ID_MODEL_FROM_DATABASE=SpeechMike II Pro Plus LFH5276
usb:v091Ep2491*
ID_MODEL_FROM_DATABASE=Edge 800
+usb:v091Ep2518*
+ ID_MODEL_FROM_DATABASE=eTrex 10
+
usb:v091Ep2519*
ID_MODEL_FROM_DATABASE=eTrex 30
usb:v091Ep255B*
ID_MODEL_FROM_DATABASE=Nuvi 2505LM
+usb:v091Ep2613*
+ ID_MODEL_FROM_DATABASE=Edge 200 TWN
+
usb:v091Ep26A1*
ID_MODEL_FROM_DATABASE=Nuvi 55
+usb:v091Ep2802*
+ ID_MODEL_FROM_DATABASE=fenix 3
+
+usb:v091Ep28DB*
+ ID_MODEL_FROM_DATABASE=Drive 5
+
usb:v091Ep47FB*
ID_MODEL_FROM_DATABASE=nuviCam
+usb:v091Ep4CDB*
+ ID_MODEL_FROM_DATABASE=Fenix 6
+
usb:v0920*
ID_VENDOR_FROM_DATABASE=Echelon Co.
usb:v0922p0009*
ID_MODEL_FROM_DATABASE=LabelWriter 310
+usb:v0922p0013*
+ ID_MODEL_FROM_DATABASE=LabelManager 400
+
usb:v0922p0019*
ID_MODEL_FROM_DATABASE=LabelWriter 400
usb:v0922p0020*
ID_MODEL_FROM_DATABASE=LabelWriter 450
+usb:v0922p0400*
+ ID_MODEL_FROM_DATABASE=LabelWriter SE450
+
usb:v0922p1001*
ID_MODEL_FROM_DATABASE=LabelManager PnP
+usb:v0922p8003*
+ ID_MODEL_FROM_DATABASE=M10 Digital Postal Scale
+
usb:v0922p8004*
ID_MODEL_FROM_DATABASE=M25 Digital Postal Scale
+usb:v0922p8009*
+ ID_MODEL_FROM_DATABASE=S250 Digital Postal Scale
+
usb:v0923*
ID_VENDOR_FROM_DATABASE=IC Media Corp.
usb:v0925p03E8*
ID_MODEL_FROM_DATABASE=Wii Classic Controller Adapter
+usb:v0925p1031*
+ ID_MODEL_FROM_DATABASE=WiseGroup Ltd, Gameport Controller
+
+usb:v0925p1700*
+ ID_MODEL_FROM_DATABASE=PS/SS/N64 Joypad
+
usb:v0925p3881*
ID_MODEL_FROM_DATABASE=Saleae Logic
usb:v092B*
ID_VENDOR_FROM_DATABASE=Sena Technologies, Inc.
+usb:v092Bp4210*
+ ID_MODEL_FROM_DATABASE=20S - Bluetooth Motorcycle headset & universal intercom
+
usb:v092F*
ID_VENDOR_FROM_DATABASE=Northern Embedded Science/CAVNEX
ID_MODEL_FROM_DATABASE=Pocket PC e330 Series
usb:v0930p0708*
- ID_MODEL_FROM_DATABASE=Pocket PC e350 Series
+ ID_MODEL_FROM_DATABASE=Pocket PC e350 Series
usb:v0930p0709*
ID_MODEL_FROM_DATABASE=Pocket PC e750 Series
usb:v0930p1400*
ID_MODEL_FROM_DATABASE=Memory Stick 2GB
+usb:v0930p140B*
+ ID_MODEL_FROM_DATABASE=Memory Stick 64GB
+
usb:v0930p642F*
ID_MODEL_FROM_DATABASE=TravelDrive
usb:v0930p6545*
ID_MODEL_FROM_DATABASE=Kingston DataTraveler 102/2.0 / HEMA Flash Drive 2 GB / PNY Attache 4GB Stick
+usb:v0930pA002*
+ ID_MODEL_FROM_DATABASE=SunplusIT SATA bridge
+
usb:v0931*
ID_VENDOR_FROM_DATABASE=Harmonic Data Systems, Ltd
usb:v0939p0B15*
ID_MODEL_FROM_DATABASE=Toshiba Stor.E Alu 2
+usb:v0939p0B16*
+ ID_MODEL_FROM_DATABASE=Toshiba StorE HDD
+
usb:v093A*
ID_VENDOR_FROM_DATABASE=Pixart Imaging, Inc.
usb:v093Ap2624*
ID_MODEL_FROM_DATABASE=Webcam
+usb:v093Ap2628*
+ ID_MODEL_FROM_DATABASE=Webcam Genius iLook 300
+
+usb:v093Ap2700*
+ ID_MODEL_FROM_DATABASE=GE 1.3 MP MiniCam Pro
+
usb:v093B*
ID_VENDOR_FROM_DATABASE=Plextor Corp.
usb:v093Bp0011*
ID_MODEL_FROM_DATABASE=PlexWriter 40/12/40U
+usb:v093Bp0012*
+ ID_MODEL_FROM_DATABASE=PlexWriter 48/24/48U
+
usb:v093Bp0041*
ID_MODEL_FROM_DATABASE=PX-708A DVD RW
usb:v0951p000A*
ID_MODEL_FROM_DATABASE=KNU101TX 100baseTX Ethernet
+usb:v0951p1539*
+ ID_MODEL_FROM_DATABASE=Iron Key D300 (Virtual CD-ROM and USB Stick)
+
usb:v0951p1600*
ID_MODEL_FROM_DATABASE=DataTraveler II Pen Drive
ID_MODEL_FROM_DATABASE=Data Traveller 108
usb:v0951p1665*
- ID_MODEL_FROM_DATABASE=Digital DataTraveler SE9 64GB
+ ID_MODEL_FROM_DATABASE=Digital DataTraveler SE9
usb:v0951p1666*
- ID_MODEL_FROM_DATABASE=DataTraveler 100 G3/G4/SE9 G2
+ ID_MODEL_FROM_DATABASE=DataTraveler 100 G3/G4/SE9 G2/50
usb:v0951p1689*
ID_MODEL_FROM_DATABASE=DataTraveler SE9
usb:v0951p168C*
ID_MODEL_FROM_DATABASE=DT Elite 3.0
+usb:v0951p16A4*
+ ID_MODEL_FROM_DATABASE=HyperX 7.1 Audio
+
usb:v0951p16B3*
ID_MODEL_FROM_DATABASE=HyperX Savage
+usb:v0951p16D2*
+ ID_MODEL_FROM_DATABASE=HX-KB4BL1-US [HYPERX Alloy FPS Pro]
+
+usb:v0951p16D4*
+ ID_MODEL_FROM_DATABASE=HyperX SavageEXO [0382]
+
+usb:v0951p16D5*
+ ID_MODEL_FROM_DATABASE=DataTraveler Elite G2
+
+usb:v0951p16DF*
+ ID_MODEL_FROM_DATABASE=HyperX QuadCast
+
+usb:v0951p16E4*
+ ID_MODEL_FROM_DATABASE=HyperX Pulsefire Raid
+
usb:v0954*
ID_VENDOR_FROM_DATABASE=RPM Systems Corp.
usb:v0955*
ID_VENDOR_FROM_DATABASE=NVIDIA Corp.
+usb:v0955p7005*
+ ID_MODEL_FROM_DATABASE=Bootloader
+
usb:v0955p7018*
ID_MODEL_FROM_DATABASE=T186 [Tegra Parker]
usb:v0955p7210*
ID_MODEL_FROM_DATABASE=SHIELD Controller
+usb:v0955p7321*
+ ID_MODEL_FROM_DATABASE=Switch [Tegra Erista] recovery mode
+
usb:v0955p7721*
- ID_MODEL_FROM_DATABASE=T210 [Tegra Erista]
+ ID_MODEL_FROM_DATABASE=T210 [TX1 Tegra Erista] recovery mode
usb:v0955p7820*
ID_MODEL_FROM_DATABASE=T20 [Tegra 2] recovery mode
+usb:v0955p7C18*
+ ID_MODEL_FROM_DATABASE=T186 [TX2 Tegra Parker] recovery mode
+
usb:v0955pB400*
ID_MODEL_FROM_DATABASE=SHIELD (debug)
usb:v0957p1745*
ID_MODEL_FROM_DATABASE=Test and Measurement Device (IVI)
+usb:v0957p1F01*
+ ID_MODEL_FROM_DATABASE=N5181A MXG Analog Signal Generator
+
usb:v0957p2918*
ID_MODEL_FROM_DATABASE=U2702A oscilloscope
usb:v096Ep0401*
ID_MODEL_FROM_DATABASE=ePass3000
+usb:v096Ep0405*
+ ID_MODEL_FROM_DATABASE=Zzkey Dongle
+
+usb:v096Ep0608*
+ ID_MODEL_FROM_DATABASE=SC Reader KP382
+
usb:v096Ep0702*
ID_MODEL_FROM_DATABASE=ePass3003
usb:v0984p0200*
ID_MODEL_FROM_DATABASE=Hard Drive Storage (TPP)
+usb:v0984p1407*
+ ID_MODEL_FROM_DATABASE=Secure Key 3.0
+
usb:v0985*
ID_VENDOR_FROM_DATABASE=cab Produkttechnik GmbH & Co KG
usb:v099Ap0638*
ID_MODEL_FROM_DATABASE=Sanwa Supply Inc. Small Keyboard
+usb:v099Ap2620*
+ ID_MODEL_FROM_DATABASE=Graphics tablet [Polostar PT1001, Zeniq PT1001, Leogics PT1001]
+
usb:v099Ap610C*
ID_MODEL_FROM_DATABASE=EL-610 Super Mini Electron luminescent Keyboard
+usb:v099Ap6330*
+ ID_MODEL_FROM_DATABASE=SANWA Supply Inc. Slim Keyboard
+
usb:v099Ap713A*
ID_MODEL_FROM_DATABASE=WK-713 Multimedia Keyboard
usb:v09AE*
ID_VENDOR_FROM_DATABASE=Tripp Lite
+usb:v09AEp0002*
+ ID_MODEL_FROM_DATABASE=Any Device (see discussion)
+
+usb:v09B0*
+ ID_VENDOR_FROM_DATABASE=Fargo
+
+usb:v09B0p2400*
+ ID_MODEL_FROM_DATABASE=HDP5000
+
usb:v09B2*
ID_VENDOR_FROM_DATABASE=Franklin Electronic Publishers, Inc.
usb:v09CBp1996*
ID_MODEL_FROM_DATABASE=FLIR ONE Camera
+usb:v09CBp4007*
+ ID_MODEL_FROM_DATABASE=Breach
+
usb:v09CC*
ID_VENDOR_FROM_DATABASE=Workbit Corp.
ID_MODEL_FROM_DATABASE=ISDN TA / Light Rider 128K
usb:v09D3p000B*
- ID_MODEL_FROM_DATABASE=Bluetooth Adapter class 1 [BlueLight]
+ ID_MODEL_FROM_DATABASE=Bluetooth Adapter class 2
usb:v09D7*
- ID_VENDOR_FROM_DATABASE=NovAtel Inc.
+ ID_VENDOR_FROM_DATABASE=Hexagon NovAtel Inc.
usb:v09D7p0100*
- ID_MODEL_FROM_DATABASE=NovAtel FlexPack GPS receiver
+ ID_MODEL_FROM_DATABASE=GPS/GNSS/SPAN sensor
usb:v09D8*
- ID_VENDOR_FROM_DATABASE=ELATEC
+ ID_VENDOR_FROM_DATABASE=ELATEC GmbH
+
+usb:v09D8p0320*
+ ID_MODEL_FROM_DATABASE=TWN3 Multi125
usb:v09D8p0406*
ID_MODEL_FROM_DATABASE=TWN4 MIFARE NFC
usb:v09DAp032B*
ID_MODEL_FROM_DATABASE=Wireless Mouse (Battery Free)
+usb:v09DAp09DA*
+ ID_MODEL_FROM_DATABASE=Bloody V8 Mouse
+
usb:v09DAp1068*
ID_MODEL_FROM_DATABASE=Bloody A90 Mouse
+usb:v09DAp112C*
+ ID_MODEL_FROM_DATABASE=Bloody V5 Mouse
+
+usb:v09DAp3A60*
+ ID_MODEL_FROM_DATABASE=Bloody V8M Core 2 Mouse
+
usb:v09DAp8090*
ID_MODEL_FROM_DATABASE=X-718BK Oscar Optical Gaming Mouse
usb:v09DAp9090*
ID_MODEL_FROM_DATABASE=XL-730K / XL-750BK / XL-755BK Mice
+usb:v09DApF613*
+ ID_MODEL_FROM_DATABASE=Bloody V7M Mouse
+
usb:v09DB*
ID_VENDOR_FROM_DATABASE=Measurement Computing Corp.
usb:v09E8*
ID_VENDOR_FROM_DATABASE=AKAI Professional M.I. Corp.
+usb:v09E8p0045*
+ ID_MODEL_FROM_DATABASE=MPK Mini Mk II MIDI Controller
+
usb:v09E8p0062*
ID_MODEL_FROM_DATABASE=MPD16 MIDI Pad Controller Unit
usb:v0A4A*
ID_VENDOR_FROM_DATABASE=Ploytec GmbH
+usb:v0A4ApA400*
+ ID_MODEL_FROM_DATABASE=AUDIO JUNCTION 2.0
+
usb:v0A4B*
ID_VENDOR_FROM_DATABASE=Fujitsu Media Devices, Ltd
usb:v0A5Cp0201*
ID_MODEL_FROM_DATABASE=iLine10(tm) Network Adapter
+usb:v0A5Cp0BDC*
+ ID_MODEL_FROM_DATABASE=802.11a/b/g/n/ac Wireless Adapter
+
usb:v0A5Cp2000*
ID_MODEL_FROM_DATABASE=Bluetooth Device
usb:v0A5Cp21E8*
ID_MODEL_FROM_DATABASE=BCM20702A0 Bluetooth 4.0
+usb:v0A5Cp21EC*
+ ID_MODEL_FROM_DATABASE=BCM20702A0 Bluetooth 4.0
+
usb:v0A5Cp21F1*
ID_MODEL_FROM_DATABASE=HP Portable Bumble Bee
usb:v0A5Fp0009*
ID_MODEL_FROM_DATABASE=LP2844 Printer
+usb:v0A5Fp0050*
+ ID_MODEL_FROM_DATABASE=P120i / WM120i
+
usb:v0A5Fp0081*
ID_MODEL_FROM_DATABASE=GK420t Label Printer
+usb:v0A5Fp0084*
+ ID_MODEL_FROM_DATABASE=GX420d Desktop Label Printer
+
usb:v0A5Fp008B*
ID_MODEL_FROM_DATABASE=HC100 wristbands Printer
usb:v0A5Fp00D1*
ID_MODEL_FROM_DATABASE=Zebra GC420d Label Printer
+usb:v0A5Fp0110*
+ ID_MODEL_FROM_DATABASE=ZD500 Desktop Label Printer
+
usb:v0A5Fp930A*
ID_MODEL_FROM_DATABASE=Printer
usb:v0AC8pC33F*
ID_MODEL_FROM_DATABASE=Webcam
+usb:v0AC8pC412*
+ ID_MODEL_FROM_DATABASE=Lenovo IdeaCentre Web Camera
+
usb:v0AC8pC429*
ID_MODEL_FROM_DATABASE=Lenovo ThinkCentre Web Camera
usb:v0B05p1791*
ID_MODEL_FROM_DATABASE=WL-167G v3 802.11n Adapter [Realtek RTL8188SU]
+usb:v0B05p179C*
+ ID_MODEL_FROM_DATABASE=Bluetooth Adapter
+
usb:v0B05p179D*
ID_MODEL_FROM_DATABASE=USB-N53 802.11abgn Network Adapter [Ralink RT3572]
usb:v0B05p17BA*
ID_MODEL_FROM_DATABASE=N10 Nano 802.11n Network Adapter [Realtek RTL8192CU]
+usb:v0B05p17C2*
+ ID_MODEL_FROM_DATABASE=ROG Spitfire
+
usb:v0B05p17C7*
ID_MODEL_FROM_DATABASE=WL-330NUL
usb:v0B05p17EB*
ID_MODEL_FROM_DATABASE=USB-AC55 802.11a/b/g/n/ac Wireless Adapter [MediaTek MT7612U]
+usb:v0B05p17F5*
+ ID_MODEL_FROM_DATABASE=Xonar U5 sound card
+
usb:v0B05p180A*
ID_MODEL_FROM_DATABASE=Broadcom BCM20702 Single-Chip Bluetooth 4.0 + LE
usb:v0B05p1825*
ID_MODEL_FROM_DATABASE=Qualcomm Bluetooth 4.1
+usb:v0B05p18F0*
+ ID_MODEL_FROM_DATABASE=Realtek 8188EUS [USB-N10 Nano]
+
usb:v0B05p4C80*
ID_MODEL_FROM_DATABASE=Transformer Pad TF300TG
usb:v0B0E*
ID_VENDOR_FROM_DATABASE=GN Netcom
+usb:v0B0Ep0305*
+ ID_MODEL_FROM_DATABASE=Jabra EVOLVE Link MS
+
+usb:v0B0Ep0311*
+ ID_MODEL_FROM_DATABASE=Jabra EVOLVE 65
+
+usb:v0B0Ep0312*
+ ID_MODEL_FROM_DATABASE=enc060:Buttons Volume up/down/mute + phone [Jabra]
+
+usb:v0B0Ep0343*
+ ID_MODEL_FROM_DATABASE=Jabra UC VOICE 150a
+
usb:v0B0Ep0348*
ID_MODEL_FROM_DATABASE=Jabra UC VOICE 550a MS
usb:v0B0Ep034C*
ID_MODEL_FROM_DATABASE=Jabra UC Voice 750 MS
+usb:v0B0Ep034D*
+ ID_MODEL_FROM_DATABASE=Jabra UC VOICE 750
+
usb:v0B0Ep0410*
ID_MODEL_FROM_DATABASE=Jabra SPEAK 410
usb:v0B0Ep0420*
ID_MODEL_FROM_DATABASE=Jabra SPEAK 510
+usb:v0B0Ep0422*
+ ID_MODEL_FROM_DATABASE=Jabra SPEAK 510 USB
+
+usb:v0B0Ep0933*
+ ID_MODEL_FROM_DATABASE=Jabra Freeway
+
usb:v0B0Ep094D*
ID_MODEL_FROM_DATABASE=GN Netcom / Jabra REVO Wireless
usb:v0B0Ep2007*
ID_MODEL_FROM_DATABASE=GN 2000 Stereo Corded Headset
+usb:v0B0Ep2456*
+ ID_MODEL_FROM_DATABASE=Jabra SPEAK 810
+
+usb:v0B0Ep245E*
+ ID_MODEL_FROM_DATABASE=Jabra Link 370
+
usb:v0B0Ep620C*
ID_MODEL_FROM_DATABASE=Jabra BT620s
usb:v0B0Ep9330*
ID_MODEL_FROM_DATABASE=Jabra GN9330 Headset
+usb:v0B0EpA346*
+ ID_MODEL_FROM_DATABASE=Jabra Engage 75 Stereo
+
+usb:v0B0EpA50A*
+ ID_MODEL_FROM_DATABASE=Alienware Wireless Gaming Headset AW988
+
usb:v0B0F*
ID_VENDOR_FROM_DATABASE=AVID Technology
+usb:v0B0Fp0400*
+ ID_MODEL_FROM_DATABASE=DNxID
+
usb:v0B10*
ID_VENDOR_FROM_DATABASE=Pcally
usb:v0B33p0700*
ID_MODEL_FROM_DATABASE=RollerMouse Pro
+usb:v0B33p08A0*
+ ID_MODEL_FROM_DATABASE=Perfit Mouse
+
+usb:v0B33p1000*
+ ID_MODEL_FROM_DATABASE=RollerMouse Red
+
+usb:v0B33p1010*
+ ID_MODEL_FROM_DATABASE=Vidamic Technomouse IQ
+
usb:v0B37*
ID_VENDOR_FROM_DATABASE=Hitachi ULSI Systems Co., Ltd
usb:v0B4Dp110A*
ID_MODEL_FROM_DATABASE=Graphtec CC200-20
+usb:v0B4Dp1123*
+ ID_MODEL_FROM_DATABASE=Electronic Cutting Tool [Silhouette Portrait]
+
usb:v0B4E*
ID_VENDOR_FROM_DATABASE=Musical Electronics, Ltd
usb:v0B95p1790*
ID_MODEL_FROM_DATABASE=AX88179 Gigabit Ethernet
+usb:v0B95p6802*
+ ID_MODEL_FROM_DATABASE=AX68002 KVM Switch SoC
+
usb:v0B95p7720*
ID_MODEL_FROM_DATABASE=AX88772
usb:v0BB4p00CF*
ID_MODEL_FROM_DATABASE=SPV C500 Smart Phone
+usb:v0BB4p0306*
+ ID_MODEL_FROM_DATABASE=Vive Hub Bluetooth 4.1 (Broadcom BCM920703)
+
usb:v0BB4p0A01*
ID_MODEL_FROM_DATABASE=PocketPC Sync
ID_MODEL_FROM_DATABASE=Vario MDA
usb:v0BB4p0C01*
- ID_MODEL_FROM_DATABASE=Dream / ADP1 / G1 / Magic / Tattoo
+ ID_MODEL_FROM_DATABASE=Dream / ADP1 / G1 / Magic / Tattoo / FP1
usb:v0BB4p0C02*
ID_MODEL_FROM_DATABASE=Dream / ADP1 / G1 / Magic / Tattoo (Debug)
usb:v0BB4p0CA5*
ID_MODEL_FROM_DATABASE=Android Phone [Evo Shift 4G]
+usb:v0BB4p0CAB*
+ ID_MODEL_FROM_DATABASE=Desire / Desire HD / Hero / Thunderbolt (HTC Sync Mode)
+
usb:v0BB4p0CAE*
ID_MODEL_FROM_DATABASE=T-Mobile MyTouch 4G Slide [Doubleshot]
usb:v0BB4p0FB4*
ID_MODEL_FROM_DATABASE=Remote NDIS based Device
+usb:v0BB4p0FF0*
+ ID_MODEL_FROM_DATABASE=One Mini (M4)
+
usb:v0BB4p0FF8*
ID_MODEL_FROM_DATABASE=Desire HD (Tethering Mode)
ID_MODEL_FROM_DATABASE=Android Fastboot Bootloader
usb:v0BB4p2008*
- ID_MODEL_FROM_DATABASE=Android Phone via MTP [Wiko Cink Peax 2]
+ ID_MODEL_FROM_DATABASE=Android Phone via MTP [MT65xx]
usb:v0BB4p200B*
ID_MODEL_FROM_DATABASE=Android Phone via PTP [Wiko Cink Peax 2]
+usb:v0BB4p2134*
+ ID_MODEL_FROM_DATABASE=Vive Hub (SMSC USB2137B)
+
+usb:v0BB4p2744*
+ ID_MODEL_FROM_DATABASE=Vive Hub (HTC CB USB2)
+
+usb:v0BB4p2C87*
+ ID_MODEL_FROM_DATABASE=Vive
+
usb:v0BB5*
ID_VENDOR_FROM_DATABASE=Murata Manufacturing Co., Ltd
usb:v0BC2p231A*
ID_MODEL_FROM_DATABASE=Expansion Portable
+usb:v0BC2p231C*
+ ID_MODEL_FROM_DATABASE=Expansion Portable
+
usb:v0BC2p2320*
ID_MODEL_FROM_DATABASE=USB 3.0 bridge [Portable Expansion Drive]
usb:v0BC2p3312*
ID_MODEL_FROM_DATABASE=SRD00F2 Expansion Desktop Drive (STBV)
+usb:v0BC2p331A*
+ ID_MODEL_FROM_DATABASE=Desktop HDD 5TB (ST5000DM000)
+
usb:v0BC2p3320*
ID_MODEL_FROM_DATABASE=SRD00F2 [Expansion Desktop Drive]
usb:v0BC2p3322*
ID_MODEL_FROM_DATABASE=SRD0NF2 [Expansion Desktop Drive]
+usb:v0BC2p3323*
+ ID_MODEL_FROM_DATABASE=Seagate RSS LLC
+
usb:v0BC2p3332*
ID_MODEL_FROM_DATABASE=Expansion
+usb:v0BC2p3343*
+ ID_MODEL_FROM_DATABASE=desktop drive stgy8000400
+
usb:v0BC2p5020*
ID_MODEL_FROM_DATABASE=FreeAgent GoFlex
usb:v0BC2p6126*
ID_MODEL_FROM_DATABASE=Maxtor D3 Station 5TB
+usb:v0BC2p61B5*
+ ID_MODEL_FROM_DATABASE=Maxtor HX-M201TCB [M3 Portable 2TB]
+
usb:v0BC2p61B6*
ID_MODEL_FROM_DATABASE=Maxtor HX-M101TCB/GM [M3 Portable 1TB]
usb:v0BC2pA0A4*
ID_MODEL_FROM_DATABASE=Backup Plus Desktop Drive
+usb:v0BC2pAA14*
+ ID_MODEL_FROM_DATABASE=STJ4000400 [Seagate Basic Portable Drive 4TB]
+
usb:v0BC2pAB00*
ID_MODEL_FROM_DATABASE=Slim Portable Drive
usb:v0BC2pAB26*
ID_MODEL_FROM_DATABASE=Backup Plus Slim Portable Drive 1 TB
+usb:v0BC2pAB28*
+ ID_MODEL_FROM_DATABASE=Seagate Backup Plus Portable 5TB SRD00F1
+
+usb:v0BC2pAB2D*
+ ID_MODEL_FROM_DATABASE=SRD00F1 [Backup Plus Ultra Slim]
+
usb:v0BC2pAB31*
ID_MODEL_FROM_DATABASE=Backup Plus Desktop Drive (5TB)
ID_MODEL_FROM_DATABASE=Backup Plus
usb:v0BC2pAB38*
+ ID_MODEL_FROM_DATABASE=Backup Plus Hub (Mass Storage)
+
+usb:v0BC2pAB44*
ID_MODEL_FROM_DATABASE=Backup Plus Hub
+usb:v0BC2pAC20*
+ ID_MODEL_FROM_DATABASE=Backup Plus Slim 2TB
+
usb:v0BC3*
ID_VENDOR_FROM_DATABASE=IPWireless, Inc.
usb:v0BDAp0307*
ID_MODEL_FROM_DATABASE=Card Reader
+usb:v0BDAp0316*
+ ID_MODEL_FROM_DATABASE=Card Reader
+
usb:v0BDAp0326*
ID_MODEL_FROM_DATABASE=Card reader
+usb:v0BDAp0411*
+ ID_MODEL_FROM_DATABASE=Hub
+
+usb:v0BDAp0811*
+ ID_MODEL_FROM_DATABASE=Realtek 8812AU/8821AU 802.11ac WLAN Adapter [USB Wireless Dual-Band Adapter 2.4/5Ghz]
+
+usb:v0BDAp0821*
+ ID_MODEL_FROM_DATABASE=RTL8821A Bluetooth
+
usb:v0BDAp1724*
ID_MODEL_FROM_DATABASE=RTL8723AU 802.11n WLAN Adapter
+usb:v0BDAp1A2B*
+ ID_MODEL_FROM_DATABASE=RTL8188GU 802.11n WLAN Adapter (Driver CDROM Mode)
+
usb:v0BDAp2831*
ID_MODEL_FROM_DATABASE=RTL2831U DVB-T
usb:v0BDAp5401*
ID_MODEL_FROM_DATABASE=RTL 8153 USB 3.0 hub with gigabit ethernet
+usb:v0BDAp5411*
+ ID_MODEL_FROM_DATABASE=RTS5411 Hub
+
+usb:v0BDAp568C*
+ ID_MODEL_FROM_DATABASE=Integrated Webcam HD
+
usb:v0BDAp570C*
ID_MODEL_FROM_DATABASE=Asus laptop camera
usb:v0BDAp5775*
ID_MODEL_FROM_DATABASE=HP "Truevision HD" laptop camera
+usb:v0BDAp5776*
+ ID_MODEL_FROM_DATABASE=HP Truevision HD integrated webcam
+
usb:v0BDAp57B3*
ID_MODEL_FROM_DATABASE=Acer 640 × 480 laptop camera
+usb:v0BDAp57CC*
+ ID_MODEL_FROM_DATABASE=HD Webcam - Realtek Semiconductor
+
+usb:v0BDAp57CF*
+ ID_MODEL_FROM_DATABASE=HD WebCam
+
usb:v0BDAp57DA*
ID_MODEL_FROM_DATABASE=Built-In Video Camera
+usb:v0BDAp58C2*
+ ID_MODEL_FROM_DATABASE=Integrated Webcam HD
+
usb:v0BDAp58C8*
ID_MODEL_FROM_DATABASE=Integrated Webcam HD
usb:v0BDAp8199*
ID_MODEL_FROM_DATABASE=RTL8187SU 802.11g WLAN Adapter
+usb:v0BDAp8723*
+ ID_MODEL_FROM_DATABASE=RTL8723A Bluetooth
+
usb:v0BDAp8812*
ID_MODEL_FROM_DATABASE=RTL8812AU 802.11a/b/g/n/ac 2T2R DB WLAN Adapter
usb:v0BDAp8813*
ID_MODEL_FROM_DATABASE=RTL8814AU 802.11a/b/g/n/ac Wireless Adapter
+usb:v0BDAp881A*
+ ID_MODEL_FROM_DATABASE=RTL8812AU-VS 802.11a/b/g/n/ac 2T2R DB WLAN Adapter
+
+usb:v0BDAp8821*
+ ID_MODEL_FROM_DATABASE=RTL8821A Bluetooth
+
+usb:v0BDAp9210*
+ ID_MODEL_FROM_DATABASE=RTL9210 M.2 NVME Adapter
+
usb:v0BDApA811*
ID_MODEL_FROM_DATABASE=RTL8811AU 802.11a/b/g/n/ac WLAN Adapter
+usb:v0BDApB009*
+ ID_MODEL_FROM_DATABASE=Realtek Bluetooth 4.2 Adapter
+
+usb:v0BDApB00A*
+ ID_MODEL_FROM_DATABASE=Realtek Bluetooth 4.2 Adapter
+
+usb:v0BDApB00B*
+ ID_MODEL_FROM_DATABASE=Realtek Bluetooth 4.2 Adapter
+
+usb:v0BDApB023*
+ ID_MODEL_FROM_DATABASE=RTL8822BE Bluetooth 4.2 Adapter
+
+usb:v0BDApB711*
+ ID_MODEL_FROM_DATABASE=RTL8188GU 802.11n WLAN Adapter (After Modeswitch)
+
+usb:v0BDApB720*
+ ID_MODEL_FROM_DATABASE=RTL8723BU 802.11b/g/n WLAN Adapter
+
+usb:v0BDApB723*
+ ID_MODEL_FROM_DATABASE=RTL8723B Bluetooth
+
+usb:v0BDApB728*
+ ID_MODEL_FROM_DATABASE=RTL8723B Bluetooth
+
+usb:v0BDApB72A*
+ ID_MODEL_FROM_DATABASE=RTL8723B Bluetooth
+
+usb:v0BDApB812*
+ ID_MODEL_FROM_DATABASE=RTL88x2bu [AC1200 Techkey]
+
usb:v0BDB*
ID_VENDOR_FROM_DATABASE=Ericsson Business Mobile Networks BV
ID_MODEL_FROM_DATABASE=C3607w v2 Mobile Broadband Module
usb:v0BDBp1926*
- ID_MODEL_FROM_DATABASE=H5321 gw Mobile Broadband Driver
+ ID_MODEL_FROM_DATABASE=H5321 gw Mobile Broadband Module
usb:v0BDC*
ID_VENDOR_FROM_DATABASE=Y Media Corp.
usb:v0BF0*
ID_VENDOR_FROM_DATABASE=Pace Micro Technology PLC
+usb:v0BF0pC010*
+ ID_MODEL_FROM_DATABASE=EHD100SD
+
usb:v0BF1*
ID_VENDOR_FROM_DATABASE=Intracom S.A.
usb:v0BF8p101F*
ID_MODEL_FROM_DATABASE=Fujitsu Full HD Pro Webcam
+usb:v0BFB*
+ ID_VENDOR_FROM_DATABASE=Grass Valley Group
+
+usb:v0BFBp0200*
+ ID_MODEL_FROM_DATABASE=TURBO iDDR Front Panel
+
usb:v0BFD*
ID_VENDOR_FROM_DATABASE=Kvaser AB
usb:v0C0A*
ID_VENDOR_FROM_DATABASE=Highpoint Technologies, Inc.
+usb:v0C0Ap6124*
+ ID_MODEL_FROM_DATABASE=RocketStor 6124V
+
usb:v0C0B*
ID_VENDOR_FROM_DATABASE=Dura Micro, Inc. (Acomdata)
ID_VENDOR_FROM_DATABASE=Zeroplus
usb:v0C12p0005*
- ID_MODEL_FROM_DATABASE=PSX Vibration Feedback Converter
+ ID_MODEL_FROM_DATABASE=PSX Vibration Feedback Converter / Intec Wireless Controller for Xbox
usb:v0C12p0030*
ID_MODEL_FROM_DATABASE=PSX Vibration Feedback Converter
ID_MODEL_FROM_DATABASE=Logic Analyzer (LAP-C-16032)
usb:v0C12p8801*
- ID_MODEL_FROM_DATABASE=Xbox Controller
+ ID_MODEL_FROM_DATABASE=Nyko Xbox Controller
usb:v0C12p8802*
ID_MODEL_FROM_DATABASE=Xbox Controller
usb:v0C1C*
ID_VENDOR_FROM_DATABASE=Hang Zhou Silan Electronics Co., Ltd
+usb:v0C1F*
+ ID_VENDOR_FROM_DATABASE=Magicard
+
+usb:v0C1Fp1800*
+ ID_MODEL_FROM_DATABASE=Tango 2E
+
usb:v0C22*
ID_VENDOR_FROM_DATABASE=Tally Printer Corp.
usb:v0C26p0018*
ID_MODEL_FROM_DATABASE=USB-Serial Controller [Icom Inc. OPC-478UC]
+usb:v0C26p002B*
+ ID_MODEL_FROM_DATABASE=Icom Inc. IC-R30
+
usb:v0C27*
ID_VENDOR_FROM_DATABASE=RFIDeas, Inc
+usb:v0C27p232A*
+ ID_MODEL_FROM_DATABASE=pcProx Plus RFID Reader (CDC serial)
+
usb:v0C27p3BFA*
ID_MODEL_FROM_DATABASE=pcProx Card Reader
usb:v0C2Ep0720*
ID_MODEL_FROM_DATABASE=Metrologic MS7120 Barcode Scanner (bi-directional serial mode)
+usb:v0C2Ep0A64*
+ ID_MODEL_FROM_DATABASE=[Stratos 2700]
+
usb:v0C2Ep0B61*
ID_MODEL_FROM_DATABASE=Vuquest 3310g
usb:v0C45p184C*
ID_MODEL_FROM_DATABASE=VoIP Phone
+usb:v0C45p1A90*
+ ID_MODEL_FROM_DATABASE=2M pixel Microscope Camera (with capture button) [Andonstar V160]
+
+usb:v0C45p5101*
+ ID_MODEL_FROM_DATABASE=2.4G Wireless Device [Rii MX3]
+
usb:v0C45p6001*
ID_MODEL_FROM_DATABASE=Genius VideoCAM NB
usb:v0C45p6310*
ID_MODEL_FROM_DATABASE=Sonix USB 2.0 Camera
+usb:v0C45p6321*
+ ID_MODEL_FROM_DATABASE=HP Integrated Webcam
+
usb:v0C45p6340*
ID_MODEL_FROM_DATABASE=Camera
usb:v0C45p6341*
ID_MODEL_FROM_DATABASE=Defender G-Lens 2577 HD720p Camera
+usb:v0C45p6366*
+ ID_MODEL_FROM_DATABASE=Webcam Vitade AF
+
usb:v0C45p63E0*
ID_MODEL_FROM_DATABASE=Sonix Integrated Webcam
usb:v0C45p648B*
ID_MODEL_FROM_DATABASE=Integrated Webcam
+usb:v0C45p64AD*
+ ID_MODEL_FROM_DATABASE=Dell Laptop Integrated Webcam HD
+
usb:v0C45p64BD*
ID_MODEL_FROM_DATABASE=Sony Visual Communication Camera
usb:v0C45p651B*
ID_MODEL_FROM_DATABASE=HP Webcam
+usb:v0C45p652F*
+ ID_MODEL_FROM_DATABASE=Backlit Gaming Keyboard
+
usb:v0C45p6705*
ID_MODEL_FROM_DATABASE=Integrated HD Webcam
+usb:v0C45p670C*
+ ID_MODEL_FROM_DATABASE=Integrated Webcam HD
+
usb:v0C45p6710*
ID_MODEL_FROM_DATABASE=Integrated Webcam
+usb:v0C45p6712*
+ ID_MODEL_FROM_DATABASE=Integrated Webcam HD
+
+usb:v0C45p671D*
+ ID_MODEL_FROM_DATABASE=Integrated_Webcam_HD
+
usb:v0C45p7401*
ID_MODEL_FROM_DATABASE=TEMPer Temperature Sensor
usb:v0C76p1607*
ID_MODEL_FROM_DATABASE=audio controller
+usb:v0C76p5663*
+ ID_MODEL_FROM_DATABASE=Audio Device
+
usb:v0C77*
ID_VENDOR_FROM_DATABASE=Sipix Group, Ltd
usb:v0C9B*
ID_VENDOR_FROM_DATABASE=Jobin Yvon, Inc.
+usb:v0C9C*
+ ID_VENDOR_FROM_DATABASE=Brand Innovators BV
+
+usb:v0C9Cp1511*
+ ID_MODEL_FROM_DATABASE=BI-1511 Laser Simulator
+
+usb:v0C9Cp1512*
+ ID_MODEL_FROM_DATABASE=BI-1512 Syncbus Monitor
+
+usb:v0C9Cp1514*
+ ID_MODEL_FROM_DATABASE=BI-1514 HPC
+
+usb:v0C9Cp1532*
+ ID_MODEL_FROM_DATABASE=BI-1532 GPC
+
usb:v0C9D*
ID_VENDOR_FROM_DATABASE=SemTek
usb:v0CA7*
ID_VENDOR_FROM_DATABASE=Information Systems Laboratories
+usb:v0CAA*
+ ID_VENDOR_FROM_DATABASE=Allied Telesis KK.
+
+usb:v0CAAp3001*
+ ID_MODEL_FROM_DATABASE=AT-VT-Kit3 Serial Adapter
+
usb:v0CAD*
ID_VENDOR_FROM_DATABASE=Motorola CGISS
ID_MODEL_FROM_DATABASE=IMPRES Battery Data Reader
usb:v0CADp9001*
- ID_MODEL_FROM_DATABASE=PowerPad Pocket PC Device
+ ID_MODEL_FROM_DATABASE=PowerPad Pocket PC Device
usb:v0CAE*
ID_VENDOR_FROM_DATABASE=Ascom Business Systems, Ltd
usb:v0CCDp00B3*
ID_MODEL_FROM_DATABASE=NOXON DAB/DAB+ Stick
+usb:v0CCDp00B9*
+ ID_MODEL_FROM_DATABASE=WDR DAB/DAB+ Stick
+
usb:v0CCDp00E0*
ID_MODEL_FROM_DATABASE=NOXON DAB/DAB+ Stick V2
usb:v0CCDp10A7*
ID_MODEL_FROM_DATABASE=TerraTec G3
+usb:v0CCDp10AD*
+ ID_MODEL_FROM_DATABASE=Cinergy H5 Rev. 2
+
usb:v0CD4*
ID_VENDOR_FROM_DATABASE=Bang Olufsen
usb:v0CF3p0006*
ID_MODEL_FROM_DATABASE=AR5523 (no firmware)
+usb:v0CF3p0036*
+ ID_MODEL_FROM_DATABASE=AR9462 Bluetooth
+
usb:v0CF3p1001*
ID_MODEL_FROM_DATABASE=Thomson TG121N [Atheros AR9001U-(2)NG]
usb:v0CF3p3008*
ID_MODEL_FROM_DATABASE=Bluetooth (AR3011)
+usb:v0CF3p311D*
+ ID_MODEL_FROM_DATABASE=Bluetooth
+
usb:v0CF3p311F*
ID_MODEL_FROM_DATABASE=AR3012 Bluetooth
usb:v0CF3p9271*
ID_MODEL_FROM_DATABASE=AR9271 802.11n
+usb:v0CF3p9378*
+ ID_MODEL_FROM_DATABASE=QCA9377-7
+
usb:v0CF3pB002*
ID_MODEL_FROM_DATABASE=Ubiquiti WiFiStation 802.11n [Atheros AR9271]
usb:v0CF3pE006*
ID_MODEL_FROM_DATABASE=Dell Wireless 1802 Bluetooth 4.0 LE
+usb:v0CF3pE300*
+ ID_MODEL_FROM_DATABASE=QCA61x4 Bluetooth 4.0
+
usb:v0CF4*
ID_VENDOR_FROM_DATABASE=Fomtex Corp.
usb:v0D16p0004*
ID_MODEL_FROM_DATABASE=Photo Printer 63xPL/PS
+usb:v0D16p0007*
+ ID_MODEL_FROM_DATABASE=P510K
+
+usb:v0D16p0009*
+ ID_MODEL_FROM_DATABASE=P72x Series
+
+usb:v0D16p000A*
+ ID_MODEL_FROM_DATABASE=P728L
+
+usb:v0D16p000B*
+ ID_MODEL_FROM_DATABASE=P510L
+
+usb:v0D16p000D*
+ ID_MODEL_FROM_DATABASE=P518A
+
usb:v0D16p000E*
ID_MODEL_FROM_DATABASE=P910L
+usb:v0D16p0010*
+ ID_MODEL_FROM_DATABASE=M610
+
usb:v0D16p0100*
ID_MODEL_FROM_DATABASE=Photo Printer 63xPL/PS
usb:v0D16p0105*
ID_MODEL_FROM_DATABASE=Photo Printer 64xPS
+usb:v0D16p010E*
+ ID_MODEL_FROM_DATABASE=P510S
+
+usb:v0D16p0110*
+ ID_MODEL_FROM_DATABASE=P110S
+
+usb:v0D16p0111*
+ ID_MODEL_FROM_DATABASE=P510Si
+
+usb:v0D16p0112*
+ ID_MODEL_FROM_DATABASE=P518S
+
usb:v0D16p0200*
ID_MODEL_FROM_DATABASE=Photo Printer 64xDL
+usb:v0D16p0309*
+ ID_MODEL_FROM_DATABASE=CS-200e
+
+usb:v0D16p030A*
+ ID_MODEL_FROM_DATABASE=CS-220e
+
+usb:v0D16p0501*
+ ID_MODEL_FROM_DATABASE=P75x Series
+
+usb:v0D16p0502*
+ ID_MODEL_FROM_DATABASE=P52x Series
+
+usb:v0D16p0503*
+ ID_MODEL_FROM_DATABASE=P310L
+
+usb:v0D16p050A*
+ ID_MODEL_FROM_DATABASE=P310W
+
+usb:v0D16p050F*
+ ID_MODEL_FROM_DATABASE=P530D
+
+usb:v0D16p0800*
+ ID_MODEL_FROM_DATABASE=X610
+
usb:v0D17*
ID_VENDOR_FROM_DATABASE=NALTEC, Inc.
usb:v0D28p0204*
ID_MODEL_FROM_DATABASE=ARM mbed
+usb:v0D2F*
+ ID_VENDOR_FROM_DATABASE=Andamiro
+
+usb:v0D2Fp0002*
+ ID_MODEL_FROM_DATABASE=Pump It Up Pad
+
usb:v0D32*
ID_VENDOR_FROM_DATABASE=Leo Hui Electric Wire & Cable Co., Ltd
usb:v0D49p3000*
ID_MODEL_FROM_DATABASE=Drive
+usb:v0D49p3005*
+ ID_MODEL_FROM_DATABASE=Personal Storage 3000LS
+
usb:v0D49p3010*
ID_MODEL_FROM_DATABASE=3000LE Drive
usb:v0D50p0011*
ID_MODEL_FROM_DATABASE=USB-Temp2 Thermometer
+usb:v0D50p0030*
+ ID_MODEL_FROM_DATABASE=Multiplexer
+
usb:v0D50p0040*
ID_MODEL_FROM_DATABASE=F4 foot switch
usb:v0D57*
ID_VENDOR_FROM_DATABASE=Solomon Microtech, Ltd
+usb:v0D59*
+ ID_VENDOR_FROM_DATABASE=TRC Simulators b.v.
+
+usb:v0D59p02A8*
+ ID_MODEL_FROM_DATABASE=Digital Clock
+
usb:v0D5C*
ID_VENDOR_FROM_DATABASE=SMC Networks, Inc.
usb:v0D62p2106*
ID_MODEL_FROM_DATABASE=Dell L20U Multimedia Keyboard
+usb:v0D62p910E*
+ ID_MODEL_FROM_DATABASE=HP Business Slim Keyboard
+
usb:v0D62pA100*
ID_MODEL_FROM_DATABASE=Optical Mouse
usb:v0D8Cp0003*
ID_MODEL_FROM_DATABASE=Sound Device
+usb:v0D8Cp0004*
+ ID_MODEL_FROM_DATABASE=CM6631A Audio Processor
+
usb:v0D8Cp0005*
ID_MODEL_FROM_DATABASE=Blue Snowball
usb:v0DA4p0001*
ID_MODEL_FROM_DATABASE=Interface
+usb:v0DA4p0003*
+ ID_MODEL_FROM_DATABASE=FlowLink
+
usb:v0DA4p0008*
ID_MODEL_FROM_DATABASE=Loop
usb:v0DB0pB97A*
ID_MODEL_FROM_DATABASE=Bluetooth EDR Device
+usb:v0DB0pFFFF*
+ ID_MODEL_FROM_DATABASE=Bluetooth Adapter in DFU mode
+
usb:v0DB1*
ID_VENDOR_FROM_DATABASE=Wen Te Electronics Co., Ltd
usb:v0DB5p0160*
ID_MODEL_FROM_DATABASE=NFC and Smartcard Module (NSM)
+usb:v0DB5p0164*
+ ID_MODEL_FROM_DATABASE=NFC and Smartcard Module (NSM)with 4 SAM slots
+
usb:v0DB7*
ID_VENDOR_FROM_DATABASE=ELCON Systemtechnik
usb:v0DC4p020A*
ID_MODEL_FROM_DATABASE=Oyen Digital MiniPro 2.5" hard drive enclosure
+usb:v0DC4p0290*
+ ID_MODEL_FROM_DATABASE=Mass Storage Device [NT2 U3.1]
+
usb:v0DC5*
ID_VENDOR_FROM_DATABASE=SDK Co., Ltd
usb:v0DD4*
ID_VENDOR_FROM_DATABASE=Custom Engineering SPA
+usb:v0DD4p0237*
+ ID_MODEL_FROM_DATABASE=K80 80mm Thermal Printer
+
usb:v0DD5*
ID_VENDOR_FROM_DATABASE=California Micro Devices
usb:v0DD8*
ID_VENDOR_FROM_DATABASE=Netac Technology Co., Ltd
+usb:v0DD8p0562*
+ ID_MODEL_FROM_DATABASE=Netac Portable SSD Z6s
+
usb:v0DD8p1060*
ID_MODEL_FROM_DATABASE=USB-CF-Card
ID_MODEL_FROM_DATABASE=OnlyDisk U222 Pendrive
usb:v0DD8pF607*
- ID_MODEL_FROM_DATABASE=OnlyDisk U208 1G flash drive [U-SAFE]
+ ID_MODEL_FROM_DATABASE=OnlyDisk U210 1G flash drive [U-SAFE]
usb:v0DD9*
ID_VENDOR_FROM_DATABASE=HighSpeed Surfing
usb:v0DFCp0001*
ID_MODEL_FROM_DATABASE=Touchscreen
+usb:v0DFCp0003*
+ ID_MODEL_FROM_DATABASE=MultiTouch TouchScreen(Dualtouch)
+
usb:v0DFCp0101*
ID_MODEL_FROM_DATABASE=5-point Touch Screen
+usb:v0DFCpD107*
+ ID_MODEL_FROM_DATABASE=MultiTouch TouchScreen
+
usb:v0E03*
ID_VENDOR_FROM_DATABASE=Nippon Systemware Co., Ltd
usb:v0E0Fp0006*
ID_MODEL_FROM_DATABASE=Virtual Keyboard
+usb:v0E0Fp000A*
+ ID_MODEL_FROM_DATABASE=Virtual Sensors
+
usb:v0E0Fp8001*
ID_MODEL_FROM_DATABASE=Root Hub
usb:v0E1B*
ID_VENDOR_FROM_DATABASE=Crewave
+usb:v0E1E*
+ ID_VENDOR_FROM_DATABASE=Green Hills Software
+
usb:v0E20*
ID_VENDOR_FROM_DATABASE=Pegasus Technologies Ltd.
usb:v0E4Cp1097*
ID_MODEL_FROM_DATABASE=Gamester Controller
+usb:v0E4Cp1103*
+ ID_MODEL_FROM_DATABASE=Gamester Reflex
+
usb:v0E4Cp2390*
- ID_MODEL_FROM_DATABASE=Games Jtech Controller
+ ID_MODEL_FROM_DATABASE=Jtech Controller
+
+usb:v0E4Cp3510*
+ ID_MODEL_FROM_DATABASE=Gamester for Xbox
usb:v0E4Cp7288*
ID_MODEL_FROM_DATABASE=funkey reader
usb:v0E6Ap0101*
ID_MODEL_FROM_DATABASE=MA100 [USB-UART Bridge IC]
+usb:v0E6Ap02C0*
+ ID_MODEL_FROM_DATABASE=Defender Gaming Keyboard
+
usb:v0E6Ap030B*
ID_MODEL_FROM_DATABASE=Truly Ergonomic Computer Keyboard (Device Firmware Update mode)
usb:v0E6Fp0006*
ID_MODEL_FROM_DATABASE=Edge wireless Controller
+usb:v0E6Fp0008*
+ ID_MODEL_FROM_DATABASE=After Glow Pro Controller
+
+usb:v0E6Fp0105*
+ ID_MODEL_FROM_DATABASE=Disney's High School Musical 3 Dance Pad for Xbox 360
+
+usb:v0E6Fp0113*
+ ID_MODEL_FROM_DATABASE=Afterglow AX.1 Gamepad
+
+usb:v0E6Fp011F*
+ ID_MODEL_FROM_DATABASE=Rock Candy Wired Controller for Xbox 360
+
usb:v0E6Fp0128*
ID_MODEL_FROM_DATABASE=Wireless PS3 Controller
+usb:v0E6Fp0131*
+ ID_MODEL_FROM_DATABASE=PDP EA Sports Controller
+
+usb:v0E6Fp0133*
+ ID_MODEL_FROM_DATABASE=Wired Controller
+
+usb:v0E6Fp0139*
+ ID_MODEL_FROM_DATABASE=Afterglow Prismatic Wired Controller for Xbox One
+
+usb:v0E6Fp013A*
+ ID_MODEL_FROM_DATABASE=PDP Xbox One Controller
+
+usb:v0E6Fp0146*
+ ID_MODEL_FROM_DATABASE=Rock Candy Wired Controller for Xbox One
+
+usb:v0E6Fp0147*
+ ID_MODEL_FROM_DATABASE=PDP Marvel Controller for Xbox One
+
+usb:v0E6Fp015C*
+ ID_MODEL_FROM_DATABASE=PDP Arcade Stick for Xbox One
+
+usb:v0E6Fp0161*
+ ID_MODEL_FROM_DATABASE=Camo Wired Controller for Xbox One
+
+usb:v0E6Fp0162*
+ ID_MODEL_FROM_DATABASE=Xbox One Wired Controller
+
+usb:v0E6Fp0163*
+ ID_MODEL_FROM_DATABASE=Legendary Collection Deliverer of Truth
+
+usb:v0E6Fp0164*
+ ID_MODEL_FROM_DATABASE=Battlefield 1 Wired Controller for Xbox One
+
+usb:v0E6Fp0165*
+ ID_MODEL_FROM_DATABASE=Titanfall 2 Wired Controller for Xbox One
+
+usb:v0E6Fp0201*
+ ID_MODEL_FROM_DATABASE=Pelican PL-3601
+
+usb:v0E6Fp0213*
+ ID_MODEL_FROM_DATABASE=Afterglow Gamepad for Xbox 360
+
+usb:v0E6Fp021F*
+ ID_MODEL_FROM_DATABASE=Rock Candy Gamepad for Xbox 360
+
+usb:v0E6Fp0246*
+ ID_MODEL_FROM_DATABASE=Rock Candy Gamepad for Xbox One
+
+usb:v0E6Fp0301*
+ ID_MODEL_FROM_DATABASE=Controller
+
+usb:v0E6Fp0346*
+ ID_MODEL_FROM_DATABASE=Rock Candy Wired Controller for Xbox One
+
+usb:v0E6Fp0401*
+ ID_MODEL_FROM_DATABASE=Controller
+
+usb:v0E6Fp0413*
+ ID_MODEL_FROM_DATABASE=Afterglow AX.1 Gamepad for Xbox 360
+
+usb:v0E6Fp0501*
+ ID_MODEL_FROM_DATABASE=Wired Controller
+
+usb:v0E6FpF501*
+ ID_MODEL_FROM_DATABASE=Hi-TEC Essentials Wired Gamepad
+
+usb:v0E6FpF900*
+ ID_MODEL_FROM_DATABASE=Afterglow AX.1
+
usb:v0E70*
ID_VENDOR_FROM_DATABASE=Tokyo Electronic Industry Co., Ltd
usb:v0E8D*
ID_VENDOR_FROM_DATABASE=MediaTek Inc.
+usb:v0E8Dp0002*
+ ID_MODEL_FROM_DATABASE=phone (mass storage mode) [Doro Primo 413]
+
usb:v0E8Dp0003*
ID_MODEL_FROM_DATABASE=MT6227 phone
ID_MODEL_FROM_DATABASE=MT6227 phone
usb:v0E8Dp0023*
- ID_MODEL_FROM_DATABASE=S103
+ ID_MODEL_FROM_DATABASE=S103 / Powertel M6200
usb:v0E8Dp00A5*
ID_MODEL_FROM_DATABASE=GSM modem [Medion Surfstick Model:S4222]
usb:v0E8Dp1836*
ID_MODEL_FROM_DATABASE=Samsung SE-S084 Super WriteMaster Slim External DVD writer
+usb:v0E8Dp1887*
+ ID_MODEL_FROM_DATABASE=Slim Portable DVD Writer
+
usb:v0E8Dp1956*
ID_MODEL_FROM_DATABASE=Samsung SE-506 Portable BluRay Disc Writer
usb:v0E8Dp2000*
ID_MODEL_FROM_DATABASE=MT65xx Preloader
+usb:v0E8Dp2008*
+ ID_MODEL_FROM_DATABASE=Cyrus Technology CS 24
+
usb:v0E8Dp3329*
ID_MODEL_FROM_DATABASE=Qstarz BT-Q1000XT
+usb:v0E8Dp7612*
+ ID_MODEL_FROM_DATABASE=MT7612U 802.11a/b/g/n/ac Wireless Adapter
+
usb:v0E8Dp763E*
ID_MODEL_FROM_DATABASE=MT7630e Bluetooth Adapter
+usb:v0E8Dp7668*
+ ID_MODEL_FROM_DATABASE=MT7668 2x2 Dual Band Dual Concurrent 802.11a/b/g/n/ac WiFi with MU-MIMO and Bluetooth 5.0 Radios
+
usb:v0E8F*
ID_VENDOR_FROM_DATABASE=GreenAsia Inc.
usb:v0E8Fp0201*
ID_MODEL_FROM_DATABASE=SmartJoy Frag Xpad/PS2 adaptor
+usb:v0E8Fp3008*
+ ID_MODEL_FROM_DATABASE=Xbox Controller
+
usb:v0E8Fp300A*
ID_MODEL_FROM_DATABASE=steering Wheel
usb:v0EA0p2168*
ID_MODEL_FROM_DATABASE=Transcend JetFlash 2.0 / Astone USB Drive / Intellegent Stick 2.0
+usb:v0EA0p2213*
+ ID_MODEL_FROM_DATABASE=WinDroid N287 AH7N2502.013317
+
usb:v0EA0p6803*
ID_MODEL_FROM_DATABASE=OTI-6803 Flash Disk
ID_MODEL_FROM_DATABASE=Ariva Scale
usb:v0EB8pF000*
- ID_MODEL_FROM_DATABASE=PS60 Scale
+ ID_MODEL_FROM_DATABASE=BC60 Scale
usb:v0EBB*
ID_VENDOR_FROM_DATABASE=Thermo Fisher Scientific
ID_VENDOR_FROM_DATABASE=D-WAV Scientific Co., Ltd
usb:v0EEFp0001*
- ID_MODEL_FROM_DATABASE=eGalax TouchScreen
+ ID_MODEL_FROM_DATABASE=Titan6001 Surface Acoustic Wave Touchscreen Controller [eGalax]
usb:v0EEFp0002*
ID_MODEL_FROM_DATABASE=Touchscreen Controller(Professional)
usb:v0EEFp7200*
ID_MODEL_FROM_DATABASE=Touchscreen Controller
+usb:v0EEFp7904*
+ ID_MODEL_FROM_DATABASE=Multitouch Capacitive Touchscreen eGalaxTouch EXC7904-21v00_T13 [IIyama Prolite T1932-MSC]
+
usb:v0EEFpA802*
ID_MODEL_FROM_DATABASE=eGalaxTouch EXC7920
+usb:v0EEFpB10E*
+ ID_MODEL_FROM_DATABASE=eGalaxTouch EXC3000
+
+usb:v0EEFpC000*
+ ID_MODEL_FROM_DATABASE=Multitouch Capacitive Touchscreen eGalaxTouch EXC3188-4643-08.00.00.00 Sirius_4643 PCAP3188UR Series [IIyama Prolite PLT1932MSC]
+
usb:v0EF0*
ID_VENDOR_FROM_DATABASE=Hitachi Cable, Ltd
usb:v0F0D*
ID_VENDOR_FROM_DATABASE=Hori Co., Ltd
+usb:v0F0Dp000A*
+ ID_MODEL_FROM_DATABASE=Dead or Alive 4 FightStick for Xbox 360
+
+usb:v0F0Dp000C*
+ ID_MODEL_FROM_DATABASE=Horipad EX Turbo for Xbox 360
+
+usb:v0F0Dp000D*
+ ID_MODEL_FROM_DATABASE=Fighting Stick EX2 for Xbox 360
+
usb:v0F0Dp0011*
ID_MODEL_FROM_DATABASE=Real Arcade Pro 3
+usb:v0F0Dp0016*
+ ID_MODEL_FROM_DATABASE=Real Arcade Pro.EX for Xbox 360
+
+usb:v0F0Dp001B*
+ ID_MODEL_FROM_DATABASE=Real Aracde Pro.VX
+
+usb:v0F0Dp0063*
+ ID_MODEL_FROM_DATABASE=Real Arcade Pro Hayabusa for Xbox One
+
+usb:v0F0Dp0067*
+ ID_MODEL_FROM_DATABASE=Horipad One
+
+usb:v0F0Dp0078*
+ ID_MODEL_FROM_DATABASE=Real Arcade Pro V Kai for Xbox One / Xbox 360
+
+usb:v0F0Dp0090*
+ ID_MODEL_FROM_DATABASE=Horipad Ultimate
+
+usb:v0F0Dp00C1*
+ ID_MODEL_FROM_DATABASE=HORIPAD for Nintendo Switch
+
usb:v0F0E*
ID_VENDOR_FROM_DATABASE=Energy Full Corp.
usb:v0F30p001C*
ID_MODEL_FROM_DATABASE=PS3 Guitar Controller Dongle
+usb:v0F30p010B*
+ ID_MODEL_FROM_DATABASE=Philips Recoil
+
usb:v0F30p0110*
ID_MODEL_FROM_DATABASE=Dual Analog Rumble Pad
usb:v0F30p0111*
ID_MODEL_FROM_DATABASE=Colour Rumble Pad
+usb:v0F30p0202*
+ ID_MODEL_FROM_DATABASE=Joytech Advanced Controller
+
usb:v0F30p0208*
ID_MODEL_FROM_DATABASE=Xbox & PC Gamepad
+usb:v0F30p8888*
+ ID_MODEL_FROM_DATABASE=BigBen XBMiniPad Controller
+
usb:v0F31*
ID_VENDOR_FROM_DATABASE=Chrysalis Development
usb:v0F39*
ID_VENDOR_FROM_DATABASE=TG3 Electronics
+usb:v0F39p0404*
+ ID_MODEL_FROM_DATABASE=Recreated ZX Spectrum Keyboard
+
usb:v0F39p0876*
ID_MODEL_FROM_DATABASE=Keyboard [87 Francium Pro]
usb:v0F44pFF12*
ID_MODEL_FROM_DATABASE=Liberty
+usb:v0F49*
+ ID_VENDOR_FROM_DATABASE=Evolis SA
+
+usb:v0F49p0A00*
+ ID_MODEL_FROM_DATABASE=Zenius
+
usb:v0F4B*
ID_VENDOR_FROM_DATABASE=St. John Technology Co., Ltd
usb:v0FCAp8011*
ID_MODEL_FROM_DATABASE=Blackberry Playbook (Connect to Mac mode)
+usb:v0FCAp8014*
+ ID_MODEL_FROM_DATABASE=Blackberry Handheld Z30
+
usb:v0FCAp8020*
ID_MODEL_FROM_DATABASE=Blackberry Playbook (CD-Rom mode)
usb:v0FCEp01BB*
ID_MODEL_FROM_DATABASE=D5803 [Xperia Z3 Compact] (MTP mode)
-usb:v0FCEp0DDE*
- ID_MODEL_FROM_DATABASE=Xperia Mini Pro Bootloader
+usb:v0FCEp01E0*
+ ID_MODEL_FROM_DATABASE=F5122 [Xperia X dual] (MTP mode)
+
+usb:v0FCEp01E8*
+ ID_MODEL_FROM_DATABASE=F5321 [Xperia X Compact] (MTP mode)
+
+usb:v0FCEp01F9*
+ ID_MODEL_FROM_DATABASE=H8314 [Xperia XZ2 Compact]
usb:v0FCEp1010*
ID_MODEL_FROM_DATABASE=WMC Modem
usb:v0FCEp51A7*
ID_MODEL_FROM_DATABASE=D5503 (Xperia Z1 Compact)
+usb:v0FCEp51E0*
+ ID_MODEL_FROM_DATABASE=F5122 [Xperia X dual] (developer mode)
+
usb:v0FCEp614F*
ID_MODEL_FROM_DATABASE=Xperia X12 (debug mode)
usb:v0FCEp7177*
ID_MODEL_FROM_DATABASE=Xperia Ion [Tethering]
+usb:v0FCEp71F4*
+ ID_MODEL_FROM_DATABASE=G8441 (Xperia XZ1 Compact) [Tethering]
+
+usb:v0FCEp71F9*
+ ID_MODEL_FROM_DATABASE=H8314 [Xperia XZ2 Compact] (Tethering)
+
usb:v0FCEp8004*
ID_MODEL_FROM_DATABASE=9000 Phone [Mass Storage]
+usb:v0FCEp81F4*
+ ID_MODEL_FROM_DATABASE=G8441 (Xperia XZ1 Compact) [Tethering]
+
usb:v0FCEpADDE*
ID_MODEL_FROM_DATABASE=C2005 (Xperia M dual) in service mode
+usb:v0FCEpC1E0*
+ ID_MODEL_FROM_DATABASE=F5122 [Xperia X dual] (MIDI mode)
+
+usb:v0FCEpC1E8*
+ ID_MODEL_FROM_DATABASE=F5321 [Xperia X Compact] (MIDI mode)
+
+usb:v0FCEpC1F9*
+ ID_MODEL_FROM_DATABASE=H8314 [Xperia XZ2 Compact] (MIDI)
+
usb:v0FCEpD008*
ID_MODEL_FROM_DATABASE=V800-Vodafone 802SE Phone
usb:v0FCEpD076*
ID_MODEL_FROM_DATABASE=W910i (Phone mode)
+usb:v0FCEpD079*
+ ID_MODEL_FROM_DATABASE=K530 Phone
+
usb:v0FCEpD089*
ID_MODEL_FROM_DATABASE=W580i Phone (mass storage)
usb:v0FD9p0037*
ID_MODEL_FROM_DATABASE=Video Capture v2
+usb:v0FD9p0060*
+ ID_MODEL_FROM_DATABASE=Stream Deck
+
+usb:v0FD9p0063*
+ ID_MODEL_FROM_DATABASE=Stream Deck Mini
+
+usb:v0FD9p006C*
+ ID_MODEL_FROM_DATABASE=Stream Deck XL
+
+usb:v0FD9p006D*
+ ID_MODEL_FROM_DATABASE=Stream Deck original V2
+
usb:v0FDA*
ID_VENDOR_FROM_DATABASE=Quantec Networks GmbH
usb:v0FDEpCA05*
ID_MODEL_FROM_DATABASE=CM160
+usb:v0FDEpCA08*
+ ID_MODEL_FROM_DATABASE=WMR300 Professional Weather System
+
usb:v0FE0*
ID_VENDOR_FROM_DATABASE=Osterhout Design Group
usb:v0FFCp0021*
ID_MODEL_FROM_DATABASE=Nord Stage 2
+usb:v0FFCp002A*
+ ID_MODEL_FROM_DATABASE=Nord Piano 4
+
usb:v0FFD*
ID_VENDOR_FROM_DATABASE=EarlySense
usb:v1003p0100*
ID_MODEL_FROM_DATABASE=SD9/SD10
+usb:v1003p8781*
+ ID_MODEL_FROM_DATABASE=Dock UD-01
+
usb:v1004*
ID_VENDOR_FROM_DATABASE=LG Electronics, Inc.
ID_MODEL_FROM_DATABASE=G2/Optimus Android Phone [Charge mode]
usb:v1004p631C*
- ID_MODEL_FROM_DATABASE=G2/Optimus Android Phone [MTP mode]
+ ID_MODEL_FROM_DATABASE=LM-X420xxx/G2/Optimus Android Phone (charge mode)
usb:v1004p631D*
ID_MODEL_FROM_DATABASE=Optimus Android Phone (Camera/PTP Mode)
usb:v1004p631E*
- ID_MODEL_FROM_DATABASE=G2/Optimus Android Phone [Camera/PTP mode]
+ ID_MODEL_FROM_DATABASE=LM-X420xxx/G2/Optimus Android Phone (PTP/camera mode)
usb:v1004p631F*
ID_MODEL_FROM_DATABASE=Optimus Android Phone (Charge Mode)
ID_MODEL_FROM_DATABASE=Ultimate 2 Android Phone L41C
usb:v1004p633E*
- ID_MODEL_FROM_DATABASE=G2/G3 Android Phone [MTP/PTP/Download mode]
+ ID_MODEL_FROM_DATABASE=LM-X420xxx/G2/G3 Android Phone (MTP/download mode)
usb:v1004p6344*
- ID_MODEL_FROM_DATABASE=G2 Android Phone [tethering mode]
+ ID_MODEL_FROM_DATABASE=LM-X420xxx/G2 Android Phone (USB tethering mode)
+
+usb:v1004p6348*
+ ID_MODEL_FROM_DATABASE=LM-X420xxx Android Phone (MIDI mode)
usb:v1004p6356*
ID_MODEL_FROM_DATABASE=Optimus Android Phone [Virtual CD mode]
usb:v1005pB113*
ID_MODEL_FROM_DATABASE=Handy Steno/AH123 / Handy Steno 2.0/HT203
+usb:v1005pB155*
+ ID_MODEL_FROM_DATABASE=Disk Module
+
usb:v1005pB223*
ID_MODEL_FROM_DATABASE=CD-RW + 6in1 Card Reader Digital Storage / Converter
usb:v1017*
ID_VENDOR_FROM_DATABASE=Speedy Industrial Supplies, Pte., Ltd
+usb:v1017p9015*
+ ID_MODEL_FROM_DATABASE=M625 [Vendor: DELUX]
+
usb:v1019*
ID_VENDOR_FROM_DATABASE=Elitegroup Computer Systems (ECS)
ID_MODEL_FROM_DATABASE=Wireless Optical Mouse
usb:v1020p0106*
- ID_MODEL_FROM_DATABASE=Wireless Optical Mouse
+ ID_MODEL_FROM_DATABASE=Wireless Optical Mouse/Keyboard
usb:v1022*
ID_VENDOR_FROM_DATABASE=Shinko Shoji Co., Ltd
usb:v102Cp6251*
ID_MODEL_FROM_DATABASE=Q-Cam VGA
+usb:v102CpFF0C*
+ ID_MODEL_FROM_DATABASE=Joytech Wireless Advanced Controller
+
usb:v102D*
ID_VENDOR_FROM_DATABASE=Winic Corp.
usb:v1038p0100*
ID_MODEL_FROM_DATABASE=Ideazon Zboard
+usb:v1038p1260*
+ ID_MODEL_FROM_DATABASE=Arctis 7 wireless adapter
+
usb:v1038p1361*
ID_MODEL_FROM_DATABASE=Ideazon Sensei
+usb:v1038p1410*
+ ID_MODEL_FROM_DATABASE=SRW-S1 [Simraceway Steering Wheel]
+
+usb:v1038p1720*
+ ID_MODEL_FROM_DATABASE=Mouse
+
usb:v1039*
ID_VENDOR_FROM_DATABASE=devolo AG
usb:v104Dp1003*
ID_MODEL_FROM_DATABASE=Model-52 LED Light Source Power Supply and Driver
+usb:v104Dp3001*
+ ID_MODEL_FROM_DATABASE=ESP301 3 Axis Motion Controller
+
usb:v104F*
ID_VENDOR_FROM_DATABASE=WB Electronics
ID_MODEL_FROM_DATABASE=Gnubby
usb:v1050p0401*
- ID_MODEL_FROM_DATABASE=Yubikey 4 OTP
+ ID_MODEL_FROM_DATABASE=Yubikey 4/5 OTP
usb:v1050p0402*
- ID_MODEL_FROM_DATABASE=Yubikey 4 U2F
+ ID_MODEL_FROM_DATABASE=Yubikey 4/5 U2F
usb:v1050p0403*
- ID_MODEL_FROM_DATABASE=Yubikey 4 OTP+U2F
+ ID_MODEL_FROM_DATABASE=Yubikey 4/5 OTP+U2F
usb:v1050p0404*
- ID_MODEL_FROM_DATABASE=Yubikey 4 CCID
+ ID_MODEL_FROM_DATABASE=Yubikey 4/5 CCID
usb:v1050p0405*
- ID_MODEL_FROM_DATABASE=Yubikey 4 OTP+CCID
+ ID_MODEL_FROM_DATABASE=Yubikey 4/5 OTP+CCID
usb:v1050p0406*
- ID_MODEL_FROM_DATABASE=Yubikey 4 U2F+CCID
+ ID_MODEL_FROM_DATABASE=Yubikey 4/5 U2F+CCID
usb:v1050p0407*
- ID_MODEL_FROM_DATABASE=Yubikey 4 OTP+U2F+CCID
+ ID_MODEL_FROM_DATABASE=Yubikey 4/5 OTP+U2F+CCID
usb:v1050p0410*
ID_MODEL_FROM_DATABASE=Yubikey plus OTP+U2F
usb:v1058p1140*
ID_MODEL_FROM_DATABASE=My Book Essential (WDBACW)
+usb:v1058p1170*
+ ID_MODEL_FROM_DATABASE=My Book Essential 3TB (WDBACW0030HBK)
+
usb:v1058p1230*
ID_MODEL_FROM_DATABASE=My Book (WDBFJK)
ID_MODEL_FROM_DATABASE=My Passport Ultra (WD10JMVW)
usb:v1058p25A1*
- ID_MODEL_FROM_DATABASE=Elements / My Passport (WD20NMVW)
+ ID_MODEL_FROM_DATABASE=Elements / My Passport
usb:v1058p25A2*
ID_MODEL_FROM_DATABASE=Elements 25A2
usb:v1058p25A3*
ID_MODEL_FROM_DATABASE=Elements Desktop (WDBWLG)
+usb:v1058p25DA*
+ ID_MODEL_FROM_DATABASE=My Book (WDBFJK)
+
+usb:v1058p25E1*
+ ID_MODEL_FROM_DATABASE=My Passport (WD20NMVW)
+
usb:v1058p25E2*
ID_MODEL_FROM_DATABASE=My Passport (WD40NMZW)
+usb:v1058p25EE*
+ ID_MODEL_FROM_DATABASE=My Book 25EE
+
+usb:v1058p25F3*
+ ID_MODEL_FROM_DATABASE=My Passport SSD (WDBK3E)
+
+usb:v1058p25FA*
+ ID_MODEL_FROM_DATABASE=easystore Portable 5TB (WDBKUZ0050)
+
+usb:v1058p25FB*
+ ID_MODEL_FROM_DATABASE=easystore Desktop (WDBCKA)
+
+usb:v1058p2603*
+ ID_MODEL_FROM_DATABASE=My Passport Game Storage for PS4 4TB (WDBZGE0040)
+
+usb:v1058p2624*
+ ID_MODEL_FROM_DATABASE=easystore Portable 5TB (WDBKUZ0050)
+
+usb:v1058p2626*
+ ID_MODEL_FROM_DATABASE=My Passport (WDBPKJ)
+
usb:v1058p30A0*
ID_MODEL_FROM_DATABASE=SATA adapter cable
usb:v108C*
ID_VENDOR_FROM_DATABASE=Robert Bosch GmbH
+usb:v108Cp017E*
+ ID_MODEL_FROM_DATABASE=GTC 400 C
+
usb:v108E*
ID_VENDOR_FROM_DATABASE=Lotes Co., Ltd.
usb:v109B*
ID_VENDOR_FROM_DATABASE=Hisense
+usb:v109Bp9109*
+ ID_MODEL_FROM_DATABASE=CROSSCALL Trekker-M1 Core (MTP-Mode)
+
usb:v109Bp9118*
ID_MODEL_FROM_DATABASE=Medion P4013 Mobile
+usb:v109Bp9119*
+ ID_MODEL_FROM_DATABASE=CROSSCALL Trekker-M1 Core (PTP-Mode)
+
+usb:v109BpF009*
+ ID_MODEL_FROM_DATABASE=CROSSCALL Trekker-M1 Core (CD-ROM-Mode)
+
usb:v109F*
ID_VENDOR_FROM_DATABASE=eSOL Co., Ltd
usb:v10CEp001E*
ID_MODEL_FROM_DATABASE=Ciaat Brava 21
+usb:v10CEp0039*
+ ID_MODEL_FROM_DATABASE=Sinfonia CHC-S2245
+
+usb:v10CEp10CE*
+ ID_MODEL_FROM_DATABASE=Sinfonia CHC-S2245
+
usb:v10CEpEA6A*
ID_MODEL_FROM_DATABASE=MobiData EDGE USB Modem
usb:v10D5p55A2*
ID_MODEL_FROM_DATABASE=2Port KVMSwitcher
+usb:v10D5p5A08*
+ ID_MODEL_FROM_DATABASE=Dual Bay Docking Station
+
usb:v10D6*
ID_VENDOR_FROM_DATABASE=Actions Semiconductor Co., Ltd
usb:v10F5p0200*
ID_MODEL_FROM_DATABASE=Audio Advantage Roadie
+usb:v10F5p0231*
+ ID_MODEL_FROM_DATABASE=Ear Force P11 Headset
+
+usb:v10F5p10F5*
+ ID_MODEL_FROM_DATABASE=EarForce PX21 Gaming Headset
+
+usb:v10F8*
+ ID_VENDOR_FROM_DATABASE=Cesys GmbH
+
+usb:v10F8p3201*
+ ID_MODEL_FROM_DATABASE=CeboLC
+
+usb:v10F8p3202*
+ ID_MODEL_FROM_DATABASE=CeboStick
+
+usb:v10F8p3203*
+ ID_MODEL_FROM_DATABASE=CeboMSA64
+
+usb:v10F8p3204*
+ ID_MODEL_FROM_DATABASE=CeboDFN
+
+usb:v10F8p3205*
+ ID_MODEL_FROM_DATABASE=PSAA2304W_CASC
+
+usb:v10F8pC401*
+ ID_MODEL_FROM_DATABASE=USBV4F unconfigured
+
+usb:v10F8pC402*
+ ID_MODEL_FROM_DATABASE=EFM01 unconfigured
+
+usb:v10F8pC403*
+ ID_MODEL_FROM_DATABASE=MISS2 unconfigured
+
+usb:v10F8pC404*
+ ID_MODEL_FROM_DATABASE=CID unconfigured
+
+usb:v10F8pC405*
+ ID_MODEL_FROM_DATABASE=USBS6 unconfigured
+
+usb:v10F8pC406*
+ ID_MODEL_FROM_DATABASE=OP_MISS2 unconfigured
+
+usb:v10F8pC407*
+ ID_MODEL_FROM_DATABASE=NanoUsb uncofigured
+
+usb:v10F8pC481*
+ ID_MODEL_FROM_DATABASE=USBV4F
+
+usb:v10F8pC482*
+ ID_MODEL_FROM_DATABASE=EFM01
+
+usb:v10F8pC483*
+ ID_MODEL_FROM_DATABASE=MISS2
+
+usb:v10F8pC484*
+ ID_MODEL_FROM_DATABASE=CID
+
+usb:v10F8pC485*
+ ID_MODEL_FROM_DATABASE=USBS6
+
+usb:v10F8pC486*
+ ID_MODEL_FROM_DATABASE=OP_MISS2
+
+usb:v10F8pC487*
+ ID_MODEL_FROM_DATABASE=NanoUsb
+
+usb:v10F8pC501*
+ ID_MODEL_FROM_DATABASE=EFM02 unconfigured
+
+usb:v10F8pC502*
+ ID_MODEL_FROM_DATABASE=EFM02/B unconfigured
+
+usb:v10F8pC503*
+ ID_MODEL_FROM_DATABASE=EFM03 unconfigured
+
+usb:v10F8pC581*
+ ID_MODEL_FROM_DATABASE=EFM02
+
+usb:v10F8pC582*
+ ID_MODEL_FROM_DATABASE=EFM02/B
+
+usb:v10F8pC583*
+ ID_MODEL_FROM_DATABASE=EFM03
+
usb:v10FB*
ID_VENDOR_FROM_DATABASE=Pictos Technologies, Inc.
usb:v110A*
ID_VENDOR_FROM_DATABASE=Moxa Technologies Co., Ltd.
+usb:v110Ap1110*
+ ID_MODEL_FROM_DATABASE=UPort 1110
+
+usb:v110Ap1150*
+ ID_MODEL_FROM_DATABASE=UPort 1150 1-Port RS-232/422/485
+
usb:v110Ap1250*
ID_MODEL_FROM_DATABASE=UPort 1250 2-Port RS-232/422/485
usb:v1130p0002*
ID_MODEL_FROM_DATABASE=iBuddy
+usb:v1130p0004*
+ ID_MODEL_FROM_DATABASE=iBuddy Twins
+
usb:v1130p0202*
ID_MODEL_FROM_DATABASE=Rocket Launcher
usb:v1130p6604*
ID_MODEL_FROM_DATABASE=MCE IR-Receiver
+usb:v1130p6606*
+ ID_MODEL_FROM_DATABASE=U+P Mouse
+
usb:v1130p660C*
ID_MODEL_FROM_DATABASE=Foot Pedal/Thermometer
usb:v1199p900A*
ID_MODEL_FROM_DATABASE=Gobi 2000 Wireless Modem
+usb:v1199p9011*
+ ID_MODEL_FROM_DATABASE=MC8305 Modem
+
usb:v1199p9013*
ID_MODEL_FROM_DATABASE=Sierra Wireless Gobi 3000 Modem device (MC8355)
+usb:v1199p9041*
+ ID_MODEL_FROM_DATABASE=EM7305 Modem
+
usb:v1199p9055*
ID_MODEL_FROM_DATABASE=Gobi 9x15 Multimode 3G/4G LTE Modem (NAT mode)
usb:v1199p9057*
ID_MODEL_FROM_DATABASE=Gobi 9x15 Multimode 3G/4G LTE Modem (IP passthrough mode)
+usb:v1199p9071*
+ ID_MODEL_FROM_DATABASE=AirPrime MC7455 3G/4G LTE Modem
+
+usb:v1199p9079*
+ ID_MODEL_FROM_DATABASE=EM7455
+
usb:v119A*
ID_VENDOR_FROM_DATABASE=ZHAN QI Technology Co., Ltd
usb:v11B0p6208*
ID_MODEL_FROM_DATABASE=PRO-28U
+usb:v11B0p6298*
+ ID_MODEL_FROM_DATABASE=Kingston SNA-DC/U
+
usb:v11BE*
ID_VENDOR_FROM_DATABASE=R&D International NV
usb:v11C5p0521*
ID_MODEL_FROM_DATABASE=IMT-0521 Smartcard Reader
+usb:v11C9*
+ ID_VENDOR_FROM_DATABASE=Nacon
+
+usb:v11C9p55F0*
+ ID_MODEL_FROM_DATABASE=GC-100XF
+
usb:v11CA*
ID_VENDOR_FROM_DATABASE=VeriFone Inc
+usb:v11CAp0201*
+ ID_MODEL_FROM_DATABASE=MX870/MX880
+
usb:v11CAp0207*
ID_MODEL_FROM_DATABASE=PIN Pad VX 810
usb:v1209p0001*
ID_MODEL_FROM_DATABASE=pid.codes Test PID
+usb:v1209p0002*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p0003*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p0004*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p0005*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p0006*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p0007*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p0008*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p0009*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p000A*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p000B*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p000C*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p000D*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p000E*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p000F*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p0010*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
usb:v1209p01C0*
ID_MODEL_FROM_DATABASE=Input Club Kiibohd Device
ID_MODEL_FROM_DATABASE=Captain Credible Gate Crystal
usb:v1209p2048*
- ID_MODEL_FROM_DATABASE=Housedillon.com MRF49XA Transciever
+ ID_MODEL_FROM_DATABASE=Housedillon.com MRF49XA Transceiver
usb:v1209p2100*
ID_MODEL_FROM_DATABASE=TinyFPGA B1 and B2 Boards
usb:v1209p3333*
ID_MODEL_FROM_DATABASE=LabConnect Digitalnetzteil
+usb:v1209p345B*
+ ID_MODEL_FROM_DATABASE=kinX Hub
+
+usb:v1209p345C*
+ ID_MODEL_FROM_DATABASE=kinX Keyboard Controller
+
usb:v1209p3690*
ID_MODEL_FROM_DATABASE=Kigakudoh TouchMIDI32
usb:v1209p5050*
ID_MODEL_FROM_DATABASE=trebb ISO50
+usb:v1209p5070*
+ ID_MODEL_FROM_DATABASE=SoloHacker security key [SoloKey]
+
+usb:v1209p50B0*
+ ID_MODEL_FROM_DATABASE=boot for security key [SoloKey]
+
usb:v1209p5222*
ID_MODEL_FROM_DATABASE=telavivmakers attami
usb:v1209p7778*
ID_MODEL_FROM_DATABASE=circuitvalley IO Board V3 Bootloader
+usb:v1209p7950*
+ ID_MODEL_FROM_DATABASE=PIC18F87J94 Bootloader [GenII]
+
+usb:v1209p7951*
+ ID_MODEL_FROM_DATABASE=PIC18F87J94 Application [GenII]
+
+usb:v1209p7952*
+ ID_MODEL_FROM_DATABASE=PIC18F87J94 Bootloader [GenIII/IV]
+
+usb:v1209p7953*
+ ID_MODEL_FROM_DATABASE=PIC18F87J94 Application [GenIII/IV]
+
+usb:v1209p7954*
+ ID_MODEL_FROM_DATABASE=PIC18F87J94 Application [GenIII/IV]
+
usb:v1209p7BD0*
ID_MODEL_FROM_DATABASE=pokey9000 Tiny Bit Dingus
usb:v1209pDED1*
ID_MODEL_FROM_DATABASE=ManCave Made Quark One
+usb:v1209pDEED*
+ ID_MODEL_FROM_DATABASE=Kroneum Time Tracker
+
usb:v1209pDF00*
ID_MODEL_FROM_DATABASE=D.F.Mac. @TripArts Music mi:muz:tuch
usb:v1210*
ID_VENDOR_FROM_DATABASE=DigiTech
+usb:v1210p000D*
+ ID_MODEL_FROM_DATABASE=RP250 Guitar Multi-Effects Processor
+
usb:v1210p0016*
ID_MODEL_FROM_DATABASE=RP500 Guitar Multi-Effects Processor
usb:v121Ep3403*
ID_MODEL_FROM_DATABASE=Muzio JM250 Audio Player
+usb:v121F*
+ ID_VENDOR_FROM_DATABASE=Panini S.p.A.
+
+usb:v121Fp0001*
+ ID_MODEL_FROM_DATABASE=VisionX without Firmware
+
+usb:v121Fp0002*
+ ID_MODEL_FROM_DATABASE=VisionX with Firmware
+
+usb:v121Fp0010*
+ ID_MODEL_FROM_DATABASE=I-Deal
+
+usb:v121Fp0020*
+ ID_MODEL_FROM_DATABASE=wI-Deal
+
+usb:v121Fp0021*
+ ID_MODEL_FROM_DATABASE=VisionX Page Scanner Extension
+
+usb:v121Fp0030*
+ ID_MODEL_FROM_DATABASE=VisionNext
+
+usb:v121Fp0040*
+ ID_MODEL_FROM_DATABASE=mI:Deal Check Scanner
+
+usb:v121Fp0041*
+ ID_MODEL_FROM_DATABASE=EverNext Check Scanner
+
usb:v1220*
ID_VENDOR_FROM_DATABASE=TC Electronic
usb:v1221p3234*
ID_MODEL_FROM_DATABASE=Disk (Thumb drive)
+usb:v1222*
+ ID_VENDOR_FROM_DATABASE=TiPro
+
+usb:v1222pFACA*
+ ID_MODEL_FROM_DATABASE=programmable keyboard
+
usb:v1223*
ID_VENDOR_FROM_DATABASE=SKYCABLE ENTERPRISE. CO., LTD.
usb:v1235p001B*
ID_MODEL_FROM_DATABASE=Impulse 61
+usb:v1235p0032*
+ ID_MODEL_FROM_DATABASE=Launchkey 61
+
+usb:v1235p0069*
+ ID_MODEL_FROM_DATABASE=Launchpad MK2
+
+usb:v1235p0102*
+ ID_MODEL_FROM_DATABASE=LaunchKey Mini MK3
+
usb:v1235p4661*
ID_MODEL_FROM_DATABASE=ReMOTE25
usb:v1235p8016*
ID_MODEL_FROM_DATABASE=Focusrite Scarlett 2i2
+usb:v1235p8202*
+ ID_MODEL_FROM_DATABASE=Focusrite Scarlett 2i2 2nd Gen
+
usb:v1235p8203*
ID_MODEL_FROM_DATABASE=Focusrite Scarlett 6i6
usb:v1235p8204*
ID_MODEL_FROM_DATABASE=Scarlett 18i8 2nd Gen
+usb:v1235p8210*
+ ID_MODEL_FROM_DATABASE=Scarlett 2i2 Camera
+
+usb:v1235p8211*
+ ID_MODEL_FROM_DATABASE=Scarlett Solo (3rd Gen.)
+
+usb:v1235p8214*
+ ID_MODEL_FROM_DATABASE=Scarlett 18i8 3rd Gen
+
+usb:v1235p8215*
+ ID_MODEL_FROM_DATABASE=Scarlett 18i20 3rd Gen
+
usb:v1241*
ID_VENDOR_FROM_DATABASE=Belkin
usb:v1241pF767*
ID_MODEL_FROM_DATABASE=Keyboard
+usb:v1243*
+ ID_VENDOR_FROM_DATABASE=Holtek Semiconductor, Inc.
+
+usb:v1243pE000*
+ ID_MODEL_FROM_DATABASE=Unique NFC/RFID reader (keyboard emulation)
+
usb:v124A*
ID_VENDOR_FROM_DATABASE=AirVast
usb:v125Cp0010*
ID_MODEL_FROM_DATABASE=Alta series CCD
+usb:v125D*
+ ID_VENDOR_FROM_DATABASE=JMicron
+
+usb:v125Dp0580*
+ ID_MODEL_FROM_DATABASE=JM580
+
usb:v125F*
ID_VENDOR_FROM_DATABASE=A-DATA Technology Co., Ltd.
usb:v125FpA22A*
ID_MODEL_FROM_DATABASE=DashDrive Elite HE720 500GB
+usb:v125FpA31A*
+ ID_MODEL_FROM_DATABASE=HV620 Portable HDD
+
usb:v125FpA91A*
ID_MODEL_FROM_DATABASE=Portable HDD CH91
usb:v1275p0080*
ID_MODEL_FROM_DATABASE=SkyEye Weather Satellite Receiver
+usb:v1275p0090*
+ ID_MODEL_FROM_DATABASE=WeatherFax 2000 Demodulator
+
usb:v1278*
ID_VENDOR_FROM_DATABASE=Starlight Xpress
usb:v1286p203C*
ID_MODEL_FROM_DATABASE=K30326 802.11bgn Wireless Module [Marvell 88W8786U]
+usb:v1286p204C*
+ ID_MODEL_FROM_DATABASE=Bluetooth and Wireless LAN Composite
+
usb:v1286p8001*
ID_MODEL_FROM_DATABASE=BLOB boot loader firmware
usb:v12AB*
ID_VENDOR_FROM_DATABASE=Honey Bee Electronic International Ltd.
+usb:v12ABp0004*
+ ID_MODEL_FROM_DATABASE=Dance Pad for Xbox 360
+
+usb:v12ABp0301*
+ ID_MODEL_FROM_DATABASE=Afterglow Wired Controller for Xbox 360
+
+usb:v12ABp0303*
+ ID_MODEL_FROM_DATABASE=Mortal Kombat Klassic FightStick for Xbox 360
+
+usb:v12ABp8809*
+ ID_MODEL_FROM_DATABASE=Dance Dance Revolution Dance Pad
+
usb:v12B8*
ID_VENDOR_FROM_DATABASE=Zhejiang Xinya Electronic Technology Co., Ltd.
ID_MODEL_FROM_DATABASE=Ideos (tethering mode)
usb:v12D1p1052*
- ID_MODEL_FROM_DATABASE=MT7-L09
+ ID_MODEL_FROM_DATABASE=MT7-L09 / P7-L10 / Y330-U01
+
+usb:v12D1p1053*
+ ID_MODEL_FROM_DATABASE=P7-L10 (PTP)
+
+usb:v12D1p1054*
+ ID_MODEL_FROM_DATABASE=P7-L10 (PTP + debug)
+
+usb:v12D1p1079*
+ ID_MODEL_FROM_DATABASE=GEM-703LT [Honor/MediaPad X2]
+
+usb:v12D1p107E*
+ ID_MODEL_FROM_DATABASE=P10 smartphone
usb:v12D1p1404*
ID_MODEL_FROM_DATABASE=EM770W miniPCI WCDMA Modem
ID_MODEL_FROM_DATABASE=E353/E3131
usb:v12D1p14DC*
- ID_MODEL_FROM_DATABASE=E33372 LTE/UMTS/GSM HiLink Modem/Networkcard
+ ID_MODEL_FROM_DATABASE=E3372 LTE/UMTS/GSM HiLink Modem/Networkcard
usb:v12D1p14F1*
ID_MODEL_FROM_DATABASE=Gobi 3000 HSPA+ Modem
usb:v12D1p155A*
ID_MODEL_FROM_DATABASE=R205 Mobile WiFi (CD-ROM mode)
+usb:v12D1p1573*
+ ID_MODEL_FROM_DATABASE=ME909u-521 mPCIe LTE/GPS card
+
usb:v12D1p1575*
ID_MODEL_FROM_DATABASE=K5150 LTE modem
usb:v12D1p1F16*
ID_MODEL_FROM_DATABASE=K5150 LTE modem (Mass Storage Mode)
+usb:v12D1p360E*
+ ID_MODEL_FROM_DATABASE=Y330-U01 (MTP Mode)
+
usb:v12D1p380B*
ID_MODEL_FROM_DATABASE=WiMAX USB modem(s)
usb:v12D2*
ID_VENDOR_FROM_DATABASE=LINE TECH INDUSTRIAL CO., LTD.
+usb:v12D3*
+ ID_VENDOR_FROM_DATABASE=LINAK
+
+usb:v12D3p0002*
+ ID_MODEL_FROM_DATABASE=DeskLine CBD Control Box
+
usb:v12D6*
ID_VENDOR_FROM_DATABASE=EMS Dr. Thomas Wuensche
usb:v12FFp0101*
ID_MODEL_FROM_DATABASE=Advanced RC Servo Controller
+usb:v1306*
+ ID_VENDOR_FROM_DATABASE=FM20 Barcode Scanner
+
usb:v1307*
ID_VENDOR_FROM_DATABASE=Transcend Information, Inc.
usb:v1313p8001*
ID_MODEL_FROM_DATABASE=TXP-Series Slot (TXP5001, TXP5004)
+usb:v1313p8011*
+ ID_MODEL_FROM_DATABASE=BP1 Slit Beam Profiler
+
usb:v1313p8012*
ID_MODEL_FROM_DATABASE=BC106 Camera Beam Profiler
usb:v1313p8013*
ID_MODEL_FROM_DATABASE=WFS10 Wavefront Sensor
+usb:v1313p8016*
+ ID_MODEL_FROM_DATABASE=DMP40 Deformable Mirror
+
usb:v1313p8017*
ID_MODEL_FROM_DATABASE=BC206 Camera Beam Profiler
usb:v1313p8022*
ID_MODEL_FROM_DATABASE=PM320E Optical Power and Energy Meter
+usb:v1313p8025*
+ ID_MODEL_FROM_DATABASE=WFS20 Wavefront Sensor
+
usb:v1313p8030*
ID_MODEL_FROM_DATABASE=ER100 Extinction Ratio Meter
+usb:v1313p8039*
+ ID_MODEL_FROM_DATABASE=PAX1000 Rotating Waveplate Polarimeter
+
+usb:v1313p8047*
+ ID_MODEL_FROM_DATABASE=CLD1000
+
+usb:v1313p8048*
+ ID_MODEL_FROM_DATABASE=TED4000
+
+usb:v1313p8049*
+ ID_MODEL_FROM_DATABASE=LDC4000
+
+usb:v1313p804A*
+ ID_MODEL_FROM_DATABASE=ITC4000
+
+usb:v1313p8058*
+ ID_MODEL_FROM_DATABASE=LC-100
+
+usb:v1313p8060*
+ ID_MODEL_FROM_DATABASE=DC3100
+
+usb:v1313p8061*
+ ID_MODEL_FROM_DATABASE=DC4100
+
+usb:v1313p8062*
+ ID_MODEL_FROM_DATABASE=DC2100
+
+usb:v1313p8065*
+ ID_MODEL_FROM_DATABASE=CS2010
+
+usb:v1313p8066*
+ ID_MODEL_FROM_DATABASE=DC4104
+
usb:v1313p8070*
ID_MODEL_FROM_DATABASE=PM100D
usb:v1313p8072*
ID_MODEL_FROM_DATABASE=PM100USB Power and Energy Meter Interface
+usb:v1313p8073*
+ ID_MODEL_FROM_DATABASE=PM106 Wireless Powermeter Photodiode Sensor
+
+usb:v1313p8074*
+ ID_MODEL_FROM_DATABASE=PM160T Wireless Powermeter Thermal Sensor
+
+usb:v1313p8075*
+ ID_MODEL_FROM_DATABASE=PM400 Handheld Optical Power/Energy Meter
+
+usb:v1313p8076*
+ ID_MODEL_FROM_DATABASE=PM101 Serial PD Power Meter
+
usb:v1313p8078*
ID_MODEL_FROM_DATABASE=PM100D Compact Power and Energy Meter Console
usb:v1313p8080*
ID_MODEL_FROM_DATABASE=CCS100 - Compact Spectrometer
+usb:v1313p8081*
+ ID_MODEL_FROM_DATABASE=CCS100 Compact Spectrometer
+
+usb:v1313p8083*
+ ID_MODEL_FROM_DATABASE=CCS125 Spectrometer
+
+usb:v1313p8085*
+ ID_MODEL_FROM_DATABASE=CCS150 UV Spectrometer
+
+usb:v1313p8087*
+ ID_MODEL_FROM_DATABASE=CCS175 NIR Spectrometer
+
+usb:v1313p8089*
+ ID_MODEL_FROM_DATABASE=CCS200 Wide Range Spectrometer
+
+usb:v1313p8090*
+ ID_MODEL_FROM_DATABASE=SPCM Single Photon Counter
+
+usb:v1313p80A0*
+ ID_MODEL_FROM_DATABASE=LC100 series smart line camera
+
+usb:v1313p80B0*
+ ID_MODEL_FROM_DATABASE=PM200 Handheld Power and Energy Meter
+
+usb:v1313p80C0*
+ ID_MODEL_FROM_DATABASE=DC2200
+
+usb:v1313p80C9*
+ ID_MODEL_FROM_DATABASE=MTD Series
+
+usb:v1313p80F0*
+ ID_MODEL_FROM_DATABASE=TSP01
+
+usb:v1313p80F1*
+ ID_MODEL_FROM_DATABASE=M2SET Dongle
+
+usb:v1313p8180*
+ ID_MODEL_FROM_DATABASE=OCT Probe Controller (OCTH-1300)
+
+usb:v1313p8181*
+ ID_MODEL_FROM_DATABASE=OCT Device
+
usb:v131D*
ID_VENDOR_FROM_DATABASE=Natural Point
usb:v1325*
ID_VENDOR_FROM_DATABASE=ams AG
+usb:v1325p00D6*
+ ID_MODEL_FROM_DATABASE=I2C/SPI InterfaceBoard
+
+usb:v1325p0C08*
+ ID_MODEL_FROM_DATABASE=Embedded Linux Sensor Bridge
+
usb:v1325p4002*
ID_MODEL_FROM_DATABASE=I2C Dongle
ID_MODEL_FROM_DATABASE=CY / DNP DSRX1
usb:v1343p0006*
- ID_MODEL_FROM_DATABASE=CW-02
+ ID_MODEL_FROM_DATABASE=CW-02 / OP900ii
usb:v1343p0007*
ID_MODEL_FROM_DATABASE=DNP DS80DX
usb:v1343p0008*
- ID_MODEL_FROM_DATABASE=CX2 / DNP DS620
+ ID_MODEL_FROM_DATABASE=DNP DS620 (old)
+
+usb:v1343p000A*
+ ID_MODEL_FROM_DATABASE=CX-02
+
+usb:v1343p000B*
+ ID_MODEL_FROM_DATABASE=CX-02W
usb:v1345*
ID_VENDOR_FROM_DATABASE=Sino Lite Technology Corp.
usb:v1357p0504*
ID_MODEL_FROM_DATABASE=DEMOJM
+usb:v1357p1000*
+ ID_MODEL_FROM_DATABASE=Smart Control Touchpad
+
+usb:v135E*
+ ID_VENDOR_FROM_DATABASE=Insta GmbH
+
+usb:v135Ep0021*
+ ID_MODEL_FROM_DATABASE=Berker KNX Data Interface
+
+usb:v135Ep0022*
+ ID_MODEL_FROM_DATABASE=Gira KNX Data Interface
+
+usb:v135Ep0023*
+ ID_MODEL_FROM_DATABASE=JUNG KNX Data Interface
+
+usb:v135Ep0024*
+ ID_MODEL_FROM_DATABASE=Merten/Schneider Electric KNX Data Interface
+
+usb:v135Ep0025*
+ ID_MODEL_FROM_DATABASE=Hager KNX Data Interface
+
+usb:v135Ep0026*
+ ID_MODEL_FROM_DATABASE=Feller KNX Data Interface
+
usb:v135F*
ID_VENDOR_FROM_DATABASE=Control Development Inc.
usb:v1366p0101*
ID_MODEL_FROM_DATABASE=J-Link PLUS
+usb:v1366p1015*
+ ID_MODEL_FROM_DATABASE=J-Link
+
usb:v136B*
ID_VENDOR_FROM_DATABASE=STEC
usb:v137Bp0002*
ID_MODEL_FROM_DATABASE=SCAPS USC-2 Scanner Controller
+usb:v137C*
+ ID_VENDOR_FROM_DATABASE=YASKAWA ELECTRIC CORP.
+
+usb:v137Cp0220*
+ ID_MODEL_FROM_DATABASE=MP Series
+
+usb:v137Cp0250*
+ ID_MODEL_FROM_DATABASE=SIGMA Series
+
+usb:v137Cp0401*
+ ID_MODEL_FROM_DATABASE=AC Drive
+
usb:v1385*
ID_VENDOR_FROM_DATABASE=Netgear, Inc
ID_VENDOR_FROM_DATABASE=TOMTOM B.V.
usb:v1390p0001*
- ID_MODEL_FROM_DATABASE=GO 520 T/GO 630/ONE XL (v9)
+ ID_MODEL_FROM_DATABASE=GO 520 T / GO 630 / ONE / ONE XL
usb:v1390p5454*
ID_MODEL_FROM_DATABASE=Blue & Me 2
usb:v1395p0025*
ID_MODEL_FROM_DATABASE=Headset [PC 8]
+usb:v1395p0026*
+ ID_MODEL_FROM_DATABASE=SC230
+
+usb:v1395p0027*
+ ID_MODEL_FROM_DATABASE=SC260
+
+usb:v1395p0028*
+ ID_MODEL_FROM_DATABASE=SC230 CTRL
+
+usb:v1395p0029*
+ ID_MODEL_FROM_DATABASE=SC260 CTRL
+
+usb:v1395p002A*
+ ID_MODEL_FROM_DATABASE=SC230 for Lync
+
+usb:v1395p002B*
+ ID_MODEL_FROM_DATABASE=SC260 for Lync
+
+usb:v1395p002D*
+ ID_MODEL_FROM_DATABASE=BTD-800
+
+usb:v1395p002E*
+ ID_MODEL_FROM_DATABASE=Presence
+
+usb:v1395p0030*
+ ID_MODEL_FROM_DATABASE=CEHS-CI 02
+
+usb:v1395p0031*
+ ID_MODEL_FROM_DATABASE=U320 Gaming
+
+usb:v1395p0032*
+ ID_MODEL_FROM_DATABASE=SC30 for Lync
+
+usb:v1395p0033*
+ ID_MODEL_FROM_DATABASE=SC60 for Lync
+
+usb:v1395p0034*
+ ID_MODEL_FROM_DATABASE=SC30 Control
+
+usb:v1395p0035*
+ ID_MODEL_FROM_DATABASE=SC60 Control
+
+usb:v1395p0036*
+ ID_MODEL_FROM_DATABASE=SC630 for Lync
+
+usb:v1395p0037*
+ ID_MODEL_FROM_DATABASE=SC660 for Lync
+
+usb:v1395p0038*
+ ID_MODEL_FROM_DATABASE=SC630 CTRL
+
+usb:v1395p0039*
+ ID_MODEL_FROM_DATABASE=SC660 CTRL
+
+usb:v1395p003F*
+ ID_MODEL_FROM_DATABASE=SP 20
+
+usb:v1395p0040*
+ ID_MODEL_FROM_DATABASE=MB Pro 1/2
+
+usb:v1395p0041*
+ ID_MODEL_FROM_DATABASE=SP 20 for Lync
+
+usb:v1395p0042*
+ ID_MODEL_FROM_DATABASE=SP 10
+
+usb:v1395p0043*
+ ID_MODEL_FROM_DATABASE=SP 10 for Lync
+
usb:v1395p0046*
ID_MODEL_FROM_DATABASE=PXC 550
+usb:v1395p004A*
+ ID_MODEL_FROM_DATABASE=MOMENTUM M2 OEBT
+
+usb:v1395p004B*
+ ID_MODEL_FROM_DATABASE=MOMENTUM M2 AEBT
+
+usb:v1395p004F*
+ ID_MODEL_FROM_DATABASE=SC230 for MS II
+
+usb:v1395p0050*
+ ID_MODEL_FROM_DATABASE=SC260 for MS II
+
+usb:v1395p0051*
+ ID_MODEL_FROM_DATABASE=USB-ED CC 01
+
+usb:v1395p0058*
+ ID_MODEL_FROM_DATABASE=USB-ED CC 01 for MS
+
+usb:v1395p0059*
+ ID_MODEL_FROM_DATABASE=SC40 for MS
+
+usb:v1395p005A*
+ ID_MODEL_FROM_DATABASE=SC70 for MS
+
+usb:v1395p005B*
+ ID_MODEL_FROM_DATABASE=SC40 CTRL
+
+usb:v1395p005C*
+ ID_MODEL_FROM_DATABASE=SC70 CTRL
+
+usb:v1395p0060*
+ ID_MODEL_FROM_DATABASE=SCx5 MS
+
+usb:v1395p0061*
+ ID_MODEL_FROM_DATABASE=SCx5 CTRL
+
+usb:v1395p0064*
+ ID_MODEL_FROM_DATABASE=MB 660 MS
+
+usb:v1395p0065*
+ ID_MODEL_FROM_DATABASE=MB 660
+
+usb:v1395p0066*
+ ID_MODEL_FROM_DATABASE=SP 20 D UC
+
+usb:v1395p0067*
+ ID_MODEL_FROM_DATABASE=SP 20 D MS
+
+usb:v1395p006B*
+ ID_MODEL_FROM_DATABASE=SC5x5 MS
+
+usb:v1395p0072*
+ ID_MODEL_FROM_DATABASE=Headset
+
usb:v1395p3556*
ID_MODEL_FROM_DATABASE=USB Headset
usb:v1397*
ID_VENDOR_FROM_DATABASE=BEHRINGER International GmbH
+usb:v1397p0004*
+ ID_MODEL_FROM_DATABASE=FCA1616
+
usb:v1397p00BC*
ID_MODEL_FROM_DATABASE=BCF2000
usb:v13D3p3474*
ID_MODEL_FROM_DATABASE=Atheros AR3012 Bluetooth
+usb:v13D3p3526*
+ ID_MODEL_FROM_DATABASE=Bluetooth Radio
+
usb:v13D3p5070*
ID_MODEL_FROM_DATABASE=Webcam
usb:v13D3p5134*
ID_MODEL_FROM_DATABASE=Integrated Webcam
+usb:v13D3p5615*
+ ID_MODEL_FROM_DATABASE=Lenovo EasyCamera
+
+usb:v13D3p5670*
+ ID_MODEL_FROM_DATABASE=HP TrueVision HD
+
+usb:v13D3p5682*
+ ID_MODEL_FROM_DATABASE=SunplusIT Integrated Camera
+
usb:v13D3p5702*
ID_MODEL_FROM_DATABASE=UVC VGA Webcam
usb:v13D3p5716*
ID_MODEL_FROM_DATABASE=UVC VGA Webcam
+usb:v13D3p5A07*
+ ID_MODEL_FROM_DATABASE=VGA UVC WebCam
+
usb:v13D3p7020*
ID_MODEL_FROM_DATABASE=DTV-DVB UDST7020BDA DVB-S Box(DVBS for MCE2005)
usb:v13D3p7022*
ID_MODEL_FROM_DATABASE=DTV-DVB UDST7022BDA DVB-S Box(Without HID)
+usb:v13D3p784B*
+ ID_MODEL_FROM_DATABASE=XHC Camera
+
usb:v13D7*
ID_VENDOR_FROM_DATABASE=Guidance Software, Inc.
usb:v13FD*
ID_VENDOR_FROM_DATABASE=Initio Corporation
+usb:v13FDp0550*
+ ID_MODEL_FROM_DATABASE=INIC-1530 PATA Bridge
+
usb:v13FDp0840*
ID_MODEL_FROM_DATABASE=INIC-1618L SATA
usb:v13FDp2040*
ID_MODEL_FROM_DATABASE=Samsung Writemaster external DVD writer
+usb:v13FDp3920*
+ ID_MODEL_FROM_DATABASE=INIC-3619PN SATA Bridge
+
usb:v13FDp3940*
ID_MODEL_FROM_DATABASE=external DVD burner ECD819-SU3
+usb:v13FDp3960*
+ ID_MODEL_FROM_DATABASE=INIC-3639
+
usb:v13FDp3E40*
ID_MODEL_FROM_DATABASE=ZALMAN ZM-VE350
usb:v13FEp3123*
ID_MODEL_FROM_DATABASE=Verbatim STORE N GO 4GB
+usb:v13FEp3200*
+ ID_MODEL_FROM_DATABASE=flash drive (2GB, EMTEC)
+
usb:v13FEp3600*
ID_MODEL_FROM_DATABASE=flash drive (4GB, EMTEC)
usb:v13FEp3800*
ID_MODEL_FROM_DATABASE=Rage XT Flash Drive
+usb:v13FEp3D00*
+ ID_MODEL_FROM_DATABASE=Flash Drive
+
usb:v13FEp3E00*
ID_MODEL_FROM_DATABASE=Flash Drive
usb:v13FEp4100*
ID_MODEL_FROM_DATABASE=Flash drive
+usb:v13FEp4200*
+ ID_MODEL_FROM_DATABASE=Platinum USB drive mini
+
usb:v13FEp5000*
ID_MODEL_FROM_DATABASE=USB flash drive (32 GB SHARKOON Accelerate)
usb:v13FEp5200*
ID_MODEL_FROM_DATABASE=DataTraveler R3.0
+usb:v13FEp5500*
+ ID_MODEL_FROM_DATABASE=Flash drive
+
+usb:v13FEp6300*
+ ID_MODEL_FROM_DATABASE=SP Mobile C31 (64GB)
+
usb:v1400*
ID_VENDOR_FROM_DATABASE=Axxion Group Corp.
usb:v1403p0003*
ID_MODEL_FROM_DATABASE=Digital Photo Frame (DPF-1104)
+usb:v1404*
+ ID_VENDOR_FROM_DATABASE=Fundamental Software, Inc.
+
+usb:v1404pCDDC*
+ ID_MODEL_FROM_DATABASE=Dongle
+
usb:v1409*
ID_VENDOR_FROM_DATABASE=IDS Imaging Development Systems GmbH
usb:v1409p1485*
ID_MODEL_FROM_DATABASE=uEye UI1485
+usb:v1409p3240*
+ ID_MODEL_FROM_DATABASE=uEye UI3240
+
usb:v140E*
ID_VENDOR_FROM_DATABASE=Telechips, Inc.
usb:v1430p4734*
ID_MODEL_FROM_DATABASE=Guitar Hero4 hub
+usb:v1430p4748*
+ ID_MODEL_FROM_DATABASE=Guitar Hero X-plorer
+
usb:v1430p474B*
ID_MODEL_FROM_DATABASE=Guitar Hero MIDI interface
+usb:v1430p8888*
+ ID_MODEL_FROM_DATABASE=TX6500+ Dance Pad
+
+usb:v1430pF801*
+ ID_MODEL_FROM_DATABASE=Controller
+
usb:v1431*
ID_VENDOR_FROM_DATABASE=Pertech Resources, Inc.
usb:v1452p8B01*
ID_MODEL_FROM_DATABASE=DS620
+usb:v1452p9001*
+ ID_MODEL_FROM_DATABASE=DS820
+
usb:v1453*
ID_VENDOR_FROM_DATABASE=Radio Shack
usb:v145Fp0176*
ID_MODEL_FROM_DATABASE=Isla Keyboard
+usb:v145Fp019F*
+ ID_MODEL_FROM_DATABASE=17676 Webcam
+
+usb:v145Fp01E5*
+ ID_MODEL_FROM_DATABASE=Keyboard [GXT 830]
+
+usb:v145Fp0212*
+ ID_MODEL_FROM_DATABASE=Panora Widescreen Graphic Tablet
+
+usb:v145Fp023F*
+ ID_MODEL_FROM_DATABASE=Mouse [GXT 168]
+
usb:v1460*
ID_VENDOR_FROM_DATABASE=Tatung Co.
usb:v1462p8807*
ID_MODEL_FROM_DATABASE=DIGIVOX mini III [af9015]
+usb:v146B*
+ ID_VENDOR_FROM_DATABASE=BigBen Interactive
+
+usb:v146Bp0601*
+ ID_MODEL_FROM_DATABASE=Controller for Xbox 360
+
+usb:v146Bp0902*
+ ID_MODEL_FROM_DATABASE=Wired Mini PS3 Game Controller
+
usb:v1472*
ID_VENDOR_FROM_DATABASE=Huawei-3Com
usb:v149A*
ID_VENDOR_FROM_DATABASE=Imagination Technologies
+usb:v149Ap069B*
+ ID_MODEL_FROM_DATABASE=PURE Digital Evoke-1XT Tri-band
+
usb:v149Ap2107*
ID_MODEL_FROM_DATABASE=DBX1 DSP core
usb:v14B0*
ID_VENDOR_FROM_DATABASE=StarTech.com Ltd.
+usb:v14B0p3410*
+ ID_MODEL_FROM_DATABASE=Serial Adapter ICUSB2321X [TUSB3410I]
+
usb:v14B2*
ID_VENDOR_FROM_DATABASE=Ralink Technology, Corp.
usb:v14CDp127B*
ID_MODEL_FROM_DATABASE=SDXC Reader
+usb:v14CDp168A*
+ ID_MODEL_FROM_DATABASE=Elecom Co., Ltd MR-K013 Multicard Reader
+
usb:v14CDp6116*
ID_MODEL_FROM_DATABASE=M6116 SATA Bridge
usb:v14ED*
ID_VENDOR_FROM_DATABASE=Shure Inc.
+usb:v14EDp1000*
+ ID_MODEL_FROM_DATABASE=MV5
+
+usb:v14EDp1002*
+ ID_MODEL_FROM_DATABASE=MV51
+
+usb:v14EDp1003*
+ ID_MODEL_FROM_DATABASE=MVi
+
+usb:v14EDp1004*
+ ID_MODEL_FROM_DATABASE=SHA900
+
+usb:v14EDp1005*
+ ID_MODEL_FROM_DATABASE=KSE1500
+
+usb:v14EDp1011*
+ ID_MODEL_FROM_DATABASE=MV88+
+
+usb:v14EDp1100*
+ ID_MODEL_FROM_DATABASE=ANIUSB-MATRIX
+
+usb:v14EDp1101*
+ ID_MODEL_FROM_DATABASE=P300
+
usb:v14EDp29B6*
ID_MODEL_FROM_DATABASE=X2u Adapter
+usb:v14EDp3000*
+ ID_MODEL_FROM_DATABASE=RMCE-USB
+
usb:v14F7*
ID_VENDOR_FROM_DATABASE=TechniSat Digital GmbH
usb:v1501*
ID_VENDOR_FROM_DATABASE=Pine-Tum Enterprise Co., Ltd.
+usb:v1504*
+ ID_VENDOR_FROM_DATABASE=Bixolon CO LTD
+
+usb:v1504p001F*
+ ID_MODEL_FROM_DATABASE=SRP-350II Thermal Receipt Printer
+
usb:v1509*
ID_VENDOR_FROM_DATABASE=First International Computer, Inc.
usb:v152Dp0561*
ID_MODEL_FROM_DATABASE=JMS551 - Sharkoon SATA QuickPort Duo
+usb:v152Dp0562*
+ ID_MODEL_FROM_DATABASE=JMS567 SATA 6Gb/s bridge
+
usb:v152Dp0567*
ID_MODEL_FROM_DATABASE=JMS567 SATA 6Gb/s bridge
+usb:v152Dp0576*
+ ID_MODEL_FROM_DATABASE=Gen1 SATA 6Gb/s Bridge
+
usb:v152Dp0578*
- ID_MODEL_FROM_DATABASE=JMS567 SATA 6Gb/s bridge
+ ID_MODEL_FROM_DATABASE=JMS578 SATA 6Gb/s
+
+usb:v152Dp0583*
+ ID_MODEL_FROM_DATABASE=JMS583Gen 2 to PCIe Gen3x2 Bridge
usb:v152Dp0770*
ID_MODEL_FROM_DATABASE=Alienware Integrated Webcam
usb:v152Dp1561*
ID_MODEL_FROM_DATABASE=JMS561U two ports SATA 6Gb/s bridge
+usb:v152Dp1576*
+ ID_MODEL_FROM_DATABASE=External Disk 3.0
+
usb:v152Dp2329*
ID_MODEL_FROM_DATABASE=JM20329 SATA Bridge
usb:v152Dp3569*
ID_MODEL_FROM_DATABASE=JMS566 SATA 3Gb/s bridge
+usb:v152Dp578E*
+ ID_MODEL_FROM_DATABASE=JMS578 SATA 6Gb/s bridge
+
+usb:v152Dp8561*
+ ID_MODEL_FROM_DATABASE=salcar docking station two disks
+
usb:v152E*
ID_VENDOR_FROM_DATABASE=LG (HLDS)
+usb:v152Ep1640*
+ ID_MODEL_FROM_DATABASE=INIC-1605 SATA Bridge
+
usb:v152Ep2507*
ID_MODEL_FROM_DATABASE=PL-2507 IDE Controller
+usb:v152Ep2571*
+ ID_MODEL_FROM_DATABASE=GP08NU6W DVD-RW
+
usb:v152EpE001*
ID_MODEL_FROM_DATABASE=GSA-5120D DVD-RW
usb:v1532p0001*
ID_MODEL_FROM_DATABASE=RZ01-020300 Optical Mouse [Diamondback]
+usb:v1532p0002*
+ ID_MODEL_FROM_DATABASE=Diamondback Optical Mouse
+
usb:v1532p0003*
ID_MODEL_FROM_DATABASE=Krait Mouse
+usb:v1532p0005*
+ ID_MODEL_FROM_DATABASE=Boomslang CE
+
usb:v1532p0007*
ID_MODEL_FROM_DATABASE=DeathAdder Mouse
+usb:v1532p0009*
+ ID_MODEL_FROM_DATABASE=Gaming Mouse [Tempest Habu]
+
+usb:v1532p000A*
+ ID_MODEL_FROM_DATABASE=Mamba (Wired)
+
+usb:v1532p000C*
+ ID_MODEL_FROM_DATABASE=Lachesis
+
+usb:v1532p000D*
+ ID_MODEL_FROM_DATABASE=DiamondBack 3G
+
+usb:v1532p000E*
+ ID_MODEL_FROM_DATABASE=Megalodon
+
+usb:v1532p000F*
+ ID_MODEL_FROM_DATABASE=Mamba (Wireless)
+
+usb:v1532p0012*
+ ID_MODEL_FROM_DATABASE=Gaming Mouse [Salmosa]
+
usb:v1532p0013*
- ID_MODEL_FROM_DATABASE=Orochi mouse
+ ID_MODEL_FROM_DATABASE=Orochi 2011
usb:v1532p0015*
ID_MODEL_FROM_DATABASE=Naga Mouse
usb:v1532p0016*
- ID_MODEL_FROM_DATABASE=DeathAdder Mouse
+ ID_MODEL_FROM_DATABASE=DeathAdder 3.5G
usb:v1532p0017*
ID_MODEL_FROM_DATABASE=RZ01-0035 Laser Gaming Mouse [Imperator]
+usb:v1532p0019*
+ ID_MODEL_FROM_DATABASE=Marauder
+
+usb:v1532p001A*
+ ID_MODEL_FROM_DATABASE=Spectre
+
+usb:v1532p001B*
+ ID_MODEL_FROM_DATABASE=Gaming Headset
+
usb:v1532p001C*
ID_MODEL_FROM_DATABASE=RZ01-0036 Optical Gaming Mouse [Abyssus]
+usb:v1532p001E*
+ ID_MODEL_FROM_DATABASE=Lachesis (5600 DPI)
+
+usb:v1532p001F*
+ ID_MODEL_FROM_DATABASE=Naga Epic (Wired)
+
+usb:v1532p0020*
+ ID_MODEL_FROM_DATABASE=Abyssus 1800
+
+usb:v1532p0021*
+ ID_MODEL_FROM_DATABASE=Naga Epic Dock (Wireless, Bluetooth)
+
+usb:v1532p0022*
+ ID_MODEL_FROM_DATABASE=Gaming Mouse [TRON]
+
+usb:v1532p0023*
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard [TRON]
+
usb:v1532p0024*
- ID_MODEL_FROM_DATABASE=Mamba
+ ID_MODEL_FROM_DATABASE=Mamba 2012 (Wired)
+
+usb:v1532p0025*
+ ID_MODEL_FROM_DATABASE=Mamba 2012 (Wireless)
+
+usb:v1532p0029*
+ ID_MODEL_FROM_DATABASE=DeathAdder Black Edition
+
+usb:v1532p002A*
+ ID_MODEL_FROM_DATABASE=Gaming Mouse [Star Wars: The Old Republic]
+
+usb:v1532p002B*
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard [Star Wars: The Old Republic]
+
+usb:v1532p002C*
+ ID_MODEL_FROM_DATABASE=Gaming Headset [Star Wars: The Old Republic]
usb:v1532p002E*
- ID_MODEL_FROM_DATABASE=RZ01-0058 Gaming Mouse [Naga]
+ ID_MODEL_FROM_DATABASE=RZ01-0058 Gaming Mouse [Naga 2012]
usb:v1532p002F*
ID_MODEL_FROM_DATABASE=Imperator 2012
+usb:v1532p0031*
+ ID_MODEL_FROM_DATABASE=Gaming Mouse Dock [Star Wars: The Old Republic]
+
+usb:v1532p0032*
+ ID_MODEL_FROM_DATABASE=Ouroboros 2012 (Wired)
+
+usb:v1532p0033*
+ ID_MODEL_FROM_DATABASE=Ouroboros 2012 (Wireless)
+
+usb:v1532p0034*
+ ID_MODEL_FROM_DATABASE=Taipan
+
+usb:v1532p0035*
+ ID_MODEL_FROM_DATABASE=Krait 2013 Essential
+
usb:v1532p0036*
- ID_MODEL_FROM_DATABASE=RZ01-0075, Gaming Mouse [Naga Hex]
+ ID_MODEL_FROM_DATABASE=RZ01-0075, Gaming Mouse [Naga Hex (Red)]
+
+usb:v1532p0037*
+ ID_MODEL_FROM_DATABASE=DeathAdder 2013
+
+usb:v1532p0038*
+ ID_MODEL_FROM_DATABASE=DeathAdder 1800
+
+usb:v1532p0039*
+ ID_MODEL_FROM_DATABASE=Orochi 2013
+
+usb:v1532p003E*
+ ID_MODEL_FROM_DATABASE=Naga Epic Chroma (Wired)
+
+usb:v1532p003F*
+ ID_MODEL_FROM_DATABASE=Naga Epic Chroma (Wireless)
+
+usb:v1532p0040*
+ ID_MODEL_FROM_DATABASE=Naga 2014
+
+usb:v1532p0041*
+ ID_MODEL_FROM_DATABASE=Naga Hex
usb:v1532p0042*
ID_MODEL_FROM_DATABASE=Abyssus 2014
ID_MODEL_FROM_DATABASE=Mamba 2015 Tournament Edition [RZ01-01370100-R3]
usb:v1532p0048*
- ID_MODEL_FROM_DATABASE=Orochi (Wired)
+ ID_MODEL_FROM_DATABASE=Orochi 2015 (Wired)
+
+usb:v1532p004A*
+ ID_MODEL_FROM_DATABASE=RZ03-0133 Gaming Lapboard, Keyboard Mouse Combo, Dongle [Turret Dongle]
+
+usb:v1532p004C*
+ ID_MODEL_FROM_DATABASE=Diamondback Chroma
+
+usb:v1532p004D*
+ ID_MODEL_FROM_DATABASE=DeathAdder 2000 (Cynosa Pro Bundle)
+
+usb:v1532p0050*
+ ID_MODEL_FROM_DATABASE=Naga Hex V2
+
+usb:v1532p0053*
+ ID_MODEL_FROM_DATABASE=Naga Chroma
+
+usb:v1532p0054*
+ ID_MODEL_FROM_DATABASE=DeathAdder 3500
+
+usb:v1532p0056*
+ ID_MODEL_FROM_DATABASE=Orochi 2015 (Wireless)
+
+usb:v1532p0059*
+ ID_MODEL_FROM_DATABASE=RZ01-0212 Gaming Mouse [Lancehead (Wired)]
+
+usb:v1532p005A*
+ ID_MODEL_FROM_DATABASE=RZ01-0212 Gaming Mouse [Lancehead (Wireless)]
+
+usb:v1532p005B*
+ ID_MODEL_FROM_DATABASE=Abyssus V2
+
+usb:v1532p005C*
+ ID_MODEL_FROM_DATABASE=DeathAdder Elite
+
+usb:v1532p005E*
+ ID_MODEL_FROM_DATABASE=Abyssus 2000
+
+usb:v1532p005F*
+ ID_MODEL_FROM_DATABASE=DeathAdder 2000
+
+usb:v1532p0060*
+ ID_MODEL_FROM_DATABASE=RZ01-0213 Gaming Mouse [Lancehead Tournament Edition]
+
+usb:v1532p0062*
+ ID_MODEL_FROM_DATABASE=Atheris
+
+usb:v1532p0064*
+ ID_MODEL_FROM_DATABASE=Basilisk
+
+usb:v1532p0065*
+ ID_MODEL_FROM_DATABASE=RZ01-0265, Gaming Mouse [Basilisk Essential]
+
+usb:v1532p0067*
+ ID_MODEL_FROM_DATABASE=Naga Trinity
+
+usb:v1532p0068*
+ ID_MODEL_FROM_DATABASE=Gaming Mouse Mat [Firefly Hyperflux]
+
+usb:v1532p0069*
+ ID_MODEL_FROM_DATABASE=Gaming Mouse [Mamba Hyperflux]
+
+usb:v1532p006A*
+ ID_MODEL_FROM_DATABASE=Abyssus Elite (D.Va Edition)
+
+usb:v1532p006B*
+ ID_MODEL_FROM_DATABASE=Abyssus Essential
+
+usb:v1532p006C*
+ ID_MODEL_FROM_DATABASE=Mamba Elite (Wired)
+
+usb:v1532p006E*
+ ID_MODEL_FROM_DATABASE=DeathAdder Essential
+
+usb:v1532p006F*
+ ID_MODEL_FROM_DATABASE=RZ01-0257 Gaming Mouse [Lancehead Wireless (2019, Wireless, Receiver)]
+
+usb:v1532p0070*
+ ID_MODEL_FROM_DATABASE=RZ01-0257 Gaming Mouse [Lancehead Wireless (2019, Wired)]
+
+usb:v1532p0071*
+ ID_MODEL_FROM_DATABASE=RZ01-0254 Gaming Mouse [DeathAdder Essential White Edition]
+
+usb:v1532p0072*
+ ID_MODEL_FROM_DATABASE=Mamba 2018 (Wireless)
+
+usb:v1532p0073*
+ ID_MODEL_FROM_DATABASE=Mamba 2018 (Wired)
+
+usb:v1532p0078*
+ ID_MODEL_FROM_DATABASE=Viper (wired)
+
+usb:v1532p007A*
+ ID_MODEL_FROM_DATABASE=RC30-0305 Gaming Mouse [Viper Ultimate (Wired)]
+
+usb:v1532p007B*
+ ID_MODEL_FROM_DATABASE=RC30-0305 Gaming Mouse Dongle [Viper Ultimate (Wireless)]
+
+usb:v1532p007E*
+ ID_MODEL_FROM_DATABASE=RC30-030502 Mouse Dock
+
+usb:v1532p0084*
+ ID_MODEL_FROM_DATABASE=RZ01-0321 Gaming Mouse [DeathAdder V2]
+
+usb:v1532p0085*
+ ID_MODEL_FROM_DATABASE=RZ01-0316 Gaming Mouse [Basilisk V2]
+
+usb:v1532p0088*
+ ID_MODEL_FROM_DATABASE=Razer Basilisk Ultimate Dongle
usb:v1532p0101*
ID_MODEL_FROM_DATABASE=Copperhead Mouse
usb:v1532p0102*
ID_MODEL_FROM_DATABASE=Tarantula Keyboard
+usb:v1532p0103*
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard [Reclusa]
+
+usb:v1532p0105*
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard [ProType]
+
+usb:v1532p0106*
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard [ProType]
+
usb:v1532p0109*
ID_MODEL_FROM_DATABASE=Lycosa Keyboard
+usb:v1532p010B*
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard [Arctosa]
+
usb:v1532p010D*
ID_MODEL_FROM_DATABASE=BlackWidow Ultimate 2012
+usb:v1532p010E*
+ ID_MODEL_FROM_DATABASE=BlackWidow Classic (Alternate)
+
+usb:v1532p010F*
+ ID_MODEL_FROM_DATABASE=Anansi
+
+usb:v1532p0110*
+ ID_MODEL_FROM_DATABASE=Cyclosa
+
+usb:v1532p0111*
+ ID_MODEL_FROM_DATABASE=Nostromo
+
usb:v1532p0113*
ID_MODEL_FROM_DATABASE=RZ07-0074 Gaming Keypad [Orbweaver]
+usb:v1532p0114*
+ ID_MODEL_FROM_DATABASE=DeathStalker Ultimate
+
+usb:v1532p0116*
+ ID_MODEL_FROM_DATABASE=Blade Pro (2015)
+
usb:v1532p0118*
- ID_MODEL_FROM_DATABASE=RZ03-0080, Gaming Keyboard [Deathstalker]
+ ID_MODEL_FROM_DATABASE=RZ03-0080, Gaming Keyboard [Deathstalker Essential]
+
+usb:v1532p0119*
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard [Lycosa]
usb:v1532p011A*
ID_MODEL_FROM_DATABASE=BlackWidow Ultimate 2013
usb:v1532p011B*
ID_MODEL_FROM_DATABASE=BlackWidow Classic
+usb:v1532p011C*
+ ID_MODEL_FROM_DATABASE=BlackWidow Tournament Edition Stealth
+
+usb:v1532p011D*
+ ID_MODEL_FROM_DATABASE=Blade 2013
+
+usb:v1532p011E*
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard Dock [Edge Keyboard Dock]
+
+usb:v1532p011F*
+ ID_MODEL_FROM_DATABASE=Deathstalker Essential 2014
+
+usb:v1532p0200*
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard [Reclusa]
+
+usb:v1532p0201*
+ ID_MODEL_FROM_DATABASE=Tartarus
+
+usb:v1532p0202*
+ ID_MODEL_FROM_DATABASE=DeathStalker Expert
+
usb:v1532p0203*
ID_MODEL_FROM_DATABASE=BlackWidow Chroma
+usb:v1532p0204*
+ ID_MODEL_FROM_DATABASE=DeathStalker Chroma
+
usb:v1532p0205*
ID_MODEL_FROM_DATABASE=Blade Stealth
+usb:v1532p0207*
+ ID_MODEL_FROM_DATABASE=Orbweaver Chroma keypad
+
usb:v1532p0208*
- ID_MODEL_FROM_DATABASE=Tartarus
+ ID_MODEL_FROM_DATABASE=Tartarus Chroma
usb:v1532p0209*
ID_MODEL_FROM_DATABASE=BlackWidow Tournament Edition Chroma
+usb:v1532p020D*
+ ID_MODEL_FROM_DATABASE=Cynosa Pro keyboard (Cynosa Pro Bundle)
+
+usb:v1532p020F*
+ ID_MODEL_FROM_DATABASE=Blade QHD
+
+usb:v1532p0210*
+ ID_MODEL_FROM_DATABASE=Blade Pro (Late 2016)
+
+usb:v1532p0211*
+ ID_MODEL_FROM_DATABASE=BlackWidow Chroma (Overwatch)
+
usb:v1532p0214*
ID_MODEL_FROM_DATABASE=BlackWidow Ultimate 2016
+usb:v1532p0215*
+ ID_MODEL_FROM_DATABASE=Core
+
usb:v1532p0216*
ID_MODEL_FROM_DATABASE=BlackWidow X Chroma
+usb:v1532p0217*
+ ID_MODEL_FROM_DATABASE=BlackWidow X Ultimate
+
usb:v1532p021A*
ID_MODEL_FROM_DATABASE=BlackWidow X Tournament Edition Chroma
+usb:v1532p021B*
+ ID_MODEL_FROM_DATABASE=Gaming Keyboard [BlackWidow X Tournament Edition]
+
+usb:v1532p021E*
+ ID_MODEL_FROM_DATABASE=Ornata Chroma
+
+usb:v1532p021F*
+ ID_MODEL_FROM_DATABASE=Ornata
+
usb:v1532p0220*
ID_MODEL_FROM_DATABASE=Blade Stealth (2016)
+usb:v1532p0221*
+ ID_MODEL_FROM_DATABASE=RZ03-0203 Gaming Keyboard [BlackWidow Chroma V2]
+
+usb:v1532p0224*
+ ID_MODEL_FROM_DATABASE=Blade (Late 2016)
+
+usb:v1532p0225*
+ ID_MODEL_FROM_DATABASE=Blade Pro (2017)
+
+usb:v1532p0226*
+ ID_MODEL_FROM_DATABASE=Huntsman Elite
+
+usb:v1532p0227*
+ ID_MODEL_FROM_DATABASE=Huntsman
+
+usb:v1532p0228*
+ ID_MODEL_FROM_DATABASE=BlackWidow Elite
+
+usb:v1532p022A*
+ ID_MODEL_FROM_DATABASE=Cynosa Chroma
+
+usb:v1532p022B*
+ ID_MODEL_FROM_DATABASE=Tartarus V2
+
+usb:v1532p022C*
+ ID_MODEL_FROM_DATABASE=Cynosa Chroma Pro
+
+usb:v1532p022D*
+ ID_MODEL_FROM_DATABASE=Blade Stealth (Mid 2017)
+
+usb:v1532p022F*
+ ID_MODEL_FROM_DATABASE=Blade Pro FullHD (2017)
+
+usb:v1532p0232*
+ ID_MODEL_FROM_DATABASE=Blade Stealth (Late 2017)
+
+usb:v1532p0233*
+ ID_MODEL_FROM_DATABASE=Blade 15 (2018)
+
+usb:v1532p0234*
+ ID_MODEL_FROM_DATABASE=Blade Pro 17 (2019)
+
+usb:v1532p0235*
+ ID_MODEL_FROM_DATABASE=BlackWidow Lite (2018)
+
+usb:v1532p0237*
+ ID_MODEL_FROM_DATABASE=BlackWidow Essential
+
+usb:v1532p0239*
+ ID_MODEL_FROM_DATABASE=Blade Stealth (2019)
+
+usb:v1532p023A*
+ ID_MODEL_FROM_DATABASE=Blade 15 (2019) Advanced
+
+usb:v1532p023B*
+ ID_MODEL_FROM_DATABASE=Blade 15 (2018) Base Model
+
+usb:v1532p023F*
+ ID_MODEL_FROM_DATABASE=RZ03-0274 Gaming Keyboard [Cynosa Lite]
+
+usb:v1532p0240*
+ ID_MODEL_FROM_DATABASE=Blade 15 (2018) Mercury
+
+usb:v1532p0241*
+ ID_MODEL_FROM_DATABASE=BlackWidow (2019)
+
+usb:v1532p0243*
+ ID_MODEL_FROM_DATABASE=Huntsman Tournament Edition
+
+usb:v1532p0244*
+ ID_MODEL_FROM_DATABASE=RZ07-0311 Gaming Keypad [Tartarus Pro]
+
+usb:v1532p0245*
+ ID_MODEL_FROM_DATABASE=Blade 15 (Mid 2019) Mercury
+
+usb:v1532p0246*
+ ID_MODEL_FROM_DATABASE=Blade 15 (Mid 2019) Base Model
+
+usb:v1532p024A*
+ ID_MODEL_FROM_DATABASE=Blade Stealth (Late 2019)
+
+usb:v1532p024B*
+ ID_MODEL_FROM_DATABASE=Gaming Laptop [Blade 15 Advanced (Late 2019)]
+
+usb:v1532p024C*
+ ID_MODEL_FROM_DATABASE=Gaming Laptop [Blade Pro (Late 2019)]
+
+usb:v1532p024D*
+ ID_MODEL_FROM_DATABASE=Blade 15 Studio Edition (2019)
+
+usb:v1532p0253*
+ ID_MODEL_FROM_DATABASE=RZ09-0330, Gaming Laptop [Blade 15 Advanced (Early 2020)]
+
+usb:v1532p0255*
+ ID_MODEL_FROM_DATABASE=RZ09-0328, Gaming Laptop [Blade 15 Base Model (2020)]
+
usb:v1532p0300*
ID_MODEL_FROM_DATABASE=RZ06-0063 Motion Sensing Controllers [Hydra]
+usb:v1532p0401*
+ ID_MODEL_FROM_DATABASE=Gaming Arcade Stick [Panthera]
+
+usb:v1532p0501*
+ ID_MODEL_FROM_DATABASE=Kraken 7.1
+
+usb:v1532p0502*
+ ID_MODEL_FROM_DATABASE=Gaming Headset [Kraken USB]
+
+usb:v1532p0504*
+ ID_MODEL_FROM_DATABASE=Kraken 7.1 Chroma
+
+usb:v1532p0506*
+ ID_MODEL_FROM_DATABASE=Kraken 7.1 (Alternate Version)
+
+usb:v1532p0510*
+ ID_MODEL_FROM_DATABASE=Kraken 7.1 V2
+
+usb:v1532p0511*
+ ID_MODEL_FROM_DATABASE=RZ19-0229 Gaming Microphone
+
+usb:v1532p0514*
+ ID_MODEL_FROM_DATABASE=Electra V2 USB
+
+usb:v1532p0517*
+ ID_MODEL_FROM_DATABASE=Nommo Chroma
+
+usb:v1532p0518*
+ ID_MODEL_FROM_DATABASE=Nommo Pro
+
+usb:v1532p051A*
+ ID_MODEL_FROM_DATABASE=Nari Ultimate
+
+usb:v1532p051C*
+ ID_MODEL_FROM_DATABASE=Nari (Wireless)
+
+usb:v1532p051D*
+ ID_MODEL_FROM_DATABASE=Nari (Wired)
+
+usb:v1532p0520*
+ ID_MODEL_FROM_DATABASE=Kraken Tournament Edition
+
+usb:v1532p0521*
+ ID_MODEL_FROM_DATABASE=Kraken Kitty Edition
+
+usb:v1532p0527*
+ ID_MODEL_FROM_DATABASE=RZ04-0318 Gaming Headset [Kraken Ultimate]
+
+usb:v1532p0904*
+ ID_MODEL_FROM_DATABASE=R201-0282 Gaming Keyboard, Mouse Combination [Turret For Xbox One]
+
+usb:v1532p0A00*
+ ID_MODEL_FROM_DATABASE=Atrox Arcade Stick for Xbox One
+
+usb:v1532p0A02*
+ ID_MODEL_FROM_DATABASE=ManO'War
+
+usb:v1532p0A03*
+ ID_MODEL_FROM_DATABASE=Wildcat
+
usb:v1532p0C00*
- ID_MODEL_FROM_DATABASE=Firefly
+ ID_MODEL_FROM_DATABASE=RZ02-0135 Hard Gaming Mouse Mat [Firefly]
+
+usb:v1532p0C01*
+ ID_MODEL_FROM_DATABASE=Goliathus
+
+usb:v1532p0C02*
+ ID_MODEL_FROM_DATABASE=Goliathus Extended
+
+usb:v1532p0C04*
+ ID_MODEL_FROM_DATABASE=Firefly V2
+
+usb:v1532p0E03*
+ ID_MODEL_FROM_DATABASE=Gaming Webcam [Kiyo]
+
+usb:v1532p0F03*
+ ID_MODEL_FROM_DATABASE=Tiamat 7.1 V2
+
+usb:v1532p0F07*
+ ID_MODEL_FROM_DATABASE=Chroma Mug Holder
+
+usb:v1532p0F08*
+ ID_MODEL_FROM_DATABASE=Base Station Chroma
+
+usb:v1532p0F09*
+ ID_MODEL_FROM_DATABASE=Chroma HDK
+
+usb:v1532p0F0D*
+ ID_MODEL_FROM_DATABASE=Laptop Stand Chroma
+
+usb:v1532p0F13*
+ ID_MODEL_FROM_DATABASE=Lian Li O11 Dynamic Razer Edition
+
+usb:v1532p0F1A*
+ ID_MODEL_FROM_DATABASE=Core X Chroma
+
+usb:v1532p1000*
+ ID_MODEL_FROM_DATABASE=Gaming Controller [Raiju]
+
+usb:v1532p1004*
+ ID_MODEL_FROM_DATABASE=Gaming Controller [Raiju Ultimate Wired]
+
+usb:v1532p1007*
+ ID_MODEL_FROM_DATABASE=Gaming Controller [Raiju 2 Tournament Edition (USB)]
+
+usb:v1532p1008*
+ ID_MODEL_FROM_DATABASE=Gaming Flightstick [Panthera Evo]
+
+usb:v1532p1009*
+ ID_MODEL_FROM_DATABASE=Gaming Controller [Raiju 2 Ultimate Edition (BT)]
+
+usb:v1532p100A*
+ ID_MODEL_FROM_DATABASE=Gaming Controller [Raiju 2 Tournament Edition (BT)]
+
+usb:v1532p110D*
+ ID_MODEL_FROM_DATABASE=Bootloader (Alternate)
+
+usb:v1532p800E*
+ ID_MODEL_FROM_DATABASE=Bootloader
usb:v153B*
ID_VENDOR_FROM_DATABASE=TerraTec Electronic GmbH
usb:v154B*
ID_VENDOR_FROM_DATABASE=PNY
+usb:v154Bp000F*
+ ID_MODEL_FROM_DATABASE=Flash Drive
+
usb:v154Bp0010*
ID_MODEL_FROM_DATABASE=USB 2.0 Flash Drive
usb:v154Bp007A*
ID_MODEL_FROM_DATABASE=Classic Attache Flash Drive
+usb:v154Bp5408*
+ ID_MODEL_FROM_DATABASE=2.5in drive enclosure
+
+usb:v154Bp6000*
+ ID_MODEL_FROM_DATABASE=Flash Drive
+
usb:v154Bp6545*
ID_MODEL_FROM_DATABASE=FD Device
usb:v15A2p003B*
ID_MODEL_FROM_DATABASE=USB2CAN Application for ColdFire DEMOJM board
+usb:v15A2p0041*
+ ID_MODEL_FROM_DATABASE=i.MX51 SystemOnChip in RecoveryMode
+
usb:v15A2p0042*
ID_MODEL_FROM_DATABASE=OSBDM - Debug Port
+usb:v15A2p004E*
+ ID_MODEL_FROM_DATABASE=i.MX53 SystemOnChip in RecoveryMode
+
usb:v15A2p004F*
ID_MODEL_FROM_DATABASE=i.MX28 SystemOnChip in RecoveryMode
usb:v15A2p0061*
ID_MODEL_FROM_DATABASE=i.MX 6Solo/6DualLite SystemOnChip in RecoveryMode
+usb:v15A2p006A*
+ ID_MODEL_FROM_DATABASE=Vybrid series SystemOnChip in RecoveryMode
+
+usb:v15A2p0076*
+ ID_MODEL_FROM_DATABASE=i.MX 7Solo/7Dual SystemOnChip in RecoveryMode
+
+usb:v15A2p0080*
+ ID_MODEL_FROM_DATABASE=i.MX 6ULL SystemOnChip in RecoveryMode
+
usb:v15A4*
ID_VENDOR_FROM_DATABASE=Afatech Technologies, Inc.
usb:v15BAp002B*
ID_MODEL_FROM_DATABASE=ARM-USB-OCD-H JTAG+RS232
+usb:v15BAp003C*
+ ID_MODEL_FROM_DATABASE=TERES Keyboard+Touchpad
+
usb:v15C0*
ID_VENDOR_FROM_DATABASE=XL Imaging
usb:v15D9p0A4D*
ID_MODEL_FROM_DATABASE=Optical Mouse
+usb:v15D9p0A4E*
+ ID_MODEL_FROM_DATABASE=AM-5400 [Optical Mouse]
+
usb:v15D9p0A4F*
ID_MODEL_FROM_DATABASE=Optical Mouse
usb:v15E4p0024*
ID_MODEL_FROM_DATABASE=Mixtrack
+usb:v15E4p003C*
+ ID_MODEL_FROM_DATABASE=DJ2GO2 Touch
+
usb:v15E4p0140*
ID_MODEL_FROM_DATABASE=ION VCR 2 PC / Video 2 PC
+usb:v15E4p3F00*
+ ID_MODEL_FROM_DATABASE=Power A Mini Pro Elite
+
+usb:v15E4p3F0A*
+ ID_MODEL_FROM_DATABASE=Airflo Wired Controller for Xbox 360
+
+usb:v15E4p3F10*
+ ID_MODEL_FROM_DATABASE=Batarang controller for Xbox 360
+
usb:v15E8*
ID_VENDOR_FROM_DATABASE=SohoWare
usb:v15F4p0025*
ID_MODEL_FROM_DATABASE=HanfTek UMT-010 USB2.0 DVB-T (warm)
+usb:v15F4p0131*
+ ID_MODEL_FROM_DATABASE=Astrometa DVB-T/T2/C FM & DAB receiver [RTL2832P]
+
usb:v15F4p0135*
ID_MODEL_FROM_DATABASE=Astrometa T2hybrid
usb:v1604*
ID_VENDOR_FROM_DATABASE=Tascam
+usb:v1604p10C0*
+ ID_MODEL_FROM_DATABASE=Dell Integrated Hub
+
usb:v1604p8000*
ID_MODEL_FROM_DATABASE=US-428 Audio/Midi Controller (without fw)
usb:v1631pC019*
ID_MODEL_FROM_DATABASE=RT2573
+usb:v1633*
+ ID_VENDOR_FROM_DATABASE=AIM GmbH
+
+usb:v1633p4510*
+ ID_MODEL_FROM_DATABASE=ASC1553
+
+usb:v1633p4520*
+ ID_MODEL_FROM_DATABASE=ASC429
+
+usb:v1633p4560*
+ ID_MODEL_FROM_DATABASE=ASC-FDX
+
usb:v1645*
ID_VENDOR_FROM_DATABASE=Entrega [hex]
usb:v1679p2002*
ID_MODEL_FROM_DATABASE=Cheetah SPI Host Adapter
+usb:v167B*
+ ID_VENDOR_FROM_DATABASE=Pure Digital Technologies, Inc.
+
+usb:v167Bp2009*
+ ID_MODEL_FROM_DATABASE=Flip Ultra U1120
+
usb:v1680*
ID_VENDOR_FROM_DATABASE=Golden Bridge Electech Inc.
ID_VENDOR_FROM_DATABASE=ZOOM Corporation
usb:v1686p0045*
- ID_MODEL_FROM_DATABASE=H4 Digital Recorder
+ ID_MODEL_FROM_DATABASE=Handy Recorder stereo mix
+
+usb:v1686p01C0*
+ ID_MODEL_FROM_DATABASE=Zoom Handy Recorder card reader
+
+usb:v1686p01C5*
+ ID_MODEL_FROM_DATABASE=Zoom Handy Recorder multi track
+
+usb:v1686p03D5*
+ ID_MODEL_FROM_DATABASE=LiveTrak L-12
usb:v1687*
ID_VENDOR_FROM_DATABASE=Kingmax Digital Inc.
usb:v1689pFD00*
ID_MODEL_FROM_DATABASE=Onza Tournament Edition controller
+usb:v1689pFD01*
+ ID_MODEL_FROM_DATABASE=Onza Classic Edition
+
+usb:v1689pFE00*
+ ID_MODEL_FROM_DATABASE=Sabertooth Elite
+
usb:v168C*
ID_VENDOR_FROM_DATABASE=Atheros Communications
usb:v16C0p0488*
ID_MODEL_FROM_DATABASE=Teensyduino Flight Sim Controls
+usb:v16C0p05B5*
+ ID_MODEL_FROM_DATABASE=BU0836
+
usb:v16C0p05DC*
ID_MODEL_FROM_DATABASE=shared ID for use with libusb
usb:v16C0p05DD*
ID_MODEL_FROM_DATABASE=BlackcatUSB2
+usb:v16C0p05DE*
+ ID_MODEL_FROM_DATABASE=Flashcat
+
usb:v16C0p05DF*
ID_MODEL_FROM_DATABASE=HID device except mice, keyboards, and joysticks
usb:v16C0p08CD*
ID_MODEL_FROM_DATABASE=Alpermann+Velte SAM7X MT Boot Loader
+usb:v16C0p09CE*
+ ID_MODEL_FROM_DATABASE=LINKUSB
+
usb:v16C0p0A32*
ID_MODEL_FROM_DATABASE=jbmedia Light-Manager Pro
usb:v16D0p05BE*
ID_MODEL_FROM_DATABASE=EasyLogic Board
+usb:v16D0p05F0*
+ ID_MODEL_FROM_DATABASE=Superior Freedom Programmable IR Remote
+
usb:v16D0p06CC*
ID_MODEL_FROM_DATABASE=Trinamic TMCM-3110
+usb:v16D0p06F0*
+ ID_MODEL_FROM_DATABASE=Axium AX-R4C Controller
+
+usb:v16D0p06F1*
+ ID_MODEL_FROM_DATABASE=Axium AX-R1D Controller
+
usb:v16D0p06F9*
ID_MODEL_FROM_DATABASE=Gabotronics Xminilab
+usb:v16D0p0726*
+ ID_MODEL_FROM_DATABASE=Autonomic M400 Amplifier
+
+usb:v16D0p0727*
+ ID_MODEL_FROM_DATABASE=Autonomic M800 Amplifier
+
usb:v16D0p0753*
ID_MODEL_FROM_DATABASE=Digistump DigiSpark
usb:v16D0p075D*
ID_MODEL_FROM_DATABASE=AB-1.x UAC2 [Audio Widget]
+usb:v16D0p07CC*
+ ID_MODEL_FROM_DATABASE=Xylanta Ltd, Saint3 Device
+
+usb:v16D0p07F8*
+ ID_MODEL_FROM_DATABASE=Axium AX-R4D Controller
+
usb:v16D0p080A*
ID_MODEL_FROM_DATABASE=S2E1 Interface
+usb:v16D0p0830*
+ ID_MODEL_FROM_DATABASE=DMXControl Projects e.V., Nodle U1
+
+usb:v16D0p0831*
+ ID_MODEL_FROM_DATABASE=DMXControl Projects e.V., Desklamp
+
+usb:v16D0p0832*
+ ID_MODEL_FROM_DATABASE=DMXControl Projects e.V., Nodle U2
+
+usb:v16D0p0833*
+ ID_MODEL_FROM_DATABASE=DMXControl Projects e.V., Nodle R4S
+
usb:v16D0p0870*
ID_MODEL_FROM_DATABASE=Kaufmann Automotive GmbH, RKS+CAN Interface
+usb:v16D0p09F2*
+ ID_MODEL_FROM_DATABASE=Axium AX-1250 Amplifier
+
+usb:v16D0p09F4*
+ ID_MODEL_FROM_DATABASE=Axium AX-Mini4 Amplifier
+
usb:v16D0p0B03*
ID_MODEL_FROM_DATABASE=AIS Receiver [dAISy]
+usb:v16D0p0B7D*
+ ID_MODEL_FROM_DATABASE=Autonomic M801 Amplifier
+
+usb:v16D0p0B7E*
+ ID_MODEL_FROM_DATABASE=Autonomic M401 Amplifier
+
+usb:v16D0p0B7F*
+ ID_MODEL_FROM_DATABASE=Autonomic M120e Amplifier
+
usb:v16D0p0BD4*
ID_MODEL_FROM_DATABASE=codesrc SCSI2SD
+usb:v16D0p0C9B*
+ ID_MODEL_FROM_DATABASE=Fermium LABS srl/LabTrek srl Hall Effect Apparatus
+
+usb:v16D0p0D3C*
+ ID_MODEL_FROM_DATABASE=InputStick BT4.0
+
+usb:v16D0p0E1E*
+ ID_MODEL_FROM_DATABASE=AtomMiner
+
usb:v16D1*
ID_VENDOR_FROM_DATABASE=Suprema Inc.
ID_VENDOR_FROM_DATABASE=King Billion Electronics Co., Ltd.
usb:v16F0*
- ID_VENDOR_FROM_DATABASE=GN ReSound A/S
+ ID_VENDOR_FROM_DATABASE=GN Hearing A/S
usb:v16F0p0001*
ID_MODEL_FROM_DATABASE=Speedlink Programming Interface
usb:v16F0p0003*
ID_MODEL_FROM_DATABASE=Airlink Wireless Programming Interface
+usb:v16F0p0004*
+ ID_MODEL_FROM_DATABASE=Accessory Programming Interface
+
usb:v16F5*
ID_VENDOR_FROM_DATABASE=Futurelogic Inc.
+usb:v1702*
+ ID_VENDOR_FROM_DATABASE=FDI-MATELEC
+
+usb:v1702p0002*
+ ID_MODEL_FROM_DATABASE=Encodeur
+
usb:v1706*
ID_VENDOR_FROM_DATABASE=BlueView Technologies, Inc.
ID_VENDOR_FROM_DATABASE=CANON IMAGING SYSTEM TECHNOLOGIES INC.
usb:v1737*
- ID_VENDOR_FROM_DATABASE=Linksys
+ ID_VENDOR_FROM_DATABASE=802.11g Adapter [Linksys WUSB54GC v3]
usb:v1737p0039*
ID_MODEL_FROM_DATABASE=USB1000 Gigabit Notebook Adapter
usb:v174Cp07D1*
ID_MODEL_FROM_DATABASE=Transcend ESD400 Portable SSD (USB 3.0)
+usb:v174Cp1151*
+ ID_MODEL_FROM_DATABASE=ASM1151W
+
usb:v174Cp1153*
ID_MODEL_FROM_DATABASE=ASM1153 SATA 3Gb/s bridge
ID_MODEL_FROM_DATABASE=ASM1051W SATA 3Gb/s bridge
usb:v174Cp55AA*
- ID_MODEL_FROM_DATABASE=Name: ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge
+ ID_MODEL_FROM_DATABASE=ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge
usb:v174F*
ID_VENDOR_FROM_DATABASE=Syntek
usb:v174Fp110B*
ID_MODEL_FROM_DATABASE=HP Webcam
+usb:v174Fp1122*
+ ID_MODEL_FROM_DATABASE=HP Webcam
+
+usb:v174Fp1169*
+ ID_MODEL_FROM_DATABASE=Lenovo EasyCamera
+
usb:v174Fp1403*
ID_MODEL_FROM_DATABASE=Integrated Webcam
usb:v174Fp1404*
ID_MODEL_FROM_DATABASE=USB Camera device, 1.3 MPixel Web Cam
+usb:v174Fp1758*
+ ID_MODEL_FROM_DATABASE=XYZ printing cameraR2
+
+usb:v174Fp1759*
+ ID_MODEL_FROM_DATABASE=XYZ printing cameraL2
+
usb:v174Fp5212*
ID_MODEL_FROM_DATABASE=USB 2.0 UVC PC Camera
usb:v1761p0B05*
ID_MODEL_FROM_DATABASE=802.11n Network Adapter (wrong ID - swapped vendor and device)
+usb:v1770*
+ ID_VENDOR_FROM_DATABASE=MSI
+
+usb:v1770pFF00*
+ ID_MODEL_FROM_DATABASE=steel series rgb keyboard
+
usb:v1772*
ID_VENDOR_FROM_DATABASE=System Level Solutions, Inc.
usb:v1776p501C*
ID_MODEL_FROM_DATABASE=300K CMOS Camera
+usb:v1777*
+ ID_VENDOR_FROM_DATABASE=Microscan Systems, Inc.
+
+usb:v1777p0003*
+ ID_MODEL_FROM_DATABASE=MicroHAWK ID-20
+
usb:v177F*
ID_VENDOR_FROM_DATABASE=Sweex
usb:v1781*
ID_VENDOR_FROM_DATABASE=Multiple Vendors
+usb:v1781p07DF*
+ ID_MODEL_FROM_DATABASE=Axium AX-800DAV Amplifier
+
+usb:v1781p07E1*
+ ID_MODEL_FROM_DATABASE=Axium AX-KPC Keypad
+
+usb:v1781p07E2*
+ ID_MODEL_FROM_DATABASE=Axium AX-KPD Keypad
+
+usb:v1781p07E3*
+ ID_MODEL_FROM_DATABASE=Axium AX-400DA Amplifier
+
usb:v1781p083E*
ID_MODEL_FROM_DATABASE=MetaGeek Wi-Spy
usb:v1781p0938*
ID_MODEL_FROM_DATABASE=Iguanaworks USB IR Transceiver
+usb:v1781p0941*
+ ID_MODEL_FROM_DATABASE=qNimble Quark
+
usb:v1781p0A96*
ID_MODEL_FROM_DATABASE=raphnet.net usb_game12
usb:v1781p0A9F*
ID_MODEL_FROM_DATABASE=raphnet.net MultiDB9joy
+usb:v1781p0BAD*
+ ID_MODEL_FROM_DATABASE=Mantracourt Load Cell
+
usb:v1781p0C30*
ID_MODEL_FROM_DATABASE=Telldus TellStick
usb:v1781p1EF1*
ID_MODEL_FROM_DATABASE=E1701 Modular Controller Card
+usb:v1781p1EF2*
+ ID_MODEL_FROM_DATABASE=E1803 Compact Controller Card
+
usb:v1782*
ID_VENDOR_FROM_DATABASE=Spreadtrum Communications Inc.
+usb:v1782p3D00*
+ ID_MODEL_FROM_DATABASE=F200n mobile phone
+
usb:v1784*
ID_VENDOR_FROM_DATABASE=TopSeed Technology Corp.
usb:v1788*
ID_VENDOR_FROM_DATABASE=ShenZhen Litkconn Technology Co., Ltd.
+usb:v178E*
+ ID_VENDOR_FROM_DATABASE=ASUSTek Computer, Inc. (wrong ID)
+
+usb:v178Ep0B05*
+ ID_MODEL_FROM_DATABASE=CrossLink cable 2GB (wrong ID - swapped vendor and device)
+
usb:v1796*
ID_VENDOR_FROM_DATABASE=Printrex, Inc.
usb:v17A0p0120*
ID_MODEL_FROM_DATABASE=Meteorite condenser microphone
+usb:v17A0p0130*
+ ID_MODEL_FROM_DATABASE=Go Mic Direct
+
+usb:v17A0p0132*
+ ID_MODEL_FROM_DATABASE=Go Mic Mobile wireless receiver
+
usb:v17A0p0200*
ID_MODEL_FROM_DATABASE=StudioDock monitors (internal hub)
usb:v17A0p0210*
ID_MODEL_FROM_DATABASE=StudioGT monitors
+usb:v17A0p0211*
+ ID_MODEL_FROM_DATABASE=StudioGT monitors [CM6400]
+
+usb:v17A0p0240*
+ ID_MODEL_FROM_DATABASE=Go Mic Connect
+
+usb:v17A0p0241*
+ ID_MODEL_FROM_DATABASE=G-Track Pro microphone
+
usb:v17A0p0301*
ID_MODEL_FROM_DATABASE=Q2U handheld microphone with XLR
usb:v17A0p0310*
ID_MODEL_FROM_DATABASE=Meteor condenser microphone
+usb:v17A0p0311*
+ ID_MODEL_FROM_DATABASE=Satellite condenser microphone
+
+usb:v17A0p1616*
+ ID_MODEL_FROM_DATABASE=RXD1 wireless receiver
+
+usb:v17A0pB241*
+ ID_MODEL_FROM_DATABASE=G-Track Pro firmware update
+
+usb:v17A0pB311*
+ ID_MODEL_FROM_DATABASE=Satellite firmware update
+
usb:v17A4*
ID_VENDOR_FROM_DATABASE=Concept2
usb:v17A8p0005*
ID_MODEL_FROM_DATABASE=M-Bus Master MultiPort 250D
+usb:v17A8p0010*
+ ID_MODEL_FROM_DATABASE=444MHz Radio Mesh Frontend
+
+usb:v17A8p0011*
+ ID_MODEL_FROM_DATABASE=444MHz RF sniffer
+
+usb:v17A8p0012*
+ ID_MODEL_FROM_DATABASE=870MHz Radio Mesh Frontend
+
+usb:v17A8p0013*
+ ID_MODEL_FROM_DATABASE=870MHz RF sniffer
+
usb:v17B3*
ID_VENDOR_FROM_DATABASE=Grey Innovation
usb:v17CCp041C*
ID_MODEL_FROM_DATABASE=Audio 2 DJ
+usb:v17CCp041D*
+ ID_MODEL_FROM_DATABASE=Traktor Audio 2
+
usb:v17CCp0808*
ID_MODEL_FROM_DATABASE=Maschine Controller
usb:v17CCp0D8D*
ID_MODEL_FROM_DATABASE=Guitarrig Mobile
+usb:v17CCp1001*
+ ID_MODEL_FROM_DATABASE=Komplete Audio 6
+
+usb:v17CCp1110*
+ ID_MODEL_FROM_DATABASE=Maschine Mikro
+
usb:v17CCp1915*
ID_MODEL_FROM_DATABASE=Session I/O
usb:v17E9p0051*
ID_MODEL_FROM_DATABASE=USB VGA Adaptor
+usb:v17E9p0198*
+ ID_MODEL_FROM_DATABASE=DisplayLink
+
+usb:v17E9p019E*
+ ID_MODEL_FROM_DATABASE=Overfly FY-1016A
+
+usb:v17E9p028F*
+ ID_MODEL_FROM_DATABASE=HIS Multi-View II
+
usb:v17E9p030B*
ID_MODEL_FROM_DATABASE=HP T100
usb:v17E9p430A*
ID_MODEL_FROM_DATABASE=HP Port Replicator (Composite Device)
+usb:v17E9p430F*
+ ID_MODEL_FROM_DATABASE=Kensington Dock (Composite Device)
+
usb:v17E9p4312*
ID_MODEL_FROM_DATABASE=S2340T
+usb:v17E9p436E*
+ ID_MODEL_FROM_DATABASE=Dell D3100 Docking Station
+
+usb:v17E9pFF10*
+ ID_MODEL_FROM_DATABASE=I1659FWUX {AOC Powered Monitor]
+
usb:v17EB*
ID_VENDOR_FROM_DATABASE=Cornice, Inc.
ID_VENDOR_FROM_DATABASE=Lenovo
usb:v17EFp1000*
- ID_MODEL_FROM_DATABASE=Hub
+ ID_MODEL_FROM_DATABASE=ThinkPad X6 UltraBase
usb:v17EFp1003*
ID_MODEL_FROM_DATABASE=Integrated Smart Card Reader
usb:v17EFp1004*
ID_MODEL_FROM_DATABASE=Integrated Webcam
+usb:v17EFp1005*
+ ID_MODEL_FROM_DATABASE=ThinkPad X200 Ultrabase (42X4963 )
+
usb:v17EFp1008*
ID_MODEL_FROM_DATABASE=Hub
usb:v17EFp100A*
ID_MODEL_FROM_DATABASE=ThinkPad Mini Dock Plus Series 3
+usb:v17EFp100F*
+ ID_MODEL_FROM_DATABASE=ThinkPad Ultra Dock Hub
+
+usb:v17EFp1010*
+ ID_MODEL_FROM_DATABASE=ThinkPad Ultra Dock Hub
+
+usb:v17EFp1020*
+ ID_MODEL_FROM_DATABASE=ThinkPad Dock Hub
+
+usb:v17EFp1021*
+ ID_MODEL_FROM_DATABASE=ThinkPad Dock Hub [Cypress HX2VL]
+
+usb:v17EFp3049*
+ ID_MODEL_FROM_DATABASE=ThinkPad OneLink integrated audio
+
usb:v17EFp304B*
ID_MODEL_FROM_DATABASE=AX88179 Gigabit Ethernet [ThinkPad OneLink GigaLAN]
+usb:v17EFp304F*
+ ID_MODEL_FROM_DATABASE=RTL8153 Gigabit Ethernet [ThinkPad OneLink Pro Dock]
+
+usb:v17EFp3060*
+ ID_MODEL_FROM_DATABASE=ThinkPad Dock
+
+usb:v17EFp3062*
+ ID_MODEL_FROM_DATABASE=ThinkPad Dock Ethernet [Realtek RTL8153B]
+
+usb:v17EFp3063*
+ ID_MODEL_FROM_DATABASE=ThinkPad Dock Audio
+
+usb:v17EFp3066*
+ ID_MODEL_FROM_DATABASE=ThinkPad Thunderbolt 3 Dock MCU
+
+usb:v17EFp3069*
+ ID_MODEL_FROM_DATABASE=ThinkPad TBT3 LAN
+
+usb:v17EFp306A*
+ ID_MODEL_FROM_DATABASE=ThinkPad Thunderbolt 3 Dock Audio
+
usb:v17EFp3815*
ID_MODEL_FROM_DATABASE=ChipsBnk 2GB USB Stick
usb:v17EFp4802*
- ID_MODEL_FROM_DATABASE=Lenovo Vc0323+MI1310_SOC Camera
+ ID_MODEL_FROM_DATABASE=Vc0323+MI1310_SOC Camera
usb:v17EFp4807*
ID_MODEL_FROM_DATABASE=UVC Camera
usb:v17EFp6009*
ID_MODEL_FROM_DATABASE=ThinkPad Keyboard with TrackPoint
+usb:v17EFp600E*
+ ID_MODEL_FROM_DATABASE=Optical Mouse
+
usb:v17EFp6014*
ID_MODEL_FROM_DATABASE=Mini Wireless Keyboard N5901
+usb:v17EFp6019*
+ ID_MODEL_FROM_DATABASE=M-U0025-O Mouse
+
+usb:v17EFp6022*
+ ID_MODEL_FROM_DATABASE=Ultraslim Plus Wireless Keyboard and Mouse
+
usb:v17EFp6025*
ID_MODEL_FROM_DATABASE=ThinkPad Travel Mouse
+usb:v17EFp602D*
+ ID_MODEL_FROM_DATABASE=Black Silk Keyboard
+
+usb:v17EFp6032*
+ ID_MODEL_FROM_DATABASE=Wireless Dongle for Keyboard and Mouse
+
+usb:v17EFp6044*
+ ID_MODEL_FROM_DATABASE=ThinkPad Laser Mouse
+
+usb:v17EFp6047*
+ ID_MODEL_FROM_DATABASE=ThinkPad Compact Keyboard with TrackPoint
+
+usb:v17EFp604B*
+ ID_MODEL_FROM_DATABASE=Precision Wireless Mouse
+
+usb:v17EFp608D*
+ ID_MODEL_FROM_DATABASE=Optical Mouse
+
+usb:v17EFp609B*
+ ID_MODEL_FROM_DATABASE=Professional Wireless Keyboard and Mouse Combo
+
+usb:v17EFp609C*
+ ID_MODEL_FROM_DATABASE=Professional Wireless Keyboard
+
usb:v17EFp7203*
ID_MODEL_FROM_DATABASE=Ethernet adapter [U2L 100P-Y1]
+usb:v17EFp7205*
+ ID_MODEL_FROM_DATABASE=Thinkpad LAN
+
+usb:v17EFp7217*
+ ID_MODEL_FROM_DATABASE=VGA adapter
+
usb:v17EFp7423*
ID_MODEL_FROM_DATABASE=IdeaPad A1 Tablet
usb:v17EFp749B*
ID_MODEL_FROM_DATABASE=A789 (PTP mode, with debug)
+usb:v17EFp7604*
+ ID_MODEL_FROM_DATABASE=A760 (Mass Storage mode)
+
+usb:v17EFp7605*
+ ID_MODEL_FROM_DATABASE=A760 (Mass Storage mode, with debug)
+
+usb:v17EFp760A*
+ ID_MODEL_FROM_DATABASE=A760 (MTP mode)
+
+usb:v17EFp760B*
+ ID_MODEL_FROM_DATABASE=A760 (MTP mode, with debug)
+
+usb:v17EFp760C*
+ ID_MODEL_FROM_DATABASE=A760 (PTP mode)
+
+usb:v17EFp760D*
+ ID_MODEL_FROM_DATABASE=A760 (PTP mode, with debug)
+
+usb:v17EFp76FC*
+ ID_MODEL_FROM_DATABASE=B8000-H (Yoga Tablet 10) (mass storage)
+
+usb:v17EFp76FD*
+ ID_MODEL_FROM_DATABASE=B8000-H (Yoga Tablet 10) (debug , mass storage)
+
+usb:v17EFp76FE*
+ ID_MODEL_FROM_DATABASE=B8000-H (Yoga Tablet 10) (MTP)
+
+usb:v17EFp76FF*
+ ID_MODEL_FROM_DATABASE=B8000-H (Yoga Tablet 10) (debug , MTP)
+
+usb:v17EFp7702*
+ ID_MODEL_FROM_DATABASE=B8000-H (Yoga Tablet 10) (PTP)
+
+usb:v17EFp7703*
+ ID_MODEL_FROM_DATABASE=B8000-H (Yoga Tablet 10) (debug , PTP)
+
+usb:v17EFp7704*
+ ID_MODEL_FROM_DATABASE=B8000-H (Yoga Tablet 10) (USB tether)
+
+usb:v17EFp7705*
+ ID_MODEL_FROM_DATABASE=B8000-H (Yoga Tablet 10) (debug , USB tether)
+
+usb:v17EFp7706*
+ ID_MODEL_FROM_DATABASE=B8000-H (Yoga Tablet 10) (zerocd)
+
+usb:v17EFp7707*
+ ID_MODEL_FROM_DATABASE=B8000-H (Yoga Tablet 10) (debug , zerocd)
+
+usb:v17EFp785F*
+ ID_MODEL_FROM_DATABASE=TAB 2 A7-10 Tablet
+
+usb:v17EFpB000*
+ ID_MODEL_FROM_DATABASE=Virtual Keyboard and Mouse
+
+usb:v17EFpB001*
+ ID_MODEL_FROM_DATABASE=Ethernet
+
+usb:v17EFpB003*
+ ID_MODEL_FROM_DATABASE=Virtual Keyboard and Mouse / Mass Storage
+
+usb:v17EFpF003*
+ ID_MODEL_FROM_DATABASE=MEDION LIFETAB X10605 MTP mode
+
usb:v17F4*
ID_VENDOR_FROM_DATABASE=WaveSense
ID_VENDOR_FROM_DATABASE=K.K. Rocky
usb:v17F6*
- ID_VENDOR_FROM_DATABASE=Unicomp, Inc
+ ID_VENDOR_FROM_DATABASE=Unicomp, Inc.
usb:v17F6p0709*
ID_MODEL_FROM_DATABASE=Model M Keyboard
+usb:v17F6p0822*
+ ID_MODEL_FROM_DATABASE=Ruffian 6 Keyboard v3 [Model M]
+
usb:v1809*
ID_VENDOR_FROM_DATABASE=Advantech
usb:v1849*
ID_VENDOR_FROM_DATABASE=ASRock Incorporation
+usb:v184F*
+ ID_VENDOR_FROM_DATABASE=K2L GmbH
+
+usb:v184Fp0012*
+ ID_MODEL_FROM_DATABASE=MOCCA compact
+
usb:v1852*
ID_VENDOR_FROM_DATABASE=GYROCOM C&C Co., LTD
+usb:v1852p7022*
+ ID_MODEL_FROM_DATABASE=Fiio E10
+
+usb:v1852p7921*
+ ID_MODEL_FROM_DATABASE=Audiotrak ProDigy CUBE
+
usb:v1852p7922*
ID_MODEL_FROM_DATABASE=Audiotrak DR.DAC2 DX [GYROCOM C&C]
usb:v187Cp0511*
ID_MODEL_FROM_DATABASE=AlienFX Mobile lighting
+usb:v187Cp0513*
+ ID_MODEL_FROM_DATABASE=Gaming Desktop [Aurora R4]
+
+usb:v187Cp0550*
+ ID_MODEL_FROM_DATABASE=LED controller
+
usb:v187Cp0600*
ID_MODEL_FROM_DATABASE=Dual Compatible Game Pad
usb:v18A5p0243*
ID_MODEL_FROM_DATABASE=Flash Drive (Store'n'Go)
+usb:v18A5p0245*
+ ID_MODEL_FROM_DATABASE=Store'n'Stay
+
usb:v18A5p0302*
ID_MODEL_FROM_DATABASE=Flash Drive
usb:v18A5p0304*
ID_MODEL_FROM_DATABASE=Store 'n' Go
+usb:v18A5p0408*
+ ID_MODEL_FROM_DATABASE=Store 'n' Go
+
usb:v18A5p4123*
ID_MODEL_FROM_DATABASE=Store N Go
ID_MODEL_FROM_DATABASE=Celkon A88
usb:v18D1p2D00*
- ID_MODEL_FROM_DATABASE=Android-powered device in accessory mode
+ ID_MODEL_FROM_DATABASE=Android Open Accessory device (accessory)
usb:v18D1p2D01*
- ID_MODEL_FROM_DATABASE=Android-powered device in accessory mode with ADB support
+ ID_MODEL_FROM_DATABASE=Android Open Accessory device (accessory + ADB)
+
+usb:v18D1p2D02*
+ ID_MODEL_FROM_DATABASE=Android Open Accessory device (audio)
+
+usb:v18D1p2D03*
+ ID_MODEL_FROM_DATABASE=Android Open Accessory device (audio + ADB)
+
+usb:v18D1p2D04*
+ ID_MODEL_FROM_DATABASE=Android Open Accessory device (accessory + audio)
+
+usb:v18D1p2D05*
+ ID_MODEL_FROM_DATABASE=Android Open Accessory device (accessory + audio + ADB)
usb:v18D1p4E11*
ID_MODEL_FROM_DATABASE=Nexus One
ID_MODEL_FROM_DATABASE=Nexus 7 2012 (PTP)
usb:v18D1p4EE0*
- ID_MODEL_FROM_DATABASE=Nexus 4 (bootloader)
+ ID_MODEL_FROM_DATABASE=Nexus/Pixel Device (fastboot)
usb:v18D1p4EE1*
- ID_MODEL_FROM_DATABASE=Nexus Device (MTP)
+ ID_MODEL_FROM_DATABASE=Nexus/Pixel Device (MTP)
usb:v18D1p4EE2*
- ID_MODEL_FROM_DATABASE=Nexus Device (debug)
+ ID_MODEL_FROM_DATABASE=Nexus/Pixel Device (MTP + debug)
usb:v18D1p4EE3*
- ID_MODEL_FROM_DATABASE=Nexus 4/5/7/10 (tether)
+ ID_MODEL_FROM_DATABASE=Nexus/Pixel Device (tether)
usb:v18D1p4EE4*
- ID_MODEL_FROM_DATABASE=Nexus 4/5/7/10 (debug + tether)
+ ID_MODEL_FROM_DATABASE=Nexus/Pixel Device (tether+ debug)
usb:v18D1p4EE5*
- ID_MODEL_FROM_DATABASE=Nexus 4 (PTP)
+ ID_MODEL_FROM_DATABASE=Nexus/Pixel Device (PTP)
usb:v18D1p4EE6*
- ID_MODEL_FROM_DATABASE=Nexus 4/5 (PTP + debug)
+ ID_MODEL_FROM_DATABASE=Nexus/Pixel Device (PTP + debug)
+
+usb:v18D1p4EE7*
+ ID_MODEL_FROM_DATABASE=Nexus/Pixel Device (charging + debug)
+
+usb:v18D1p4EE8*
+ ID_MODEL_FROM_DATABASE=Nexus/Pixel Device (MIDI)
+
+usb:v18D1p4EE9*
+ ID_MODEL_FROM_DATABASE=Nexus/Pixel Device (MIDI + debug)
+
+usb:v18D1p5033*
+ ID_MODEL_FROM_DATABASE=Pixel earbuds
usb:v18D1p7102*
ID_MODEL_FROM_DATABASE=Toshiba Thrive tablet
usb:v18D1pD002*
ID_MODEL_FROM_DATABASE=Nexus 4 (debug)
+usb:v18D1pD00D*
+ ID_MODEL_FROM_DATABASE=Xiaomi Mi/Redmi 2 (fastboot)
+
usb:v18D1pD109*
ID_MODEL_FROM_DATABASE=LG G2x MTP
usb:v18ECp3366*
ID_MODEL_FROM_DATABASE=Bresser Biolux NV
+usb:v18ECp5850*
+ ID_MODEL_FROM_DATABASE=CVBS / S-Video Capture Device [UVC]
+
+usb:v18EF*
+ ID_VENDOR_FROM_DATABASE=ELV Elektronik AG
+
+usb:v18EFpE014*
+ ID_MODEL_FROM_DATABASE=FS20PCE
+
+usb:v18EFpE015*
+ ID_MODEL_FROM_DATABASE=FS20PCS
+
+usb:v18EFpE01A*
+ ID_MODEL_FROM_DATABASE=Bedien-Anzeige-Terminal
+
usb:v18F8*
ID_VENDOR_FROM_DATABASE=[Maxxter]
+usb:v18F8p0F97*
+ ID_MODEL_FROM_DATABASE=Optical Gaming Mouse [Xtrem]
+
usb:v18F8p0F99*
ID_MODEL_FROM_DATABASE=Optical gaming mouse
+usb:v18F8p1142*
+ ID_MODEL_FROM_DATABASE=Optical gaming mouse
+
+usb:v18F8p1486*
+ ID_MODEL_FROM_DATABASE=X5s ZEUS Macro Pro Gaming Mouse
+
usb:v18FB*
ID_VENDOR_FROM_DATABASE=Scriptel Corporation
usb:v1908*
ID_VENDOR_FROM_DATABASE=GEMBIRD
+usb:v1908p0102*
+ ID_MODEL_FROM_DATABASE=Digital Photo Frame
+
+usb:v1908p0226*
+ ID_MODEL_FROM_DATABASE=MicroSD Card Reader/Writer
+
+usb:v1908p1315*
+ ID_MODEL_FROM_DATABASE=Digital Photo Frame
+
usb:v1908p1320*
- ID_MODEL_FROM_DATABASE=PhotoFrame PF-15-1
+ ID_MODEL_FROM_DATABASE=DM8261 Flashdisc
+
+usb:v1908p2070*
+ ID_MODEL_FROM_DATABASE=Honk HK-5002 USB Speaker
+
+usb:v1908p2220*
+ ID_MODEL_FROM_DATABASE=Buildwin Media-Player
+
+usb:v1908p2311*
+ ID_MODEL_FROM_DATABASE=Generic UVC 1.00 camera [AppoTech AX2311]
usb:v190D*
ID_VENDOR_FROM_DATABASE=Motorola GSG
usb:v1915p000C*
ID_MODEL_FROM_DATABASE=Wireless Desktop nRF24L01 CX-1766
+usb:v1915p0101*
+ ID_MODEL_FROM_DATABASE=HP Prime Wireless Kit [FOK65AA] (Flash mode)
+
usb:v1915p2233*
ID_MODEL_FROM_DATABASE=Linksys WUSB11 v2.8 802.11b Adapter [Atmel AT76C505]
usb:v1915p2236*
ID_MODEL_FROM_DATABASE=Linksys WUSB11 v3.0 802.11b Adapter [Intersil PRISM 3]
+usb:v1915p7777*
+ ID_MODEL_FROM_DATABASE=Bitcraze Crazyradio (PA) dongle
+
usb:v191C*
ID_VENDOR_FROM_DATABASE=Innovative Technology LTD
usb:v1926p0087*
ID_MODEL_FROM_DATABASE=1950 HID Touchscreen
+usb:v1926p0DBF*
+ ID_MODEL_FROM_DATABASE=HID Touchscreen
+
usb:v1926p0DC2*
ID_MODEL_FROM_DATABASE=HID Touchscreen
+usb:v1928*
+ ID_VENDOR_FROM_DATABASE=Proceq SA
+
+usb:v1928p0400*
+ ID_MODEL_FROM_DATABASE=Equotip Piccolo
+
usb:v192F*
ID_VENDOR_FROM_DATABASE=Avago Technologies, Pte.
usb:v192Fp0616*
ID_MODEL_FROM_DATABASE=ADNS-5700 Optical Mouse Controller (5-button)
+usb:v192Fp0916*
+ ID_MODEL_FROM_DATABASE=ADNS-2710 Optical Mouse Controller
+
usb:v1930*
ID_VENDOR_FROM_DATABASE=Shenzhen Xianhe Technology Co., Ltd.
usb:v1934p5168*
ID_MODEL_FROM_DATABASE=F71610A or F71612A Consumer Infrared Receiver/Transceiver
+usb:v1935*
+ ID_VENDOR_FROM_DATABASE=Elektron Music Machines
+
+usb:v1935p000D*
+ ID_MODEL_FROM_DATABASE=Elektron Digitakt
+
usb:v1938*
ID_VENDOR_FROM_DATABASE=Meinberg Funkuhren GmbH & Co. KG
usb:v1938p0501*
ID_MODEL_FROM_DATABASE=TCR51USB IRIG Time Code Reader
+usb:v1938p0502*
+ ID_MODEL_FROM_DATABASE=TCR600USB IRIG Time Code Reader
+
usb:v1941*
ID_VENDOR_FROM_DATABASE=Dream Link
usb:v1943p2257*
ID_MODEL_FROM_DATABASE=Model 2257 4 Channel Capture Card
+usb:v1943p2263*
+ ID_MODEL_FROM_DATABASE=Model 2263 UVC HD Audio/Video Codec Card
+
usb:v1943pA250*
ID_MODEL_FROM_DATABASE=Model 2250 MPEG and JPEG Capture Card (cold)
ID_MODEL_FROM_DATABASE=Amazon Kindle 3/4/Paperwhite
usb:v1949p0006*
- ID_MODEL_FROM_DATABASE=Kindle Fire
+ ID_MODEL_FROM_DATABASE=Amazon Kindle Fire
usb:v1949p0008*
ID_MODEL_FROM_DATABASE=Amazon Kindle Fire HD 8.9"
+usb:v1949p000A*
+ ID_MODEL_FROM_DATABASE=Amazon Kindle Fire 2nd generation (2012)
+
+usb:v1949p0331*
+ ID_MODEL_FROM_DATABASE=Kindle Fire HD 8 (2018)
+
+usb:v1949p0417*
+ ID_MODEL_FROM_DATABASE=Amazon Zukey; clone of Yubikey 4 OTP+U2F
+
+usb:v1949p0800*
+ ID_MODEL_FROM_DATABASE=Fire Phone
+
usb:v194F*
ID_VENDOR_FROM_DATABASE=PreSonus Audio Electronics, Inc.
usb:v194Fp0103*
ID_MODEL_FROM_DATABASE=AudioBox 1818 VSL
+usb:v194Fp0201*
+ ID_MODEL_FROM_DATABASE=FaderPort
+
usb:v194Fp0301*
ID_MODEL_FROM_DATABASE=AudioBox
usb:v195D*
ID_VENDOR_FROM_DATABASE=Itron Technology iONE
+usb:v195Dp2030*
+ ID_MODEL_FROM_DATABASE=Func KB-460 Gaming Keyboard
+
usb:v195Dp7002*
ID_MODEL_FROM_DATABASE=Libra-Q11 IR remote
usb:v195Dp7779*
ID_MODEL_FROM_DATABASE=Scorpius-P20MT
+usb:v1963*
+ ID_VENDOR_FROM_DATABASE=IK Multimedia
+
+usb:v1963p0005*
+ ID_MODEL_FROM_DATABASE=iRig KEYS
+
+usb:v1963p0046*
+ ID_MODEL_FROM_DATABASE=UNO Synth
+
usb:v1965*
ID_VENDOR_FROM_DATABASE=Uniden Corporation
usb:v1965p0016*
ID_MODEL_FROM_DATABASE=HomePatrol-1
+usb:v1965p0018*
+ ID_MODEL_FROM_DATABASE=UBC125XLT
+
+usb:v1965p001A*
+ ID_MODEL_FROM_DATABASE=BCD436HP Scanner
+
usb:v1967*
ID_VENDOR_FROM_DATABASE=CASIO HITACHI Mobile Communications Co., Ltd.
usb:v1970p0000*
ID_MODEL_FROM_DATABASE=Z Mate 16GB
+usb:v1973*
+ ID_VENDOR_FROM_DATABASE=Spectralink Corporation
+
+usb:v1973p0002*
+ ID_MODEL_FROM_DATABASE=Pivot recovery
+
+usb:v1973p0003*
+ ID_MODEL_FROM_DATABASE=Pivot Media Transfer Protocol
+
+usb:v1973p0004*
+ ID_MODEL_FROM_DATABASE=Pivot Media Transfer Protocol
+
usb:v1975*
ID_VENDOR_FROM_DATABASE=Dongguan Guneetal Wire & Cable Co., Ltd.
usb:v1976*
ID_VENDOR_FROM_DATABASE=Chipsbrand Microelectronics (HK) Co., Ltd.
+usb:v1976p1307*
+ ID_MODEL_FROM_DATABASE=microSD Card Reader
+
usb:v1976p6025*
- ID_MODEL_FROM_DATABASE=Flash Drive 512 MB
+ ID_MODEL_FROM_DATABASE=CBM2090 Flash Drive
usb:v1977*
ID_VENDOR_FROM_DATABASE=T-Logic
usb:v197Dp0222*
ID_MODEL_FROM_DATABASE=BCL 508i
+usb:v1980*
+ ID_VENDOR_FROM_DATABASE=Storage Appliance Corporation
+
+usb:v1980p0808*
+ ID_MODEL_FROM_DATABASE=Clickfree C2 Slimline (527SE)
+
usb:v1989*
ID_VENDOR_FROM_DATABASE=Nuconn Technology Corp.
usb:v1996p3012*
ID_MODEL_FROM_DATABASE=e-ImageData Corp. ScanPro
+usb:v1997*
+ ID_VENDOR_FROM_DATABASE=Shenzhen Riitek Technology Co., Ltd
+
+usb:v1997p0409*
+ ID_MODEL_FROM_DATABASE=wireless mini keyboard with touchpad
+
+usb:v1997p2433*
+ ID_MODEL_FROM_DATABASE=wireless mini keyboard with touchpad
+
usb:v199B*
ID_VENDOR_FROM_DATABASE=MicroStrain, Inc.
usb:v199Ep8101*
ID_MODEL_FROM_DATABASE=DFx 21BU04 Camera
+usb:v199Ep8457*
+ ID_MODEL_FROM_DATABASE=DFK AFU130-L53 camera
+
usb:v199F*
ID_VENDOR_FROM_DATABASE=Benica Corporation
+usb:v19A5*
+ ID_VENDOR_FROM_DATABASE=HARRIS Corp.
+
+usb:v19A5p0004*
+ ID_MODEL_FROM_DATABASE=Remote NDIS Network Device
+
+usb:v19A5p0012*
+ ID_MODEL_FROM_DATABASE=RF-7800S Secure Personal Radio
+
+usb:v19A5p0401*
+ ID_MODEL_FROM_DATABASE=Mass Storage Device
+
+usb:v19A5p0402*
+ ID_MODEL_FROM_DATABASE=Falcon III RF-7800V family RNDIS
+
usb:v19A8*
ID_VENDOR_FROM_DATABASE=Biforst Technology Inc.
usb:v19B9*
ID_VENDOR_FROM_DATABASE=Data Robotics
+usb:v19B9p4B10*
+ ID_MODEL_FROM_DATABASE=Drobo
+
usb:v19B9p8D20*
ID_MODEL_FROM_DATABASE=Drobo Elite
usb:v19CF*
ID_VENDOR_FROM_DATABASE=Parrot SA
+usb:v19CFp0001*
+ ID_MODEL_FROM_DATABASE=MiniKit Slim handsfree car kit in firmware update mode
+
+usb:v19D1*
+ ID_VENDOR_FROM_DATABASE=BYD
+
usb:v19D2*
ID_VENDOR_FROM_DATABASE=ZTE WCDMA Technologies MSM
usb:v19D2p0007*
ID_MODEL_FROM_DATABASE=TU25 WiMAX Adapter [Beceem BCS200]
+usb:v19D2p0017*
+ ID_MODEL_FROM_DATABASE=MF669
+
usb:v19D2p0031*
ID_MODEL_FROM_DATABASE=MF110/MF627/MF636
+usb:v19D2p0037*
+ ID_MODEL_FROM_DATABASE=ONDA MC503HSA
+
+usb:v19D2p0039*
+ ID_MODEL_FROM_DATABASE=MF100
+
usb:v19D2p0063*
ID_MODEL_FROM_DATABASE=K3565-Z HSDPA
usb:v19D2p0104*
ID_MODEL_FROM_DATABASE=K4505-Z
+usb:v19D2p0117*
+ ID_MODEL_FROM_DATABASE=MF667
+
usb:v19D2p0146*
ID_MODEL_FROM_DATABASE=MF 195E (HSPA+ Modem)
usb:v19D2p0326*
ID_MODEL_FROM_DATABASE=LTE4G O2 ZTE MF821D LTE/UMTS/GSM Modem/Networkcard
+usb:v19D2p0501*
+ ID_MODEL_FROM_DATABASE=Lever Cell Phone Model Z936L
+
+usb:v19D2p1001*
+ ID_MODEL_FROM_DATABASE=K3805-Z vodafone WCDMA/GSM Modem - storage mode (made by ZTE)
+
+usb:v19D2p1002*
+ ID_MODEL_FROM_DATABASE=K3805-Z vodafone WCDMA/GSM Modem/Networkcard (made by ZTE)
+
usb:v19D2p1008*
ID_MODEL_FROM_DATABASE=K3570-Z
usb:v19D2p1218*
ID_MODEL_FROM_DATABASE=MF652
+usb:v19D2p1270*
+ ID_MODEL_FROM_DATABASE=MF667
+
usb:v19D2p2000*
ID_MODEL_FROM_DATABASE=MF627/MF628/MF628+/MF636+ HSDPA/HSUPA
usb:v19FA*
ID_VENDOR_FROM_DATABASE=Gampaq Co.Ltd
+usb:v19FAp0607*
+ ID_MODEL_FROM_DATABASE=GAME CONTROLLER
+
usb:v19FAp0703*
ID_MODEL_FROM_DATABASE=Steering Wheel
+usb:v19FD*
+ ID_VENDOR_FROM_DATABASE=MTI Instruments Inc.
+
usb:v19FF*
ID_VENDOR_FROM_DATABASE=Dynex
usb:v19FFp0201*
ID_MODEL_FROM_DATABASE=Rocketfish Wireless 2.4G Laser Mouse
+usb:v19FFp0220*
+ ID_MODEL_FROM_DATABASE=RF-HDWEBLT RocketFish HD WebCam
+
usb:v19FFp0238*
ID_MODEL_FROM_DATABASE=DX-WRM1401 Mouse
+usb:v19FFp0239*
+ ID_MODEL_FROM_DATABASE=Bluetooth 4.0 Adapter [Broadcom, 1.12, BCM20702A0]
+
usb:v1A08*
ID_VENDOR_FROM_DATABASE=Bellwood International, Inc.
usb:v1A2Cp0024*
ID_MODEL_FROM_DATABASE=Multimedia Keyboard
+usb:v1A2Cp2124*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
+usb:v1A2Cp2D23*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
+usb:v1A2Cp427C*
+ ID_MODEL_FROM_DATABASE=Backlit Keyboard [Cougar Vantar]
+
usb:v1A32*
ID_VENDOR_FROM_DATABASE=Quanta Microsystems, Inc.
usb:v1A61p3410*
ID_MODEL_FROM_DATABASE=CoPilot System Cable
+usb:v1A61p3650*
+ ID_MODEL_FROM_DATABASE=FreeStyle Libre
+
+usb:v1A61p3850*
+ ID_MODEL_FROM_DATABASE=FreeStyle Optium/Precision Neo
+
+usb:v1A61p3950*
+ ID_MODEL_FROM_DATABASE=FreeStyle Libre 2
+
+usb:v1A64*
+ ID_VENDOR_FROM_DATABASE=Mastervolt
+
+usb:v1A64p0000*
+ ID_MODEL_FROM_DATABASE=MasterBus Link
+
usb:v1A6A*
ID_VENDOR_FROM_DATABASE=Spansion Inc.
usb:v1A79p6002*
ID_MODEL_FROM_DATABASE=Contour
+usb:v1A79p6210*
+ ID_MODEL_FROM_DATABASE=Contour Next Link 2.4 glucometer
+
+usb:v1A79p6300*
+ ID_MODEL_FROM_DATABASE=Contour next link
+
usb:v1A79p7410*
ID_MODEL_FROM_DATABASE=Contour Next
+usb:v1A79p7800*
+ ID_MODEL_FROM_DATABASE=Contour Plus One
+
usb:v1A7B*
ID_VENDOR_FROM_DATABASE=Lumberg Connect GmbH & Co. KG
usb:v1A7Cp0191*
ID_MODEL_FROM_DATABASE=VerticalMouse 4
+usb:v1A7Cp0195*
+ ID_MODEL_FROM_DATABASE=VerticalMouse C Wireless
+
usb:v1A81*
ID_VENDOR_FROM_DATABASE=Holtek Semiconductor, Inc.
+usb:v1A81p1004*
+ ID_MODEL_FROM_DATABASE=Wireless Dongle 2.4 GHZ HT82D40REW
+
+usb:v1A81p1701*
+ ID_MODEL_FROM_DATABASE=Wireless dongle
+
+usb:v1A81p2004*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
usb:v1A81p2203*
ID_MODEL_FROM_DATABASE=Laser Gaming mouse
usb:v1A81p2205*
ID_MODEL_FROM_DATABASE=Laser Mouse
+usb:v1A81p4001*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
usb:v1A86*
ID_VENDOR_FROM_DATABASE=QinHeng Electronics
ID_MODEL_FROM_DATABASE=CH341 in parallel mode, usb to printer port converter
usb:v1A86p7523*
- ID_MODEL_FROM_DATABASE=HL-340 USB-Serial adapter
+ ID_MODEL_FROM_DATABASE=CH340 serial converter
usb:v1A86p752D*
ID_MODEL_FROM_DATABASE=CH345 MIDI adapter
usb:v1AA6*
ID_VENDOR_FROM_DATABASE=eFortune Technology Corp.
+usb:v1AAB*
+ ID_VENDOR_FROM_DATABASE=Silvercreations Software AG
+
+usb:v1AABp7736*
+ ID_MODEL_FROM_DATABASE=sceye (Gen 2)
+
+usb:v1AABp7737*
+ ID_MODEL_FROM_DATABASE=sceye (Gen 3)
+
+usb:v1AABp7738*
+ ID_MODEL_FROM_DATABASE=sceye (Gen 4, 3 Mpix)
+
+usb:v1AABp7750*
+ ID_MODEL_FROM_DATABASE=sceyeS (Gen 5, 5 MPix)
+
usb:v1AAD*
ID_VENDOR_FROM_DATABASE=KeeTouch
usb:v1AB1*
ID_VENDOR_FROM_DATABASE=Rigol Technologies
+usb:v1AB1p04B0*
+ ID_MODEL_FROM_DATABASE=DS6000 SERIES
+
+usb:v1AB1p04BE*
+ ID_MODEL_FROM_DATABASE=DS4000 SERIES
+
+usb:v1AB1p04CE*
+ ID_MODEL_FROM_DATABASE=DS1xx4Z/MSO1xxZ series
+
usb:v1AB1p0588*
ID_MODEL_FROM_DATABASE=DS1000 SERIES
+usb:v1AB2*
+ ID_VENDOR_FROM_DATABASE=Allied Vision
+
+usb:v1AB2p0001*
+ ID_MODEL_FROM_DATABASE=Vision device
+
usb:v1ACB*
ID_VENDOR_FROM_DATABASE=Salcomp Plc
ID_MODEL_FROM_DATABASE=KM290-HRS
usb:v1ADB*
- ID_VENDOR_FROM_DATABASE=SEL C662 Serial Cable
+ ID_VENDOR_FROM_DATABASE=Schweitzer Engineering Laboratories, Inc
+
+usb:v1ADBp0001*
+ ID_MODEL_FROM_DATABASE=C662 Serial Cable
+
+usb:v1ADBp0003*
+ ID_MODEL_FROM_DATABASE=CDC Ethernet Gadget
usb:v1AE4*
ID_VENDOR_FROM_DATABASE=ic-design Reinhard Gottinger GmbH
usb:v1AE7p0381*
ID_MODEL_FROM_DATABASE=VS-DVB-T 380U (af9015 based)
+usb:v1AE7p0525*
+ ID_MODEL_FROM_DATABASE=X-Tensions ISDN TA XC-525 [HFC-S USB]
+
usb:v1AE7p2001*
ID_MODEL_FROM_DATABASE=SpeedLink Snappy Mic webcam (SL-6825-SBK)
usb:v1AF1*
ID_VENDOR_FROM_DATABASE=Connect One Ltd.
+usb:v1AF3*
+ ID_VENDOR_FROM_DATABASE=Kingsis Technology Corporation
+
+usb:v1AF3p0001*
+ ID_MODEL_FROM_DATABASE=ZOWIE Gaming mouse
+
usb:v1AFE*
ID_VENDOR_FROM_DATABASE=A. Eberle GmbH & Co. KG
usb:v1B0Ep1080*
ID_MODEL_FROM_DATABASE=WRITECHIP II CCID
+usb:v1B12*
+ ID_VENDOR_FROM_DATABASE=Eventide
+
+usb:v1B12p0011*
+ ID_MODEL_FROM_DATABASE=ModFactor
+
usb:v1B1C*
ID_VENDOR_FROM_DATABASE=Corsair
usb:v1B1Cp0C04*
ID_MODEL_FROM_DATABASE=Link Cooling Node
+usb:v1B1Cp0C06*
+ ID_MODEL_FROM_DATABASE=RM-Series C-Link Adapter
+
+usb:v1B1Cp0C0A*
+ ID_MODEL_FROM_DATABASE=Hydro Series H115i Liquid CPU Cooler
+
+usb:v1B1Cp0C0B*
+ ID_MODEL_FROM_DATABASE=Lighting Node Pro
+
+usb:v1B1Cp0C0C*
+ ID_MODEL_FROM_DATABASE=Lighting Node Loader
+
+usb:v1B1Cp0C22*
+ ID_MODEL_FROM_DATABASE=iCUE H150i RGB PRO XT Liquid CPU Cooler
+
usb:v1B1Cp1A01*
ID_MODEL_FROM_DATABASE=Flash Voyager GT
usb:v1B1Cp1A0B*
ID_MODEL_FROM_DATABASE=Flash Voyager LS
+usb:v1B1Cp1A0E*
+ ID_MODEL_FROM_DATABASE=Voyager GTX
+
+usb:v1B1Cp1A14*
+ ID_MODEL_FROM_DATABASE=Voyager Vega
+
usb:v1B1Cp1A15*
ID_MODEL_FROM_DATABASE=Voyager Slider Flash Drive
usb:v1B1Cp1B13*
ID_MODEL_FROM_DATABASE=Vengeance K70RGB keyboard
+usb:v1B1Cp1B20*
+ ID_MODEL_FROM_DATABASE=STRAFE RGB Gaming Keyboard
+
+usb:v1B1Cp1B2D*
+ ID_MODEL_FROM_DATABASE=K95 RGB Platinum Keyboard [RGP0056]
+
+usb:v1B1Cp1B2E*
+ ID_MODEL_FROM_DATABASE=Corsair Corsair Gaming M65 Pro RGB Mouse
+
+usb:v1B1Cp1B2F*
+ ID_MODEL_FROM_DATABASE=Sabre RGB [CH-9303011-XX]
+
+usb:v1B1Cp1B3D*
+ ID_MODEL_FROM_DATABASE=Corsair Corsair Gaming K55 RGB Keyboard
+
+usb:v1B1Cp1B5E*
+ ID_MODEL_FROM_DATABASE=Harpoon Wireless Mouse
+
+usb:v1B1Cp1B65*
+ ID_MODEL_FROM_DATABASE=Harpoon Wireless Dongle
+
usb:v1B1Cp1C00*
ID_MODEL_FROM_DATABASE=Controller for Corsair Link
+usb:v1B1Cp1C02*
+ ID_MODEL_FROM_DATABASE=AX1500i Power Supply
+
+usb:v1B1Cp1C05*
+ ID_MODEL_FROM_DATABASE=HX750i Power Supply
+
+usb:v1B1Cp1C07*
+ ID_MODEL_FROM_DATABASE=HX1000i Power Supply
+
+usb:v1B1Cp1C08*
+ ID_MODEL_FROM_DATABASE=HX1200i Power Supply
+
+usb:v1B1Cp1C0B*
+ ID_MODEL_FROM_DATABASE=RM750i Power Supply
+
usb:v1B1Cp1C0C*
ID_MODEL_FROM_DATABASE=RM850i Power Supply
+usb:v1B1Cp1C1A*
+ ID_MODEL_FROM_DATABASE=Corsair CORSAIR Lighting Node CORE
+
+usb:v1B1E*
+ ID_VENDOR_FROM_DATABASE=General Imaging / General Electric
+
+usb:v1B1Ep1003*
+ ID_MODEL_FROM_DATABASE=A1250
+
usb:v1B1F*
ID_VENDOR_FROM_DATABASE=eQ-3 Entwicklung GmbH
usb:v1B1FpC00F*
ID_MODEL_FROM_DATABASE=HM-CFG-USB/HM-CFG-USB-2 [HomeMatic Configuration adapter]
+usb:v1B1FpC020*
+ ID_MODEL_FROM_DATABASE=HmIP-RFUSB
+
usb:v1B20*
ID_VENDOR_FROM_DATABASE=MStar Semiconductor, Inc.
usb:v1B22*
ID_VENDOR_FROM_DATABASE=WiLinx Corp.
+usb:v1B24*
+ ID_VENDOR_FROM_DATABASE=Telegent Systems, Inc.
+
+usb:v1B24p4001*
+ ID_MODEL_FROM_DATABASE=TLG2300 Hybrid TV Device
+
usb:v1B26*
ID_VENDOR_FROM_DATABASE=Cellex Power Products, Inc.
usb:v1B3Fp2002*
ID_MODEL_FROM_DATABASE=808 Camera #9 (web-cam mode)
+usb:v1B3Fp2003*
+ ID_MODEL_FROM_DATABASE=GPD6000 [Digital MP3 Player]
+
usb:v1B47*
ID_VENDOR_FROM_DATABASE=Energizer Holdings, Inc.
usb:v1B71*
ID_VENDOR_FROM_DATABASE=Fushicai
+usb:v1B71p0050*
+ ID_MODEL_FROM_DATABASE=Encore ENUTV-4 Analog TV Tuner
+
usb:v1B71p3002*
ID_MODEL_FROM_DATABASE=USBTV007 Video Grabber [EasyCAP]
usb:v1B80pE297*
ID_MODEL_FROM_DATABASE=Conceptronic DVB-T CTVDIGRCU V3.0
+usb:v1B80pE302*
+ ID_MODEL_FROM_DATABASE=CVBS / S-Video Capture Device [Pinnacle Dazzle / UB315-E]
+
+usb:v1B80pE34C*
+ ID_MODEL_FROM_DATABASE=UB435-Q ATSC TV Stick
+
usb:v1B80pE383*
ID_MODEL_FROM_DATABASE=DVB-T UB383-T [af9015]
usb:v1BA4p0001*
ID_MODEL_FROM_DATABASE=InSight USB Link
+usb:v1BA4p0002*
+ ID_MODEL_FROM_DATABASE=EM358 Virtual COM Port
+
usb:v1BA6*
ID_VENDOR_FROM_DATABASE=Abilis Systems
ID_VENDOR_FROM_DATABASE=Harmonix Music
usb:v1BADp0002*
- ID_MODEL_FROM_DATABASE=Guitar for Xbox 360
+ ID_MODEL_FROM_DATABASE=Rock Band Guitar for Xbox 360
usb:v1BADp0003*
- ID_MODEL_FROM_DATABASE=Drum Kit for Xbox 360
+ ID_MODEL_FROM_DATABASE=Rock Band Drum Kit for Xbox 360
+
+usb:v1BADp0130*
+ ID_MODEL_FROM_DATABASE=Ion Drum Rocker for Xbox 360
+
+usb:v1BADp028E*
+ ID_MODEL_FROM_DATABASE=Controller
+
+usb:v1BADp3330*
+ ID_MODEL_FROM_DATABASE=Rock Band 3 Keyboard wii interface
+
+usb:v1BADpF016*
+ ID_MODEL_FROM_DATABASE=Controller
+
+usb:v1BADpF018*
+ ID_MODEL_FROM_DATABASE=Street Fighter IV SE FightStick for Xbox 360
+
+usb:v1BADpF019*
+ ID_MODEL_FROM_DATABASE=BrawlStick for Xbox 360
+
+usb:v1BADpF021*
+ ID_MODEL_FROM_DATABASE=Ghost Recon Future Soldier Gamepad for Xbox 360
+
+usb:v1BADpF023*
+ ID_MODEL_FROM_DATABASE=MLG Pro Circuit Controller for Xbox 360
+
+usb:v1BADpF025*
+ ID_MODEL_FROM_DATABASE=Call of Duty Controller for Xbox 360
+
+usb:v1BADpF027*
+ ID_MODEL_FROM_DATABASE=FPS Pro Controller for Xbox 360
+
+usb:v1BADpF028*
+ ID_MODEL_FROM_DATABASE=Street Fighter IV FightPad for Xbox 360
+
+usb:v1BADpF02E*
+ ID_MODEL_FROM_DATABASE=FightPad
+
+usb:v1BADpF030*
+ ID_MODEL_FROM_DATABASE=MC2 MicroCON Racing Wheel for Xbox 360
+
+usb:v1BADpF036*
+ ID_MODEL_FROM_DATABASE=MicroCON Gamepad Pro for Xbox 360
+
+usb:v1BADpF038*
+ ID_MODEL_FROM_DATABASE=Street Fighter IV FightStick TE for Xbox 360
+
+usb:v1BADpF039*
+ ID_MODEL_FROM_DATABASE=Marvel VS Capcom 2 Tournament Stick for Xbox 360
+
+usb:v1BADpF03A*
+ ID_MODEL_FROM_DATABASE=Street Fighter X Tekken FightStick Pro for Xbox 360
+
+usb:v1BADpF03D*
+ ID_MODEL_FROM_DATABASE=Street Fighter IV Arcade Stick TE for Xbox 360
+
+usb:v1BADpF03E*
+ ID_MODEL_FROM_DATABASE=MLG Arcade FightStick TE for Xbox 360
+
+usb:v1BADpF03F*
+ ID_MODEL_FROM_DATABASE=Soulcalibur FightStick for Xbox 360
+
+usb:v1BADpF042*
+ ID_MODEL_FROM_DATABASE=Arcade FightStick TE S+ for Xbox 360
+
+usb:v1BADpF080*
+ ID_MODEL_FROM_DATABASE=FightStick TE2 for Xbox 360
+
+usb:v1BADpF501*
+ ID_MODEL_FROM_DATABASE=Horipad EX2 Turbo for Xbox 360
+
+usb:v1BADpF502*
+ ID_MODEL_FROM_DATABASE=Real Arcade Pro.VX SA for Xbox 360
+
+usb:v1BADpF503*
+ ID_MODEL_FROM_DATABASE=Fighting Stick VX for Xbox 360
+
+usb:v1BADpF504*
+ ID_MODEL_FROM_DATABASE=Real Arcade Pro.EX
+
+usb:v1BADpF505*
+ ID_MODEL_FROM_DATABASE=Fighting Stick EX2B for Xbox 360
+
+usb:v1BADpF506*
+ ID_MODEL_FROM_DATABASE=Real Arcade Pro.EX Premium VLX for Xbox 360
+
+usb:v1BADpF900*
+ ID_MODEL_FROM_DATABASE=Controller
+
+usb:v1BADpF901*
+ ID_MODEL_FROM_DATABASE=GameStop Controller
+
+usb:v1BADpF903*
+ ID_MODEL_FROM_DATABASE=Tron Controller for Xbox 360
+
+usb:v1BADpF904*
+ ID_MODEL_FROM_DATABASE=PDP Versus Fighting Pad for Xbox 360
+
+usb:v1BADpF906*
+ ID_MODEL_FROM_DATABASE=Mortal Kombat FightStick for Xbox 360
+
+usb:v1BADpF907*
+ ID_MODEL_FROM_DATABASE=Afterglow Gamepad
+
+usb:v1BADpFA01*
+ ID_MODEL_FROM_DATABASE=Gamepad
+
+usb:v1BADpFD00*
+ ID_MODEL_FROM_DATABASE=Razer Onza Tournament Edition
+
+usb:v1BADpFD01*
+ ID_MODEL_FROM_DATABASE=Razer Onza Classic Edition
usb:v1BAE*
ID_VENDOR_FROM_DATABASE=Vuzix Corporation
usb:v1BBB*
ID_VENDOR_FROM_DATABASE=T & A Mobile Phones
+usb:v1BBBp0003*
+ ID_MODEL_FROM_DATABASE=Alcatel one touch 4030D modem connection
+
+usb:v1BBBp0017*
+ ID_MODEL_FROM_DATABASE=HSPA Data Card
+
+usb:v1BBBp007A*
+ ID_MODEL_FROM_DATABASE=Alcatel OneTouch (firmware upgrade mode)
+
usb:v1BBBp011E*
ID_MODEL_FROM_DATABASE=Alcatel One Touch L100V / Telekom Speedstick LTE II
+usb:v1BBBp0169*
+ ID_MODEL_FROM_DATABASE=Alcatel ONE TOUCH Fierce
+
+usb:v1BBBp0195*
+ ID_MODEL_FROM_DATABASE=Alcatel OneTouch L850V / Telekom Speedstick LTE
+
+usb:v1BBBpA00E*
+ ID_MODEL_FROM_DATABASE=Vodafone Smart Tab 4G
+
+usb:v1BBBpF000*
+ ID_MODEL_FROM_DATABASE=Alcatel OneTouch (mass storage mode)
+
usb:v1BBBpF017*
ID_MODEL_FROM_DATABASE=Alcatel One Touch L100V / Telekom Speedstick LTE II
+usb:v1BBD*
+ ID_VENDOR_FROM_DATABASE=Videology Imaging Solutions, Inc.
+
+usb:v1BBDp0060*
+ ID_MODEL_FROM_DATABASE=1.3MP Mono Camera
+
+usb:v1BBDp0066*
+ ID_MODEL_FROM_DATABASE=1.3MP Mono Camera
+
+usb:v1BBDp0067*
+ ID_MODEL_FROM_DATABASE=1.3MP Mono Camera
+
+usb:v1BC0*
+ ID_VENDOR_FROM_DATABASE=Beijing Senseshield Technology Co.,Ltd.
+
+usb:v1BC0p0013*
+ ID_MODEL_FROM_DATABASE=Elitee-e
+
+usb:v1BC0p0014*
+ ID_MODEL_FROM_DATABASE=Elite4
+
+usb:v1BC0p0020*
+ ID_MODEL_FROM_DATABASE=iToken
+
+usb:v1BC0p0021*
+ ID_MODEL_FROM_DATABASE=Mikey
+
+usb:v1BC0p0051*
+ ID_MODEL_FROM_DATABASE=Elite5
+
+usb:v1BC0p0055*
+ ID_MODEL_FROM_DATABASE=Elite5 v3.x
+
+usb:v1BC0p485D*
+ ID_MODEL_FROM_DATABASE=EliteIV
+
usb:v1BC4*
ID_VENDOR_FROM_DATABASE=Ford Motor Co.
usb:v1BC7p0021*
ID_MODEL_FROM_DATABASE=HE910
+usb:v1BC7p0022*
+ ID_MODEL_FROM_DATABASE=GE910-QUAD
+
usb:v1BC7p0023*
ID_MODEL_FROM_DATABASE=HE910-D ECM
+usb:v1BC7p0032*
+ ID_MODEL_FROM_DATABASE=LE910-EU V2
+
usb:v1BC7p1003*
ID_MODEL_FROM_DATABASE=UC864-E
usb:v1BC7p1011*
ID_MODEL_FROM_DATABASE=CE910-DUAL
+usb:v1BC7p1012*
+ ID_MODEL_FROM_DATABASE=UE910 V2
+
+usb:v1BC7p1101*
+ ID_MODEL_FROM_DATABASE=ME910C1
+
+usb:v1BC7p110A*
+ ID_MODEL_FROM_DATABASE=ME310
+
usb:v1BC7p1200*
- ID_MODEL_FROM_DATABASE=LE920
+ ID_MODEL_FROM_DATABASE=LE920 (old firmware)
+
+usb:v1BC7p1201*
+ ID_MODEL_FROM_DATABASE=LE910 / LE920
usb:v1BCE*
ID_VENDOR_FROM_DATABASE=Contac Cable Industrial Limited
usb:v1BCFp05CF*
ID_MODEL_FROM_DATABASE=Micro keyboard & mouse receiver
+usb:v1BCFp08A0*
+ ID_MODEL_FROM_DATABASE=Gaming mouse [Philips SPK9304]
+
usb:v1BCFp0C31*
ID_MODEL_FROM_DATABASE=SPIF30x Serial-ATA bridge
+usb:v1BCFp2281*
+ ID_MODEL_FROM_DATABASE=SPCA2281 Web Camera
+
usb:v1BCFp2880*
ID_MODEL_FROM_DATABASE=Dell HD Webcam
+usb:v1BCFp2883*
+ ID_MODEL_FROM_DATABASE=Asus Webcam
+
usb:v1BCFp2885*
ID_MODEL_FROM_DATABASE=ASUS Webcam
usb:v1BCFp2888*
ID_MODEL_FROM_DATABASE=HP Universal Camera
+usb:v1BCFp2895*
+ ID_MODEL_FROM_DATABASE=Dell Integrated Webcam
+
usb:v1BCFp28A2*
ID_MODEL_FROM_DATABASE=Dell Integrated Webcam
usb:v1BCFp2B83*
ID_MODEL_FROM_DATABASE=Laptop Integrated Webcam FHD
+usb:v1BCFp2B91*
+ ID_MODEL_FROM_DATABASE=Dell E5570 integrated webcam
+
+usb:v1BCFp2B97*
+ ID_MODEL_FROM_DATABASE=Laptop Integrated Webcam FHD
+
+usb:v1BCFp2C6E*
+ ID_MODEL_FROM_DATABASE=Laptop Integrated WebCam HD
+
usb:v1BD0*
ID_VENDOR_FROM_DATABASE=Hangzhou Riyue Electronic Co., Ltd.
usb:v1BD5*
ID_VENDOR_FROM_DATABASE=BG Systems, Inc.
+usb:v1BDA*
+ ID_VENDOR_FROM_DATABASE=University Of Southampton
+
+usb:v1BDAp0010*
+ ID_MODEL_FROM_DATABASE=Power Board v4 Rev B
+
+usb:v1BDAp0011*
+ ID_MODEL_FROM_DATABASE=Student Robotics SBv4B
+
usb:v1BDE*
ID_VENDOR_FROM_DATABASE=P-TWO INDUSTRIES, INC.
usb:v1C04*
ID_VENDOR_FROM_DATABASE=QNAP System Inc.
+usb:v1C04p2074*
+ ID_MODEL_FROM_DATABASE=ASM1074 High-Speed hub
+
+usb:v1C04p3074*
+ ID_MODEL_FROM_DATABASE=ASM1074 SuperSpeed hub
+
+usb:v1C05*
+ ID_VENDOR_FROM_DATABASE=Shenxhen Stager Electric
+
+usb:v1C05pEA75*
+ ID_MODEL_FROM_DATABASE=G540 Programmer
+
usb:v1C0C*
ID_VENDOR_FROM_DATABASE=Ionics EMS, Inc.
usb:v1C10*
ID_VENDOR_FROM_DATABASE=Lanterra Industrial Co., Ltd.
+usb:v1C11*
+ ID_VENDOR_FROM_DATABASE=Input Club Inc.
+
+usb:v1C11pB04D*
+ ID_MODEL_FROM_DATABASE=ErgoDox Infinity
+
usb:v1C13*
ID_VENDOR_FROM_DATABASE=ALECTRONIC LIMITED
usb:v1C1A*
ID_VENDOR_FROM_DATABASE=Datel Electronics Ltd.
+usb:v1C1Ap0100*
+ ID_MODEL_FROM_DATABASE=Action Replay DS "3DS/DSi/DS/Lite Compatible"
+
usb:v1C1B*
ID_VENDOR_FROM_DATABASE=Volkswagen of America, Inc.
usb:v1C27*
ID_VENDOR_FROM_DATABASE=HuiYang D & S Cable Co., Ltd.
+usb:v1C28*
+ ID_VENDOR_FROM_DATABASE=PMD Technologies
+
+usb:v1C28pC003*
+ ID_MODEL_FROM_DATABASE=CamCube
+
+usb:v1C28pC004*
+ ID_MODEL_FROM_DATABASE=CamBoard
+
+usb:v1C28pC005*
+ ID_MODEL_FROM_DATABASE=ConceptCam
+
+usb:v1C28pC006*
+ ID_MODEL_FROM_DATABASE=CamBoard 22
+
+usb:v1C28pC007*
+ ID_MODEL_FROM_DATABASE=CamBoard nano
+
+usb:v1C28pC008*
+ ID_MODEL_FROM_DATABASE=CamBoard mod
+
+usb:v1C28pC009*
+ ID_MODEL_FROM_DATABASE=CamBoard plus
+
+usb:v1C28pC00A*
+ ID_MODEL_FROM_DATABASE=DigiCam
+
+usb:v1C28pC00D*
+ ID_MODEL_FROM_DATABASE=CamBoard pico LDD
+
+usb:v1C28pC00F*
+ ID_MODEL_FROM_DATABASE=CamBoard pico
+
usb:v1C29*
ID_VENDOR_FROM_DATABASE=Elster GmbH
usb:v1C37*
ID_VENDOR_FROM_DATABASE=Authorizer Technologies, Inc.
+usb:v1C37p6190*
+ ID_MODEL_FROM_DATABASE=U2F Fido-compliant cryptotoken
+
usb:v1C3D*
ID_VENDOR_FROM_DATABASE=NONIN MEDICAL INC.
usb:v1C40p0536*
ID_MODEL_FROM_DATABASE=Swiss ColorPAL
+usb:v1C40p0537*
+ ID_MODEL_FROM_DATABASE=MIST Board
+
usb:v1C49*
ID_VENDOR_FROM_DATABASE=Cherng Weei Technology Corp.
+usb:v1C4B*
+ ID_VENDOR_FROM_DATABASE=Geratherm Medical AG
+
+usb:v1C4Bp026F*
+ ID_MODEL_FROM_DATABASE=Spirostik
+
usb:v1C4F*
ID_VENDOR_FROM_DATABASE=SiGma Micro
usb:v1C4Fp0026*
ID_MODEL_FROM_DATABASE=Keyboard
+usb:v1C4Fp0032*
+ ID_MODEL_FROM_DATABASE=Optical Mouse with Scroll Wheel
+
+usb:v1C4Fp0034*
+ ID_MODEL_FROM_DATABASE=XM102K Optical Wheel Mouse
+
+usb:v1C4Fp0063*
+ ID_MODEL_FROM_DATABASE=Touchpad (integrated in detachable keyboard of Chuwi SurBook)
+
+usb:v1C4Fp0065*
+ ID_MODEL_FROM_DATABASE=Optical Wheel Mouse [Rapoo N1130]
+
usb:v1C4Fp3000*
ID_MODEL_FROM_DATABASE=Micro USB Web Camera
usb:v1C4Fp3002*
ID_MODEL_FROM_DATABASE=WebCam SiGma Micro
+usb:v1C57*
+ ID_VENDOR_FROM_DATABASE=Zalman Tech Co., Ltd.
+
+usb:v1C57p1E45*
+ ID_MODEL_FROM_DATABASE=FPSGUN FG1000 Mouse
+
usb:v1C6B*
ID_VENDOR_FROM_DATABASE=Philips & Lite-ON Digital Solutions Corporation
+usb:v1C6BpA220*
+ ID_MODEL_FROM_DATABASE=DVD Writer Slimtype eSAU108
+
usb:v1C6BpA222*
ID_MODEL_FROM_DATABASE=DVD Writer Slimtype eTAU108
+usb:v1C6BpA223*
+ ID_MODEL_FROM_DATABASE=DVD Writer Slimtype eUAU108
+
usb:v1C6C*
ID_VENDOR_FROM_DATABASE=Skydigital Inc.
+usb:v1C71*
+ ID_VENDOR_FROM_DATABASE=Humanware Inc
+
+usb:v1C71pC004*
+ ID_MODEL_FROM_DATABASE=Braille Note Apex (braille terminal mode)
+
usb:v1C73*
ID_VENDOR_FROM_DATABASE=AMT
usb:v1C73p861F*
ID_MODEL_FROM_DATABASE=Anysee E30 USB 2.0 DVB-T Receiver
+usb:v1C75*
+ ID_VENDOR_FROM_DATABASE=Arturia
+
+usb:v1C75p0288*
+ ID_MODEL_FROM_DATABASE=KeyStep
+
usb:v1C77*
ID_VENDOR_FROM_DATABASE=Kaetat Industrial Co., Ltd.
usb:v1C7A*
ID_VENDOR_FROM_DATABASE=LighTuning Technology Inc.
+usb:v1C7Ap0577*
+ ID_MODEL_FROM_DATABASE=Fingerprint Sensor
+
+usb:v1C7Ap0603*
+ ID_MODEL_FROM_DATABASE=ES603 Swipe Fingerprint Sensor
+
usb:v1C7Ap0801*
ID_MODEL_FROM_DATABASE=Fingerprint Reader
usb:v1C7B*
ID_VENDOR_FROM_DATABASE=LUXSHARE PRECISION INDUSTRY (SHENZHEN) CO., LTD.
+usb:v1C82*
+ ID_VENDOR_FROM_DATABASE=Atracsys
+
+usb:v1C82p0200*
+ ID_MODEL_FROM_DATABASE=spryTrac
+
usb:v1C83*
ID_VENDOR_FROM_DATABASE=Schomaecker GmbH
usb:v1C83p0001*
ID_MODEL_FROM_DATABASE=RS150 V2
+usb:v1C83p0002*
+ ID_MODEL_FROM_DATABASE=RFID card reader
+
+usb:v1C83p0003*
+ ID_MODEL_FROM_DATABASE=Communicator
+
+usb:v1C83p0005*
+ ID_MODEL_FROM_DATABASE=Mobile RFID Reader
+
usb:v1C87*
ID_VENDOR_FROM_DATABASE=2N TELEKOMUNIKACE a.s.
usb:v1CBE*
ID_VENDOR_FROM_DATABASE=Luminary Micro Inc.
+usb:v1CBEp0002*
+ ID_MODEL_FROM_DATABASE=CDC serial port [TivaWare]
+
usb:v1CBEp00FD*
ID_MODEL_FROM_DATABASE=In-Circuit Debug Interface
usb:v1CBEp0166*
ID_MODEL_FROM_DATABASE=CANAL USB2CAN
+usb:v1CBEp0240*
+ ID_MODEL_FROM_DATABASE=McGill Robotics TM4C Microcontroller
+
usb:v1CBF*
ID_VENDOR_FROM_DATABASE=FORTAT SKYMARK INDUSTRIAL COMPANY
usb:v1CF1p0027*
ID_MODEL_FROM_DATABASE=deRFusb13E06
+usb:v1CF1p0030*
+ ID_MODEL_FROM_DATABASE=ZigBee gateway [ConBee II]
+
usb:v1CFC*
ID_VENDOR_FROM_DATABASE=ANDES TECHNOLOGY CORPORATION
usb:v1D0B*
ID_VENDOR_FROM_DATABASE=HAN HUA CABLE & WIRE TECHNOLOGY (J.X.) CO., LTD.
+usb:v1D0D*
+ ID_VENDOR_FROM_DATABASE=TDKMedia
+
+usb:v1D0Dp0214*
+ ID_MODEL_FROM_DATABASE=Trans-It Drive
+
usb:v1D0F*
ID_VENDOR_FROM_DATABASE=Sonix Technology Co., Ltd.
usb:v1D19p1103*
ID_MODEL_FROM_DATABASE=DK 5217 DVB-T Dongle
+usb:v1D19p1104*
+ ID_MODEL_FROM_DATABASE=MSI DigiVox Micro HD
+
usb:v1D19p6105*
ID_MODEL_FROM_DATABASE=Video grabber
+usb:v1D19p610A*
+ ID_MODEL_FROM_DATABASE=Video grabber
+
usb:v1D19p8202*
ID_MODEL_FROM_DATABASE=DK DVBC/T DONGLE
usb:v1D27*
ID_VENDOR_FROM_DATABASE=ASUS
+usb:v1D27p0601*
+ ID_MODEL_FROM_DATABASE=Xtion
+
usb:v1D34*
ID_VENDOR_FROM_DATABASE=Dream Cheeky
usb:v1D34p0001*
- ID_MODEL_FROM_DATABASE=Dream Cheeky Fidget
+ ID_MODEL_FROM_DATABASE=Fidget
+
+usb:v1D34p0002*
+ ID_MODEL_FROM_DATABASE=Fidget (Basketball)
+
+usb:v1D34p0003*
+ ID_MODEL_FROM_DATABASE=Fidget (Golf Ball)
usb:v1D34p0004*
- ID_MODEL_FROM_DATABASE=Dream Cheeky Webmail Notifier
+ ID_MODEL_FROM_DATABASE=Webmail Notifier
usb:v1D34p0008*
- ID_MODEL_FROM_DATABASE=Dream Cheeky button
+ ID_MODEL_FROM_DATABASE=button
usb:v1D34p000A*
- ID_MODEL_FROM_DATABASE=Dream Cheeky Mailbox Friends Alert
+ ID_MODEL_FROM_DATABASE=Mailbox Friends Alert
usb:v1D34p000D*
- ID_MODEL_FROM_DATABASE=Dream Cheeky Big Red Button
+ ID_MODEL_FROM_DATABASE=Big Red Button
usb:v1D34p0013*
- ID_MODEL_FROM_DATABASE=Dream Cheeky LED Message Board
+ ID_MODEL_FROM_DATABASE=LED Message Board
+
+usb:v1D34p0020*
+ ID_MODEL_FROM_DATABASE=Stress Ball
usb:v1D45*
ID_VENDOR_FROM_DATABASE=Touch
usb:v1D45p1D45*
ID_MODEL_FROM_DATABASE=Foxlink Optical touch sensor
+usb:v1D45p459D*
+ ID_MODEL_FROM_DATABASE=BenQ F5
+
+usb:v1D45p465C*
+ ID_MODEL_FROM_DATABASE=Harrier Mini by EE
+
usb:v1D4D*
ID_VENDOR_FROM_DATABASE=PEGATRON CORPORATION
usb:v1D50p5300*
ID_MODEL_FROM_DATABASE=Rockbox
+usb:v1D50p530E*
+ ID_MODEL_FROM_DATABASE=iriver H10 20GB (Rockbox)
+
+usb:v1D50p530F*
+ ID_MODEL_FROM_DATABASE=iriver H10 5/6GB (Rockbox)
+
+usb:v1D50p5314*
+ ID_MODEL_FROM_DATABASE=Apple iPod Color/Photo (Rockbox)
+
+usb:v1D50p5315*
+ ID_MODEL_FROM_DATABASE=Apple iPod Nano 1g (Rockbox)
+
+usb:v1D50p5316*
+ ID_MODEL_FROM_DATABASE=Apple iPod Video (Rockbox)
+
+usb:v1D50p5318*
+ ID_MODEL_FROM_DATABASE=Apple iPod 4g Grayscale (Rockbox)
+
+usb:v1D50p5319*
+ ID_MODEL_FROM_DATABASE=Apple iPod Mini 1g (Rockbox)
+
+usb:v1D50p531A*
+ ID_MODEL_FROM_DATABASE=Apple iPod Mini 2g (Rockbox)
+
+usb:v1D50p531C*
+ ID_MODEL_FROM_DATABASE=Apple iPod Nano 2g (Rockbox)
+
+usb:v1D50p531D*
+ ID_MODEL_FROM_DATABASE=Apple iPod Classic/6G (Rockbox)
+
+usb:v1D50p5321*
+ ID_MODEL_FROM_DATABASE=Cowon D2 (Rockbox)
+
+usb:v1D50p5329*
+ ID_MODEL_FROM_DATABASE=Toshiba Gigabeat S (Rockbox)
+
+usb:v1D50p5332*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa e200 series (Rockbox)
+
+usb:v1D50p5334*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa c200 series (Rockbox)
+
+usb:v1D50p5337*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa Clip (Rockbox)
+
+usb:v1D50p5338*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa e200v2 series (Rockbox)
+
+usb:v1D50p5339*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa m200 v4 series (Rockbox)
+
+usb:v1D50p533A*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa Fuze (Rockbox)
+
+usb:v1D50p533B*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa c200v2 series (Rockbox)
+
+usb:v1D50p533C*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa Clipv2 (Rockbox)
+
+usb:v1D50p533E*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa Clip+ (Rockbox)
+
+usb:v1D50p533F*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa Fuze v2 (Rockbox)
+
+usb:v1D50p5340*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa Fuze+ (Rockbox)
+
+usb:v1D50p5341*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa Zip (Rockbox)
+
+usb:v1D50p5342*
+ ID_MODEL_FROM_DATABASE=Sandisk Sansa Connect (Rockbox)
+
+usb:v1D50p5346*
+ ID_MODEL_FROM_DATABASE=Olympus M:Robe 500i (Rockbox)
+
+usb:v1D50p5347*
+ ID_MODEL_FROM_DATABASE=Olympus m:robe MR-100 (Rockbox)
+
+usb:v1D50p5359*
+ ID_MODEL_FROM_DATABASE=Creative Zen X-Fi Style (Rockbox)
+
+usb:v1D50p535D*
+ ID_MODEL_FROM_DATABASE=Creative Zen X-Fi2 (Rockbox)
+
+usb:v1D50p535E*
+ ID_MODEL_FROM_DATABASE=Creative Zen X-Fi3 (Rockbox)
+
+usb:v1D50p5360*
+ ID_MODEL_FROM_DATABASE=Creative Zen X-Fi (Rockbox)
+
+usb:v1D50p5361*
+ ID_MODEL_FROM_DATABASE=Creative ZEN Mozaic (Rockbox)
+
+usb:v1D50p5362*
+ ID_MODEL_FROM_DATABASE=Creative Zen (Rockbox)
+
+usb:v1D50p5364*
+ ID_MODEL_FROM_DATABASE=Philips GoGear SA9200 (Rockbox)
+
+usb:v1D50p5365*
+ ID_MODEL_FROM_DATABASE=Philips GoGear HDD16x0 (Rockbox)
+
+usb:v1D50p5366*
+ ID_MODEL_FROM_DATABASE=Philips GoGear HDD63x0 (Rockbox)
+
+usb:v1D50p5378*
+ ID_MODEL_FROM_DATABASE=Onda VX747 (Rockbox)
+
+usb:v1D50p5379*
+ ID_MODEL_FROM_DATABASE=Onda VX767 (Rockbox)
+
+usb:v1D50p537B*
+ ID_MODEL_FROM_DATABASE=Onda VX777 (Rockbox)
+
+usb:v1D50p538C*
+ ID_MODEL_FROM_DATABASE=Samsung YH-820 (Rockbox)
+
+usb:v1D50p538D*
+ ID_MODEL_FROM_DATABASE=Samsung YH-920 (Rockbox)
+
+usb:v1D50p538E*
+ ID_MODEL_FROM_DATABASE=Samsung YH-925 (Rockbox)
+
+usb:v1D50p53A0*
+ ID_MODEL_FROM_DATABASE=Packard Bell Vibe 500 (Rockbox)
+
+usb:v1D50p53B4*
+ ID_MODEL_FROM_DATABASE=Rockchip 27xx generic (Rockbox)
+
+usb:v1D50p53BE*
+ ID_MODEL_FROM_DATABASE=HiFiMAN HM-60x (Rockbox)
+
+usb:v1D50p53BF*
+ ID_MODEL_FROM_DATABASE=HiFiMAN HM-801 (Rockbox)
+
+usb:v1D50p53D2*
+ ID_MODEL_FROM_DATABASE=HiFi E.T. MA9 (Rockbox)
+
+usb:v1D50p53D3*
+ ID_MODEL_FROM_DATABASE=HiFi E.T. MA9C (Rockbox)
+
+usb:v1D50p53D4*
+ ID_MODEL_FROM_DATABASE=HiFi E.T. MA8 (Rockbox)
+
+usb:v1D50p53D5*
+ ID_MODEL_FROM_DATABASE=HiFi E.T. MA8C (Rockbox)
+
+usb:v1D50p53DC*
+ ID_MODEL_FROM_DATABASE=Sony NWZ-E370/E380 series (Rockbox)
+
+usb:v1D50p53DD*
+ ID_MODEL_FROM_DATABASE=Sony NWZ-E360 series (Rockbox)
+
+usb:v1D50p53E6*
+ ID_MODEL_FROM_DATABASE=IHIFI 760 (Rockbox)
+
+usb:v1D50p53E7*
+ ID_MODEL_FROM_DATABASE=IHIFI 960 (Rockbox)
+
+usb:v1D50p53FF*
+ ID_MODEL_FROM_DATABASE=Generic Rockbox device
+
usb:v1D50p6000*
ID_MODEL_FROM_DATABASE=Ubertooth Zero
usb:v1D50p601C*
ID_MODEL_FROM_DATABASE=EPOSMote II
+usb:v1D50p601D*
+ ID_MODEL_FROM_DATABASE=UDS18B20 temperature sensor
+
usb:v1D50p601E*
ID_MODEL_FROM_DATABASE=5x5 STM32 prototyping board
usb:v1D50p6025*
ID_MODEL_FROM_DATABASE=Keyglove (HID)
+usb:v1D50p6026*
+ ID_MODEL_FROM_DATABASE=Keyglove (Serial)
+
usb:v1D50p6027*
ID_MODEL_FROM_DATABASE=Key64 Keyboard
usb:v1D50p6028*
ID_MODEL_FROM_DATABASE=Teensy 2.0 Development Board [ErgoDox Keyboard]
+usb:v1D50p6029*
+ ID_MODEL_FROM_DATABASE=Marlin 2.0 (Serial)
+
usb:v1D50p602A*
ID_MODEL_FROM_DATABASE=Marlin 2.0 (Mass Storage)
usb:v1D50p6031*
ID_MODEL_FROM_DATABASE=Handmade GSM GPS tracker
+usb:v1D50p6032*
+ ID_MODEL_FROM_DATABASE=ncrmnt.org uISP
+
usb:v1D50p6033*
ID_MODEL_FROM_DATABASE=frobiac / adnw keyboard
usb:v1D50p6054*
ID_MODEL_FROM_DATABASE=Satlab/AAUSAT3 BlueBox
+usb:v1D50p6055*
+ ID_MODEL_FROM_DATABASE=RADiuS ER900TRS-02 transciever with SMA Connector
+
usb:v1D50p6056*
ID_MODEL_FROM_DATABASE=The Glitch
+usb:v1D50p6057*
+ ID_MODEL_FROM_DATABASE=OpenPipe MIDI Shield
+
+usb:v1D50p6058*
+ ID_MODEL_FROM_DATABASE=Novena OTG port
+
+usb:v1D50p6059*
+ ID_MODEL_FROM_DATABASE=xser serial
+
+usb:v1D50p605A*
+ ID_MODEL_FROM_DATABASE=Daisho test
+
usb:v1D50p605B*
ID_MODEL_FROM_DATABASE=RfCat YARD Stick One
usb:v1D50p6061*
ID_MODEL_FROM_DATABASE=Power Manager
+usb:v1D50p6062*
+ ID_MODEL_FROM_DATABASE=WhiteRabbit console and Wishbone bridge
+
usb:v1D50p6063*
ID_MODEL_FROM_DATABASE=CPC FPGA
usb:v1D50p606E*
ID_MODEL_FROM_DATABASE=Reefangel Evolution 1.0
+usb:v1D50p606F*
+ ID_MODEL_FROM_DATABASE=Geschwister Schneider CAN adapter
+
usb:v1D50p6070*
ID_MODEL_FROM_DATABASE=Open Pinball Project
usb:v1D50p6078*
ID_MODEL_FROM_DATABASE=DTplug
+usb:v1D50p6079*
+ ID_MODEL_FROM_DATABASE=Mood Light
+
usb:v1D50p607A*
ID_MODEL_FROM_DATABASE=Fadecandy
usb:v1D50p607D*
ID_MODEL_FROM_DATABASE=Spark Core Arduino-compatible board with WiFi
+usb:v1D50p607E*
+ ID_MODEL_FROM_DATABASE=OSHUG Wuthering multi-tool
+
usb:v1D50p607F*
ID_MODEL_FROM_DATABASE=Spark Core Arduino-compatible board with WiFi (bootloader)
usb:v1D50p6086*
ID_MODEL_FROM_DATABASE=OneRNG entropy device
+usb:v1D50p6087*
+ ID_MODEL_FROM_DATABASE=Blinkytape (alternate endpoint config)
+
usb:v1D50p6088*
ID_MODEL_FROM_DATABASE=picp PIC16F145x based PIC16F145x programmer
usb:v1D50p60AC*
ID_MODEL_FROM_DATABASE=OpenBLT generic microcontroller (bootloader)
+usb:v1D50p60AD*
+ ID_MODEL_FROM_DATABASE=Clasic Gamepad Adapter (NES)
+
+usb:v1D50p60AE*
+ ID_MODEL_FROM_DATABASE=Clasic Gamepad Adapter (N64)
+
+usb:v1D50p60AF*
+ ID_MODEL_FROM_DATABASE=Clasic Gamepad Adapter (DB9)
+
usb:v1D50p60B0*
ID_MODEL_FROM_DATABASE=Waterott Arduino based Clock (caterina bootloader)
usb:v1D50p60BF*
ID_MODEL_FROM_DATABASE=Pixelmatix Aurora
+usb:v1D50p60C0*
+ ID_MODEL_FROM_DATABASE=Nucular Keyboard adapter
+
usb:v1D50p60C1*
ID_MODEL_FROM_DATABASE=BrewBit Model-T pOSHW temperature controller for homebrewers (bootloader)
usb:v1D50p60C3*
ID_MODEL_FROM_DATABASE=X Antenna Tracker arduino board
+usb:v1D50p60C4*
+ ID_MODEL_FROM_DATABASE=CAN bus communication device
+
+usb:v1D50p60C5*
+ ID_MODEL_FROM_DATABASE=PIC16F1 bootloader
+
usb:v1D50p60C6*
ID_MODEL_FROM_DATABASE=USBtrng hardware random number generator
usb:v1D50p60CC*
ID_MODEL_FROM_DATABASE=LamDiNao
+usb:v1D50p60CD*
+ ID_MODEL_FROM_DATABASE=Open Lighting DMX512 / RDM widget
+
usb:v1D50p60DE*
ID_MODEL_FROM_DATABASE=Cryptech.is random number generator
usb:v1D50p60EA*
ID_MODEL_FROM_DATABASE=Wiggleport FPGA-based I/O board
+usb:v1D50p60EB*
+ ID_MODEL_FROM_DATABASE=candleLight CAN adapter
+
usb:v1D50p60EC*
- ID_MODEL_FROM_DATABASE=Duet 3D Printer Controller
+ ID_MODEL_FROM_DATABASE=Duet 2 WiFi or Duet 2 Ethernet 3D printer control electronics
+
+usb:v1D50p60ED*
+ ID_MODEL_FROM_DATABASE=Duet 2 Maestro 3D printer control electronics
+
+usb:v1D50p60EE*
+ ID_MODEL_FROM_DATABASE=Duet 3 motion control electronics
usb:v1D50p60F0*
ID_MODEL_FROM_DATABASE=UDAD-T1 data aquisition device (boot)
usb:v1D50p610D*
ID_MODEL_FROM_DATABASE=Magic Keys
+usb:v1D50p6114*
+ ID_MODEL_FROM_DATABASE=MIDI key
+
+usb:v1D50p6118*
+ ID_MODEL_FROM_DATABASE=Thomson MO5 keyboard
+
+usb:v1D50p6122*
+ ID_MODEL_FROM_DATABASE=Ultimate Hacking Keyboard
+
+usb:v1D50p614C*
+ ID_MODEL_FROM_DATABASE=dwtk In-Circuit Emulator
+
usb:v1D50p8085*
ID_MODEL_FROM_DATABASE=Box0 (box0-v5)
usb:v1D50pCC15*
- ID_MODEL_FROM_DATABASE=rad1o badge for CCC congress 2015
+ ID_MODEL_FROM_DATABASE=rad1o badge for CCC summer camp 2015
usb:v1D57*
ID_VENDOR_FROM_DATABASE=Xenta
usb:v1D57p000C*
ID_MODEL_FROM_DATABASE=Optical Mouse
+usb:v1D57p130F*
+ ID_MODEL_FROM_DATABASE=2.4Ghz wireless optical mouse receiver
+
usb:v1D57p2400*
ID_MODEL_FROM_DATABASE=Wireless Mouse Receiver
usb:v1D57pAC01*
ID_MODEL_FROM_DATABASE=Wireless Receiver (Keyboard and Mouse)
+usb:v1D57pAC02*
+ ID_MODEL_FROM_DATABASE=ViFit Activity Tracker
+
+usb:v1D57pAC08*
+ ID_MODEL_FROM_DATABASE=RFID Receiver (Keyboard)
+
usb:v1D57pAD02*
ID_MODEL_FROM_DATABASE=SE340D PC Remote Control
+usb:v1D57pAD03*
+ ID_MODEL_FROM_DATABASE=[T3] 2.4GHz and IR Air Mouse Remote Control
+
usb:v1D57pAF01*
ID_MODEL_FROM_DATABASE=AUVIO Universal Remote Receiver for PlayStation 3
+usb:v1D57pAF03*
+ ID_MODEL_FROM_DATABASE=Wireless Receiver
+
+usb:v1D57pFA20*
+ ID_MODEL_FROM_DATABASE=2.4GHz Wireless Reciever (Mini Keyboard & Mouse)
+
usb:v1D5B*
ID_VENDOR_FROM_DATABASE=Smartronix, Inc.
usb:v1D6Bp0200*
ID_MODEL_FROM_DATABASE=Qemu Audio Device
+usb:v1D88*
+ ID_VENDOR_FROM_DATABASE=Mahr GmbH
+
+usb:v1D88p0001*
+ ID_MODEL_FROM_DATABASE=Measurement Device [MarECon]
+
+usb:v1D88p0002*
+ ID_MODEL_FROM_DATABASE=Probe
+
+usb:v1D88p0003*
+ ID_MODEL_FROM_DATABASE=Surface Measurement [PS10]
+
usb:v1D90*
ID_VENDOR_FROM_DATABASE=Citizen
usb:v1D90p201E*
ID_MODEL_FROM_DATABASE=PPU-700
+usb:v1D90p2037*
+ ID_MODEL_FROM_DATABASE=CL-S631 Barcode Printer
+
+usb:v1D90p20F0*
+ ID_MODEL_FROM_DATABASE=Thermal Receipt Printer [CT-E351]
+
usb:v1D9D*
ID_VENDOR_FROM_DATABASE=Sigma Sport
usb:v1D9Dp1011*
ID_MODEL_FROM_DATABASE=Docking Station Topline 2012
+usb:v1D9Dp1012*
+ ID_MODEL_FROM_DATABASE=Docking Station Topline 2016
+
+usb:v1DD2*
+ ID_VENDOR_FROM_DATABASE=Leo Bodnar Electronics Ltd
+
+usb:v1DD3*
+ ID_VENDOR_FROM_DATABASE=Dajc Inc.
+
+usb:v1DD3p0001*
+ ID_MODEL_FROM_DATABASE=Expert I/O 1000
+
usb:v1DE1*
ID_VENDOR_FROM_DATABASE=Actions Microelectronics Co.
usb:v1DE1pC101*
ID_MODEL_FROM_DATABASE=Generic Display Device
+usb:v1DE6*
+ ID_VENDOR_FROM_DATABASE=MICRORISC s.r.o.
+
usb:v1E0E*
ID_VENDOR_FROM_DATABASE=Qualcomm / Option
usb:v1E29p040E*
ID_MODEL_FROM_DATABASE=LPC2378 [Robotino 3 Bootloader]
+usb:v1E29p040F*
+ ID_MODEL_FROM_DATABASE=LPC2148 [Robotino gripper]
+
+usb:v1E29p0410*
+ ID_MODEL_FROM_DATABASE=LPC2148 [Robotino IR panel]
+
usb:v1E29p0501*
ID_MODEL_FROM_DATABASE=CP2102 [CMSP]
usb:v1E29p0601*
ID_MODEL_FROM_DATABASE=CMMP-AS
+usb:v1E29p0602*
+ ID_MODEL_FROM_DATABASE=FTDI232 [CMMS]
+
+usb:v1E2D*
+ ID_VENDOR_FROM_DATABASE=Gemalto M2M GmbH
+
+usb:v1E2Dp004F*
+ ID_MODEL_FROM_DATABASE=EGS3 GSM/GPRS modem
+
+usb:v1E2Dp0054*
+ ID_MODEL_FROM_DATABASE=PH8 wireless module
+
+usb:v1E2Dp0058*
+ ID_MODEL_FROM_DATABASE=Wireless Module [Cinterion EHS6]
+
+usb:v1E2Dp0059*
+ ID_MODEL_FROM_DATABASE=Wireless Module [Cinterion BGx]
+
+usb:v1E2Dp005B*
+ ID_MODEL_FROM_DATABASE=Zoom 4625 Modem
+
+usb:v1E2Dp0061*
+ ID_MODEL_FROM_DATABASE=ALSx PLSx LTE modem
+
+usb:v1E2Dp00A0*
+ ID_MODEL_FROM_DATABASE=Cinterion ELS31-V
+
usb:v1E3D*
ID_VENDOR_FROM_DATABASE=Chipsbank Microelectronics Co., Ltd
+usb:v1E3Dp198A*
+ ID_MODEL_FROM_DATABASE=Flash Disk
+
usb:v1E3Dp2093*
ID_MODEL_FROM_DATABASE=CBM209x Flash Drive (OEM)
usb:v1E41p0001*
ID_MODEL_FROM_DATABASE=CS328A PC Oscilloscope
+usb:v1E41p0004*
+ ID_MODEL_FROM_DATABASE=CS448
+
+usb:v1E44*
+ ID_VENDOR_FROM_DATABASE=SHIMANO INC.
+
+usb:v1E44p7220*
+ ID_MODEL_FROM_DATABASE=SM-BCR2
+
usb:v1E4E*
ID_VENDOR_FROM_DATABASE=Cubeternet
usb:v1E4Ep0102*
ID_MODEL_FROM_DATABASE=GL-UPC822 UVC WebCam
+usb:v1E4Ep0109*
+ ID_MODEL_FROM_DATABASE=EtronTech CMOS based eSP570 WebCam [Onyx Titanium TC101]
+
usb:v1E54*
ID_VENDOR_FROM_DATABASE=TypeMatrix
usb:v1E68p001B*
ID_MODEL_FROM_DATABASE=DataStation maxi g.u
+usb:v1E68p004C*
+ ID_MODEL_FROM_DATABASE=DataStation Pocket Click
+
usb:v1E68p0050*
ID_MODEL_FROM_DATABASE=DataStation maxi light
+usb:v1E68p1045*
+ ID_MODEL_FROM_DATABASE=ST70408-3 [SurfTab breeze 7.0 quad 3G] (MTP Mode)
+
+usb:v1E68p1046*
+ ID_MODEL_FROM_DATABASE=ST70408-3 [SurfTab breeze 7.0 quad 3G] (PTP Mode)
+
usb:v1E71*
ID_VENDOR_FROM_DATABASE=NZXT
usb:v1E71p0001*
ID_MODEL_FROM_DATABASE=Avatar Optical Mouse
+usb:v1E71p170E*
+ ID_MODEL_FROM_DATABASE=Kraken X
+
+usb:v1E71p1711*
+ ID_MODEL_FROM_DATABASE=Grid+ V3
+
+usb:v1E71p1714*
+ ID_MODEL_FROM_DATABASE=Smart Device
+
+usb:v1E71p1715*
+ ID_MODEL_FROM_DATABASE=Kraken M22
+
+usb:v1E71p2006*
+ ID_MODEL_FROM_DATABASE=Smart Device V2
+
usb:v1E74*
ID_VENDOR_FROM_DATABASE=Coby Electronics Corporation
usb:v1E74p7111*
ID_MODEL_FROM_DATABASE=MP957 Music and Video Player
+usb:v1E7B*
+ ID_VENDOR_FROM_DATABASE=Zurich Instruments
+
+usb:v1E7Bp0002*
+ ID_MODEL_FROM_DATABASE=HF2
+
+usb:v1E7Bp0003*
+ ID_MODEL_FROM_DATABASE=UHF
+
+usb:v1E7Bp0004*
+ ID_MODEL_FROM_DATABASE=MFLI
+
usb:v1E7D*
ID_VENDOR_FROM_DATABASE=ROCCAT
usb:v1E7Dp2C24*
ID_MODEL_FROM_DATABASE=Pyra Mouse (wired)
+usb:v1E7Dp2C2E*
+ ID_MODEL_FROM_DATABASE=Lua Mouse
+
+usb:v1E7Dp2C38*
+ ID_MODEL_FROM_DATABASE=Kiro Mouse
+
usb:v1E7Dp2CED*
ID_MODEL_FROM_DATABASE=Kone Mouse
+usb:v1E7Dp2CEE*
+ ID_MODEL_FROM_DATABASE=Kova 2016 Gray Mouse
+
+usb:v1E7Dp2CEF*
+ ID_MODEL_FROM_DATABASE=Kova 2016 White Mouse
+
+usb:v1E7Dp2CF0*
+ ID_MODEL_FROM_DATABASE=Kova 2016 Black Mouse
+
usb:v1E7Dp2CF6*
ID_MODEL_FROM_DATABASE=Pyra Mouse (wireless)
usb:v1E7Dp2D50*
- ID_MODEL_FROM_DATABASE=Kova+ Mouse
+ ID_MODEL_FROM_DATABASE=Kova[+] Mouse
usb:v1E7Dp2D51*
- ID_MODEL_FROM_DATABASE=Kone+ Mouse
+ ID_MODEL_FROM_DATABASE=Kone[+] Mouse
+
+usb:v1E7Dp2D5A*
+ ID_MODEL_FROM_DATABASE=Savu Mouse
+
+usb:v1E7Dp2DB4*
+ ID_MODEL_FROM_DATABASE=Kone Pure Optical Mouse
+
+usb:v1E7Dp2DBE*
+ ID_MODEL_FROM_DATABASE=Kone Pure Mouse
+
+usb:v1E7Dp2DBF*
+ ID_MODEL_FROM_DATABASE=Kone Pure Military Mouse
+
+usb:v1E7Dp2DC2*
+ ID_MODEL_FROM_DATABASE=Kone Pure Optical Black Mouse
+
+usb:v1E7Dp2DCB*
+ ID_MODEL_FROM_DATABASE=Kone Pure SE(L) Mouse
usb:v1E7Dp2E22*
ID_MODEL_FROM_DATABASE=Kone XTD Mouse
+usb:v1E7Dp2E23*
+ ID_MODEL_FROM_DATABASE=Kone XTD Optical Mouse
+
+usb:v1E7Dp2E27*
+ ID_MODEL_FROM_DATABASE=Kone AIMO Mouse
+
+usb:v1E7Dp2E4A*
+ ID_MODEL_FROM_DATABASE=Tyon Black Mouse
+
+usb:v1E7Dp2E4B*
+ ID_MODEL_FROM_DATABASE=Tyon White Mouse
+
+usb:v1E7Dp2E7C*
+ ID_MODEL_FROM_DATABASE=Nyth Black Mouse
+
+usb:v1E7Dp2E7D*
+ ID_MODEL_FROM_DATABASE=Nyth White Mouse
+
+usb:v1E7Dp2F76*
+ ID_MODEL_FROM_DATABASE=Sova Keyboard
+
+usb:v1E7Dp2F94*
+ ID_MODEL_FROM_DATABASE=Sova MK Keyboard
+
+usb:v1E7Dp2FA8*
+ ID_MODEL_FROM_DATABASE=Suora Keyboard
+
+usb:v1E7Dp2FC6*
+ ID_MODEL_FROM_DATABASE=Skeltr Keyboard
+
+usb:v1E7Dp2FDA*
+ ID_MODEL_FROM_DATABASE=Ryos MK FX Keyboard
+
usb:v1E7Dp30D4*
ID_MODEL_FROM_DATABASE=Arvo Keyboard
+usb:v1E7Dp3138*
+ ID_MODEL_FROM_DATABASE=Ryos MK Keyboard
+
+usb:v1E7Dp316A*
+ ID_MODEL_FROM_DATABASE=Ryos TKL Keyboard
+
+usb:v1E7Dp319C*
+ ID_MODEL_FROM_DATABASE=Isku Keyboard
+
+usb:v1E7Dp31CE*
+ ID_MODEL_FROM_DATABASE=Ryos MK Glow Keyboard
+
+usb:v1E7Dp3232*
+ ID_MODEL_FROM_DATABASE=Ryos MK Pro Keyboard
+
+usb:v1E7Dp3246*
+ ID_MODEL_FROM_DATABASE=Suora FX Keyboard
+
+usb:v1E7Dp3264*
+ ID_MODEL_FROM_DATABASE=Isku FX Keyboard
+
+usb:v1E8E*
+ ID_VENDOR_FROM_DATABASE=Airbus Defence and Space
+
+usb:v1E8Ep6001*
+ ID_MODEL_FROM_DATABASE=P8GR
+
+usb:v1E91*
+ ID_VENDOR_FROM_DATABASE=Other World Computing
+
+usb:v1E91pB0B1*
+ ID_MODEL_FROM_DATABASE=miniStack
+
usb:v1EA7*
ID_VENDOR_FROM_DATABASE=SHARKOON Technologies GmbH
+usb:v1EA7p0030*
+ ID_MODEL_FROM_DATABASE=Trust GXT 158 Orna Laser Gaming Mouse
+
+usb:v1EA7p0064*
+ ID_MODEL_FROM_DATABASE=2.4GHz Wireless rechargeable vertical mouse [More&Better]
+
usb:v1EA7p0066*
ID_MODEL_FROM_DATABASE=[Mediatrack Edge Mini Keyboard]
+usb:v1EA7p0907*
+ ID_MODEL_FROM_DATABASE=Keyboard
+
+usb:v1EA7p1002*
+ ID_MODEL_FROM_DATABASE=Vintorez Gaming Mouse
+
usb:v1EA7p2007*
ID_MODEL_FROM_DATABASE=SHARK ZONE K30 Illuminated Gaming Keyboard
+usb:v1EAB*
+ ID_VENDOR_FROM_DATABASE=Fujian Newland Computer Co., Ltd
+
+usb:v1EABp0103*
+ ID_MODEL_FROM_DATABASE=HR200 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp0106*
+ ID_MODEL_FROM_DATABASE=HR200 Barcode scanner engine (Serial CDC)
+
+usb:v1EABp0110*
+ ID_MODEL_FROM_DATABASE=HR200 Barcode scanner engine (HID Pos)
+
+usb:v1EABp0C03*
+ ID_MODEL_FROM_DATABASE=HR100/HR3260 cordless/HR3290 cordless/BS80 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp0C06*
+ ID_MODEL_FROM_DATABASE=HR100/HR3260 cordless/HR3290 cordless/BS80 Barcode scanner engine (USB Serial CDC)
+
+usb:v1EABp0C10*
+ ID_MODEL_FROM_DATABASE=HR100/HR3260 cordless/HR3290 cordless/BS80 Barcode scanner engine (HID Pos)
+
+usb:v1EABp0D03*
+ ID_MODEL_FROM_DATABASE=EM2028 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp0D06*
+ ID_MODEL_FROM_DATABASE=EM2028 Barcode scanner engine (Serial CDC)
+
+usb:v1EABp0D10*
+ ID_MODEL_FROM_DATABASE=EM2028 Barcode scanner engine (HID Pos)
+
+usb:v1EABp1303*
+ ID_MODEL_FROM_DATABASE=EM30xx/EM20xx/HR3260 corded/HR200C Barcode scanner engine (HID keyboard)
+
+usb:v1EABp1306*
+ ID_MODEL_FROM_DATABASE=EM30xx/EM20xx/HR3260 corded/HR200C Barcode scanner engine (USB serial CDC)
+
+usb:v1EABp1310*
+ ID_MODEL_FROM_DATABASE=EM30xx/EM20xx/HR3260 corded/HR200C Barcode scanner engine (HID Pos)
+
+usb:v1EABp1403*
+ ID_MODEL_FROM_DATABASE=HR15-xx Barcode scanner engine (HID keyboard)
+
+usb:v1EABp1406*
+ ID_MODEL_FROM_DATABASE=HR15-xx Barcode scanner engine (Serial CDC)
+
+usb:v1EABp1410*
+ ID_MODEL_FROM_DATABASE=HR15-xx Barcode scanner engine (HID Pos)
+
+usb:v1EABp1603*
+ ID_MODEL_FROM_DATABASE=FM100-M/3250 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp1606*
+ ID_MODEL_FROM_DATABASE=FM100-M/3250 Barcode scanner engine (Serial CDC)
+
+usb:v1EABp1610*
+ ID_MODEL_FROM_DATABASE=FM100-M/3250 Barcode scanner engine (HID Pos)
+
+usb:v1EABp1903*
+ ID_MODEL_FROM_DATABASE=EM1300 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp1906*
+ ID_MODEL_FROM_DATABASE=EM1300 Barcode scanner engine (Serial CDC)
+
+usb:v1EABp1910*
+ ID_MODEL_FROM_DATABASE=EM1300 Barcode scanner engine (HID Pos)
+
+usb:v1EABp1A03*
+ ID_MODEL_FROM_DATABASE=HR3290 corded/HR22 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp1A06*
+ ID_MODEL_FROM_DATABASE=HR3290 corded/HR22 Barcode scanner engine (Serial CDC)
+
+usb:v1EABp1A10*
+ ID_MODEL_FROM_DATABASE=HR3290 corded/HR22 Barcode scanner engine (HID Pos)
+
+usb:v1EABp1C03*
+ ID_MODEL_FROM_DATABASE=HR2150 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp1C06*
+ ID_MODEL_FROM_DATABASE=HR2150 Barcode scanner engine (Serial CDC)
+
+usb:v1EABp1C10*
+ ID_MODEL_FROM_DATABASE=HR2150 Barcode scanner engine (HID Pos)
+
+usb:v1EABp1D03*
+ ID_MODEL_FROM_DATABASE=FM430 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp1D06*
+ ID_MODEL_FROM_DATABASE=FM430 Barcode scanner engine (Serial CDC)
+
+usb:v1EABp1D10*
+ ID_MODEL_FROM_DATABASE=FM430 Barcode scanner engine (HID Pos)
+
+usb:v1EABp1E03*
+ ID_MODEL_FROM_DATABASE=HR42 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp1E06*
+ ID_MODEL_FROM_DATABASE=HR42 Barcode scanner engine (Serial CDC)
+
+usb:v1EABp1E10*
+ ID_MODEL_FROM_DATABASE=HR42 Barcode scanner engine (HID Pos)
+
+usb:v1EABp1F03*
+ ID_MODEL_FROM_DATABASE=HR11+ Barcode scanner engine (HID keyboard)
+
+usb:v1EABp1F06*
+ ID_MODEL_FROM_DATABASE=HR11+ Barcode scanner engine (Serial CDC)
+
+usb:v1EABp1F10*
+ ID_MODEL_FROM_DATABASE=HR11+ Barcode scanner engine (HID Pos)
+
+usb:v1EABp2003*
+ ID_MODEL_FROM_DATABASE=EM2037v2 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp2006*
+ ID_MODEL_FROM_DATABASE=EM2037v2 Barcode scanner engine (Serial CDC)
+
+usb:v1EABp2010*
+ ID_MODEL_FROM_DATABASE=EM2037v2 Barcode scanner engine (HID Pos)
+
+usb:v1EABp8003*
+ ID_MODEL_FROM_DATABASE=EM13x5-LD/HR15-70/HR100-70/HR12/HR1150-70 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp8006*
+ ID_MODEL_FROM_DATABASE=EM13x5-LD/HR15-70/HR100-70/HR12/HR1150-70 Barcode scanner engine (USB Serial CDC)
+
+usb:v1EABp8010*
+ ID_MODEL_FROM_DATABASE=EM13x5-LD/HR15-70/HR100-70/HR12/HR1150-70 Barcode scanner engine (HID Pos)
+
+usb:v1EABp8203*
+ ID_MODEL_FROM_DATABASE=EM3080-01/EM3095/FR20/FM30 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp8206*
+ ID_MODEL_FROM_DATABASE=EM3080-01/EM3095/FR20/FM30 Barcode scanner engine (USB Serial CDC)
+
+usb:v1EABp8210*
+ ID_MODEL_FROM_DATABASE=EM3080-01/EM3095/FR20/FM30 Barcode scanner engine (HID Pos)
+
+usb:v1EABp8303*
+ ID_MODEL_FROM_DATABASE=HR2160 Barcode scanner engine (HID keyboard)
+
+usb:v1EABp8306*
+ ID_MODEL_FROM_DATABASE=HR2160 Barcode scanner engine (Serial CDC)
+
+usb:v1EABp8310*
+ ID_MODEL_FROM_DATABASE=HR2160 Barcode scanner engine (HID Pos)
+
+usb:v1EAF*
+ ID_VENDOR_FROM_DATABASE=Leaflabs
+
+usb:v1EAFp0003*
+ ID_MODEL_FROM_DATABASE=Maple DFU interface
+
+usb:v1EAFp0004*
+ ID_MODEL_FROM_DATABASE=Maple serial interface
+
+usb:v1EB8*
+ ID_VENDOR_FROM_DATABASE=Modacom Co., Ltd.
+
+usb:v1EB8p7F00*
+ ID_MODEL_FROM_DATABASE=MW-U3500 WiMAX adapter
+
usb:v1EBB*
ID_VENDOR_FROM_DATABASE=NuCORE Technology, Inc.
+usb:v1ECB*
+ ID_VENDOR_FROM_DATABASE=AMTelecom
+
+usb:v1ECBp02E2*
+ ID_MODEL_FROM_DATABASE=JMR1140 [Jiofi]
+
+usb:v1ED8*
+ ID_VENDOR_FROM_DATABASE=FENDER MUSICAL INSTRUMENTS CORPORATION
+
+usb:v1ED8p0004*
+ ID_MODEL_FROM_DATABASE=Mustang I/II
+
+usb:v1ED8p0005*
+ ID_MODEL_FROM_DATABASE=Mustang III/IV/V
+
+usb:v1ED8p0006*
+ ID_MODEL_FROM_DATABASE=Mustang I/II [Firmware Update]
+
+usb:v1ED8p0007*
+ ID_MODEL_FROM_DATABASE=Mustang III/IV/V [Firmware Update]
+
+usb:v1ED8p0010*
+ ID_MODEL_FROM_DATABASE=Mustang Mini
+
+usb:v1ED8p0011*
+ ID_MODEL_FROM_DATABASE=Mustang Mini [Firmware Update]
+
+usb:v1ED8p0014*
+ ID_MODEL_FROM_DATABASE=Mustang I (V.2)
+
+usb:v1ED8p0016*
+ ID_MODEL_FROM_DATABASE=Mustang IV v.2
+
usb:v1EDA*
ID_VENDOR_FROM_DATABASE=AirTies Wireless Networks
usb:v1EDBpBD3B*
ID_MODEL_FROM_DATABASE=Intensity Shuttle
+usb:v1EDBpBD46*
+ ID_MODEL_FROM_DATABASE=Mini Converter Analog to SDI
+
+usb:v1EDBpBD75*
+ ID_MODEL_FROM_DATABASE=2.5K Cinema Camera (BMCC)
+
usb:v1EE8*
ID_VENDOR_FROM_DATABASE=ONDA COMMUNICATION S.p.a.
usb:v1EF6p564A*
ID_MODEL_FROM_DATABASE=Cassidian RIU CSMU/BSD Simulator
+usb:v1F0C*
+ ID_VENDOR_FROM_DATABASE=CMX Systems
+
+usb:v1F0Cp2000*
+ ID_MODEL_FROM_DATABASE=HP StreamSmart 410 [NW278AA]
+
usb:v1F28*
ID_VENDOR_FROM_DATABASE=Cal-Comp
ID_MODEL_FROM_DATABASE=CD INSTALLER USB Device
usb:v1F3A*
- ID_VENDOR_FROM_DATABASE=Onda (unverified)
+ ID_VENDOR_FROM_DATABASE=Allwinner Technology
+
+usb:v1F3Ap1000*
+ ID_MODEL_FROM_DATABASE=Prestigio PER3464B ebook reader (Mass storage mode)
+
+usb:v1F3Ap1002*
+ ID_MODEL_FROM_DATABASE=mediacom XPRO 415
+
+usb:v1F3Ap1010*
+ ID_MODEL_FROM_DATABASE=Android device in fastboot mode
usb:v1F3ApEFE8*
- ID_MODEL_FROM_DATABASE=V972 tablet in flashing mode
+ ID_MODEL_FROM_DATABASE=sunxi SoC OTG connector in FEL/flashing mode
usb:v1F44*
ID_VENDOR_FROM_DATABASE=The Neat Company
usb:v1F4D*
ID_VENDOR_FROM_DATABASE=G-Tek Electronics Group
+usb:v1F4DpA115*
+ ID_MODEL_FROM_DATABASE=EVOLVEO XtraTV stick [DVB-T]
+
usb:v1F4DpB803*
ID_MODEL_FROM_DATABASE=Lifeview LV5TDLX DVB-T [RTL2832U]
+usb:v1F4DpC803*
+ ID_MODEL_FROM_DATABASE=NotOnlyTV (Lifeview) LV5TDLX DVB-T [RTL2832U]
+
usb:v1F4DpD220*
ID_MODEL_FROM_DATABASE=Geniatech T220 DVB-T2 TV Stick
+usb:v1F52*
+ ID_VENDOR_FROM_DATABASE=Systems & Electronic Development FZCO (SEDCO)
+
+usb:v1F52p0001*
+ ID_MODEL_FROM_DATABASE=Ultima 49 Printer
+
+usb:v1F52p0002*
+ ID_MODEL_FROM_DATABASE=Ultima 90 Printer
+
+usb:v1F52p0003*
+ ID_MODEL_FROM_DATABASE=FormsPro 50 Printer
+
+usb:v1F52p0004*
+ ID_MODEL_FROM_DATABASE=Ultima 90+ Printer
+
usb:v1F6F*
ID_VENDOR_FROM_DATABASE=Aliph
usb:v1F75*
ID_VENDOR_FROM_DATABASE=Innostor Technology Corporation
+usb:v1F75p0611*
+ ID_MODEL_FROM_DATABASE=IS611 SATA/PATA Bridge Controller
+
+usb:v1F75p0621*
+ ID_MODEL_FROM_DATABASE=IS621 SATA Storage Controller
+
usb:v1F75p0888*
ID_MODEL_FROM_DATABASE=IS888 SATA Storage Controller
usb:v1F75p0902*
ID_MODEL_FROM_DATABASE=IS902 UFD controller
+usb:v1F75p0916*
+ ID_MODEL_FROM_DATABASE=IS916 Flash Drive
+
+usb:v1F75p0917*
+ ID_MODEL_FROM_DATABASE=IS917 Mass storage
+
+usb:v1F75p0918*
+ ID_MODEL_FROM_DATABASE=IS918 Flash Drive
+
usb:v1F82*
ID_VENDOR_FROM_DATABASE=TANDBERG
usb:v1F84*
ID_VENDOR_FROM_DATABASE=Alere, Inc.
+usb:v1F84p1F7E*
+ ID_MODEL_FROM_DATABASE=Lateral Flow Engine
+
usb:v1F87*
ID_VENDOR_FROM_DATABASE=Stantum
usb:v1F9Bp0241*
ID_MODEL_FROM_DATABASE=AirView2-EXT
+usb:v1F9BpB0B1*
+ ID_MODEL_FROM_DATABASE=UniFi VoIP Phone
+
usb:v1FAB*
ID_VENDOR_FROM_DATABASE=Samsung Opto-Electroncs Co., Ltd.
usb:v1FABp104D*
ID_MODEL_FROM_DATABASE=ES65
+usb:v1FAC*
+ ID_VENDOR_FROM_DATABASE=Franklin Wireless
+
+usb:v1FACp0232*
+ ID_MODEL_FROM_DATABASE=U770 3G/4G Wimax/4G LTE Modem
+
+usb:v1FAE*
+ ID_VENDOR_FROM_DATABASE=Lumidigm
+
+usb:v1FAEp0040*
+ ID_MODEL_FROM_DATABASE=M311 Fingerprint Scanner
+
+usb:v1FAEp212C*
+ ID_MODEL_FROM_DATABASE=M30x (Mercury) fingerprint sensor
+
+usb:v1FB2*
+ ID_VENDOR_FROM_DATABASE=Withings
+
+usb:v1FB2p0001*
+ ID_MODEL_FROM_DATABASE=Wi-Fi Body Scale (WBS01)
+
+usb:v1FBA*
+ ID_VENDOR_FROM_DATABASE=DERMALOG Identification Systems GmbH
+
usb:v1FBD*
ID_VENDOR_FROM_DATABASE=Delphin Technology AG
usb:v1FC9p0003*
ID_MODEL_FROM_DATABASE=LPC1343
+usb:v1FC9p000C*
+ ID_MODEL_FROM_DATABASE=LPC4330FET180 [ARM Cortex M4 + M0] (device firmware upgrade mode)
+
+usb:v1FC9p0082*
+ ID_MODEL_FROM_DATABASE=LPC4330FET180 [ARM Cortex M4 + M0] (mass storage controller mode)
+
usb:v1FC9p010B*
ID_MODEL_FROM_DATABASE=PR533
+usb:v1FC9p0126*
+ ID_MODEL_FROM_DATABASE=i.MX 7ULP SystemOnChip in RecoveryMode
+
usb:v1FC9p012B*
ID_MODEL_FROM_DATABASE=i.MX 8M Dual/8M QuadLite/8M Quad Serial Downloader
+usb:v1FC9p5002*
+ ID_MODEL_FROM_DATABASE=PTN5002 [Startech VGA/DVI-D adapter]
+
+usb:v1FC9p8124*
+ ID_MODEL_FROM_DATABASE=SharkRF Bootloader
+
+usb:v1FC9p824C*
+ ID_MODEL_FROM_DATABASE=LumiNode1
+
usb:v1FDE*
ID_VENDOR_FROM_DATABASE=ILX Lightwave Corporation
usb:v1FF7p001A*
ID_MODEL_FROM_DATABASE=Human Interface Device
+usb:v1FFB*
+ ID_VENDOR_FROM_DATABASE=Pololu Corporation
+
+usb:v1FFBp0081*
+ ID_MODEL_FROM_DATABASE=AVR Programmer
+
+usb:v1FFBp0083*
+ ID_MODEL_FROM_DATABASE=Jrk 21v3 Motor Controller
+
+usb:v1FFBp0089*
+ ID_MODEL_FROM_DATABASE=Micro Maestro 6-Servo Controller
+
+usb:v1FFBp008A*
+ ID_MODEL_FROM_DATABASE=Mini Maestro 12-Channel Servo Controller
+
+usb:v1FFBp008B*
+ ID_MODEL_FROM_DATABASE=Mini Maestro 18-Channel Servo Controller
+
+usb:v1FFBp008C*
+ ID_MODEL_FROM_DATABASE=Mini Maestro 24-Channel Servo Controller
+
+usb:v1FFBp00B0*
+ ID_MODEL_FROM_DATABASE=AVR Programmer v2
+
usb:v1FFF*
ID_VENDOR_FROM_DATABASE=Ideofy Inc.
+usb:v2000*
+ ID_VENDOR_FROM_DATABASE=CMX Systems
+
+usb:v2000p1F0C*
+ ID_MODEL_FROM_DATABASE=HP StreamSmart 410 [NW278AA]
+
usb:v2001*
ID_VENDOR_FROM_DATABASE=D-Link Corp.
usb:v2001p200C*
ID_MODEL_FROM_DATABASE=10/100 Ethernet
+usb:v2001p3101*
+ ID_MODEL_FROM_DATABASE=DWA-182 AC1200 DB Wireless Adapter(rev.A1) [Broadcom BCM43526]
+
usb:v2001p3200*
ID_MODEL_FROM_DATABASE=DWL-120 802.11b Wireless Adapter(rev.E1) [Atmel at76c503a]
usb:v2001p330A*
ID_MODEL_FROM_DATABASE=DWA-133 802.11n Wireless N Adapter [Realtek RTL8192CU]
+usb:v2001p330D*
+ ID_MODEL_FROM_DATABASE=DWA-131 802.11n Wireless N Nano Adapter (rev.B1) [Realtek RTL8192CU]
+
+usb:v2001p330F*
+ ID_MODEL_FROM_DATABASE=DWA-125 Wireless N 150 Adapter(rev.D1) [Realtek RTL8188ETV]
+
+usb:v2001p3310*
+ ID_MODEL_FROM_DATABASE=DWA-123 Wireless N 150 Adapter (rev.D1)
+
+usb:v2001p3314*
+ ID_MODEL_FROM_DATABASE=DWA-171 AC600 DB Wireless Adapter(rev.A1) [Realtek RTL8811AU]
+
+usb:v2001p3315*
+ ID_MODEL_FROM_DATABASE=DWA-182 Wireless AC Dualband Adapter(rev.C) [Realtek RTL8812AU]
+
+usb:v2001p3317*
+ ID_MODEL_FROM_DATABASE=DWA-137 Wireless N High-Gain Adapter [Ralink RT5372]
+
+usb:v2001p3319*
+ ID_MODEL_FROM_DATABASE=DWA-131 Wireless N Nano Adapter (Rev. E1) [Realtek RTL8192EU]
+
usb:v2001p3500*
ID_MODEL_FROM_DATABASE=Elitegroup Computer Systems WLAN card WL-162
usb:v2001p3C1B*
ID_MODEL_FROM_DATABASE=DWA-127 Wireless N 150 High-Gain Adapter(rev.A1) [Ralink RT3070]
+usb:v2001p3C1E*
+ ID_MODEL_FROM_DATABASE=DWA-125 Wireless N 150 Adapter(rev.B1) [Ralink RT5370]
+
usb:v2001p4000*
ID_MODEL_FROM_DATABASE=DSB-650C Ethernet [klsi]
usb:v2001p4102*
ID_MODEL_FROM_DATABASE=10/100 Ethernet
+usb:v2001p4A00*
+ ID_MODEL_FROM_DATABASE=DUB-1312 Gigabit Ethernet Adapter
+
usb:v2001p5100*
ID_MODEL_FROM_DATABASE=DSL-200 ADSL ATM Modem
usb:v2003pEA61*
ID_MODEL_FROM_DATABASE=dc3500
+usb:v2006*
+ ID_VENDOR_FROM_DATABASE=LenovoMobile
+
+usb:v2009*
+ ID_VENDOR_FROM_DATABASE=iStorage
+
+usb:v2009p5004*
+ ID_MODEL_FROM_DATABASE=datAshur 4GB
+
+usb:v2009p5016*
+ ID_MODEL_FROM_DATABASE=datAshur 16GB
+
+usb:v2009p5032*
+ ID_MODEL_FROM_DATABASE=datAshur 32GB
+
usb:v200C*
ID_VENDOR_FROM_DATABASE=Reloop
usb:v2013*
ID_VENDOR_FROM_DATABASE=PCTV Systems
+usb:v2013p0242*
+ ID_MODEL_FROM_DATABASE=QuatroStick 510e
+
usb:v2013p0245*
ID_MODEL_FROM_DATABASE=PCTV 73ESE
usb:v2013p0248*
ID_MODEL_FROM_DATABASE=PCTV 282E
+usb:v2013p024C*
+ ID_MODEL_FROM_DATABASE=DVB-S2 Stick 460e
+
usb:v2013p024F*
ID_MODEL_FROM_DATABASE=nanoStick T2 290e
+usb:v2013p0251*
+ ID_MODEL_FROM_DATABASE=QuatroStick nano 520e
+
+usb:v2013p0258*
+ ID_MODEL_FROM_DATABASE=DVB-S2 Stick 461e
+
+usb:v2013p025A*
+ ID_MODEL_FROM_DATABASE=AndroiDTV 78e
+
+usb:v2013p025F*
+ ID_MODEL_FROM_DATABASE=tripleStick 292e
+
+usb:v2013p0262*
+ ID_MODEL_FROM_DATABASE=microStick 79e
+
+usb:v2018*
+ ID_VENDOR_FROM_DATABASE=Deutsche Telekom AG
+
+usb:v2018p0406*
+ ID_MODEL_FROM_DATABASE=Eumex 800
+
+usb:v2018p0408*
+ ID_MODEL_FROM_DATABASE=Eumex 800
+
usb:v2019*
ID_VENDOR_FROM_DATABASE=PLANEX
usb:v2019pED18*
ID_MODEL_FROM_DATABASE=GW-USHyper300 / GW-USH300N 802.11bgn Wireless Adapter [Realtek RTL8191SU]
+usb:v201E*
+ ID_VENDOR_FROM_DATABASE=Haier
+
+usb:v201Ep2009*
+ ID_MODEL_FROM_DATABASE=CE100 CDMA EVDO
+
+usb:v203A*
+ ID_VENDOR_FROM_DATABASE=PARALLELS
+
usb:v203D*
ID_VENDOR_FROM_DATABASE=Encore Electronics Inc.
usb:v2040*
ID_VENDOR_FROM_DATABASE=Hauppauge
+usb:v2040p0265*
+ ID_MODEL_FROM_DATABASE=WinTV-dualHD DVB
+
+usb:v2040p026D*
+ ID_MODEL_FROM_DATABASE=WinTV-dualHD ATSC
+
usb:v2040p0C80*
ID_MODEL_FROM_DATABASE=Windham
usb:v2040p0C90*
ID_MODEL_FROM_DATABASE=Windham
+usb:v2040p1605*
+ ID_MODEL_FROM_DATABASE=WinTV-HVR 930C HD
+
usb:v2040p1700*
ID_MODEL_FROM_DATABASE=CataMount
usb:v2040p2400*
ID_MODEL_FROM_DATABASE=WinTV PVR USB2 (Model 24019)
+usb:v2040p4200*
+ ID_MODEL_FROM_DATABASE=WinTV
+
usb:v2040p4700*
ID_MODEL_FROM_DATABASE=WinTV Nova-S-USB2
ID_MODEL_FROM_DATABASE=WinTV HVR-930
usb:v2040p6513*
- ID_MODEL_FROM_DATABASE=WinTV HVR-980
+ ID_MODEL_FROM_DATABASE=WinTV HVR-950/HVR-980
+
+usb:v2040p6600*
+ ID_MODEL_FROM_DATABASE=WinTV HVR-900H (Model 660xx)
usb:v2040p7050*
ID_MODEL_FROM_DATABASE=Nova-T Stick
usb:v2040p9950*
ID_MODEL_FROM_DATABASE=WinTV Nova-T-500
+usb:v2040pB123*
+ ID_MODEL_FROM_DATABASE=WinTV-HVR-955Q
+
+usb:v2040pB138*
+ ID_MODEL_FROM_DATABASE=WinTV-HVR-900 model 00246 [WinTV-T Video]
+
usb:v2040pB910*
ID_MODEL_FROM_DATABASE=Windham
usb:v2047*
ID_VENDOR_FROM_DATABASE=Texas Instruments
+usb:v2047p0013*
+ ID_MODEL_FROM_DATABASE=MSP eZ-FET lite
+
+usb:v2047p0014*
+ ID_MODEL_FROM_DATABASE=MSP-FET
+
usb:v2047p0200*
- ID_MODEL_FROM_DATABASE=MSP430 USB HID Bootstrap Loader
+ ID_MODEL_FROM_DATABASE=MSP430 Bootloader
+
+usb:v2047p0203*
+ ID_MODEL_FROM_DATABASE=eZ-FET Bootloader
+
+usb:v2047p0204*
+ ID_MODEL_FROM_DATABASE=MSP-FET Bootloader
+
+usb:v2047p0300*
+ ID_MODEL_FROM_DATABASE=MSP430 CDC Example
+
+usb:v2047p0301*
+ ID_MODEL_FROM_DATABASE=MSP430 HID Datapipe Example
+
+usb:v2047p0302*
+ ID_MODEL_FROM_DATABASE=MSP430 CDC+HID Example
+
+usb:v2047p0309*
+ ID_MODEL_FROM_DATABASE=MSP430 HID Mouse Example
+
+usb:v2047p0313*
+ ID_MODEL_FROM_DATABASE=MSP430 CDC+CDC Example
+
+usb:v2047p0314*
+ ID_MODEL_FROM_DATABASE=MSP430 HID+HID Example
+
+usb:v2047p0315*
+ ID_MODEL_FROM_DATABASE=MSP430 HID Keyboard Example
+
+usb:v2047p0316*
+ ID_MODEL_FROM_DATABASE=MSP430 MSC File System Emulation Example
+
+usb:v2047p0317*
+ ID_MODEL_FROM_DATABASE=MSP430 MSC SD Card Example
+
+usb:v2047p0318*
+ ID_MODEL_FROM_DATABASE=MSP430 MSC Multiple LUNs Example
+
+usb:v2047p0319*
+ ID_MODEL_FROM_DATABASE=MSP430 MSC+CDC+HID Example
+
+usb:v2047p0320*
+ ID_MODEL_FROM_DATABASE=MSP430 SYSBIOS Tasks MSC+CDC+HID Example
+
+usb:v2047p0321*
+ ID_MODEL_FROM_DATABASE=MSP430 SYSBIOS SWIs MSC+CDC+HID Example
+
+usb:v2047p0322*
+ ID_MODEL_FROM_DATABASE=MSP430 MSC Double-Buffering Example
+
+usb:v2047p0323*
+ ID_MODEL_FROM_DATABASE=MSP430 MSC CD-ROM Example
+
+usb:v2047p03DF*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03E0*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03E1*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03E2*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03E3*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03E4*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03E5*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03E6*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03E7*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03E8*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03E9*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03EA*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03EB*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03EC*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03ED*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03EE*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03EF*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03F0*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03F1*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03F2*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03F3*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03F4*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03F5*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03F6*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03F7*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03F8*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03F9*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03FA*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03FB*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03FC*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p03FD*
+ ID_MODEL_FROM_DATABASE=MSP430 User Experiment
+
+usb:v2047p0401*
+ ID_MODEL_FROM_DATABASE=MSP430 Keyboard Example
usb:v2047p0855*
ID_MODEL_FROM_DATABASE=Invensense Embedded MotionApp HID Sensor
+usb:v2047p08F8*
+ ID_MODEL_FROM_DATABASE=FDC2x14/LDC13xx/LDC16xx EVM
+
usb:v2047p0964*
ID_MODEL_FROM_DATABASE=Inventio Software MSP430
+usb:v2047p0A76*
+ ID_MODEL_FROM_DATABASE=GEOKON S-3810A-5 USB-RS485 CONVERTER
+
+usb:v2047pFFE7*
+ ID_MODEL_FROM_DATABASE=HID v1.00 Device [Improv Device]
+
usb:v2058*
ID_VENDOR_FROM_DATABASE=Nano River Technology
usb:v2080p0004*
ID_MODEL_FROM_DATABASE=NOOK Tablet
+usb:v2080p0005*
+ ID_MODEL_FROM_DATABASE=BNTV600 [Nook HD+]
+
+usb:v2080p0006*
+ ID_MODEL_FROM_DATABASE=BNTV400 [Nook HD]
+
+usb:v2080p0007*
+ ID_MODEL_FROM_DATABASE=BNRV500 [Nook Glowlight]
+
+usb:v2080p000A*
+ ID_MODEL_FROM_DATABASE=BNRV510 [Nook Glowlight Plus]
+
+usb:v2080p000B*
+ ID_MODEL_FROM_DATABASE=BNRV520 [Nook Glowlight 3]
+
+usb:v2080p000C*
+ ID_MODEL_FROM_DATABASE=BNRV700 [Nook Glowlight Plus]
+
usb:v2086*
ID_VENDOR_FROM_DATABASE=SIMPASS
usb:v20A0*
ID_VENDOR_FROM_DATABASE=Clay Logic
+usb:v20A0p0006*
+ ID_MODEL_FROM_DATABASE=flirc
+
+usb:v20A0p4107*
+ ID_MODEL_FROM_DATABASE=GPF Crypto Stick V1.2
+
usb:v20A0p4123*
ID_MODEL_FROM_DATABASE=IKALOGIC SCANALOGIC 2
usb:v20A0p415C*
ID_MODEL_FROM_DATABASE=PipXtreme
+usb:v20A0p41E5*
+ ID_MODEL_FROM_DATABASE=BlinkStick
+
+usb:v20A0p4211*
+ ID_MODEL_FROM_DATABASE=Nitrokey Start
+
+usb:v20A0p4223*
+ ID_MODEL_FROM_DATABASE=ATSAMD21 [castAR]
+
+usb:v20A0p428D*
+ ID_MODEL_FROM_DATABASE=Electrosense wideband converter
+
usb:v20B1*
ID_VENDOR_FROM_DATABASE=XMOS Ltd
usb:v20B7p1DB6*
ID_MODEL_FROM_DATABASE=IDBG in normal mode
+usb:v20B7p9DB1*
+ ID_MODEL_FROM_DATABASE=Glasgow Debug Tool
+
usb:v20B7pC25B*
ID_MODEL_FROM_DATABASE=C2 Dongle
usb:v20B7pCB72*
ID_MODEL_FROM_DATABASE=ben-wpan, cntr
+usb:v20BC*
+ ID_VENDOR_FROM_DATABASE=ShenZhen ShanWan Technology Co., Ltd.
+
+usb:v20BCp5500*
+ ID_MODEL_FROM_DATABASE=Frostbite controller
+
usb:v20CE*
ID_VENDOR_FROM_DATABASE=Minicircuits
usb:v20DFp0001*
ID_MODEL_FROM_DATABASE=Entropy Key [UDEKEY01]
+usb:v20F0*
+ ID_VENDOR_FROM_DATABASE=L3Harris Technologies
+
+usb:v20F0p2102*
+ ID_MODEL_FROM_DATABASE=EWLA V2 Module
+
usb:v20F1*
ID_VENDOR_FROM_DATABASE=NET New Electronic Technology GmbH
usb:v20F4*
ID_VENDOR_FROM_DATABASE=TRENDnet
+usb:v20F4p646B*
+ ID_MODEL_FROM_DATABASE=TEW-646UBH High Power 150Mbps Wireless N Adapter [Realtek RTL8188SU]
+
usb:v20F4p648B*
ID_MODEL_FROM_DATABASE=TEW-648UBM 802.11n 150Mbps Micro Wireless N Adapter [Realtek RTL8188CUS]
+usb:v20F4p664B*
+ ID_MODEL_FROM_DATABASE=TEW-664UB H/W:V2.0R
+
+usb:v20F4p804B*
+ ID_MODEL_FROM_DATABASE=TEW-804UB 802.11a/b/g/n/ac (1x1) Wireless Adapter [Realtek RTL8811AU]
+
+usb:v20F4p805B*
+ ID_MODEL_FROM_DATABASE=TEW-805UB 300Mbps+867Mbps Wireless AC Adapter [Realtek RTL8812AU]
+
+usb:v20F4p806B*
+ ID_MODEL_FROM_DATABASE=TEW-806UBH 802.11a/b/g/n/ac (1x1) Wireless Adapter [MediaTek MT7610U]
+
usb:v20F7*
ID_VENDOR_FROM_DATABASE=XIMEA
usb:v2100*
ID_VENDOR_FROM_DATABASE=RT Systems
+usb:v2100p0E56*
+ ID_MODEL_FROM_DATABASE=USB62C Radio Cable [Yaesu 857/D - 897/D]
+
+usb:v2100p9E50*
+ ID_MODEL_FROM_DATABASE=USB-59 Radio Cable [Yaesu VX-8/D/DR]
+
usb:v2100p9E52*
ID_MODEL_FROM_DATABASE=Yaesu VX-7
usb:v2100p9E57*
ID_MODEL_FROM_DATABASE=RTS01 Radio Cable
+usb:v2100p9E58*
+ ID_MODEL_FROM_DATABASE=USB63C Radio Cable [Yaesu FTDX-1200]
+
usb:v2100p9E5D*
ID_MODEL_FROM_DATABASE=K4Y Radio Cable
usb:v2101p0201*
ID_MODEL_FROM_DATABASE=SIIG 4-to-2 Printer Switch
+usb:v2101p1402*
+ ID_MODEL_FROM_DATABASE=Keyboard/Mouse Switch
+
+usb:v2104*
+ ID_VENDOR_FROM_DATABASE=Tobii Technology AB
+
+usb:v2104p0050*
+ ID_MODEL_FROM_DATABASE=Eye tracker [EYEX2]
+
+usb:v2104p0124*
+ ID_MODEL_FROM_DATABASE=Eyechip
+
+usb:v2107*
+ ID_VENDOR_FROM_DATABASE=RDING TECH CO.,LTD
+
usb:v2109*
ID_VENDOR_FROM_DATABASE=VIA Labs, Inc.
+usb:v2109p0210*
+ ID_MODEL_FROM_DATABASE=Hub
+
usb:v2109p0700*
ID_MODEL_FROM_DATABASE=VL700 SATA 3Gb/s bridge
usb:v2109p0701*
ID_MODEL_FROM_DATABASE=VL701 SATA 3Gb/s bridge
+usb:v2109p0711*
+ ID_MODEL_FROM_DATABASE=VL711 SATA 6Gb/s bridge
+
+usb:v2109p0715*
+ ID_MODEL_FROM_DATABASE=VL817 SATA Adaptor
+
usb:v2109p0810*
ID_MODEL_FROM_DATABASE=VL81x Hub
usb:v2109p0812*
ID_MODEL_FROM_DATABASE=VL812 Hub
+usb:v2109p0813*
+ ID_MODEL_FROM_DATABASE=VL813 Hub
+
+usb:v2109p0820*
+ ID_MODEL_FROM_DATABASE=VL820 Hub
+
+usb:v2109p2210*
+ ID_MODEL_FROM_DATABASE=Hub
+
usb:v2109p2811*
ID_MODEL_FROM_DATABASE=Hub
usb:v2109p2812*
ID_MODEL_FROM_DATABASE=VL812 Hub
+usb:v2109p2813*
+ ID_MODEL_FROM_DATABASE=VL813 Hub
+
+usb:v2109p2820*
+ ID_MODEL_FROM_DATABASE=VL820 Hub
+
usb:v2109p3431*
ID_MODEL_FROM_DATABASE=Hub
+usb:v2109p711F*
+ ID_MODEL_FROM_DATABASE=External
+
usb:v2109p8110*
ID_MODEL_FROM_DATABASE=Hub
usb:v2113p8000*
ID_MODEL_FROM_DATABASE=DepthSense 311 (Color)
+usb:v2116*
+ ID_VENDOR_FROM_DATABASE=KT Tech
+
+usb:v2116p000A*
+ ID_MODEL_FROM_DATABASE=IDE Hard Drive Enclosure
+
+usb:v211F*
+ ID_VENDOR_FROM_DATABASE=CELOT Corporation
+
+usb:v211Fp6801*
+ ID_MODEL_FROM_DATABASE=CDMA Products
+
+usb:v2123*
+ ID_VENDOR_FROM_DATABASE=Cheeky Dream
+
+usb:v2123p1010*
+ ID_MODEL_FROM_DATABASE=Rocket Launcher
+
+usb:v2125*
+ ID_VENDOR_FROM_DATABASE=Fiberpro Inc.
+
+usb:v2125p0000*
+ ID_MODEL_FROM_DATABASE=Bootloader
+
+usb:v2125p0010*
+ ID_MODEL_FROM_DATABASE=MCB-100 Series
+
+usb:v2133*
+ ID_VENDOR_FROM_DATABASE=signotec GmbH
+
+usb:v2133p0001*
+ ID_MODEL_FROM_DATABASE=LCD Signature Pad Sigma
+
+usb:v2133p0018*
+ ID_MODEL_FROM_DATABASE=Delta Pen
+
+usb:v2133p0019*
+ ID_MODEL_FROM_DATABASE=Delta Touch
+
+usb:v2133p001C*
+ ID_MODEL_FROM_DATABASE=Kronos Pen
+
+usb:v2133p0022*
+ ID_MODEL_FROM_DATABASE=Epsilon Pen
+
usb:v2149*
ID_VENDOR_FROM_DATABASE=Advanced Silicon S.A.
usb:v2149p211B*
ID_MODEL_FROM_DATABASE=Touchscreen Controller
+usb:v2149p2306*
+ ID_MODEL_FROM_DATABASE=TS58xxA/TC56xxA [CoolTouch]
+
usb:v2149p2703*
ID_MODEL_FROM_DATABASE=TS58xxA/TC56xxA [CoolTouch]
+usb:v214B*
+ ID_VENDOR_FROM_DATABASE=Huasheng Electronics
+
+usb:v214Bp7000*
+ ID_MODEL_FROM_DATABASE=4-port hub [Maxxter ACT-HUB2-4P, HS8836, iSoul ultra-slim]
+
+usb:v214E*
+ ID_VENDOR_FROM_DATABASE=Swiftpoint
+
+usb:v214Ep0005*
+ ID_MODEL_FROM_DATABASE=Z - Gaming mouse [SM700]
+
usb:v2162*
- ID_VENDOR_FROM_DATABASE=Creative (?)
+ ID_VENDOR_FROM_DATABASE=Broadxent (Creative Labs)
usb:v2162p2031*
ID_MODEL_FROM_DATABASE=Network Blaster Wireless Adapter
usb:v2162p8001*
ID_MODEL_FROM_DATABASE=Broadxent BritePort DSL Bridge 8010U
+usb:v2166*
+ ID_VENDOR_FROM_DATABASE=JVC Kenwood
+
+usb:v2166p600B*
+ ID_MODEL_FROM_DATABASE=TH-D74
+
usb:v2184*
ID_VENDOR_FROM_DATABASE=GW Instek
usb:v2184p0011*
ID_MODEL_FROM_DATABASE=AFG Function Generator (CDC)
+usb:v2184p0017*
+ ID_MODEL_FROM_DATABASE=DSO
+
+usb:v2184p0018*
+ ID_MODEL_FROM_DATABASE=DSO
+
+usb:v2184p0036*
+ ID_MODEL_FROM_DATABASE=AFG-125 Function Generator (CDC)
+
+usb:v2188*
+ ID_VENDOR_FROM_DATABASE=No brand
+
+usb:v2188p0610*
+ ID_MODEL_FROM_DATABASE=Hub
+
+usb:v2188p0611*
+ ID_MODEL_FROM_DATABASE=Hub
+
+usb:v2188p0620*
+ ID_MODEL_FROM_DATABASE=Hub
+
+usb:v2188p0625*
+ ID_MODEL_FROM_DATABASE=Hub
+
+usb:v2188p0754*
+ ID_MODEL_FROM_DATABASE=Card Reader
+
+usb:v2188p4042*
+ ID_MODEL_FROM_DATABASE=CalDigit Pro Audio
+
+usb:v219C*
+ ID_VENDOR_FROM_DATABASE=Seal One AG
+
+usb:v219Cp0010*
+ ID_MODEL_FROM_DATABASE=USB 2200 K Secure Sign Token
+
usb:v21A1*
ID_VENDOR_FROM_DATABASE=Emotiv Systems Pty. Ltd.
usb:v21A1p0001*
ID_MODEL_FROM_DATABASE=EPOC Consumer Headset Wireless Dongle
+usb:v21A4*
+ ID_VENDOR_FROM_DATABASE=Electronic Arts Inc.
+
+usb:v21A4pAC27*
+ ID_MODEL_FROM_DATABASE=SPORTS Active 2 Wireless Controller for PS3
+
+usb:v21A4pAC40*
+ ID_MODEL_FROM_DATABASE=SPORTS Active 2 Wireless Controller for Wii
+
+usb:v21A9*
+ ID_VENDOR_FROM_DATABASE=Saleae, Inc.
+
+usb:v21A9p1001*
+ ID_MODEL_FROM_DATABASE=16-channel Logic Analyzer [Logic16]
+
+usb:v21A9p1003*
+ ID_MODEL_FROM_DATABASE=Logic 4
+
+usb:v21A9p1004*
+ ID_MODEL_FROM_DATABASE=Logic8
+
+usb:v21A9p1005*
+ ID_MODEL_FROM_DATABASE=Logic Pro 8
+
+usb:v21A9p1006*
+ ID_MODEL_FROM_DATABASE=Logic Pro 16
+
+usb:v21AB*
+ ID_VENDOR_FROM_DATABASE=Planeta Informatica
+
+usb:v21ABp0010*
+ ID_MODEL_FROM_DATABASE=RC700 NFC SmartCard Reader
+
+usb:v21ABp0011*
+ ID_MODEL_FROM_DATABASE=DSR700 SmartCard Reader
+
+usb:v21B4*
+ ID_VENDOR_FROM_DATABASE=AudioQuest
+
+usb:v21B4p0081*
+ ID_MODEL_FROM_DATABASE=DragonFly
+
+usb:v21B4p0082*
+ ID_MODEL_FROM_DATABASE=DragonFly Red
+
usb:v21D6*
ID_VENDOR_FROM_DATABASE=Agecodagis SARL
usb:v2207p330C*
ID_MODEL_FROM_DATABASE=RK3399 in Mask ROM mode
+usb:v221A*
+ ID_VENDOR_FROM_DATABASE=ZTEX GmbH
+
+usb:v221Ap0100*
+ ID_MODEL_FROM_DATABASE=FPGA Boards
+
usb:v2222*
ID_VENDOR_FROM_DATABASE=MacAlly
usb:v2222p0004*
ID_MODEL_FROM_DATABASE=iWebKey Keyboard
+usb:v2222p0005*
+ ID_MODEL_FROM_DATABASE=ICEKey Keyboard
+
+usb:v2222p1001*
+ ID_MODEL_FROM_DATABASE=Generic Hub
+
usb:v2222p2520*
ID_MODEL_FROM_DATABASE=Mini Tablet
usb:v2222p4050*
ID_MODEL_FROM_DATABASE=AirStick joystick
+usb:v2226*
+ ID_VENDOR_FROM_DATABASE=Copper Mountain technologies
+
usb:v2227*
ID_VENDOR_FROM_DATABASE=SAMWOO Enterprise
usb:v2227p3105*
ID_MODEL_FROM_DATABASE=SKYDATA SKD-U100
+usb:v222A*
+ ID_VENDOR_FROM_DATABASE=ILI Technology Corp.
+
+usb:v222Ap0001*
+ ID_MODEL_FROM_DATABASE=Multi-Touch Screen
+
+usb:v222Ap0037*
+ ID_MODEL_FROM_DATABASE=Multi-Touch Screen
+
+usb:v2230*
+ ID_VENDOR_FROM_DATABASE=Plugable
+
+usb:v2230p0001*
+ ID_MODEL_FROM_DATABASE=UD-160-A / M Integrated Hub
+
+usb:v2230p0003*
+ ID_MODEL_FROM_DATABASE=DC-125 / M Integrated Hub
+
usb:v2232*
ID_VENDOR_FROM_DATABASE=Silicon Motion
usb:v2232p1005*
ID_MODEL_FROM_DATABASE=WebCam SCB-0385N
+usb:v2232p1024*
+ ID_MODEL_FROM_DATABASE=Webcam SC-13HDL11624N [Namuga Co., Ltd.]
+
usb:v2232p1028*
ID_MODEL_FROM_DATABASE=WebCam SC-03FFL11939N
usb:v2232p1037*
ID_MODEL_FROM_DATABASE=WebCam SC-03FFM12339N
+usb:v2232p1045*
+ ID_MODEL_FROM_DATABASE=WebCam SC-10HDP12631N
+
usb:v2233*
ID_VENDOR_FROM_DATABASE=RadioShack Corporation
usb:v2237p4161*
ID_MODEL_FROM_DATABASE=eReader White
+usb:v2237p4163*
+ ID_MODEL_FROM_DATABASE=Touch
+
+usb:v2237p4173*
+ ID_MODEL_FROM_DATABASE=Glo
+
+usb:v2245*
+ ID_VENDOR_FROM_DATABASE=Aspeed Technology, Inc.
+
+usb:v2245p1500*
+ ID_MODEL_FROM_DATABASE=AST1500/1510 PC-over-LAN Virtual Hub
+
usb:v224F*
ID_VENDOR_FROM_DATABASE=APDM
usb:v224Fp0008*
ID_MODEL_FROM_DATABASE=V2 Access Point
+usb:v2256*
+ ID_VENDOR_FROM_DATABASE=Faderfox
+
+usb:v2256p1007*
+ ID_MODEL_FROM_DATABASE=LV3 MIDI Controller
+
usb:v225D*
ID_VENDOR_FROM_DATABASE=Morpho
ID_MODEL_FROM_DATABASE=CBM-E3 Fingerprint Sensor
usb:v225Dp0009*
- ID_MODEL_FROM_DATABASE=CBM Fingerprint Sensor [CBM-V3]
+ ID_MODEL_FROM_DATABASE=CBM-V3 Fingerprint Sensor
usb:v225Dp000A*
ID_MODEL_FROM_DATABASE=MSO1300-E3 Fingerprint Sensor
usb:v225Dp000B*
- ID_MODEL_FROM_DATABASE=MSO1300 Fingerprint Sensor [MSO1300-V3]
+ ID_MODEL_FROM_DATABASE=MSO1300-V3 Fingerprint Sensor
usb:v225Dp000C*
ID_MODEL_FROM_DATABASE=MSO1350-E3 Fingerprint Sensor & SmartCard Reader
usb:v225Dp000D*
- ID_MODEL_FROM_DATABASE=MSO1350 Fingerprint Sensor & SmartCard Reader [MSO1350-V3]
+ ID_MODEL_FROM_DATABASE=MSO1350-V3 Fingerprint Sensor & SmartCard Reader
usb:v225Dp000E*
ID_MODEL_FROM_DATABASE=MorphoAccess SIGMA Biometric Access Control Terminal
+usb:v225Dp9015*
+ ID_MODEL_FROM_DATABASE=Tablet 2
+
+usb:v225Dp9024*
+ ID_MODEL_FROM_DATABASE=Tablet 2
+
+usb:v225Dp9039*
+ ID_MODEL_FROM_DATABASE=Tablet 2 secure multifunction biometric tablet
+
+usb:v225Dp904D*
+ ID_MODEL_FROM_DATABASE=Tablet 2 secure multifunction biometric tablet
+
+usb:v225Dp904E*
+ ID_MODEL_FROM_DATABASE=Tablet 2 secure multifunction biometric tablet
+
+usb:v225Dp9091*
+ ID_MODEL_FROM_DATABASE=Tablet 2 secure multifunction biometric tablet
+
+usb:v225Dp9092*
+ ID_MODEL_FROM_DATABASE=Tablet 2 secure multifunction biometric tablet
+
+usb:v225DpF000*
+ ID_MODEL_FROM_DATABASE=Tablet 2 secure multifunction biometric tablet
+
+usb:v225DpF003*
+ ID_MODEL_FROM_DATABASE=Tablet 2 secure multifunction biometric tablet
+
+usb:v225DpF006*
+ ID_MODEL_FROM_DATABASE=Tablet 2 secure multifunction biometric tablet
+
+usb:v225DpF00E*
+ ID_MODEL_FROM_DATABASE=Tablet 2 secure multifunction biometric tablet
+
+usb:v226E*
+ ID_VENDOR_FROM_DATABASE=DISPLAX
+
usb:v228D*
ID_VENDOR_FROM_DATABASE=8D Technologies inc.
usb:v228Dp0001*
ID_MODEL_FROM_DATABASE=Terminal Bike Key Reader
+usb:v22A4*
+ ID_VENDOR_FROM_DATABASE=VERZO Technology
+
usb:v22A6*
ID_VENDOR_FROM_DATABASE=Pie Digital, Inc.
usb:v22A6pFFFF*
ID_MODEL_FROM_DATABASE=PieKey "beta" 4GB model 4E4F41482E4F5247 (SM3251Q BB)
+usb:v22A7*
+ ID_VENDOR_FROM_DATABASE=Fortinet Technologies
+
+usb:v22A7p1001*
+ ID_MODEL_FROM_DATABASE=FortiGate Device
+
+usb:v22B1*
+ ID_VENDOR_FROM_DATABASE=Secret Labs LLC
+
+usb:v22B1p1000*
+ ID_MODEL_FROM_DATABASE=Netduino MCU pcb
+
usb:v22B8*
ID_VENDOR_FROM_DATABASE=Motorola PCS
usb:v22B8p0005*
ID_MODEL_FROM_DATABASE=V.60c/V.60i GSM Phone
+usb:v22B8p002E*
+ ID_MODEL_FROM_DATABASE=XT1806
+
usb:v22B8p0830*
ID_MODEL_FROM_DATABASE=2386C-HT820
usb:v22B8p2D78*
ID_MODEL_FROM_DATABASE=XT300[SPICE]
+usb:v22B8p2E82*
+ ID_MODEL_FROM_DATABASE=XT1541 [Moto G 3rd Gen]
+
+usb:v22B8p2E83*
+ ID_MODEL_FROM_DATABASE=XT1033 [Moto G], PTP mode
+
usb:v22B8p3001*
ID_MODEL_FROM_DATABASE=A835/E1000 GSM Phone (P2K)
usb:v22B8p4285*
ID_MODEL_FROM_DATABASE=Droid X (Mass storage)
+usb:v22B8p42D9*
+ ID_MODEL_FROM_DATABASE=XT910 [Droid RAZR]
+
usb:v22B8p4801*
ID_MODEL_FROM_DATABASE=Neptune LTS chipset
usb:v22B8p6403*
ID_MODEL_FROM_DATABASE=Argon chipset flash
+usb:v22B8p6411*
+ ID_MODEL_FROM_DATABASE=ROKR Z6 (print mode)
+
usb:v22B8p6415*
ID_MODEL_FROM_DATABASE=ROKR Z6 (MTP mode)
+usb:v22B8p6422*
+ ID_MODEL_FROM_DATABASE=ROKR Z6 (modem mode)
+
+usb:v22B8p6426*
+ ID_MODEL_FROM_DATABASE=ROKR Z6 (storage mode)
+
usb:v22B8p6604*
ID_MODEL_FROM_DATABASE=Washington CDMA Phone
usb:v22B8p7001*
ID_MODEL_FROM_DATABASE=Q Smartphone
+usb:v22B8p7086*
+ ID_MODEL_FROM_DATABASE=Atrix
+
+usb:v22B8p70A8*
+ ID_MODEL_FROM_DATABASE=Xoom Tablet
+
usb:v22B8pFE01*
ID_MODEL_FROM_DATABASE=StarTAC III MS900
usb:v22BA*
ID_VENDOR_FROM_DATABASE=Technology Innovation Holdings, Ltd
+usb:v22BAp0108*
+ ID_MODEL_FROM_DATABASE=Double Shock Steering Wheel HID
+
+usb:v22BAp0109*
+ ID_MODEL_FROM_DATABASE=Double Shock Steering Wheel Hub
+
+usb:v22C9*
+ ID_VENDOR_FROM_DATABASE=StepOver GmbH
+
+usb:v22C9p0601*
+ ID_MODEL_FROM_DATABASE=naturaSign Pad Colour
+
+usb:v22C9p0701*
+ ID_MODEL_FROM_DATABASE=naturaSign Pad Mobile
+
+usb:v22C9p0801*
+ ID_MODEL_FROM_DATABASE=naturaSign Pad Comfort
+
+usb:v22C9p0881*
+ ID_MODEL_FROM_DATABASE=naturaSign Pad Flawless
+
+usb:v22C9p0901*
+ ID_MODEL_FROM_DATABASE=naturaSign Pad Classic
+
+usb:v22C9p09E1*
+ ID_MODEL_FROM_DATABASE=naturaSign Pad Biometric
+
+usb:v22C9p0CE1*
+ ID_MODEL_FROM_DATABASE=duraSign Pad Brilliance
+
+usb:v22C9p0CF1*
+ ID_MODEL_FROM_DATABASE=duraSign Pad Biometric 5.0
+
+usb:v22C9p0D01*
+ ID_MODEL_FROM_DATABASE=duraSign 10.0
+
+usb:v22C9p0DF1*
+ ID_MODEL_FROM_DATABASE=duraSign Pad Biometric 10.0
+
+usb:v22CD*
+ ID_VENDOR_FROM_DATABASE=Kinova Robotics Inc.
+
+usb:v22D4*
+ ID_VENDOR_FROM_DATABASE=Laview Technology
+
+usb:v22D4p1301*
+ ID_MODEL_FROM_DATABASE=Mionix NAOS 8200 [STM32F103 MCU]
+
+usb:v22D4p1308*
+ ID_MODEL_FROM_DATABASE=Mionix Avior 7000
+
+usb:v22D4p130C*
+ ID_MODEL_FROM_DATABASE=Mionix Naos 7000
+
+usb:v22D4p1316*
+ ID_MODEL_FROM_DATABASE=Mionix Castor
+
+usb:v22D9*
+ ID_VENDOR_FROM_DATABASE=OPPO Electronics Corp.
+
+usb:v22D9p2765*
+ ID_MODEL_FROM_DATABASE=Oppo N1
+
+usb:v22D9p2767*
+ ID_MODEL_FROM_DATABASE=Oppo Find 5 (X909)
+
+usb:v22DB*
+ ID_VENDOR_FROM_DATABASE=Phase One
+
+usb:v22DBp0003*
+ ID_MODEL_FROM_DATABASE=IQ3 100MP IG030372
+
+usb:v22DC*
+ ID_VENDOR_FROM_DATABASE=Mellanox Technologies
+
+usb:v22DCp0004*
+ ID_MODEL_FROM_DATABASE=BlueField SOC
+
+usb:v22DE*
+ ID_VENDOR_FROM_DATABASE=WeTelecom Incorporated
+
+usb:v22DF*
+ ID_VENDOR_FROM_DATABASE=Medicom MTD, Ltd
+
usb:v22E0*
ID_VENDOR_FROM_DATABASE=secunet Security Networks AG
usb:v22E0p0003*
ID_MODEL_FROM_DATABASE=SINA ID Token A
+usb:v22E8*
+ ID_VENDOR_FROM_DATABASE=Cambridge Audio
+
+usb:v22E8p6512*
+ ID_MODEL_FROM_DATABASE=651N Audio
+
+usb:v22E8p6969*
+ ID_MODEL_FROM_DATABASE=Audio Prototype
+
+usb:v22E8p7512*
+ ID_MODEL_FROM_DATABASE=751R Audio
+
+usb:v22E8p770A*
+ ID_MODEL_FROM_DATABASE=X70A Audio
+
+usb:v22E8p850C*
+ ID_MODEL_FROM_DATABASE=851C Audio [Azur 850C]
+
+usb:v22E8p851D*
+ ID_MODEL_FROM_DATABASE=851D Audio [Azur 851D]
+
+usb:v22E8pCA02*
+ ID_MODEL_FROM_DATABASE=Audio
+
+usb:v22E8pCA04*
+ ID_MODEL_FROM_DATABASE=Audio
+
+usb:v22E8pCA06*
+ ID_MODEL_FROM_DATABASE=AmpMagic
+
+usb:v22E8pDAC2*
+ ID_MODEL_FROM_DATABASE=DacMagic Plus
+
+usb:v22E8pDAC3*
+ ID_MODEL_FROM_DATABASE=Azur DacMagic 100
+
+usb:v22E8pDAC4*
+ ID_MODEL_FROM_DATABASE=Azur DacMagic 100
+
+usb:v22E8pDAC6*
+ ID_MODEL_FROM_DATABASE=DacMagicXS 2.0
+
+usb:v22E8pDAC8*
+ ID_MODEL_FROM_DATABASE=Audio
+
usb:v2304*
ID_VENDOR_FROM_DATABASE=Pinnacle Systems, Inc.
usb:v2304p061E*
ID_MODEL_FROM_DATABASE=PCTV Deluxe (PAL) Device
+usb:v2304p2304*
+ ID_MODEL_FROM_DATABASE=1689
+
+usb:v230D*
+ ID_VENDOR_FROM_DATABASE=Teracom
+
+usb:v230Dp0103*
+ ID_MODEL_FROM_DATABASE=Huwaii 3g wireless modem
+
+usb:v2314*
+ ID_VENDOR_FROM_DATABASE=INQ Mobile
+
usb:v2318*
ID_VENDOR_FROM_DATABASE=Shining Technologies, Inc. [hex]
usb:v2318p0011*
ID_MODEL_FROM_DATABASE=CitiDISK Jr. IDE Enclosure
+usb:v2319*
+ ID_VENDOR_FROM_DATABASE=Tronsmart
+
+usb:v2319p0014*
+ ID_MODEL_FROM_DATABASE=TSM01 Air Mouse + Keyboard
+
+usb:v232B*
+ ID_VENDOR_FROM_DATABASE=Pantum Ltd.
+
+usb:v232Bp0810*
+ ID_MODEL_FROM_DATABASE=P2000
+
+usb:v232E*
+ ID_VENDOR_FROM_DATABASE=EA Elektro-Automatik GmbH & Co. KG
+
+usb:v232Ep0010*
+ ID_MODEL_FROM_DATABASE=EA-PS-2000 B Series Power Supply
+
+usb:v2340*
+ ID_VENDOR_FROM_DATABASE=Teleepoch
+
usb:v2341*
ID_VENDOR_FROM_DATABASE=Arduino SA
usb:v2341p0010*
ID_MODEL_FROM_DATABASE=Mega 2560 (CDC ACM)
+usb:v2341p0036*
+ ID_MODEL_FROM_DATABASE=Leonardo Bootloader
+
usb:v2341p003B*
ID_MODEL_FROM_DATABASE=Serial Adapter (CDC ACM)
+usb:v2341p003D*
+ ID_MODEL_FROM_DATABASE=Due Programming Port
+
+usb:v2341p003E*
+ ID_MODEL_FROM_DATABASE=Due
+
usb:v2341p003F*
ID_MODEL_FROM_DATABASE=Mega ADK (CDC ACM)
usb:v2341p0045*
ID_MODEL_FROM_DATABASE=Serial R3 (CDC ACM)
+usb:v2341p0049*
+ ID_MODEL_FROM_DATABASE=ISP
+
usb:v2341p8036*
ID_MODEL_FROM_DATABASE=Leonardo (CDC ACM, HID)
+usb:v2341p8038*
+ ID_MODEL_FROM_DATABASE=Robot Control Board (CDC ACM, HID)
+
+usb:v2341p8039*
+ ID_MODEL_FROM_DATABASE=Robot Motor Board (CDC ACM, HID)
+
+usb:v2349*
+ ID_VENDOR_FROM_DATABASE=P2 Engineering Group, LLC
+
+usb:v234B*
+ ID_VENDOR_FROM_DATABASE=Free Software Initiative of Japan
+
+usb:v234Bp0000*
+ ID_MODEL_FROM_DATABASE=Gnuk Token
+
+usb:v234Bp0001*
+ ID_MODEL_FROM_DATABASE=NeuG True RNG
+
usb:v2357*
ID_VENDOR_FROM_DATABASE=TP-Link
+usb:v2357p0005*
+ ID_MODEL_FROM_DATABASE=M7350 4G Mi-Fi Router
+
usb:v2357p0100*
ID_MODEL_FROM_DATABASE=TL-WN8200ND [Realtek RTL8192CU]
ID_MODEL_FROM_DATABASE=Archer T9UH v1 [Realtek RTL8814AU]
usb:v2357p0107*
- ID_MODEL_FROM_DATABASE=TL-WN821N Version 5 RTL8192EU
+ ID_MODEL_FROM_DATABASE=TL-WN821N v5/v6 [RTL8192EU]
usb:v2357p0108*
ID_MODEL_FROM_DATABASE=TL-WN822N Version 4 RTL8192EU
usb:v2357p0109*
- ID_MODEL_FROM_DATABASE=TL WN823N RTL8192EU
+ ID_MODEL_FROM_DATABASE=TL-WN823N v2/v3 [Realtek RTL8192EU]
+
+usb:v2357p010B*
+ ID_MODEL_FROM_DATABASE=Archer T2UHP [MediaTek MT7610U]
usb:v2357p010C*
- ID_MODEL_FROM_DATABASE=TL-WN722N v2
+ ID_MODEL_FROM_DATABASE=TL-WN722N v2/v3 [Realtek RTL8188EUS]
+
+usb:v2357p010D*
+ ID_MODEL_FROM_DATABASE=Archer T4U v2 [Realtek RTL8812AU]
usb:v2357p010E*
- ID_MODEL_FROM_DATABASE=TL-WN722N v2
+ ID_MODEL_FROM_DATABASE=Archer T4UH v2 [Realtek RTL8812AU]
+
+usb:v2357p010F*
+ ID_MODEL_FROM_DATABASE=Archer T4UHP [Realtek RTL8812AU]
+
+usb:v2357p0115*
+ ID_MODEL_FROM_DATABASE=Archer T4U ver.3
+
+usb:v2357p011E*
+ ID_MODEL_FROM_DATABASE=AC600 wireless Realtek RTL8811AU [Archer T2U Nano]
+
+usb:v2357p0120*
+ ID_MODEL_FROM_DATABASE=Archer T2U PLUS [RTL8821AU]
+
+usb:v2357p012D*
+ ID_MODEL_FROM_DATABASE=Archer T3U [Realtek RTL8812BU]
usb:v2357p0200*
ID_MODEL_FROM_DATABASE=MA 180 Zero CD
usb:v2357p0201*
ID_MODEL_FROM_DATABASE=HSUPA Modem MA180
+usb:v2357p0600*
+ ID_MODEL_FROM_DATABASE=UE300 10/100/1000 LAN (mass storage CD-ROM mode) [Realtek RTL8153]
+
+usb:v2357p0601*
+ ID_MODEL_FROM_DATABASE=UE300 10/100/1000 LAN (ethernet mode) [Realtek RTL8153]
+
+usb:v2366*
+ ID_VENDOR_FROM_DATABASE=Bitmanufaktur GmbH
+
+usb:v2366p0001*
+ ID_MODEL_FROM_DATABASE=Reserved Prototyping PID
+
+usb:v2366p0002*
+ ID_MODEL_FROM_DATABASE=OpenBeacon USB 2
+
+usb:v2366p0003*
+ ID_MODEL_FROM_DATABASE=OpenPCD 2 RFID Reader for 13.56MHz
+
+usb:v2366p0004*
+ ID_MODEL_FROM_DATABASE=OpenBeacon
+
+usb:v2366p0005*
+ ID_MODEL_FROM_DATABASE=Blinkenlights WDIM
+
+usb:v2366p0006*
+ ID_MODEL_FROM_DATABASE=Blinkenlights WMCU
+
+usb:v2366p0007*
+ ID_MODEL_FROM_DATABASE=OpenBeacon Ethernet EasyReader PoE II - Active 2.4GHz RFID Reader
+
+usb:v2366p0008*
+ ID_MODEL_FROM_DATABASE=OpenBeacon WLAN
+
+usb:v2366p0009*
+ ID_MODEL_FROM_DATABASE=OpenPCD 2 RFID Reader for 13.56MHz
+
+usb:v2366p000A*
+ ID_MODEL_FROM_DATABASE=OpenPCD 2 Audio & LCD Display
+
+usb:v2367*
+ ID_VENDOR_FROM_DATABASE=Teenage Engineering
+
+usb:v2367p0002*
+ ID_MODEL_FROM_DATABASE=OP-1 Portable synthesizer
+
+usb:v2367p000C*
+ ID_MODEL_FROM_DATABASE=OP-Z Portable synthesizer
+
+usb:v2368*
+ ID_VENDOR_FROM_DATABASE=Peterson Electro-Musical Products Inc.
+
+usb:v2368p0001*
+ ID_MODEL_FROM_DATABASE=BBS-1 [BodyBeat Sync]
+
+usb:v236A*
+ ID_VENDOR_FROM_DATABASE=SiBEAM
+
+usb:v236Ap1965*
+ ID_MODEL_FROM_DATABASE=SB6501 802.11ad Wireless Network Adapter
+
usb:v2373*
ID_VENDOR_FROM_DATABASE=Pumatronix Ltda
usb:v2375p0001*
ID_MODEL_FROM_DATABASE=Digital Audio Player
+usb:v2378*
+ ID_VENDOR_FROM_DATABASE=OnLive
+
+usb:v2378p100A*
+ ID_MODEL_FROM_DATABASE=Universal Wireless Controller
+
+usb:v237D*
+ ID_VENDOR_FROM_DATABASE=Cradlepoint
+
+usb:v237Dp0400*
+ ID_MODEL_FROM_DATABASE=MC400
+
+usb:v2386*
+ ID_VENDOR_FROM_DATABASE=Raydium Corporation
+
+usb:v2386p3125*
+ ID_MODEL_FROM_DATABASE=Touch System
+
+usb:v2386p4328*
+ ID_MODEL_FROM_DATABASE=Touch System
+
+usb:v2386p432F*
+ ID_MODEL_FROM_DATABASE=Touch System
+
+usb:v238B*
+ ID_VENDOR_FROM_DATABASE=Hytera Communications
+
+usb:v238Bp0A11*
+ ID_MODEL_FROM_DATABASE=DMR Radio
+
+usb:v239A*
+ ID_VENDOR_FROM_DATABASE=Adafruit
+
+usb:v239Ap0001*
+ ID_MODEL_FROM_DATABASE=CDC Bootloader
+
+usb:v239Ap801E*
+ ID_MODEL_FROM_DATABASE=Trinket M0
+
+usb:v23A0*
+ ID_VENDOR_FROM_DATABASE=BIFIT
+
+usb:v23A0p0001*
+ ID_MODEL_FROM_DATABASE=Token iBank2key
+
+usb:v23A0p0002*
+ ID_MODEL_FROM_DATABASE=iBank2Key Type M Token
+
+usb:v23A0p0003*
+ ID_MODEL_FROM_DATABASE=iToken
+
+usb:v23A0p0008*
+ ID_MODEL_FROM_DATABASE=MS_KEY K - Angara
+
+usb:v23A6*
+ ID_VENDOR_FROM_DATABASE=Tronical Components GmbH
+
+usb:v23A6p2000*
+ ID_MODEL_FROM_DATABASE=Gibson Firebird X Pedal Board
+
+usb:v23A6p2001*
+ ID_MODEL_FROM_DATABASE=Gibson Firebird X Switch Board
+
+usb:v23B4*
+ ID_VENDOR_FROM_DATABASE=Dental Wings Inc.
+
+usb:v23B4p0200*
+ ID_MODEL_FROM_DATABASE=DW0200 Color Camera
+
+usb:v23B4p0300*
+ ID_MODEL_FROM_DATABASE=DW0300 Hight Speed Monochrome Camera
+
+usb:v23C7*
+ ID_VENDOR_FROM_DATABASE=Gemini
+
+usb:v23C7p1021*
+ ID_MODEL_FROM_DATABASE=FirstMix
+
+usb:v23FC*
+ ID_VENDOR_FROM_DATABASE=SesKion GmbH
+
+usb:v23FCp0201*
+ ID_MODEL_FROM_DATABASE=SPI-Simulyzer box for SPI data communication
+
+usb:v23FCp0202*
+ ID_MODEL_FROM_DATABASE=PSI5-Simulyzer box for PSI5 (Peripheral-Sensor-Interfacs) data communication
+
+usb:v23FCp0203*
+ ID_MODEL_FROM_DATABASE=SENT-Simulyzer box for SENT data communication
+
+usb:v23FCp0204*
+ ID_MODEL_FROM_DATABASE=DSI-Simulyzer box for DSI3 data communication
+
+usb:v2405*
+ ID_VENDOR_FROM_DATABASE=Custom Computer Services, Inc
+
+usb:v2405p0002*
+ ID_MODEL_FROM_DATABASE=West Mountain Radio RIGblaster Advantage Audio
+
+usb:v2405p0003*
+ ID_MODEL_FROM_DATABASE=West Mountain Radio RIGblaster Advantage
+
usb:v2406*
ID_VENDOR_FROM_DATABASE=SANHO Digital Electronics Co., Ltd.
usb:v2406p6688*
ID_MODEL_FROM_DATABASE=PD7X Portable Storage
+usb:v2420*
+ ID_VENDOR_FROM_DATABASE=IRiver
+
+usb:v242E*
+ ID_VENDOR_FROM_DATABASE=Vossloh-Schwabe Deutschland GmbH
+
+usb:v242Ep0001*
+ ID_MODEL_FROM_DATABASE=DALI Master
+
+usb:v242Ep0002*
+ ID_MODEL_FROM_DATABASE=LiCS Bootloader Mode
+
+usb:v242Ep0003*
+ ID_MODEL_FROM_DATABASE=LiCS Running Mode
+
+usb:v242Ep0004*
+ ID_MODEL_FROM_DATABASE=iProgrammer
+
+usb:v242Ep0005*
+ ID_MODEL_FROM_DATABASE=NFC programming device
+
+usb:v2433*
+ ID_VENDOR_FROM_DATABASE=ASETEK
+
+usb:v2433pB200*
+ ID_MODEL_FROM_DATABASE=[NZXT Kraken X60]
+
usb:v2443*
ID_VENDOR_FROM_DATABASE=Aessent Technology Ltd
usb:v2443p00DC*
ID_MODEL_FROM_DATABASE=aes220 FPGA Mini-Module
+usb:v2457*
+ ID_VENDOR_FROM_DATABASE=Ocean Optics Inc.
+
+usb:v2457p100A*
+ ID_MODEL_FROM_DATABASE=HR2000 Spectrometer 1.00.0
+
+usb:v2457p1012*
+ ID_MODEL_FROM_DATABASE=HR4000 Spectrometer
+
+usb:v2458*
+ ID_VENDOR_FROM_DATABASE=Bluegiga Technologies
+
+usb:v2458p0001*
+ ID_MODEL_FROM_DATABASE=BLED112 Bluetooth 4.0 Single Mode Dongle
+
+usb:v245F*
+ ID_VENDOR_FROM_DATABASE=Chord Electronics Limited
+
+usb:v2464*
+ ID_VENDOR_FROM_DATABASE=Nest
+
+usb:v2464p0001*
+ ID_MODEL_FROM_DATABASE=Learning Thermostat
+
+usb:v2464p0002*
+ ID_MODEL_FROM_DATABASE=Learning Thermostat (2nd Generation)
+
+usb:v2464p0010*
+ ID_MODEL_FROM_DATABASE=Protect : Smoke + Carbon Monoxide
+
+usb:v2464p0020*
+ ID_MODEL_FROM_DATABASE=Heat Link
+
+usb:v2466*
+ ID_VENDOR_FROM_DATABASE=Fractal Audio Systems
+
+usb:v2466p8003*
+ ID_MODEL_FROM_DATABASE=Axe-Fx II
+
+usb:v2466p8010*
+ ID_MODEL_FROM_DATABASE=Axe-FX III
+
+usb:v2476*
+ ID_VENDOR_FROM_DATABASE=YEI Technology
+
+usb:v2476p1040*
+ ID_MODEL_FROM_DATABASE=3-Space Embedded Sensor
+
usb:v2478*
ID_VENDOR_FROM_DATABASE=Tripp-Lite
usb:v248Ap8366*
ID_MODEL_FROM_DATABASE=Wireless Optical Mouse ACT-MUSW-002
+usb:v248Ap8367*
+ ID_MODEL_FROM_DATABASE=Telink Wireless Receiver
+
usb:v249C*
ID_VENDOR_FROM_DATABASE=M2Tech s.r.l.
+usb:v24A4*
+ ID_VENDOR_FROM_DATABASE=Primare AB
+
+usb:v24A4p0002*
+ ID_MODEL_FROM_DATABASE=I15_v1.06 [Primare Audio DAC]
+
+usb:v24AE*
+ ID_VENDOR_FROM_DATABASE=Shenzhen Rapoo Technology Co., Ltd.
+
+usb:v24AEp0001*
+ ID_MODEL_FROM_DATABASE=KX Keyboard
+
+usb:v24AEp0197*
+ ID_MODEL_FROM_DATABASE=meva Barcode Scanner
+
+usb:v24AEp1813*
+ ID_MODEL_FROM_DATABASE=E9260 Wireless Multi-mode Keyboard
+
+usb:v24AEp2000*
+ ID_MODEL_FROM_DATABASE=2.4G Wireless Device Serial
+
+usb:v24AEp2001*
+ ID_MODEL_FROM_DATABASE=5 GHz Wireless Receiver
+
+usb:v24AEp2003*
+ ID_MODEL_FROM_DATABASE=5GHz Wireless Transceiver
+
+usb:v24AEp4110*
+ ID_MODEL_FROM_DATABASE=Optical Gaming Mouse [V280]
+
+usb:v24AEp6000*
+ ID_MODEL_FROM_DATABASE=Wireless Audio
+
+usb:v24C0*
+ ID_VENDOR_FROM_DATABASE=Chaney Instrument
+
+usb:v24C0p0003*
+ ID_MODEL_FROM_DATABASE=Model 01036 weather center
+
+usb:v24C6*
+ ID_VENDOR_FROM_DATABASE=ThrustMaster, Inc.
+
+usb:v24C6p5000*
+ ID_MODEL_FROM_DATABASE=Razer Atrox Gaming Arcade Stick
+
+usb:v24C6p5300*
+ ID_MODEL_FROM_DATABASE=PowerA Mini ProEX Controller for Xbox 360
+
+usb:v24C6p5303*
+ ID_MODEL_FROM_DATABASE=Airflo Wired Controller for Xbox 360
+
+usb:v24C6p530A*
+ ID_MODEL_FROM_DATABASE=ProEX Controller for Xbox 360
+
+usb:v24C6p531A*
+ ID_MODEL_FROM_DATABASE=Pro Ex mini for XBOX
+
+usb:v24C6p5397*
+ ID_MODEL_FROM_DATABASE=FUS1ON Tournament Controller
+
+usb:v24C6p541A*
+ ID_MODEL_FROM_DATABASE=PowerA CPFA115320-01 [Mini Controller for Xbox One]
+
+usb:v24C6p542A*
+ ID_MODEL_FROM_DATABASE=Spectra for Xbox One
+
+usb:v24C6p543A*
+ ID_MODEL_FROM_DATABASE=PowerA Wired Controller for Xbox One
+
+usb:v24C6p5500*
+ ID_MODEL_FROM_DATABASE=Horipad EX2 Turbo
+
+usb:v24C6p5501*
+ ID_MODEL_FROM_DATABASE=Hori Real Arcade Pro.VX-SA for Xbox 360
+
+usb:v24C6p5502*
+ ID_MODEL_FROM_DATABASE=Hori Fighting Stick VX Alt for Xbox 360
+
+usb:v24C6p5503*
+ ID_MODEL_FROM_DATABASE=Hori Fighting Edge for Xbox 360
+
+usb:v24C6p5506*
+ ID_MODEL_FROM_DATABASE=Hori Soulcalibur V Stick for Xbox 360
+
+usb:v24C6p550D*
+ ID_MODEL_FROM_DATABASE=Hori Gem Controller for Xbox 360
+
+usb:v24C6p550E*
+ ID_MODEL_FROM_DATABASE=Real Arcade Pro V Kai for Xbox One / Xbox 360
+
+usb:v24C6p551A*
+ ID_MODEL_FROM_DATABASE=Fusion Pro Controller
+
+usb:v24C6p561A*
+ ID_MODEL_FROM_DATABASE=Fusion Controller for Xbox One
+
+usb:v24C6p5B00*
+ ID_MODEL_FROM_DATABASE=Ferrari 458 Italia Racing Wheel
+
+usb:v24C6p5B02*
+ ID_MODEL_FROM_DATABASE=GPX Controller
+
+usb:v24C6p5D04*
+ ID_MODEL_FROM_DATABASE=Sabertooth Elite
+
+usb:v24C6pFA00*
+ ID_MODEL_FROM_DATABASE=INF-8032385 Disney Infinity Reader
+
+usb:v24C6pFAFB*
+ ID_MODEL_FROM_DATABASE=Aplay Controller
+
+usb:v24C6pFAFD*
+ ID_MODEL_FROM_DATABASE=Afterglow Gamepad for Xbox 360
+
+usb:v24C6pFAFE*
+ ID_MODEL_FROM_DATABASE=Rock Candy Gamepad for Xbox 360
+
+usb:v24CF*
+ ID_VENDOR_FROM_DATABASE=Lytro, Inc.
+
+usb:v24CFp00A1*
+ ID_MODEL_FROM_DATABASE=Light Field Camera
+
+usb:v24DC*
+ ID_VENDOR_FROM_DATABASE=Aladdin R.D.
+
+usb:v24DCp0406*
+ ID_MODEL_FROM_DATABASE=JaCarta SF GOST
+
+usb:v24E0*
+ ID_VENDOR_FROM_DATABASE=Yoctopuce Sarl
+
usb:v24E1*
ID_VENDOR_FROM_DATABASE=Paratronic
usb:v24E1p3005*
ID_MODEL_FROM_DATABASE=Radius
+usb:v24E3*
+ ID_VENDOR_FROM_DATABASE=K-Touch
+
+usb:v24EA*
+ ID_VENDOR_FROM_DATABASE=Meva
+
+usb:v24EAp0197*
+ ID_MODEL_FROM_DATABASE=Barcode Scanner
+
+usb:v24ED*
+ ID_VENDOR_FROM_DATABASE=Zen Group
+
+usb:v24EDp044D*
+ ID_MODEL_FROM_DATABASE=Chat Headset
+
+usb:v24F0*
+ ID_VENDOR_FROM_DATABASE=Metadot
+
+usb:v24F0p0105*
+ ID_MODEL_FROM_DATABASE=Das Keyboard 4
+
+usb:v24F0p0140*
+ ID_MODEL_FROM_DATABASE=Das Keyboard 4
+
+usb:v24F0p2020*
+ ID_MODEL_FROM_DATABASE=Das Keyboard 5Q
+
+usb:v24FF*
+ ID_VENDOR_FROM_DATABASE=Acroname Inc.
+
+usb:v2500*
+ ID_VENDOR_FROM_DATABASE=Ettus Research LLC
+
+usb:v2500p0020*
+ ID_MODEL_FROM_DATABASE=USRP B210
+
+usb:v2500p0021*
+ ID_MODEL_FROM_DATABASE=USRP B200-mini
+
+usb:v2500p0022*
+ ID_MODEL_FROM_DATABASE=USRP B205-mini
+
+usb:v2500p0200*
+ ID_MODEL_FROM_DATABASE=USRP B200
+
usb:v2516*
ID_VENDOR_FROM_DATABASE=Cooler Master Co., Ltd.
ID_MODEL_FROM_DATABASE=Storm Quick Fire PRO
usb:v2516p0011*
- ID_MODEL_FROM_DATABASE=Storm Quick Fire TK
+ ID_MODEL_FROM_DATABASE=Storm Quick Fire TK 6keys
+
+usb:v2516p0014*
+ ID_MODEL_FROM_DATABASE=Storm Quick Fire TK Nkeys
+
+usb:v2516p0015*
+ ID_MODEL_FROM_DATABASE=Storm QuickFire Pro/Ultimate keyboard
usb:v2516p0017*
ID_MODEL_FROM_DATABASE=CM Storm Quick Fire Stealth
+usb:v2516p001A*
+ ID_MODEL_FROM_DATABASE=Storm Quick Fire XT
+
usb:v2516p0020*
ID_MODEL_FROM_DATABASE=QuickFire Rapid-i Keyboard
usb:v2516p002D*
ID_MODEL_FROM_DATABASE=Alcor mouse
+usb:v2516p0042*
+ ID_MODEL_FROM_DATABASE=Masterkeys Lite L Combo RGB Keyboard
+
+usb:v2516p0044*
+ ID_MODEL_FROM_DATABASE=Masterkeys Lite L Combo RGB Mouse
+
+usb:v2516p0046*
+ ID_MODEL_FROM_DATABASE=Masterkeys PRO L
+
usb:v2516p0047*
ID_MODEL_FROM_DATABASE=MasterKeys Pro L
+usb:v2516p0055*
+ ID_MODEL_FROM_DATABASE=MasterKeys L
+
+usb:v2516p1006*
+ ID_MODEL_FROM_DATABASE=MasterCase SL600M
+
usb:v2516p9494*
ID_MODEL_FROM_DATABASE=Sirus Headset
+usb:v2520*
+ ID_VENDOR_FROM_DATABASE=ANA-U GmbH
+
+usb:v2520p0001*
+ ID_MODEL_FROM_DATABASE=EasyPrinter S3
+
+usb:v2527*
+ ID_VENDOR_FROM_DATABASE=Software Bisque
+
+usb:v2527p1388*
+ ID_MODEL_FROM_DATABASE=Paramount 5
+
+usb:v2537*
+ ID_VENDOR_FROM_DATABASE=Norelsys
+
+usb:v2537p1066*
+ ID_MODEL_FROM_DATABASE=NS1066
+
+usb:v2537p1068*
+ ID_MODEL_FROM_DATABASE=NS1068/NS1068X SATA Bridge Controller
+
+usb:v2544*
+ ID_VENDOR_FROM_DATABASE=Energy Micro AS
+
+usb:v2546*
+ ID_VENDOR_FROM_DATABASE=Ravensburger
+
+usb:v2546pE301*
+ ID_MODEL_FROM_DATABASE=TipToi Pen
+
usb:v2548*
ID_VENDOR_FROM_DATABASE=Pulse-Eight
usb:v2548p1002*
ID_MODEL_FROM_DATABASE=CEC Adapter
+usb:v254E*
+ ID_VENDOR_FROM_DATABASE=SHF Communication Technologies AG
+
+usb:v254EpE2B3*
+ ID_MODEL_FROM_DATABASE=SHF 58035 A BiasBoard
+
+usb:v2554*
+ ID_VENDOR_FROM_DATABASE=ASSA ABLOY AB
+
+usb:v2555*
+ ID_VENDOR_FROM_DATABASE=Basis Science Inc.
+
+usb:v2555p0001*
+ ID_MODEL_FROM_DATABASE=B1 Fitness Band
+
+usb:v255E*
+ ID_VENDOR_FROM_DATABASE=Beijing Bonxeon Technology Co., Ltd.
+
+usb:v255Ep0001*
+ ID_MODEL_FROM_DATABASE=Device
+
+usb:v255Ep0002*
+ ID_MODEL_FROM_DATABASE=Dual
+
+usb:v2560*
+ ID_VENDOR_FROM_DATABASE=e-con Systems
+
+usb:v2560pC152*
+ ID_MODEL_FROM_DATABASE=See3CAM_CU51 5 Mpx monochrome camera
+
+usb:v2563*
+ ID_VENDOR_FROM_DATABASE=ShenZhen ShanWan Technology Co., Ltd.
+
+usb:v2563p031D*
+ ID_MODEL_FROM_DATABASE=DXT Mouse
+
+usb:v2563p0523*
+ ID_MODEL_FROM_DATABASE=BM0523 WirelessGamepad
+
+usb:v2563p0575*
+ ID_MODEL_FROM_DATABASE=ZD-V+ Wired Gaming Controller
+
+usb:v256B*
+ ID_VENDOR_FROM_DATABASE=Perreaux Industries Ltd
+
+usb:v256Bp0121*
+ ID_MODEL_FROM_DATABASE=Audiant 80i
+
+usb:v256F*
+ ID_VENDOR_FROM_DATABASE=3Dconnexion
+
+usb:v256FpC62E*
+ ID_MODEL_FROM_DATABASE=SpaceMouse Wireless (cabled)
+
+usb:v256FpC62F*
+ ID_MODEL_FROM_DATABASE=SpaceMouse Wireless Receiver
+
+usb:v256FpC631*
+ ID_MODEL_FROM_DATABASE=SpaceMouse Pro Wireless (cabled)
+
+usb:v256FpC632*
+ ID_MODEL_FROM_DATABASE=SpaceMouse Pro Wireless Receiver
+
+usb:v256FpC633*
+ ID_MODEL_FROM_DATABASE=SpaceMouse Enterprise
+
+usb:v256FpC635*
+ ID_MODEL_FROM_DATABASE=SpaceMouse Compact
+
+usb:v256FpC651*
+ ID_MODEL_FROM_DATABASE=CadMouse Wireless
+
+usb:v256FpC652*
+ ID_MODEL_FROM_DATABASE=Universal Receiver
+
+usb:v256FpC654*
+ ID_MODEL_FROM_DATABASE=CadMouse Pro Wireless
+
+usb:v256FpC657*
+ ID_MODEL_FROM_DATABASE=CadMouse Pro Wireless Left
+
+usb:v2573*
+ ID_VENDOR_FROM_DATABASE=ESI Audiotechnik GmbH
+
+usb:v2573p0017*
+ ID_MODEL_FROM_DATABASE=MAYA22
+
+usb:v2574*
+ ID_VENDOR_FROM_DATABASE=AVer Information, Inc.
+
+usb:v2574p0901*
+ ID_MODEL_FROM_DATABASE=VC520
+
+usb:v2574p0910*
+ ID_MODEL_FROM_DATABASE=CAM520
+
+usb:v2574p0920*
+ ID_MODEL_FROM_DATABASE=VC320
+
+usb:v2574p0930*
+ ID_MODEL_FROM_DATABASE=CAM530
+
+usb:v2574p0940*
+ ID_MODEL_FROM_DATABASE=CAM340
+
+usb:v2574p0950*
+ ID_MODEL_FROM_DATABASE=VC322
+
+usb:v2574p0960*
+ ID_MODEL_FROM_DATABASE=VB342
+
+usb:v2575*
+ ID_VENDOR_FROM_DATABASE=Weida Hi-Tech Co., Ltd.
+
+usb:v2576*
+ ID_VENDOR_FROM_DATABASE=AFO Co., Ltd.
+
+usb:v2576p0003*
+ ID_MODEL_FROM_DATABASE=TCM
+
+usb:v2576p0005*
+ ID_MODEL_FROM_DATABASE=BL [Boot Loader]
+
+usb:v2576p0011*
+ ID_MODEL_FROM_DATABASE=THM
+
+usb:v2578*
+ ID_VENDOR_FROM_DATABASE=Pluscom
+
+usb:v2578p4168*
+ ID_MODEL_FROM_DATABASE=2.4GHZ Wireless Arc Folding Mouse
+
+usb:v2581*
+ ID_VENDOR_FROM_DATABASE=Plug-up
+
+usb:v2581p1807*
+ ID_MODEL_FROM_DATABASE=Generic HID Smartcard
+
+usb:v2581p1808*
+ ID_MODEL_FROM_DATABASE=WinUSB Smartcard
+
+usb:v2581pF1D0*
+ ID_MODEL_FROM_DATABASE=FIDO U2F Security Key
+
+usb:v258D*
+ ID_VENDOR_FROM_DATABASE=Sequans Communications
+
+usb:v259A*
+ ID_VENDOR_FROM_DATABASE=TriQuint Semiconductor
+
+usb:v25A7*
+ ID_VENDOR_FROM_DATABASE=Areson Technology Corp
+
+usb:v25A7p2410*
+ ID_MODEL_FROM_DATABASE=Laser mouse
+
+usb:v25A7pFA23*
+ ID_MODEL_FROM_DATABASE=2.4G Receiver
+
+usb:v25A7pFA61*
+ ID_MODEL_FROM_DATABASE=Elecom Co., Ltd MR-K013 Multicard Reader
+
usb:v25B5*
ID_VENDOR_FROM_DATABASE=FlatFrog
usb:v25B5p0002*
ID_MODEL_FROM_DATABASE=Multitouch 3200
+usb:v25BB*
+ ID_VENDOR_FROM_DATABASE=Brunner Elektronik AG
+
+usb:v25BBp0063*
+ ID_MODEL_FROM_DATABASE=PRT.5105 [Yoke]
+
+usb:v25BBp0064*
+ ID_MODEL_FROM_DATABASE=PRT.5105 [reserved]
+
+usb:v25BBp0065*
+ ID_MODEL_FROM_DATABASE=PRT.5096 [Battery Management System]
+
+usb:v25BBp0066*
+ ID_MODEL_FROM_DATABASE=PRT.5096 [Battery Management System]
+
+usb:v25BBp0067*
+ ID_MODEL_FROM_DATABASE=PRT.5094
+
+usb:v25BBp0068*
+ ID_MODEL_FROM_DATABASE=PRT.5094
+
+usb:v25BBp0069*
+ ID_MODEL_FROM_DATABASE=PRT.5119 [Ethernet2CAN LC Gateway]
+
+usb:v25BBp006A*
+ ID_MODEL_FROM_DATABASE=PRT.5113 [CLS CANaerospace Gateway]
+
+usb:v25BBp006B*
+ ID_MODEL_FROM_DATABASE=PRT.5123
+
+usb:v25BBp006C*
+ ID_MODEL_FROM_DATABASE=PRT.5123 [reserved]
+
+usb:v25BBp006D*
+ ID_MODEL_FROM_DATABASE=PRT.5127
+
+usb:v25BBp00FF*
+ ID_MODEL_FROM_DATABASE=MSP430 HID Update Agent
+
+usb:v25BF*
+ ID_VENDOR_FROM_DATABASE=Elegant Invention
+
+usb:v25BFp0001*
+ ID_MODEL_FROM_DATABASE=Isostick
+
+usb:v25BFp0002*
+ ID_MODEL_FROM_DATABASE=Isostick updater
+
+usb:v25C4*
+ ID_VENDOR_FROM_DATABASE=ARCAM
+
+usb:v25C6*
+ ID_VENDOR_FROM_DATABASE=Vitus Audio (AVA Group A/S)
+
+usb:v25C8*
+ ID_VENDOR_FROM_DATABASE=Visual Planet Ltd
+
+usb:v25C8p0014*
+ ID_MODEL_FROM_DATABASE=Single User touchfoil(tm) (SU2-80)
+
+usb:v25DA*
+ ID_VENDOR_FROM_DATABASE=Netatmo
+
+usb:v25DAp0001*
+ ID_MODEL_FROM_DATABASE=Weather Station
+
+usb:v25E3*
+ ID_VENDOR_FROM_DATABASE=Lumigon
+
+usb:v25F0*
+ ID_VENDOR_FROM_DATABASE=ShanWan
+
+usb:v25F0pC131*
+ ID_MODEL_FROM_DATABASE=Gioteck PS3 2.4G Wireless Controller
+
+usb:v25FB*
+ ID_VENDOR_FROM_DATABASE=Pentax Ricoh Imaging Co., Ltd
+
+usb:v25FBp0102*
+ ID_MODEL_FROM_DATABASE=K-5
+
+usb:v2604*
+ ID_VENDOR_FROM_DATABASE=Tenda
+
+usb:v2604p0012*
+ ID_MODEL_FROM_DATABASE=U12
+
+usb:v2625*
+ ID_VENDOR_FROM_DATABASE=MilDef AB
+
+usb:v2626*
+ ID_VENDOR_FROM_DATABASE=Aruba Networks
+
+usb:v2626pEA60*
+ ID_MODEL_FROM_DATABASE=UART Bridge Controller [cp210x]
+
+usb:v262A*
+ ID_VENDOR_FROM_DATABASE=SAVITECH Corp.
+
+usb:v262Ap100E*
+ ID_MODEL_FROM_DATABASE=SA9027 Audio Streaming Controller
+
+usb:v262Ap10E0*
+ ID_MODEL_FROM_DATABASE=SA9023 Audio Streaming Controller
+
+usb:v262Ap9020*
+ ID_MODEL_FROM_DATABASE=SA9020 audio controller
+
+usb:v262Ap9023*
+ ID_MODEL_FROM_DATABASE=SA9023 audio controller
+
+usb:v262Ap9027*
+ ID_MODEL_FROM_DATABASE=SA9027 audio controller
+
+usb:v262Ap9226*
+ ID_MODEL_FROM_DATABASE=SA9226 192KHz audio controller
+
+usb:v262Ap9227*
+ ID_MODEL_FROM_DATABASE=SA9227 384KHz audio controller
+
+usb:v262Ap9228*
+ ID_MODEL_FROM_DATABASE=SA9228 384KHz/DSD audio controller
+
usb:v2632*
ID_VENDOR_FROM_DATABASE=TwinMOS
usb:v2639p0200*
ID_MODEL_FROM_DATABASE=MTw
+usb:v2639p0300*
+ ID_MODEL_FROM_DATABASE=Motion Tracker Development Board
+
+usb:v2639p0301*
+ ID_MODEL_FROM_DATABASE=MTi Converter
+
usb:v2639pD00D*
ID_MODEL_FROM_DATABASE=Wireless Receiver
+usb:v264A*
+ ID_VENDOR_FROM_DATABASE=Thermaltake
+
+usb:v264Ap1004*
+ ID_MODEL_FROM_DATABASE=Ventus
+
usb:v2650*
ID_VENDOR_FROM_DATABASE=Electronics For Imaging, Inc. [hex]
+usb:v2650p1311*
+ ID_MODEL_FROM_DATABASE=eBeam Classic [Luidia]
+
usb:v2659*
ID_VENDOR_FROM_DATABASE=Sundtek
usb:v2659p1213*
ID_MODEL_FROM_DATABASE=MediaTV Pro III MiniPCIe (US)
+usb:v2662*
+ ID_VENDOR_FROM_DATABASE=Moog Music Inc.
+
+usb:v266E*
+ ID_VENDOR_FROM_DATABASE=Silicon Integrated Systems
+
+usb:v2672*
+ ID_VENDOR_FROM_DATABASE=GoPro
+
+usb:v2672p0004*
+ ID_MODEL_FROM_DATABASE=Hero 3
+
+usb:v2672p0006*
+ ID_MODEL_FROM_DATABASE=HERO 3+ Silver Edition
+
+usb:v2672p0007*
+ ID_MODEL_FROM_DATABASE=HERO 3+ Black
+
+usb:v2672p000E*
+ ID_MODEL_FROM_DATABASE=HERO4 Black
+
+usb:v2672p0011*
+ ID_MODEL_FROM_DATABASE=Hero 3+ Black
+
usb:v2676*
ID_VENDOR_FROM_DATABASE=Basler AG
usb:v2676pBA02*
ID_MODEL_FROM_DATABASE=ace
+usb:v2676pBA03*
+ ID_MODEL_FROM_DATABASE=ba03 dart Vision Caera
+
+usb:v2676pBA04*
+ ID_MODEL_FROM_DATABASE=ba04 pulse Vision Camera
+
+usb:v2676pBA05*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2676pBA06*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2676pBA07*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2676pBA08*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2676pBA09*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2676pBA0A*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2676pBA0B*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2676pBA0C*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2676pBA0D*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2676pBA0E*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2676pBA0F*
+ ID_MODEL_FROM_DATABASE=Vision Camera
+
+usb:v2685*
+ ID_VENDOR_FROM_DATABASE=Cardo Peripheral Systems LTD
+
+usb:v2685p0900*
+ ID_MODEL_FROM_DATABASE=[Packtalk Bold Bluetooth Motorcycle Intercom]
+
+usb:v2687*
+ ID_VENDOR_FROM_DATABASE=Fitbit Inc.
+
+usb:v2687pFB01*
+ ID_MODEL_FROM_DATABASE=Base Station
+
+usb:v2689*
+ ID_VENDOR_FROM_DATABASE=StepOver International GmbH
+
+usb:v2689p0601*
+ ID_MODEL_FROM_DATABASE=naturaSign Pad POS
+
+usb:v2689p0901*
+ ID_MODEL_FROM_DATABASE=naturaSign Pad Light
+
+usb:v2689p0CE1*
+ ID_MODEL_FROM_DATABASE=Pad Vivid US
+
+usb:v2689p0CF1*
+ ID_MODEL_FROM_DATABASE=Pad Biometric US 5.0
+
+usb:v2689p0D01*
+ ID_MODEL_FROM_DATABASE=duraSign Pad US 10.0
+
+usb:v2689p0DF1*
+ ID_MODEL_FROM_DATABASE=duraSign Pad Biometric US 10.0
+
+usb:v268B*
+ ID_VENDOR_FROM_DATABASE=Dimension Engineering
+
+usb:v268Bp0101*
+ ID_MODEL_FROM_DATABASE=DELink 2
+
+usb:v268Bp0201*
+ ID_MODEL_FROM_DATABASE=Sabertooth 2x32
+
+usb:v268Bp0405*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 200
+
+usb:v268Bp0406*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 200
+
+usb:v268Bp0407*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 200
+
+usb:v268Bp0408*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 75
+
+usb:v268Bp0409*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 250
+
+usb:v268Bp0412*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 60
+
+usb:v268Bp0413*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 200
+
+usb:v268Bp0414*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 250
+
+usb:v268Bp0415*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 75
+
+usb:v268Bp0416*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 60
+
+usb:v268Bp0417*
+ ID_MODEL_FROM_DATABASE=Evolv DNA Go
+
+usb:v268Bp0419*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 250 Color
+
+usb:v268Bp0423*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 200
+
+usb:v268Bp0424*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 250
+
+usb:v268Bp0425*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 75
+
+usb:v268Bp0426*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 60
+
+usb:v268Bp8405*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 200 (recovery mode)
+
+usb:v268Bp8406*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 200 (recovery mode)
+
+usb:v268Bp8407*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 200 (recovery mode)
+
+usb:v268Bp8408*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 75 (recovery mode)
+
+usb:v268Bp8409*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 250 (recovery mode)
+
+usb:v268Bp8412*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 60 (recovery mode)
+
+usb:v268Bp8413*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 200 (recovery mode)
+
+usb:v268Bp8414*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 250 (recovery mode)
+
+usb:v268Bp8415*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 75 (recovery mode)
+
+usb:v268Bp8416*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 60 (recovery mode)
+
+usb:v268Bp8423*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 200 (recovery mode)
+
+usb:v268Bp8424*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 250 (recovery mode)
+
+usb:v268Bp8425*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 75 (recovery mode)
+
+usb:v268Bp8426*
+ ID_MODEL_FROM_DATABASE=Evolv DNA 60 (recovery mode)
+
+usb:v26A9*
+ ID_VENDOR_FROM_DATABASE=Research Industrial Systems Engineering
+
+usb:v26A9p0001*
+ ID_MODEL_FROM_DATABASE=Payment Terminal v1.0
+
+usb:v26AA*
+ ID_VENDOR_FROM_DATABASE=Yaesu Musen
+
+usb:v26AAp0001*
+ ID_MODEL_FROM_DATABASE=FT-1D
+
+usb:v26AAp000E*
+ ID_MODEL_FROM_DATABASE=FTA-550
+
+usb:v26AAp000F*
+ ID_MODEL_FROM_DATABASE=FTA-750
+
+usb:v26B5*
+ ID_VENDOR_FROM_DATABASE=Electrocompaniet
+
+usb:v26B5p0002*
+ ID_MODEL_FROM_DATABASE=ECD 2
+
+usb:v26B5p0003*
+ ID_MODEL_FROM_DATABASE=ECD 2 (Audio Class 1)
+
+usb:v26B5p0004*
+ ID_MODEL_FROM_DATABASE=PI 2D
+
+usb:v26B5p0005*
+ ID_MODEL_FROM_DATABASE=PI 2D (Audio Class 1)
+
+usb:v26B5p0006*
+ ID_MODEL_FROM_DATABASE=ECI 6
+
+usb:v26B5p0007*
+ ID_MODEL_FROM_DATABASE=ECI 6 (Audio Class 1)
+
+usb:v26B5p0020*
+ ID_MODEL_FROM_DATABASE=ECI 80
+
+usb:v26BD*
+ ID_VENDOR_FROM_DATABASE=Integral Memory
+
+usb:v26BDp9917*
+ ID_MODEL_FROM_DATABASE=Fusion Flash Drive
+
+usb:v26E2*
+ ID_VENDOR_FROM_DATABASE=Ingenieurbuero Dietzsch und Thiele, PartG
+
+usb:v26F2*
+ ID_VENDOR_FROM_DATABASE=Micromega
+
+usb:v26F2p0200*
+ ID_MODEL_FROM_DATABASE=MyDac
+
+usb:v2707*
+ ID_VENDOR_FROM_DATABASE=Bardac Corporation
+
+usb:v2707p0005*
+ ID_MODEL_FROM_DATABASE=drive.web
+
+usb:v270D*
+ ID_VENDOR_FROM_DATABASE=Rosand Technologies
+
+usb:v270Dp1001*
+ ID_MODEL_FROM_DATABASE=R-Idge Bootloader
+
+usb:v270Dp1002*
+ ID_MODEL_FROM_DATABASE=R-Idge Router
+
usb:v2717*
ID_VENDOR_FROM_DATABASE=Xiaomi Inc.
usb:v2717pFF88*
ID_MODEL_FROM_DATABASE=Mi/Redmi series (RNDIS + ADB)
+usb:v272A*
+ ID_VENDOR_FROM_DATABASE=StarLeaf Ltd.
+
+usb:v272C*
+ ID_VENDOR_FROM_DATABASE=Signum Systems
+
+usb:v272Cp7D13*
+ ID_MODEL_FROM_DATABASE=I-jet
+
usb:v2730*
ID_VENDOR_FROM_DATABASE=Citizen
+usb:v2730p0FFF*
+ ID_MODEL_FROM_DATABASE=CT-S2000/4000/310/CLP-521/621/631/CL-S700 Series
+
+usb:v2730p1004*
+ ID_MODEL_FROM_DATABASE=PPU-700
+
+usb:v2730p2002*
+ ID_MODEL_FROM_DATABASE=CT-S2000 Thermal Printer (Parallel mode)
+
usb:v2730p200F*
ID_MODEL_FROM_DATABASE=CT-S310 Label printer
usb:v273Fp1005*
ID_MODEL_FROM_DATABASE=ColorHug2 bootloader
+usb:v2756*
+ ID_VENDOR_FROM_DATABASE=Victor Hasselblad AB
+
+usb:v2756p0002*
+ ID_MODEL_FROM_DATABASE=X1D Camera
+
+usb:v2759*
+ ID_VENDOR_FROM_DATABASE=Philip Morris Products S.A.
+
+usb:v2759p0003*
+ ID_MODEL_FROM_DATABASE=IQOS Pocket Charger 2.4
+
+usb:v2765*
+ ID_VENDOR_FROM_DATABASE=Firstbeat Technologies, Ltd.
+
+usb:v2765p0004*
+ ID_MODEL_FROM_DATABASE=Bodyguard 2
+
+usb:v2766*
+ ID_VENDOR_FROM_DATABASE=LifeScan
+
+usb:v2766p0000*
+ ID_MODEL_FROM_DATABASE=OneTouch Verio
+
usb:v2770*
ID_VENDOR_FROM_DATABASE=NHJ, Ltd
usb:v2770p930C*
ID_MODEL_FROM_DATABASE=CCD Webcam(PC370R)
+usb:v27A8*
+ ID_VENDOR_FROM_DATABASE=Square, Inc.
+
+usb:v27A8pA120*
+ ID_MODEL_FROM_DATABASE=Contactless + Chip Reader
+
usb:v27B8*
ID_VENDOR_FROM_DATABASE=ThingM
usb:v27B8p01ED*
ID_MODEL_FROM_DATABASE=blink(1)
+usb:v27BD*
+ ID_VENDOR_FROM_DATABASE=Codethink Ltd.
+
+usb:v27BDp0001*
+ ID_MODEL_FROM_DATABASE=Slab Node Manager
+
+usb:v27BDp0002*
+ ID_MODEL_FROM_DATABASE=Slab Node Manager JTAG
+
+usb:v27C0*
+ ID_VENDOR_FROM_DATABASE=Cadwell Laboratories, Inc.
+
+usb:v27C0p0818*
+ ID_MODEL_FROM_DATABASE=Paperlike HD-FT
+
usb:v27C6*
ID_VENDOR_FROM_DATABASE=Shenzhen Goodix Technology Co.,Ltd.
usb:v27C6p530C*
ID_MODEL_FROM_DATABASE=Fingerprint Reader
+usb:v27C6p532D*
+ ID_MODEL_FROM_DATABASE=Fingerprint
+
+usb:v27C6p5381*
+ ID_MODEL_FROM_DATABASE=Fingerprint Reader
+
usb:v27C6p5385*
ID_MODEL_FROM_DATABASE=Fingerprint Reader
usb:v27C6p5740*
ID_MODEL_FROM_DATABASE=Fingerprint Reader
+usb:v27D4*
+ ID_VENDOR_FROM_DATABASE=Blackstar Amplification Limited
+
+usb:v27DD*
+ ID_VENDOR_FROM_DATABASE=Mindeo
+
+usb:v27DDp0002*
+ ID_MODEL_FROM_DATABASE=Mindeo Virtual COM Port
+
+usb:v27F2*
+ ID_VENDOR_FROM_DATABASE=Softnautics LLP
+
+usb:v2803*
+ ID_VENDOR_FROM_DATABASE=StarLine LLC.
+
+usb:v2803p0001*
+ ID_MODEL_FROM_DATABASE=Controller Area Network car alarm module [SLCAN-2]
+
+usb:v2806*
+ ID_VENDOR_FROM_DATABASE=SIMPASS
+
+usb:v2806p0001*
+ ID_MODEL_FROM_DATABASE=N-PASS X1
+
+usb:v2817*
+ ID_VENDOR_FROM_DATABASE=Signal Hound, Inc.
+
+usb:v2817p0002*
+ ID_MODEL_FROM_DATABASE=BB60C Spectrum Analyzer
+
+usb:v2817p0004*
+ ID_MODEL_FROM_DATABASE=SM200A Spectrum Analyzer
+
+usb:v2818*
+ ID_VENDOR_FROM_DATABASE=Codex Digital Limited
+
+usb:v2818p0001*
+ ID_MODEL_FROM_DATABASE=Transfer Drive Dock
+
usb:v2821*
ID_VENDOR_FROM_DATABASE=ASUSTek Computer Inc.
usb:v2821p3300*
ID_MODEL_FROM_DATABASE=WL-140 / Hawking HWU36D 802.11b Wireless Adapter [Intersil PRISM 3]
+usb:v2822*
+ ID_VENDOR_FROM_DATABASE=REFLEXdigital
+
+usb:v2833*
+ ID_VENDOR_FROM_DATABASE=Oculus VR, Inc.
+
+usb:v2833p0001*
+ ID_MODEL_FROM_DATABASE=Rift Developer Kit 1
+
+usb:v2833p0021*
+ ID_MODEL_FROM_DATABASE=Rift DK2
+
+usb:v2833p0031*
+ ID_MODEL_FROM_DATABASE=Rift CV1
+
+usb:v2833p0101*
+ ID_MODEL_FROM_DATABASE=Latency Tester
+
+usb:v2833p0137*
+ ID_MODEL_FROM_DATABASE=Quest Headset
+
+usb:v2833p0201*
+ ID_MODEL_FROM_DATABASE=Camera DK2
+
+usb:v2833p0211*
+ ID_MODEL_FROM_DATABASE=Rift CV1 Sensor
+
+usb:v2833p0330*
+ ID_MODEL_FROM_DATABASE=Rift CV1 Audio
+
+usb:v2833p1031*
+ ID_MODEL_FROM_DATABASE=Rift CV1
+
+usb:v2833p2021*
+ ID_MODEL_FROM_DATABASE=Rift DK2
+
+usb:v2833p2031*
+ ID_MODEL_FROM_DATABASE=Rift CV1
+
+usb:v2833p3031*
+ ID_MODEL_FROM_DATABASE=Rift CV1
+
+usb:v2836*
+ ID_VENDOR_FROM_DATABASE=OUYA
+
+usb:v286B*
+ ID_VENDOR_FROM_DATABASE=STANEO SAS
+
+usb:v286Bp0003*
+ ID_MODEL_FROM_DATABASE=D6BB/D9 seismic digitizer
+
+usb:v2886*
+ ID_VENDOR_FROM_DATABASE=Seeed Technology Co., Ltd.
+
+usb:v2886p0002*
+ ID_MODEL_FROM_DATABASE=Seeeduino Lite
+
+usb:v2890*
+ ID_VENDOR_FROM_DATABASE=Teknic, Inc
+
+usb:v2890p0213*
+ ID_MODEL_FROM_DATABASE=ClearPath 4-axis Comm Hub
+
usb:v2899*
ID_VENDOR_FROM_DATABASE=Toptronic Industrial Co., Ltd
usb:v289Bp000C*
ID_MODEL_FROM_DATABASE=Gamecube/N64 controller v2.9 (Joystick mode)
+usb:v289Bp000E*
+ ID_MODEL_FROM_DATABASE=VirtualBoy controller
+
+usb:v289Bp0010*
+ ID_MODEL_FROM_DATABASE=WUSBMote v1.2 (Joystick mode)
+
+usb:v289Bp0011*
+ ID_MODEL_FROM_DATABASE=WUSBMote v1.2 (Mouse mode)
+
+usb:v289Bp0012*
+ ID_MODEL_FROM_DATABASE=WUSBMote v1.2.1 (Joystick mode)
+
+usb:v289Bp0013*
+ ID_MODEL_FROM_DATABASE=WUSBMote v1.2.1 (Mouse mode)
+
+usb:v289Bp0014*
+ ID_MODEL_FROM_DATABASE=WUSBMote v1.3 (Joystick mode)
+
+usb:v289Bp0015*
+ ID_MODEL_FROM_DATABASE=WUSBMote v1.3 (Mouse mode)
+
+usb:v289Bp0016*
+ ID_MODEL_FROM_DATABASE=WUSBMote v1.3 (I2C interface mode)
+
+usb:v289Bp0017*
+ ID_MODEL_FROM_DATABASE=Gamecube/N64 controller v3.0
+
+usb:v289Bp0018*
+ ID_MODEL_FROM_DATABASE=Atari Jaguar controller
+
+usb:v289Bp0019*
+ ID_MODEL_FROM_DATABASE=MultiDB9joy v3
+
+usb:v289Bp001A*
+ ID_MODEL_FROM_DATABASE=MultiDB9joy v3 (multitap mode)
+
usb:v289Bp0100*
ID_MODEL_FROM_DATABASE=Dual-relay board
usb:v289Bp0502*
ID_MODEL_FROM_DATABASE=Precision barometer
+usb:v289D*
+ ID_VENDOR_FROM_DATABASE=Seek Thermal, Inc.
+
+usb:v289Dp0010*
+ ID_MODEL_FROM_DATABASE=PIR206 Thermal Camera [Seek Compact]
+
+usb:v28BD*
+ ID_VENDOR_FROM_DATABASE=XP-Pen
+
+usb:v28BDp0920*
+ ID_MODEL_FROM_DATABASE=Star G960 Graphic Tablet
+
+usb:v28C7*
+ ID_VENDOR_FROM_DATABASE=Ultimaker B.V.
+
+usb:v28C7p0001*
+ ID_MODEL_FROM_DATABASE=3D printer serial interface
+
+usb:v28D4*
+ ID_VENDOR_FROM_DATABASE=Devialet
+
+usb:v28D4p0008*
+ ID_MODEL_FROM_DATABASE=120/200/250/400/800/D-Premier
+
usb:v28DE*
ID_VENDOR_FROM_DATABASE=Valve Software
usb:v28DEp2000*
ID_MODEL_FROM_DATABASE=Lighthouse FPGA RX
+usb:v28DEp2012*
+ ID_MODEL_FROM_DATABASE=Virtual Reality Controller [VRC]
+
usb:v28DEp2101*
ID_MODEL_FROM_DATABASE=Watchman Dongle
+usb:v28DEp2500*
+ ID_MODEL_FROM_DATABASE=Lighthouse Base Station
+
+usb:v28E0*
+ ID_VENDOR_FROM_DATABASE=PT. Prasimax Inovasi Teknologi
+
+usb:v28E0p1001*
+ ID_MODEL_FROM_DATABASE=BTS Monitoring Config for Prototype
+
+usb:v28E0p5740*
+ ID_MODEL_FROM_DATABASE=TRUMON TS-107
+
+usb:v28E0p5741*
+ ID_MODEL_FROM_DATABASE=TRUMON TS-108
+
+usb:v28E9*
+ ID_VENDOR_FROM_DATABASE=GDMicroelectronics
+
+usb:v28E9p0189*
+ ID_MODEL_FROM_DATABASE=GD32 DFU Bootloader (Longan Nano)
+
+usb:v28F3*
+ ID_VENDOR_FROM_DATABASE=Clover Network, Inc.
+
+usb:v28F3p2000*
+ ID_MODEL_FROM_DATABASE=Mobile Wi-Fi (C200)
+
+usb:v28F3p3000*
+ ID_MODEL_FROM_DATABASE=Mini
+
+usb:v28F3p4000*
+ ID_MODEL_FROM_DATABASE=Flex
+
+usb:v28F9*
+ ID_VENDOR_FROM_DATABASE=Profitap HQ BV
+
+usb:v28F9p0001*
+ ID_MODEL_FROM_DATABASE=Profishark 1G Black
+
+usb:v28F9p0003*
+ ID_MODEL_FROM_DATABASE=Profishark 1G+
+
+usb:v28F9p0004*
+ ID_MODEL_FROM_DATABASE=Profishark 1G
+
+usb:v28F9p0005*
+ ID_MODEL_FROM_DATABASE=Profishark 10G
+
+usb:v28F9p0006*
+ ID_MODEL_FROM_DATABASE=Profishark 100M
+
+usb:v290C*
+ ID_VENDOR_FROM_DATABASE=R. Hamilton & Co. Ltd.
+
+usb:v290Cp4B4D*
+ ID_MODEL_FROM_DATABASE=Mercury iPod Dock
+
+usb:v2912*
+ ID_VENDOR_FROM_DATABASE=Audioengine
+
+usb:v2912p20C8*
+ ID_MODEL_FROM_DATABASE=D1 24-bit DAC
+
+usb:v2912p30C8*
+ ID_MODEL_FROM_DATABASE=D1 24-bit DAC
+
+usb:v2916*
+ ID_VENDOR_FROM_DATABASE=Yota Devices
+
usb:v2931*
ID_VENDOR_FROM_DATABASE=Jolla Oy
usb:v2931p0A05*
ID_MODEL_FROM_DATABASE=Jolla PC connection
+usb:v2931p0A07*
+ ID_MODEL_FROM_DATABASE=Phone MTP
+
usb:v2931p0AFE*
ID_MODEL_FROM_DATABASE=Jolla charging only
usb:v2939p495B*
ID_MODEL_FROM_DATABASE=X-MCB2
+usb:v2939p49B1*
+ ID_MODEL_FROM_DATABASE=X-MCB1
+
+usb:v2939p49B2*
+ ID_MODEL_FROM_DATABASE=X-MCB2
+
+usb:v2939p49C1*
+ ID_MODEL_FROM_DATABASE=X-MCC1
+
+usb:v2939p49C2*
+ ID_MODEL_FROM_DATABASE=X-MCC2
+
+usb:v2939p49C3*
+ ID_MODEL_FROM_DATABASE=X-MCC3
+
+usb:v2939p49C4*
+ ID_MODEL_FROM_DATABASE=X-MCC4
+
+usb:v2957*
+ ID_VENDOR_FROM_DATABASE=Obsidian Research Corporation
+
+usb:v2957p0001*
+ ID_MODEL_FROM_DATABASE=Management Console
+
+usb:v2961*
+ ID_VENDOR_FROM_DATABASE=Miselu
+
+usb:v2961p0001*
+ ID_MODEL_FROM_DATABASE=C.24 keyboard
+
+usb:v296B*
+ ID_VENDOR_FROM_DATABASE=Xacti Corporation
+
+usb:v296Bp3917*
+ ID_MODEL_FROM_DATABASE=CX-WE100 Camera
+
+usb:v2972*
+ ID_VENDOR_FROM_DATABASE=FiiO Electronics Technology
+
+usb:v2972p0007*
+ ID_MODEL_FROM_DATABASE=X3 2nd gen audio player / DAC
+
+usb:v298D*
+ ID_VENDOR_FROM_DATABASE=Next Biometrics
+
+usb:v298Dp2020*
+ ID_MODEL_FROM_DATABASE=NB-2020-U Fingerprint Reader
+
+usb:v29BD*
+ ID_VENDOR_FROM_DATABASE=Silicon Works
+
+usb:v29BDp4101*
+ ID_MODEL_FROM_DATABASE=Multi-touch Device
+
+usb:v29C1*
+ ID_VENDOR_FROM_DATABASE=Taztag
+
+usb:v29C1p1105*
+ ID_MODEL_FROM_DATABASE=M17-G903-1 [Tazpad]
+
+usb:v29C1p1107*
+ ID_MODEL_FROM_DATABASE=M17-G903-A [Tazpad] (CCID)
+
+usb:v29C2*
+ ID_VENDOR_FROM_DATABASE=Lewitt GmbH
+
+usb:v29C2p0001*
+ ID_MODEL_FROM_DATABASE=DGT 650
+
+usb:v29C2p0003*
+ ID_MODEL_FROM_DATABASE=DGT 450
+
+usb:v29C2p0009*
+ ID_MODEL_FROM_DATABASE=DGT 260
+
+usb:v29C2p0011*
+ ID_MODEL_FROM_DATABASE=Stream 4x5
+
+usb:v29C3*
+ ID_VENDOR_FROM_DATABASE=Noviga
+
+usb:v29E2*
+ ID_VENDOR_FROM_DATABASE=Huatune Technology (Shanghai) Co., Ltd.
+
+usb:v29E7*
+ ID_VENDOR_FROM_DATABASE=Brunel University
+
+usb:v29E8*
+ ID_VENDOR_FROM_DATABASE=4Links Limited
+
+usb:v29EA*
+ ID_VENDOR_FROM_DATABASE=Kinesis Corporation
+
+usb:v29EAp0102*
+ ID_MODEL_FROM_DATABASE=Advantage2 Keyboard
+
+usb:v29F1*
+ ID_VENDOR_FROM_DATABASE=Canaan Creative Co., Ltd
+
+usb:v29F1p33F1*
+ ID_MODEL_FROM_DATABASE=Avalon nano 1.0
+
+usb:v29F1p33F2*
+ ID_MODEL_FROM_DATABASE=Avalon USB2IIC Converter
+
+usb:v29F1p33F3*
+ ID_MODEL_FROM_DATABASE=Avalon nano 2.0
+
+usb:v29F1p40F1*
+ ID_MODEL_FROM_DATABASE=Avalon4 mini
+
usb:v2A03*
ID_VENDOR_FROM_DATABASE=dog hunter AG
ID_MODEL_FROM_DATABASE=Arduino Micro ADK rev3 (bootloader)
usb:v2A03p003B*
- ID_MODEL_FROM_DATABASE=Arduino Serial
+ ID_MODEL_FROM_DATABASE=Arduino usb2serial
usb:v2A03p003C*
ID_MODEL_FROM_DATABASE=Arduino Explora (bootloader)
usb:v2A03p804D*
ID_MODEL_FROM_DATABASE=Arduino Zero Pro (CDC ACM)
+usb:v2A0E*
+ ID_VENDOR_FROM_DATABASE=Shenzhen DreamSource Technology Co., Ltd.
+
+usb:v2A13*
+ ID_VENDOR_FROM_DATABASE=Grabba International
+
+usb:v2A13p0000*
+ ID_MODEL_FROM_DATABASE=S-Series data capture device
+
+usb:v2A19*
+ ID_VENDOR_FROM_DATABASE=Numato Systems Pvt. Ltd
+
+usb:v2A19p1002*
+ ID_MODEL_FROM_DATABASE=Mimas V2 Spartan6 FPGA Development Board
+
+usb:v2A19p5440*
+ ID_MODEL_FROM_DATABASE=TimVideos' HDMI2USB Opsis (FX2) - Unconfigured device
+
+usb:v2A19p5441*
+ ID_MODEL_FROM_DATABASE=TimVideos' HDMI2USB Opsis (FX2) - Firmware load/upgrade
+
+usb:v2A19p5442*
+ ID_MODEL_FROM_DATABASE=TimVideos' HDMI2USB Opsis (FX2) - HDMI/DVI Capture Device
+
+usb:v2A1D*
+ ID_VENDOR_FROM_DATABASE=Oxford Nanopore Technologies, Ltd
+
+usb:v2A1Dp0000*
+ ID_MODEL_FROM_DATABASE=MinION
+
+usb:v2A1Dp0001*
+ ID_MODEL_FROM_DATABASE=MinION
+
+usb:v2A1Dp0010*
+ ID_MODEL_FROM_DATABASE=VolTRAX
+
+usb:v2A1Dp0011*
+ ID_MODEL_FROM_DATABASE=VolTRAX
+
+usb:v2A1Dp0020*
+ ID_MODEL_FROM_DATABASE=GridION
+
+usb:v2A1Dp0021*
+ ID_MODEL_FROM_DATABASE=GridION
+
usb:v2A37*
ID_VENDOR_FROM_DATABASE=RTD Embedded Technologies, Inc.
usb:v2A37p5110*
ID_MODEL_FROM_DATABASE=UPS35110/UPS25110
+usb:v2A39*
+ ID_VENDOR_FROM_DATABASE=RME
+
+usb:v2A39p3FB0*
+ ID_MODEL_FROM_DATABASE=Babyface Pro (Class Compliant Mode)
+
+usb:v2A39p3FC0*
+ ID_MODEL_FROM_DATABASE=Babyface Pro
+
+usb:v2A39p3FC1*
+ ID_MODEL_FROM_DATABASE=Fireface UFX+
+
+usb:v2A39p3FC2*
+ ID_MODEL_FROM_DATABASE=Fireface UFX+
+
+usb:v2A39p3FD1*
+ ID_MODEL_FROM_DATABASE=Fireface UFX+
+
+usb:v2A3C*
+ ID_VENDOR_FROM_DATABASE=Trinamic Motion Control GmbH & Co KG
+
+usb:v2A3Cp0100*
+ ID_MODEL_FROM_DATABASE=Stepper Device
+
+usb:v2A3Cp0200*
+ ID_MODEL_FROM_DATABASE=BLDC/PMSM Device
+
+usb:v2A3Cp0300*
+ ID_MODEL_FROM_DATABASE=Motor Control Device
+
+usb:v2A3Cp0400*
+ ID_MODEL_FROM_DATABASE=Motor Control Device
+
+usb:v2A3Cp0500*
+ ID_MODEL_FROM_DATABASE=PANdrive(TM)
+
+usb:v2A3Cp0600*
+ ID_MODEL_FROM_DATABASE=motionCookie(TM)
+
+usb:v2A3Cp0700*
+ ID_MODEL_FROM_DATABASE=Evaluation Device
+
+usb:v2A3Cp0800*
+ ID_MODEL_FROM_DATABASE=Interface Device
+
+usb:v2A3Cp0900*
+ ID_MODEL_FROM_DATABASE=Generic Device
+
usb:v2A45*
ID_VENDOR_FROM_DATABASE=Meizu Corp.
usb:v2A45p2012*
ID_MODEL_FROM_DATABASE=MX Phone (MTP & ACM)
+usb:v2A47*
+ ID_VENDOR_FROM_DATABASE=Mundo Reader, S.L.
+
+usb:v2A47p0C02*
+ ID_MODEL_FROM_DATABASE=bq Aquaris E4.5
+
+usb:v2A47p201D*
+ ID_MODEL_FROM_DATABASE=Tablet Edison 3
+
+usb:v2A47p903A*
+ ID_MODEL_FROM_DATABASE=bq Aquaris U
+
+usb:v2A4B*
+ ID_VENDOR_FROM_DATABASE=EMULEX Corporation
+
+usb:v2A4Bp0400*
+ ID_MODEL_FROM_DATABASE=Pilot4 Integrated Hub
+
+usb:v2A62*
+ ID_VENDOR_FROM_DATABASE=Flymaster Avionics
+
+usb:v2A62pB301*
+ ID_MODEL_FROM_DATABASE=LiveSD
+
+usb:v2A62pB302*
+ ID_MODEL_FROM_DATABASE=NavSD
+
+usb:v2A6E*
+ ID_VENDOR_FROM_DATABASE=Bare Conductive
+
+usb:v2A6Ep0003*
+ ID_MODEL_FROM_DATABASE=Touch Board
+
+usb:v2A6Ep8003*
+ ID_MODEL_FROM_DATABASE=Touch Board
+
+usb:v2A70*
+ ID_VENDOR_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd.
+
+usb:v2A70p4EE7*
+ ID_MODEL_FROM_DATABASE=ONEPLUS A3010 [OnePlus 3T] / A5010 [OnePlus 5T] / A6003 [OnePlus 6] (Charging + USB debugging modes)
+
+usb:v2A70p904D*
+ ID_MODEL_FROM_DATABASE=A3000 phone (PTP mode) [3T]
+
+usb:v2A70p904E*
+ ID_MODEL_FROM_DATABASE=A3000 phone (PTP mode, with debug) [3T]
+
+usb:v2A88*
+ ID_VENDOR_FROM_DATABASE=DFU Technology Ltd
+
+usb:v2A88pFFFF*
+ ID_MODEL_FROM_DATABASE=DFU
+
+usb:v2A8D*
+ ID_VENDOR_FROM_DATABASE=Keysight Technologies, Inc.
+
+usb:v2AB6*
+ ID_VENDOR_FROM_DATABASE=T+A elektroakustik GmbH & Co KG, Germany
+
+usb:v2AB6p0001*
+ ID_MODEL_FROM_DATABASE=PDP3000HV DAC
+
+usb:v2AB6p0002*
+ ID_MODEL_FROM_DATABASE=MP1000E, MP2000R, MP2500R, MP3100HV
+
+usb:v2AB6p0003*
+ ID_MODEL_FROM_DATABASE=TA HD AUDIO V2
+
usb:v2AC7*
ID_VENDOR_FROM_DATABASE=Ultrahaptics Ltd.
usb:v2AC7pFFFF*
ID_MODEL_FROM_DATABASE=DFU
+usb:v2AD1*
+ ID_VENDOR_FROM_DATABASE=Picotronic GmbH
+
+usb:v2AD1p7AB8*
+ ID_MODEL_FROM_DATABASE=Turningtable
+
+usb:v2AE5*
+ ID_VENDOR_FROM_DATABASE=Fairphone B.V.
+
+usb:v2AE5p9015*
+ ID_MODEL_FROM_DATABASE=2 (Mass storage & ADB)
+
+usb:v2AE5p9024*
+ ID_MODEL_FROM_DATABASE=2 (RNDIS & ADB)
+
+usb:v2AE5p9039*
+ ID_MODEL_FROM_DATABASE=2 (MTP & ADB)
+
+usb:v2AE5p904D*
+ ID_MODEL_FROM_DATABASE=2 (PTP)
+
+usb:v2AE5p904E*
+ ID_MODEL_FROM_DATABASE=2 (PTP & ADB)
+
+usb:v2AE5p90DE*
+ ID_MODEL_FROM_DATABASE=2 (Charging)
+
+usb:v2AE5pF000*
+ ID_MODEL_FROM_DATABASE=2 (Mass storage)
+
+usb:v2AE5pF003*
+ ID_MODEL_FROM_DATABASE=2 (MTP)
+
+usb:v2AE5pF005*
+ ID_MODEL_FROM_DATABASE=2 (tethering)
+
+usb:v2AE5pF00E*
+ ID_MODEL_FROM_DATABASE=2 (RNDIS)
+
+usb:v2AEC*
+ ID_VENDOR_FROM_DATABASE=Ambiq Micro, Inc.
+
+usb:v2AECp6011*
+ ID_MODEL_FROM_DATABASE=Converter
+
+usb:v2AF4*
+ ID_VENDOR_FROM_DATABASE=ROLI Ltd.
+
+usb:v2AF4p0100*
+ ID_MODEL_FROM_DATABASE=Seaboard GRAND
+
+usb:v2AF4p0200*
+ ID_MODEL_FROM_DATABASE=Seaboard RISE
+
+usb:v2AF4p0300*
+ ID_MODEL_FROM_DATABASE=BlueWing Proto
+
+usb:v2AF4p0400*
+ ID_MODEL_FROM_DATABASE=VOICE
+
+usb:v2AF4p0500*
+ ID_MODEL_FROM_DATABASE=BLOCKS
+
+usb:v2B03*
+ ID_VENDOR_FROM_DATABASE=STEREOLABS
+
+usb:v2B03pF580*
+ ID_MODEL_FROM_DATABASE=ZED camera
+
+usb:v2B03pF582*
+ ID_MODEL_FROM_DATABASE=ZED camera
+
+usb:v2B03pF680*
+ ID_MODEL_FROM_DATABASE=ZED-M camera
+
+usb:v2B03pF681*
+ ID_MODEL_FROM_DATABASE=ZED-M HID Interface
+
+usb:v2B03pF682*
+ ID_MODEL_FROM_DATABASE=ZED-M camera
+
+usb:v2B03pF683*
+ ID_MODEL_FROM_DATABASE=ZED-M HID Interface
+
+usb:v2B03pF684*
+ ID_MODEL_FROM_DATABASE=ZED-M camera
+
+usb:v2B0E*
+ ID_VENDOR_FROM_DATABASE=LeEco
+
+usb:v2B0Ep171B*
+ ID_MODEL_FROM_DATABASE=Le2
+
+usb:v2B0Ep171E*
+ ID_MODEL_FROM_DATABASE=Le2 in USB tethering mode
+
+usb:v2B0Ep1830*
+ ID_MODEL_FROM_DATABASE=Le1 Pro
+
+usb:v2B0Ep1844*
+ ID_MODEL_FROM_DATABASE=Le Max2
+
+usb:v2B0Ep2B0E*
+ ID_MODEL_FROM_DATABASE=LeEco
+
+usb:v2B0Ep6108*
+ ID_MODEL_FROM_DATABASE=Lex720 [LePro 3] in connection sharing usb
+
+usb:v2B0Ep610B*
+ ID_MODEL_FROM_DATABASE=Lex720 [LePro 3] in Camera mode
+
+usb:v2B0Ep610C*
+ ID_MODEL_FROM_DATABASE=Lex720 [LePro 3]
+
+usb:v2B0Ep610D*
+ ID_MODEL_FROM_DATABASE=Lex720 [LePro 3] in debug
+
+usb:v2B23*
+ ID_VENDOR_FROM_DATABASE=Red Hat, Inc.
+
+usb:v2B23pCAFE*
+ ID_MODEL_FROM_DATABASE=UsbDk (USB Development Kit)
+
usb:v2B24*
ID_VENDOR_FROM_DATABASE=KeepKey LLC
usb:v2B24p0001*
- ID_MODEL_FROM_DATABASE=Bitcoin hardware wallet
+ ID_MODEL_FROM_DATABASE=Bitcoin Wallet [KeepKey]
+
+usb:v2B24p0002*
+ ID_MODEL_FROM_DATABASE=Bitcoin Wallet
+
+usb:v2B3E*
+ ID_VENDOR_FROM_DATABASE=NewAE Technology Inc.
+
+usb:v2B3EpACE2*
+ ID_MODEL_FROM_DATABASE=CW1173 [ChipWhisperer-Lite]
+
+usb:v2B4C*
+ ID_VENDOR_FROM_DATABASE=ZUK
+
+usb:v2B4Cp1004*
+ ID_MODEL_FROM_DATABASE=Z1 MTP
+
+usb:v2BC5*
+ ID_VENDOR_FROM_DATABASE=Orbbec 3D Technology International, Inc
+
+usb:v2BC5p0401*
+ ID_MODEL_FROM_DATABASE=Astra
+
+usb:v2BC5p0403*
+ ID_MODEL_FROM_DATABASE=Astra Pro
+
+usb:v2BC5p0407*
+ ID_MODEL_FROM_DATABASE=Astra Mini S
+
+usb:v2BCC*
+ ID_VENDOR_FROM_DATABASE=InoTec GmbH Organisationssysteme
+
+usb:v2BD6*
+ ID_VENDOR_FROM_DATABASE=Coroware, Inc.
+
+usb:v2BD6p4201*
+ ID_MODEL_FROM_DATABASE=RS-485 Controller and Interface [Cypress Semiconductor]
+
+usb:v2BD8*
+ ID_VENDOR_FROM_DATABASE=ROPEX Industrie-Elektronik GmbH
usb:v2C02*
ID_VENDOR_FROM_DATABASE=Planex Communications
usb:v2C1Ap0000*
ID_MODEL_FROM_DATABASE=Wireless Optical Mouse
+usb:v2C23*
+ ID_VENDOR_FROM_DATABASE=Supermicro Computer Incorporated
+
+usb:v2C23p1B83*
+ ID_MODEL_FROM_DATABASE=NIC
+
+usb:v2C4E*
+ ID_VENDOR_FROM_DATABASE=Mercucys INC
+
+usb:v2C4Ep0100*
+ ID_MODEL_FROM_DATABASE=MW300UM RTL8192EU wifi
+
+usb:v2C4F*
+ ID_VENDOR_FROM_DATABASE=Canon Electronic Business Machines Co., Ltd.
+
+usb:v2C4Fp3003*
+ ID_MODEL_FROM_DATABASE=PR Wireless Presenter
+
+usb:v2C55*
+ ID_VENDOR_FROM_DATABASE=Magic Leap, Inc.
+
+usb:v2C55pA100*
+ ID_MODEL_FROM_DATABASE=ML1 Lightpack (MLDB)
+
+usb:v2C55pB100*
+ ID_MODEL_FROM_DATABASE=ML1 Lightpack (fastboot)
+
+usb:v2C55pC001*
+ ID_MODEL_FROM_DATABASE=ML1 Control (COM)
+
+usb:v2C55pC002*
+ ID_MODEL_FROM_DATABASE=ML1 Control (Bootloader)
+
usb:v2C7C*
ID_VENDOR_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
usb:v2C7Cp0435*
ID_MODEL_FROM_DATABASE=AG35 LTE modem
+usb:v2C97*
+ ID_VENDOR_FROM_DATABASE=Ledger
+
+usb:v2C97p0000*
+ ID_MODEL_FROM_DATABASE=Blue
+
+usb:v2C97p0001*
+ ID_MODEL_FROM_DATABASE=Nano S
+
+usb:v2C97p0004*
+ ID_MODEL_FROM_DATABASE=Nano X
+
+usb:v2C99*
+ ID_VENDOR_FROM_DATABASE=Prusa
+
+usb:v2C99p0001*
+ ID_MODEL_FROM_DATABASE=i3 MK2S
+
+usb:v2C9C*
+ ID_VENDOR_FROM_DATABASE=Vayyar Imaging Ltd.
+
+usb:v2C9Cp1000*
+ ID_MODEL_FROM_DATABASE=Walabot Makers Series
+
+usb:v2C9Cp1020*
+ ID_MODEL_FROM_DATABASE=Walabot DIY
+
+usb:v2C9Cp1022*
+ ID_MODEL_FROM_DATABASE=Walabot DIY Plus
+
+usb:v2C9Cp1030*
+ ID_MODEL_FROM_DATABASE=Walabot Home (vHC)
+
+usb:v2C9Cp9100*
+ ID_MODEL_FROM_DATABASE=VNAKit
+
+usb:v2C9D*
+ ID_VENDOR_FROM_DATABASE=Nod Inc
+
+usb:v2C9Dp90A0*
+ ID_MODEL_FROM_DATABASE=Goa
+
+usb:v2C9DpBAC5*
+ ID_MODEL_FROM_DATABASE=Backspin
+
+usb:v2CA3*
+ ID_VENDOR_FROM_DATABASE=DJI Technology Co., Ltd.
+
+usb:v2CA3p0008*
+ ID_MODEL_FROM_DATABASE=Mavic Mini MR1SD25 Remote controller
+
+usb:v2CB7*
+ ID_VENDOR_FROM_DATABASE=Fibocom
+
+usb:v2CB7p0210*
+ ID_MODEL_FROM_DATABASE=L830-EB-00 LTE WWAN Modem
+
+usb:v2CC0*
+ ID_VENDOR_FROM_DATABASE=Hangzhou Zero Zero Infinity Technology Co., Ltd.
+
+usb:v2CC2*
+ ID_VENDOR_FROM_DATABASE=Lautsprecher Teufel GmbH
+
+usb:v2CCF*
+ ID_VENDOR_FROM_DATABASE=Hypersecu
+
+usb:v2CCFp0880*
+ ID_MODEL_FROM_DATABASE=HyperFIDO
+
+usb:v2CD9*
+ ID_VENDOR_FROM_DATABASE=Cambrionix Ltd
+
+usb:v2CD9p0804*
+ ID_MODEL_FROM_DATABASE=PowerSync4 USBPD Hub
+
usb:v2CDC*
ID_VENDOR_FROM_DATABASE=Sea & Sun Technology GmbH
usb:v2CDCpF232*
ID_MODEL_FROM_DATABASE=CTD48Mc CTD Probe
+usb:v2CE5*
+ ID_VENDOR_FROM_DATABASE=InX8 Inc [AKiTiO]
+
+usb:v2CE5p0014*
+ ID_MODEL_FROM_DATABASE=Mass Storage [NT2 U31C]
+
+usb:v2CF0*
+ ID_VENDOR_FROM_DATABASE=Nuand LLC
+
+usb:v2CF0p5246*
+ ID_MODEL_FROM_DATABASE=bladeRF
+
+usb:v2CF0p5250*
+ ID_MODEL_FROM_DATABASE=bladeRF 2.0 micro
+
+usb:v2D1F*
+ ID_VENDOR_FROM_DATABASE=Wacom Taiwan Information Co. Ltd.
+
+usb:v2D25*
+ ID_VENDOR_FROM_DATABASE=Kronegger GmbH.
+
+usb:v2D2D*
+ ID_VENDOR_FROM_DATABASE=proxmark.org
+
+usb:v2D2Dp504D*
+ ID_MODEL_FROM_DATABASE=Proxmark3
+
+usb:v2D37*
+ ID_VENDOR_FROM_DATABASE=Zhuhai Poskey Technology Co.,Ltd
+
+usb:v2D6B*
+ ID_VENDOR_FROM_DATABASE=NetUP Inc.
+
+usb:v2D6Bp7777*
+ ID_MODEL_FROM_DATABASE=Joker TV universal DTV receiver
+
+usb:v2D81*
+ ID_VENDOR_FROM_DATABASE=Evollve Inc.
+
+usb:v2D81p4F01*
+ ID_MODEL_FROM_DATABASE=Ozobot Evo
+
+usb:v2D84*
+ ID_VENDOR_FROM_DATABASE=Zhuhai Poskey Technology Co.,Ltd
+
+usb:v2D84pB806*
+ ID_MODEL_FROM_DATABASE=DT-108B Thermal Label Printer
+
+usb:v2DC8*
+ ID_VENDOR_FROM_DATABASE=8BitDo
+
+usb:v2DC8p5006*
+ ID_MODEL_FROM_DATABASE=M30 Bluetooth gamepad
+
+usb:v2DC8p5750*
+ ID_MODEL_FROM_DATABASE=Bootloader
+
+usb:v2DC8p6000*
+ ID_MODEL_FROM_DATABASE=SF30 Pro gamepad
+
+usb:v2DC8p6001*
+ ID_MODEL_FROM_DATABASE=SN30/SF30 Pro gamepad
+
+usb:v2DC8pAB11*
+ ID_MODEL_FROM_DATABASE=F30 gamepad
+
+usb:v2DC8pAB12*
+ ID_MODEL_FROM_DATABASE=N30 gamepad
+
+usb:v2DC8pAB20*
+ ID_MODEL_FROM_DATABASE=SN30/SF30 gamepad
+
+usb:v2DC8pAB21*
+ ID_MODEL_FROM_DATABASE=SF30 gamepad
+
usb:v2DCF*
ID_VENDOR_FROM_DATABASE=Dialog Semiconductor
+usb:v2DCFpC951*
+ ID_MODEL_FROM_DATABASE=Audio Class 1.0 Devices
+
usb:v2DCFpC952*
ID_MODEL_FROM_DATABASE=Audio Class 2.0 Devices
+usb:v2DEF*
+ ID_VENDOR_FROM_DATABASE=Kirale Technologies
+
+usb:v2DEFp0000*
+ ID_MODEL_FROM_DATABASE=KiNOS Boot DFU
+
+usb:v2DEFp0102*
+ ID_MODEL_FROM_DATABASE=KTWM102 Module
+
+usb:v2DF2*
+ ID_VENDOR_FROM_DATABASE=LIPS Corporation
+
+usb:v2DF2p0213*
+ ID_MODEL_FROM_DATABASE=LIPSedge DL 3D ToF Camera
+
+usb:v2DF2p0215*
+ ID_MODEL_FROM_DATABASE=LIPSedge DL RGB Camera
+
+usb:v2DF2p2102*
+ ID_MODEL_FROM_DATABASE=LIPSedge 5 Megapixel RGB Camera
+
+usb:v2E04*
+ ID_VENDOR_FROM_DATABASE=HMD Global
+
+usb:v2E04p0001*
+ ID_MODEL_FROM_DATABASE=Nokia 3310 3G
+
+usb:v2E04p0002*
+ ID_MODEL_FROM_DATABASE=Nokia 3310 3G
+
+usb:v2E04p0A14*
+ ID_MODEL_FROM_DATABASE=Nokia 3310 3G
+
+usb:v2E04pC008*
+ ID_MODEL_FROM_DATABASE=Tethering Network Interface
+
+usb:v2E04pC009*
+ ID_MODEL_FROM_DATABASE=Nokia 1 (bootloader)
+
+usb:v2E04pC025*
+ ID_MODEL_FROM_DATABASE=Nokia 8 (MTP mode)
+
+usb:v2E04pC026*
+ ID_MODEL_FROM_DATABASE=Nokia Smartphone
+
+usb:v2E04pC029*
+ ID_MODEL_FROM_DATABASE=Nokia 8 (PTP mode)
+
+usb:v2E04pC031*
+ ID_MODEL_FROM_DATABASE=Nokia 1 (PTP)
+
+usb:v2E04pC03F*
+ ID_MODEL_FROM_DATABASE=Nokia 8 (MIDI mode)
+
+usb:v2E0E*
+ ID_VENDOR_FROM_DATABASE=Hatteland Display AS
+
+usb:v2E0Ep0001*
+ ID_MODEL_FROM_DATABASE=CAN Gateway
+
+usb:v2E24*
+ ID_VENDOR_FROM_DATABASE=Hyperkin
+
+usb:v2E24p0652*
+ ID_MODEL_FROM_DATABASE=Duke Xbox One controller
+
+usb:v2E24p1688*
+ ID_MODEL_FROM_DATABASE=X91 Xbox One controller
+
+usb:v2E3B*
+ ID_VENDOR_FROM_DATABASE=uSens Inc.
+
+usb:v2E57*
+ ID_VENDOR_FROM_DATABASE=MEGWARE Computer Vertrieb und Service GmbH
+
+usb:v2E57p454D*
+ ID_MODEL_FROM_DATABASE=SlideSX EnergyMeter
+
+usb:v2E57p454E*
+ ID_MODEL_FROM_DATABASE=SlideSX EnergyMeter DFU
+
+usb:v2E57p5CBA*
+ ID_MODEL_FROM_DATABASE=SlideSX / ClustSafe Bus Adapter
+
+usb:v2E69*
+ ID_VENDOR_FROM_DATABASE=Swift Navigation
+
+usb:v2E69p1001*
+ ID_MODEL_FROM_DATABASE=Piksi Multi
+
+usb:v2E95*
+ ID_VENDOR_FROM_DATABASE=SCUF Gaming
+
+usb:v2E95p7725*
+ ID_MODEL_FROM_DATABASE=Controller
+
+usb:v2F76*
+ ID_VENDOR_FROM_DATABASE=KeyXentic Inc.
+
+usb:v2F76p0905*
+ ID_MODEL_FROM_DATABASE=KX905 Smart Terminal
+
+usb:v2F76p0906*
+ ID_MODEL_FROM_DATABASE=KX906 Smart Card Reader
+
+usb:v2F76p1906*
+ ID_MODEL_FROM_DATABASE=KX906 Smart Token (Mass Storage)
+
+usb:v2FAD*
+ ID_VENDOR_FROM_DATABASE=Definium Technologies
+
+usb:v2FB0*
+ ID_VENDOR_FROM_DATABASE=Infocrypt
+
usb:v2FB2*
ID_VENDOR_FROM_DATABASE=Fujitsu, Ltd
+usb:v2FC0*
+ ID_VENDOR_FROM_DATABASE=Sensidyne, LP
+
+usb:v2FC0p0001*
+ ID_MODEL_FROM_DATABASE=Project Archer
+
+usb:v2FC6*
+ ID_VENDOR_FROM_DATABASE=Comtrue Inc.
+
+usb:v2FC6p6012*
+ ID_MODEL_FROM_DATABASE=UAC2 Device GB
+
+usb:v2FE0*
+ ID_VENDOR_FROM_DATABASE=Xaptum, Inc.
+
+usb:v2FE0p8B01*
+ ID_MODEL_FROM_DATABASE=XAP-RC-001 ENF Router Card
+
+usb:v2FE0p8B02*
+ ID_MODEL_FROM_DATABASE=XAP-RW-001 ENF Router Card with WiFi
+
+usb:v2FE0p8BDE*
+ ID_MODEL_FROM_DATABASE=XAP-EA-002 ENF Access Card
+
+usb:v2FE0p8BEE*
+ ID_MODEL_FROM_DATABASE=XAP-EA-003 ENF Access Card
+
+usb:v2FE3*
+ ID_VENDOR_FROM_DATABASE=NordicSemiconductor
+
+usb:v2FE7*
+ ID_VENDOR_FROM_DATABASE=ELGIN S.A.
+
+usb:v2FE7p0001*
+ ID_MODEL_FROM_DATABASE=SMART S@T
+
+usb:v2FEB*
+ ID_VENDOR_FROM_DATABASE=Beijing Veikk E-Commerce Co., Ltd.
+
+usb:v2FEBp0004*
+ ID_MODEL_FROM_DATABASE=Veikk A15 Pen Tablet
+
+usb:v2FF4*
+ ID_VENDOR_FROM_DATABASE=Quixant Plc
+
usb:v3016*
ID_VENDOR_FROM_DATABASE=Boundary Devices, LLC
usb:v3016p0001*
ID_MODEL_FROM_DATABASE=Nitrogen Bootloader
+usb:v3036*
+ ID_VENDOR_FROM_DATABASE=Control iD
+
+usb:v3036p0001*
+ ID_MODEL_FROM_DATABASE=Print iD
+
+usb:v3036p0002*
+ ID_MODEL_FROM_DATABASE=iDBio
+
+usb:v3037*
+ ID_VENDOR_FROM_DATABASE=Beijing Chushifengmang Technology Development Co.,Ltd.
+
+usb:v3057*
+ ID_VENDOR_FROM_DATABASE=Kingsis Corporation
+
+usb:v3057p0002*
+ ID_MODEL_FROM_DATABASE=ZOWIE Gaming mouse
+
+usb:v308F*
+ ID_VENDOR_FROM_DATABASE=Input Club
+
+usb:v308Fp0000*
+ ID_MODEL_FROM_DATABASE=Infinity 60% Bootloader
+
+usb:v308Fp0001*
+ ID_MODEL_FROM_DATABASE=Infinity 60% - Standard
+
+usb:v308Fp0002*
+ ID_MODEL_FROM_DATABASE=Infinity 60% - Hacker
+
+usb:v308Fp0003*
+ ID_MODEL_FROM_DATABASE=Infinity Ergodox Bootloader
+
+usb:v308Fp0004*
+ ID_MODEL_FROM_DATABASE=Infinity Ergodox
+
+usb:v308Fp0005*
+ ID_MODEL_FROM_DATABASE=WhiteFox Bootloader
+
+usb:v308Fp0006*
+ ID_MODEL_FROM_DATABASE=WhiteFox - Vanilla
+
+usb:v308Fp0007*
+ ID_MODEL_FROM_DATABASE=WhiteFox - ISO
+
+usb:v308Fp0008*
+ ID_MODEL_FROM_DATABASE=WhiteFox - Aria
+
+usb:v308Fp0009*
+ ID_MODEL_FROM_DATABASE=WhiteFox - Winkeyless
+
+usb:v308Fp000A*
+ ID_MODEL_FROM_DATABASE=WhiteFox - True Fox
+
+usb:v308Fp000B*
+ ID_MODEL_FROM_DATABASE=WhiteFox - Jack of All Trades
+
+usb:v308Fp000C*
+ ID_MODEL_FROM_DATABASE=Infinity 60% LED Bootloader
+
+usb:v308Fp000D*
+ ID_MODEL_FROM_DATABASE=Infinity 60% LED - Standard
+
+usb:v308Fp000E*
+ ID_MODEL_FROM_DATABASE=Infinity 60% LED - Hacker
+
+usb:v308Fp000F*
+ ID_MODEL_FROM_DATABASE=Infinity 60% LED - Alphabet
+
+usb:v308Fp0010*
+ ID_MODEL_FROM_DATABASE=K-Type Bootloader
+
+usb:v308Fp0011*
+ ID_MODEL_FROM_DATABASE=K-Type
+
+usb:v308Fp0012*
+ ID_MODEL_FROM_DATABASE=Kira Bootloader
+
+usb:v308Fp0013*
+ ID_MODEL_FROM_DATABASE=Kira
+
+usb:v308Fp0014*
+ ID_MODEL_FROM_DATABASE=Gemini Dawn/Dusk Bootloader
+
+usb:v308Fp0015*
+ ID_MODEL_FROM_DATABASE=Gemini Dawn/Dusk
+
+usb:v308Fp0016*
+ ID_MODEL_FROM_DATABASE=Re:Type Bootloader
+
+usb:v308Fp0017*
+ ID_MODEL_FROM_DATABASE=Re:Type
+
+usb:v308Fp0018*
+ ID_MODEL_FROM_DATABASE=Re:Type USB Hub
+
+usb:v308Fp0019*
+ ID_MODEL_FROM_DATABASE=WhiteFox (SAM4S) Bootloader
+
+usb:v308Fp001A*
+ ID_MODEL_FROM_DATABASE=WhiteFox (SAM4S) - Vanilla
+
+usb:v308Fp001B*
+ ID_MODEL_FROM_DATABASE=WhiteFox (SAM4S) - ISO
+
+usb:v308Fp001C*
+ ID_MODEL_FROM_DATABASE=WhiteFox (SAM4S) - Aria
+
+usb:v308Fp001D*
+ ID_MODEL_FROM_DATABASE=WhiteFox (SAM4S) - Winkeyless
+
+usb:v308Fp001E*
+ ID_MODEL_FROM_DATABASE=WhiteFox (SAM4S) - True Fox
+
+usb:v308Fp001F*
+ ID_MODEL_FROM_DATABASE=WhiteFox (SAM4S) - Jack of All Trades
+
usb:v30A4*
ID_VENDOR_FROM_DATABASE=Blues Wireless
usb:v30C2p1388*
ID_MODEL_FROM_DATABASE=SPL Meter
+usb:v30C9*
+ ID_VENDOR_FROM_DATABASE=Luxvisions Innotech Limited
+
usb:v30EE*
ID_VENDOR_FROM_DATABASE=Fujitsu Connected Technologies Limited
usb:v30EEp1001*
ID_MODEL_FROM_DATABASE=F-01L
+usb:v30F2*
+ ID_VENDOR_FROM_DATABASE=Varex Imaging
+
+usb:v3111*
+ ID_VENDOR_FROM_DATABASE=Hiperscan GmbH
+
+usb:v3111p0000*
+ ID_MODEL_FROM_DATABASE=SGS-NT Microspectrometer
+
+usb:v3112*
+ ID_VENDOR_FROM_DATABASE=Meteca SA
+
+usb:v3112p0001*
+ ID_MODEL_FROM_DATABASE=MBC-WB01 (CDC-ACM)
+
+usb:v3112p0002*
+ ID_MODEL_FROM_DATABASE=MBC-WB01 (Bootloader)
+
+usb:v3112p0003*
+ ID_MODEL_FROM_DATABASE=ABC (CDC ACM)
+
+usb:v3112p0004*
+ ID_MODEL_FROM_DATABASE=ABC (Bootloader)
+
usb:v3125*
ID_VENDOR_FROM_DATABASE=Eagletron
usb:v3136*
ID_VENDOR_FROM_DATABASE=Navini Networks
+usb:v3145*
+ ID_VENDOR_FROM_DATABASE=SafeLogic Inc.
+
+usb:v3147*
+ ID_VENDOR_FROM_DATABASE=Tanvas, Inc.
+
+usb:v316C*
+ ID_VENDOR_FROM_DATABASE=SigmaSense, LLC
+
+usb:v316D*
+ ID_VENDOR_FROM_DATABASE=Purism, SPC
+
+usb:v316Dp4C4B*
+ ID_MODEL_FROM_DATABASE=Librem Key
+
+usb:v316E*
+ ID_VENDOR_FROM_DATABASE=SPECINFOSYSTEMS
+
+usb:v316Ep0001*
+ ID_MODEL_FROM_DATABASE=DIAMOND token
+
+usb:v3171*
+ ID_VENDOR_FROM_DATABASE=8086 Consultancy
+
+usb:v3171p0011*
+ ID_MODEL_FROM_DATABASE=ClusterCTRL DA
+
+usb:v3171p0012*
+ ID_MODEL_FROM_DATABASE=ClusterCTRL pHAT
+
+usb:v3171p0013*
+ ID_MODEL_FROM_DATABASE=ClusterCTRL A+6
+
+usb:v3171p0014*
+ ID_MODEL_FROM_DATABASE=ClusterCTRL Triple
+
+usb:v3171p0015*
+ ID_MODEL_FROM_DATABASE=ClusterCTRL Single
+
usb:v3176*
ID_VENDOR_FROM_DATABASE=Whanam Electronics Co., Ltd
usb:v3195pF281*
ID_MODEL_FROM_DATABASE=MSO-28
+usb:v31C9*
+ ID_VENDOR_FROM_DATABASE=BeiJing LanXum Computer Technology Co., Ltd.
+
+usb:v31C9p1001*
+ ID_MODEL_FROM_DATABASE=Printer
+
+usb:v31C9p1301*
+ ID_MODEL_FROM_DATABASE=Black and White Laser Printer
+
+usb:v31C9p1501*
+ ID_MODEL_FROM_DATABASE=LaserPrint GA50 series
+
+usb:v3200*
+ ID_VENDOR_FROM_DATABASE=Alcatel-Lucent Enterprise
+
+usb:v3200p2100*
+ ID_MODEL_FROM_DATABASE=ALE 8058s
+
+usb:v3200p2101*
+ ID_MODEL_FROM_DATABASE=ALE 8068s
+
+usb:v3200p2102*
+ ID_MODEL_FROM_DATABASE=8078s
+
+usb:v3219*
+ ID_VENDOR_FROM_DATABASE=Smak Tecnologia e Automacao LTDA
+
+usb:v3219p0044*
+ ID_MODEL_FROM_DATABASE=SKO44 Optical Keyboard
+
+usb:v321C*
+ ID_VENDOR_FROM_DATABASE=Premio, Inc.
+
+usb:v324C*
+ ID_VENDOR_FROM_DATABASE=CUPRIS Ltd.
+
+usb:v326D*
+ ID_VENDOR_FROM_DATABASE=Agile Display Solutions Co., Ltd
+
+usb:v326Dp0001*
+ ID_MODEL_FROM_DATABASE=Avocor USB Camera
+
usb:v3275*
ID_VENDOR_FROM_DATABASE=VidzMedia Pte Ltd
usb:v3275p4FB1*
ID_MODEL_FROM_DATABASE=MonsterTV P2H
+usb:v3293*
+ ID_VENDOR_FROM_DATABASE=Unhuman Inc.
+
+usb:v32B3*
+ ID_VENDOR_FROM_DATABASE=TEXA
+
+usb:v32B3pD1A6*
+ ID_MODEL_FROM_DATABASE=TXT Multihub
+
+usb:v32B3pD1A7*
+ ID_MODEL_FROM_DATABASE=TXT Multihub
+
usb:v3333*
ID_VENDOR_FROM_DATABASE=InLine
usb:v3340pA0A3*
ID_MODEL_FROM_DATABASE=deltaX 5 BT (D) PDA
+usb:v3340pFFFF*
+ ID_MODEL_FROM_DATABASE=Mio DigiWalker Sync
+
usb:v3344*
ID_VENDOR_FROM_DATABASE=Leaguer Microelectronics (LME)
usb:v3344p3744*
ID_MODEL_FROM_DATABASE=OEM PC Remote
+usb:v348F*
+ ID_VENDOR_FROM_DATABASE=ISY
+
+usb:v348Fp2322*
+ ID_MODEL_FROM_DATABASE=Wireless Presenter
+
usb:v3504*
ID_VENDOR_FROM_DATABASE=Micro Star
usb:v3538p0054*
ID_MODEL_FROM_DATABASE=Flash Drive (2GB)
+usb:v3538p0901*
+ ID_MODEL_FROM_DATABASE=Traveling Disk U273 (4GB)
+
usb:v3579*
ID_VENDOR_FROM_DATABASE=DIVA
ID_VENDOR_FROM_DATABASE=Sharkoon
usb:v357Dp7788*
- ID_MODEL_FROM_DATABASE=QuickPort XT
+ ID_MODEL_FROM_DATABASE=JMicron JMS567 ATA/ATAPI Bridge
usb:v3636*
ID_VENDOR_FROM_DATABASE=InVibro
+usb:v3767*
+ ID_VENDOR_FROM_DATABASE=Fanatec
+
+usb:v3767p0101*
+ ID_MODEL_FROM_DATABASE=Speedster 3 Forceshock Wheel
+
usb:v3838*
ID_VENDOR_FROM_DATABASE=WEM
usb:v3838p0001*
ID_MODEL_FROM_DATABASE=5-in-1 Card Reader
+usb:v3838p1031*
+ ID_MODEL_FROM_DATABASE=2.4G Wireless Mouse
+
usb:v3923*
ID_VENDOR_FROM_DATABASE=National Instruments Corp.
usb:v3923p2F90*
ID_MODEL_FROM_DATABASE=DAQPad-6052E
-usb:v3923p702B*
+usb:v3923p702A*
ID_MODEL_FROM_DATABASE=GPIB-USB-B
+usb:v3923p702B*
+ ID_MODEL_FROM_DATABASE=GPIB-USB-B Initialization
+
usb:v3923p703C*
ID_MODEL_FROM_DATABASE=USB-485 RS485 Cable
usb:v3923p709B*
ID_MODEL_FROM_DATABASE=GPIB-USB-HS
+usb:v3923p7166*
+ ID_MODEL_FROM_DATABASE=USB-8451
+
+usb:v3923p716E*
+ ID_MODEL_FROM_DATABASE=USB-8451 Firmware Loader
+
+usb:v3923p717A*
+ ID_MODEL_FROM_DATABASE=USB-6008
+
+usb:v3923p717B*
+ ID_MODEL_FROM_DATABASE=USB-6009
+
+usb:v3923p71D6*
+ ID_MODEL_FROM_DATABASE=USB-6008 OEM
+
+usb:v3923p71D7*
+ ID_MODEL_FROM_DATABASE=USB-6009 OEM
+
+usb:v3923p71D8*
+ ID_MODEL_FROM_DATABASE=USB-6009 OEM
+
usb:v3923p7254*
ID_MODEL_FROM_DATABASE=NI MIO (data acquisition card) firmware updater
usb:v3923p729E*
ID_MODEL_FROM_DATABASE=USB-6251 (OEM) data acquisition card
+usb:v3923p7346*
+ ID_MODEL_FROM_DATABASE=USB-6229
+
+usb:v3923p755B*
+ ID_MODEL_FROM_DATABASE=myDAQ
+
+usb:v3923p76AF*
+ ID_MODEL_FROM_DATABASE=USB-6000
+
+usb:v3923p76B0*
+ ID_MODEL_FROM_DATABASE=USB-6000 OEM
+
+usb:v3923p76BF*
+ ID_MODEL_FROM_DATABASE=USB-6001
+
+usb:v3923p76C0*
+ ID_MODEL_FROM_DATABASE=USB-6001 OEM
+
+usb:v3923p76C4*
+ ID_MODEL_FROM_DATABASE=USB-6002
+
+usb:v3923p76C5*
+ ID_MODEL_FROM_DATABASE=USB-6002 OEM
+
+usb:v3923p76C6*
+ ID_MODEL_FROM_DATABASE=USB-6003
+
+usb:v3923p76C7*
+ ID_MODEL_FROM_DATABASE=USB-6003 OEM
+
usb:v40BB*
ID_VENDOR_FROM_DATABASE=I-O Data
ID_MODEL_FROM_DATABASE=SK-8125 Keyboard
usb:v413Cp2003*
- ID_MODEL_FROM_DATABASE=Keyboard
+ ID_MODEL_FROM_DATABASE=Keyboard SK-8115
usb:v413Cp2005*
ID_MODEL_FROM_DATABASE=RT7D50 Keyboard
ID_MODEL_FROM_DATABASE=SK-3106 Keyboard
usb:v413Cp2101*
- ID_MODEL_FROM_DATABASE=SmartCard Reader Keyboard
+ ID_MODEL_FROM_DATABASE=SK-3205 SmartCard Reader Keyboard
usb:v413Cp2105*
ID_MODEL_FROM_DATABASE=Model L100 Keyboard
usb:v413Cp2106*
- ID_MODEL_FROM_DATABASE=Dell QuietKey Keyboard
+ ID_MODEL_FROM_DATABASE=QuietKey Keyboard
+
+usb:v413Cp2107*
+ ID_MODEL_FROM_DATABASE=KB212-B Quiet Key Keyboard
+
+usb:v413Cp2113*
+ ID_MODEL_FROM_DATABASE=KB216 Wired Keyboard
+
+usb:v413Cp2134*
+ ID_MODEL_FROM_DATABASE=Hub of E-Port Replicator
+
+usb:v413Cp21D7*
+ ID_MODEL_FROM_DATABASE=Dell Wireless 5560 HSPA+ Mobile Broadband Modem
usb:v413Cp2500*
ID_MODEL_FROM_DATABASE=DRAC4 Remote Access Card
+usb:v413Cp2501*
+ ID_MODEL_FROM_DATABASE=Keyboard and mouse dongle
+
usb:v413Cp2513*
ID_MODEL_FROM_DATABASE=internal USB Hub of E-Port Replicator
usb:v413Cp3016*
ID_MODEL_FROM_DATABASE=Optical 5-Button Wheel Mouse
+usb:v413Cp301A*
+ ID_MODEL_FROM_DATABASE=Dell MS116 Optical Mouse
+
+usb:v413Cp301B*
+ ID_MODEL_FROM_DATABASE=Universal Bluetooth Receiver
+
usb:v413Cp3200*
ID_MODEL_FROM_DATABASE=Mouse
usb:v413Cp5128*
ID_MODEL_FROM_DATABASE=Photo AIO 928
+usb:v413Cp5133*
+ ID_MODEL_FROM_DATABASE=968 AIO Printer
+
usb:v413Cp5200*
ID_MODEL_FROM_DATABASE=Laser Printer
usb:v413Cp5226*
ID_MODEL_FROM_DATABASE=Printing Support
+usb:v413Cp5228*
+ ID_MODEL_FROM_DATABASE=Laser Printer 1720dn
+
usb:v413Cp5300*
ID_MODEL_FROM_DATABASE=Laser Printer
usb:v413Cp5401*
ID_MODEL_FROM_DATABASE=Laser Printer
+usb:v413Cp5404*
+ ID_MODEL_FROM_DATABASE=1250c Color Printer
+
usb:v413Cp5513*
ID_MODEL_FROM_DATABASE=WLA3310 Wireless Adapter [Intersil ISL3887]
+usb:v413Cp5534*
+ ID_MODEL_FROM_DATABASE=Hub of E-Port Replicator
+
usb:v413Cp5601*
ID_MODEL_FROM_DATABASE=Laser Printer 3100cn
usb:v413Cp5602*
ID_MODEL_FROM_DATABASE=Laser Printer 3000cn
+usb:v413Cp5607*
+ ID_MODEL_FROM_DATABASE=MFP Color Laser Printer 3115cn
+
usb:v413Cp5631*
ID_MODEL_FROM_DATABASE=Laser Printer 5100cn
+usb:v413Cp564A*
+ ID_MODEL_FROM_DATABASE=C1765 series Multifunction Color LaserPrinter, Scanner & Copier
+
usb:v413Cp5905*
ID_MODEL_FROM_DATABASE=Printing Support
usb:v413Cp8142*
ID_MODEL_FROM_DATABASE=Mobile 360 in DFU
+usb:v413Cp8143*
+ ID_MODEL_FROM_DATABASE=Broadcom BCM20702A0 Bluetooth
+
usb:v413Cp8147*
ID_MODEL_FROM_DATABASE=F3507g Mobile Broadband Module
usb:v413Cp8187*
ID_MODEL_FROM_DATABASE=DW375 Bluetooth Module
+usb:v413Cp818E*
+ ID_MODEL_FROM_DATABASE=DW5560 miniPCIe HSPA+ Mobile Broadband Modem
+
+usb:v413Cp8197*
+ ID_MODEL_FROM_DATABASE=BCM20702A0 Bluetooth Module
+
+usb:v413Cp81A0*
+ ID_MODEL_FROM_DATABASE=Wireless 5808 Mobile Broadband (Sierra Wireless MC7355 Mini PCIE, 4G UMTS,HSDPA,HSPA+,LTE,1xRTT,EVDO Rev A,GSM,GPRS)
+
+usb:v413Cp81A3*
+ ID_MODEL_FROM_DATABASE=Hub of E-Port Replicator
+
+usb:v413Cp81A8*
+ ID_MODEL_FROM_DATABASE=Wireless 5808 Mobile Broadband (Sierra Wireless Mini PCIE, 4G UMTS,HSDPA,HSPA+,LTE,1xRTT,EVDO Rev A,GSM,GPRS)
+
usb:v413Cp8501*
ID_MODEL_FROM_DATABASE=Bluetooth Adapter
+usb:v413Cp9001*
+ ID_MODEL_FROM_DATABASE=ATA Bridge
+
+usb:v413Cp9009*
+ ID_MODEL_FROM_DATABASE=Portable Device
+
usb:v413Cp9500*
ID_MODEL_FROM_DATABASE=USB CP210x UART Bridge Controller [DW700]
usb:v413CpA005*
ID_MODEL_FROM_DATABASE=Internal 2.0 Hub
+usb:v413CpA101*
+ ID_MODEL_FROM_DATABASE=Internal Dual SD Card module
+
+usb:v413CpA102*
+ ID_MODEL_FROM_DATABASE=iDRAC Virtual NIC
+
+usb:v413CpA503*
+ ID_MODEL_FROM_DATABASE=AC511 Sound Bar
+
usb:v413CpA700*
ID_MODEL_FROM_DATABASE=Hub (in 1905FP LCD Monitor)
+usb:v413CpB007*
+ ID_MODEL_FROM_DATABASE=Streak 5 Android Tablet
+
usb:v4146*
ID_VENDOR_FROM_DATABASE=USBest Technology
usb:v4317p0720*
ID_MODEL_FROM_DATABASE=Dynex DX-BUSB
+usb:v4317p0721*
+ ID_MODEL_FROM_DATABASE=Dynex DX-EBUSB
+
usb:v4348*
ID_VENDOR_FROM_DATABASE=WinChipHead
usb:v4348p5523*
- ID_MODEL_FROM_DATABASE=USB->RS 232 adapter with Prolifec PL 2303 chipset
+ ID_MODEL_FROM_DATABASE=USB->RS 232 adapter with Prolific PL 2303 chipset
usb:v4348p5537*
ID_MODEL_FROM_DATABASE=13.56Mhz RFID Card Reader and Writer
usb:v4670p9394*
ID_MODEL_FROM_DATABASE=Game Cube USB Memory Adaptor 64M
+usb:v46F4*
+ ID_VENDOR_FROM_DATABASE=QEMU
+
usb:v4752*
ID_VENDOR_FROM_DATABASE=Miditech
usb:v4971*
ID_VENDOR_FROM_DATABASE=SimpleTech
+usb:v4971p1004*
+ ID_MODEL_FROM_DATABASE=Hitachi LifeStudio Desk (3.5" HDD) [w/o flash key]
+
+usb:v4971p1013*
+ ID_MODEL_FROM_DATABASE=Touro Desk Pro
+
+usb:v4971p1015*
+ ID_MODEL_FROM_DATABASE=Touro Desk 3.0
+
+usb:v4971p8001*
+ ID_MODEL_FROM_DATABASE=G-Tech G-DRIVE Mobile
+
usb:v4971pCB01*
ID_MODEL_FROM_DATABASE=SP-U25/120G
+usb:v4971pCD15*
+ ID_MODEL_FROM_DATABASE=Simple Drive Mini (2.5" HDD)
+
+usb:v4971pCE07*
+ ID_MODEL_FROM_DATABASE=SimpleDrive (3.5" HDD)
+
+usb:v4971pCE12*
+ ID_MODEL_FROM_DATABASE=FV-U35
+
usb:v4971pCE17*
ID_MODEL_FROM_DATABASE=1TB SimpleDrive II USB External Hard Drive
+usb:v4971pCE18*
+ ID_MODEL_FROM_DATABASE=(re)Drive
+
+usb:v4971pCE21*
+ ID_MODEL_FROM_DATABASE=JMicron JM20329 SATA Bridge [eg. HITACHI SimpleDrive mini]
+
+usb:v4971pCE22*
+ ID_MODEL_FROM_DATABASE=Hitachi SimpleTough (3.5" HDD)
+
usb:v4D46*
ID_VENDOR_FROM_DATABASE=Musical Fidelity
usb:v5032p0FA1*
ID_MODEL_FROM_DATABASE=Grandtec USB1.1 DVB-T (warm)
-usb:v5041*
- ID_VENDOR_FROM_DATABASE=Linksys (?)
-
-usb:v5041p2234*
- ID_MODEL_FROM_DATABASE=WUSB54G v1 802.11g Adapter [Intersil ISL3886]
-
-usb:v5041p2235*
- ID_MODEL_FROM_DATABASE=WUSB54GP v1 802.11g Adapter [Intersil ISL3886]
-
usb:v50C2*
ID_VENDOR_FROM_DATABASE=Averatec (?)
usb:v50C2p4013*
ID_MODEL_FROM_DATABASE=WLAN Adapter
+usb:v5131*
+ ID_VENDOR_FROM_DATABASE=MSR
+
+usb:v5131p2007*
+ ID_MODEL_FROM_DATABASE=MSR-101U Mini HID magnetic card reader
+
usb:v5173*
ID_VENDOR_FROM_DATABASE=Sweex
usb:v5219p1001*
ID_MODEL_FROM_DATABASE=Cetus CDC Device
+usb:v5332*
+ ID_VENDOR_FROM_DATABASE=Clearly Superior Technologies, Inc.
+
+usb:v5332p1300*
+ ID_MODEL_FROM_DATABASE=CST2545-5W (L-Trac)
+
usb:v5345*
ID_VENDOR_FROM_DATABASE=Owon
usb:v534Cp0001*
ID_MODEL_FROM_DATABASE=Bitcoin Wallet [TREZOR]
+usb:v534Cp0002*
+ ID_MODEL_FROM_DATABASE=Bitcoin Wallet [TREZOR v2]
+
+usb:v534D*
+ ID_VENDOR_FROM_DATABASE=MacroSilicon
+
+usb:v534Dp0021*
+ ID_MODEL_FROM_DATABASE=MS210x Video Grabber [EasierCAP]
+
+usb:v534Dp6021*
+ ID_MODEL_FROM_DATABASE=VGA Display Adapter
+
usb:v5354*
ID_VENDOR_FROM_DATABASE=Meyer Instruments (MIS)
usb:v5543p0042*
ID_MODEL_FROM_DATABASE=Tablet PF1209
+usb:v5543p004A*
+ ID_MODEL_FROM_DATABASE=XP-Pen Artist 10S tablet
+
+usb:v5543p004D*
+ ID_MODEL_FROM_DATABASE=Tablet Monitor MSP19U
+
usb:v5543p0064*
ID_MODEL_FROM_DATABASE=Aiptek HyperPen 10000U
+usb:v5543p3031*
+ ID_MODEL_FROM_DATABASE=Graphics tablet [DrawImage G3, Ugee G3]
+
usb:v5555*
ID_VENDOR_FROM_DATABASE=Epiphan Systems Inc.
usb:v5555p3422*
ID_MODEL_FROM_DATABASE=DVI2USB Duo
+usb:v5555p3500*
+ ID_MODEL_FROM_DATABASE=DVI2USB3
+
+usb:v5555p3501*
+ ID_MODEL_FROM_DATABASE=DVI2USB3 Rev3
+
+usb:v5555p3510*
+ ID_MODEL_FROM_DATABASE=DVI2USB3_ET
+
+usb:v5555p3520*
+ ID_MODEL_FROM_DATABASE=SDI2USB3
+
usb:v55AA*
ID_VENDOR_FROM_DATABASE=OnSpec Electronic, Inc.
usb:v5986p0102*
ID_MODEL_FROM_DATABASE=Crystal Eye Webcam
+usb:v5986p0137*
+ ID_MODEL_FROM_DATABASE=HP Webcam
+
+usb:v5986p0141*
+ ID_MODEL_FROM_DATABASE=BisonCam, NB Pro
+
+usb:v5986p0149*
+ ID_MODEL_FROM_DATABASE=HP Webcam-101
+
+usb:v5986p014C*
+ ID_MODEL_FROM_DATABASE=MSI Integrated Webcam
+
usb:v5986p01A6*
ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam
usb:v5986p0200*
ID_MODEL_FROM_DATABASE=OrbiCam
+usb:v5986p0202*
+ ID_MODEL_FROM_DATABASE=Fujitsu Webcam
+
usb:v5986p0203*
ID_MODEL_FROM_DATABASE=BisonCam NB Pro 1300
+usb:v5986p0205*
+ ID_MODEL_FROM_DATABASE=Lenovo EasyCamera
+
+usb:v5986p0217*
+ ID_MODEL_FROM_DATABASE=Integrated Webcam
+
usb:v5986p0241*
ID_MODEL_FROM_DATABASE=BisonCam, NB Pro
+usb:v5986p0268*
+ ID_MODEL_FROM_DATABASE=SunplusIT INC. Integrated Camera
+
+usb:v5986p026A*
+ ID_MODEL_FROM_DATABASE=Integrated Camera
+
+usb:v5986p0292*
+ ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam
+
+usb:v5986p0294*
+ ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam
+
+usb:v5986p0295*
+ ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam
+
+usb:v5986p0299*
+ ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam
+
+usb:v5986p029C*
+ ID_MODEL_FROM_DATABASE=Lenovo EasyCamera
+
+usb:v5986p02AC*
+ ID_MODEL_FROM_DATABASE=HP TrueVision HD Webcam
+
usb:v5986p02D0*
ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam [R5U877]
+usb:v5986p02D2*
+ ID_MODEL_FROM_DATABASE=ThinkPad Integrated Camera
+
+usb:v5986p02D5*
+ ID_MODEL_FROM_DATABASE=Integrated Camera
+
+usb:v5986p03B3*
+ ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam
+
usb:v5986p03D0*
ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam [R5U877]
+usb:v5986p0400*
+ ID_MODEL_FROM_DATABASE=BisonCam, NB Pro
+
+usb:v5986p0535*
+ ID_MODEL_FROM_DATABASE=Lenovo EasyCamera integrated webcam
+
+usb:v5986p055A*
+ ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam
+
+usb:v5986p0652*
+ ID_MODEL_FROM_DATABASE=Lenovo EasyCamera
+
+usb:v5986p0670*
+ ID_MODEL_FROM_DATABASE=Lenovo EasyCamera
+
+usb:v5986p0671*
+ ID_MODEL_FROM_DATABASE=Lenovo EasyCamera
+
+usb:v5986p0706*
+ ID_MODEL_FROM_DATABASE=ThinkPad P50 Integrated Camera
+
+usb:v5986p2113*
+ ID_MODEL_FROM_DATABASE=SunplusIT Integrated Camera
+
+usb:v5986pA002*
+ ID_MODEL_FROM_DATABASE=Lenovo EasyCamera Integrated Webcam
+
usb:v59E3*
ID_VENDOR_FROM_DATABASE=Nonolith Labs
ID_MODEL_FROM_DATABASE=802.11a/b/g/n USB Wireless LAN Card
usb:v5A57p0290*
- ID_MODEL_FROM_DATABASE=ZW-N290 802.11n [Realtek RTL8192SU]
+ ID_MODEL_FROM_DATABASE=ZW-N290 802.11n [Realtek RTL8192U]
usb:v5A57p5257*
ID_MODEL_FROM_DATABASE=Metronic 495257 wifi 802.11ng
usb:v6000*
ID_VENDOR_FROM_DATABASE=Beholder International Ltd.
+usb:v6000p0001*
+ ID_MODEL_FROM_DATABASE=Trident TVBOX Video Grabber
+
usb:v6000pDEC0*
ID_MODEL_FROM_DATABASE=TV Wander
usb:v601Ap4740*
ID_MODEL_FROM_DATABASE=XBurst Jz4740 boot mode
+usb:v601Ap4760*
+ ID_MODEL_FROM_DATABASE=JZ4760 Boot Device
+
+usb:v6022*
+ ID_VENDOR_FROM_DATABASE=Xektek
+
+usb:v6022p0500*
+ ID_MODEL_FROM_DATABASE=SuperPro Universal Device Programmer
+
usb:v6189*
ID_VENDOR_FROM_DATABASE=Sitecom
usb:v6189p182D*
- ID_MODEL_FROM_DATABASE=USB 2.0 Ethernet
+ ID_MODEL_FROM_DATABASE=LN-029 10/100 Ethernet Adapter
usb:v6189p2068*
ID_MODEL_FROM_DATABASE=USB to serial cable (v2)
usb:v6244p0501*
ID_MODEL_FROM_DATABASE=Touch Sensitive Intelligent Control Keypad STICK2B
+usb:v6244p0520*
+ ID_MODEL_FROM_DATABASE=Touch Sensitive Intelligent Control Keypad (STICK2C Firmware download, 32/64bits
+
+usb:v6244p0521*
+ ID_MODEL_FROM_DATABASE=Touch Sensitive Intelligent Control Keypad (STICK2C, 32/64bits)
+
+usb:v6244p0540*
+ ID_MODEL_FROM_DATABASE=Sunlite Universal Smart Handy Interface (SUSHI1A Firmware download, 32/64bits)
+
+usb:v6244p0541*
+ ID_MODEL_FROM_DATABASE=Sunlite Universal Smart Handy Interface (SUSHI1A, 32/64bits)
+
+usb:v6244p0570*
+ ID_MODEL_FROM_DATABASE=Touch Sensitive Intelligent Control Keypad (STICK4A Firmware download, 32/64bits)
+
+usb:v6244p0571*
+ ID_MODEL_FROM_DATABASE=Touch Sensitive Intelligent Control Keypad (STICK4A, 32/64bits)
+
+usb:v6244p0580*
+ ID_MODEL_FROM_DATABASE=Touch Sensitive Intelligent Control Keypad (STICK5A Firmware download, 32/64bits)
+
+usb:v6244p0581*
+ ID_MODEL_FROM_DATABASE=Touch Sensitive Intelligent Control Keypad (STICK5A, 32/64bits)
+
+usb:v6244p0590*
+ ID_MODEL_FROM_DATABASE=Intelligent Dmx Interface (SIUDI9S Firmware Download, 32/64bits)
+
+usb:v6244p0591*
+ ID_MODEL_FROM_DATABASE=Intelligent Dmx Interface (SIUDI9S, 32/64bits)
+
+usb:v6244p0600*
+ ID_MODEL_FROM_DATABASE=Intelligent Dmx Interface (SIUDI9M Firmware Download, 32/64bits)
+
+usb:v6244p0601*
+ ID_MODEL_FROM_DATABASE=Intelligent Dmx Interface (SIUDI9M, 32/64bits)
+
+usb:v6244p0610*
+ ID_MODEL_FROM_DATABASE=Intelligent Dmx Interface SIUDI10A Firmware Download
+
+usb:v6244p0611*
+ ID_MODEL_FROM_DATABASE=Intelligent Dmx Interface SIUDI10A
+
usb:v6253*
ID_VENDOR_FROM_DATABASE=TwinHan Technology Co., Ltd
ID_VENDOR_FROM_DATABASE=CoreLogic, Inc.
usb:v6472*
- ID_VENDOR_FROM_DATABASE=Unknown (Sony?)
+ ID_VENDOR_FROM_DATABASE=Sony Corp.
usb:v6472p01C8*
ID_MODEL_FROM_DATABASE=PlayStation Portable [Mass Storage]
usb:v6547p0232*
ID_MODEL_FROM_DATABASE=ARK3116 Serial
+usb:v6557*
+ ID_VENDOR_FROM_DATABASE=Emtec
+
+usb:v6557p5500*
+ ID_MODEL_FROM_DATABASE=Mass Storage Device
+
+usb:v6557p8005*
+ ID_MODEL_FROM_DATABASE=Car Key
+
usb:v6615*
ID_VENDOR_FROM_DATABASE=IRTOUCHSYSTEMS Co. Ltd.
usb:v6615p0001*
ID_MODEL_FROM_DATABASE=Touchscreen
+usb:v6615p0020*
+ ID_MODEL_FROM_DATABASE=IRTOUCH InfraRed TouchScreen
+
+usb:v6615p0081*
+ ID_MODEL_FROM_DATABASE=TouchScreen
+
usb:v6666*
ID_VENDOR_FROM_DATABASE=Prototype product Vendor ID
usb:v6666p0667*
ID_MODEL_FROM_DATABASE=WiseGroup Smart Joy PSX, PS-PC Smart JoyPad
+usb:v6666p1C40*
+ ID_MODEL_FROM_DATABASE=TELEMIC 802.15.4 Sensor node (Bootloader)
+
+usb:v6666p1C41*
+ ID_MODEL_FROM_DATABASE=TELEMIC 802.15.4 Sensor node
+
usb:v6666p2667*
ID_MODEL_FROM_DATABASE=JCOP BlueZ Smartcard reader
usb:v6677p8811*
ID_MODEL_FROM_DATABASE=Deluxe Dance Mat
+usb:v675D*
+ ID_VENDOR_FROM_DATABASE=Humanscale
+
+usb:v675Dp062A*
+ ID_MODEL_FROM_DATABASE=Switch Mouse
+
usb:v6891*
ID_VENDOR_FROM_DATABASE=3Com
usb:v726Cp2149*
ID_MODEL_FROM_DATABASE=EntropyKing Random Number Generator
+usb:v7302*
+ ID_VENDOR_FROM_DATABASE=Solinftec
+
+usb:v7302p0001*
+ ID_MODEL_FROM_DATABASE=HUB 4X232
+
usb:v734C*
ID_VENDOR_FROM_DATABASE=TBS Technologies China
ID_VENDOR_FROM_DATABASE=Edimax Technology Co., Ltd
usb:v7392p7711*
- ID_MODEL_FROM_DATABASE=EW-7711UTn nLite Wireless Adapter [Ralink RT2870]
+ ID_MODEL_FROM_DATABASE=EW-7711UTn nLite Wireless Adapter [Ralink RT3070]
usb:v7392p7717*
- ID_MODEL_FROM_DATABASE=EW-7717UN 802.11n Wireless Adapter [Ralink RT2870]
+ ID_MODEL_FROM_DATABASE=EW-7717UN 802.11n Wireless Adapter [Ralink RT2770]
usb:v7392p7718*
ID_MODEL_FROM_DATABASE=EW-7718UN 802.11n Wireless Adapter [Ralink RT2870]
usb:v7392p7722*
- ID_MODEL_FROM_DATABASE=EW-7722UTn 802.11n Wireless Adapter [Ralink RT307x]
+ ID_MODEL_FROM_DATABASE=EW-7722UTn 802.11n Wireless Adapter [Ralink RT3072]
+
+usb:v7392p7733*
+ ID_MODEL_FROM_DATABASE=EW-7733UnD 802.11abgn 3x3:3 [Ralink RT3573]
usb:v7392p7811*
ID_MODEL_FROM_DATABASE=EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
+usb:v7392p7822*
+ ID_MODEL_FROM_DATABASE=EW-7612UAn V2 802.11n Wireless Adapter [Realtek RTL8192CU]
+
+usb:v7392pA611*
+ ID_MODEL_FROM_DATABASE=EW-7611ULB 802.11b/g/n and Bluetooth 4.0 Adapter
+
+usb:v7392pA711*
+ ID_MODEL_FROM_DATABASE=EW-7711MAC 802.11ac Wireless Adapter
+
+usb:v7392pA811*
+ ID_MODEL_FROM_DATABASE=EW-7811UTC 802.11ac Wireless Adapter
+
+usb:v7392pB711*
+ ID_MODEL_FROM_DATABASE=EW-7722UAC 802.11a/b/g/n/ac (2x2) Wireless Adapter [MediaTek MT7612U]
+
+usb:v7392pB822*
+ ID_MODEL_FROM_DATABASE=EW-7822ULC 802.11ac Wireless Adapter [Realtek RTL8812AU]
+
+usb:v73D8*
+ ID_VENDOR_FROM_DATABASE=Progeny Dental Equipment Specialists
+
+usb:v73D8p0104*
+ ID_MODEL_FROM_DATABASE=VetPro DR, Size 1
+
+usb:v73D8p0105*
+ ID_MODEL_FROM_DATABASE=VetPro DR, Size 2
+
+usb:v7669*
+ ID_VENDOR_FROM_DATABASE=Venable Instruments
+
+usb:v7669p350C*
+ ID_MODEL_FROM_DATABASE=Model 350c, Frequency Response Analyzer
+
+usb:v7669p5140*
+ ID_MODEL_FROM_DATABASE=Model 5140, Frequency Response Analyzer
+
+usb:v7669p6305*
+ ID_MODEL_FROM_DATABASE=Model 6305, Frequency Response Analyzer
+
+usb:v7669p6320*
+ ID_MODEL_FROM_DATABASE=Model 6320, Frequency Response Analyzer
+
+usb:v7669p6340*
+ ID_MODEL_FROM_DATABASE=Model 6340, Frequency Response Analyzer
+
+usb:v7669p7405*
+ ID_MODEL_FROM_DATABASE=Model 7405, Frequency Response Analyzer
+
+usb:v7669p7420*
+ ID_MODEL_FROM_DATABASE=Model 7420, Frequency Response Analyzer
+
+usb:v7669p7440*
+ ID_MODEL_FROM_DATABASE=Model 7440, Frequency Response Analyzer
+
+usb:v7669p8805*
+ ID_MODEL_FROM_DATABASE=Model 8805, Frequency Response Analyzer
+
+usb:v7669p8820*
+ ID_MODEL_FROM_DATABASE=Model 8820, Frequency Response Analyzer
+
+usb:v7669p8840*
+ ID_MODEL_FROM_DATABASE=Model 8840, Frequency Response Analyzer
+
+usb:v7825*
+ ID_VENDOR_FROM_DATABASE=Other World Computing
+
+usb:v7825pA2A4*
+ ID_MODEL_FROM_DATABASE=External SATA Hard Drive Adapter cable PA023U3
+
+usb:v7825pB0B3*
+ ID_MODEL_FROM_DATABASE=miniStack MAX
+
+usb:v8070*
+ ID_VENDOR_FROM_DATABASE=ACCES I/O Products, Inc.
+
+usb:v8070p8003*
+ ID_MODEL_FROM_DATABASE=USB-DIO-96
+
+usb:v8070p8070*
+ ID_MODEL_FROM_DATABASE=USB-AO16-16A
+
usb:v8086*
ID_VENDOR_FROM_DATABASE=Intel Corp.
usb:v8086p0188*
ID_MODEL_FROM_DATABASE=WiMAX Connection 2400m
+usb:v8086p0189*
+ ID_MODEL_FROM_DATABASE=Centrino Advanced-N 6230 Bluetooth adapter
+
usb:v8086p0200*
ID_MODEL_FROM_DATABASE=AnyPoint(TM) Wireless II Network 11Mbps Adapter [Atmel AT76C503A]
usb:v8086p0431*
- ID_MODEL_FROM_DATABASE=Intel Pro Video PC Camera
+ ID_MODEL_FROM_DATABASE=Pro Video PC Camera
usb:v8086p0510*
ID_MODEL_FROM_DATABASE=Digital Movie Creator
usb:v8086p07D3*
ID_MODEL_FROM_DATABASE=BLOB boot loader firmware
+usb:v8086p07DC*
+ ID_MODEL_FROM_DATABASE=Bluetooth 4.0* Smart Ready (low energy)
+
+usb:v8086p0B07*
+ ID_MODEL_FROM_DATABASE=RealSense D435
+
usb:v8086p0DAD*
ID_MODEL_FROM_DATABASE=Cherry MiniatureCard Keyboard
usb:v8086p1111*
ID_MODEL_FROM_DATABASE=PRO/Wireless 2011B 802.11b Adapter [Intersil PRISM 2.5]
+usb:v8086p1122*
+ ID_MODEL_FROM_DATABASE=Integrated Hub
+
usb:v8086p1134*
ID_MODEL_FROM_DATABASE=Hollister Mobile Monitor
usb:v8086p8602*
ID_MODEL_FROM_DATABASE=Miniature Card Slot
+usb:v8086p8C26*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series EHCI #1
+
+usb:v8086p8C2D*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series EHCI #2
+
+usb:v8086p8C31*
+ ID_MODEL_FROM_DATABASE=eXtensible Host Controller
+
usb:v8086p9303*
- ID_MODEL_FROM_DATABASE=Intel 8x930Hx Hub
+ ID_MODEL_FROM_DATABASE=8x930Hx Hub
usb:v8086p9500*
ID_MODEL_FROM_DATABASE=CE 9500 DVB-T
usb:v8086pC013*
ID_MODEL_FROM_DATABASE=Wireless HID Station
+usb:v8086pDEAD*
+ ID_MODEL_FROM_DATABASE=Galileo
+
usb:v8086pF001*
ID_MODEL_FROM_DATABASE=XScale PXA27x Bulverde flash
usb:v8087p0024*
ID_MODEL_FROM_DATABASE=Integrated Rate Matching Hub
+usb:v8087p0025*
+ ID_MODEL_FROM_DATABASE=Wireless-AC 9260 Bluetooth Adapter
+
+usb:v8087p0029*
+ ID_MODEL_FROM_DATABASE=AX200 Bluetooth
+
+usb:v8087p0716*
+ ID_MODEL_FROM_DATABASE=Modem Flashloader
+
+usb:v8087p07DA*
+ ID_MODEL_FROM_DATABASE=Centrino Bluetooth Wireless Transceiver
+
+usb:v8087p07DC*
+ ID_MODEL_FROM_DATABASE=Bluetooth wireless interface
+
+usb:v8087p07EB*
+ ID_MODEL_FROM_DATABASE=Oaktrail tablet
+
+usb:v8087p0A2A*
+ ID_MODEL_FROM_DATABASE=Bluetooth wireless interface
+
+usb:v8087p0A2B*
+ ID_MODEL_FROM_DATABASE=Bluetooth wireless interface
+
+usb:v8087p0A9E*
+ ID_MODEL_FROM_DATABASE=Edison
+
+usb:v8087p0AA7*
+ ID_MODEL_FROM_DATABASE=Wireless-AC 3168 Bluetooth
+
+usb:v8087p0AAA*
+ ID_MODEL_FROM_DATABASE=Bluetooth 9460/9560 Jefferson Peak (JfP)
+
+usb:v8087p0FFF*
+ ID_MODEL_FROM_DATABASE=Intel Android Bootloader Interface
+
+usb:v8087p8000*
+ ID_MODEL_FROM_DATABASE=Integrated Rate Matching Hub
+
+usb:v8087p8001*
+ ID_MODEL_FROM_DATABASE=Integrated Hub
+
+usb:v8087p8002*
+ ID_MODEL_FROM_DATABASE=8 channel internal hub
+
+usb:v8087p8008*
+ ID_MODEL_FROM_DATABASE=Integrated Rate Matching Hub
+
+usb:v8087p800A*
+ ID_MODEL_FROM_DATABASE=Hub
+
usb:v80EE*
ID_VENDOR_FROM_DATABASE=VirtualBox
usb:v80EEp0021*
ID_MODEL_FROM_DATABASE=USB Tablet
+usb:v80EEp0022*
+ ID_MODEL_FROM_DATABASE=multitouch tablet
+
usb:v8282*
ID_VENDOR_FROM_DATABASE=Keio
usb:v8282p3301*
ID_MODEL_FROM_DATABASE=Retro Adapter Mouse
+usb:v8301*
+ ID_VENDOR_FROM_DATABASE=Hapurs
+
+usb:v8301p0089*
+ ID_MODEL_FROM_DATABASE=HPBT05R 2.4 G Mini Wireless Touchpad Keyboard
+
usb:v8341*
ID_VENDOR_FROM_DATABASE=EGO Systems, Inc.
ID_MODEL_FROM_DATABASE=JetFlash
usb:v8564p4000*
- ID_MODEL_FROM_DATABASE=RDF8
+ ID_MODEL_FROM_DATABASE=microSD/SD/CF UHS-II Card Reader [RDF8, RDF9]
+
+usb:v8564p6000*
+ ID_MODEL_FROM_DATABASE=digital photo frame PF830
+
+usb:v8564p6002*
+ ID_MODEL_FROM_DATABASE=digital photo frame PF830
+
+usb:v8564p7000*
+ ID_MODEL_FROM_DATABASE=StoreJet 25H3
usb:v8644*
ID_VENDOR_FROM_DATABASE=Intenso GmbG
usb:v8E06pF700*
ID_MODEL_FROM_DATABASE=DT225 Trackball
+usb:v8EA3*
+ ID_VENDOR_FROM_DATABASE=Doosl
+
+usb:v8EA3pA02C*
+ ID_MODEL_FROM_DATABASE=Wireless Presenter Receiver
+
usb:v9016*
ID_VENDOR_FROM_DATABASE=Sitecom
usb:v9148p0004*
ID_MODEL_FROM_DATABASE=R3 Compatible Device
+usb:v9516*
+ ID_VENDOR_FROM_DATABASE=Studiologic
+
usb:v9710*
ID_VENDOR_FROM_DATABASE=MosChip Semiconductor
usb:v9710p7780*
ID_MODEL_FROM_DATABASE=MCS7780 4Mbps Fast IrDA Adapter
+usb:v9710p7784*
+ ID_MODEL_FROM_DATABASE=MCS7784 115.2Kb IrDA Adapter
+
+usb:v9710p7810*
+ ID_MODEL_FROM_DATABASE=MCS7810 Serial Port Adapter
+
+usb:v9710p7820*
+ ID_MODEL_FROM_DATABASE=MCS7820 Dual Serial Port Adapter
+
usb:v9710p7830*
ID_MODEL_FROM_DATABASE=MCS7830 10/100 Mbps Ethernet adapter
usb:v9710p7840*
ID_MODEL_FROM_DATABASE=MCS7820/MCS7840 2/4 port serial adapter
+usb:v9710p9990*
+ ID_MODEL_FROM_DATABASE=MCS9990 PCIe Host Controller
+
usb:v9849*
ID_VENDOR_FROM_DATABASE=Bestmedia CD Recordable GmbH & Co. KG
usb:v9849p0701*
ID_MODEL_FROM_DATABASE=Platinum MyDrive HP
+usb:v9886*
+ ID_VENDOR_FROM_DATABASE=Astro Gaming
+
+usb:v9886p0015*
+ ID_MODEL_FROM_DATABASE=A50
+
usb:v9999*
ID_VENDOR_FROM_DATABASE=Odeon
usb:v9E88p9E8F*
ID_MODEL_FROM_DATABASE=Plug Computer Basic [SheevaPlug]
+usb:vA014*
+ ID_VENDOR_FROM_DATABASE=Insignia (Best Buy)
+
+usb:vA014pB014*
+ ID_MODEL_FROM_DATABASE=Desktop Microphone NS-PAUM50
+
+usb:vA108*
+ ID_VENDOR_FROM_DATABASE=Ingenic Semiconductor Co.,Ltd
+
+usb:vA108p1000*
+ ID_MODEL_FROM_DATABASE=X1000
+
+usb:vA108p4775*
+ ID_MODEL_FROM_DATABASE=JZ4775 Boot Device
+
usb:vA128*
ID_VENDOR_FROM_DATABASE=AnMo Electronics Corp. / Dino-Lite (?)
usb:vA168p0618*
ID_MODEL_FROM_DATABASE=Dino-Lite Digital Microscope
+usb:vA466*
+ ID_VENDOR_FROM_DATABASE=Haikou Xingong Electronics Co.,Ltd
+
+usb:vA466p0A53*
+ ID_MODEL_FROM_DATABASE=TL866II Plus Device Programmer [MiniPRO]
+
usb:vA600*
- ID_VENDOR_FROM_DATABASE=Asix
+ ID_VENDOR_FROM_DATABASE=ASIX s.r.o.
+
+usb:vA600p5500*
+ ID_MODEL_FROM_DATABASE=zuban H2OPS - GPS for canoeing
+
+usb:vA600pA000*
+ ID_MODEL_FROM_DATABASE=SIGMA Logic Analyzer
+
+usb:vA600pA002*
+ ID_MODEL_FROM_DATABASE=EMUSB interface pro MU Beta
+
+usb:vA600pC000*
+ ID_MODEL_FROM_DATABASE=MREL Data Trap II
+
+usb:vA600pC001*
+ ID_MODEL_FROM_DATABASE=VUTS DMU4
+
+usb:vA600pC002*
+ ID_MODEL_FROM_DATABASE=Electrone MASH
+
+usb:vA600pC005*
+ ID_MODEL_FROM_DATABASE=MREL HTU HandiTrap cable
+
+usb:vA600pC006*
+ ID_MODEL_FROM_DATABASE=JRC COmeter
usb:vA600pE110*
ID_MODEL_FROM_DATABASE=OK1ZIA Davac 4.x
+usb:vA600pE112*
+ ID_MODEL_FROM_DATABASE=OK1ZIA Antenna rotator
+
+usb:vA600pE113*
+ ID_MODEL_FROM_DATABASE=OK1ZIA GPIO
+
+usb:vA600pE114*
+ ID_MODEL_FROM_DATABASE=OK1ZIA HD&Keyb
+
usb:vA727*
ID_VENDOR_FROM_DATABASE=3Com
usb:vA727p6897*
ID_MODEL_FROM_DATABASE=AR5523
+usb:vA88A*
+ ID_VENDOR_FROM_DATABASE=Clas Ohlsson
+
+usb:vA88Ap3003*
+ ID_MODEL_FROM_DATABASE=PCFree Multimedia Remote Control PC
+
usb:vAAAA*
ID_VENDOR_FROM_DATABASE=MXT
usb:vAAAAp8815*
ID_MODEL_FROM_DATABASE=microSD CardReader
+usb:vAAAAp8816*
+ ID_MODEL_FROM_DATABASE=microSD CardReader
+
+usb:vAB12*
+ ID_VENDOR_FROM_DATABASE=aplic
+
+usb:vAB12p34CD*
+ ID_MODEL_FROM_DATABASE=JMICRON JMS578 SATA 6Gb/s bridge
+
usb:vABCD*
- ID_VENDOR_FROM_DATABASE=Unknown
+ ID_VENDOR_FROM_DATABASE=LogiLink
+
+usb:vABCDp1234*
+ ID_MODEL_FROM_DATABASE=UDisk flash drive
+
+usb:vABCDp6104*
+ ID_MODEL_FROM_DATABASE=PCCloneEX Lite+ SATA docking station [QP0017]
usb:vABCDpCDEE*
ID_MODEL_FROM_DATABASE=Petcam
usb:vB58Ep9E84*
ID_MODEL_FROM_DATABASE=Yeti Stereo Microphone
+usb:vBA77*
+ ID_VENDOR_FROM_DATABASE=Clockmaker
+
+usb:vBA77p7147*
+ ID_MODEL_FROM_DATABASE=Agterbosch
+
usb:vC216*
ID_VENDOR_FROM_DATABASE=Card Device Expert Co., LTD
usb:vC251*
ID_VENDOR_FROM_DATABASE=Keil Software, Inc.
+usb:vC251p1705*
+ ID_MODEL_FROM_DATABASE=MCB2300
+
usb:vC251p2710*
ID_MODEL_FROM_DATABASE=ULink
+usb:vC251p2723*
+ ID_MODEL_FROM_DATABASE=ULink-ME
+
+usb:vC502*
+ ID_VENDOR_FROM_DATABASE=AGPTek
+
+usb:vC502p0029*
+ ID_MODEL_FROM_DATABASE=Rocker
+
usb:vCACE*
ID_VENDOR_FROM_DATABASE=CACE Technologies Inc.
ID_MODEL_FROM_DATABASE=AirPCAP Classic 802.11 packet capture adapter
usb:vCACEp0300*
- ID_MODEL_FROM_DATABASE=AirPcap NX [Atheros AR9001U-(2)NG]
+ ID_MODEL_FROM_DATABASE=AirPcap NX [Atheros AR9170+AR9104]
usb:vCD12*
ID_VENDOR_FROM_DATABASE=SMART TECHNOLOGY INDUSTRIAL LTD.
usb:vD209p0501*
ID_MODEL_FROM_DATABASE=Ultra-Stik Ultimarc Ultra-Stik Player 1
+usb:vD209p1571*
+ ID_MODEL_FROM_DATABASE=A-PAC Arcade Control Interface
+
usb:vD904*
ID_VENDOR_FROM_DATABASE=LogiLink
usb:vD904p0003*
ID_MODEL_FROM_DATABASE=Laser Mouse (ID0009A)
+usb:vE2B7*
+ ID_VENDOR_FROM_DATABASE=Jie Li
+
+usb:vE2B7p0811*
+ ID_MODEL_FROM_DATABASE=CD002
+
+usb:vE2B7p0812*
+ ID_MODEL_FROM_DATABASE=CD005 MP3 Player
+
usb:vE4E4*
ID_VENDOR_FROM_DATABASE=Xorcom Ltd.
ID_MODEL_FROM_DATABASE=Combined audio and video input device
usb:vEB1Ap2800*
- ID_MODEL_FROM_DATABASE=Terratec Cinergy 200
+ ID_MODEL_FROM_DATABASE=EM2800 Video Capture
usb:vEB1Ap2801*
- ID_MODEL_FROM_DATABASE=GrabBeeX+ Video Encoder
+ ID_MODEL_FROM_DATABASE=EM2801 Video Capture
+
+usb:vEB1Ap2820*
+ ID_MODEL_FROM_DATABASE=EM2820 Video Capture
+
+usb:vEB1Ap2821*
+ ID_MODEL_FROM_DATABASE=EM2820 Video Capture
+
+usb:vEB1Ap2840*
+ ID_MODEL_FROM_DATABASE=EM2840 Video Capture
+
+usb:vEB1Ap2841*
+ ID_MODEL_FROM_DATABASE=EM2840 Video Capture
+
+usb:vEB1Ap2861*
+ ID_MODEL_FROM_DATABASE=EasyCAP DC60+ [EM2861]
usb:vEB1Ap2863*
ID_MODEL_FROM_DATABASE=Video Grabber
usb:vEB1Ap50A6*
ID_MODEL_FROM_DATABASE=Gadmei UTV330 TV Box
+usb:vEB1Ap5166*
+ ID_MODEL_FROM_DATABASE=video grabber 28282
+
+usb:vEB1Ap5184*
+ ID_MODEL_FROM_DATABASE=VIDBOX NW06 [EM28281]
+
+usb:vEB1Ap8179*
+ ID_MODEL_FROM_DATABASE=Terratec Cinergy T2 Stick HD
+
+usb:vEB1ApE305*
+ ID_MODEL_FROM_DATABASE=KWorld PlusTV Analog Stick
+
usb:vEB1ApE355*
ID_MODEL_FROM_DATABASE=KWorld DVB-T 355U Digital TV Dongle
usb:vF003p6002*
ID_MODEL_FROM_DATABASE=PhotoSmart C500
+usb:vF007*
+ ID_VENDOR_FROM_DATABASE=Teslong
+
+usb:vF007pA999*
+ ID_MODEL_FROM_DATABASE=Endoscope Camera
+
+usb:vF007pB999*
+ ID_MODEL_FROM_DATABASE=Otoscope Camera
+
usb:vF182*
ID_VENDOR_FROM_DATABASE=Leap Motion
usb:vF182p0003*
ID_MODEL_FROM_DATABASE=Controller
+usb:vF3F0*
+ ID_VENDOR_FROM_DATABASE=CCT, Inc
+
+usb:vF3F0p0740*
+ ID_MODEL_FROM_DATABASE=multi-function device
+
+usb:vF3F0p1340*
+ ID_MODEL_FROM_DATABASE=multi-function printer
+
+usb:vF3F0p1440*
+ ID_MODEL_FROM_DATABASE=printer device
+
+usb:vF3F0p1921*
+ ID_MODEL_FROM_DATABASE=printer
+
usb:vF4EC*
ID_VENDOR_FROM_DATABASE=Atten Electronics / Siglent Technologies
usb:vF766p0001*
ID_MODEL_FROM_DATABASE=PC-Gamepad "Greystorm"
+usb:vFA11*
+ ID_VENDOR_FROM_DATABASE=DyingLight
+
+usb:vFA11p5AFE*
+ ID_MODEL_FROM_DATABASE=DyingLight
+
usb:vFC08*
ID_VENDOR_FROM_DATABASE=Conrad Electronic SE
usb:vFC08p0101*
ID_MODEL_FROM_DATABASE=MIDI Cable UA0037
+usb:vFF00*
+ ID_VENDOR_FROM_DATABASE=Power Delivery
+
usb:vFFEE*
ID_VENDOR_FROM_DATABASE=FNK Tech
EVDEV_ABS_35=::19
EVDEV_ABS_36=::19
+# Lenovo Thinkpad X1 Tablet Gen3
+evdev:input:b0003v17EFp60B5*
+ EVDEV_ABS_00=::12
+ EVDEV_ABS_01=::11
+ EVDEV_ABS_35=::12
+ EVDEV_ABS_36=::11
+
# Lenovo T460
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pn*ThinkPad*T460*
EVDEV_ABS_00=1266:5677:44
KEYBOARD_KEY_c6=break
KEYBOARD_KEY_94=reserved
-# Pavilion and Spectre x360 13 (Prevents random airplane mode activation)
+# Pavilion 13 x360 (Tablet mode and SYSRQ key)
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[pP][aA][vV][iI][lL][iI][oO][nN]*13*x360*:pvr*
+ KEYBOARD_KEY_d7=!f22 # touchpad off
+ KEYBOARD_KEY_d9=unknown
+ KEYBOARD_KEY_d2=sysrq # Fn+Print = SYSRQ
+
+# Spectre x360 13 (Prevents random airplane mode activation)
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[sS][pP][eE][cC][tT][rR][eE]*x360*13*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pn*[sS][pP][eE][cC][tT][rR][eE]*x360Convertible*:pvr*
-evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[pP][aA][vV][iI][lL][iI][oO][nN]*13*x360*:pvr*
KEYBOARD_KEY_d7=unknown
# Spectre x360 13
sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnVayne*
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
+# nocturne board (Google Pixel Slate)
+sensor:modalias:platform:cros-ec-accel:dmi:*Google_Nocturne*
+ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+
#########################################
# GP-electronic
#########################################
#########################################
# Umax
#########################################
+sensor:modalias:acpi:KIOX000A*:dmi:*:svnUMAX:pnVisionBook10WiPro:*
+ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+
sensor:modalias:acpi:SMO8500*:dmi:*:svnUMAX:pnVisionBook10WiPlus:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
mouse:usb:v046dpc332:name:Logitech Gaming Mouse G502:
# Logitech G502 HERO SE
mouse:usb:v046dpc08b:name:Logitech G502 HERO SE:
+# Logitech G502 Hero
+mouse:usb:v046dpc08b:name:Logitech G502 HERO Gaming Mouse:
MOUSE_DPI=1200@1000 *2400@1000 3200@1000 6400@1000
# Logitech G700 Laser Mouse (Wired)
mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:101b:
MOUSE_DPI=1000@125
+# Logitech M705 (newer version?)
+mouse:usb:v046dp406d:name:Logitech M705:
+ MOUSE_DPI=1000@167
+
# Logitech M305 Wireless Optical Mouse
mouse:usb:v046dpc52f:name:Logitech USB Receiver:
MOUSE_DPI=1000@170
shenzhen 518116\r
CN\r
\r
-94-E6-F7 (hex) Intel Corporate\r
-94E6F7 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
40-55-82 (hex) Nokia\r
405582 (base 16) Nokia\r
600 March Road\r
Shanghai 201203\r
CN\r
\r
-4C-1D-96 (hex) Intel Corporate\r
-4C1D96 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
88-7E-25 (hex) Extreme Networks, Inc.\r
887E25 (base 16) Extreme Networks, Inc.\r
6480 Via Del Oro\r
Lenoir City TN 37771\r
US\r
\r
-50-E0-85 (hex) Intel Corporate\r
-50E085 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
24-16-6D (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
24166D (base 16) HUAWEI TECHNOLOGIES CO.,LTD\r
No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
Nagaokakyo-shi Kyoto 617-8555\r
JP\r
\r
-DC-71-96 (hex) Intel Corporate\r
-DC7196 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
F8-E5-CF (hex) CGI IT UK LIMITED\r
F8E5CF (base 16) CGI IT UK LIMITED\r
20 Fenchurch Street, 14th Floor\r
SAN JOSE CA 95131\r
US\r
\r
-B8-08-CF (hex) Intel Corporate\r
-B808CF (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
1C-69-7A (hex) EliteGroup Computer Systems Co., LTD\r
1C697A (base 16) EliteGroup Computer Systems Co., LTD\r
No.239, Sec. 2, TiDing Blvd. Nei-Hu Dist.\r
Shenzhen Guangdong 518052\r
CN\r
\r
-68-17-29 (hex) Intel Corporate\r
-681729 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
28-52-E0 (hex) Layon international Electronic & Telecom Co.,Ltd\r
2852E0 (base 16) Layon international Electronic & Telecom Co.,Ltd\r
4rd Floor, Building 15, Juda Industrial Zone, ShiBei Industrial Road, HuiJiang , Da Shi Street, PanYu District,Guangzhou,China\r
Da’an Dist., Taipei City 106\r
TW\r
\r
-D0-AB-D5 (hex) Intel Corporate\r
-D0ABD5 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
88-DE-7C (hex) Askey Computer Corp.\r
88DE7C (base 16) Askey Computer Corp.\r
10F, No.119, JIANKANG RD.,ZHINGHE DIST,\r
Seongnam Gyeonggi 13529\r
KR\r
\r
-D4-3B-04 (hex) Intel Corporate\r
-D43B04 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
CC-E1-94 (hex) Juniper Networks\r
CCE194 (base 16) Juniper Networks\r
1133 Innovation Way\r
San Jose CA 94568\r
US\r
\r
-04-EA-56 (hex) Intel Corporate\r
-04EA56 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
-D0-C6-37 (hex) Intel Corporate\r
-D0C637 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
44-1A-FA (hex) New H3C Technologies Co., Ltd\r
441AFA (base 16) New H3C Technologies Co., Ltd\r
466 Changhe Road, Binjiang District\r
Matsumoto-shi Nagano-ken 399-8702\r
JP\r
\r
-98-3B-8F (hex) Intel Corporate\r
-983B8F (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
54-27-8D (hex) NXP (China) Management Ltd.\r
54278D (base 16) NXP (China) Management Ltd.\r
21F, BM InterContinental Business Center, 100 Yu Tong Road\r
Fort Washington PA 19034\r
US\r
\r
-1C-1B-B5 (hex) Intel Corporate\r
-1C1BB5 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
A4-D9-90 (hex) Samsung Electronics Co.,Ltd\r
A4D990 (base 16) Samsung Electronics Co.,Ltd\r
#94-1, Imsoo-Dong\r
Bonn 53113\r
DE\r
\r
-DC-8B-28 (hex) Intel Corporate\r
-DC8B28 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
B8-69-F4 (hex) Routerboard.com\r
B869F4 (base 16) Routerboard.com\r
Mikrotikls SIA\r
Dongguan Guangdong 523560\r
CN\r
\r
-30-24-32 (hex) Intel Corporate\r
-302432 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
C0-42-D0 (hex) Juniper Networks\r
C042D0 (base 16) Juniper Networks\r
1133 Innovation Way\r
Dongguan 523808\r
CN\r
\r
-04-AB-18 (hex) ELECOM CO.,LTD.\r
-04AB18 (base 16) ELECOM CO.,LTD.\r
- 11F Tokyubancho Bldg. 6-2,\r
- Chiyoda-ku Tokyo 102-0081\r
- JP\r
-\r
78-D2-94 (hex) NETGEAR\r
78D294 (base 16) NETGEAR\r
350 East Plumeria Drive\r
Gwangju 61011\r
KR\r
\r
-0C-54-15 (hex) Intel Corporate\r
-0C5415 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
80-CE-62 (hex) Hewlett Packard\r
80CE62 (base 16) Hewlett Packard\r
11445 Compaq Center Drive\r
Suwon Gyeonggi-Do 16677\r
KR\r
\r
-5C-5F-67 (hex) Intel Corporate\r
-5C5F67 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
80-3A-59 (hex) AT&T\r
803A59 (base 16) AT&T\r
1025 Lenox Park Blvd\r
Yokohama City Kanagawa Prefecture 224-8539\r
JP\r
\r
-E4-70-B8 (hex) Intel Corporate\r
-E470B8 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
74-1C-27 (hex) ITEL MOBILE LIMITED\r
741C27 (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
Gumi Gyeongbuk 730-350\r
KR\r
\r
-F8-34-41 (hex) Intel Corporate\r
-F83441 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
28-D4-36 (hex) Jiangsu dewosi electric co., LTD\r
28D436 (base 16) Jiangsu dewosi electric co., LTD\r
Dantu district fengjingchengbang xibanya 503, building 6\r
Bayan Lepas Penang 11900\r
MY\r
\r
-34-87-3D (hex) Quectel Wireless Solution Co.,Ltd.\r
-34873D (base 16) Quectel Wireless Solution Co.,Ltd.\r
- RM501,Building 13,No.99 TianZhou Road,Xuhui District,Shanghai,China\r
- Shanghai Shanghai 200233\r
- CN\r
-\r
10-D0-7A (hex) AMPAK Technology, Inc.\r
10D07A (base 16) AMPAK Technology, Inc.\r
No.1,Jen Ai Road Hsinchu Industrial Park, Hukou\r
Houston TX 77024\r
US\r
\r
-60-EB-69 (hex) QUANTA COMPUTER INC.\r
-60EB69 (base 16) QUANTA COMPUTER INC.\r
- 211, Wen Hwa 2nd Rd.,Kuei Shan, \r
- Tao Yuan 33377\r
- TW\r
-\r
-C8-0A-A9 (hex) QUANTA COMPUTER INC.\r
-C80AA9 (base 16) QUANTA COMPUTER INC.\r
- 211, Wen Hwa 2nd Rd.,\r
- Tao Yuan Kuei Shan 33377\r
- TW\r
-\r
D4-04-FF (hex) Juniper Networks\r
D404FF (base 16) Juniper Networks\r
1133 Innovation Way\r
Bentley Western Australia 6102\r
AU\r
\r
-00-1B-24 (hex) QUANTA COMPUTER INC.\r
-001B24 (base 16) QUANTA COMPUTER INC.\r
- No. 211, Wen Hwa 2nd Rd.,\r
- Kuei Shan Hsiang Tao Yuan Shien 333\r
- TW\r
-\r
-00-C0-9F (hex) QUANTA COMPUTER INC.\r
-00C09F (base 16) QUANTA COMPUTER INC.\r
- 7F., 116, HOU-KANG ST.,\r
- TAIWAN TAIWAN R.O.C.\r
- TW\r
-\r
-C4-54-44 (hex) QUANTA COMPUTER INC.\r
-C45444 (base 16) QUANTA COMPUTER INC.\r
- No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang, Tao Yuan Shien, Taiwan, R. O. C.\r
- Taoyuan Taiwan 33377\r
- TW\r
-\r
-00-26-9E (hex) QUANTA COMPUTER INC.\r
-00269E (base 16) QUANTA COMPUTER INC.\r
- NO. 211, WEN HWA 2RD., KUEI SHAN HSIANG, TAIPEI, SHIEN\r
- TAO YUAN 333\r
- TW\r
-\r
88-12-4E (hex) Qualcomm Inc.\r
88124E (base 16) Qualcomm Inc.\r
1700 Technology Drive\r
Zagreb 10000\r
HR\r
\r
-BC-5C-4C (hex) ELECOM CO.,LTD.\r
-BC5C4C (base 16) ELECOM CO.,LTD.\r
- 11F Tokyubancho Bldg. 6-2,\r
- Chiyoda-ku Tokyo 102-0081\r
- JP\r
-\r
88-70-33 (hex) Hangzhou Silan Microelectronic Inc\r
887033 (base 16) Hangzhou Silan Microelectronic Inc\r
No.4 HuangGuShan Road\r
Perm Perm region 614000\r
RU\r
\r
-1C-08-C1 (hex) Lg Innotek\r
-1C08C1 (base 16) Lg Innotek\r
- 978-1 Jangduk dong, Gwangsangu\r
- Gwangju Gwangju 506-731\r
- KR\r
-\r
34-A6-8C (hex) Shine Profit Development Limited\r
34A68C (base 16) Shine Profit Development Limited\r
Unit 1401B Telecom Tower\r
shenzhen guangdong 518057\r
CN\r
\r
-58-65-E6 (hex) INFOMARK CO., LTD.\r
-5865E6 (base 16) INFOMARK CO., LTD.\r
- #801, KINS TOWER, JEONGJA-DONG\r
- SEONGNAM GYOUNGGI 463-847\r
- KR\r
-\r
A4-4E-2D (hex) Adaptive Wireless Solutions, LLC\r
A44E2D (base 16) Adaptive Wireless Solutions, LLC\r
577 Main Street\r
Richardson TX 75081\r
US\r
\r
-08-4E-BF (hex) Broad Net Mux Corporation\r
-084EBF (base 16) Broad Net Mux Corporation\r
- 4-1-8 Kounan Minato-ku\r
- Tokyo 108-0075\r
- JP\r
-\r
E0-5F-B9 (hex) Cisco Systems, Inc\r
E05FB9 (base 16) Cisco Systems, Inc\r
80 West Tasman Drive\r
Beijing 100085\r
CN\r
\r
-9C-F6-1A (hex) UTC Fire and Security\r
-9CF61A (base 16) UTC Fire and Security\r
- 2955 Red Hill Ave.\r
- Costa Mesa CA 92626\r
- US\r
-\r
7C-F0-98 (hex) Bee Beans Technologies, Inc.\r
7CF098 (base 16) Bee Beans Technologies, Inc.\r
TCI B5\r
SEOUL KSXX 0022\r
KR\r
\r
-00-1F-40 (hex) Speakercraft Inc.\r
-001F40 (base 16) Speakercraft Inc.\r
- 940 Columbia Ave.,\r
- Riverside CA 92507\r
- US\r
-\r
00-1F-6C (hex) Cisco Systems, Inc\r
001F6C (base 16) Cisco Systems, Inc\r
80 West Tasman Drive\r
KWAI CHUNG N.T. \r
HK\r
\r
-00-1E-E0 (hex) Urmet Domus SpA\r
-001EE0 (base 16) Urmet Domus SpA\r
- Via Bologna 188/C\r
- Torino TO I-10154\r
- IT\r
-\r
00-1E-DA (hex) Wesemann Elektrotechniek B.V.\r
001EDA (base 16) Wesemann Elektrotechniek B.V.\r
Droogbloem 31\r
Bietigheim-Bissingen Baden-Wuerttemberg 74321\r
DE\r
\r
-00-19-32 (hex) Gude Analog- und Digialsysteme GmbH\r
-001932 (base 16) Gude Analog- und Digialsysteme GmbH\r
- Eintrachstrasse 113\r
- Cologne NRW 50668\r
- DE\r
-\r
00-19-10 (hex) Knick Elektronische Messgeraete GmbH & Co. KG\r
001910 (base 16) Knick Elektronische Messgeraete GmbH & Co. KG\r
Beuckestraße 22\r
Guyancourt 78280\r
FR\r
\r
-00-17-11 (hex) GE Healthcare Bio-Sciences AB\r
-001711 (base 16) GE Healthcare Bio-Sciences AB\r
- Björkgatan 30\r
- Uppsala SE 75184\r
- SE\r
-\r
00-17-45 (hex) INNOTZ CO., Ltd\r
001745 (base 16) INNOTZ CO., Ltd\r
14F, Prime Center 546-4 Guui-Dong Kwanggin-Gu\r
Camarillo CA 93012\r
US\r
\r
-00-15-D2 (hex) Xantech Corporation\r
-0015D2 (base 16) Xantech Corporation\r
- 13100 Telfair Avenue\r
- Sylmar CA 91342-3573\r
- US\r
-\r
00-15-D4 (hex) Emitor AB\r
0015D4 (base 16) Emitor AB\r
Sjöviksbacken 14\r
D.F. 11480\r
MX\r
\r
-00-16-12 (hex) Otsuka Electronics Co., Ltd.\r
-001612 (base 16) Otsuka Electronics Co., Ltd.\r
- 1-10 Sasagaoka, Minakuchi\r
- kouka shiga 528-0061\r
- US\r
-\r
00-16-0B (hex) TVWorks LLC\r
00160B (base 16) TVWorks LLC\r
Two Belvedere Place, #200\r
Seoul \r
KR\r
\r
-00-07-8E (hex) Garz & Friche GmbH\r
-00078E (base 16) Garz & Friche GmbH\r
- Tempowerhving 4\r
- \r
- DE\r
-\r
00-07-54 (hex) Xyterra Computing, Inc.\r
000754 (base 16) Xyterra Computing, Inc.\r
14505 Hayden Rd.,\r
Roy UT 84067\r
US\r
\r
-00-50-F1 (hex) Intel Corporation\r
-0050F1 (base 16) Intel Corporation\r
- 94 Em-Hamoshavot Way.\r
- Petach-Tikva \r
- IL\r
-\r
00-50-CB (hex) JETTER\r
0050CB (base 16) JETTER\r
GRAETERSTRASSE 2\r
GUMI GYEONG BUK 730-030\r
KR\r
\r
-34-0F-66 (hex) MicroArx Corporation\r
-340F66 (base 16) MicroArx Corporation\r
- P.O. Box 692\r
- Hanover NH 03755\r
- US\r
-\r
8C-C8-4B (hex) CHONGQING FUGUI ELECTRONICS CO.,LTD.\r
8CC84B (base 16) CHONGQING FUGUI ELECTRONICS CO.,LTD.\r
Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District\r
Reno NV 89507\r
US\r
\r
-D8-3B-BF (hex) Intel Corporate\r
-D83BBF (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
50-2C-C6 (hex) GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI\r
502CC6 (base 16) GREE ELECTRIC APPLIANCES, INC. OF ZHUHAI\r
Jinji West Road, Qianshan,\r
Cupertino CA 95014\r
US\r
\r
-14-F6-D8 (hex) Intel Corporate\r
-14F6D8 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
3C-DA-6D (hex) Tiandy Technologies CO.,LTD\r
3CDA6D (base 16) Tiandy Technologies CO.,LTD\r
NO.8,haitai huake rd2 (outside ring road),huayuan new technology industrial park\r
Dongguan Guangdong 523808\r
CN\r
\r
-E0-D4-E8 (hex) Intel Corporate\r
-E0D4E8 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
30-50-75 (hex) GN Audio A/S\r
305075 (base 16) GN Audio A/S\r
Lautrupbjerg 7\r
San Jose CA 95131\r
US\r
\r
+A8-05-77 (hex) Netlist, Inc.\r
+A80577 (base 16) Netlist, Inc.\r
+ 175 Technology\r
+ Irvine CA 92618\r
+ US\r
+\r
+E4-3A-65 (hex) MofiNetwork Inc\r
+E43A65 (base 16) MofiNetwork Inc\r
+ 11 Boynton Cir\r
+ Markham Ontario L6C 1A8\r
+ CA\r
+\r
08-AA-55 (hex) Motorola Mobility LLC, a Lenovo Company\r
08AA55 (base 16) Motorola Mobility LLC, a Lenovo Company\r
222 West Merchandise Mart Plaza\r
Chicago IL 60654\r
US\r
\r
+54-21-9D (hex) Samsung Electronics Co.,Ltd\r
+54219D (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
+\r
C8-8B-E8 (hex) Masimo Corporation\r
C88BE8 (base 16) Masimo Corporation\r
40 Parker\r
Irvine CA 92618\r
US\r
\r
+F0-41-C6 (hex) Heat Tech Company, Ltd.\r
+F041C6 (base 16) Heat Tech Company, Ltd.\r
+ 221A, Tikhookeanskaya st.\r
+ Khabarovsk 680033\r
+ RU\r
+\r
40-40-28 (hex) ZIV\r
404028 (base 16) ZIV\r
Polígono Parque Tecnológico, 210\r
ZAMUDIO VIZCAYA 48170\r
ES\r
\r
-54-21-9D (hex) Samsung Electronics Co.,Ltd\r
-54219D (base 16) Samsung Electronics Co.,Ltd\r
+F8-6C-03 (hex) Shenzhen Teleone Technology Co., Ltd\r
+F86C03 (base 16) Shenzhen Teleone Technology Co., Ltd\r
+ TOWER B 5/F, SHANSHUI BUILDING, NANSHAN YUNGU INNOVATION INDUSTRY PARK, 1183 LIUXIAN AVENUE, NANSHAN, SHENZHEN, CHINA\r
+ Shenzhen 518000\r
+ CN\r
+\r
+D8-71-4D (hex) Texas Instruments\r
+D8714D (base 16) Texas Instruments\r
+ 12500 TI Blvd\r
+ Dallas TX 75243\r
+ US\r
+\r
+0C-EC-80 (hex) Texas Instruments\r
+0CEC80 (base 16) Texas Instruments\r
+ 12500 TI Blvd\r
+ Dallas TX 75243\r
+ US\r
+\r
+10-5D-DC (hex) Huawei Device Co., Ltd.\r
+105DDC (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+DC-73-85 (hex) Huawei Device Co., Ltd.\r
+DC7385 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+54-55-D5 (hex) Huawei Device Co., Ltd.\r
+5455D5 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+00-15-D2 (hex) Xantech Corporation\r
+0015D2 (base 16) Xantech Corporation\r
+ 5919 Sea Otter Place\r
+ Carlsbad CA 92010\r
+ US\r
+\r
+00-1F-40 (hex) Speakercraft Inc.\r
+001F40 (base 16) Speakercraft Inc.\r
+ 5919 Sea Otter Place\r
+ Carlsbad CA 92010\r
+ US\r
+\r
+18-45-93 (hex) Taicang T&W Electronics\r
+184593 (base 16) Taicang T&W Electronics\r
+ 89# Jiang Nan RD\r
+ Suzhou Jiangsu 215412\r
+ CN\r
+\r
+C4-98-86 (hex) Qorvo Utrecht B.V.\r
+C49886 (base 16) Qorvo Utrecht B.V.\r
+ Leidseveer 10\r
+ Utrecht Utrecht 3511SB\r
+ NL\r
+\r
+CC-9E-CA (hex) HMD Global Oy\r
+CC9ECA (base 16) HMD Global Oy\r
+ Bertel Jungin aukio 9\r
+ Espoo Espoo 02600\r
+ FI\r
+\r
+3C-30-6F (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+3C306F (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-EA-E7 (hex) Shanghai High-Flying Electronics Technology Co., Ltd\r
+34EAE7 (base 16) Shanghai High-Flying Electronics Technology Co., Ltd\r
+ Room 1002,#1Building,No.3000 Longdong Avenue,Pudong\r
+ Shanghai Shanghai 201202\r
+ CN\r
+\r
+D4-AB-CD (hex) Hui Zhou Gaoshengda Technology Co.,LTD\r
+D4ABCD (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
+80-E1-BF (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+80E1BF (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-2C-D0 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+482CD0 (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
+00-19-32 (hex) Gude Systems GmbH\r
+001932 (base 16) Gude Systems GmbH\r
+ Von-der-Wettern-Str. 23\r
+ Cologne NRW 51149\r
+ DE\r
+\r
+A0-CA-A5 (hex) INTELLIGENCE TECHNOLOGY OF CEC CO., LTD\r
+A0CAA5 (base 16) INTELLIGENCE TECHNOLOGY OF CEC CO., LTD\r
+ Tower A, NO.2 Lutuan Road, The sountern Of Future Science and Tech Zone, Changping District\r
+ Beijing Beijing 102209\r
+ CN\r
+\r
+5C-5F-67 (hex) Intel Corporate\r
+5C5F67 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+0C-54-15 (hex) Intel Corporate\r
+0C5415 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+30-24-32 (hex) Intel Corporate\r
+302432 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+DC-8B-28 (hex) Intel Corporate\r
+DC8B28 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+1C-1B-B5 (hex) Intel Corporate\r
+1C1BB5 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+F8-34-41 (hex) Intel Corporate\r
+F83441 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+E4-70-B8 (hex) Intel Corporate\r
+E470B8 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+E0-0E-E4 (hex) DWnet Technologies(Suzhou) Corporation\r
+E00EE4 (base 16) DWnet Technologies(Suzhou) Corporation\r
+ No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China\r
+ Suzhou 21500\r
+ CN\r
+\r
+E8-85-4B (hex) Apple, Inc.\r
+E8854B (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+28-EC-95 (hex) Apple, Inc.\r
+28EC95 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+58-FD-B1 (hex) LG Electronics\r
+58FDB1 (base 16) LG Electronics\r
+ 222 LG-ro, JINWI-MYEON\r
+ Pyeongtaek-si Gyeonggi-do 451-713\r
+ KR\r
+\r
+E0-2B-96 (hex) Apple, Inc.\r
+E02B96 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+A8-46-9D (hex) Cisco Meraki\r
+A8469D (base 16) Cisco Meraki\r
+ 500 Terry A. Francois Blvd\r
+ San Francisco 94158\r
+ US\r
+\r
+6C-DE-A9 (hex) Cisco Meraki\r
+6CDEA9 (base 16) Cisco Meraki\r
+ 500 Terry A. Francois Blvd\r
+ San Francisco 94158\r
+ US\r
+\r
+8C-CE-FD (hex) Shenzhen zhouhai technology co.,LTD\r
+8CCEFD (base 16) Shenzhen zhouhai technology co.,LTD\r
+ 401-403,415-416, Area A, Block B, West Silicon Valley, 5010 Baoan Avenue, Baoan District, Shenzhen, China\r
+ Shenzhen Guangdong 518110\r
+ CN\r
+\r
+50-FB-19 (hex) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.\r
+50FB19 (base 16) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.\r
+ 9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT\r
+ SHEN ZHEN GUANG DONG 518000\r
+ CN\r
+\r
+D0-AB-D5 (hex) Intel Corporate\r
+D0ABD5 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+68-17-29 (hex) Intel Corporate\r
+681729 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+B8-08-CF (hex) Intel Corporate\r
+B808CF (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+DC-71-96 (hex) Intel Corporate\r
+DC7196 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+50-E0-85 (hex) Intel Corporate\r
+50E085 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+94-08-C7 (hex) Huawei Device Co., Ltd.\r
+9408C7 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+C8-CA-63 (hex) Huawei Device Co., Ltd.\r
+C8CA63 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+98-3B-8F (hex) Intel Corporate\r
+983B8F (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+D0-C6-37 (hex) Intel Corporate\r
+D0C637 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+04-EA-56 (hex) Intel Corporate\r
+04EA56 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+D4-3B-04 (hex) Intel Corporate\r
+D43B04 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+38-68-93 (hex) Intel Corporate\r
+386893 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+D8-3B-BF (hex) Intel Corporate\r
+D83BBF (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+14-F6-D8 (hex) Intel Corporate\r
+14F6D8 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+E0-D4-E8 (hex) Intel Corporate\r
+E0D4E8 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+94-E6-F7 (hex) Intel Corporate\r
+94E6F7 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+4C-1D-96 (hex) Intel Corporate\r
+4C1D96 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+70-3A-A6 (hex) New H3C Technologies Co., Ltd\r
+703AA6 (base 16) New H3C Technologies Co., Ltd\r
+ 466 Changhe Road, Binjiang District\r
+ Hangzhou Zhejiang 310052\r
+ CN\r
+\r
+94-37-F7 (hex) Huawei Device Co., Ltd.\r
+9437F7 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+04-6C-59 (hex) Intel Corporate\r
+046C59 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+90-3F-EA (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+903FEA (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-AB-48 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+20AB48 (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-D7-3C (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+CCD73C (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
+D4-40-D0 (hex) OCOSMOS Co., LTD\r
+D440D0 (base 16) OCOSMOS Co., LTD\r
+ (Tamnip-Dong) #1, 263-1 Techno 2-Ro Yuseong-Gu\r
+ Daejeon Daejeon 34026\r
+ KR\r
+\r
+94-E7-0B (hex) Intel Corporate\r
+94E70B (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+00-1E-E0 (hex) Urmet SpA\r
+001EE0 (base 16) Urmet SpA\r
+ Via Bologna 188/C\r
+ Torino TO I-10154\r
+ IT\r
+\r
+DC-D9-AE (hex) Nokia Shanghai Bell Co., Ltd.\r
+DCD9AE (base 16) Nokia Shanghai Bell Co., Ltd.\r
+ No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai\r
+ Shanghai 201206\r
+ CN\r
+\r
+98-B8-BC (hex) Samsung Electronics Co.,Ltd\r
+98B8BC (base 16) Samsung Electronics Co.,Ltd\r
#94-1, Imsoo-Dong\r
Gumi Gyeongbuk 730-350\r
KR\r
\r
-A8-05-77 (hex) Netlist, Inc.\r
-A80577 (base 16) Netlist, Inc.\r
- 175 Technology\r
- Irvine CA 92618\r
+18-4E-16 (hex) Samsung Electronics Co.,Ltd\r
+184E16 (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
+\r
+C0-3D-03 (hex) Samsung Electronics Co.,Ltd\r
+C03D03 (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
+\r
+A4-97-B1 (hex) CHONGQING FUGUI ELECTRONICS CO.,LTD.\r
+A497B1 (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
+BC-A9-93 (hex) Cambium Networks Limited\r
+BCA993 (base 16) Cambium Networks Limited\r
+ Unit B2, Linhay Business Park,\r
+ Ashburton Devon TQ13 7UP\r
+ GB\r
+\r
+10-74-6F (hex) MOTOROLA SOLUTIONS MALAYSIA SDN. BHD.\r
+10746F (base 16) MOTOROLA SOLUTIONS MALAYSIA SDN. BHD.\r
+ INNOPLEX, NO. 2A, MEDAN BAYAN LEPAS, BAYAN LEPAS TECHNOPLEX\r
+ BAYAN LEPAS PENANG 11900\r
+ MY\r
+\r
+00-92-7D (hex) Ficosa Internationa(Taicang) C0.,Ltd.\r
+00927D (base 16) Ficosa Internationa(Taicang) C0.,Ltd.\r
+ No.518, Middle Suzhou Rd., Taicang Economy Developing Area, Taicang,\r
+ Suzhou Jiangsu 215400\r
+ CN\r
+\r
+44-16-22 (hex) Microsoft Corporation\r
+441622 (base 16) Microsoft Corporation\r
+ One Microsoft Way\r
+ REDMOND WA 98052\r
US\r
\r
-F0-41-C6 (hex) Heat Tech Company, Ltd.\r
-F041C6 (base 16) Heat Tech Company, Ltd.\r
- 221A, Tikhookeanskaya st.\r
- Khabarovsk 680033\r
+44-E6-B0 (hex) China Mobile IOT Company Limited\r
+44E6B0 (base 16) China Mobile IOT Company Limited\r
+ NO.8 Yu Ma Road, NanAn Area\r
+ Chongqing Chongqing 401336\r
+ CN\r
+\r
+74-7A-90 (hex) Murata Manufacturing Co., Ltd.\r
+747A90 (base 16) Murata Manufacturing Co., Ltd.\r
+ 1-10-1, Higashikotari\r
+ Nagaokakyo-shi Kyoto 617-8555\r
+ JP\r
+\r
+24-E9-CA (hex) Huawei Device Co., Ltd.\r
+24E9CA (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+14-00-7D (hex) zte corporation\r
+14007D (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
+94-AE-F0 (hex) Cisco Systems, Inc\r
+94AEF0 (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+1C-08-C1 (hex) LG Innotek\r
+1C08C1 (base 16) LG Innotek\r
+ 978-1 Jangduk dong, Gwangsangu\r
+ Gwangju Gwangju 506-731\r
+ KR\r
+\r
+34-87-3D (hex) Quectel Wireless Solutions Co., Ltd.\r
+34873D (base 16) Quectel Wireless Solutions Co., Ltd.\r
+ RM501,Building 13,No.99 TianZhou Road,Xuhui District,Shanghai,China\r
+ Shanghai Shanghai 200233\r
+ CN\r
+\r
+9C-F6-1A (hex) Carrier Fire & Security\r
+9CF61A (base 16) Carrier Fire & Security\r
+ Kelvinstraat 7\r
+ DH Weert 6003\r
+ NL\r
+\r
+58-B6-23 (hex) Beijing Xiaomi Mobile Software Co., Ltd\r
+58B623 (base 16) Beijing Xiaomi Mobile Software Co., Ltd\r
+ Xiaomi Campus, No. 33 Xi erqi Middle Road, Haidian District\r
+ Beijing Beijing 100085\r
+ CN\r
+\r
+A0-22-DE (hex) vivo Mobile Communication Co., Ltd.\r
+A022DE (base 16) vivo Mobile Communication Co., Ltd.\r
+ #283,BBK Road\r
+ Wusha,Chang'An DongGuan City,Guangdong, 523860\r
+ CN\r
+\r
+FC-73-FB (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+FC73FB (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-45-62 (hex) ANDRA Sp. z o. o.\r
+044562 (base 16) ANDRA Sp. z o. o.\r
+ Pryzmaty 6/8\r
+ Warszawa 02-226\r
+ PL\r
+\r
+00-26-9E (hex) Quanta Computer Inc.\r
+00269E (base 16) Quanta Computer Inc.\r
+ NO. 211, WEN HWA 2RD., KUEI SHAN HSIANG, TAIPEI, SHIEN\r
+ TAO YUAN 333\r
+ TW\r
+\r
+C4-54-44 (hex) Quanta Computer Inc.\r
+C45444 (base 16) Quanta Computer Inc.\r
+ No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang, Tao Yuan Shien, Taiwan, R. O. C.\r
+ Taoyuan Taiwan 33377\r
+ TW\r
+\r
+00-C0-9F (hex) Quanta Computer Inc.\r
+00C09F (base 16) Quanta Computer Inc.\r
+ 7F., 116, HOU-KANG ST.,\r
+ TAIWAN TAIWAN R.O.C.\r
+ TW\r
+\r
+00-1B-24 (hex) Quanta Computer Inc.\r
+001B24 (base 16) Quanta Computer Inc.\r
+ No. 211, Wen Hwa 2nd Rd.,\r
+ Kuei Shan Hsiang Tao Yuan Shien 333\r
+ TW\r
+\r
+C8-0A-A9 (hex) Quanta Computer Inc.\r
+C80AA9 (base 16) Quanta Computer Inc.\r
+ 211, Wen Hwa 2nd Rd.,\r
+ Tao Yuan Kuei Shan 33377\r
+ TW\r
+\r
+60-EB-69 (hex) Quanta Computer Inc.\r
+60EB69 (base 16) Quanta Computer Inc.\r
+ 211, Wen Hwa 2nd Rd.,Kuei Shan, \r
+ Tao Yuan 33377\r
+ TW\r
+\r
+C0-8F-20 (hex) Shenzhen Skyworth Digital Technology CO., Ltd\r
+C08F20 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd\r
+ 4F,Block A, Skyworth?Building,\r
+ Shenzhen Guangdong 518057\r
+ CN\r
+\r
+74-F7-F6 (hex) Shanghai Sunmi Technology Co.,Ltd.\r
+74F7F6 (base 16) Shanghai Sunmi Technology Co.,Ltd.\r
+ Room 505, KIC Plaza, No.388 Song Hu Road, Yang Pu District, Shanghai, China\r
+ Shanghai Yang Pu District 200433\r
+ CN\r
+\r
+C0-CC-42 (hex) Sichuan Tianyi Comheart Telecom Co., Ltd.\r
+C0CC42 (base 16) Sichuan Tianyi Comheart Telecom Co., Ltd.\r
+ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County\r
+ Chengdu Sichuan 611330\r
+ CN\r
+\r
+24-1A-E6 (hex) Huawei Device Co., Ltd.\r
+241AE6 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+60-B7-6E (hex) Google, Inc.\r
+60B76E (base 16) Google, Inc.\r
+ 1600 Amphitheatre Parkway\r
+ Mountain View CA 94043\r
+ US\r
+\r
+B4-23-30 (hex) Itron Inc\r
+B42330 (base 16) Itron Inc\r
+ 2111 N Molter Rd\r
+ Liberty Lake WA 99019\r
+ US\r
+\r
+08-4E-BF (hex) Sumitomo Electric Industries, Ltd\r
+084EBF (base 16) Sumitomo Electric Industries, Ltd\r
+ 1-1-3, Shimaya, Konohana-ku\r
+ Osaka 554-0024\r
+ JP\r
+\r
+A8-02-DB (hex) zte corporation\r
+A802DB (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
+1C-5D-80 (hex) Mitubishi Hitachi Power Systems Industries Co., Ltd.\r
+1C5D80 (base 16) Mitubishi Hitachi Power Systems Industries Co., Ltd.\r
+ Nakaku Aioimachi\r
+ Yokohama 2310012\r
+ JP\r
+\r
+80-16-05 (hex) Vodafone Italia S.p.A.\r
+801605 (base 16) Vodafone Italia S.p.A.\r
+ Via Lorenteggio nr. 240\r
+ Milan Italy 20147\r
+ IT\r
+\r
+3C-9C-0F (hex) Intel Corporate\r
+3C9C0F (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+5C-44-3E (hex) Skullcandy\r
+5C443E (base 16) Skullcandy\r
+ 6301 N. Landmark Dr. \r
+ Park City UT 84098\r
+ US\r
+\r
+F8-82-00 (hex) CaptionCall\r
+F88200 (base 16) CaptionCall\r
+ 4215 Riverboat Road\r
+ Salt Lake City UT 84123\r
+ US\r
+\r
+08-FB-EA (hex) AMPAK Technology,Inc.\r
+08FBEA (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
+34-0F-66 (hex) Web Sensing LLC\r
+340F66 (base 16) Web Sensing LLC\r
+ P.O. Box 692\r
+ Hanover NH 03755\r
+ US\r
+\r
+58-65-E6 (hex) infomark\r
+5865E6 (base 16) infomark\r
+ #801, KINS TOWER, JEONGJA-DONG\r
+ SEONGNAM GYOUNGGI 463-847\r
+ KR\r
+\r
+00-50-F1 (hex) Maxlinear, Inc\r
+0050F1 (base 16) Maxlinear, Inc\r
+ 94 Em-Hamoshavot Way.\r
+ Petach-Tikva \r
+ IL\r
+\r
+F4-E5-78 (hex) LLC Proizvodstvennaya Kompania TransService\r
+F4E578 (base 16) LLC Proizvodstvennaya Kompania TransService\r
+ Ulitsa Podolskih Kursantov, build. 3, of. 133\r
+ Moscow Moscow 117545\r
RU\r
\r
-E4-3A-65 (hex) MofiNetwork Inc\r
-E43A65 (base 16) MofiNetwork Inc\r
- 11 Boynton Cir\r
- Markham Ontario L6C 1A8\r
+08-54-BB (hex) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\r
+0854BB (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
+60-EB-5A (hex) Asterfusion Data Technologies Co.,Ltd\r
+60EB5A (base 16) Asterfusion Data Technologies Co.,Ltd\r
+ B401, Building 2, Creative Industry Park, No.328 Xinghu Street, SIP, Suzhou\r
+ suzhou 215123\r
+ CN\r
+\r
+E4-D3-73 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+E4D373 (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-BC-9A (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+C0BC9A (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
+70-2C-09 (hex) Nintendo Co.,Ltd\r
+702C09 (base 16) Nintendo Co.,Ltd\r
+ 11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU\r
+ KYOTO KYOTO 601-8501\r
+ JP\r
+\r
+E8-1B-69 (hex) Sercomm Corporation.\r
+E81B69 (base 16) Sercomm Corporation.\r
+ 3F,No.81,Yu-Yih Rd.,Chu-Nan Chen\r
+ Miao-Lih Hsuan 115\r
+ TW\r
+\r
+68-52-D6 (hex) UGame Technology Co.,Ltd\r
+6852D6 (base 16) UGame Technology Co.,Ltd\r
+ 3F, Bld.7, F518 Idea Land, No. 1065 Baoyuan Road, Xixiang Street, Baoan District\r
+ Shenzhen 518102\r
+ CN\r
+\r
+FC-19-99 (hex) Xiaomi Communications Co Ltd\r
+FC1999 (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
+90-12-A1 (hex) We Corporation Inc.\r
+9012A1 (base 16) We Corporation Inc.\r
+ 201, 33, Deokcheon-ro, Manan-gu\r
+ Anyang-si Gyeonggi-do 14088\r
+ KR\r
+\r
+B8-80-35 (hex) Shenzhen Qihu Intelligent Technology Company Limited\r
+B88035 (base 16) Shenzhen Qihu Intelligent Technology Company Limited\r
+ Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone\r
+ Shenzhen Guangdong 518057\r
+ CN\r
+\r
+00-17-11 (hex) Cytiva Sweden AB\r
+001711 (base 16) Cytiva Sweden AB\r
+ Björkgatan 30\r
+ Uppsala SE 75184\r
+ SE\r
+\r
+B4-C2-6A (hex) Garmin International\r
+B4C26A (base 16) Garmin International\r
+ 1200 E. 151st St\r
+ Olathe KS 66062\r
+ US\r
+\r
+64-B6-23 (hex) CCS Care Communication Solutions GmbH\r
+64B623 (base 16) CCS Care Communication Solutions GmbH\r
+ Computerstrasse 6\r
+ Vienna 1100\r
+ AT\r
+\r
+E8-9F-80 (hex) Belkin International Inc.\r
+E89F80 (base 16) Belkin International Inc.\r
+ 12045 East Waterfront Drive\r
+ Playa Vista 90094\r
+ US\r
+\r
+BC-5C-4C (hex) ELECOM CO.,LTD.\r
+BC5C4C (base 16) ELECOM CO.,LTD.\r
+ 2F Kudan First Place Bldg. 4-1-28\r
+ Chiyoda-ku Kudan Kita 102-0073\r
+ JP\r
+\r
+04-AB-18 (hex) ELECOM CO.,LTD.\r
+04AB18 (base 16) ELECOM CO.,LTD.\r
+ 2F Kudan First Place Bldg. 4-1-28\r
+ Chiyoda-ku Kudan Kita 102-0073\r
+ JP\r
+\r
+6C-E5-F7 (hex) New H3C Technologies Co., Ltd\r
+6CE5F7 (base 16) New H3C Technologies Co., Ltd\r
+ 466 Changhe Road, Binjiang District\r
+ Hangzhou Zhejiang 310052\r
+ CN\r
+\r
+B8-DD-71 (hex) zte corporation\r
+B8DD71 (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-F8-B8 (hex) Rako Controls Ltd\r
+78F8B8 (base 16) Rako Controls Ltd\r
+ Knight Road\r
+ Rochester Kent ME2 2AH\r
+ GB\r
+\r
+00-16-12 (hex) Otsuka Electronics Co., Ltd.\r
+001612 (base 16) Otsuka Electronics Co., Ltd.\r
+ 1-10 Sasagaoka, Minakuchi\r
+ kouka shiga 528-0061\r
+ JP\r
+\r
+A4-51-29 (hex) XAG\r
+A45129 (base 16) XAG\r
+ Block C, 115 Gaopu Road\r
+ Guangzhou 510663\r
+ CN\r
+\r
+CC-87-4A (hex) Nokia\r
+CC874A (base 16) Nokia\r
+ 600 March Road\r
+ Kanata Ontario K2K 2E6\r
CA\r
\r
+04-46-CF (hex) Beijing Venustech Cybervision Co.,Ltd.\r
+0446CF (base 16) Beijing Venustech Cybervision Co.,Ltd.\r
+ Venus Plaza No.21Zhongguancun Software Park,No.8 Dongbeiwang Xilu, Haidian District\r
+ Beijing Beijing 100193\r
+ CN\r
+\r
+00-07-8E (hex) Garz & Fricke GmbH\r
+00078E (base 16) Garz & Fricke GmbH\r
+ Schlachthofstrasse 20\r
+ Hamburg Hamburg 21079\r
+ DE\r
+\r
9C-FF-C2 (hex) AVI Systems GmbH\r
9CFFC2 (base 16) AVI Systems GmbH\r
Dr. Franz Wilhelmstraße 2A\r
NO.68, Qinghe Middle Street Haidian District, Beijing 100085\r
CN\r
\r
-08-71-90 (hex) Intel Corporate\r
-087190 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
B0-3E-51 (hex) BSkyB Ltd\r
B03E51 (base 16) BSkyB Ltd\r
130 Kings Road\r
Dongguan 523808\r
CN\r
\r
-40-74-E0 (hex) Intel Corporate\r
-4074E0 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
DC-54-D7 (hex) Amazon Technologies Inc.\r
DC54D7 (base 16) Amazon Technologies Inc.\r
P.O Box 8102\r
88-B4-36 (hex) Private\r
88B436 (base 16) Private\r
\r
-84-FD-D1 (hex) Intel Corporate\r
-84FDD1 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
6C-AB-05 (hex) Cisco Systems, Inc\r
6CAB05 (base 16) Cisco Systems, Inc\r
80 West Tasman Drive\r
San Francisco CA 94105\r
US\r
\r
-DC-FB-48 (hex) Intel Corporate\r
-DCFB48 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
84-6F-CE (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
846FCE (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
NO.18 HAIBIN ROAD,\r
Taipei Taiwan 112\r
TW\r
\r
-A0-51-0B (hex) Intel Corporate\r
-A0510B (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
F0-D4-E2 (hex) Dell Inc.\r
F0D4E2 (base 16) Dell Inc.\r
One Dell Way\r
Houston 77070\r
US\r
\r
-48-F1-7F (hex) Intel Corporate\r
-48F17F (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
80-84-A9 (hex) oshkosh Corporation\r
8084A9 (base 16) oshkosh Corporation\r
2307 Oregon Street\r
SANTA CLARA CA 95052-8185\r
US\r
\r
-D8-F2-CA (hex) Intel Corporate\r
-D8F2CA (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
B4-C6-2E (hex) Molex CMS\r
B4C62E (base 16) Molex CMS\r
2222 Wellington Court\r
Hangzhou Zhejiang 310052\r
CN\r
\r
-48-A4-72 (hex) Intel Corporate\r
-48A472 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
4C-01-43 (hex) eero inc.\r
4C0143 (base 16) eero inc.\r
660 3rd Street\r
Hanover MD 21076\r
US\r
\r
-C0-B6-F9 (hex) Intel Corporate\r
-C0B6F9 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
68-DD-26 (hex) Shanghai Focus Vision Security Technology Co.,Ltd\r
68DD26 (base 16) Shanghai Focus Vision Security Technology Co.,Ltd\r
No.4888 Hunan Rd, Pudong New District\r
New Taipei City, Taiwan 24159\r
TW\r
\r
-14-4F-8A (hex) Intel Corporate\r
-144F8A (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
00-21-06 (hex) RIM Testing Services\r
002106 (base 16) RIM Testing Services\r
440 Phillip Street\r
Rueil Malmaison Cedex hauts de seine 92848\r
FR\r
\r
-B4-6B-FC (hex) Intel Corporate\r
-B46BFC (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
B0-FC-0D (hex) Amazon Technologies Inc.\r
B0FC0D (base 16) Amazon Technologies Inc.\r
P.O Box 8102\r
shenzhen guangdong 518057\r
CN\r
\r
-7C-2A-31 (hex) Intel Corporate\r
-7C2A31 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
00-10-D8 (hex) CALISTA\r
0010D8 (base 16) CALISTA\r
56A Packhorse Road\r
Berlin Berlin 10559\r
DE\r
\r
-74-70-FD (hex) Intel Corporate\r
-7470FD (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
C8-8F-26 (hex) Skyworth Digital Technology(Shenzhen) Co.,Ltd\r
C88F26 (base 16) Skyworth Digital Technology(Shenzhen) Co.,Ltd\r
7F,Block A,Skyworth Building,\r
New Taipei City Taiwan 23585\r
TW\r
\r
-7C-76-35 (hex) Intel Corporate\r
-7C7635 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
78-80-38 (hex) FUNAI ELECTRIC CO., LTD.\r
788038 (base 16) FUNAI ELECTRIC CO., LTD.\r
7-1, NAKAGAITO 7-CHOME\r
Kanata Ontario K2K 2E6\r
CA\r
\r
-68-EC-C5 (hex) Intel Corporate\r
-68ECC5 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
9C-65-EE (hex) DASAN Network Solutions\r
9C65EE (base 16) DASAN Network Solutions\r
DASAN Tower 8F, 49 Daewangpangyo-ro644beon-gil Bundang-gu\r
Shenkeng Dist. New Taipei City 222\r
TW\r
\r
-00-13-51 (hex) Niles Audio Corporation\r
-001351 (base 16) Niles Audio Corporation\r
- 12331 SW 130th Street\r
- Miami FL 33186\r
- US\r
-\r
A0-2C-36 (hex) FN-LINK TECHNOLOGY LIMITED\r
A02C36 (base 16) FN-LINK TECHNOLOGY LIMITED\r
A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District\r
Ohta-ku Tokyo 146-8501\r
JP\r
\r
-A8-1E-84 (hex) QUANTA COMPUTER INC. \r
-A81E84 (base 16) QUANTA COMPUTER INC. \r
- No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang\r
- Tao Yuan 33377\r
- TW\r
-\r
24-C1-BD (hex) CRRC DALIAN R&D CO.,LTD.\r
24C1BD (base 16) CRRC DALIAN R&D CO.,LTD.\r
No.1 Haoyang North Street,Lvshun Economic Deveopment Zone\r
000 0000\r
IL\r
\r
-08-9E-01 (hex) QUANTA COMPUTER INC.\r
-089E01 (base 16) QUANTA COMPUTER INC.\r
- No.211, Wen Hwa 2nd Rd\r
- Taoyuan Taiwan 33377\r
- TW\r
-\r
-04-7D-7B (hex) QUANTA COMPUTER INC.\r
-047D7B (base 16) QUANTA COMPUTER INC.\r
- NO. 211, WEN HWA 2RD.,KUEI SHAN HSIANG, TAO YUAN SHIEN,\r
- TAIPEI TAIWAN 333\r
- TW\r
-\r
9C-61-21 (hex) SICHUAN TIANYI COMHEART TELECOMCO.,LTD\r
9C6121 (base 16) SICHUAN TIANYI COMHEART TELECOMCO.,LTD\r
FL12,TowerB,Tianyi international Hotel,No.2 West Section One, Second Ring Road,\r
Zhuhai Guangdong 519085\r
CN\r
\r
-38-F0-C8 (hex) Livestream\r
-38F0C8 (base 16) Livestream\r
- 195 Morgan Avenue\r
- Brooklyn NY 11237\r
- US\r
-\r
80-29-94 (hex) Technicolor CH USA Inc.\r
802994 (base 16) Technicolor CH USA Inc.\r
5030 Sugarloaf Parkway Bldg 6\r
HsinChu HsinFun Shiang 304\r
TW\r
\r
-08-8F-2C (hex) Hills Sound Vision & Lighting\r
-088F2C (base 16) Hills Sound Vision & Lighting\r
- 1 Clyde Street\r
- Silverwater New South Wales 2128\r
- AU\r
-\r
44-13-19 (hex) WKK TECHNOLOGY LTD.\r
441319 (base 16) WKK TECHNOLOGY LTD.\r
23/F., One Kowloon, No.1, Wang Yuen Street, \r
Getinge 31044\r
SE\r
\r
-10-65-A3 (hex) Core Brands LLC\r
-1065A3 (base 16) Core Brands LLC\r
- 1880 South McDowell Blvd\r
- Petaluma CA 94954\r
- US\r
-\r
9C-5B-96 (hex) NMR Corporation\r
9C5B96 (base 16) NMR Corporation\r
3F Esprit Build.,1-3-6 Nishi-Nippori\r
Daejeon 302-809\r
KR\r
\r
-00-25-DC (hex) Sumitomo Electric Industries,Ltd\r
-0025DC (base 16) Sumitomo Electric Industries,Ltd\r
- 1-1-3, Shimaya, Konohana-ku\r
- Osaka 554-0024\r
- JP\r
-\r
00-25-D4 (hex) General Dynamics Mission Systems\r
0025D4 (base 16) General Dynamics Mission Systems\r
150 Rustcraft Road\r
Taipei 105\r
TW\r
\r
-00-12-E3 (hex) Agat-RT, Ltd.\r
-0012E3 (base 16) Agat-RT, Ltd.\r
- 101 pr. Mira #1220,\r
- Moscow 129085\r
- RU\r
-\r
00-12-36 (hex) ConSentry Networks\r
001236 (base 16) ConSentry Networks\r
1690 McCandless Dr\r
\r
BE\r
\r
-00-05-C9 (hex) LG Innotek Co., Ltd.\r
-0005C9 (base 16) LG Innotek Co., Ltd.\r
- LG Component R&D Center\r
- Ansan-si Gyeonggi-do 426-791\r
- KR\r
-\r
00-05-FB (hex) ShareGate, Inc.\r
0005FB (base 16) ShareGate, Inc.\r
9805 Double R Blvd.\r
Tottori City 680-8634\r
JP\r
\r
-00-02-C4 (hex) Vector International BVBA\r
-0002C4 (base 16) Vector International BVBA\r
- Technologielaan 4\r
- 3001 Leuven \r
- BE\r
-\r
00-02-BF (hex) dotRocket, Inc.\r
0002BF (base 16) dotRocket, Inc.\r
1901 S. Bascom, Suite 300\r
Washington DC 20008\r
US\r
\r
-00-30-54 (hex) CASTLENET TECHNOLOGY, INC.\r
-003054 (base 16) CASTLENET TECHNOLOGY, INC.\r
- NO. 130 WU-KUNG RD.,\r
- TAIWAN TAIWAN R.O.C.\r
- TW\r
-\r
00-30-0B (hex) mPHASE Technologies, Inc.\r
00300B (base 16) mPHASE Technologies, Inc.\r
250 14th Street\r
Shenzhen guangdong 518053\r
CN\r
\r
-5C-CD-5B (hex) Intel Corporate\r
-5CCD5B (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
A0-AB-51 (hex) WEIFANG GOERTEK ELECTRONICS CO.,LTD\r
A0AB51 (base 16) WEIFANG GOERTEK ELECTRONICS CO.,LTD\r
Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China\r
Chong Qing Chong Qing 401120\r
CN\r
\r
-98-AF-65 (hex) Intel Corporate\r
-98AF65 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
5C-71-0D (hex) Cisco Systems, Inc\r
5C710D (base 16) Cisco Systems, Inc\r
80 West Tasman Dr.\r
Cupertino CA 95014\r
US\r
\r
-40-A6-B7 (hex) Intel Corporate\r
-40A6B7 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
64-69-4E (hex) Texas Instruments\r
64694E (base 16) Texas Instruments\r
12500 TI Blvd\r
Dallas TX 75243\r
US\r
\r
-0C-7A-15 (hex) Intel Corporate\r
-0C7A15 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
94-D6-DB (hex) NexFi\r
94D6DB (base 16) NexFi\r
Room 417, Building 14, No. 498, Guoshoujing Road, Pudong New Area\r
30-27-CF (hex) Private\r
3027CF (base 16) Private\r
\r
-54-8D-5A (hex) Intel Corporate\r
-548D5A (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
38-43-E5 (hex) Grotech Inc\r
3843E5 (base 16) Grotech Inc\r
19, Ojeongongeop-gil\r
BANGALORE KARNATAKA 560013\r
IN\r
\r
-58-96-1D (hex) Intel Corporate\r
-58961D (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
68-AF-FF (hex) Shanghai Cambricon Information Technology Co., Ltd.\r
68AFFF (base 16) Shanghai Cambricon Information Technology Co., Ltd.\r
888 West Huanhu Road No.2, Nanhui New Town, Pudong New Area\r
Shanghai Shanghai 201203\r
CN\r
\r
-B8-9A-2A (hex) Intel Corporate\r
-B89A2A (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
40-2C-76 (hex) IEEE Registration Authority\r
402C76 (base 16) IEEE Registration Authority\r
445 Hoes Lane\r
Shenzhen Guangdong 518057\r
CN\r
\r
-74-D8-3E (hex) Intel Corporate\r
-74D83E (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
-08-D2-3E (hex) Intel Corporate\r
-08D23E (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
88-A4-79 (hex) Apple, Inc.\r
88A479 (base 16) Apple, Inc.\r
1 Infinite Loop\r
shenzhen guangdong 518057\r
CN\r
\r
-A8-7E-EA (hex) Intel Corporate\r
-A87EEA (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
20-11-4E (hex) MeteRSit S.R.L.\r
20114E (base 16) MeteRSit S.R.L.\r
Viale dell'Industria 31\r
Odawara Kanagawa 250-0011\r
JP\r
\r
-40-EC-99 (hex) Intel Corporate\r
-40EC99 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
6C-D9-4C (hex) vivo Mobile Communication Co., Ltd.\r
6CD94C (base 16) vivo Mobile Communication Co., Ltd.\r
#283,BBK Road\r
Schiltach 77761\r
DE\r
\r
-BC-54-2F (hex) Intel Corporate\r
-BC542F (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
44-10-FE (hex) Huizhou Foryou General Electronics Co., Ltd.\r
4410FE (base 16) Huizhou Foryou General Electronics Co., Ltd.\r
North Shangxia Road, Dongjiang Hi-tech Industry Park\r
Rosenheim BY 83026\r
DE\r
\r
-34-CF-F6 (hex) Intel Corporate\r
-34CFF6 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
EC-79-49 (hex) FUJITSU LIMITED\r
EC7949 (base 16) FUJITSU LIMITED\r
403, Kosugi-cho 1-chome, Nakahara-ku\r
San Diego CA 92121\r
US\r
\r
-78-2B-46 (hex) Intel Corporate\r
-782B46 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
68-33-2C (hex) KENSTEL NETWORKS LIMITED\r
68332C (base 16) KENSTEL NETWORKS LIMITED\r
34D SECTOR 57 HSIIDC INDUSTRIAL AREA PHASE 4\r
Hanover MD 21076\r
US\r
\r
+A8-40-25 (hex) Oxide Computer Company\r
+A84025 (base 16) Oxide Computer Company\r
+ 1251 Park Avenue\r
+ Emeryville CA 94608\r
+ US\r
+\r
+10-65-A3 (hex) Panamax LLC\r
+1065A3 (base 16) Panamax LLC\r
+ 5919 Sea Otter Place\r
+ Carlsbad CA 92010\r
+ US\r
+\r
+C8-5B-A0 (hex) Shenzhen Qihu Intelligent Technology Company Limited\r
+C85BA0 (base 16) Shenzhen Qihu Intelligent Technology Company Limited\r
+ Room 201, Block A, No.1, Qianwan Road 1,Qianhai Shenzhen HongKong Modern Service Industry Cooperation Zone\r
+ Shenzhen Guangdong 518057\r
+ CN\r
+\r
+E0-BE-03 (hex) Lite-On Network Communication (Dongguan) Limited\r
+E0BE03 (base 16) Lite-On Network Communication (Dongguan) Limited\r
+ 30#Keji Rd,YinHu Industrial Area,Qingxi Town Dongguan City,Guang Dong China\r
+ Dongguan Guang Dong 523648\r
+ CN\r
+\r
+5C-90-12 (hex) Owl Cyber Defense Solutions, LLC\r
+5C9012 (base 16) Owl Cyber Defense Solutions, LLC\r
+ 38A Grove Street\r
+ Ridgefield CT 06877\r
+ US\r
+\r
+38-F7-CD (hex) IEEE Registration Authority\r
+38F7CD (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+98-CB-A4 (hex) Benchmark Electronics\r
+98CBA4 (base 16) Benchmark Electronics\r
+ Free Industrial Zone, Phase 1, \r
+ Bayan Lepas Penang 11900\r
+ MY\r
+\r
+00-12-E3 (hex) Agat Soft LLC\r
+0012E3 (base 16) Agat Soft LLC\r
+ building 14, stroenie 15, room 7\r
+ Moscow Serebryakova proezd 129343\r
+ RU\r
+\r
+00-13-51 (hex) Niles Audio Corporation\r
+001351 (base 16) Niles Audio Corporation\r
+ 5919 Sea Otter Place\r
+ Carlsbad CA 92010\r
+ US\r
+\r
+18-3C-B7 (hex) Huawei Device Co., Ltd.\r
+183CB7 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+A4-88-73 (hex) Cisco Systems, Inc\r
+A48873 (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+B8-80-4F (hex) Texas Instruments\r
+B8804F (base 16) Texas Instruments\r
+ 12500 TI Blvd\r
+ Dallas TX 75243\r
+ US\r
+\r
+FC-A5-D0 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+FCA5D0 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+ NO.18 HAIBIN ROAD,\r
+ DONG GUAN GUANG DONG 523860\r
+ CN\r
+\r
+04-CB-88 (hex) Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd\r
+04CB88 (base 16) Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd\r
+ 3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District\r
+ Shenzhen Guangdong 518055\r
+ CN\r
+\r
+A0-62-60 (hex) Private\r
+A06260 (base 16) Private\r
+\r
+A4-BD-C4 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+A4BDC4 (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-91-57 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+5C9157 (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-16-93 (hex) Lear Corporation GmbH\r
+481693 (base 16) Lear Corporation GmbH\r
+ Industriestrasse 48\r
+ Kronach Bavaria 96317\r
+ DE\r
+\r
+B4-79-47 (hex) Nutanix\r
+B47947 (base 16) Nutanix\r
+ 1740 Technology Drive Ste #150\r
+ San Jose CA 95110\r
+ US\r
+\r
+04-F8-F8 (hex) Edgecore Networks Corporation\r
+04F8F8 (base 16) Edgecore Networks Corporation\r
+ 1 Creation RD 3.\r
+ Hsinchu 30077\r
+ TW\r
+\r
+38-F0-C8 (hex) Mevo Inc.\r
+38F0C8 (base 16) Mevo Inc.\r
+ 19 Morris Avenue\r
+ Brooklyn NY 11205\r
+ US\r
+\r
+5C-FE-9E (hex) Wiwynn Corporation Tainan Branch\r
+5CFE9E (base 16) Wiwynn Corporation Tainan Branch\r
+ 4F, NO. 8, Beiyuan 3rd Rd., Anding Dist.,\r
+ Tainan 745\r
+ TW\r
+\r
+88-1C-95 (hex) ITEL MOBILE LIMITED\r
+881C95 (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
+F4-69-42 (hex) ASKEY COMPUTER CORP\r
+F46942 (base 16) ASKEY COMPUTER CORP\r
+ 10F,No.119,JIANKANG RD,ZHONGHE DIST\r
+ NEW TAIPEI TAIWAN 23585\r
+ TW\r
+\r
+24-14-07 (hex) Xiamen Sigmastar Technology Ltd.\r
+241407 (base 16) Xiamen Sigmastar Technology Ltd.\r
+ 15th Floor ,Unit A,Chuangxin Building, Software Park, Xiamen Torch Hi-Tech Industrial Development Zone, Xiamen,China\r
+ Xiamen Fujian 361005\r
+ CN\r
+\r
+08-E9-F6 (hex) AMPAK Technology,Inc.\r
+08E9F6 (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
+F0-2E-51 (hex) Casa Systems\r
+F02E51 (base 16) Casa Systems\r
+ 18-20 Orion Road Lane Cove West\r
+ LANE COVE NSW 2066\r
+ AU\r
+\r
+CC-C2-61 (hex) IEEE Registration Authority\r
+CCC261 (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+74-70-FD (hex) Intel Corporate\r
+7470FD (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+7C-2A-31 (hex) Intel Corporate\r
+7C2A31 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+B4-6B-FC (hex) Intel Corporate\r
+B46BFC (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+14-4F-8A (hex) Intel Corporate\r
+144F8A (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+C0-B6-F9 (hex) Intel Corporate\r
+C0B6F9 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+48-A4-72 (hex) Intel Corporate\r
+48A472 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+D8-F2-CA (hex) Intel Corporate\r
+D8F2CA (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+48-F1-7F (hex) Intel Corporate\r
+48F17F (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+44-56-E2 (hex) Sichuan Tianyi Comheart Telecom Co., Ltd.\r
+4456E2 (base 16) Sichuan Tianyi Comheart Telecom Co., Ltd.\r
+ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County\r
+ Chengdu Sichuan 611330\r
+ CN\r
+\r
+68-EC-C5 (hex) Intel Corporate\r
+68ECC5 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+7C-76-35 (hex) Intel Corporate\r
+7C7635 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+64-0B-D7 (hex) Apple, Inc.\r
+640BD7 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+A8-91-3D (hex) Apple, Inc.\r
+A8913D (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+4C-C9-5E (hex) Samsung Electronics Co.,Ltd\r
+4CC95E (base 16) Samsung Electronics Co.,Ltd\r
+ 129, Samsung-ro, Youngtongl-Gu\r
+ Suwon Gyeonggi-Do 16677\r
+ KR\r
+\r
+0C-3B-50 (hex) Apple, Inc.\r
+0C3B50 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+78-2B-46 (hex) Intel Corporate\r
+782B46 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+34-7D-F6 (hex) Intel Corporate\r
+347DF6 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+CC-D9-AC (hex) Intel Corporate\r
+CCD9AC (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+9C-29-76 (hex) Intel Corporate\r
+9C2976 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+B8-9A-2A (hex) Intel Corporate\r
+B89A2A (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+58-96-1D (hex) Intel Corporate\r
+58961D (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+74-D8-3E (hex) Intel Corporate\r
+74D83E (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+08-D2-3E (hex) Intel Corporate\r
+08D23E (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+A8-7E-EA (hex) Intel Corporate\r
+A87EEA (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+40-EC-99 (hex) Intel Corporate\r
+40EC99 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+BC-54-2F (hex) Intel Corporate\r
+BC542F (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+34-CF-F6 (hex) Intel Corporate\r
+34CFF6 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+C8-7E-A1 (hex) TCL MOKA International Limited\r
+C87EA1 (base 16) TCL MOKA International Limited\r
+ 7/F, Building 22E 22 Science Park East Avenue\r
+ Hong Kong 999077\r
+ HK\r
+\r
+64-2C-0F (hex) vivo Mobile Communication Co., Ltd.\r
+642C0F (base 16) vivo Mobile Communication Co., Ltd.\r
+ #283,BBK Road\r
+ Wusha,Chang'An DongGuan City,Guangdong, 523860\r
+ CN\r
+\r
+A0-51-0B (hex) Intel Corporate\r
+A0510B (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+DC-FB-48 (hex) Intel Corporate\r
+DCFB48 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+84-FD-D1 (hex) Intel Corporate\r
+84FDD1 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+40-74-E0 (hex) Intel Corporate\r
+4074E0 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+08-71-90 (hex) Intel Corporate\r
+087190 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+5C-CD-5B (hex) Intel Corporate\r
+5CCD5B (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+98-AF-65 (hex) Intel Corporate\r
+98AF65 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+40-A6-B7 (hex) Intel Corporate\r
+40A6B7 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+0C-7A-15 (hex) Intel Corporate\r
+0C7A15 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+54-8D-5A (hex) Intel Corporate\r
+548D5A (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+30-66-D0 (hex) Huawei Device Co., Ltd.\r
+3066D0 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+3C-B2-33 (hex) Huawei Device Co., Ltd.\r
+3CB233 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+20-9E-79 (hex) Universal Electronics, Inc.\r
+209E79 (base 16) Universal Electronics, Inc.\r
+ 201 E. Sandpointe Ave\r
+ Santa Ana CA 92707\r
+ US\r
+\r
+AC-5F-EA (hex) OnePlus Technology (Shenzhen) Co., Ltd\r
+AC5FEA (base 16) OnePlus Technology (Shenzhen) Co., Ltd\r
+ 18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,\r
+ Shenzhen Guangdong 518000\r
+ CN\r
+\r
+04-4A-C6 (hex) Aipon Electronics Co., Ltd\r
+044AC6 (base 16) Aipon Electronics Co., Ltd\r
+ #78, Qiaojiao Dong road, Qiaolong, Tangxia Town\r
+ Dongguan City Guangdong Province 523-710\r
+ CN\r
+\r
+5C-D5-B5 (hex) Shenzhen WiSiYiLink Technology Co.,Ltd\r
+5CD5B5 (base 16) Shenzhen WiSiYiLink Technology Co.,Ltd\r
+ Building a 3, huafengzhigu Yuanshan hi tech Industrial Park, No.62, Yinhe Road, he'ao community, Yuanshan street, Longgang District\r
+ Shenzhen 518100\r
+ CN\r
+\r
+88-94-8F (hex) Xi'an Zhisensor Technologies Co.,Ltd\r
+88948F (base 16) Xi'an Zhisensor Technologies Co.,Ltd\r
+ No.52 Jinye 1st Road Xi'an,Shaanxi,China\r
+ Xi an Xi an High-Tech Zone 710077\r
+ CN\r
+\r
+18-95-52 (hex) 1MORE\r
+189552 (base 16) 1MORE\r
+ TianliaoBuilding F14, New Materials Industrial Park, Xueyuan Blvd?Nanshan\r
+ Shenzhen Guangdong 518055\r
+ CN\r
+\r
+C0-FF-A8 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+C0FFA8 (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-51-7E (hex) Hangzhou Hikvision Digital Technology Co.,Ltd.\r
+C0517E (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd.\r
+ No.555 Qianmo Road\r
+ Hangzhou Zhejiang 310052\r
+ CN\r
+\r
+FC-14-99 (hex) Aimore Acoustics Incorporation\r
+FC1499 (base 16) Aimore Acoustics Incorporation\r
+ 16F,Tianliao Building(New Material industrial Park), Xueyuan Avenue, Nanshan District\r
+ Shenzhen Guangdong 518055\r
+ CN\r
+\r
+98-C7-A4 (hex) Shenzhen HS Fiber Communication Equipment CO., LTD\r
+98C7A4 (base 16) Shenzhen HS Fiber Communication Equipment CO., LTD\r
+ 6F, Bld#A, Dezhong Industrial Park, Yangmei Village, Bantian Town, Longgang District\r
+ Shenzhen Guangdong 518129\r
+ CN\r
+\r
+00-BE-D5 (hex) New H3C Technologies Co., Ltd\r
+00BED5 (base 16) New H3C Technologies Co., Ltd\r
+ 466 Changhe Road, Binjiang District\r
+ Hangzhou Zhejiang 310052\r
+ CN\r
+\r
+00-02-C4 (hex) OPT Machine Vision Tech Co., Ltd\r
+0002C4 (base 16) OPT Machine Vision Tech Co., Ltd\r
+ no. 8 JInSheng Road, JinXia Zone, Chang'An Town\r
+ Dongguan Guangdong 523000\r
+ CN\r
+\r
+AC-F1-08 (hex) LG Innotek\r
+ACF108 (base 16) LG Innotek\r
+ 26, Hanamsandan 5beon-ro\r
+ Gwangju Gwangsan-gu 506-731\r
+ KR\r
+\r
+08-ED-9D (hex) TECNO MOBILE LIMITED\r
+08ED9D (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
+E8-6D-CB (hex) Samsung Electronics Co.,Ltd\r
+E86DCB (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
+\r
+30-49-50 (hex) IEEE Registration Authority\r
+304950 (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+00-05-C9 (hex) LG Innotek\r
+0005C9 (base 16) LG Innotek\r
+ LG Component R&D Center\r
+ Ansan-si Gyeonggi-do 426-791\r
+ KR\r
+\r
+0C-DC-7E (hex) Espressif Inc.\r
+0CDC7E (base 16) Espressif Inc.\r
+ Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+ Shanghai Shanghai 201203\r
+ CN\r
+\r
+20-98-D8 (hex) Shenzhen Yingdakang Technology CO., LTD\r
+2098D8 (base 16) Shenzhen Yingdakang Technology CO., LTD\r
+ 8004,Building 51,Block 2,Shangtang Songzi Park, MinZhi St., Longhua Dist\r
+ Shenzhen 518055\r
+ CN\r
+\r
+7C-C7-7E (hex) Fiberhome Telecommunication Technologies Co.,LTD\r
+7CC77E (base 16) Fiberhome Telecommunication Technologies Co.,LTD\r
+ No.5 DongXin Road\r
+ Wuhan Hubei 430074\r
+ CN\r
+\r
+A0-CF-F5 (hex) zte corporation\r
+A0CFF5 (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
+1C-01-2D (hex) Ficer Technology\r
+1C012D (base 16) Ficer Technology\r
+ 2F, No.138, Daye Rd., Beitou Dist.,\r
+ Taipei City 11268\r
+ TW\r
+\r
+3C-A6-2F (hex) AVM Audiovisuelles Marketing und Computersysteme GmbH\r
+3CA62F (base 16) AVM Audiovisuelles Marketing und Computersysteme GmbH\r
+ Alt-Moabit 95\r
+ Berlin Berlin 10559\r
+ DE\r
+\r
+98-B3-EF (hex) Huawei Device Co., Ltd.\r
+98B3EF (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+50-F9-58 (hex) Huawei Device Co., Ltd.\r
+50F958 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+C0-A3-6E (hex) BSkyB Ltd\r
+C0A36E (base 16) BSkyB Ltd\r
+ 130 Kings Road\r
+ Brentwood Essex 08854\r
+ GB\r
+\r
+60-32-B1 (hex) TP-LINK TECHNOLOGIES CO.,LTD.\r
+6032B1 (base 16) TP-LINK TECHNOLOGIES CO.,LTD.\r
+ Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan\r
+ Shenzhen Guangdong 518057\r
+ CN\r
+\r
+7C-FD-6B (hex) Xiaomi Communications Co Ltd\r
+7CFD6B (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
+E4-1F-7B (hex) Cisco Systems, Inc\r
+E41F7B (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+18-26-49 (hex) Intel Corporate\r
+182649 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+88-03-E9 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+8803E9 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+ NO.18 HAIBIN ROAD,\r
+ DONG GUAN GUANG DONG 523860\r
+ CN\r
+\r
+34-58-40 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+345840 (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-64-7A (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+5C647A (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
+BC-7F-7B (hex) Huawei Device Co., Ltd.\r
+BC7F7B (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+F0-FA-C7 (hex) Huawei Device Co., Ltd.\r
+F0FAC7 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+DC-EF-80 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+DCEF80 (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-6F-2D (hex) Wahoo Fitness\r
+B46F2D (base 16) Wahoo Fitness\r
+ 90 W Wieuca Rd, Suite 110\r
+ Atlanta GA 30342\r
+ US\r
+\r
+5C-85-7E (hex) IEEE Registration Authority\r
+5C857E (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+84-6B-48 (hex) ShenZhen EepuLink Co., Ltd.\r
+846B48 (base 16) ShenZhen EepuLink Co., Ltd.\r
+ 4th Floor, Building 3, Nangang 1st industrial zone, Xili street, Nanshan district,\r
+ ShenZhen Guangdong 518000\r
+ CN\r
+\r
+B4-60-ED (hex) Beijing Xiaomi Mobile Software Co., Ltd\r
+B460ED (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
+30-CC-21 (hex) zte corporation\r
+30CC21 (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
+64-6C-80 (hex) CHONGQING FUGUI ELECTRONICS CO.,LTD.\r
+646C80 (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
+08-9E-01 (hex) Quanta Computer Inc.\r
+089E01 (base 16) Quanta Computer Inc.\r
+ No.211, Wen Hwa 2nd Rd\r
+ Taoyuan Taiwan 33377\r
+ TW\r
+\r
+A8-1E-84 (hex) Quanta Computer Inc.\r
+A81E84 (base 16) Quanta Computer Inc.\r
+ No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang\r
+ Tao Yuan 33377\r
+ TW\r
+\r
+C0-18-50 (hex) Quanta Computer Inc.\r
+C01850 (base 16) Quanta Computer Inc.\r
+ No. 211, Wen-Hwa 2nd Rd.,Kuei-Shan Dist.\r
+ Taoyuan City Taiwan 33377\r
+ TW\r
+\r
+44-27-F3 (hex) 70mai Co.,Ltd.\r
+4427F3 (base 16) 70mai Co.,Ltd.\r
+ Room 2220, building 2, No. 588, Zixing road\r
+ Shanghai MinHang District 201100\r
+ CN\r
+\r
+04-7D-7B (hex) Quanta Computer Inc.\r
+047D7B (base 16) Quanta Computer Inc.\r
+ NO. 211, WEN HWA 2RD.,KUEI SHAN HSIANG, TAO YUAN SHIEN,\r
+ TAIPEI TAIWAN 333\r
+ TW\r
+\r
+00-25-DC (hex) Sumitomo Electric Industries, Ltd\r
+0025DC (base 16) Sumitomo Electric Industries, Ltd\r
+ 1-1-3, Shimaya, Konohana-ku\r
+ Osaka 554-0024\r
+ JP\r
+\r
+D4-F3-37 (hex) Xunison Ltd.\r
+D4F337 (base 16) Xunison Ltd.\r
+ 25 Kilbarbery Business Park, Upper Nangor Road\r
+ Dublin 22 Co. Dublin D22 NH32\r
+ IE\r
+\r
+48-A2-B8 (hex) Chengdu Vision-Zenith Tech.Co,.Ltd\r
+48A2B8 (base 16) Chengdu Vision-Zenith Tech.Co,.Ltd\r
+ China (Sichuan) Free Trade Test Zone Chengdu Hi-tech Zone 300 Jiaozi Avenue 3 buildings 22\r
+ Chengdu Sichuan 610041\r
+ CN\r
+\r
+C0-B8-E6 (hex) Ruijie Networks Co.,LTD\r
+C0B8E6 (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
+8C-94-1F (hex) Cisco Systems, Inc\r
+8C941F (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+68-7D-B4 (hex) Cisco Systems, Inc\r
+687DB4 (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+58-E8-73 (hex) HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd\r
+58E873 (base 16) HANGZHOU DANGBEI NETWORK TECH.Co.,Ltd\r
+ Build C,Wanfu Center,Binkang Road No.228,Binjiang Area\r
+ China 210051\r
+ CN\r
+\r
+B0-30-C8 (hex) Teal Drones, Inc.\r
+B030C8 (base 16) Teal Drones, Inc.\r
+ 5200 South Highland Drive\r
+ Holladay UT 84117\r
+ US\r
+\r
+DC-41-A9 (hex) Intel Corporate\r
+DC41A9 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+08-8F-2C (hex) Amber Technology Ltd.\r
+088F2C (base 16) Amber Technology Ltd.\r
+ Unit 1, 2 Daydream Street\r
+ Warriewood New South Wales 2102\r
+ AU\r
+\r
+A8-35-12 (hex) Huawei Device Co., Ltd.\r
+A83512 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+D4-A6-51 (hex) HANGZHOU AIXIANGJI TECHNOLOGY CO., LTD\r
+D4A651 (base 16) HANGZHOU AIXIANGJI TECHNOLOGY CO., LTD\r
+ 34/F.,ICBC Tower,3 Garden Road, Central, Hong Kong.\r
+ Hong Kong Central Garden Road 510031\r
+ CN\r
+\r
+90-F6-44 (hex) Huawei Device Co., Ltd.\r
+90F644 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+44-AF-28 (hex) Intel Corporate\r
+44AF28 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+9C-9D-7E (hex) Beijing Xiaomi Mobile Software Co., Ltd\r
+9C9D7E (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
+74-12-B3 (hex) CHONGQING FUGUI ELECTRONICS CO.,LTD.\r
+7412B3 (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
+94-47-B0 (hex) BEIJING ESWIN COMPUTING TECHNOLOGY CO., LTD\r
+9447B0 (base 16) BEIJING ESWIN COMPUTING TECHNOLOGY CO., LTD\r
+ Room 2179, Floor2,Block D, Building 33, Centralised Office Area, No.99, Kechuangshisi Road, BDA, Beijing\r
+ BEIJING BEIJING 100176\r
+ CN\r
+\r
+A0-68-1C (hex) GD Midea Air-Conditioning Equipment Co.,Ltd.\r
+A0681C (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
+6C-44-2A (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+6C442A (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-7C-C9 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+A47CC9 (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
+C4-0D-96 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+C40D96 (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-5C-7D (hex) Shenzhen Honesty Electronics Co.,Ltd.\r
+F85C7D (base 16) Shenzhen Honesty Electronics Co.,Ltd.\r
+ 5/F,Zone B,Chitat Industrial Park,West Longping Road, Longgang District,Shenzhen City\r
+ Shenzhen Guangdong 518172\r
+ CN\r
+\r
+84-22-5E (hex) SHENZHEN TECHNEWCHIP TECHNOLOGY CO.,LTD.\r
+84225E (base 16) SHENZHEN TECHNEWCHIP TECHNOLOGY CO.,LTD.\r
+ XILI STREET\r
+ SHENZHEN GUANGDONG 5180000\r
+ CN\r
+\r
+E4-5A-D4 (hex) Eltex Enterprise Ltd.\r
+E45AD4 (base 16) Eltex Enterprise Ltd.\r
+ Okruzhnaya st. 29v\r
+ Novosibirsk 630020\r
+ RU\r
+\r
+84-2A-FD (hex) HP Inc.\r
+842AFD (base 16) HP Inc.\r
+ 10300 Energy Dr\r
+ Spring TX 77389\r
+ US\r
+\r
+1C-FE-2B (hex) Amazon Technologies Inc.\r
+1CFE2B (base 16) Amazon Technologies Inc.\r
+ P.O Box 8102\r
+ Reno NV 89507\r
+ US\r
+\r
+CC-48-3A (hex) Dell Inc.\r
+CC483A (base 16) Dell Inc.\r
+ One Dell Way\r
+ Round Rock TX 78682\r
+ US\r
+\r
+A4-AE-12 (hex) Hon Hai Precision Ind. Co., Ltd.\r
+A4AE12 (base 16) Hon Hai Precision Ind. Co., Ltd.\r
+ GuangDongShenZhen\r
+ ShenZhen GuangDong 518109\r
+ CN\r
+\r
+DC-A3-A2 (hex) Feng mi(Beijing)technology co., LTD\r
+DCA3A2 (base 16) Feng mi(Beijing)technology co., LTD\r
+ RenHe Town barracks south street 10 yuan 33 level 301\r
+ shunyi district Beijing 101300\r
+ CN\r
+\r
+7C-25-DA (hex) FN-LINK TECHNOLOGY LIMITED\r
+7C25DA (base 16) FN-LINK TECHNOLOGY LIMITED\r
+ A Building,HuiXin industial park,No 31, YongHe road, Fuyong town, Bao'an District\r
+ SHENZHEN GUANGDONG 518100\r
+ CN\r
+\r
+A8-69-8C (hex) Oracle Corporation \r
+A8698C (base 16) Oracle Corporation \r
+ 500 Oracle Parkway\r
+ Redwood Shores CA 94065\r
+ US\r
+\r
+EC-57-0D (hex) AFE Inc.\r
+EC570D (base 16) AFE Inc.\r
+ 11210 County Line Rd\r
+ Mount Pleasant WI 53177\r
+ US\r
+\r
+A4-AC-0F (hex) Huawei Device Co., Ltd.\r
+A4AC0F (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+CC-FF-90 (hex) Huawei Device Co., Ltd.\r
+CCFF90 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+54-05-DB (hex) LCFC(HeFei) Electronics Technology co., ltd\r
+5405DB (base 16) LCFC(HeFei) Electronics Technology co., ltd\r
+ YunGu Road 3188-1\r
+ Hefei Anhui 230000\r
+ CN\r
+\r
+44-A5-4E (hex) Qorvo Utrecht B.V.\r
+44A54E (base 16) Qorvo Utrecht B.V.\r
+ Leidseveer 10\r
+ Utrecht Utrecht 3511SB\r
+ NL\r
+\r
+00-30-54 (hex) Castlenet Technology Inc.\r
+003054 (base 16) Castlenet Technology Inc.\r
+ NO. 130 WU-KUNG RD.,\r
+ TAIWAN TAIWAN R.O.C.\r
+ TW\r
+\r
84-80-94 (hex) Meter, Inc.\r
848094 (base 16) Meter, Inc.\r
148 Townsend St\r
Piscataway NJ 08554\r
US\r
\r
-0C-DD-24 (hex) Intel Corporate\r
-0CDD24 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
00-0C-86 (hex) Cisco Systems, Inc\r
000C86 (base 16) Cisco Systems, Inc\r
80 West Tasman Drive\r
Beijing Beijing 100085\r
CN\r
\r
-50-EB-71 (hex) Intel Corporate\r
-50EB71 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
C0-64-E4 (hex) Cisco Systems, Inc\r
C064E4 (base 16) Cisco Systems, Inc\r
80 West Tasman Drive\r
Shenzhen Guangdong 518057\r
CN\r
\r
-5C-87-9C (hex) Intel Corporate\r
-5C879C (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
-24-EE-9A (hex) Intel Corporate\r
-24EE9A (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
00-1F-47 (hex) MCS Logic Inc.\r
001F47 (base 16) MCS Logic Inc.\r
6F. Samho Center B Bldg., 275-6\r
Wuhan Hubei 430074\r
CN\r
\r
-48-89-E7 (hex) Intel Corporate\r
-4889E7 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
A0-BD-1D (hex) Zhejiang Dahua Technology Co., Ltd.\r
A0BD1D (base 16) Zhejiang Dahua Technology Co., Ltd.\r
No.1199,Waterfront Road \r
Downingtown PA 19335\r
US\r
\r
-64-4C-36 (hex) Intel Corporate\r
-644C36 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
7C-57-3C (hex) Aruba, a Hewlett Packard Enterprise Company\r
7C573C (base 16) Aruba, a Hewlett Packard Enterprise Company\r
3333 Scott Blvd\r
Hsinchu 300\r
TW\r
\r
-3C-F0-11 (hex) Intel Corporate\r
-3CF011 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
CC-D8-1F (hex) Maipu Communication Technology Co.,Ltd.\r
CCD81F (base 16) Maipu Communication Technology Co.,Ltd.\r
Maipu Mansion, No.288 Tianfu 3rd Street, High-tech Zone\r
Framingham MA 01701-9168\r
US\r
\r
-98-2C-BC (hex) Intel Corporate\r
-982CBC (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
B0-E7-DE (hex) Homa Technologies JSC\r
B0E7DE (base 16) Homa Technologies JSC\r
Building 5, Quang Trung Software City, District 12\r
Piscataway NJ 08554\r
US\r
\r
-FC-77-74 (hex) Intel Corporate\r
-FC7774 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
70-0B-4F (hex) Cisco Systems, Inc\r
700B4F (base 16) Cisco Systems, Inc\r
80 West Tasman Drive\r
Melbourne FL 32919\r
US\r
\r
-00-BB-60 (hex) Intel Corporate\r
-00BB60 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
7C-6D-A6 (hex) Superwave Group LLC\r
7C6DA6 (base 16) Superwave Group LLC\r
poselok Krasnaya Zarya, dom 15\r
Bayan Lepas Penang 11900\r
MY\r
\r
-34-E1-2D (hex) Intel Corporate\r
-34E12D (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
A4-61-91 (hex) NamJunSa\r
A46191 (base 16) NamJunSa\r
12, Gimhae-daero 2635 beon-gil\r
TAOYUAN 33068\r
TW\r
\r
-3C-6A-A7 (hex) Intel Corporate\r
-3C6AA7 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
B8-B7-F1 (hex) Wistron Neweb Corporation\r
B8B7F1 (base 16) Wistron Neweb Corporation\r
No.20,Park Avenue II,Hsinchu Science Park\r
San Francisco CA 94110\r
US\r
\r
-38-BA-F8 (hex) Intel Corporate\r
-38BAF8 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
C4-BA-A3 (hex) Beijing Winicssec Technologies Co., Ltd.\r
C4BAA3 (base 16) Beijing Winicssec Technologies Co., Ltd.\r
F block 9th floor 907 of Jiahua Building, No.9 Shangdi 3rd Street\r
Espoo Finland 02610\r
FI\r
\r
-20-16-B9 (hex) Intel Corporate\r
-2016B9 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
D0-76-E7 (hex) TP-LINK TECHNOLOGIES CO.,LTD.\r
D076E7 (base 16) TP-LINK TECHNOLOGIES CO.,LTD.\r
Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan\r
Dallas TX 75243\r
US\r
\r
-94-B8-6D (hex) Intel Corporate\r
-94B86D (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
24-0A-63 (hex) ARRIS Group, Inc.\r
240A63 (base 16) ARRIS Group, Inc.\r
6450 Sequence Drive\r
Eysins CH-1262\r
CH\r
\r
-A4-86-AE (hex) Quectel Wireless Solutions\r
-A486AE (base 16) Quectel Wireless Solutions\r
- No.1801 Hongmei Road, Xuhui District\r
- Shanghai 200233\r
- CN\r
-\r
94-29-0C (hex) Shenyang wisdom Foundation Technology Development Co., Ltd.\r
94290C (base 16) Shenyang wisdom Foundation Technology Development Co., Ltd.\r
No. 262 North Main Street, Huanggu District, the Yellow River\r
Round Rock TX 78682\r
US\r
\r
-34-41-5D (hex) Intel Corporate\r
-34415D (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
00-50-91 (hex) NETACCESS, INC.\r
005091 (base 16) NETACCESS, INC.\r
18 KEEWAYDIN DRIVE\r
Burnaby BC V5J 3J1\r
CA\r
\r
-80-00-0B (hex) Intel Corporate\r
-80000B (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
EC-B0-E1 (hex) Ciena Corporation\r
ECB0E1 (base 16) Ciena Corporation\r
7035 Ridge Road\r
Seoul 01849\r
KR\r
\r
-74-E5-F9 (hex) Intel Corporate\r
-74E5F9 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
20-04-0F (hex) Dell Inc.\r
20040F (base 16) Dell Inc.\r
One Dell Way\r
20059 VIMERCATE (MI) \r
IT\r
\r
-A0-88-69 (hex) Intel Corporate\r
-A08869 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
50-8F-4C (hex) Xiaomi Communications Co Ltd\r
508F4C (base 16) Xiaomi Communications Co Ltd\r
The Rainbow City of China Resources\r
Hsinchu 30077\r
TW\r
\r
-60-F6-77 (hex) Intel Corporate\r
-60F677 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
E8-E1-E2 (hex) Energotest\r
E8E1E2 (base 16) Energotest\r
Chorzowska 44B\r
Cupertino CA 95014\r
US\r
\r
-2C-60-0C (hex) QUANTA COMPUTER INC.\r
-2C600C (base 16) QUANTA COMPUTER INC.\r
- No.211, Wen Hwa 2nd Rd\r
- Taoyuan Taiwan 33377\r
- TW\r
-\r
00-00-31 (hex) QPSX COMMUNICATIONS, LTD.\r
000031 (base 16) QPSX COMMUNICATIONS, LTD.\r
33 RICHARDSON STREET\r
Torrance CA 90501\r
US\r
\r
-00-23-8B (hex) QUANTA COMPUTER INC.\r
-00238B (base 16) QUANTA COMPUTER INC.\r
- NO. 211, WEN HWA 2RD.,KUEI SHAN HSIANG, TAO YUAN SHIEN,\r
- TAIPEI TAIWAN 333\r
- TW\r
-\r
-00-1E-68 (hex) QUANTA COMPUTER INC.\r
-001E68 (base 16) QUANTA COMPUTER INC.\r
- NO. 211, WEN HWA 2RD., KUEI SHAN HSIANG\r
- TAIPEI TAO YUAN SHIEN 333\r
- TW\r
-\r
CC-52-AF (hex) Universal Global Scientific Industrial Co., Ltd.\r
CC52AF (base 16) Universal Global Scientific Industrial Co., Ltd.\r
141, LANE 351, TAIPING RD.\r
New Taipei City Taiwan 23585\r
TW\r
\r
-00-0B-A2 (hex) Sumitomo Electric Industries,Ltd\r
-000BA2 (base 16) Sumitomo Electric Industries,Ltd\r
- 1-1-3, Shimaya, Konohana-ku\r
- Osaka 554-0024\r
- JP\r
-\r
-00-08-F6 (hex) Sumitomo Electric Industries,Ltd\r
-0008F6 (base 16) Sumitomo Electric Industries,Ltd\r
- 1-1-3, Shimaya, Konohana-ku\r
- Osaka 554-0024\r
- JP\r
-\r
-00-00-5F (hex) Sumitomo Electric Industries,Ltd\r
-00005F (base 16) Sumitomo Electric Industries,Ltd\r
- 1-1-3, Shimaya, Konohana-ku\r
- Osaka 554-0024\r
- JP\r
-\r
E8-F7-24 (hex) Hewlett Packard Enterprise\r
E8F724 (base 16) Hewlett Packard Enterprise\r
8000 Foothills Blvd.\r
Sheung Wan 852\r
HK\r
\r
-F8-57-2E (hex) Core Brands, LLC\r
-F8572E (base 16) Core Brands, LLC\r
- 1800 South McDowell Blvd.\r
- Petaluma CA 94954\r
- US\r
-\r
50-ED-78 (hex) Changzhou Yongse Infotech Co.,Ltd\r
50ED78 (base 16) Changzhou Yongse Infotech Co.,Ltd\r
No.128 Zhengzhong Rd, Xixiashua Town\r
999077\r
HK\r
\r
-00-1C-91 (hex) Gefen Inc.\r
-001C91 (base 16) Gefen Inc.\r
- 20600 Nordhoff Street\r
- Chatsworth CA 91311\r
- US\r
-\r
00-1C-81 (hex) NextGen Venturi LTD\r
001C81 (base 16) NextGen Venturi LTD\r
Technium 2\r
\r
DE\r
\r
-00-03-E8 (hex) Wavelength Digital Limited\r
-0003E8 (base 16) Wavelength Digital Limited\r
- 12 Vincent Avenue\r
- MK8 0AB MK8 0AB ENGLAND\r
- GB\r
-\r
00-04-21 (hex) Ocular Networks\r
000421 (base 16) Ocular Networks\r
12700, Fair Lakes Circle\r
Suwon Gyeonggi-Do 16677\r
KR\r
\r
-28-7F-CF (hex) Intel Corporate\r
-287FCF (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
58-35-26 (hex) DEEPLET TECHNOLOGY CORP\r
583526 (base 16) DEEPLET TECHNOLOGY CORP\r
5F,No.9,Lane235,Pao-Chiao Rd., Hsin-Tien,\r
Lueneburg 21339\r
DE\r
\r
-80-32-53 (hex) Intel Corporate\r
-803253 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
F8-8A-5E (hex) Texas Instruments\r
F88A5E (base 16) Texas Instruments\r
12500 TI Blvd\r
Lawrenceville GA 30044\r
US\r
\r
-9C-FC-E8 (hex) Intel Corporate\r
-9CFCE8 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
34-2F-BD (hex) Nintendo Co.,Ltd\r
342FBD (base 16) Nintendo Co.,Ltd\r
11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU\r
Seongnam-si Gyeonggi-do 13517\r
KR\r
\r
-54-48-E6 (hex) Beijing Xiaomi Mobile Software Co.,Ltd\r
-5448E6 (base 16) Beijing Xiaomi Mobile Software Co.,Ltd\r
- Xiaomi Campus, No. 33 Xi erqi Middle Road, Haidian District\r
- Beijing Beijing 100085\r
- CN\r
-\r
18-9E-2C (hex) Huawei Device Co., Ltd.\r
189E2C (base 16) Huawei Device Co., Ltd.\r
No.2 of Xincheng Road, Songshan Lake Zone\r
Beijing 100053\r
CN\r
\r
+D4-F8-29 (hex) Sagemcom Broadband SAS\r
+D4F829 (base 16) Sagemcom Broadband SAS\r
+ 250, route de l'Empereur\r
+ Rueil Malmaison Cedex hauts de seine 92848\r
+ FR\r
+\r
+E0-62-34 (hex) Texas Instruments\r
+E06234 (base 16) Texas Instruments\r
+ 12500 TI Blvd\r
+ Dallas TX 75243\r
+ US\r
+\r
+70-8C-BB (hex) MIMODISPLAYKOREA\r
+708CBB (base 16) MIMODISPLAYKOREA\r
+ #812, 19, Ojeongongeop-gil\r
+ Uiwang-si Gyeonggi-do 16072\r
+ KR\r
+\r
+B8-48-AA (hex) EM Microelectronic\r
+B848AA (base 16) EM Microelectronic\r
+ Rue des Sors 3\r
+ Marin-Epagnier Neuchatel 2074\r
+ CH\r
+\r
+D8-34-EE (hex) Stem Audio\r
+D834EE (base 16) Stem Audio\r
+ 2552 White Road, Suite A\r
+ Irvine CA 92614\r
+ US\r
+\r
+F8-57-2E (hex) Core Brands, LLC\r
+F8572E (base 16) Core Brands, LLC\r
+ 5919 Sea Otter Place\r
+ Carlsbad CA 92010\r
+ US\r
+\r
+00-1C-91 (hex) Gefen LLC\r
+001C91 (base 16) Gefen LLC\r
+ 5919 Sea Otter Place\r
+ Carlsbad CA 92010\r
+ US\r
+\r
+24-4B-FE (hex) ASUSTek COMPUTER INC.\r
+244BFE (base 16) ASUSTek COMPUTER INC.\r
+ 15,Li-Te Rd., Peitou, Taipei 112, Taiwan\r
+ Taipei Taiwan 112\r
+ TW\r
+\r
+7C-DD-E9 (hex) ATOM tech Inc.\r
+7CDDE9 (base 16) ATOM tech Inc.\r
+ Sky Menor Yokohama 422, 2-11-2 Takashima, Nishi-ku \r
+ Yokohama-shi Kanagawa 220-0011\r
+ JP\r
+\r
+F8-6B-D9 (hex) Cisco Systems, Inc\r
+F86BD9 (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+C0-14-FE (hex) Cisco Systems, Inc\r
+C014FE (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+7C-AD-4F (hex) Cisco Systems, Inc\r
+7CAD4F (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+08-31-A4 (hex) Huawei Device Co., Ltd.\r
+0831A4 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+A8-E9-78 (hex) Huawei Device Co., Ltd.\r
+A8E978 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+F8-2F-65 (hex) Huawei Device Co., Ltd.\r
+F82F65 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+28-B3-71 (hex) Ruckus Wireless\r
+28B371 (base 16) Ruckus Wireless\r
+ 350 West Java Drive\r
+ Sunnyvale CA 94089\r
+ US\r
+\r
+08-AC-C4 (hex) FMTech\r
+08ACC4 (base 16) FMTech\r
+ yuehai\r
+ ShenZhen 518000\r
+ CN\r
+\r
+DC-50-3A (hex) Nanjing Ticom Tech Co., Ltd.\r
+DC503A (base 16) Nanjing Ticom Tech Co., Ltd.\r
+ No.35 Fenghui Road, Yuhuatai District\r
+ Nanjing Jiangsu 210039\r
+ CN\r
+\r
+18-47-3D (hex) CHONGQING FUGUI ELECTRONICS CO.,LTD.\r
+18473D (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
+D4-77-B2 (hex) Netix Global B.V.\r
+D477B2 (base 16) Netix Global B.V.\r
+ 1119RB Schipol - Rijk, Beechavenue, 113, Schipol,\r
+ Amsterdam NL 1119\r
+ NL\r
+\r
+70-B5-E8 (hex) Dell Inc.\r
+70B5E8 (base 16) Dell Inc.\r
+ One Dell Way\r
+ Round Rock TX 78682\r
+ US\r
+\r
+94-25-33 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+942533 (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
+60-56-61 (hex) IXECLOUD Tech\r
+605661 (base 16) IXECLOUD Tech\r
+ 118, 3rd Floor, Building 195, Area 1 Beiwa Road,Haidian District, Beijing\r
+ Beijing 100000\r
+ CN\r
+\r
+0C-59-9C (hex) Juniper Networks\r
+0C599C (base 16) Juniper Networks\r
+ 1133 Innovation Way\r
+ Sunnyvale CA 94089\r
+ US\r
+\r
+44-F4-E7 (hex) Cohesity Inc\r
+44F4E7 (base 16) Cohesity Inc\r
+ 300 park ave\r
+ san jose CA 95110\r
+ US\r
+\r
+70-69-79 (hex) IEEE Registration Authority\r
+706979 (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+FC-60-9B (hex) New H3C Technologies Co., Ltd\r
+FC609B (base 16) New H3C Technologies Co., Ltd\r
+ 466 Changhe Road, Binjiang District\r
+ Hangzhou Zhejiang 310052\r
+ CN\r
+\r
+E8-A1-F8 (hex) zte corporation\r
+E8A1F8 (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
+98-A9-42 (hex) Guangzhou Tozed Kangwei Intelligent Technology Co., LTD\r
+98A942 (base 16) Guangzhou Tozed Kangwei Intelligent Technology Co., LTD\r
+ Room 1301, NO. 37 Jinlong , Nansha Street, Xiangjiang Financial Business Center, Nansha District\r
+ Guangzhou Guangdong 511458\r
+ CN\r
+\r
+30-42-40 (hex) zte corporation\r
+304240 (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-21-13 (hex) Nokia Shanghai Bell Co., Ltd.\r
+4C2113 (base 16) Nokia Shanghai Bell Co., Ltd.\r
+ No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai\r
+ Shanghai 201206\r
+ CN\r
+\r
+80-2D-BF (hex) Cisco Systems, Inc\r
+802DBF (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+24-F1-50 (hex) Guangzhou Qi'an Technology Co., Ltd.\r
+24F150 (base 16) Guangzhou Qi'an Technology Co., Ltd.\r
+ No. 3, Dasonggang, Jiangnan Avenue Middle Road, Haizhu District, Guangzhou (office only)\r
+ Guangzhou Guangdong 510220\r
+ CN\r
+\r
+10-8B-6A (hex) Antailiye Technology Co.,Ltd\r
+108B6A (base 16) Antailiye Technology Co.,Ltd\r
+ 7/F,Zhengjiyuan Buiding,2 Road,Qianjing, Xixiang, Baoan District,Shenzhen\r
+ SHEN ZHEN GUANGDONG 518000\r
+ CN\r
+\r
+14-C8-8B (hex) Apple, Inc.\r
+14C88B (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+EC-26-51 (hex) Apple, Inc.\r
+EC2651 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+18-3E-EF (hex) Apple, Inc.\r
+183EEF (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+60-7E-C9 (hex) Apple, Inc.\r
+607EC9 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+40-88-2F (hex) Extreme Networks, Inc.\r
+40882F (base 16) Extreme Networks, Inc.\r
+ 6480 Via Del Oro\r
+ San Jose CA 95119\r
+ US\r
+\r
+E4-3D-1A (hex) Broadcom Limited\r
+E43D1A (base 16) Broadcom Limited\r
+ 15191 Alton Parkway\r
+ Irvine CA 92618\r
+ US\r
+\r
+64-4C-36 (hex) Intel Corporate\r
+644C36 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+48-89-E7 (hex) Intel Corporate\r
+4889E7 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+24-EE-9A (hex) Intel Corporate\r
+24EE9A (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+5C-87-9C (hex) Intel Corporate\r
+5C879C (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+50-EB-71 (hex) Intel Corporate\r
+50EB71 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+0C-DD-24 (hex) Intel Corporate\r
+0CDD24 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+94-B8-6D (hex) Intel Corporate\r
+94B86D (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+20-16-B9 (hex) Intel Corporate\r
+2016B9 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+38-BA-F8 (hex) Intel Corporate\r
+38BAF8 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+3C-6A-A7 (hex) Intel Corporate\r
+3C6AA7 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+34-E1-2D (hex) Intel Corporate\r
+34E12D (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+00-BB-60 (hex) Intel Corporate\r
+00BB60 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+60-F6-77 (hex) Intel Corporate\r
+60F677 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+A0-88-69 (hex) Intel Corporate\r
+A08869 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+74-E5-F9 (hex) Intel Corporate\r
+74E5F9 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+80-00-0B (hex) Intel Corporate\r
+80000B (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+34-41-5D (hex) Intel Corporate\r
+34415D (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+FC-77-74 (hex) Intel Corporate\r
+FC7774 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+98-2C-BC (hex) Intel Corporate\r
+982CBC (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+3C-F0-11 (hex) Intel Corporate\r
+3CF011 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+28-7F-CF (hex) Intel Corporate\r
+287FCF (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+80-32-53 (hex) Intel Corporate\r
+803253 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+D8-C0-A6 (hex) AzureWave Technology Inc.\r
+D8C0A6 (base 16) AzureWave Technology Inc.\r
+ 8F., No. 94, Baozhong Rd.\r
+ New Taipei City Taiwan 231\r
+ TW\r
+\r
+9C-FC-E8 (hex) Intel Corporate\r
+9CFCE8 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+F8-AC-65 (hex) Intel Corporate\r
+F8AC65 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+10-12-FB (hex) Hangzhou Hikvision Digital Technology Co.,Ltd.\r
+1012FB (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd.\r
+ No.555 Qianmo Road\r
+ Hangzhou Zhejiang 310052\r
+ CN\r
+\r
+08-FA-79 (hex) vivo Mobile Communication Co., Ltd.\r
+08FA79 (base 16) vivo Mobile Communication Co., Ltd.\r
+ #283,BBK Road\r
+ Wusha,Chang'An DongGuan City,Guangdong, 523860\r
+ CN\r
+\r
+F0-9B-B8 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+F09BB8 (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
+BC-17-B8 (hex) Intel Corporate\r
+BC17B8 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+B8-CB-29 (hex) Dell Inc.\r
+B8CB29 (base 16) Dell Inc.\r
+ One Dell Way\r
+ Round Rock TX 78682\r
+ US\r
+\r
+44-BB-3B (hex) Google, Inc.\r
+44BB3B (base 16) Google, Inc.\r
+ 1600 Amphitheatre Parkway\r
+ Mountain View CA 94043\r
+ US\r
+\r
+14-C1-4E (hex) Google, Inc.\r
+14C14E (base 16) Google, Inc.\r
+ 1600 Amphitheatre Parkway\r
+ Mountain View CA 94043\r
+ US\r
+\r
+8C-5E-BD (hex) Huawei Device Co., Ltd.\r
+8C5EBD (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+2C-A0-42 (hex) Huawei Device Co., Ltd.\r
+2CA042 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+EC-C0-1B (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+ECC01B (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-44-CE (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+9844CE (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-D0-83 (hex) Aruba, a Hewlett Packard Enterprise Company\r
+CCD083 (base 16) Aruba, a Hewlett Packard Enterprise Company\r
+ 3333 Scott Blvd\r
+ Santa Clara CA 95054\r
+ US\r
+\r
+C0-83-C9 (hex) Huawei Device Co., Ltd.\r
+C083C9 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+C0-1C-30 (hex) Shenzhen WIFI-3L Technology Co.,Ltd\r
+C01C30 (base 16) Shenzhen WIFI-3L Technology Co.,Ltd\r
+ East 5 Floor,B Building, WeiHao Technology Park,Sunny Indusrtrial zone, Xili Town, Nanshan District\r
+ Shenzhen Guangdong 518055\r
+ CN\r
+\r
+D8-C6-78 (hex) MitraStar Technology Corp.\r
+D8C678 (base 16) MitraStar Technology Corp.\r
+ No. 6, Innovation Road II,\r
+ Hsinchu 300\r
+ TW\r
+\r
+44-1C-7F (hex) Motorola Mobility LLC, a Lenovo Company\r
+441C7F (base 16) Motorola Mobility LLC, a Lenovo Company\r
+ 222 West Merchandise Mart Plaza\r
+ Chicago IL 60654\r
+ US\r
+\r
+00-B8-B6 (hex) Motorola Mobility LLC, a Lenovo Company\r
+00B8B6 (base 16) Motorola Mobility LLC, a Lenovo Company\r
+ 222 West Merchandise Mart Plaza\r
+ Chicago IL 60654\r
+ US\r
+\r
+1C-E6-1D (hex) Samsung Electronics Co.,Ltd\r
+1CE61D (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
+\r
+80-12-DF (hex) Shenzhen SuperElectron Technology Co.,Ltd.\r
+8012DF (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
+C4-A1-51 (hex) Sichuan Tianyi Comheart Telecom Co., Ltd.\r
+C4A151 (base 16) Sichuan Tianyi Comheart Telecom Co., Ltd.\r
+ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County\r
+ Chengdu Sichuan 611330\r
+ CN\r
+\r
+10-E7-7A (hex) STMicrolectronics International NV\r
+10E77A (base 16) STMicrolectronics International NV\r
+ 39, Chemin du Champ-des-Filles\r
+ Geneva, Plan-les-Quates 1228\r
+ CH\r
+\r
+80-EA-07 (hex) TP-LINK TECHNOLOGIES CO.,LTD.\r
+80EA07 (base 16) TP-LINK TECHNOLOGIES CO.,LTD.\r
+ Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan\r
+ Shenzhen Guangdong 518057\r
+ CN\r
+\r
+BC-03-A7 (hex) MFP MICHELIN\r
+BC03A7 (base 16) MFP MICHELIN\r
+ 23 place des Carmes Dechaux\r
+ Clermont-Ferrand 63000\r
+ FR\r
+\r
+90-76-9F (hex) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\r
+90769F (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
+98-2F-F8 (hex) Huawei Device Co., Ltd.\r
+982FF8 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+40-DC-A5 (hex) Huawei Device Co., Ltd.\r
+40DCA5 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+2C-6F-51 (hex) Herospeed Digital Technology Limited\r
+2C6F51 (base 16) Herospeed Digital Technology Limited\r
+ 728 Kaichuang Avenue,Huangpu Distric\r
+ Guangzhou Guangdong 510530\r
+ CN\r
+\r
+04-A2-F3 (hex) Fiberhome Telecommunication Technologies Co.,LTD\r
+04A2F3 (base 16) Fiberhome Telecommunication Technologies Co.,LTD\r
+ No.5 DongXin Road\r
+ Wuhan Hubei 430074\r
+ CN\r
+\r
+CC-DB-93 (hex) Cisco Systems, Inc\r
+CCDB93 (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+18-D6-1C (hex) Shenzhen TINNO Mobile Technology Corp.\r
+18D61C (base 16) Shenzhen TINNO Mobile Technology Corp.\r
+ 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen \r
+ Shenzhen guangdong 518053\r
+ CN\r
+\r
+54-48-E6 (hex) Beijing Xiaomi Mobile Software Co., Ltd\r
+5448E6 (base 16) Beijing Xiaomi Mobile Software Co., Ltd\r
+ Xiaomi Campus, No. 33 Xi erqi Middle Road, Haidian District\r
+ Beijing Beijing 100085\r
+ CN\r
+\r
+60-D4-E9 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+60D4E9 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+ NO.18 HAIBIN ROAD,\r
+ DONG GUAN GUANG DONG 523860\r
+ CN\r
+\r
+30-C5-0F (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+30C50F (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-68-D2 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+2868D2 (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
+90-A9-35 (hex) JWEntertainment\r
+90A935 (base 16) JWEntertainment\r
+ 3f 10 Dwitgol-ro\r
+ Gwacheon-si Gyeonggi-do 13814\r
+ KR\r
+\r
+A4-86-AE (hex) Quectel Wireless Solutions Co., Ltd.\r
+A486AE (base 16) Quectel Wireless Solutions Co., Ltd.\r
+ No.1801 Hongmei Road, Xuhui District\r
+ Shanghai 200233\r
+ CN\r
+\r
+1C-D6-BE (hex) Wistron Neweb Corporation\r
+1CD6BE (base 16) Wistron Neweb Corporation\r
+ No.20,Park Avenue II,Hsinchu Science Park\r
+ Hsin-Chu R.O.C. 308\r
+ TW\r
+\r
+28-D1-27 (hex) Beijing Xiaomi Mobile Software Co., Ltd\r
+28D127 (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
+C8-68-DE (hex) Huawei Device Co., Ltd.\r
+C868DE (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+D0-0D-F7 (hex) Huawei Device Co., Ltd.\r
+D00DF7 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+48-05-E2 (hex) Huawei Device Co., Ltd.\r
+4805E2 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+F8-1B-04 (hex) Zhong Shan City Richsound Electronic Industrial Ltd\r
+F81B04 (base 16) Zhong Shan City Richsound Electronic Industrial Ltd\r
+ Qunle Industrial Area,East ShaGang Road,GangKou ZhongShan,GuangDong,China\r
+ ZhongShan GuangDong 528400\r
+ CN\r
+\r
+D8-8C-79 (hex) Google, Inc.\r
+D88C79 (base 16) Google, Inc.\r
+ 1600 Amphitheatre Parkway\r
+ Mountain View CA 94043\r
+ US\r
+\r
+10-34-1B (hex) Spacelink\r
+10341B (base 16) Spacelink\r
+ 8830 Complex dr\r
+ San Diego CA 92123\r
+ US\r
+\r
+30-A4-52 (hex) Arrival Elements BV\r
+30A452 (base 16) Arrival Elements BV\r
+ M. Keynesplein 12-46\r
+ Amsterdam 1066 EP\r
+ NL\r
+\r
+00-1E-68 (hex) Quanta Computer Inc.\r
+001E68 (base 16) Quanta Computer Inc.\r
+ NO. 211, WEN HWA 2RD., KUEI SHAN HSIANG\r
+ TAIPEI TAO YUAN SHIEN 333\r
+ TW\r
+\r
+00-23-8B (hex) Quanta Computer Inc.\r
+00238B (base 16) Quanta Computer Inc.\r
+ NO. 211, WEN HWA 2RD.,KUEI SHAN HSIANG, TAO YUAN SHIEN,\r
+ TAIPEI TAIWAN 333\r
+ TW\r
+\r
+2C-60-0C (hex) Quanta Computer Inc.\r
+2C600C (base 16) Quanta Computer Inc.\r
+ No.211, Wen Hwa 2nd Rd\r
+ Taoyuan Taiwan 33377\r
+ TW\r
+\r
+8C-C5-B4 (hex) Sagemcom Broadband SAS\r
+8CC5B4 (base 16) Sagemcom Broadband SAS\r
+ 250, route de l'Empereur\r
+ Rueil Malmaison Cedex hauts de seine 92848\r
+ FR\r
+\r
+00-0B-A2 (hex) Sumitomo Electric Industries, Ltd\r
+000BA2 (base 16) Sumitomo Electric Industries, Ltd\r
+ 1-1-3, Shimaya, Konohana-ku\r
+ Osaka 554-0024\r
+ JP\r
+\r
+00-08-F6 (hex) Sumitomo Electric Industries, Ltd\r
+0008F6 (base 16) Sumitomo Electric Industries, Ltd\r
+ 1-1-3, Shimaya, Konohana-ku\r
+ Osaka 554-0024\r
+ JP\r
+\r
+00-00-5F (hex) Sumitomo Electric Industries, Ltd\r
+00005F (base 16) Sumitomo Electric Industries, Ltd\r
+ 1-1-3, Shimaya, Konohana-ku\r
+ Osaka 554-0024\r
+ JP\r
+\r
+18-EC-E7 (hex) BUFFALO.INC\r
+18ECE7 (base 16) BUFFALO.INC\r
+ AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku\r
+ Nagoya Aichi Pref. 460-8315\r
+ JP\r
+\r
+F4-69-D5 (hex) IEEE Registration Authority\r
+F469D5 (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+08-3A-F2 (hex) Espressif Inc.\r
+083AF2 (base 16) Espressif Inc.\r
+ Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+ Shanghai Shanghai 201203\r
+ CN\r
+\r
+74-3A-20 (hex) New H3C Technologies Co., Ltd\r
+743A20 (base 16) New H3C Technologies Co., Ltd\r
+ 466 Changhe Road, Binjiang District\r
+ Hangzhou Zhejiang 310052\r
+ CN\r
+\r
+30-C9-AB (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.\r
+30C9AB (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
+3C-1A-9E (hex) VitalThings AS\r
+3C1A9E (base 16) VitalThings AS\r
+ Jarlsoveien 48\r
+ Tonsberg 3124\r
+ NO\r
+\r
+C4-D7-38 (hex) Huawei Device Co., Ltd.\r
+C4D738 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+C8-84-A1 (hex) Cisco Systems, Inc\r
+C884A1 (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+D8-77-8B (hex) Intelbras\r
+D8778B (base 16) Intelbras\r
+ BR 101, KM 210\r
+ São Jose Santa Catarina 88104-800\r
+ BR\r
+\r
+00-03-E8 (hex) Wavesight Limited\r
+0003E8 (base 16) Wavesight Limited\r
+ 13 Dencora Way\r
+ Luton Sundon Business Park LU3 3HP\r
+ GB\r
+\r
+6C-BA-B8 (hex) Sagemcom Broadband SAS\r
+6CBAB8 (base 16) Sagemcom Broadband SAS\r
+ 250, route de l'Empereur\r
+ Rueil Malmaison Cedex hauts de seine 92848\r
+ FR\r
+\r
+E0-D4-64 (hex) Intel Corporate\r
+E0D464 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+C0-F6-C2 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+C0F6C2 (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
+D4-AF-F7 (hex) Arista Networks\r
+D4AFF7 (base 16) Arista Networks\r
+ 5453 Great America Parkway\r
+ Santa Clara CA 95054\r
+ US\r
+\r
+60-07-7C (hex) Jala Group\r
+60077C (base 16) Jala Group\r
+ Melchor Pérez de Holguín N 2643\r
+ Cochabamba Cochabamba 0000\r
+ BO\r
+\r
+60-98-66 (hex) Texas Instruments\r
+609866 (base 16) Texas Instruments\r
+ 12500 TI Blvd\r
+ Dallas TX 75243\r
+ US\r
+\r
+04-7E-23 (hex) China Mobile IOT Company Limited\r
+047E23 (base 16) China Mobile IOT Company Limited\r
+ NO.8 Yu Ma Road, NanAn Area\r
+ Chongqing Chongqing 401336\r
+ CN\r
+\r
+14-CC-B3 (hex) AO GK NATEKS\r
+14CCB3 (base 16) AO GK NATEKS\r
+ Kamenshiki B. str., 4\r
+ Moscow 115172\r
+ RU\r
+\r
+DC-CD-2F (hex) Seiko Epson Corporation\r
+DCCD2F (base 16) Seiko Epson Corporation\r
+ 2070 Kotobuki Koaka\r
+ Matsumoto-shi Nagano-ken 399-8702\r
+ JP\r
+\r
+94-54-CE (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+9454CE (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+ NO.18 HAIBIN ROAD,\r
+ DONG GUAN GUANG DONG 523860\r
+ CN\r
+\r
+38-8A-BE (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+388ABE (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+ NO.18 HAIBIN ROAD,\r
+ DONG GUAN GUANG DONG 523860\r
+ CN\r
+\r
+68-93-20 (hex) New H3C Technologies Co., Ltd\r
+689320 (base 16) New H3C Technologies Co., Ltd\r
+ 466 Changhe Road, Binjiang District\r
+ Hangzhou Zhejiang 310052\r
+ CN\r
+\r
+54-84-DC (hex) zte corporation\r
+5484DC (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
+38-54-9B (hex) zte corporation\r
+38549B (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
+8C-8D-28 (hex) Intel Corporate\r
+8C8D28 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+34-3E-A4 (hex) Ring LLC\r
+343EA4 (base 16) Ring LLC\r
+ 1523 26th St\r
+ Santa Monica CA 90404\r
+ US\r
+\r
+B0-FE-E5 (hex) Huawei Device Co., Ltd.\r
+B0FEE5 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+04-C1-D8 (hex) Huawei Device Co., Ltd.\r
+04C1D8 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+C8-BC-9C (hex) Huawei Device Co., Ltd.\r
+C8BC9C (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
F8-D0-27 (hex) Seiko Epson Corporation\r
F8D027 (base 16) Seiko Epson Corporation\r
2070 Kotobuki Koaka\r
Hsinchu 30077\r
TW\r
\r
-24-41-8C (hex) Intel Corporate\r
-24418C (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
44-EF-BF (hex) China Dragon Technology Limited\r
44EFBF (base 16) China Dragon Technology Limited\r
B4 Bldg.Haoshan 1st Industry Park,\r
Dongguan Guangdong 523808\r
CN\r
\r
-60-F2-62 (hex) Intel Corporate\r
-60F262 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
EC-3C-BB (hex) Huawei Device Co., Ltd.\r
EC3CBB (base 16) Huawei Device Co., Ltd.\r
No.2 of Xincheng Road, Songshan Lake Zone\r
San Jose CA 94568\r
US\r
\r
-58-A0-23 (hex) Intel Corporate\r
-58A023 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
DC-B0-82 (hex) Nokia\r
DCB082 (base 16) Nokia\r
600 March Road\r
Nürnberg Bayern 90478\r
DE\r
\r
-D4-D2-52 (hex) Intel Corporate\r
-D4D252 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
AC-A4-6E (hex) SHENZHEN GONGJIN ELECTRONICS CO.,LT\r
ACA46E (base 16) SHENZHEN GONGJIN ELECTRONICS CO.,LT\r
SONGGANG\r
Hsinchu Hsinchu 30077\r
TW\r
\r
-90-78-41 (hex) Intel Corporate\r
-907841 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
14-22-DB (hex) eero inc.\r
1422DB (base 16) eero inc.\r
230 9th St.\r
Salt Lake City UT 84115\r
US\r
\r
-38-00-25 (hex) Intel Corporate\r
-380025 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
D0-58-C0 (hex) Qingdao Haier Multimedia Limited. \r
D058C0 (base 16) Qingdao Haier Multimedia Limited. \r
Pingban Building, Haier Industry Park, Laoshan District,\r
Suzhou Jiangsu 215011\r
CN\r
\r
-A8-6D-AA (hex) Intel Corporate\r
-A86DAA (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
38-C2-BA (hex) CCTV NEOTECH\r
38C2BA (base 16) CCTV NEOTECH\r
68, Digital-ro 9-gil, Geumcheon-gu\r
Sennwald St. Gallen 9466\r
CH\r
\r
-20-79-18 (hex) Intel Corporate\r
-207918 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
C0-3D-D9 (hex) MitraStar Technology Corp.\r
C03DD9 (base 16) MitraStar Technology Corp.\r
No. 6, Innovation Road II,\r
Sunnyvale CA 94085\r
US\r
\r
-A0-A4-C5 (hex) Intel Corporate\r
-A0A4C5 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
-F4-D1-08 (hex) Intel Corporate\r
-F4D108 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
30-13-89 (hex) Siemens AG, Automations & Drives,\r
301389 (base 16) Siemens AG, Automations & Drives,\r
Systems Engineering\r
Ohta-ku Tokyo 146-8501\r
JP\r
\r
-18-1D-EA (hex) Intel Corporate\r
-181DEA (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
-18-56-80 (hex) Intel Corporate\r
-185680 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
C8-D9-D2 (hex) Hewlett Packard\r
C8D9D2 (base 16) Hewlett Packard\r
11445 Compaq Center Drive\r
Tel Aviv Israel 6971072\r
IL\r
\r
-64-5D-86 (hex) Intel Corporate\r
-645D86 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
0C-96-E6 (hex) Cloud Network Technology (Samoa) Limited\r
0C96E6 (base 16) Cloud Network Technology (Samoa) Limited\r
Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District\r
San Jose CA 94568\r
US\r
\r
-04-D3-B0 (hex) Intel Corporate\r
-04D3B0 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
64-5A-ED (hex) Apple, Inc.\r
645AED (base 16) Apple, Inc.\r
1 Infinite Loop\r
Seoul 152-866\r
KR\r
\r
-E4-A7-A0 (hex) Intel Corporate\r
-E4A7A0 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
0C-52-03 (hex) AGM GROUP LIMITED\r
0C5203 (base 16) AGM GROUP LIMITED\r
4F,Building B,HuaFeng Ind park,Gushu,Xixiang,BaoAn,ShenZhen,China\r
Neuhofen 67141\r
DE\r
\r
-40-A3-CC (hex) Intel Corporate\r
-40A3CC (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
90-50-CA (hex) Hitron Technologies. Inc\r
9050CA (base 16) Hitron Technologies. Inc\r
No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C\r
Siheung-si Kyunggido 429-859\r
KR\r
\r
-80-19-34 (hex) Intel Corporate\r
-801934 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
70-3E-AC (hex) Apple, Inc.\r
703EAC (base 16) Apple, Inc.\r
1 Infinite Loop\r
Dallas TX 75243\r
US\r
\r
-64-32-A8 (hex) Intel Corporate\r
-6432A8 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
74-7D-24 (hex) Phicomm (Shanghai) Co., Ltd.\r
747D24 (base 16) Phicomm (Shanghai) Co., Ltd.\r
3666 SiXian Rd.,Songjiang District\r
SANTA CLARA CA 95054\r
US\r
\r
-54-AB-3A (hex) QUANTA COMPUTER INC.\r
-54AB3A (base 16) QUANTA COMPUTER INC.\r
- No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang, Tao Yuan Shien, Taiwan, R. O. C.\r
- Taoyuan Taiwan 33377\r
- TW\r
-\r
68-35-63 (hex) SHENZHEN LIOWN ELECTRONICS CO.,LTD.\r
683563 (base 16) SHENZHEN LIOWN ELECTRONICS CO.,LTD.\r
ROOM 301, NO.7, GONGYE 3RD ROAD\r
TSAOTUEN, NANTOU 54261\r
TW\r
\r
-E8-9A-8F (hex) QUANTA COMPUTER INC.\r
-E89A8F (base 16) QUANTA COMPUTER INC.\r
- 211, Wen Hwa 2nd Rd.,Kuei Shan, Tao Yuan \r
- TAIPEI 33377\r
- TW\r
-\r
1C-57-D8 (hex) Kraftway Corporation PLC\r
1C57D8 (base 16) Kraftway Corporation PLC\r
16, 3rd Mytischinskaya st.\r
Heidelberg 69123\r
DE\r
\r
-C8-3D-FC (hex) Pioneer DJ Corporation\r
-C83DFC (base 16) Pioneer DJ Corporation\r
- 6F,Yokohama i-Mark Place, 4-4-5 Minatomirai, Nishi-ku\r
- Yokohama Kanagawa 220-0012\r
- JP\r
-\r
CC-D3-1E (hex) IEEE Registration Authority\r
CCD31E (base 16) IEEE Registration Authority\r
445 Hoes Lane\r
TOKYO TOKYO 108-0022\r
JP\r
\r
-D4-67-61 (hex) United Gulf Gate Co.\r
-D46761 (base 16) United Gulf Gate Co.\r
- XonTel, Borj ALadel Tower, Fahad Al-Salem St Fl 21\r
- Kuwait 0000\r
- KW\r
-\r
34-81-C4 (hex) AVM GmbH\r
3481C4 (base 16) AVM GmbH\r
Alt-Moabit 95\r
Bothell WA 98011\r
US\r
\r
-F0-D1-4F (hex) LINEAR LLC\r
-F0D14F (base 16) LINEAR LLC\r
- 1950 CAMINO VIDA ROBLE #150\r
- CARLSBAD CA 92008-6517\r
- US\r
-\r
2C-36-F8 (hex) Cisco Systems, Inc\r
2C36F8 (base 16) Cisco Systems, Inc\r
80 West Tasman Drive\r
Kaohsiung 811\r
TW\r
\r
-00-1E-B2 (hex) LG innotek\r
-001EB2 (base 16) LG innotek\r
- Hanyang Univ. 1271, Sa-dong, Sangrok-gu\r
- Ansan-si Gyeonggi-do 426-791\r
- KR\r
-\r
00-1E-B7 (hex) TBTech, Co., Ltd.\r
001EB7 (base 16) TBTech, Co., Ltd.\r
1109, Hyundai Krim, 1330-18, Seocho-dong,\r
SEOUL 153-803\r
KR\r
\r
-00-1E-31 (hex) INFOMARK CO.,LTD.\r
-001E31 (base 16) INFOMARK CO.,LTD.\r
- 5F.,Geown Bldg.,1360-53\r
- Seoul Seocho-dong,Seocho-gu 137-863\r
- KR\r
-\r
00-1E-2C (hex) CyVerse Corporation\r
001E2C (base 16) CyVerse Corporation\r
Shoutou Roukubankan Bldg. 4F\r
Bingley BD16 1PY\r
GB\r
\r
-00-12-B4 (hex) Work Microwave GmbH\r
-0012B4 (base 16) Work Microwave GmbH\r
- Raiffeisenstrasse 12\r
- Holzkirchen 83607\r
- DE\r
-\r
00-12-ED (hex) AVG Advanced Technologies\r
0012ED (base 16) AVG Advanced Technologies\r
4140 Utica Ridge Road\r
Alexandria Virginia 22307\r
US\r
\r
-00-11-68 (hex) HomeLogic LLC\r
-001168 (base 16) HomeLogic LLC\r
- 100 Hoods Lane\r
- Marblehead MA 01945\r
- US\r
-\r
00-11-63 (hex) SYSTEM SPA DEPT. ELECTRONICS\r
001163 (base 16) SYSTEM SPA DEPT. ELECTRONICS\r
VIA GHIAROLA VECCHIA 73\r
\r
TW\r
\r
-00-40-AB (hex) ROLAND DG CORPORATION\r
-0040AB (base 16) ROLAND DG CORPORATION\r
- 1227 OKUBO-CHO, HAMAMATSU-SHI\r
- 432 \r
- JP\r
-\r
00-40-B6 (hex) COMPUTERM CORPORATION\r
0040B6 (base 16) COMPUTERM CORPORATION\r
111 WOOD STREET\r
Redondo Beach 90277\r
US\r
\r
-C0-B8-83 (hex) Intel Corporate\r
-C0B883 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
-24-FD-0D (hex) INDÚSTRIA DE TELECOMUNICAÇÃO ELETRÔNICA\r
-24FD0D (base 16) INDÚSTRIA DE TELECOMUNICAÇÃO ELETRÔNICA\r
- BR 101, KM 210\r
- São Jose Santa Catarina 88104-800\r
- BR\r
-\r
70-F8-2B (hex) DWnet Technologies(Suzhou) Corporation\r
70F82B (base 16) DWnet Technologies(Suzhou) Corporation\r
No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China\r
Dongguan Guangdong 523808\r
CN\r
\r
-C8-09-A8 (hex) Intel Corporate\r
-C809A8 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
C0-2E-26 (hex) Private\r
C02E26 (base 16) Private\r
\r
New Taipei City Taiwan 231\r
TW\r
\r
-8C-C6-81 (hex) Intel Corporate\r
-8CC681 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
34-E3-DA (hex) Hoval Aktiengesellschaft\r
34E3DA (base 16) Hoval Aktiengesellschaft\r
Austrasse 70\r
Santa Clara CA 95054\r
US\r
\r
-3C-58-C2 (hex) Intel Corporate\r
-3C58C2 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
-CC-F9-E4 (hex) Intel Corporate\r
-CCF9E4 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
64-5C-F3 (hex) ParanTek Inc.\r
645CF3 (base 16) ParanTek Inc.\r
3F, 40-15 Gilju-Ro, 411 Beon-Gil\r
Hong Kong KOWLOON 999077\r
HK\r
\r
-E4-5E-37 (hex) Intel Corporate\r
-E45E37 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
14-47-2D (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
14472D (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
NO.18 HAIBIN ROAD,\r
Cranberry Township PA 16066\r
US\r
\r
-6C-6A-77 (hex) Intel Corporate\r
-6C6A77 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
CC-A7-C1 (hex) Google, Inc.\r
CCA7C1 (base 16) Google, Inc.\r
1600 Amphitheatre Parkway\r
Enschede 7521 PR\r
NL\r
\r
-A4-B1-C1 (hex) Intel Corporate\r
-A4B1C1 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
C8-67-5E (hex) Extreme Networks, Inc.\r
C8675E (base 16) Extreme Networks, Inc.\r
1011 McCarthy Blvd\r
San Jose CA 95131\r
US\r
\r
-24-68-B0 (hex) Samsung Electronics Co.,Ltd\r
-2468B0 (base 16) Samsung Electronics Co.,Ltd\r
- #94-1, Imsoo-Dong\r
- Gumi Gyeongbuk 730-350\r
- KR\r
+84-A3-B5 (hex) Propulsion systems\r
+84A3B5 (base 16) Propulsion systems\r
+ Dooren 72\r
+ Merchtem Vlaams brabant 1785\r
+ BE\r
\r
30-FC-EB (hex) LG Electronics (Mobile Communications)\r
30FCEB (base 16) LG Electronics (Mobile Communications)\r
Seoul 153-801\r
KR\r
\r
+24-68-B0 (hex) Samsung Electronics Co.,Ltd\r
+2468B0 (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
+\r
1C-13-38 (hex) Kimball Electronics Group, LLC\r
1C1338 (base 16) Kimball Electronics Group, LLC\r
1205 Kimball Blvd\r
Jasper IN 47546\r
US\r
\r
+9C-ED-FA (hex) EVUlution AG\r
+9CEDFA (base 16) EVUlution AG\r
+ Via da Clalt 12\r
+ Poschiavo GR 7742\r
+ CH\r
+\r
EC-63-ED (hex) Hyundai Autoever Corp.\r
EC63ED (base 16) Hyundai Autoever Corp.\r
38, Teheran-ro 114-gil\r
Gangnam-gu, Seoul 06176\r
KR\r
\r
-84-A3-B5 (hex) Propulsion systems\r
-84A3B5 (base 16) Propulsion systems\r
- Dooren 72\r
- Merchtem Vlaams brabant 1785\r
- BE\r
+D4-67-61 (hex) XonTel Technology Co.\r
+D46761 (base 16) XonTel Technology Co.\r
+ XonTel, Borj ALadel Tower, Fahad Al-Salem St Fl 21\r
+ Kuwait 0000\r
+ KW\r
\r
-9C-ED-FA (hex) EVUlution AG\r
-9CEDFA (base 16) EVUlution AG\r
- Via da Clalt 12\r
- Poschiavo GR 7742\r
+E4-41-22 (hex) OnePlus Technology (Shenzhen) Co., Ltd\r
+E44122 (base 16) OnePlus Technology (Shenzhen) Co., Ltd\r
+ 18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,\r
+ Shenzhen Guangdong 518000\r
+ CN\r
+\r
+9C-19-C2 (hex) Dongguan Liesheng Electronic Co., Ltd.\r
+9C19C2 (base 16) Dongguan Liesheng Electronic Co., Ltd.\r
+ F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci\r
+ dongguan guangdong 523000\r
+ CN\r
+\r
+BC-26-A1 (hex) FACTORY FIVE Corporation\r
+BC26A1 (base 16) FACTORY FIVE Corporation\r
+ 3-391-1, Kamikitadai,\r
+ Higashiyamato Tokyo 207-0023\r
+ JP\r
+\r
+74-CB-F3 (hex) Lava international limited\r
+74CBF3 (base 16) Lava international limited\r
+ A-154D, Sector-63\r
+ Noida Uttar Pradesh 201301\r
+ IN\r
+\r
+F0-D1-4F (hex) LINEAR LLC\r
+F0D14F (base 16) LINEAR LLC\r
+ 5919 Sea Otter Place\r
+ Carlsbad CA 92010\r
+ US\r
+\r
+00-11-68 (hex) HomeLogic LLC\r
+001168 (base 16) HomeLogic LLC\r
+ 5919 Sea Otter Place\r
+ Carlsbad CA 92010\r
+ US\r
+\r
+18-DF-C1 (hex) Aetheros\r
+18DFC1 (base 16) Aetheros\r
+ 909 Montgomery Street, Suite 104\r
+ San Francisco 94133\r
+ US\r
+\r
+FC-BC-0E (hex) Zhejiang Cainiao Supply Chain Management Co., Ltd\r
+FCBC0E (base 16) Zhejiang Cainiao Supply Chain Management Co., Ltd\r
+ Block B1, XIXI center, No.588 West Wenyi Road, Xihu District\r
+ Hangzhou Zhejiang 310000\r
+ CN\r
+\r
+2C-D0-66 (hex) Xiaomi Communications Co Ltd\r
+2CD066 (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
+B0-5C-DA (hex) HP Inc.\r
+B05CDA (base 16) HP Inc.\r
+ 10300 Energy Dr\r
+ Spring TX 77389\r
+ US\r
+\r
+DC-BD-7A (hex) Guangzhou Shiyuan Electronic Technology Company Limited\r
+DCBD7A (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
+90-16-BA (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+9016BA (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
+60-AA-EF (hex) Huawei Device Co., Ltd.\r
+60AAEF (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+D0-F3-F5 (hex) Huawei Device Co., Ltd.\r
+D0F3F5 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+D4-46-49 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+D44649 (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
+94-00-B0 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+9400B0 (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
+24-79-EF (hex) Greenpacket Berhad, Taiwan\r
+2479EF (base 16) Greenpacket Berhad, Taiwan\r
+ B-23A-3, The Ascent Paradigm, No. 1, Jalan SS7/26A, Kelana Jaya, 47301 Petaling Jaya\r
+ Petaling Jaya Selangor 47301\r
+ MY\r
+\r
+AC-23-34 (hex) Infinix mobility limited\r
+AC2334 (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
+00-2B-67 (hex) LCFC(HeFei) Electronics Technology co., ltd\r
+002B67 (base 16) LCFC(HeFei) Electronics Technology co., ltd\r
+ YunGu Road 3188-1\r
+ Hefei Anhui 230000\r
+ CN\r
+\r
+F8-BC-0E (hex) eero inc.\r
+F8BC0E (base 16) eero inc.\r
+ 660 3rd Street\r
+ San Francisco CA 94107\r
+ US\r
+\r
+50-E0-39 (hex) Zyxel Communications Corporation\r
+50E039 (base 16) Zyxel Communications Corporation\r
+ No. 6 Innovation Road II, Science Park\r
+ Hsichu Taiwan 300\r
+ TW\r
+\r
+B8-57-76 (hex) lignex1\r
+B85776 (base 16) lignex1\r
+ 354-25, Sanhodae-ro\r
+ Gumi-si Gyeongsangbuk-do, Korea 39262\r
+ KR\r
+\r
+24-00-FA (hex) China Mobile (Hangzhou) Information Technology Co., Ltd\r
+2400FA (base 16) China Mobile (Hangzhou) Information Technology Co., Ltd\r
+ No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District\r
+ Hangzhou Zhejiang 311100\r
+ CN\r
+\r
+C8-3D-FC (hex) AlphaTheta Corporation\r
+C83DFC (base 16) AlphaTheta Corporation\r
+ 6F,Yokohama i-Mark Place, 4-4-5 Minatomirai, Nishi-ku\r
+ Yokohama Kanagawa 220-0012\r
+ JP\r
+\r
+E0-19-95 (hex) Nutanix\r
+E01995 (base 16) Nutanix\r
+ 1740 Technology Drive Ste #150\r
+ San Jose CA 95110\r
+ US\r
+\r
+F8-51-28 (hex) SimpliSafe\r
+F85128 (base 16) SimpliSafe\r
+ 294 Washington St\r
+ Boston MA 02108\r
+ US\r
+\r
+AC-1F-09 (hex) shenzhen RAKwireless technology Co.,Ltd\r
+AC1F09 (base 16) shenzhen RAKwireless technology Co.,Ltd\r
+ Room 506, Bldg B, New Compark, Pingshan First Road, Taoyuan Street,Nanshan District\r
+ shenzhen guangdong 518057\r
+ CN\r
+\r
+BC-13-A8 (hex) Shenzhen YOUHUA Technology Co., Ltd\r
+BC13A8 (base 16) Shenzhen YOUHUA Technology Co., Ltd\r
+ Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District\r
+ Shenzhen Guangdong 518055\r
+ CN\r
+\r
+90-77-EE (hex) Cisco Systems, Inc\r
+9077EE (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+3C-13-CC (hex) Cisco Systems, Inc\r
+3C13CC (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+94-E3-EE (hex) zte corporation\r
+94E3EE (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
+D8-DC-40 (hex) Apple, Inc.\r
+D8DC40 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+80-5F-C5 (hex) Apple, Inc.\r
+805FC5 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+10-F9-20 (hex) Cisco Systems, Inc\r
+10F920 (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+20-69-80 (hex) Apple, Inc.\r
+206980 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+64-32-A8 (hex) Intel Corporate\r
+6432A8 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+80-19-34 (hex) Intel Corporate\r
+801934 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+40-A3-CC (hex) Intel Corporate\r
+40A3CC (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+E4-A7-A0 (hex) Intel Corporate\r
+E4A7A0 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+3C-4D-BE (hex) Apple, Inc.\r
+3C4DBE (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+48-26-2C (hex) Apple, Inc.\r
+48262C (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+14-7D-DA (hex) Apple, Inc.\r
+147DDA (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+C4-91-0C (hex) Apple, Inc.\r
+C4910C (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+6C-99-61 (hex) Sagemcom Broadband SAS\r
+6C9961 (base 16) Sagemcom Broadband SAS\r
+ 250, route de l'Empereur\r
+ Rueil Malmaison Cedex hauts de seine 92848\r
+ FR\r
+\r
+50-C7-09 (hex) Juniper Networks\r
+50C709 (base 16) Juniper Networks\r
+ 1133 Innovation Way\r
+ Sunnyvale CA 94089\r
+ US\r
+\r
+80-6D-97 (hex) Private\r
+806D97 (base 16) Private\r
+\r
+64-5D-86 (hex) Intel Corporate\r
+645D86 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+18-1D-EA (hex) Intel Corporate\r
+181DEA (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+18-56-80 (hex) Intel Corporate\r
+185680 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+A0-A4-C5 (hex) Intel Corporate\r
+A0A4C5 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+F4-D1-08 (hex) Intel Corporate\r
+F4D108 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+20-79-18 (hex) Intel Corporate\r
+207918 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+A8-6D-AA (hex) Intel Corporate\r
+A86DAA (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+38-00-25 (hex) Intel Corporate\r
+380025 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+C0-E3-A0 (hex) Renesas Electronics (Penang) Sdn. Bhd.\r
+C0E3A0 (base 16) Renesas Electronics (Penang) Sdn. Bhd.\r
+ Phase 3, Bayan Lepas FIZ\r
+ Bayan Lepas Penang 11900\r
+ MY\r
+\r
+F4-C1-14 (hex) Technicolor CH USA Inc.\r
+F4C114 (base 16) Technicolor CH USA Inc.\r
+ 5030 Sugarloaf Parkway Bldg 6 \r
+ Lawrenceville GA 30044\r
+ US\r
+\r
+8C-E4-68 (hex) Guangzhou Sageran Technology Co., Ltd.\r
+8CE468 (base 16) Guangzhou Sageran Technology Co., Ltd.\r
+ Room 1902, Ruian Guangzhou Center, 374 Beijing Road, Yuexiu District\r
+ Guangzhou Guangdong 510030\r
+ CN\r
+\r
+C8-B2-9B (hex) Intel Corporate\r
+C8B29B (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+6C-6A-77 (hex) Intel Corporate\r
+6C6A77 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+A4-B1-C1 (hex) Intel Corporate\r
+A4B1C1 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+34-2E-B7 (hex) Intel Corporate\r
+342EB7 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+8C-C6-81 (hex) Intel Corporate\r
+8CC681 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+CC-F9-E4 (hex) Intel Corporate\r
+CCF9E4 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+3C-58-C2 (hex) Intel Corporate\r
+3C58C2 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+E4-5E-37 (hex) Intel Corporate\r
+E45E37 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+24-41-8C (hex) Intel Corporate\r
+24418C (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+60-F2-62 (hex) Intel Corporate\r
+60F262 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+C0-B8-83 (hex) Intel Corporate\r
+C0B883 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+C8-09-A8 (hex) Intel Corporate\r
+C809A8 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+90-78-41 (hex) Intel Corporate\r
+907841 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+58-A0-23 (hex) Intel Corporate\r
+58A023 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+D4-D2-52 (hex) Intel Corporate\r
+D4D252 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+28-48-E7 (hex) Huawei Device Co., Ltd.\r
+2848E7 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+04-D3-B0 (hex) Intel Corporate\r
+04D3B0 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+E0-6C-A6 (hex) Creotech Instruments S.A.\r
+E06CA6 (base 16) Creotech Instruments S.A.\r
+ ul. Gen. L. Okulickiego 7/9\r
+ Piaseczno Mazovia 05-500\r
+ PL\r
+\r
+44-68-0C (hex) Wacom Co.,Ltd.\r
+44680C (base 16) Wacom Co.,Ltd.\r
+ Sumitomo Fudosan Shinjuku Grand Tower 31F,8-17-1\r
+ Nishi-shinjuku,Shinjuku-ku Tokyo 160-6131\r
+ JP\r
+\r
+98-0E-24 (hex) Phytium Technology Co.,Ltd.\r
+980E24 (base 16) Phytium Technology Co.,Ltd.\r
+ Building5,XinAn Business Square,Haiyuan Middle Road Binhai New District,\r
+ Tianjin 300450\r
+ CN\r
+\r
+A8-30-BC (hex) Samsung Electronics Co.,Ltd\r
+A830BC (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
+\r
+00-63-DE (hex) CLOUDWALK TECHNOLOGY CO.,LTD\r
+0063DE (base 16) CLOUDWALK TECHNOLOGY CO.,LTD\r
+ Five Floors of Block 106, West Jinkai Avenue, Yubei District\r
+ Chongqing Chongqing 401120\r
+ CN\r
+\r
+60-A4-23 (hex) Silicon Laboratories\r
+60A423 (base 16) Silicon Laboratories\r
+ 7000 W. William Cannon Dr.\r
+ Austin TX 78735\r
+ US\r
+\r
+78-46-D4 (hex) Samsung Electronics Co.,Ltd\r
+7846D4 (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
+\r
+E4-3E-C6 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+E43EC6 (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-88-1E (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+38881E (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-DB-07 (hex) Intel Corporate\r
+2CDB07 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+98-8D-46 (hex) Intel Corporate\r
+988D46 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+E4-26-8B (hex) Huawei Device Co., Ltd.\r
+E4268B (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+68-88-A1 (hex) Universal Electronics, Inc.\r
+6888A1 (base 16) Universal Electronics, Inc.\r
+ 201 E. Sandpointe Ave\r
+ Santa Ana CA 92707\r
+ US\r
+\r
+00-1E-B2 (hex) LG Innotek\r
+001EB2 (base 16) LG Innotek\r
+ Hanyang Univ. 1271, Sa-dong, Sangrok-gu\r
+ Ansan-si Gyeonggi-do 426-791\r
+ KR\r
+\r
+C0-86-B3 (hex) Shenzhen Voxtech Co., Ltd.\r
+C086B3 (base 16) Shenzhen Voxtech Co., Ltd.\r
+ Floors 1-4,Factory Building 26,Shancheng Industrial Park,Shiyan Street,Bao'an District,Shenzhen, Guangdong,China\r
+ Shenzhen 518000\r
+ CN\r
+\r
+44-AD-B1 (hex) Sagemcom Broadband SAS\r
+44ADB1 (base 16) Sagemcom Broadband SAS\r
+ 250, route de l'Empereur\r
+ Rueil Malmaison Cedex hauts de seine 92848\r
+ FR\r
+\r
+1C-98-C1 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.\r
+1C98C1 (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
+A0-9B-17 (hex) Taicang T&W Electronics\r
+A09B17 (base 16) Taicang T&W Electronics\r
+ 89# Jiang Nan RD\r
+ Suzhou Jiangsu 215412\r
+ CN\r
+\r
+44-01-BB (hex) SHENZHEN BILIAN ELECTRONIC CO.,LTD\r
+4401BB (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
+A0-D8-3D (hex) Fiberhome Telecommunication Technologies Co.,LTD\r
+A0D83D (base 16) Fiberhome Telecommunication Technologies Co.,LTD\r
+ No.5 DongXin Road\r
+ Wuhan Hubei 430074\r
+ CN\r
+\r
+58-F2-FC (hex) Huawei Device Co., Ltd.\r
+58F2FC (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+64-3A-EA (hex) Cisco Systems, Inc\r
+643AEA (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+50-70-43 (hex) BSkyB Ltd\r
+507043 (base 16) BSkyB Ltd\r
+ 130 Kings Road\r
+ Brentwood Essex 08854\r
+ GB\r
+\r
+D0-14-11 (hex) IEEE Registration Authority\r
+D01411 (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+3C-53-D7 (hex) CEDES AG\r
+3C53D7 (base 16) CEDES AG\r
+ Kantonsstrasse 14\r
+ Landquart 7302\r
CH\r
\r
+00-E5-E4 (hex) Sichuan Tianyi Comheart Telecom Co., Ltd.\r
+00E5E4 (base 16) Sichuan Tianyi Comheart Telecom Co., Ltd.\r
+ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County\r
+ Chengdu Sichuan 611330\r
+ CN\r
+\r
+E8-13-6E (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+E8136E (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-AE-13 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+4CAE13 (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-2E-FE (hex) Shenzhen Comnect Technology Co.,LTD\r
+4C2EFE (base 16) Shenzhen Comnect Technology Co.,LTD\r
+ G Zone, 3/F, Building 1, Baisha High-Tech Park, No. 3011, Shahe Road West, XiLi Street, Nanshan District\r
+ Shenzhen 518055\r
+ CN\r
+\r
+10-BC-97 (hex) vivo Mobile Communication Co., Ltd.\r
+10BC97 (base 16) vivo Mobile Communication Co., Ltd.\r
+ #283,BBK Road\r
+ Wusha,Chang'An DongGuan City,Guangdong, 523860\r
+ CN\r
+\r
+DC-D4-44 (hex) Huawei Device Co., Ltd.\r
+DCD444 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+E0-B2-60 (hex) TENO NETWORK TECHNOLOGIES COMPANY LIMITED\r
+E0B260 (base 16) TENO NETWORK TECHNOLOGIES COMPANY LIMITED\r
+ RM 1302, 13/F CHEONG K BLDG 84-86 DES VOEUX RD CENTRAL HONG KONG\r
+ Hong Kong 999077\r
+ HK\r
+\r
+A4-46-B4 (hex) Huawei Device Co., Ltd.\r
+A446B4 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+0C-C8-44 (hex) Cambridge Mobile Telematics, Inc.\r
+0CC844 (base 16) Cambridge Mobile Telematics, Inc.\r
+ One Broadway, 14th Floor\r
+ Cambridge MA 02142\r
+ US\r
+\r
+E8-DA-20 (hex) Nintendo Co.,Ltd\r
+E8DA20 (base 16) Nintendo Co.,Ltd\r
+ 11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU\r
+ KYOTO KYOTO 601-8501\r
+ JP\r
+\r
+48-23-35 (hex) Dialog Semiconductor Hellas SA\r
+482335 (base 16) Dialog Semiconductor Hellas SA\r
+ Achileos 8 & Katsoni Str\r
+ Kalithea, Athens 17674\r
+ GR\r
+\r
+8C-85-C1 (hex) Aruba, a Hewlett Packard Enterprise Company\r
+8C85C1 (base 16) Aruba, a Hewlett Packard Enterprise Company\r
+ 3333 Scott Blvd\r
+ Santa Clara CA 95054\r
+ US\r
+\r
+20-A1-71 (hex) Amazon Technologies Inc.\r
+20A171 (base 16) Amazon Technologies Inc.\r
+ P.O Box 8102\r
+ Reno NV 89507\r
+ US\r
+\r
+7C-F9-A0 (hex) Fiberhome Telecommunication Technologies Co.,LTD\r
+7CF9A0 (base 16) Fiberhome Telecommunication Technologies Co.,LTD\r
+ No.5 DongXin Road\r
+ Wuhan Hubei 430074\r
+ CN\r
+\r
+6C-A4-D1 (hex) Fiberhome Telecommunication Technologies Co.,LTD\r
+6CA4D1 (base 16) Fiberhome Telecommunication Technologies Co.,LTD\r
+ No.5 DongXin Road\r
+ Wuhan Hubei 430074\r
+ CN\r
+\r
+54-AB-3A (hex) Quanta Computer Inc.\r
+54AB3A (base 16) Quanta Computer Inc.\r
+ No.211, Wen Hwa 2nd Rd., Kuei Shan Hsiang, Tao Yuan Shien, Taiwan, R. O. C.\r
+ Taoyuan Taiwan 33377\r
+ TW\r
+\r
+E8-9A-8F (hex) Quanta Computer Inc.\r
+E89A8F (base 16) Quanta Computer Inc.\r
+ 211, Wen Hwa 2nd Rd.,Kuei Shan, Tao Yuan \r
+ TAIPEI 33377\r
+ TW\r
+\r
+EC-6C-9A (hex) Arcadyan Corporation\r
+EC6C9A (base 16) Arcadyan Corporation\r
+ No.8, Sec.2, Guangfu Rd.\r
+ Hsinchu City Hsinchu 30071\r
+ TW\r
+\r
+34-6D-9C (hex) Carrier Corporation\r
+346D9C (base 16) Carrier Corporation\r
+ 6304 Thompson Rd\r
+ East Syracuse NY 13057\r
+ US\r
+\r
+D4-F7-56 (hex) zte corporation\r
+D4F756 (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
+E0-69-3A (hex) Innophase Inc.\r
+E0693A (base 16) Innophase Inc.\r
+ 6815 Flanders Drive Suite 150\r
+ San Diego CA 92121\r
+ US\r
+\r
+54-88-DE (hex) Cisco Systems, Inc\r
+5488DE (base 16) Cisco Systems, Inc\r
+ 80 West Tasman Drive\r
+ San Jose CA 94568\r
+ US\r
+\r
+78-2B-64 (hex) Bose Corporation\r
+782B64 (base 16) Bose Corporation\r
+ The Mountain\r
+ Framingham MA 01701-9168\r
+ US\r
+\r
+24-FD-0D (hex) Intelbras\r
+24FD0D (base 16) Intelbras\r
+ BR 101, KM 210\r
+ São Jose Santa Catarina 88104-800\r
+ BR\r
+\r
+34-55-94 (hex) FUJIAN STAR-NET COMMUNICATION CO.,LTD\r
+345594 (base 16) FUJIAN STAR-NET COMMUNICATION CO.,LTD\r
+ 19-22# Building, Star-net Science Plaza, Juyuanzhou,\r
+ FUZHOU FUJIAN 350002\r
+ CN\r
+\r
+9C-6B-37 (hex) Renesas Electronics (Penang) Sdn. Bhd.\r
+9C6B37 (base 16) Renesas Electronics (Penang) Sdn. Bhd.\r
+ Phase 3, Bayan Lepas FIZ\r
+ Bayan Lepas Penang 11900\r
+ MY\r
+\r
+A8-37-59 (hex) Huawei Device Co., Ltd.\r
+A83759 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+40-AA-56 (hex) China Dragon Technology Limited\r
+40AA56 (base 16) China Dragon Technology Limited\r
+ B4 Bldg.Haoshan 1st Industry Park,\r
+ Shenzhen Guangdong 518104\r
+ CN\r
+\r
+68-54-5A (hex) Intel Corporate\r
+68545A (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+3C-E3-E7 (hex) China Mobile Group Device Co.,Ltd.\r
+3CE3E7 (base 16) China Mobile Group Device Co.,Ltd.\r
+ 32 Xuanwumen West Street,Xicheng District\r
+ Beijing 100053\r
+ CN\r
+\r
+CC-47-BD (hex) Rhombus Systems\r
+CC47BD (base 16) Rhombus Systems\r
+ 770 L St, Suite 1480\r
+ Sacramento CA 95814\r
+ US\r
+\r
+4C-93-A6 (hex) IEEE Registration Authority\r
+4C93A6 (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+00-1E-31 (hex) infomark\r
+001E31 (base 16) infomark\r
+ 5F.,Geown Bldg.,1360-53\r
+ Seoul Seocho-dong,Seocho-gu 137-863\r
+ KR\r
+\r
+50-F7-ED (hex) Huawei Device Co., Ltd.\r
+50F7ED (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+4C-B9-9B (hex) WEIFANG GOERTEK ELECTRONICS CO.,LTD\r
+4CB99B (base 16) WEIFANG GOERTEK ELECTRONICS CO.,LTD\r
+ Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China\r
+ Weifang Shandong 261205\r
+ CN\r
+\r
+BC-7E-8B (hex) Samsung Electronics Co.,Ltd\r
+BC7E8B (base 16) Samsung Electronics Co.,Ltd\r
+ 129, Samsung-ro, Youngtongl-Gu\r
+ Suwon Gyeonggi-Do 16677\r
+ KR\r
+\r
+0C-31-DC (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+0C31DC (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
+40-DD-D1 (hex) Beautiful Card Corporation\r
+40DDD1 (base 16) Beautiful Card Corporation\r
+ Wenming 1st St.,\r
+ Taoyuan 33383\r
+ TW\r
+\r
+C0-E7-BF (hex) Sichuan AI-Link Technology Co., Ltd.\r
+C0E7BF (base 16) Sichuan AI-Link Technology Co., Ltd.\r
+ Anzhou, Industrial Park\r
+ Mianyang Sichuan 622650\r
+ CN\r
+\r
+54-77-8A (hex) Hewlett Packard Enterprise\r
+54778A (base 16) Hewlett Packard Enterprise\r
+ 8000 Foothills Blvd.\r
+ Roseville CA 95747\r
+ US\r
+\r
+24-71-52 (hex) Dell Inc.\r
+247152 (base 16) Dell Inc.\r
+ One Dell Way\r
+ Round Rock TX 78682\r
+ US\r
+\r
+64-33-DB (hex) Texas Instruments\r
+6433DB (base 16) Texas Instruments\r
+ 12500 TI Blvd\r
+ Dallas TX 75243\r
+ US\r
+\r
+A4-06-E9 (hex) Texas Instruments\r
+A406E9 (base 16) Texas Instruments\r
+ 12500 TI Blvd\r
+ Dallas TX 75243\r
+ US\r
+\r
+B0-B1-13 (hex) Texas Instruments\r
+B0B113 (base 16) Texas Instruments\r
+ 12500 TI Blvd\r
+ Dallas TX 75243\r
+ US\r
+\r
+4C-AE-EC (hex) Guangzhou limee technology co.,LTD\r
+4CAEEC (base 16) Guangzhou limee technology co.,LTD\r
+ No.2, Yichuang Street, Zhongxin Guangzhou Knowledge City, Huangpu District, Guangzhou\r
+ Guangzhou Guangdong 510555\r
+ CN\r
+\r
+00-40-AB (hex) ROLAND DG CORPORATION\r
+0040AB (base 16) ROLAND DG CORPORATION\r
+ 1-1-3 Shinmiyakoda, Kita-ku\r
+ Hamamatsu-shi Shizuoka-ken 431-2103\r
+ JP\r
+\r
+00-12-B4 (hex) Work Microwave GmbH\r
+0012B4 (base 16) Work Microwave GmbH\r
+ Rudolf-Diesel-Ring 2\r
+ Holzkirchen 83607\r
+ DE\r
+\r
+24-B1-05 (hex) Prama Hikvision India Private Limited\r
+24B105 (base 16) Prama Hikvision India Private Limited\r
+ Prama Hikvision India Pvt Ltd, Akurli Cross Road No 1, Kandivali East\r
+ Mumbai Maharashtra 400101\r
+ IN\r
+\r
+70-9C-D1 (hex) Intel Corporate\r
+709CD1 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+80-60-B7 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.\r
+8060B7 (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
+90-AA-C3 (hex) Hitron Technologies. Inc\r
+90AAC3 (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
+44-91-7C (hex) HMD Global Oy\r
+44917C (base 16) HMD Global Oy\r
+ Bertel Jungin aukio 9\r
+ Espoo Paimio 02600\r
+ FI\r
+\r
+DC-72-23 (hex) Hui Zhou Gaoshengda Technology Co.,LTD\r
+DC7223 (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
+34-20-E3 (hex) Ruckus Wireless\r
+3420E3 (base 16) Ruckus Wireless\r
+ 350 West Java Drive\r
+ Sunnyvale CA 94089\r
+ US\r
+\r
+8C-47-BE (hex) Dell Inc.\r
+8C47BE (base 16) Dell Inc.\r
+ One Dell Way\r
+ Round Rock TX 78682\r
+ US\r
+\r
+20-F4-4F (hex) Nokia\r
+20F44F (base 16) Nokia\r
+ 600 March Road\r
+ Kanata Ontario K2K 2E6\r
+ CA\r
+\r
+24-5F-9F (hex) Huawei Device Co., Ltd.\r
+245F9F (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+CC-B0-A8 (hex) Huawei Device Co., Ltd.\r
+CCB0A8 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+50-28-73 (hex) Huawei Device Co., Ltd.\r
+502873 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\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
Hull East Yorkshire HU5 4JB\r
GB\r
\r
-04-ED-33 (hex) Intel Corporate\r
-04ED33 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
20-36-D7 (hex) Shanghai Reacheng Communication Technology Co.,Ltd\r
2036D7 (base 16) Shanghai Reacheng Communication Technology Co.,Ltd\r
No. 80, Lane 1505 Zuchongzhi Road\r
Tsuen Wan NA\r
HK\r
\r
-7C-B2-7D (hex) Intel Corporate\r
-7CB27D (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
10-63-C8 (hex) Liteon Technology Corporation\r
1063C8 (base 16) Liteon Technology Corporation\r
4F, 90, Chien 1 Road\r
Hong Kong NA\r
HK\r
\r
-A4-C3-F0 (hex) Intel Corporate\r
-A4C3F0 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
28-FF-B2 (hex) Toshiba Corp.\r
28FFB2 (base 16) Toshiba Corp.\r
1-1 Shibaura 1-Chome, Minato-Ku\r
Riga Riga LV1009\r
LV\r
\r
-A4-11-62 (hex) Arlo Technology\r
-A41162 (base 16) Arlo Technology\r
- 350 East Plumeria Drive\r
- san jose CA 95134\r
- US\r
-\r
00-A0-85 (hex) Private\r
00A085 (base 16) Private\r
\r
KYOTO KYOTO 601-8501\r
JP\r
\r
-50-76-AF (hex) Intel Corporate\r
-5076AF (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
DC-CB-A8 (hex) Explora Technologies Inc\r
DCCBA8 (base 16) Explora Technologies Inc\r
360, Franquet Street\r
Round Rock TX 78682\r
US\r
\r
-00-16-36 (hex) QUANTA COMPUTER INC.\r
-001636 (base 16) QUANTA COMPUTER INC.\r
- No. 211, Wen Hwa 2Rd., Kuei Shan Hsiang\r
- Tao Yuan Shien 0000\r
- TW\r
-\r
34-DA-C1 (hex) SAE Technologies Development(Dongguan) Co., Ltd.\r
34DAC1 (base 16) SAE Technologies Development(Dongguan) Co., Ltd.\r
Winnerway Industrial Area,Nancheng\r
San Jose CA 94568\r
US\r
\r
-B4-69-21 (hex) Intel Corporate\r
-B46921 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
90-2B-D2 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
902BD2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD\r
No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
Dallas TX 75243\r
US\r
\r
-38-DE-AD (hex) Intel Corporate\r
-38DEAD (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
-D4-6D-6D (hex) Intel Corporate\r
-D46D6D (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
B4-F2-E8 (hex) ARRIS Group, Inc.\r
B4F2E8 (base 16) ARRIS Group, Inc.\r
6450 Sequence Drive\r
Hwaseong-si Gyeonggi-do 18510\r
KR\r
\r
-F8-F2-1E (hex) Intel Corporate\r
-F8F21E (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
28-29-86 (hex) APC by Schneider Electric\r
282986 (base 16) APC by Schneider Electric\r
800 Federal St.\r
Copenhagen V DK-1790\r
DK\r
\r
-00-1C-FC (hex) Sumitomo Electric Industries,Ltd\r
-001CFC (base 16) Sumitomo Electric Industries,Ltd\r
- 1-1-3, Shimaya, Konohana-ku\r
- Osaka 554-0024\r
- JP\r
-\r
00-23-B4 (hex) Nokia Danmark A/S\r
0023B4 (base 16) Nokia Danmark A/S\r
Frederikskaj\r
GUNPO-SI KYUNGGI-DO 435-862\r
KR\r
\r
-AC-9A-96 (hex) Lantiq Deutschland GmbH\r
-AC9A96 (base 16) Lantiq Deutschland GmbH\r
- Am Campeon 3\r
- Neubiberg Bavaria 85579\r
- DE\r
-\r
80-EE-73 (hex) Shuttle Inc.\r
80EE73 (base 16) Shuttle Inc.\r
No. 30 Lane 76, Rei Kuang Rd\r
SAKU Nagano 385-0021\r
JP\r
\r
-00-1D-05 (hex) Eaton Corporation\r
-001D05 (base 16) Eaton Corporation\r
- 203 Cooper Circle\r
- Peachtree City GA 30269\r
- US\r
-\r
00-1C-C2 (hex) Part II Research, Inc.\r
001CC2 (base 16) Part II Research, Inc.\r
4601 E. Airport Dr.\r
Colorado Springs CO 80915\r
US\r
\r
-00-19-F5 (hex) Imagination Technologies Ltd\r
-0019F5 (base 16) Imagination Technologies Ltd\r
- Zurich House\r
- Leeds West Yorkshire LS11 5DB\r
- GB\r
-\r
00-19-EF (hex) SHENZHEN LINNKING ELECTRONICS CO.,LTD\r
0019EF (base 16) SHENZHEN LINNKING ELECTRONICS CO.,LTD\r
Room 901,B Block,Qinghua Information Center Hi-tec park North District,Nanshan District,Shenzhen\r
Taipei Hsien \r
TW\r
\r
-00-CB-BD (hex) Cambridge Broadband Networks Ltd.\r
-00CBBD (base 16) Cambridge Broadband Networks Ltd.\r
- Selwyn House Cambridge Business Park\r
- Cambridge CB4 0WZ\r
- GB\r
-\r
00-05-88 (hex) Sensoria Corp.\r
000588 (base 16) Sensoria Corp.\r
15950 Bernardo Ctr. Dr.\r
ALBUQUERQUE NM 87184-0173\r
US\r
\r
-00-E0-B7 (hex) PI GROUP, LTD.\r
-00E0B7 (base 16) PI GROUP, LTD.\r
- MILTON HALL, CHURCH LANE\r
- MILTON, CAMBRIDGE CBA 6AB \r
- GB\r
-\r
00-E0-83 (hex) JATO TECHNOLOGIES, INC.\r
00E083 (base 16) JATO TECHNOLOGIES, INC.\r
505 EAST HUNTLAND DR. STE #550\r
Wuhan Hubei 430074\r
CN\r
\r
-5C-80-B6 (hex) Intel Corporate\r
-5C80B6 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
-F8-E4-E3 (hex) Intel Corporate\r
-F8E4E3 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
AC-BD-0B (hex) Leimac Ltd.\r
ACBD0B (base 16) Leimac Ltd.\r
1551, Sazukawa-chou\r
Lawrenceville GA 30044\r
US\r
\r
-84-C5-A6 (hex) Intel Corporate\r
-84C5A6 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
38-68-A4 (hex) Samsung Electronics Co.,LTD\r
3868A4 (base 16) Samsung Electronics Co.,LTD\r
129, Samsung-ro, Youngtongl-Gu\r
Zhuhai Guangdong 519070\r
CN\r
\r
-04-33-C2 (hex) Intel Corporate\r
-0433C2 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
C8-03-F5 (hex) Ruckus Wireless\r
C803F5 (base 16) Ruckus Wireless\r
350 West Java Drive\r
New Taipei City Taiwan 231\r
TW\r
\r
-C8-58-C0 (hex) Intel Corporate\r
-C858C0 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
64-7C-34 (hex) Ubee Interactive Co., Limited\r
647C34 (base 16) Ubee Interactive Co., Limited\r
Flat/RM 1202, 12/F, AT Tower \r
Dongguan 523808\r
CN\r
\r
-AC-12-03 (hex) Intel Corporate\r
-AC1203 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
-64-BC-58 (hex) Intel Corporate\r
-64BC58 (base 16) Intel Corporate\r
- Lot 8, Jalan Hi-Tech 2/3\r
- Kulim Kedah 09000\r
- MY\r
-\r
D4-52-EE (hex) BSkyB Ltd\r
D452EE (base 16) BSkyB Ltd\r
130 Kings Road\r
Santa Clara CA 95054\r
US\r
\r
-EC-6C-B5 (hex) zte corporation\r
-EC6CB5 (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
-C0-B1-01 (hex) zte corporation\r
-C0B101 (base 16) zte corporation\r
- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China\r
- shenzhen guangdong 518057\r
- CN\r
+FC-3D-A5 (hex) Arcadyan Corporation\r
+FC3DA5 (base 16) Arcadyan Corporation\r
+ No.8, Sec.2, Guangfu Rd.\r
+ Hsinchu City Hsinchu 30071\r
+ TW\r
\r
EC-4F-82 (hex) Calix Inc.\r
EC4F82 (base 16) Calix Inc.\r
San Jose CA 95131\r
US\r
\r
-FC-3D-A5 (hex) Arcadyan Corporation\r
-FC3DA5 (base 16) Arcadyan Corporation\r
- No.8, Sec.2, Guangfu Rd.\r
- Hsinchu City Hsinchu 30071\r
- TW\r
+EC-6C-B5 (hex) zte corporation\r
+EC6CB5 (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
+C0-B1-01 (hex) zte corporation\r
+C0B101 (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-01-52 (hex) Samsung Electronics Co.,Ltd\r
+140152 (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
\r
BC-33-AC (hex) Silicon Laboratories\r
BC33AC (base 16) Silicon Laboratories\r
Austin TX 78735\r
US\r
\r
-14-01-52 (hex) Samsung Electronics Co.,Ltd\r
-140152 (base 16) Samsung Electronics Co.,Ltd\r
+94-FB-A7 (hex) IEEE Registration Authority\r
+94FBA7 (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+98-8E-79 (hex) Qudelix, Inc.\r
+988E79 (base 16) Qudelix, Inc.\r
+ 605-ho, 21, Baekbeom-ro 31-gil, Mapo-gu\r
+ Seoul 12110\r
+ KR\r
+\r
+98-F6-21 (hex) Xiaomi Communications Co Ltd\r
+98F621 (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
+C0-3E-BA (hex) Dell Inc.\r
+C03EBA (base 16) Dell Inc.\r
+ One Dell Way\r
+ Round Rock TX 78682\r
+ US\r
+\r
+C0-39-5A (hex) Zhejiang Dahua Technology Co., Ltd.\r
+C0395A (base 16) Zhejiang Dahua Technology Co., Ltd.\r
+ No.1199,Waterfront Road \r
+ Hangzhou Zhejiang 310053\r
+ CN\r
+\r
+20-64-CB (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+2064CB (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+ NO.18 HAIBIN ROAD,\r
+ DONG GUAN GUANG DONG 523860\r
+ CN\r
+\r
+F0-55-01 (hex) Huawei Device Co., Ltd.\r
+F05501 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+7C-F2-DD (hex) Vence Corp\r
+7CF2DD (base 16) Vence Corp\r
+ 16885 W Bernardo Dr., STE 209\r
+ San Diego CA 92127\r
+ US\r
+\r
+D0-76-8F (hex) Calix Inc.\r
+D0768F (base 16) Calix Inc.\r
+ 2777 Orchard Pkwy\r
+ San Jose CA 95131\r
+ US\r
+\r
+1C-FF-59 (hex) Sichuan Tianyi Comheart Telecom Co., Ltd.\r
+1CFF59 (base 16) Sichuan Tianyi Comheart Telecom Co., Ltd.\r
+ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County\r
+ Chengdu Sichuan 611330\r
+ CN\r
+\r
+14-13-FB (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+1413FB (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
+00-E0-B7 (hex) Cosworth Electronics Ltd\r
+00E0B7 (base 16) Cosworth Electronics Ltd\r
+ The Octagon, St. James Mill Road\r
+ Northampton Northamptonshire NN5 5RA, GB\r
+ GB\r
+\r
+A4-93-40 (hex) Beijing Supvan Information Technology Co.,Ltd.\r
+A49340 (base 16) Beijing Supvan Information Technology Co.,Ltd.\r
+ 206.2/F,Building No.1.No.1 Gaoxin Three Street. Huilongguan Town,Changping District\r
+ Beijing Beijing 102206\r
+ CN\r
+\r
+F8-E8-77 (hex) Harman/Becker Automotive Systems GmbH\r
+F8E877 (base 16) Harman/Becker Automotive Systems GmbH\r
+ Becker-Göring-Straße 16\r
+ Karlsbad Baden-Württemberg 76307\r
+ DE\r
+\r
+A0-9B-12 (hex) China Mobile IOT Company Limited\r
+A09B12 (base 16) China Mobile IOT Company Limited\r
+ NO.8 Yu Ma Road, NanAn Area\r
+ Chongqing Chongqing 401336\r
+ CN\r
+\r
+94-08-53 (hex) Liteon Technology Corporation\r
+940853 (base 16) Liteon Technology Corporation\r
+ 4F, 90, Chien 1 Road\r
+ New Taipei City Taiwan 23585\r
+ TW\r
+\r
+B4-9E-80 (hex) Sichuan Changhong Electric Ltd.\r
+B49E80 (base 16) Sichuan Changhong Electric Ltd.\r
+ No.35,East MianXin Road,MianYang,Sichaun,China.\r
+ MianYang SiChuan PRC 621000\r
+ CN\r
+\r
+00-E2-2C (hex) China Mobile Group Device Co.,Ltd.\r
+00E22C (base 16) China Mobile Group Device Co.,Ltd.\r
+ 32 Xuanwumen West Street,Xicheng District\r
+ Beijing 100053\r
+ CN\r
+\r
+78-11-00 (hex) Quantumsolution\r
+781100 (base 16) Quantumsolution\r
+ Rm 903, STX V-Tower, 128, Gasandigital 1-ro, Geumcheon-gu\r
+ Seoul 08507\r
+ KR\r
+\r
+E8-7F-95 (hex) Apple, Inc.\r
+E87F95 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+88-C0-8B (hex) Apple, Inc.\r
+88C08B (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+74-AB-93 (hex) Blink by Amazon \r
+74AB93 (base 16) Blink by Amazon \r
+ 100 Riverpark Drive\r
+ North Reading MA 01864\r
+ US\r
+\r
+7C-A9-6B (hex) Syrotech Networks. Ltd.\r
+7CA96B (base 16) Syrotech Networks. Ltd.\r
+ UNIT NO.-5 20F, KIN WING INDUSTERIAL BUILDING,33 KIN WING STREET\r
+ TUEN MUN 999077\r
+ HK\r
+\r
+98-06-3C (hex) Samsung Electronics Co.,Ltd\r
+98063C (base 16) Samsung Electronics Co.,Ltd\r
+ 129, Samsung-ro, Youngtongl-Gu\r
+ Suwon Gyeonggi-Do 16677\r
+ KR\r
+\r
+38-DE-AD (hex) Intel Corporate\r
+38DEAD (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+D4-6D-6D (hex) Intel Corporate\r
+D46D6D (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+B4-69-21 (hex) Intel Corporate\r
+B46921 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+F8-F2-1E (hex) Intel Corporate\r
+F8F21E (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+74-A7-EA (hex) Amazon Technologies Inc.\r
+74A7EA (base 16) Amazon Technologies Inc.\r
+ P.O Box 8102\r
+ Reno NV 89507\r
+ US\r
+\r
+4C-7C-D9 (hex) Apple, Inc.\r
+4C7CD9 (base 16) Apple, Inc.\r
+ 1 Infinite Loop\r
+ Cupertino CA 95014\r
+ US\r
+\r
+F0-D7-AF (hex) IEEE Registration Authority\r
+F0D7AF (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+84-EA-ED (hex) Roku, Inc\r
+84EAED (base 16) Roku, Inc\r
+ 150 Winchester Circle\r
+ Los Gatos CA 95032\r
+ US\r
+\r
+7C-B2-7D (hex) Intel Corporate\r
+7CB27D (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+04-ED-33 (hex) Intel Corporate\r
+04ED33 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+5C-80-B6 (hex) Intel Corporate\r
+5C80B6 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+84-C5-A6 (hex) Intel Corporate\r
+84C5A6 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+AC-67-5D (hex) Intel Corporate\r
+AC675D (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+F8-E4-E3 (hex) Intel Corporate\r
+F8E4E3 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+D8-4F-37 (hex) Proxis, spol. s r.o.\r
+D84F37 (base 16) Proxis, spol. s r.o.\r
+ Slovenska 1\r
+ Bardejov PSK 08501\r
+ SK\r
+\r
+AC-12-03 (hex) Intel Corporate\r
+AC1203 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+DC-1B-A1 (hex) Intel Corporate\r
+DC1BA1 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+5C-A5-BC (hex) eero inc.\r
+5CA5BC (base 16) eero inc.\r
+ 660 3rd Street\r
+ San Francisco 94107\r
+ US\r
+\r
+04-33-C2 (hex) Intel Corporate\r
+0433C2 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+C8-58-C0 (hex) Intel Corporate\r
+C858C0 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+64-BC-58 (hex) Intel Corporate\r
+64BC58 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+A4-C3-F0 (hex) Intel Corporate\r
+A4C3F0 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+50-76-AF (hex) Intel Corporate\r
+5076AF (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+DC-91-BF (hex) Amazon Technologies Inc.\r
+DC91BF (base 16) Amazon Technologies Inc.\r
+ P.O Box 8102\r
+ Reno NV 89507\r
+ US\r
+\r
+98-C9-7C (hex) Shenzhen iComm Semiconductor CO,LTD\r
+98C97C (base 16) Shenzhen iComm Semiconductor CO,LTD\r
+ Room 504A,Block B,Digital Building,Garden City,No.1079 Nanhai Road,Nanshan District,Shenzhen\r
+ shenzhen Guangdong 518067\r
+ CN\r
+\r
+E0-92-A7 (hex) Feitian Technologies Co., Ltd\r
+E092A7 (base 16) Feitian Technologies Co., Ltd\r
+ Floor 17, Tower B, Huizhi Mansion, No.9 Xueqing Rd, Haidian District\r
+ Beijing 100085\r
+ CN\r
+\r
+08-B0-A7 (hex) Truebeyond Co., Ltd\r
+08B0A7 (base 16) Truebeyond Co., Ltd\r
+ D-906, 60, Haan-ro\r
+ Gwangmyeong Gyeonggi 14322\r
+ KR\r
+\r
+C0-63-69 (hex) BINXIN TECHNOLOGY(ZHEJIANG) LTD.\r
+C06369 (base 16) BINXIN TECHNOLOGY(ZHEJIANG) LTD.\r
+ B4066 Haichuang Park,368 Liuhe Road, Binjiang District\r
+ Hangzhou Zhejiang 310051\r
+ CN\r
+\r
+18-41-FE (hex) Digital 14\r
+1841FE (base 16) Digital 14\r
+ Elektroniikkatie 8\r
+ Oulu 90590\r
+ FI\r
+\r
+6C-CE-44 (hex) 1MORE\r
+6CCE44 (base 16) 1MORE\r
+ TianliaoBuilding F14?New Materials Industrial Park,Xueyuan Blvd,Nanshan\r
+ Shenzhen Guangdong 518055\r
+ CN\r
+\r
+B0-76-1B (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+B0761B (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-11-62 (hex) Arlo Technology\r
+A41162 (base 16) Arlo Technology\r
+ 3030 Orchard Parkway\r
+ San Jose CA 95134\r
+ US\r
+\r
+00-1D-05 (hex) Cooper Lighting Solutions\r
+001D05 (base 16) Cooper Lighting Solutions\r
+ 1121 Highway 74 S\r
+ Peachtree City GA 30269\r
+ US\r
+\r
+8C-0E-60 (hex) Nanjing Juplink Intelligent Technologies Co., Ltd.\r
+8C0E60 (base 16) Nanjing Juplink Intelligent Technologies Co., Ltd.\r
+ No. 757 Dixiu Road, Binjiang Economic Development Zone, Jiangning District\r
+ Nanjing Jiangsu 211100\r
+ CN\r
+\r
+18-AB-1D (hex) Samsung Electronics Co.,Ltd\r
+18AB1D (base 16) Samsung Electronics Co.,Ltd\r
#94-1, Imsoo-Dong\r
Gumi Gyeongbuk 730-350\r
KR\r
\r
-94-FB-A7 (hex) IEEE Registration Authority\r
-94FBA7 (base 16) IEEE Registration Authority\r
+BC-E9-2F (hex) HP Inc.\r
+BCE92F (base 16) HP Inc.\r
+ 10300 Energy Dr\r
+ Spring TX 77389\r
+ US\r
+\r
+84-37-D5 (hex) Samsung Electronics Co.,Ltd\r
+8437D5 (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
+\r
+34-82-C5 (hex) Samsung Electronics Co.,Ltd\r
+3482C5 (base 16) Samsung Electronics Co.,Ltd\r
+ #94-1, Imsoo-Dong\r
+ Gumi Gyeongbuk 730-350\r
+ KR\r
+\r
+34-0A-33 (hex) D-Link International\r
+340A33 (base 16) D-Link International\r
+ 1 Internal Business Park, #03-12,The Synergy, Singapore\r
+ Singapore Singapore 609917\r
+ SG\r
+\r
+84-D8-1B (hex) TP-LINK TECHNOLOGIES CO.,LTD.\r
+84D81B (base 16) TP-LINK TECHNOLOGIES CO.,LTD.\r
+ Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan\r
+ Shenzhen Guangdong 518057\r
+ CN\r
+\r
+7C-2A-DB (hex) Xiaomi Communications Co Ltd\r
+7C2ADB (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
+E8-A2-45 (hex) Juniper Networks\r
+E8A245 (base 16) Juniper Networks\r
+ 1133 Innovation Way\r
+ Sunnyvale CA 94089\r
+ US\r
+\r
+88-29-49 (hex) Renesas Electronics (Penang) Sdn. Bhd.\r
+882949 (base 16) Renesas Electronics (Penang) Sdn. Bhd.\r
+ Phase 3, Bayan Lepas FIZ\r
+ Bayan Lepas Penang 11900\r
+ MY\r
+\r
+F8-64-B8 (hex) zte corporation\r
+F864B8 (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-51-20 (hex) Huawei Device Co., Ltd.\r
+145120 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+C0-D1-93 (hex) Huawei Device Co., Ltd.\r
+C0D193 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+3C-84-6A (hex) TP-LINK TECHNOLOGIES CO.,LTD.\r
+3C846A (base 16) TP-LINK TECHNOLOGIES CO.,LTD.\r
+ Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan\r
+ Shenzhen Guangdong 518057\r
+ CN\r
+\r
+78-04-E3 (hex) Huawei Device Co., Ltd.\r
+7804E3 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+A4-3B-0E (hex) Huawei Device Co., Ltd.\r
+A43B0E (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+24-A1-60 (hex) Espressif Inc.\r
+24A160 (base 16) Espressif Inc.\r
+ Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+ Shanghai Shanghai 201203\r
+ CN\r
+\r
+DC-AE-EB (hex) Ruckus Wireless\r
+DCAEEB (base 16) Ruckus Wireless\r
+ 350 West Java Drive\r
+ Sunnyvale CA 94089\r
+ US\r
+\r
+24-81-C7 (hex) Huawei Device Co., Ltd.\r
+2481C7 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+FC-86-2A (hex) Huawei Device Co., Ltd.\r
+FC862A (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+1C-3D-2F (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+1C3D2F (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
+EC-75-3E (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+EC753E (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
+90-91-64 (hex) ChongQing Lavid Technology Co., Ltd.\r
+909164 (base 16) ChongQing Lavid Technology Co., Ltd.\r
+ Plant No. 3, Block M2, Photoelectric Park, Wuqiao Lianhe Economic Development Zone, Wanzhou District\r
+ Chongqing 404100\r
+ CN\r
+\r
+EC-DB-86 (hex) API-K\r
+ECDB86 (base 16) API-K\r
+ ZA Tire Poix\r
+ Saint Vincent de Mercuze Isère 38660\r
+ FR\r
+\r
+48-43-DD (hex) Amazon Technologies Inc.\r
+4843DD (base 16) Amazon Technologies Inc.\r
+ P.O Box 8102\r
+ Reno NV 89507\r
+ US\r
+\r
+08-38-69 (hex) Hong Kong AMobile Intelligent Corp. Limited Taiwan Branch\r
+083869 (base 16) Hong Kong AMobile Intelligent Corp. Limited Taiwan Branch\r
+ 8F.-1, No.700, Zhongzheng Rd., Zhonghe Dist.\r
+ New Taipei City 235 23552\r
+ TW\r
+\r
+D8-9E-D4 (hex) Fiberhome Telecommunication Technologies Co.,LTD\r
+D89ED4 (base 16) Fiberhome Telecommunication Technologies Co.,LTD\r
+ No.5 DongXin Road\r
+ Wuhan Hubei 430074\r
+ CN\r
+\r
+84-03-28 (hex) Juniper Networks\r
+840328 (base 16) Juniper Networks\r
+ 1133 Innovation Way\r
+ Sunnyvale CA 94089\r
+ US\r
+\r
+08-9B-B9 (hex) Nokia\r
+089BB9 (base 16) Nokia\r
+ Karaportti 3\r
+ Espoo Finland 02610\r
+ FI\r
+\r
+00-1C-FC (hex) Sumitomo Electric Industries, Ltd\r
+001CFC (base 16) Sumitomo Electric Industries, Ltd\r
+ 1-1-3, Shimaya, Konohana-ku\r
+ Osaka 554-0024\r
+ JP\r
+\r
+00-16-36 (hex) Quanta Computer Inc.\r
+001636 (base 16) Quanta Computer Inc.\r
+ No. 211, Wen Hwa 2Rd., Kuei Shan Hsiang\r
+ Tao Yuan Shien 0000\r
+ TW\r
+\r
+54-F1-5F (hex) Sichuan AI-Link Technology Co., Ltd.\r
+54F15F (base 16) Sichuan AI-Link Technology Co., Ltd.\r
+ Anzhou, Industrial Park\r
+ Mianyang Sichuan 622650\r
+ CN\r
+\r
+E0-79-C4 (hex) iRay Technology Company Limited\r
+E079C4 (base 16) iRay Technology Company Limited\r
+ Building 45, No. 1000, Jinhai RD., Pudong New Area\r
+ Shanghai 201206\r
+ CN\r
+\r
+88-40-67 (hex) infomark\r
+884067 (base 16) infomark\r
+ 3F. Humaxvillage, 216 Hwangsaeul-ro\r
+ Seongnam-si 13595\r
+ KR\r
+\r
+AC-95-72 (hex) Jovision Technology Co., Ltd.\r
+AC9572 (base 16) Jovision Technology Co., Ltd.\r
+ Floor 12, Building 3, Aosheng Square, No.1166 Xinluo Street\r
+ Jinan Shandong 250101\r
+ CN\r
+\r
+40-D2-5F (hex) ITEL MOBILE LIMITED\r
+40D25F (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
+A8-03-2A (hex) Espressif Inc.\r
+A8032A (base 16) Espressif Inc.\r
+ Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+ Shanghai Shanghai 201203\r
+ CN\r
+\r
+00-19-F5 (hex) Imagination Technologies Ltd\r
+0019F5 (base 16) Imagination Technologies Ltd\r
+ Home Park Estate\r
+ Kings Langley Hertfordshire WD4 8LZ\r
+ GB\r
+\r
+00-CB-BD (hex) Cambridge Broadband Networks Group\r
+00CBBD (base 16) Cambridge Broadband Networks Group\r
+ 1 Hammersmith Broadway\r
+ London W6 9DL\r
+ GB\r
+\r
+58-94-A2 (hex) KETEK GmbH\r
+5894A2 (base 16) KETEK GmbH\r
+ Hofer Str. 3\r
+ München 81737\r
+ DE\r
+\r
+4C-22-19 (hex) YUANFUDAO HK LIMTED\r
+4C2219 (base 16) YUANFUDAO HK LIMTED\r
+ Building C, global creative center, No. 10, Furong street\r
+ Beijing 100102\r
+ CN\r
+\r
+54-D9-C6 (hex) Huawei Device Co., Ltd.\r
+54D9C6 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+30-8A-F7 (hex) Huawei Device Co., Ltd.\r
+308AF7 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+64-E7-D8 (hex) Samsung Electronics Co.,Ltd\r
+64E7D8 (base 16) Samsung Electronics Co.,Ltd\r
+ 129, Samsung-ro, Youngtongl-Gu\r
+ Suwon Gyeonggi-Do 16677\r
+ KR\r
+\r
+D8-EF-42 (hex) Huawei Device Co., Ltd.\r
+D8EF42 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+80-CC-12 (hex) Huawei Device Co., Ltd.\r
+80CC12 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+18-AA-0F (hex) Huawei Device Co., Ltd.\r
+18AA0F (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+B0-A4-60 (hex) Intel Corporate\r
+B0A460 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+AC-9A-96 (hex) Maxlinear, Inc\r
+AC9A96 (base 16) Maxlinear, Inc\r
+ Am Campeon 3\r
+ Neubiberg Bavaria 85579\r
+ DE\r
+\r
+8C-70-86 (hex) Gesellschaft für Sonder-EDV-Anlagen mbH\r
+8C7086 (base 16) Gesellschaft für Sonder-EDV-Anlagen mbH\r
+ Lorsbacher Straße 31\r
+ Hofheim 65719\r
+ DE\r
+\r
+1C-28-AF (hex) Aruba, a Hewlett Packard Enterprise Company\r
+1C28AF (base 16) Aruba, a Hewlett Packard Enterprise Company\r
+ 3333 Scott Blvd\r
+ Santa Clara CA 95054\r
+ US\r
+\r
+E4-24-6C (hex) Zhejiang Dahua Technology Co., Ltd.\r
+E4246C (base 16) Zhejiang Dahua Technology Co., Ltd.\r
+ No.1199,Waterfront Road \r
+ Hangzhou Zhejiang 310053\r
+ CN\r
+\r
+E8-EB-1B (hex) Microchip Technology Inc.\r
+E8EB1B (base 16) Microchip Technology Inc.\r
+ 2355 W. Chandler Blvd.\r
+ Chandler AZ 85224\r
+ US\r
+\r
+84-02-83 (hex) HUMAX Co., Ltd.\r
+840283 (base 16) HUMAX Co., Ltd.\r
+ HUMAX Village, 216, Hwangsaeul-ro, Bu\r
+ Seongnam-si Gyeonggi-do 463-875\r
+ KR\r
+\r
+94-17-00 (hex) Xiaomi Communications Co Ltd\r
+941700 (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
+68-D6-ED (hex) GooWi Wireless Technology Co., Limited\r
+68D6ED (base 16) GooWi Wireless Technology Co., Limited\r
+ RM402 Building212, Tairan Technology Park, Futian District\r
+ Shenzhen Guangdong 518000\r
+ CN\r
+\r
+00-E4-06 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+00E406 (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
+44-22-7C (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+44227C (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-B1-82 (hex) HUAWEI TECHNOLOGIES CO.,LTD\r
+CCB182 (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-90-2F (hex) LG Electronics (Mobile Communications)\r
+48902F (base 16) LG Electronics (Mobile Communications)\r
+ 60-39, Gasan-dong, Geumcheon-gu\r
+ Seoul 153-801\r
+ KR\r
+\r
+28-B7-7C (hex) IEEE Registration Authority\r
+28B77C (base 16) IEEE Registration Authority\r
+ 445 Hoes Lane\r
+ Piscataway NJ 08554\r
+ US\r
+\r
+28-C2-1F (hex) SAMSUNG ELECTRO-MECHANICS(THAILAND)\r
+28C21F (base 16) SAMSUNG ELECTRO-MECHANICS(THAILAND)\r
+ 93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE\r
+ Bangpakong Chachoengsao 24180\r
+ TH\r
+\r
+5C-7D-7D (hex) Technicolor CH USA Inc.\r
+5C7D7D (base 16) Technicolor CH USA Inc.\r
+ 5030 Sugarloaf Parkway Bldg 6 \r
+ Lawrenceville GA 30044\r
+ US\r
+\r
+B0-7D-64 (hex) Intel Corporate\r
+B07D64 (base 16) Intel Corporate\r
+ Lot 8, Jalan Hi-Tech 2/3 \r
+ Kulim Kedah 09000\r
+ MY\r
+\r
+F4-BF-A8 (hex) Juniper Networks\r
+F4BFA8 (base 16) Juniper Networks\r
+ 1133 Innovation Way\r
+ Sunnyvale CA 94089\r
+ US\r
+\r
+C0-61-9A (hex) IEEE Registration Authority\r
+C0619A (base 16) IEEE Registration Authority\r
445 Hoes Lane\r
Piscataway NJ 08554\r
US\r
+\r
+70-61-EE (hex) Sunwoda Electronic Co.,Ltd\r
+7061EE (base 16) Sunwoda Electronic Co.,Ltd\r
+ No 2,Yihe Road, shiyan Street?shilong Community ,Baoan District\r
+ Shenzhen 518105\r
+ CN\r
+\r
+40-06-34 (hex) Huawei Device Co., Ltd.\r
+400634 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+C4-2B-44 (hex) Huawei Device Co., Ltd.\r
+C42B44 (base 16) Huawei Device Co., Ltd.\r
+ No.2 of Xincheng Road, Songshan Lake Zone\r
+ Dongguan Guangdong 523808\r
+ CN\r
+\r
+F8-A2-6D (hex) CANON INC.\r
+F8A26D (base 16) CANON INC.\r
+ 30-2 Shimomaruko 3-chome,\r
+ Ohta-ku Tokyo 146-8501\r
+ JP\r
Leicester Leicestershire LE19 1TP\r
GB\r
\r
-D0-D9-4F (hex) Private\r
-700000-7FFFFF (base 16) Private\r
-\r
D4-7C-44 (hex) SHENZHEN ANYSEC TECHNOLOGY CO. LTD\r
E00000-EFFFFF (base 16) SHENZHEN ANYSEC TECHNOLOGY CO. LTD\r
601, 1 BUILDING,MeiLin Dolly Industrial Zone,Futian District\r
Shenzhen Guangdong 518000\r
CN\r
\r
-AC-1D-DF (hex) Fine Inc.\r
-B00000-BFFFFF (base 16) Fine Inc.\r
- Rm 2208, U-Tower, 120 HeungDeok JungAng-ro, GiHeung-Gu\r
- YongIn-si Gyeonggi-do 16950\r
- KR\r
-\r
AC-1D-DF (hex) Elekon AG\r
D00000-DFFFFF (base 16) Elekon AG\r
Cheerstrasse 16\r
Barbengo Ticino 6917\r
CH\r
\r
-9C-43-1E (hex) Midas Technology, Inc. dba Stem Audio / Phoenix Au\r
-E00000-EFFFFF (base 16) Midas Technology, Inc. dba Stem Audio / Phoenix Au\r
- 2552 White Road, Suite A\r
- Irvine CA 92614\r
- US\r
-\r
E8-B4-70 (hex) YAWATA ELECTRIC INDUSTRIAL CO.,LTD.\r
400000-4FFFFF (base 16) YAWATA ELECTRIC INDUSTRIAL CO.,LTD.\r
1-17-1 Ohmorihigashi\r
Shanghai 201702\r
CN\r
\r
-94-FB-A7 (hex) Creotech Instruments S.A.\r
-D00000-DFFFFF (base 16) Creotech Instruments S.A.\r
- ul. Gen. L. Okulickiego 7/9\r
- Piaseczno Mazovia 05-500\r
- PL\r
+94-FB-A7 (hex) UOI TECHNOLOGY CORPORATION\r
+400000-4FFFFF (base 16) UOI TECHNOLOGY CORPORATION\r
+ 1F., No. 50, Ln. 148, Lide St.\r
+ Zhonghe Dist. New Taipei City 23512\r
+ TW\r
+\r
+94-FB-A7 (hex) Reichert Inc.\r
+000000-0FFFFF (base 16) Reichert Inc.\r
+ 3362 Walden Ave\r
+ Depew NY 14043\r
+ US\r
+\r
+38-F7-CD (hex) VANGUARD\r
+300000-3FFFFF (base 16) VANGUARD\r
+ 1st Floor 3 Moore \r
+ London SE1 2RE\r
+ GB\r
+\r
+38-F7-CD (hex) RIPower Co.,Ltd\r
+200000-2FFFFF (base 16) RIPower Co.,Ltd\r
+ 3F,1,Bongeunsa-ro 44-gil, Gangnam-gu\r
+ Seoul 06143\r
+ KR\r
+\r
+38-F7-CD (hex) Fibergate Inc.\r
+B00000-BFFFFF (base 16) Fibergate Inc.\r
+ KDX Shibadaimon.Bld 2F 2-10-12 Shibadaimon\r
+ Tokyo Minato-ku 1050012\r
+ JP\r
+\r
+38-F7-CD (hex) Fast Cotton(Beijing) Limited\r
+600000-6FFFFF (base 16) Fast Cotton(Beijing) Limited\r
+ Fast Cotton(Beijing)Limited\r
+ Beijing Beijing 100037\r
+ CN\r
+\r
+9C-43-1E (hex) Phoenix Audio Technologies\r
+E00000-EFFFFF (base 16) Phoenix Audio Technologies\r
+ 2552 White Road, Suite A\r
+ Irvine CA 92614\r
+ US\r
+\r
+70-69-79 (hex) Rivian Automotive LLC\r
+C00000-CFFFFF (base 16) Rivian Automotive LLC\r
+ 13250 N. Haggerty Road\r
+ Plymouth MI 48170\r
+ US\r
+\r
+70-69-79 (hex) Foxconn Brasil Industria e Comercio Ltda\r
+A00000-AFFFFF (base 16) Foxconn Brasil Industria e Comercio Ltda\r
+ Av. Marginal da Rodovia dos Bandeirantes, 800 - Distrito Industrial\r
+ Jundiaí Sao Paulo 13213-008\r
+ BR\r
+\r
+70-69-79 (hex) SelectTech GeoSpatial, LLC\r
+400000-4FFFFF (base 16) SelectTech GeoSpatial, LLC\r
+ 8045 Washington Village Dr.\r
+ Centerville OH 45458\r
+ US\r
+\r
+F0-D7-AF (hex) 720?bei jing?Health iTech Co.,Ltd\r
+300000-3FFFFF (base 16) 720?bei jing?Health iTech Co.,Ltd\r
+ Room 9001, D Building, Kangjianbaosheng Plaza, No.8 Heiquan Road, Haidian District, Beijing\r
+ bei jing 100085\r
+ CN\r
+\r
+F0-D7-AF (hex) EVCO SPA\r
+B00000-BFFFFF (base 16) EVCO SPA\r
+ VIA FELTRE N. 81\r
+ SEDICO BELLUNO 32036\r
+ IT\r
+\r
+AC-1D-DF (hex) FINEpowerX INC\r
+B00000-BFFFFF (base 16) FINEpowerX INC\r
+ Rm 2208, U-Tower, 120 HeungDeok JungAng-ro, GiHeung-Gu\r
+ YongIn-si Gyeonggi-do 16950\r
+ KR\r
+\r
+F0-D7-AF (hex) Shenzhen Virtual Clusters Information Technology Co.,Ltd.\r
+C00000-CFFFFF (base 16) Shenzhen Virtual Clusters Information Technology Co.,Ltd.\r
+ Room 201,Building A,No.1,Qianhai 1st Road,Shengang cooperation zone,Qianhai\r
+ Shenzhen 518054\r
+ CN\r
+\r
+F0-D7-AF (hex) Rievtech Electronic Co.,Ltd \r
+700000-7FFFFF (base 16) Rievtech Electronic Co.,Ltd \r
+ Room 505, Building A, No.88,Dazhou Road,Tiexinqiao,Yu huatai District, Nanjing City, Jiangsu Province,P.R.China +0086 25 52895099 52890138 info@rievtech.com sales@rievtech.com\r
+ Nanjing City Jiangsu Province 210000\r
+ CN\r
+\r
+30-49-50 (hex) ATLI WORLD LIMITED\r
+100000-1FFFFF (base 16) ATLI WORLD LIMITED\r
+ 306 Beverley Commercial Center, 87-105 Chatham Road, TST,\r
+ Kowloon Hong Kong 852\r
+ HK\r
+\r
+30-49-50 (hex) Ledworks SRL\r
+A00000-AFFFFF (base 16) Ledworks SRL\r
+ Via Tortona 37\r
+ Milano Milano 20144\r
+ IT\r
+\r
+30-49-50 (hex) Sercomm Corporation.\r
+200000-2FFFFF (base 16) Sercomm Corporation.\r
+ 3F,No.81,Yu-Yih Rd.,Chu-Nan Chen\r
+ Miao-Lih Hsuan 115\r
+ TW\r
+\r
+30-49-50 (hex) Anacove LLC\r
+C00000-CFFFFF (base 16) Anacove LLC\r
+ 7856 Revelle drive\r
+ LA JOLLA CA 92037\r
+ US\r
+\r
+D0-14-11 (hex) powerall\r
+400000-4FFFFF (base 16) powerall\r
+ 75,Ojeong-ro,Bucheon-si,Gyeonggi-do,Republic of korea\r
+ Gyeonggi-do province 14445\r
+ KR\r
+\r
+D0-14-11 (hex) CYLTek Co.,LTD.\r
+B00000-BFFFFF (base 16) CYLTek Co.,LTD.\r
+ R603,6F.,NO.168,Sec.2,Fuxing 3rd.Rd.\r
+ Zhubei City,Hsinchu County 30273\r
+ TW\r
+\r
+D0-14-11 (hex) ABB EVI SPA\r
+A00000-AFFFFF (base 16) ABB EVI SPA\r
+ VIA DI SAN GIORGIO, 642\r
+ TERRANUOVA BRACCIOLINI AREZZO 52028\r
+ IT\r
+\r
+D0-D9-4F (hex) Mitsubishi Electric US, Inc.\r
+700000-7FFFFF (base 16) Mitsubishi Electric US, Inc.\r
+ 1340 Satellite Boulevard\r
+ Suwanee GA 30345\r
+ US\r
+\r
+D0-14-11 (hex) Airthings\r
+900000-9FFFFF (base 16) Airthings\r
+ Wergelandsveien 7\r
+ Oslo 0167\r
+ NO\r
+\r
+5C-85-7E (hex) Shenzhen IP3 Century Intelligent Technology CO.,Ltd\r
+400000-4FFFFF (base 16) Shenzhen IP3 Century Intelligent Technology CO.,Ltd\r
+ aiying.li@ip3-tech.com\r
+ Shenzhen 518057\r
+ CN\r
+\r
+5C-85-7E (hex) Shanghai Yanhe automation technology co.,LTD\r
+500000-5FFFFF (base 16) Shanghai Yanhe automation technology co.,LTD\r
+ Room E2204, Building 1, 5500 Yuan Jiang Road, MinHang District\r
+ ShangHai 201100\r
+ CN\r
+\r
+F4-69-D5 (hex) ShenZhenShi EVADA technology Co.,Ltd\r
+A00000-AFFFFF (base 16) ShenZhenShi EVADA technology Co.,Ltd\r
+ Qianhai,No.1 qianwan Road\r
+ ShenZhen Guangdong 518000\r
+ CN\r
+\r
+F4-69-D5 (hex) Mossman Limited\r
+000000-0FFFFF (base 16) Mossman Limited\r
+ 1014, 10/F, Leader Industrial Building,\r
+ 57-59 Au Pui Wan Street, Fotan, Shatin Hong Kong NT\r
+ HK\r
+\r
+5C-85-7E (hex) ProdataKey\r
+600000-6FFFFF (base 16) ProdataKey\r
+ 67 W 13490 S\r
+ Draper UT 84020\r
+ US\r
+\r
+F4-69-D5 (hex) Huaqin Telecom Technology Co.,Ltd.\r
+C00000-CFFFFF (base 16) Huaqin Telecom Technology Co.,Ltd.\r
+ Building 1,No.399, Keyuan Road, Pudong, Shanghai China\r
+ Shanghai 200120\r
+ CN\r
+\r
+F4-69-D5 (hex) Pulsar Engineering srl\r
+200000-2FFFFF (base 16) Pulsar Engineering srl\r
+ Via Giuseppe Caimi\r
+ Milano MI 20136\r
+ IT\r
+\r
+F4-69-D5 (hex) Rosco, Inc\r
+700000-7FFFFF (base 16) Rosco, Inc\r
+ 90-21 144th Place\r
+ Jamaica NY 11435\r
+ US\r
+\r
+4C-93-A6 (hex) 4D Sistem Ticaret A.S.\r
+400000-4FFFFF (base 16) 4D Sistem Ticaret A.S.\r
+ Oran Mah. Turan Gunes Bul. Park Oran Ofis 180-Y No:6 Cankaya \r
+ ANKARA 06550\r
+ TR\r
+\r
+4C-93-A6 (hex) Private\r
+500000-5FFFFF (base 16) Private\r
+\r
+4C-93-A6 (hex) Diehl Controls Nanjing Co., Ltd.\r
+200000-2FFFFF (base 16) Diehl Controls Nanjing Co., Ltd.\r
+ Jiangjun Avenue 139\r
+ Nanjing Jiangsu 211100\r
+ CN\r
+\r
+28-B7-7C (hex) Shenzhen PUAS Industrial Co.,LTD\r
+800000-8FFFFF (base 16) Shenzhen PUAS Industrial Co.,LTD\r
+ 2/F, C/Building, Huawang Industrial Park, LongHua New Area In Shenzhen 518106 P.R.C\r
+ Shenzhen Guangdong 518106\r
+ CN\r
+\r
+4C-93-A6 (hex) Commsignia, Ltd.\r
+300000-3FFFFF (base 16) Commsignia, Ltd.\r
+ Irinyi Jozsef u 4-20\r
+ Budapest 1117\r
+ HU\r
+\r
+28-B7-7C (hex) SolarEdge Technologies\r
+100000-1FFFFF (base 16) SolarEdge Technologies\r
+ 1 Abba Eban St.\r
+ Herzelia 46725\r
+ IL\r
+\r
+C0-61-9A (hex) Nanjing Balance Network Technology Co., Ltd\r
+500000-5FFFFF (base 16) Nanjing Balance Network Technology Co., Ltd\r
+ 9-10/F,building 01, No.8,Bailongjiang East Street,Jianye District\r
+ Nanjing Jiangsu 210017\r
+ CN\r
+\r
+C0-61-9A (hex) MAD PIECE LLC.\r
+700000-7FFFFF (base 16) MAD PIECE LLC.\r
+ 2196 flatbush ave.\r
+ BROOKLYN NY 11234\r
+ US\r
+\r
+C0-61-9A (hex) Uhnder\r
+D00000-DFFFFF (base 16) Uhnder\r
+ 3409 Executive Center Drive Ste205\r
+ Austin TX 78731\r
+ US\r
\r
4C-4B-F9 (hex) Shenzhen dingsheng technology co., LTD\r
400000-4FFFFF (base 16) Shenzhen dingsheng technology co., LTD\r
Panama Panama 33131\r
PA\r
\r
-24-15-10 (hex) Private\r
-800000-8FFFFF (base 16) Private\r
-\r
24-15-10 (hex) SMaBiT GmbH\r
100000-1FFFFF (base 16) SMaBiT GmbH\r
Friedrichstrasse 95\r
Bedford MA 01730\r
US\r
\r
+94-FB-A7 (hex) Sercomm Corporation.\r
+600000-6FFFFF (base 16) Sercomm Corporation.\r
+ 3F,No.81,Yu-Yih Rd.,Chu-Nan Chen\r
+ Miao-Lih Hsuan 115\r
+ TW\r
+\r
+94-FB-A7 (hex) GUANG DONG TAKSTAR ELECTRONIC CO.,LTD.\r
+300000-3FFFFF (base 16) GUANG DONG TAKSTAR ELECTRONIC CO.,LTD.\r
+ Dinggang,Group 5, Xialiao Village,Longxi Town, Boluo County\r
+ Huizhou City Guangdong 516121\r
+ CN\r
+\r
+94-FB-A7 (hex) Solaborate Inc.\r
+C00000-CFFFFF (base 16) Solaborate Inc.\r
+ #283 - 8300 Utica Ave\r
+ Rancho Cucamonga CA 91730\r
+ US\r
+\r
+94-FB-A7 (hex) CAVITY EYE\r
+500000-5FFFFF (base 16) CAVITY EYE\r
+ Ébner György köz 4.\r
+ Budaörs 2040\r
+ HU\r
+\r
+94-FB-A7 (hex) Shenzhen Golden Star Technology Ltd\r
+B00000-BFFFFF (base 16) Shenzhen Golden Star Technology Ltd\r
+ Rm.622,building B,MingYou Industrial products Exhibition&Procurement center, Baoyuan Road,Xixiang,Bao’an District,\r
+ Shenzhen Guangdong 518000\r
+ CN\r
+\r
+38-F7-CD (hex) NZIA Connect Inc\r
+100000-1FFFFF (base 16) NZIA Connect Inc\r
+ 1109 ho, Bupyeong tech city Bld, 293 Bupyeong-daero, Bupyeong-gu\r
+ Incheon 21315\r
+ KR\r
+\r
+94-FB-A7 (hex) Anvil Systems Group, Inc.\r
+700000-7FFFFF (base 16) Anvil Systems Group, Inc.\r
+ 8211 Terminal Road, Suite 1900\r
+ Lorton VA 22079\r
+ US\r
+\r
+38-F7-CD (hex) Distech Controls\r
+A00000-AFFFFF (base 16) Distech Controls\r
+ 4205 place de Java\r
+ Brossard QC J4Y 0C4\r
+ CA\r
+\r
+70-69-79 (hex) Graphcore Ltd\r
+200000-2FFFFF (base 16) Graphcore Ltd\r
+ 11-19 Wine Street\r
+ Bristol BS1 2PH\r
+ GB\r
+\r
+CC-C2-61 (hex) Ability Enterprise Co., Ltd\r
+700000-7FFFFF (base 16) Ability Enterprise Co., Ltd\r
+ No. 200, Sec. 3, Zhonghuan Rd., Xinzhuang Dist., New Taipei City 24242, Taiwan (R.O.C.)\r
+ Taipei 24242\r
+ TW\r
+\r
+CC-C2-61 (hex) EDAG Engineering GmbH\r
+400000-4FFFFF (base 16) EDAG Engineering GmbH\r
+ Dr.- Ludwig-Kraus-Str. 2\r
+ Gaimersheim Bavaria 85080\r
+ DE\r
+\r
+70-69-79 (hex) Hebei Baina Xinda Technology Co., Ltd.\r
+300000-3FFFFF (base 16) Hebei Baina Xinda Technology Co., Ltd.\r
+ Building C, e-commerce Industrial Park, Xianghe robot Town\r
+ Langfang City Hebei Province 065400\r
+ CN\r
+\r
+F0-D7-AF (hex) Dongguan Gedi Electrons Techeology Co.,LTD\r
+D00000-DFFFFF (base 16) Dongguan Gedi Electrons Techeology Co.,LTD\r
+ Dongguan Gedi Electrons Techeology Co.,LTD\r
+ Dongguan Guangdong 523000\r
+ CN\r
+\r
+F0-D7-AF (hex) ID Tech Japan Co.,Ltd.\r
+000000-0FFFFF (base 16) ID Tech Japan Co.,Ltd.\r
+ Matsumura BLDG, 2-2-23,Shibazaki-cho, Tachikawa-shi\r
+ Tokyo Japan 1900023\r
+ JP\r
+\r
+F0-D7-AF (hex) Beijing Serviatech lnformation Tech Co.,Ltd\r
+100000-1FFFFF (base 16) Beijing Serviatech lnformation Tech Co.,Ltd\r
+ Floor?Building17 NO.1A?Chaoqian Rd?Changping?Beijing\r
+ Beijing 102200\r
+ CN\r
+\r
+F0-D7-AF (hex) Wren Associates, LTD\r
+E00000-EFFFFF (base 16) Wren Associates, LTD\r
+ 124 Wren Parkway\r
+ Jefferson City MO 65109-6332\r
+ US\r
+\r
+30-49-50 (hex) HANGZHOU EV-TECH CO.,LTD\r
+B00000-BFFFFF (base 16) HANGZHOU EV-TECH CO.,LTD\r
+ No. 205, Zhenzhong Road, Xihu District\r
+ HANGZHOU ZHEJIANG 310012\r
+ CN\r
+\r
+30-49-50 (hex) Curb, Inc.\r
+600000-6FFFFF (base 16) Curb, Inc.\r
+ 1524 S IH35, Suite 345, Apt 134\r
+ Austin TX 78704\r
+ US\r
+\r
+30-49-50 (hex) Shanghai gatang technology CO.,LTD\r
+900000-9FFFFF (base 16) Shanghai gatang technology CO.,LTD\r
+ Room 507, building 1, No. 2071, Hongmei Road, Xuhui District, \r
+ Shanghai 200030\r
+ CN\r
+\r
+5C-85-7E (hex) Annapurna labs\r
+C00000-CFFFFF (base 16) Annapurna labs\r
+ Matam Scientific Industries Center, Building 8.2\r
+ Mail box 15123 Haifa 3508409\r
+ IL\r
+\r
+5C-85-7E (hex) mobilogix HongKong\r
+200000-2FFFFF (base 16) mobilogix HongKong\r
+ Limited Flat/RM 705A, 7/F, New East Ocean Centre No. 9 Science Museum Road Kowloon\r
+ Hong Kong 000000\r
+ CN\r
+\r
+F4-69-D5 (hex) Terminus (Shanghai) Technology Co.,Ltd.\r
+900000-9FFFFF (base 16) Terminus (Shanghai) Technology Co.,Ltd.\r
+ 17F,building 2,CES west bund center,No.277 longlan road,xuhui,district\r
+ Shanghai 200232\r
+ CN\r
+\r
+4C-93-A6 (hex) Vestaboard, Inc.\r
+000000-0FFFFF (base 16) Vestaboard, Inc.\r
+ 1777 Yosemite Avenue STE 220\r
+ San Francisco CA 94124\r
+ US\r
+\r
+4C-93-A6 (hex) Sercomm Corporation.\r
+800000-8FFFFF (base 16) Sercomm Corporation.\r
+ 3F,No.81,Yu-Yih Rd.,Chu-Nan Chen\r
+ Miao-Lih Hsuan 115\r
+ TW\r
+\r
+4C-93-A6 (hex) 5Voxel Co., Ltd.\r
+700000-7FFFFF (base 16) 5Voxel Co., Ltd.\r
+ 6F-2, No.273, Nong-an St.\r
+ Taipei City 10482\r
+ TW\r
+\r
+24-15-10 (hex) Medicomp, Inc\r
+800000-8FFFFF (base 16) Medicomp, Inc\r
+ \r
+ \r
+ \r
+\r
+28-B7-7C (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
+28-B7-7C (hex) Zhuhai RongBang Electronic Technology Co., Ltd.\r
+200000-2FFFFF (base 16) Zhuhai RongBang Electronic Technology Co., Ltd.\r
+ Room 110-400(central office) , building 18, Creative Valley, 1889 Huandao East road, Hengqin New District,\r
+ Zhuhai GuangDong 519000\r
+ CN\r
+\r
+4C-93-A6 (hex) Shandong Senter Electronic Co., Ltd\r
+600000-6FFFFF (base 16) Shandong Senter Electronic Co., Ltd\r
+ No. 18 Liuyishan Road, New&High-tech area\r
+ Zibo Shandong 255086\r
+ CN\r
+\r
+4C-93-A6 (hex) CELLTRON\r
+E00000-EFFFFF (base 16) CELLTRON\r
+ #601 L&C TOWER, 153-18 LS-ro,Sanbon\r
+ Gunpo Gyeonggi 15808\r
+ KR\r
+\r
+28-B7-7C (hex) Convertertec Deutschland GmbH\r
+700000-7FFFFF (base 16) Convertertec Deutschland GmbH\r
+ Krefelder Weg 47\r
+ Kempen 47906\r
+ DE\r
+\r
+C0-61-9A (hex) Wingtech Mobile Communications Co.,Ltd.\r
+900000-9FFFFF (base 16) Wingtech Mobile Communications Co.,Ltd.\r
+ No.777,Yazhong Road,Nanhu District\r
+ Jiaxing Zhejiang 314001\r
+ CN\r
+\r
+C0-61-9A (hex) Nanjing SinoVatio Technology Co., Ltd\r
+800000-8FFFFF (base 16) Nanjing SinoVatio Technology Co., Ltd\r
+ No. 888 Zhengfang Middle Rd, Jiangning District\r
+ Nanjing JiangSu 211153\r
+ CN\r
+\r
+C0-61-9A (hex) Gronn Kontakt AS\r
+A00000-AFFFFF (base 16) Gronn Kontakt AS\r
+ Kjøita 18\r
+ Kristiansand 4630\r
+ NO\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
Bolzano bz 39100\r
IT\r
\r
+70-69-79 (hex) Linksys Telecom Shenzhen CO., LTD\r
+100000-1FFFFF (base 16) Linksys Telecom Shenzhen CO., LTD\r
+ RoomC303-A, Number 2223 road Banxuegang Xinweizai Gangtou Community Bantian street\r
+ Longgang Township Guangdong 514349\r
+ CN\r
+\r
+70-69-79 (hex) FREUND ELEKTRONIKA D.O.O., IP-INTEGRA TECHNOLOGIES\r
+D00000-DFFFFF (base 16) FREUND ELEKTRONIKA D.O.O., IP-INTEGRA TECHNOLOGIES\r
+ HAMDIJE KRESEVLJAKOVICA 18\r
+ SARAJEVO 71000\r
+ BA\r
+\r
+38-F7-CD (hex) APT MOBILE SATCOM LIMITED\r
+E00000-EFFFFF (base 16) APT MOBILE SATCOM LIMITED\r
+ 18th Floor, Building C, Shenye U Center, Zhoushi Road, Baoan District\r
+ Shenzhen Guangdong 518000\r
+ CN\r
+\r
+CC-C2-61 (hex) Nortek Security & Control\r
+C00000-CFFFFF (base 16) Nortek Security & Control\r
+ 5919 Sea Otter Place\r
+ Carlsbad CA 92010\r
+ US\r
+\r
+CC-C2-61 (hex) Guardiar USA\r
+600000-6FFFFF (base 16) Guardiar USA\r
+ 3309 S Kaufman St\r
+ Ennis TX 75119\r
+ US\r
+\r
+CC-C2-61 (hex) NWL Inc.\r
+100000-1FFFFF (base 16) NWL Inc.\r
+ 312 Rising Sun Road\r
+ Bordentown NJ 08505\r
+ US\r
+\r
+CC-C2-61 (hex) Winterthur Gas & Diesel Ltd.\r
+B00000-BFFFFF (base 16) Winterthur Gas & Diesel Ltd.\r
+ Schützenstrasse 3\r
+ Winterthur 8401\r
+ CH\r
+\r
+CC-C2-61 (hex) NETRADYNE, INC.\r
+300000-3FFFFF (base 16) NETRADYNE, INC.\r
+ 9191 TOWNE CENTRE DR STE 200\r
+ SAN DIEGO CA 92122\r
+ US\r
+\r
+F0-D7-AF (hex) New IT Project LLC\r
+900000-9FFFFF (base 16) New IT Project LLC\r
+ Nagatinskaya St. 16, bld. 9, space VII, room 15, office 5\r
+ Moscow 115487\r
+ RU\r
+\r
+F0-D7-AF (hex) Dongguan Huili electroacoustic Industrial Co.,ltd\r
+500000-5FFFFF (base 16) Dongguan Huili electroacoustic Industrial Co.,ltd\r
+ Dalang Town, Biyun Cai Bai Cun East Second Street 66,A4 Building 501\r
+ Dongguan Guangdong 523770\r
+ CN\r
+\r
+F0-D7-AF (hex) Blacknight Internet Solutions Limited\r
+200000-2FFFFF (base 16) Blacknight Internet Solutions Limited\r
+ Unit 12a, Barrowside Business Park, Sleaty Rd.\r
+ Carlow Carlow R93 X265\r
+ IE\r
+\r
+F0-D7-AF (hex) MSTAR TECHNOLOGIES,INC\r
+A00000-AFFFFF (base 16) MSTAR TECHNOLOGIES,INC\r
+ #998 West Wenyi Road\r
+ Hangzhou Zhejiang 310012\r
+ CN\r
+\r
+30-49-50 (hex) SHENZHEN LDROBOT CO., LTD.\r
+800000-8FFFFF (base 16) SHENZHEN LDROBOT CO., LTD.\r
+ Nanshan\r
+ Shenzhen 518000\r
+ CN\r
+\r
+D0-14-11 (hex) Video Security, Inc.\r
+800000-8FFFFF (base 16) Video Security, Inc.\r
+ No. 59, Cinghua St. San Min Dist.\r
+ Kaohsiung, Taiwan, R.O.C. Kaohsiung City 807\r
+ TW\r
+\r
+30-49-50 (hex) Xio Research, Inc\r
+D00000-DFFFFF (base 16) Xio Research, Inc\r
+ 405 Lexington Avenue, Suite 3504\r
+ New York NY 10174\r
+ US\r
+\r
+D0-14-11 (hex) Realwave Inc.\r
+700000-7FFFFF (base 16) Realwave Inc.\r
+ 5857 Owens Avenue, Suite 300\r
+ Carlsbad CA 92008-5507\r
+ US\r
+\r
+5C-85-7E (hex) HHCC Plant Technology Co., Ltd.\r
+B00000-BFFFFF (base 16) HHCC Plant Technology Co., Ltd.\r
+ RM626, 6th Floor, Zhongguoleshili,’,#35 Xiaoyun Road, Chaoyang District,Beijing, China\r
+ Beijing Beijing 100028\r
+ CN\r
+\r
+D0-14-11 (hex) Tecnosoft srl\r
+E00000-EFFFFF (base 16) Tecnosoft srl\r
+ via Galvani, 4\r
+ Peschiera Borromeo Milan 20068\r
+ IT\r
+\r
+D0-14-11 (hex) iLOQ Oy\r
+300000-3FFFFF (base 16) iLOQ Oy\r
+ Yrttipellontie 10\r
+ Oulu EMEA 90230\r
+ FI\r
+\r
+5C-85-7E (hex) 28 Gorilla\r
+000000-0FFFFF (base 16) 28 Gorilla\r
+ 12 S San Marcos Pl\r
+ Chandler AZ 85225\r
+ US\r
+\r
+5C-85-7E (hex) BeiJing Xinsheng Technology Co.,Ltd\r
+800000-8FFFFF (base 16) BeiJing Xinsheng Technology Co.,Ltd\r
+ 1-1827, East (LIANHANG building), chaichangtun village, Yongledian Town, Tongzhou District\r
+ BeiJing BeiJing 250100\r
+ CN\r
+\r
+F4-69-D5 (hex) Konntek Inc\r
+B00000-BFFFFF (base 16) Konntek Inc\r
+ 3600 F-X Tessier, Unit #H\r
+ Vaudreuil Quebec J7V 5V5\r
+ CA\r
+\r
+F4-69-D5 (hex) Hefei STAROT Technology Co.,Ltd\r
+500000-5FFFFF (base 16) Hefei STAROT Technology Co.,Ltd\r
+ 406, 4th Floor, Quality Control Building, Saipu Science Park, No. 6 Yunfei Road, High-tech Zone\r
+ hefei anhui 230000\r
+ CN\r
+\r
+F4-69-D5 (hex) ORtek Technology, Inc.\r
+E00000-EFFFFF (base 16) ORtek Technology, Inc.\r
+ 13F, no.150, Jian-Yi Rd., ZhongHe Dist.\r
+ New Taipei City Taiwan 23511\r
+ TW\r
+\r
+F4-69-D5 (hex) TianJin KCHT Information Technology Co., Ltd.\r
+600000-6FFFFF (base 16) TianJin KCHT Information Technology Co., Ltd.\r
+ 1704 Huicheng Technology Building, No. 65 Pioneer Road, Dongli District\r
+ Tianjin 300000\r
+ CN\r
+\r
+4C-93-A6 (hex) Felten Electronics\r
+B00000-BFFFFF (base 16) Felten Electronics\r
+ Wilhelmstrasse 43\r
+ Aachen NRW 52070\r
+ DE\r
+\r
+4C-93-A6 (hex) Advantics\r
+900000-9FFFFF (base 16) Advantics\r
+ 55C Rue Auguste Piccard\r
+ Saint-Genis-Pouilly 01630\r
+ FR\r
+\r
+28-B7-7C (hex) SHENZHEN EVIEW GPS TECHNOLOGY\r
+000000-0FFFFF (base 16) SHENZHEN EVIEW GPS TECHNOLOGY\r
+ Rm 201, building 1-A, Nankechuang Industrial Park, Gaofeng Road, Longhua district\r
+ Shenzhen Guangdong 518109\r
+ CN\r
+\r
+28-B7-7C (hex) Beijing Kitten&Puppy Technology Co.,Ltd.\r
+300000-3FFFFF (base 16) Beijing Kitten&Puppy Technology Co.,Ltd.\r
+ Room Q-101? Floor 2?Q Area, Anningzhuang Back Street?Haidian District\r
+ Beijing 100096\r
+ CN\r
+\r
+28-B7-7C (hex) Simaudio Ltd\r
+A00000-AFFFFF (base 16) Simaudio Ltd\r
+ 1345 rue Newton\r
+ Boucherville Quebec J4B 5H2\r
+ CA\r
+\r
+28-B7-7C (hex) GROTHE GmbH\r
+500000-5FFFFF (base 16) GROTHE GmbH\r
+ Loehestrasse 22\r
+ Hennef 53773\r
+ DE\r
+\r
+28-B7-7C (hex) Vehant Technologies Pvt Ltd.\r
+B00000-BFFFFF (base 16) Vehant Technologies Pvt Ltd.\r
+ Plot no. 97, Ecotech-12, block-Ecotech -12, Sector-Noida Extension\r
+ Greater Noida Uttar Pradesh 201310\r
+ IN\r
+\r
+C0-61-9A (hex) Stello\r
+400000-4FFFFF (base 16) Stello\r
+ 1041 Rue Parent\r
+ Saint-Bruno-de-Montarville Quebec J3V 6L7\r
+ CA\r
+\r
+C0-61-9A (hex) Grup Arge Enerji ve Kontrol Sistemleri\r
+200000-2FFFFF (base 16) Grup Arge Enerji ve Kontrol Sistemleri\r
+ ?kitelli OSB Mah. YTÜ ?kitelli Teknopark Sok. No:1 / 2B01-2B07-2B08-2B09\r
+ ?stanbul ?STANBUL 34490\r
+ TR\r
+\r
+C0-61-9A (hex) IPG Automotive GmbH\r
+600000-6FFFFF (base 16) IPG Automotive GmbH\r
+ Bannwaldallee 60\r
+ Karlsruhe 76185\r
+ DE\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
Kozy 43-340\r
PL\r
\r
+94-FB-A7 (hex) Beijing Leja Tech co., Ltd.\r
+200000-2FFFFF (base 16) Beijing Leja Tech co., Ltd.\r
+ 5F-Building1, Longyu center East Tower,Longyu Middle street, Changping District\r
+ Beijing Beijing 100000\r
+ CN\r
+\r
+94-FB-A7 (hex) ELKRON \r
+A00000-AFFFFF (base 16) ELKRON \r
+ Via Bologna 188/C\r
+ TURIN ITALY 10154\r
+ IT\r
+\r
+38-F7-CD (hex) ARUNAS PTY LTD\r
+700000-7FFFFF (base 16) ARUNAS PTY LTD\r
+ Freedom Taxation Building, 1 Ransley St\r
+ PENRITH NSW 2750\r
+ AU\r
+\r
+38-F7-CD (hex) Macherey-Nagel GmbH & Co. KG\r
+D00000-DFFFFF (base 16) Macherey-Nagel GmbH & Co. KG\r
+ Neumann-Neander-Str. 6-8\r
+ Düren Deutschland 52355\r
+ DE\r
+\r
+94-FB-A7 (hex) Skyring Smart Technologies(Shenzhen) Co., Ltd.\r
+E00000-EFFFFF (base 16) Skyring Smart Technologies(Shenzhen) Co., Ltd.\r
+ 6F GDC Building, 9Gaoxin Centeral Avenue 3rd, Nanshan District\r
+ Shenzhen Guangdong 518057\r
+ CN\r
+\r
+94-FB-A7 (hex) Inaxsys Security Systems inc.\r
+100000-1FFFFF (base 16) Inaxsys Security Systems inc.\r
+ 11685 Philippe-Panneton\r
+ Montreal Quebec H1E 4M1\r
+ CA\r
+\r
+38-F7-CD (hex) Polska Fabryka Wodomierzy i Ciep?omierzy FILA \r
+000000-0FFFFF (base 16) Polska Fabryka Wodomierzy i Ciep?omierzy FILA \r
+ ?eromskiego 30\r
+ Sztum POMORSKIE 82-400\r
+ PL\r
+\r
+70-69-79 (hex) Liquid Instruments Pty Ltd\r
+B00000-BFFFFF (base 16) Liquid Instruments Pty Ltd\r
+ 243 Northbourne Avenue\r
+ Lynham ACT 2602\r
+ AU\r
+\r
+70-69-79 (hex) An Phat Information Technology Co., Ltd\r
+800000-8FFFFF (base 16) An Phat Information Technology Co., Ltd\r
+ 3C Tran Phu, Ward 4, District 5\r
+ Ho Chi Minh City 70000\r
+ VN\r
+\r
+70-69-79 (hex) Ibyte\r
+500000-5FFFFF (base 16) Ibyte\r
+ Rua Cleia, 460\r
+ Fortaleza Ceara 60863280\r
+ BR\r
+\r
+70-69-79 (hex) BAS-IP LP\r
+E00000-EFFFFF (base 16) BAS-IP LP\r
+ Suite 1, 4 Queen Street\r
+ Edinburgh EH2 1JE\r
+ GB\r
+\r
+70-69-79 (hex) Full Solution Telecom\r
+000000-0FFFFF (base 16) Full Solution Telecom\r
+ Calle 130A #59C-42, Barrio Ciudad Jardin Norte\r
+ Bogota Distrito Capital de Bogota 111111\r
+ CO\r
+\r
+CC-C2-61 (hex) Tecnoideal Srl\r
+200000-2FFFFF (base 16) Tecnoideal Srl\r
+ Via Lea Cazzuoli nr.43\r
+ Mirandola Modena 41037\r
+ IT\r
+\r
+CC-C2-61 (hex) Shenzhen Uyesee Technology Co.,Ltd\r
+A00000-AFFFFF (base 16) Shenzhen Uyesee Technology Co.,Ltd\r
+ 201C, C6 Building, HengFeng Industry Park Hezhou, Baoan District\r
+ shenzhen Guangdong 518102\r
+ CN\r
+\r
+CC-C2-61 (hex) Toong In Electronic Corp.\r
+E00000-EFFFFF (base 16) Toong In Electronic Corp.\r
+ 10F-8, No.738, Chung Cheng Road, Chung Ho Dist,.\r
+ New Taipei City Taiwan 235\r
+ TW\r
+\r
+30-49-50 (hex) Shenzhen iTG robot Co.,Ltd.\r
+700000-7FFFFF (base 16) Shenzhen iTG robot Co.,Ltd.\r
+ 3rd Floor, 5th Floor, No. 5, Elephant Factory Building, Baiyunshan New Village, Tongsheng Community, Dalang Street, Longhua District\r
+ Shenzhen 518109\r
+ CN\r
+\r
+30-49-50 (hex) ADVANCED MICROWAVE ENGINEERING SRL\r
+400000-4FFFFF (base 16) ADVANCED MICROWAVE ENGINEERING SRL\r
+ VIA LUCCA 50/54\r
+ FIRENZE 50142\r
+ IT\r
+\r
+30-49-50 (hex) Morgan Schaffer Inc.\r
+300000-3FFFFF (base 16) Morgan Schaffer Inc.\r
+ 8300 rue St-Patrick bureau 150\r
+ LaSalle Quebec H8N 2H1\r
+ CA\r
+\r
+D0-14-11 (hex) Evoco Labs CO., LTD\r
+200000-2FFFFF (base 16) Evoco Labs CO., LTD\r
+ Room 315, Building 1, No.58 Xiangke Rd, Pudong New Area\r
+ Shanghai Shanghai 201203\r
+ CN\r
+\r
+D0-14-11 (hex) Shen Zhen HaiHe Hi-Tech Co., Ltd\r
+C00000-CFFFFF (base 16) Shen Zhen HaiHe Hi-Tech Co., Ltd\r
+ Bldg 10,Fumin Industrial Zone,Pinghu Subdistrict,Longgang District\r
+ Shen Zhen Guang Dong 518111\r
+ CN\r
+\r
+D0-14-11 (hex) EkkoSense Ltd\r
+000000-0FFFFF (base 16) EkkoSense Ltd\r
+ Sir Colin Campbell Building, UNIP\r
+ Triumph Road, Nottingham UK Mainland NG7 2TU\r
+ GB\r
+\r
+30-49-50 (hex) IK Elektronik GmbH\r
+500000-5FFFFF (base 16) IK Elektronik GmbH\r
+ Friedrichsgruener Str. 11-13\r
+ Muldenhammer 08262\r
+ DE\r
+\r
+D0-14-11 (hex) Private\r
+100000-1FFFFF (base 16) Private\r
+\r
+5C-85-7E (hex) Sichuan C.H Control Technology Co., Ltd.\r
+100000-1FFFFF (base 16) Sichuan C.H Control Technology Co., Ltd.\r
+ 4F,B8,Tianfu Software Park, No. 99, Tianhua 1st Road\r
+ Chengdu Si chuan 610000\r
+ CN\r
+\r
+5C-85-7E (hex) Nautech Electronics Ltd\r
+D00000-DFFFFF (base 16) Nautech Electronics Ltd\r
+ 120 Cryers Road\r
+ East Tamaki Auckland 2013\r
+ NZ\r
+\r
+5C-85-7E (hex) Cable Matters Inc.\r
+300000-3FFFFF (base 16) Cable Matters Inc.\r
+ 153 Northboro Road, Suite 5\r
+ Southborough MA 01772\r
+ US\r
+\r
+5C-85-7E (hex) Zhejiang Jetron Ark Digital Technology Co., Ltd\r
+A00000-AFFFFF (base 16) Zhejiang Jetron Ark Digital Technology Co., Ltd\r
+ Room 12-9, building B (Hongmao building), No. 338, Juxing West Road, Jiangbei District, Ningbo, ZheJiang, China\r
+ Ningbo 315000\r
+ CN\r
+\r
+5C-85-7E (hex) Beijing HZFD Technology Co., Ltd\r
+700000-7FFFFF (base 16) Beijing HZFD Technology Co., Ltd\r
+ Room 502, Tower A, Fangyuan Building, No. 56, South Zhongguancun Street, Haidian District\r
+ Beijing Beiijng 100044\r
+ CN\r
+\r
+F4-69-D5 (hex) Junchuang (Xiamen) Automation Technology Co.,Ltd\r
+100000-1FFFFF (base 16) Junchuang (Xiamen) Automation Technology Co.,Ltd\r
+ Room 705, building a, No. 96, Xiangxing Road, industrial zone, Xiamen Torch High tech Zone\r
+ Xiamen Fujian 361101\r
+ CN\r
+\r
+4C-93-A6 (hex) Wuhan Maiwe communication Co.,Ltd\r
+C00000-CFFFFF (base 16) Wuhan Maiwe communication Co.,Ltd\r
+ Building 2,Area E, Phase ii, Optical valley core center, No.52, Liufang road, East Lake Hi-tech Development Zone,Wuhan,China\r
+ Wuhan Hubei 430000\r
+ CN\r
+\r
+F4-69-D5 (hex) ITS Co., Ltd. \r
+300000-3FFFFF (base 16) ITS Co., Ltd. \r
+ Wooyang building 7F, 68, Wolpyeong-ro, Nam-gu, Ulsan, Republic of Korea\r
+ Ulsan 44690\r
+ KR\r
+\r
+4C-93-A6 (hex) Atrie Technology Fzc\r
+100000-1FFFFF (base 16) Atrie Technology Fzc\r
+ ELOB office no E-44F-41, Hamriya Free zone\r
+ Sharjah Sharjah 10001\r
+ AE\r
+\r
+4C-93-A6 (hex) Cantronic Systems (Canada) Inc\r
+D00000-DFFFFF (base 16) Cantronic Systems (Canada) Inc\r
+ Unit 8, 62 Fawcett\r
+ Coquitlam British Columbia V3K 6V5\r
+ CA\r
+\r
+28-B7-7C (hex) Anser Coding Inc.\r
+900000-9FFFFF (base 16) Anser Coding Inc.\r
+ 34F., No. 99, Sec. 1, XinTai 5th Rd., Xizhi Dist.,\r
+ New Taipei City 221\r
+ TW\r
+\r
+28-B7-7C (hex) Ray Pte Ltd\r
+E00000-EFFFFF (base 16) Ray Pte Ltd\r
+ Suite #09-01, 20 Collyer Quay, \r
+ Singapore 049319\r
+ SG\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
Egestorf 21272\r
DE\r
\r
-1C-88-79 (hex) ANDRA Sp. z o.o.\r
-100000-1FFFFF (base 16) ANDRA Sp. z o.o.\r
- Pryzmaty 6/8\r
- Warszawa 02-226\r
- PL\r
-\r
1C-87-79 (hex) ASSYSTEM France\r
E00000-EFFFFF (base 16) ASSYSTEM France\r
13 rue Marie Louise Dissard\r
Reykjavik 105\r
IS\r
\r
-B0-B3-53 (hex) AD HOC DEVELOPMENTS S.L\r
-300000-3FFFFF (base 16) AD HOC DEVELOPMENTS S.L\r
- C/ Crisol 3\r
- RIVAS-VACIAMADRID Madrid 28522\r
- ES\r
-\r
B0-B3-53 (hex) Hangzhou Hikrobot Technology Co., Ltd.\r
600000-6FFFFF (base 16) Hangzhou Hikrobot Technology Co., Ltd.\r
Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang\r
2-14-4 Shinyokohama,kohoku-ku\r
Yokohama Kanagawa 222-0033\r
JP\r
+\r
+38-F7-CD (hex) RFbeam Microwave GmbH\r
+900000-9FFFFF (base 16) RFbeam Microwave GmbH\r
+ Schuppisstrasse 7\r
+ St. Gallen 9016\r
+ CH\r
+\r
+38-F7-CD (hex) Shenzhen MADIGI Electronic Technology Co., Ltd\r
+C00000-CFFFFF (base 16) Shenzhen MADIGI Electronic Technology Co., Ltd\r
+ Room 111,1A Floor,Kanghesheng Blgg,No.1.Chuangsheng Rd.Nanshan District\r
+ Shenzhen Guangdong 518000\r
+ CN\r
+\r
+38-F7-CD (hex) Shanghai qinzhuo Electronic Co., Ltd.\r
+500000-5FFFFF (base 16) Shanghai qinzhuo Electronic Co., Ltd.\r
+ No. W, floor 1, building 2, No. 258, Minfeng Road, Pudong New Area\r
+ Shanghai Shanghai 201209\r
+ CN\r
+\r
+38-F7-CD (hex) NORDI TELEKOMMUNIKATSIOONI OÜ\r
+400000-4FFFFF (base 16) NORDI TELEKOMMUNIKATSIOONI OÜ\r
+ Valukoja 8\r
+ Tallinn city Estonian Republic 11415\r
+ EE\r
+\r
+38-F7-CD (hex) BlastWave Inc.\r
+800000-8FFFFF (base 16) BlastWave Inc.\r
+ 1987 Leghorn Street, Suite 100\r
+ Moutain View CA 94043\r
+ US\r
+\r
+70-69-79 (hex) Faurecia Clarion Electronics (Dongguan) Co., Ltd\r
+900000-9FFFFF (base 16) Faurecia Clarion Electronics (Dongguan) Co., Ltd\r
+ South of Dongkeng Avenue, Dongkeng Town, Dongguan City, Guangdong\r
+ DONGGUAN GUANGDONG 523455\r
+ CN\r
+\r
+70-69-79 (hex) Beijing Security Union Information Technology Co.,Ltd\r
+600000-6FFFFF (base 16) Beijing Security Union Information Technology Co.,Ltd\r
+ Beijing Security Union Information Technology Co.,Ltd \r
+ Beijing Beijing 100085\r
+ CN\r
+\r
+70-69-79 (hex) Intelitech SIA\r
+700000-7FFFFF (base 16) Intelitech SIA\r
+ 2-22 Kruzes str.\r
+ Riga Other LV-1046\r
+ LV\r
+\r
+CC-C2-61 (hex) Ebiologic Technology Co., Ltd.\r
+000000-0FFFFF (base 16) Ebiologic Technology Co., Ltd.\r
+ 9F., No.33, Ln. 3, Sec. 1, Zhongzheng E. Rd., Tamsui Dist., New Taipei City 251, Taiwan (R.O.C.)\r
+ New Taipei City 251\r
+ TW\r
+\r
+CC-C2-61 (hex) Dspread Technology (Beijing) Inc.\r
+D00000-DFFFFF (base 16) Dspread Technology (Beijing) Inc.\r
+ Jingxin Building, 2045 Suite , Chaoyang District\r
+ Beijing 100027\r
+ CN\r
+\r
+CC-C2-61 (hex) Viper Design, LLC\r
+500000-5FFFFF (base 16) Viper Design, LLC\r
+ 125 Glancy St.\r
+ Goodlettsville TN 37072\r
+ US\r
+\r
+CC-C2-61 (hex) BYTERG LLC\r
+900000-9FFFFF (base 16) BYTERG LLC\r
+ 1st Nagatinsky proezd 10 build.1\r
+ Moscow Moscow 115230\r
+ RU\r
+\r
+F0-D7-AF (hex) ADAM Audio GmbH\r
+400000-4FFFFF (base 16) ADAM Audio GmbH\r
+ Rudower Chaussee 50\r
+ Berlin 12489\r
+ DE\r
+\r
+B0-B3-53 (hex) AD HOC DEVELOPMENTS S.L\r
+300000-3FFFFF (base 16) AD HOC DEVELOPMENTS S.L\r
+ C/ Crisol 3, despacho 17\r
+ Rivas-Vaciamadrid Madrid 28522\r
+ ES\r
+\r
+F0-D7-AF (hex) Anord Mardix (USA) Inc.\r
+600000-6FFFFF (base 16) Anord Mardix (USA) Inc.\r
+ 3930 Technology Court\r
+ Sandston VA 23150\r
+ US\r
+\r
+94-FB-A7 (hex) Rosenberger Technologies Co.,Ltd.\r
+D00000-DFFFFF (base 16) Rosenberger Technologies Co.,Ltd.\r
+ NO.6, ShenAn Rd, Dianshanhu Town\r
+ Kunshan City Jiangsu Province 215345\r
+ CN\r
+\r
+F0-D7-AF (hex) SHEN ZHEN MICHIP TECHNOLOGIES CO.,LTD.\r
+800000-8FFFFF (base 16) SHEN ZHEN MICHIP TECHNOLOGIES CO.,LTD.\r
+ Fuxingda Indestrial park.Floor4?Building4\r
+ SHEN ZHEN GUANG DONG 518126\r
+ CN\r
+\r
+30-49-50 (hex) Guangzhou Lian-med Technology Co.,Ltd.\r
+000000-0FFFFF (base 16) Guangzhou Lian-med Technology Co.,Ltd.\r
+ Room 501, Building G1,No. 31 Kefeng Road, Huangpu district\r
+ Guangzhou 510670\r
+ CN\r
+\r
+30-49-50 (hex) IoTmaxx GmbH\r
+E00000-EFFFFF (base 16) IoTmaxx GmbH\r
+ Bultstrasse 5a\r
+ Hannover 30159\r
+ DE\r
+\r
+D0-14-11 (hex) Guangdong Shiqi Manufacture Co., Ltd.\r
+D00000-DFFFFF (base 16) Guangdong Shiqi Manufacture Co., Ltd.\r
+ No. D10~11, Lunjiao intensive industrial Zone, Licun Village committee, Lunjiao street office, Shunde District\r
+ Foshan Guangdong 528300\r
+ CN\r
+\r
+D0-14-11 (hex) Ahnnet\r
+600000-6FFFFF (base 16) Ahnnet\r
+ B-313, Samhwan HIPEX, 230, Pangyoyeok-ro, Bundang-gu\r
+ Seongnam-si Gyeonggi-do 13493\r
+ KR\r
+\r
+1C-88-79 (hex) ANDRA Sp. z o. o.\r
+100000-1FFFFF (base 16) ANDRA Sp. z o. o.\r
+ Pryzmaty 6/8\r
+ Warszawa 02-226\r
+ PL\r
+\r
+5C-85-7E (hex) Guoyi Liangzi (Hefei) Technology Co., Ltd(CIQTEK)\r
+E00000-EFFFFF (base 16) Guoyi Liangzi (Hefei) Technology Co., Ltd(CIQTEK)\r
+ 1-4th Floor, Building No.E2, Chuangxin Industrial Park, No.2800, Chuangxin Road Gaoxin District\r
+ Hefei Anhui Hefei \r
+ CN\r
+\r
+5C-85-7E (hex) Express LUCK Industrial Ltd.\r
+900000-9FFFFF (base 16) Express LUCK Industrial Ltd.\r
+ No. 88, Baotongnan Road, Xikeng, Yuanshan Street, Longgang District\r
+ Shenzhen Guangdong 518100\r
+ CN\r
+\r
+F4-69-D5 (hex) Nantong ZYDZ Electronic.,Co.Ltd\r
+D00000-DFFFFF (base 16) Nantong ZYDZ Electronic.,Co.Ltd\r
+ # F, High-Tech business Incubator, No.86 East Waihuan Road,\r
+ Nantong Jiangsu 226300\r
+ CN\r
+\r
+F4-69-D5 (hex) Stype CS d.o.o.\r
+400000-4FFFFF (base 16) Stype CS d.o.o.\r
+ Velikopoljska 32\r
+ Zagreb 10010\r
+ HR\r
+\r
+4C-93-A6 (hex) Hanwang Technology Co.,Ltd\r
+A00000-AFFFFF (base 16) Hanwang Technology Co.,Ltd\r
+ HANVON TOWER, BUILDING NO.5, ZHONGGUANCUN SOFTWARE PARK, HAIDIAN DISTRICT, BEIJING, CHINA 100193 \r
+ BEIJING BEIJING 100193 \r
+ CN\r
+\r
+28-B7-7C (hex) AnyLink LLC\r
+C00000-CFFFFF (base 16) AnyLink LLC\r
+ 100 N Washington St. Floor 6\r
+ Boston MA 02114\r
+ US\r
+\r
+28-B7-7C (hex) Shanghai Taiji Software Co.,Limited\r
+600000-6FFFFF (base 16) Shanghai Taiji Software Co.,Limited\r
+ Room J1224, No. 6, Lane 129, Huajiang Road, Jiading District\r
+ Shanghai Shanghai 201800\r
+ CN\r
+\r
+28-B7-7C (hex) Enedo Finland Oy\r
+D00000-DFFFFF (base 16) Enedo Finland Oy\r
+ Martinkyläntie 43\r
+ Vantaa 01720\r
+ FI\r
+\r
+C0-61-9A (hex) JAM-Labs Corp\r
+C00000-CFFFFF (base 16) JAM-Labs Corp\r
+ 4109 Clipper Ct\r
+ Fremont CA 94538\r
+ US\r
+\r
+C0-61-9A (hex) LYAND ACOUSTIC TECHNOLOGY CO.,LTD.\r
+300000-3FFFFF (base 16) LYAND ACOUSTIC TECHNOLOGY CO.,LTD.\r
+ No. 73 JinFu Road XiaoJinKou\r
+ Huizhou city GuangDong 516023\r
+ CN\r
+\r
+C0-61-9A (hex) KidKraft\r
+100000-1FFFFF (base 16) KidKraft\r
+ 4630 Olin Rd\r
+ Dallas TX 75244\r
+ US\r
Auburn CA 95603\r
US\r
\r
-00-1B-C5 (hex) HomerSoft sp. z o.o.\r
-0A0000-0A0FFF (base 16) HomerSoft sp. z o.o.\r
- Kapelanka 13B\r
- Krakow 30-347\r
- PL\r
-\r
00-1B-C5 (hex) Navitar Inc\r
09D000-09DFFF (base 16) Navitar Inc\r
200 Commerce Dr\r
Hong Kong Hong Kong 00000\r
HK\r
\r
-70-B3-D5 (hex) Technology Link Corporation\r
-B1B000-B1BFFF (base 16) Technology Link Corporation\r
- Shin-Yokohama Kohoku-ku\r
- yokohama kanagawa 222-0033\r
- JP\r
-\r
70-B3-D5 (hex) VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD\r
6BE000-6BEFFF (base 16) VANTAGE INTEGRATED SECURITY SOLUTIONS PVT LTD\r
B3, Bredon House, 321, Tettenhall Road, Tettenhall\r
Watford Hertfordshire WD25 8HU\r
GB\r
\r
-70-B3-D5 (hex) sensorway\r
-C52000-C52FFF (base 16) sensorway\r
- A-339 samsong techno valley, 140 tongilro, deockyanggu\r
- goyangsi gyeonggido 10594\r
- KR\r
+70-B3-D5 (hex) Technology Link Corporation\r
+B1B000-B1BFFF (base 16) Technology Link Corporation\r
+ Shin-Yokohama Kohoku-ku\r
+ yokohama kanagawa 222-0033\r
+ JP\r
\r
70-B3-D5 (hex) Tucsen Photonics Co., Ltd. \r
8A7000-8A7FFF (base 16) Tucsen Photonics Co., Ltd. \r
fuzhou 350000\r
CN\r
\r
-70-B3-D5 (hex) Beijing Yourong Runda Rechnology Development Co.Ltd.\r
-980000-980FFF (base 16) Beijing Yourong Runda Rechnology Development Co.Ltd.\r
- Changping District Science and Technology Park Advanced Road 37\r
- Beijing 6219650\r
- CN\r
+70-B3-D5 (hex) sensorway\r
+C52000-C52FFF (base 16) sensorway\r
+ A-339 samsong techno valley, 140 tongilro, deockyanggu\r
+ goyangsi gyeonggido 10594\r
+ KR\r
\r
70-B3-D5 (hex) KDT Corp.\r
E72000-E72FFF (base 16) KDT Corp.\r
shaoxing zhejiang 312030\r
CN\r
\r
-70-B3-D5 (hex) AUTOMATICA Y REGULACION S.A.\r
-EBF000-EBFFFF (base 16) AUTOMATICA Y REGULACION S.A.\r
- Condell 1735, Nunoa\r
- Santiago RM 7770331\r
- CL\r
+70-B3-D5 (hex) Beijing Yourong Runda Rechnology Development Co.Ltd.\r
+980000-980FFF (base 16) Beijing Yourong Runda Rechnology Development Co.Ltd.\r
+ Changping District Science and Technology Park Advanced Road 37\r
+ Beijing 6219650\r
+ CN\r
\r
70-B3-D5 (hex) R.C. Systems Inc\r
52F000-52FFFF (base 16) R.C. Systems Inc\r
Brendola Vicenza 36040\r
IT\r
\r
+70-B3-D5 (hex) AUTOMATICA Y REGULACION S.A.\r
+EBF000-EBFFFF (base 16) AUTOMATICA Y REGULACION S.A.\r
+ Condell 1735, Nunoa\r
+ Santiago RM 7770331\r
+ CL\r
+\r
70-B3-D5 (hex) Digital Solutions JSC\r
D9F000-D9FFFF (base 16) Digital Solutions JSC\r
room 4, office 1, 3rd floor, building 7, house 9a, 2nd Sinichkina Str.\r
Moscow 111020\r
RU\r
\r
-70-B3-D5 (hex) DOGA\r
-62A000-62AFFF (base 16) DOGA\r
- 11 rue Lavoisier\r
- MAUREPAS 78310\r
- FR\r
-\r
70-B3-D5 (hex) Oculii\r
B96000-B96FFF (base 16) Oculii\r
829 Space Dr\r
Woodside NY 11377\r
US\r
\r
-70-B3-D5 (hex) Remote Diagnostic Technologies Ltd\r
-C99000-C99FFF (base 16) Remote Diagnostic Technologies Ltd\r
- Pavilion C2 Ashwood Park, Ashwood Way\r
- Basingstoke Hampshire RG23 8BG\r
- GB\r
+70-B3-D5 (hex) DOGA\r
+62A000-62AFFF (base 16) DOGA\r
+ 11 rue Lavoisier\r
+ MAUREPAS 78310\r
+ FR\r
\r
70-B3-D5 (hex) NEUROPHET, Inc.\r
E31000-E31FFF (base 16) NEUROPHET, Inc.\r
Seoul Province 06247\r
KR\r
\r
+70-B3-D5 (hex) Remote Diagnostic Technologies Ltd\r
+C99000-C99FFF (base 16) Remote Diagnostic Technologies Ltd\r
+ Pavilion C2 Ashwood Park, Ashwood Way\r
+ Basingstoke Hampshire RG23 8BG\r
+ GB\r
+\r
+70-B3-D5 (hex) Gogo Business Aviation\r
+3E0000-3E0FFF (base 16) Gogo Business Aviation\r
+ 105 Edgeview Dr., Suite 300\r
+ Broomfield CO 80021\r
+ US\r
+\r
70-B3-D5 (hex) Chromateq\r
944000-944FFF (base 16) Chromateq\r
191, allée de Lauzard, Bat. B, RDC 1 (Chromateq)\r
Nesher 3688520\r
IL\r
\r
-70-B3-D5 (hex) Gogo Business Aviation\r
-3E0000-3E0FFF (base 16) Gogo Business Aviation\r
- 105 Edgeview Dr., Suite 300\r
- Broomfield CO 80021\r
- US\r
-\r
70-B3-D5 (hex) Asiga Pty Ltd\r
53E000-53EFFF (base 16) Asiga Pty Ltd\r
Unit 2, 19-21 Bourke Road\r
Alexandria New South Wales 2015\r
AU\r
\r
-70-B3-D5 (hex) ENABLER LTD.\r
-15A000-15AFFF (base 16) ENABLER LTD.\r
- 29F Shiroyama Trust Tower 4-3-1 Toranomon \r
- Minato-ku Tokyo 105-6029\r
- JP\r
-\r
-70-B3-D5 (hex) LINEAGE POWER PVT LTD.,\r
-62E000-62EFFF (base 16) LINEAGE POWER PVT LTD.,\r
- 30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD\r
- BANGALORE KARNATAKA 560074\r
- IN\r
-\r
70-B3-D5 (hex) Salupo Sas\r
898000-898FFF (base 16) Salupo Sas\r
Via Laganeto n. 129\r
Amagasaki Hyogo 660-0082\r
JP\r
\r
+70-B3-D5 (hex) LINEAGE POWER PVT LTD.,\r
+62E000-62EFFF (base 16) LINEAGE POWER PVT LTD.,\r
+ 30-A1, KIADB, 1ST PHASE INDUSTRIAL ESTATE,KUMBALGODU, BANGALORE-MYSORE ROAD\r
+ BANGALORE KARNATAKA 560074\r
+ IN\r
+\r
+70-B3-D5 (hex) ENABLER LTD.\r
+15A000-15AFFF (base 16) ENABLER LTD.\r
+ 29F Shiroyama Trust Tower 4-3-1 Toranomon \r
+ Minato-ku Tokyo 105-6029\r
+ JP\r
+\r
70-B3-D5 (hex) Grupo Epelsa S.L.\r
40D000-40DFFF (base 16) Grupo Epelsa S.L.\r
C/ Punto Net,3\r
Alcala de Henares Madrid 28805\r
ES\r
\r
+70-B3-D5 (hex) WEPTECH elektronik GmbH\r
+9CD000-9CDFFF (base 16) WEPTECH elektronik GmbH\r
+ Ostring 10\r
+ Landau 76829\r
+ DE\r
+\r
+70-B3-D5 (hex) AnaPico AG\r
+0BB000-0BBFFF (base 16) AnaPico AG\r
+ Europa-Strasse 9\r
+ Glattbrugg Schweiz 8152\r
+ CH\r
+\r
+70-B3-D5 (hex) Egag, LLC\r
+9A8000-9A8FFF (base 16) Egag, LLC\r
+ 303 King James Ct\r
+ Upper Marlboro MD 20774\r
+ US\r
+\r
+70-B3-D5 (hex) Season Electronics Ltd\r
+F46000-F46FFF (base 16) Season Electronics Ltd\r
+ 600 Nest Business Park \r
+ Havant Hampshire PO9 5TL\r
+ GB\r
+\r
+70-B3-D5 (hex) Algodue Elettronica Srl\r
+191000-191FFF (base 16) Algodue Elettronica Srl\r
+ Via P. Gobetti, 16F\r
+ Maggiora NO 28014\r
+ IT\r
+\r
+70-B3-D5 (hex) Hermann Sewerin GmbH\r
+484000-484FFF (base 16) Hermann Sewerin GmbH\r
+ Robert-Bosch-Str. 3\r
+ Gütersloh NRW 33334\r
+ DE\r
+\r
+70-B3-D5 (hex) OZRAY\r
+629000-629FFF (base 16) OZRAY\r
+ D-#1514, GwangMyung SK Techno park, 60, Haan-ro, GwangMyung-si, Gyeonggi-do, Korea\r
+ GwangMyung-si Gyeonggi-do, Korea 14322\r
+ KR\r
+\r
+70-B3-D5 (hex) Beijing Vizum Technology Co.,Ltd.\r
+F33000-F33FFF (base 16) Beijing Vizum Technology Co.,Ltd.\r
+ Room603, Floor6, Block2, No.1 Zhongguancun, No.81 Beiqing Road\r
+ Beijing Beijing 100094\r
+ CN\r
+\r
+70-B3-D5 (hex) Monnit Corporation\r
+393000-393FFF (base 16) Monnit Corporation\r
+ 3400 S West Temple\r
+ Salt Lake City UT 84115\r
+ US\r
+\r
+70-B3-D5 (hex) eSight\r
+FD9000-FD9FFF (base 16) eSight\r
+ 515 Legget Drive, Suite 200\r
+ Ottawa ON K2K3G4\r
+ CA\r
+\r
+70-B3-D5 (hex) Nilar AB\r
+D99000-D99FFF (base 16) Nilar AB\r
+ Bönavägen 55\r
+ Gävle Gavleborg 80647\r
+ SE\r
+\r
+70-B3-D5 (hex) Volution Group UK\r
+687000-687FFF (base 16) Volution Group UK\r
+ Vent-Axia Ltd, Fleming Way\r
+ Crawley WEST SUSSEX RH10 9YX\r
+ GB\r
+\r
+70-B3-D5 (hex) Vertex Co.,Ltd.\r
+8DD000-8DDFFF (base 16) Vertex Co.,Ltd.\r
+ 4-1-17 Higashifuchinobe,Chuo-ku\r
+ Sagamihara Kanagawa 252-0203\r
+ JP\r
+\r
+70-B3-D5 (hex) Specialized Communications Corp.\r
+867000-867FFF (base 16) Specialized Communications Corp.\r
+ 20940 Twin Springs Drive\r
+ Smithsburg 21783\r
+ US\r
+\r
+70-B3-D5 (hex) Jabil, Inc.\r
+736000-736FFF (base 16) Jabil, Inc.\r
+ 888 Executive Center Dr. W.\r
+ St.Petersubrg FL 33702\r
+ US\r
+\r
+70-B3-D5 (hex) Power Electronics Espana, S.L.\r
+632000-632FFF (base 16) Power Electronics Espana, S.L.\r
+ C/ Leonardo Da Vinci, 24-26\r
+ Paterna Valencia 46980\r
+ ES\r
+\r
+70-B3-D5 (hex) CT Company\r
+005000-005FFF (base 16) CT Company\r
+ Godovikova , 9, Moscow\r
+ Moscow RUSSIA 129085\r
+ RU\r
+\r
+70-B3-D5 (hex) Tomahawk Robotics\r
+0EB000-0EBFFF (base 16) Tomahawk Robotics\r
+ 2412 Irwin St\r
+ Melbourne FL 32901\r
+ US\r
+\r
+00-1B-C5 (hex) Silvair\r
+0A0000-0A0FFF (base 16) Silvair\r
+ ul. Jasnogórska 44\r
+ Kraków 31-358\r
+ PL\r
+\r
+70-B3-D5 (hex) JPEmbedded Mazan Filipek Sp. J.\r
+69D000-69DFFF (base 16) JPEmbedded Mazan Filipek Sp. J.\r
+ Strumienna 12\r
+ Krakow Lesser Poland Voivodeship 30-609\r
+ PL\r
+\r
+70-B3-D5 (hex) JT\r
+051000-051FFF (base 16) JT\r
+ 203, Business Incubator Center, Korea Polytechnic University, 237, Sangidaehak-ro,\r
+ Siheung-si Gyeonggi-do 15073\r
+ KR\r
+\r
+70-B3-D5 (hex) YUYAMA MFG Co.,Ltd\r
+D06000-D06FFF (base 16) YUYAMA MFG Co.,Ltd\r
+ 1-4-30\r
+ MEISHINGUCHI,TOYONAKA OSAKA 561-0841\r
+ JP\r
+\r
+70-B3-D5 (hex) Guangzhou Wanglu \r
+8D5000-8D5FFF (base 16) Guangzhou Wanglu \r
+ 2nd floor, Block C, DET building, No.2 Ruitai Road,Kaitai Street, Huangpu District\r
+ Guangzhou Guangdong 510665\r
+ CN\r
+\r
+70-B3-D5 (hex) 7thSense Design Limited\r
+E46000-E46FFF (base 16) 7thSense Design Limited\r
+ 2 The Courtyard, Shoreham Road\r
+ Upper Beeding West Sussex BN44 3TN\r
+ GB\r
+\r
+70-B3-D5 (hex) Cominfo, Inc.\r
+6F5000-6F5FFF (base 16) Cominfo, Inc.\r
+ Nabrezi 695\r
+ Zlin 760 01\r
+ CZ\r
+\r
+70-B3-D5 (hex) Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd\r
+00F000-00FFFF (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) Weltek Technologies Co. Ltd.\r
+C48000-C48FFF (base 16) Weltek Technologies Co. Ltd.\r
+ Flat A-B, 12/F, Block 1, Wah Fung Ind. Centre, 33-39 Kwai Fung Crescent, Kwai Chung, N.T.\r
+ HK 852\r
+ HK\r
+\r
+70-B3-D5 (hex) BirdDog Australia\r
+3B9000-3B9FFF (base 16) BirdDog Australia\r
+ Unit 1, 8 Theobald St\r
+ THORNBURY VIC 3071\r
+ AU\r
+\r
+70-B3-D5 (hex) Clarity Medical Pvt Ltd\r
+C0D000-C0DFFF (base 16) Clarity Medical Pvt Ltd\r
+ PLOT No. 1687A, JLPL INDUSTRIAL AREA, SECTOR 82, MOHALI\r
+ MOHALI Punjab 140306\r
+ IN\r
+\r
+70-B3-D5 (hex) TimeMachines Inc.\r
+756000-756FFF (base 16) TimeMachines Inc.\r
+ 300 S 68th Street Place, Suite 100\r
+ Lincoln NE 68510\r
+ US\r
+\r
+70-B3-D5 (hex) Algra tec AG\r
+80C000-80CFFF (base 16) Algra tec AG\r
+ Rigistr. 1\r
+ Merenschwand Aargau 5634\r
+ CH\r
+\r
+70-B3-D5 (hex) KRONOTECH SRL\r
+626000-626FFF (base 16) KRONOTECH SRL\r
+ VIALE UNGHERIA 125\r
+ UDINE ITALY/UDINE 33100\r
+ IT\r
+\r
+70-B3-D5 (hex) Enlaps\r
+2AF000-2AFFFF (base 16) Enlaps\r
+ 29 chemin du vieux chene, Tarmac\r
+ MEYLAN 38240\r
+ FR\r
+\r
+70-B3-D5 (hex) BORMANN EDV und Zubehoer\r
+864000-864FFF (base 16) BORMANN EDV und Zubehoer\r
+ Lohwaldstr. 53\r
+ Neusaess Bayern 85356\r
+ DE\r
+\r
70-B3-D5 (hex) EVCO SPA\r
A80000-A80FFF (base 16) EVCO SPA\r
VIA FELTRE N. 81\r
Bergisch Gladbach North Rhine-Westphalia 51465\r
DE\r
\r
-70-B3-D5 (hex) Cetitec GmbH\r
-B36000-B36FFF (base 16) Cetitec GmbH\r
- Mannheimer Strasse 17\r
- Pforzheim 75179\r
- DE\r
-\r
70-B3-D5 (hex) DONG IL VISION Co., Ltd.\r
038000-038FFF (base 16) DONG IL VISION Co., Ltd.\r
#9 Ftrek tower, 11-25, Simindaero 327 beongil,Dongan-gu\r
Anyangi-Si Gyeonggi-Do 14055\r
KR\r
\r
+70-B3-D5 (hex) Cetitec GmbH\r
+B36000-B36FFF (base 16) Cetitec GmbH\r
+ Mannheimer Strasse 17\r
+ Pforzheim 75179\r
+ DE\r
+\r
70-B3-D5 (hex) Kamacho Scale Co., Ltd.\r
385000-385FFF (base 16) Kamacho Scale Co., Ltd.\r
2246 Mure\r
Takamatsu-shi Kagawa-ken 761-0196\r
JP\r
\r
-70-B3-D5 (hex) Visual Robotics\r
-0F4000-0F4FFF (base 16) Visual Robotics\r
- 38 Irving Rd\r
- Eugene OR 97404\r
- US\r
-\r
70-B3-D5 (hex) Vessel Technology Ltd\r
44D000-44DFFF (base 16) Vessel Technology Ltd\r
Banchory Business Centre, Burn O'Bennie Road\r
Pethch Tikva Israel 4959376\r
IL\r
\r
-70-B3-D5 (hex) TEX COMPUTER SRL \r
-6C2000-6C2FFF (base 16) TEX COMPUTER SRL \r
- VIA MERCADANTE 35\r
- CATTOLICA RIMINI 47841\r
- IT\r
+70-B3-D5 (hex) Visual Robotics\r
+0F4000-0F4FFF (base 16) Visual Robotics\r
+ 38 Irving Rd\r
+ Eugene OR 97404\r
+ US\r
\r
70-B3-D5 (hex) TangRen C&S CO., Ltd\r
3FC000-3FCFFF (base 16) TangRen C&S CO., Ltd\r
Shenzhen Guangdong 518052\r
CN\r
\r
+70-B3-D5 (hex) TEX COMPUTER SRL \r
+6C2000-6C2FFF (base 16) TEX COMPUTER SRL \r
+ VIA MERCADANTE 35\r
+ CATTOLICA RIMINI 47841\r
+ IT\r
+\r
70-B3-D5 (hex) LOTES TM OOO\r
EA5000-EA5FFF (base 16) LOTES TM OOO\r
Barklaya 22, str.1\r
Moscow 121309\r
RU\r
\r
-70-B3-D5 (hex) Yi An Electronics Co., Ltd\r
-F28000-F28FFF (base 16) Yi An Electronics Co., Ltd\r
- 5F.-2, No. 81, Sec. 1, Xintai 5th Rd., Xizhi Dist\r
- New Taipei City 22101\r
- TW\r
-\r
70-B3-D5 (hex) Ariston Thermo s.p.a.\r
3D6000-3D6FFF (base 16) Ariston Thermo s.p.a.\r
Via Aristide Merloni 45\r
Fabriano Ancona 60044\r
IT\r
\r
-70-B3-D5 (hex) MG s.r.l.\r
-130000-130FFF (base 16) MG s.r.l.\r
- via Monte Bianco, 1\r
- Solbiate Olona VA 21058\r
- IT\r
+70-B3-D5 (hex) Yi An Electronics Co., Ltd\r
+F28000-F28FFF (base 16) Yi An Electronics Co., Ltd\r
+ 5F.-2, No. 81, Sec. 1, Xintai 5th Rd., Xizhi Dist\r
+ New Taipei City 22101\r
+ TW\r
\r
70-B3-D5 (hex) DORLET SAU\r
639000-639FFF (base 16) DORLET SAU\r
Ryazan 390048\r
RU\r
\r
+70-B3-D5 (hex) MG s.r.l.\r
+130000-130FFF (base 16) MG s.r.l.\r
+ via Monte Bianco, 1\r
+ Solbiate Olona VA 21058\r
+ IT\r
+\r
+70-B3-D5 (hex) Postmark Incorporated \r
+CBB000-CBBFFF (base 16) Postmark Incorporated \r
+ 3197 Duncan Lane\r
+ San Luis Obispo CA 93401\r
+ US\r
+\r
70-B3-D5 (hex) Glory Technology Service Inc.\r
801000-801FFF (base 16) Glory Technology Service Inc.\r
3F., No.43-1, Ln. 11, Sec. 6, Minquan E. Rd\r
Gifu-shi Gifu 500-8122\r
JP\r
\r
-70-B3-D5 (hex) Postmark Incorporated \r
-CBB000-CBBFFF (base 16) Postmark Incorporated \r
- 3197 Duncan Lane\r
- San Luis Obispo CA 93401\r
- US\r
-\r
70-B3-D5 (hex) Abbott Diagnostics Technologies AS\r
53F000-53FFFF (base 16) Abbott Diagnostics Technologies AS\r
P. O. Box 6863 Rodeløkka\r
VILLA BARTOLOMEA IT 37049\r
IT\r
\r
+70-B3-D5 (hex) Sankyo Intec Co,ltd\r
+E7F000-E7FFFF (base 16) Sankyo Intec Co,ltd\r
+ 127 Tokimata\r
+ Iida-shi Nagano-ken 399-2563\r
+ JP\r
+\r
+70-B3-D5 (hex) olympus-ossa\r
+5D9000-5D9FFF (base 16) olympus-ossa\r
+ 48 woerd ave\r
+ waltham MA 02453\r
+ US\r
+\r
+70-B3-D5 (hex) Global Power Products\r
+3B1000-3B1FFF (base 16) Global Power Products\r
+ 225 Arnold Road\r
+ Lawrenceville 30044\r
+ US\r
+\r
+70-B3-D5 (hex) Nidec asi spa\r
+D88000-D88FFF (base 16) Nidec asi spa\r
+ s.s11 , ca sordis 4\r
+ Montebello Vicentino vicenza 36054\r
+ IT\r
+\r
+70-B3-D5 (hex) EnergizeEV\r
+EB6000-EB6FFF (base 16) EnergizeEV\r
+ #160, 1684 Decoto Road\r
+ Union City CA 94587\r
+ US\r
+\r
+70-B3-D5 (hex) Seznam.cz, a.s., CZ26168685\r
+F66000-F66FFF (base 16) Seznam.cz, a.s., CZ26168685\r
+ Radlicka 3294/10\r
+ Praha Czech Republic 15000\r
+ CZ\r
+\r
+70-B3-D5 (hex) Frog Cellsat Limited\r
+C5E000-C5EFFF (base 16) Frog Cellsat Limited\r
+ D-213, Sector-63, Noida\r
+ Noida Utter Pardesh 201301\r
+ IN\r
+\r
+70-B3-D5 (hex) DEUTA-WERKE GmbH\r
+6DC000-6DCFFF (base 16) DEUTA-WERKE GmbH\r
+ Paffrather Str. 140\r
+ Bergisch Gladbach North Rhine-Westphalia 51465\r
+ DE\r
+\r
+70-B3-D5 (hex) Levelup Holding, Inc.\r
+89F000-89FFFF (base 16) Levelup Holding, Inc.\r
+ 3015 W Weldon Ave\r
+ Phoenix AZ 85017\r
+ US\r
+\r
+70-B3-D5 (hex) Cavagna Group Spa\r
+1B2000-1B2FFF (base 16) Cavagna Group Spa\r
+ Via Statale 11/13\r
+ Ponte S.Marco di Calcinato (BS) 25011\r
+ IT\r
+\r
+70-B3-D5 (hex) RTA srl\r
+32B000-32BFFF (base 16) RTA srl\r
+ Via Mattei Fraz. Divisa\r
+ Marcignago PV 27020\r
+ IT\r
+\r
+70-B3-D5 (hex) RF-Tuote Oy\r
+3AC000-3ACFFF (base 16) RF-Tuote Oy\r
+ Joensuunkatu 13\r
+ Salo 246 24130\r
+ FI\r
+\r
+70-B3-D5 (hex) Shanghai Junqian Sensing Technology Co., LTD\r
+468000-468FFF (base 16) Shanghai Junqian Sensing Technology Co., LTD\r
+ Room 602,Building 1,NO.760,Xinjunhuan Road, Caohejing High-Tech Park\r
+ Shanghai Shanghai 201114\r
+ CN\r
+\r
+70-B3-D5 (hex) Sphere of economical technologies Ltd\r
+1C1000-1C1FFF (base 16) Sphere of economical technologies Ltd\r
+ 132, 7-ya Liniya Str.\r
+ Omsk Omskaya oblast 644021\r
+ RU\r
+\r
+70-B3-D5 (hex) Simplified MFG\r
+66F000-66FFFF (base 16) Simplified MFG\r
+ 1707 S Gilmore Cir\r
+ Mesa AZ 85206\r
+ US\r
+\r
+70-B3-D5 (hex) NooliTIC\r
+E51000-E51FFF (base 16) NooliTIC\r
+ 165 avenue de bretagne\r
+ LILLE 59000\r
+ FR\r
+\r
+70-B3-D5 (hex) Scenario Automation\r
+43C000-43CFFF (base 16) Scenario Automation\r
+ Rua Paulo Elias, 216\r
+ São Carlos São Paulo 13564400\r
+ BR\r
+\r
+70-B3-D5 (hex) LACS SRL\r
+F4A000-F4AFFF (base 16) LACS SRL\r
+ VIA MONTE NERO 4\r
+ ROSA' VI 36027\r
+ IT\r
+\r
+70-B3-D5 (hex) Orion Power Systems, Inc.\r
+110000-110FFF (base 16) Orion Power Systems, Inc.\r
+ 2939 W. Beaver Street\r
+ Jacksonville FL 32254\r
+ US\r
+\r
+70-B3-D5 (hex) Sicon srl\r
+EAF000-EAFFFF (base 16) Sicon srl\r
+ Via Sila 1/3\r
+ Isola Vicentina Vicenza 36033\r
+ IT\r
+\r
+70-B3-D5 (hex) Garmo Instruments S.L.\r
+C02000-C02FFF (base 16) Garmo Instruments S.L.\r
+ Polig. Malpica, Calle E, 32-39, nave 43\r
+ Zaragoza Aragon 50016\r
+ ES\r
+\r
+70-B3-D5 (hex) King-On Technology Ltd.\r
+D35000-D35FFF (base 16) King-On Technology Ltd.\r
+ 13F, No.207, Sec#3, Beixin Rd., Xindian District.\r
+ New Taipei City Taiwan 23143\r
+ TW\r
+\r
+70-B3-D5 (hex) Nuance Hearing Ltd.\r
+AE4000-AE4FFF (base 16) Nuance Hearing Ltd.\r
+ Raoul Wallenberg 24, Building A1, Floor 3\r
+ Tel Aviv 6971920\r
+ IL\r
+\r
+70-B3-D5 (hex) BRS Sistemas Eletrônicos\r
+3CD000-3CDFFF (base 16) BRS Sistemas Eletrônicos\r
+ Rua Gomes de Freitas, 491 / 204\r
+ Porto Alegre RS 91380-000\r
+ BR\r
+\r
+70-B3-D5 (hex) HONG JIANG ELECTRONICS CO., LTD.\r
+E64000-E64FFF (base 16) HONG JIANG ELECTRONICS CO., LTD.\r
+ 9F, No. 649-3, Zhong Zheng Rd.,, Xin Zhuang Dist., New Taipei City,, TAIWAN(R.O.C.)\r
+ 24257 Taiwan SHINJUANG\r
+ TW\r
+\r
+70-B3-D5 (hex) Yongtong tech\r
+2CB000-2CBFFF (base 16) Yongtong tech\r
+ D18,NO.6 Road HuangChunBei\r
+ TianHe GuangZhou 515800\r
+ CN\r
+\r
+70-B3-D5 (hex) OLEDCOMM\r
+7D3000-7D3FFF (base 16) OLEDCOMM\r
+ 10-12 avenue de l'Europe\r
+ Vélizy Villacoublay Ile de France 78140\r
+ FR\r
+\r
+70-B3-D5 (hex) Malin Space Science System\r
+FE5000-FE5FFF (base 16) Malin Space Science System\r
+ 5880 Pacific Center Blvd \r
+ San Diego CA 92121\r
+ US\r
+\r
+70-B3-D5 (hex) Wexiodisk AB\r
+905000-905FFF (base 16) Wexiodisk AB\r
+ Mardvagen 4\r
+ Vaxjo Kronoberg 352 45\r
+ SE\r
+\r
+70-B3-D5 (hex) Klaxoon\r
+DB3000-DB3FFF (base 16) Klaxoon\r
+ 3 av de Belle Fontaine\r
+ Cesson-Sevigne 35510\r
+ FR\r
+\r
+70-B3-D5 (hex) ECoCoMS Ltd.\r
+5CB000-5CBFFF (base 16) ECoCoMS Ltd.\r
+ BIC-ISOT, Tzarigradsko shose blvd., 7-th km, Corpus 3, fl. 4,\r
+ Sofia BG 1784\r
+ BG\r
+\r
+70-B3-D5 (hex) MetCom Solutions GmbH\r
+D18000-D18FFF (base 16) MetCom Solutions GmbH\r
+ Marie-Curie-Str. 19\r
+ Mannheim Baden-Wuerttemberg 68219\r
+ DE\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
Bad Marienberg Rheinland-Pfalz 56470\r
DE\r
\r
+70-B3-D5 (hex) Walton Hi-Tech Industries Ltd.\r
+E5C000-E5CFFF (base 16) Walton Hi-Tech Industries Ltd.\r
+ HOLDING NO. I-65/2, WARD NO-07\r
+ CHANDRA, KALIAKOIR, GAZIPUR. 1750\r
+ BD\r
+\r
+70-B3-D5 (hex) Flextronics International Kft\r
+699000-699FFF (base 16) Flextronics International Kft\r
+ 38. Zrinyi Str.\r
+ Zalaegerszeg Zala 8900\r
+ HU\r
+\r
70-B3-D5 (hex) JFA Electronics Industry and Commerce EIRELI\r
5F7000-5F7FFF (base 16) JFA Electronics Industry and Commerce EIRELI\r
Rua Flor das Pedras, 175\r
Boonton Township NJ 07005\r
US\r
\r
-70-B3-D5 (hex) Walton Hi-Tech Industries Ltd.\r
-E5C000-E5CFFF (base 16) Walton Hi-Tech Industries Ltd.\r
- HOLDING NO. I-65/2, WARD NO-07\r
- CHANDRA, KALIAKOIR, GAZIPUR. 1750\r
- BD\r
-\r
70-B3-D5 (hex) aquila biolabs GmbH\r
7DB000-7DBFFF (base 16) aquila biolabs GmbH\r
Arnold-Sommerfeld-Ring 2\r
Isola Vicentina Vicenza 36033\r
IT\r
\r
-70-B3-D5 (hex) Flextronics International Kft\r
-699000-699FFF (base 16) Flextronics International Kft\r
- 38. Zrinyi Str.\r
- Zalaegerszeg Zala 8900\r
- HU\r
-\r
70-B3-D5 (hex) LGE\r
DAE000-DAEFFF (base 16) LGE\r
10, Magokjungang 10-ro, Gangseo-gu\r
Borehamwood Hert WD6 1NA\r
GB\r
\r
+70-B3-D5 (hex) Kospel S.A.\r
+249000-249FFF (base 16) Kospel S.A.\r
+ Olchowa 1\r
+ Koszalin 75-136\r
+ PL\r
+\r
70-B3-D5 (hex) Microchip Technology Germany II GmbH&Co.KG\r
77F000-77FFFF (base 16) Microchip Technology Germany II GmbH&Co.KG\r
Emmy-Noether-Straße 14\r
San Luis Obispo CA 93401\r
US\r
\r
-70-B3-D5 (hex) Kospel S.A.\r
-249000-249FFF (base 16) Kospel S.A.\r
- Olchowa 1\r
- Koszalin 75-136\r
- PL\r
-\r
70-B3-D5 (hex) Coheros Oy\r
D2E000-D2EFFF (base 16) Coheros Oy\r
Tammukkakatu 6\r
Broomfield CO 80021\r
US\r
\r
-70-B3-D5 (hex) Taejin InfoTech\r
-A75000-A75FFF (base 16) Taejin InfoTech\r
- 40, Imi-ro, A-411\r
- Uiwang-si Gyeonggi-do 16006\r
- KR\r
-\r
-70-B3-D5 (hex) ARCLAN'SYSTEM\r
-25C000-25CFFF (base 16) ARCLAN'SYSTEM\r
- 1140 rue Ampère - Actimart II - Lot 9\r
- AIX EN PROVENCE 13290\r
- FR\r
-\r
70-B3-D5 (hex) Smart Embedded Systems\r
A09000-A09FFF (base 16) Smart Embedded Systems\r
6701 Koll Center Parkway #250\r
Kaohsiung City 802\r
TW\r
\r
+70-B3-D5 (hex) Taejin InfoTech\r
+A75000-A75FFF (base 16) Taejin InfoTech\r
+ 40, Imi-ro, A-411\r
+ Uiwang-si Gyeonggi-do 16006\r
+ KR\r
+\r
+70-B3-D5 (hex) ARCLAN'SYSTEM\r
+25C000-25CFFF (base 16) ARCLAN'SYSTEM\r
+ 1140 rue Ampère - Actimart II - Lot 9\r
+ AIX EN PROVENCE 13290\r
+ FR\r
+\r
70-B3-D5 (hex) LLC Sarov Innovative Technologies (WIZOLUTION)\r
50F000-50FFFF (base 16) LLC Sarov Innovative Technologies (WIZOLUTION)\r
RUSSIAN FEDERATION, Nizhny Novgorod region, Varlamovskaya road, 7, build 2\r
Bristol Avon BS14 0AF\r
GB\r
\r
+70-B3-D5 (hex) INVISSYS\r
+AD4000-AD4FFF (base 16) INVISSYS\r
+ 25 rue marcel issartier\r
+ merignac 33700\r
+ FR\r
+\r
70-B3-D5 (hex) LM-Instruments Oy\r
5AC000-5ACFFF (base 16) LM-Instruments Oy\r
Norrbyn rantatie 8\r
Klein-Winternheim Rheinland-Pfalz 55270\r
DE\r
\r
-70-B3-D5 (hex) Sanmina Israel\r
-C18000-C18FFF (base 16) Sanmina Israel\r
- Koren Industrial Zone , POBox 102\r
- Maalot Israel 2101002\r
- IL\r
-\r
-70-B3-D5 (hex) INVISSYS\r
-AD4000-AD4FFF (base 16) INVISSYS\r
- 25 rue marcel issartier\r
- merignac 33700\r
- FR\r
-\r
70-B3-D5 (hex) Panoramic Power\r
669000-669FFF (base 16) Panoramic Power\r
15 Atir Yeda\r
Kfar Saba 4464312\r
IL\r
\r
-70-B3-D5 (hex) Panoramic Power\r
-06D000-06DFFF (base 16) Panoramic Power\r
- Atir Yeda 15\r
- Kfar Saba 4464312\r
+70-B3-D5 (hex) Sanmina Israel\r
+C18000-C18FFF (base 16) Sanmina Israel\r
+ Koren Industrial Zone , POBox 102\r
+ Maalot Israel 2101002\r
IL\r
\r
70-B3-D5 (hex) Avlinkpro\r
Totowa NJ 07512\r
US\r
\r
-70-B3-D5 (hex) DECYBEN\r
-683000-683FFF (base 16) DECYBEN\r
- 170 Rue Raymond Losserand\r
- Paris 75014\r
- FR\r
+70-B3-D5 (hex) Panoramic Power\r
+06D000-06DFFF (base 16) Panoramic Power\r
+ Atir Yeda 15\r
+ Kfar Saba 4464312\r
+ IL\r
\r
70-B3-D5 (hex) C4I Systems Ltd\r
5C6000-5C6FFF (base 16) C4I Systems Ltd\r
Bsel BS 4057\r
CH\r
\r
-70-B3-D5 (hex) YUYAMA MFG Co.,Ltd\r
-BBB000-BBBFFF (base 16) YUYAMA MFG Co.,Ltd\r
- 3-3-1\r
- TOYONAKASHI OSAKA 561-0841\r
+70-B3-D5 (hex) DECYBEN\r
+683000-683FFF (base 16) DECYBEN\r
+ 170 Rue Raymond Losserand\r
+ Paris 75014\r
+ FR\r
+\r
+70-B3-D5 (hex) adnexo GmbH\r
+4E3000-4E3FFF (base 16) adnexo GmbH\r
+ Rennweg 38\r
+ Zürich Zurich 8001\r
+ CH\r
+\r
+70-B3-D5 (hex) Sumitomo Heavy Industries, Ltd.\r
+C23000-C23FFF (base 16) Sumitomo Heavy Industries, Ltd.\r
+ 5-2, Soubiraki-cho\r
+ Niihama Ehime 792-8588\r
JP\r
\r
-70-B3-D5 (hex) D-E-K GmbH & Co.KG\r
-219000-219FFF (base 16) D-E-K GmbH & Co.KG\r
- Südfeld 9\r
- Ascheberg / Herbern 58387\r
- DE\r
+70-B3-D5 (hex) LLC Open Converged Networks\r
+73F000-73FFFF (base 16) LLC Open Converged Networks\r
+ st. Stepana Shutova 8-1-34\r
+ Moscow Moscow 109380\r
+ RU\r
\r
-70-B3-D5 (hex) AvMap srlu\r
-B4F000-B4FFFF (base 16) AvMap srlu\r
- Viale Zaccagna 6\r
- Carrara 54033\r
- IT\r
+70-B3-D5 (hex) CoreEL Technologies Pvt Ltd\r
+10D000-10DFFF (base 16) CoreEL Technologies Pvt Ltd\r
+ #21, 7th Main, 1st Block ,Koramangala, \r
+ Bangalore Karnataka 560034\r
+ IN\r
\r
-70-B3-D5 (hex) Theatrixx Technologies, Inc.\r
-5DD000-5DDFFF (base 16) Theatrixx Technologies, Inc.\r
- 1655 Richardson\r
- Montreal QC H3K3J7\r
- CA\r
+70-B3-D5 (hex) Shenzhen Vikings Technology Co., Ltd.\r
+46A000-46AFFF (base 16) Shenzhen Vikings Technology Co., Ltd.\r
+ Floor 3, building 2, tiantong industrial park, gaofeng community, dalang street, longhua district\r
+ Shenzhen Guangdong 518109\r
+ CN\r
\r
-70-B3-D5 (hex) EA Elektroautomatik GmbH & Co. KG\r
-6BC000-6BCFFF (base 16) EA Elektroautomatik GmbH & Co. KG\r
- Helmholtzstraße 31-33\r
- Viersen NRW 41747\r
- DE\r
+70-B3-D5 (hex) RCH Vietnam Limited Liability Company\r
+294000-294FFF (base 16) RCH Vietnam Limited Liability Company\r
+ Workshop F.01B-2, Lot No. F.01B Long Hau\r
+ Ho Chi Minh City Ho Chi Minh 70000\r
+ VN\r
\r
-70-B3-D5 (hex) Adolf Nissen Elektrobau GmbH + Co. KG\r
-101000-101FFF (base 16) Adolf Nissen Elektrobau GmbH + Co. KG\r
- Friedrichstädter Chaussee 4\r
- Tönning 25832\r
- DE\r
+70-B3-D5 (hex) C W F Hamilton & Co Ltd\r
+82A000-82AFFF (base 16) C W F Hamilton & Co Ltd\r
+ 20 Lunns Road, Middleton\r
+ Christchurch Canterbury 8024\r
+ NZ\r
\r
-70-B3-D5 (hex) TinTec Co., Ltd.\r
-5AE000-5AEFFF (base 16) TinTec Co., Ltd.\r
- #825 101, Magokseo-ro, Gangseo-gu\r
- Seoul 07798\r
- KR\r
+70-B3-D5 (hex) aelettronica group srl\r
+AD9000-AD9FFF (base 16) aelettronica group srl\r
+ via matteotti,22\r
+ gaggiano milano 20083\r
+ IT\r
+\r
+70-B3-D5 (hex) Wuhan Xingtuxinke ELectronic Co.,Ltd\r
+165000-165FFF (base 16) Wuhan Xingtuxinke ELectronic Co.,Ltd\r
+ NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China\r
+ Wuhan Hubei 430074\r
+ CN\r
+\r
+70-B3-D5 (hex) BESO sp. z o.o.\r
+D7D000-D7DFFF (base 16) BESO sp. z o.o.\r
+ Mlynska 1a\r
+ Brzeg Dolny 56-120\r
+ PL\r
+\r
+70-B3-D5 (hex) PCTEL\r
+ED2000-ED2FFF (base 16) PCTEL\r
+ 22600 gateway center drive, Suite 100\r
+ Clarksburg MD 20871\r
+ US\r
+\r
+70-B3-D5 (hex) Potter Electric Signal Co. LLC\r
+70C000-70CFFF (base 16) Potter Electric Signal Co. LLC\r
+ 1609 Park 370 Place\r
+ Hazelwood MO 63042\r
+ US\r
+\r
+70-B3-D5 (hex) Computechnic AG\r
+7D4000-7D4FFF (base 16) Computechnic AG\r
+ Rietlistrasse 3\r
+ Rorschacherberg Goldach 9403\r
+ CH\r
+\r
+70-B3-D5 (hex) National Time & Signal Corp.\r
+846000-846FFF (base 16) National Time & Signal Corp.\r
+ 28045 Oakland Oaks Ct\r
+ Wixom MI 48393\r
+ US\r
+\r
+70-B3-D5 (hex) Senior Group LLC\r
+D19000-D19FFF (base 16) Senior Group LLC\r
+ 1300 West Main Street\r
+ Louisville KY 40203\r
+ US\r
+\r
+70-B3-D5 (hex) Sportsbeams Lighting, Inc.\r
+9C2000-9C2FFF (base 16) Sportsbeams Lighting, Inc.\r
+ 1260 Pine Forest Cir\r
+ Round Rock TX 78665\r
+ US\r
+\r
+70-B3-D5 (hex) Amico Corporation\r
+B90000-B90FFF (base 16) Amico Corporation\r
+ 85 Fulton Way\r
+ Richmond Hill ON L4B 2N4\r
+ CA\r
+\r
+70-B3-D5 (hex) ICTK Holdings\r
+5C9000-5C9FFF (base 16) ICTK Holdings\r
+ 3F Ventureforum B'd, Pangyodae-ro\r
+ Seung-nam Si Gyeonggi-Do 13488\r
+ KR\r
+\r
+70-B3-D5 (hex) Honeywell/Intelligrated\r
+94C000-94CFFF (base 16) Honeywell/Intelligrated\r
+ 10045 International Blvd\r
+ Cincinnati OH 45246\r
+ US\r
+\r
+70-B3-D5 (hex) TIAMA\r
+8A1000-8A1FFF (base 16) TIAMA\r
+ ZA des Plattes - 1 Chemin des Plattes\r
+ VOURLES 69390 \r
+ FR\r
+\r
+70-B3-D5 (hex) LARIMART SPA\r
+536000-536FFF (base 16) LARIMART SPA\r
+ VIA DI TORREVECCHIA\r
+ ROMA 00168\r
+ IT\r
+\r
+70-B3-D5 (hex) Transformational Security, LLC\r
+762000-762FFF (base 16) Transformational Security, LLC\r
+ 9101 Guilford Rd\r
+ Columbia MD 21046\r
+ US\r
+\r
+70-B3-D5 (hex) Breas Medical AB\r
+EDA000-EDAFFF (base 16) Breas Medical AB\r
+ Företagsvägen 1\r
+ Mölnlycke SE-435 33\r
+ SE\r
+\r
+70-B3-D5 (hex) Ketronixs Sdn Bhd\r
+6AC000-6ACFFF (base 16) Ketronixs Sdn Bhd\r
+ 51-17-B Menara BHL Bank, Jalan Sultan Ahmad Shah\r
+ Georgetown Penang 10050\r
+ MY\r
+\r
+70-B3-D5 (hex) Packet Power\r
+B54000-B54FFF (base 16) Packet Power\r
+ 2716 Summer Str. N.E.\r
+ Minneapolis MN 55413\r
+ US\r
+\r
+70-B3-D5 (hex) Alto Aviation\r
+D0F000-D0FFFF (base 16) Alto Aviation\r
+ 86 Leominster Road\r
+ Sterling MA 01564\r
+ US\r
+\r
+70-B3-D5 (hex) BOE Technology Group Co., Ltd.\r
+5A1000-5A1FFF (base 16) BOE Technology Group Co., Ltd.\r
+ No.12 Xihuanzhong RD, BDA\r
+ Beijing Beijing 100176\r
+ CN\r
+\r
+70-B3-D5 (hex) KAEONIT\r
+992000-992FFF (base 16) KAEONIT\r
+ 51 boulevard Tristan Corbiere\r
+ Marseille 13012\r
+ FR\r
+\r
+70-B3-D5 (hex) LG Electronics\r
+A23000-A23FFF (base 16) LG Electronics\r
+ LG Science Park, 10, Magokjungang 10-ro, GangSeo-gu\r
+ SEOUL 07796\r
+ KR\r
+\r
+70-B3-D5 (hex) YUYAMA MFG Co.,Ltd\r
+BBB000-BBBFFF (base 16) YUYAMA MFG Co.,Ltd\r
+ 3-3-1\r
+ TOYONAKASHI OSAKA 561-0841\r
+ JP\r
+\r
+70-B3-D5 (hex) D-E-K GmbH & Co.KG\r
+219000-219FFF (base 16) D-E-K GmbH & Co.KG\r
+ Südfeld 9\r
+ Ascheberg / Herbern 58387\r
+ DE\r
+\r
+70-B3-D5 (hex) AvMap srlu\r
+B4F000-B4FFFF (base 16) AvMap srlu\r
+ Viale Zaccagna 6\r
+ Carrara 54033\r
+ IT\r
+\r
+70-B3-D5 (hex) Theatrixx Technologies, Inc.\r
+5DD000-5DDFFF (base 16) Theatrixx Technologies, Inc.\r
+ 1655 Richardson\r
+ Montreal QC H3K3J7\r
+ CA\r
+\r
+70-B3-D5 (hex) EA Elektroautomatik GmbH & Co. KG\r
+6BC000-6BCFFF (base 16) EA Elektroautomatik GmbH & Co. KG\r
+ Helmholtzstraße 31-33\r
+ Viersen NRW 41747\r
+ DE\r
+\r
+70-B3-D5 (hex) Adolf Nissen Elektrobau GmbH + Co. KG\r
+101000-101FFF (base 16) Adolf Nissen Elektrobau GmbH + Co. KG\r
+ Friedrichstädter Chaussee 4\r
+ Tönning 25832\r
+ DE\r
+\r
+70-B3-D5 (hex) TinTec Co., Ltd.\r
+5AE000-5AEFFF (base 16) TinTec Co., Ltd.\r
+ #825 101, Magokseo-ro, Gangseo-gu\r
+ Seoul 07798\r
+ KR\r
\r
70-B3-D5 (hex) Blue Storm Associates, Inc.\r
9EA000-9EAFFF (base 16) Blue Storm Associates, Inc.\r
Nagareyama Chiba 2700145\r
JP\r
\r
-70-B3-D5 (hex) Private\r
-73A000-73AFFF (base 16) Private\r
-\r
70-B3-D5 (hex) Rako Controls Ltd\r
084000-084FFF (base 16) Rako Controls Ltd\r
Knight Road\r
F-13752 LES PENNES MIRABEAU CS30084\r
FR\r
\r
-70-B3-D5 (hex) YG COMPANY CO., LTD\r
-63F000-63FFFF (base 16) YG COMPANY CO., LTD\r
- 65, Techno 3-ro\r
- Daejeon Yuseong-gu 34016\r
- KR\r
-\r
70-B3-D5 (hex) SYS TEC electronic GmbH\r
7FD000-7FDFFF (base 16) SYS TEC electronic GmbH\r
Am Windrad 2\r
Hanoi 123456\r
VN\r
\r
-70-B3-D5 (hex) Xcenter AS\r
-E1C000-E1CFFF (base 16) Xcenter AS\r
- Kjorbokollen 30\r
- Sandvika - 1337\r
- NO\r
-\r
70-B3-D5 (hex) Kohler Mira Ltd\r
F55000-F55FFF (base 16) Kohler Mira Ltd\r
Cromwell Road\r
Nijkerk n.a. 3861SC\r
NL\r
\r
-70-B3-D5 (hex) BRS Sistemas Eletronicos\r
-D97000-D97FFF (base 16) BRS Sistemas Eletronicos\r
- Rua Gomes de Freitas, 491/204\r
- Porto Alegre - RS (Non U.S.) 91380-000\r
- BR\r
-\r
70-B3-D5 (hex) Li Seng Technology Ltd.,\r
4F0000-4F0FFF (base 16) Li Seng Technology Ltd.,\r
901., Siu Fung Hong Building\r
Taoyuan 330\r
TW\r
\r
-70-B3-D5 (hex) Zhuhai Lonl electric Co.,Ltd.\r
-EA9000-EA9FFF (base 16) Zhuhai Lonl electric Co.,Ltd.\r
- 2nd floor, building B3, nanfang software park, xiangzhou district\r
- Zhuhai Guangdong 519000\r
- CN\r
-\r
70-B3-D5 (hex) PolyTech A/S\r
F4C000-F4CFFF (base 16) PolyTech A/S\r
HI Park 445\r
Herning Herning 7400\r
DK\r
\r
+70-B3-D5 (hex) Zhuhai Lonl electric Co.,Ltd.\r
+EA9000-EA9FFF (base 16) Zhuhai Lonl electric Co.,Ltd.\r
+ 2nd floor, building B3, nanfang software park, xiangzhou district\r
+ Zhuhai Guangdong 519000\r
+ CN\r
+\r
70-B3-D5 (hex) Shanghai Tiancheng Communication Technology Corporation\r
1C3000-1C3FFF (base 16) Shanghai Tiancheng Communication Technology Corporation\r
No.618,Guangxing Rd.,Songjiang \r
shanghai 200090\r
CN\r
\r
-70-B3-D5 (hex) T&M Media Pty Ltd\r
-B41000-B41FFF (base 16) T&M Media Pty Ltd\r
- 6, 476 Gardeners Road\r
- Alexandria NSW 2015\r
- AU\r
-\r
70-B3-D5 (hex) SAMBO HITECH\r
282000-282FFF (base 16) SAMBO HITECH\r
469,Seokjung-ro,Namdong-Gu\r
Redditch Worcestershire B98 8LG\r
GB\r
\r
-70-B3-D5 (hex) Shenzhen CAMERAY ELECTRONIC CO., LTD\r
-1E2000-1E2FFF (base 16) Shenzhen CAMERAY ELECTRONIC CO., LTD\r
- 4-5FL, Building 1, Guanghui Science, and Technology Park; Minqing Road, Longhua Town\r
- shenzhen GD 518109\r
- CN\r
-\r
-70-B3-D5 (hex) Vulcan Wireless Inc.\r
-E4D000-E4DFFF (base 16) Vulcan Wireless Inc.\r
- 2218 Faraday Ave Suite 110\r
- Carlsbad CA 92008\r
- US\r
-\r
70-B3-D5 (hex) ERA TOYS LIMITED\r
193000-193FFF (base 16) ERA TOYS LIMITED\r
Room 505, 5th Floor, Beverley Commercial Centre, 87-105 Chatham Road South\r
Tsim Sha Tsui Kowloon 0000\r
HK\r
\r
+70-B3-D5 (hex) T&M Media Pty Ltd\r
+B41000-B41FFF (base 16) T&M Media Pty Ltd\r
+ 6, 476 Gardeners Road\r
+ Alexandria NSW 2015\r
+ AU\r
+\r
+70-B3-D5 (hex) A&T Corporation\r
+32E000-32EFFF (base 16) A&T Corporation\r
+ 2023-1\r
+ Endo, Fujisawa, Kanagawa 252-0816\r
+ JP\r
+\r
70-B3-D5 (hex) Scorpion Precision Industry (HK)CO. Ltd.\r
02B000-02BFFF (base 16) Scorpion Precision Industry (HK)CO. Ltd.\r
16th Floor, Excelsior Industrial Building,68-76 Sha Tsui Road,\r
Tsuen Wan New Territories 999077\r
HK\r
\r
-70-B3-D5 (hex) Cryptotronix LLC\r
-0DB000-0DBFFF (base 16) Cryptotronix LLC\r
- P.O. Box 273029\r
- Fort Collins CO 80525\r
+70-B3-D5 (hex) Shenzhen CAMERAY ELECTRONIC CO., LTD\r
+1E2000-1E2FFF (base 16) Shenzhen CAMERAY ELECTRONIC CO., LTD\r
+ 4-5FL, Building 1, Guanghui Science, and Technology Park; Minqing Road, Longhua Town\r
+ shenzhen GD 518109\r
+ CN\r
+\r
+70-B3-D5 (hex) Vulcan Wireless Inc.\r
+E4D000-E4DFFF (base 16) Vulcan Wireless Inc.\r
+ 2218 Faraday Ave Suite 110\r
+ Carlsbad CA 92008\r
US\r
\r
70-B3-D5 (hex) MIVO Technology AB\r
Stockholm 11215\r
SE\r
\r
-70-B3-D5 (hex) A&T Corporation\r
-32E000-32EFFF (base 16) A&T Corporation\r
- 2023-1\r
- Endo, Fujisawa, Kanagawa 252-0816\r
- JP\r
+70-B3-D5 (hex) Cryptotronix LLC\r
+0DB000-0DBFFF (base 16) Cryptotronix LLC\r
+ P.O. Box 273029\r
+ Fort Collins CO 80525\r
+ US\r
\r
70-B3-D5 (hex) TOMEI TSUSHIN KOGYO CO,.LTD\r
FB1000-FB1FFF (base 16) TOMEI TSUSHIN KOGYO CO,.LTD\r
Inazawa Shi Aichi ken 4928274\r
JP\r
\r
-70-B3-D5 (hex) DogWatch Inc\r
-1E7000-1E7FFF (base 16) DogWatch Inc\r
- 10 Michigan Drive\r
- Natick 01760\r
- US\r
-\r
70-B3-D5 (hex) RCH Vietnam Limited Liability Company\r
C09000-C09FFF (base 16) RCH Vietnam Limited Liability Company\r
Workshop F.01B-2, Lot No. F.01B Long Hau\r
Boulder CO 80301\r
US\r
\r
+70-B3-D5 (hex) DogWatch Inc\r
+1E7000-1E7FFF (base 16) DogWatch Inc\r
+ 10 Michigan Drive\r
+ Natick 01760\r
+ US\r
+\r
+70-B3-D5 (hex) Grossenbacher Systeme AG\r
+B75000-B75FFF (base 16) Grossenbacher Systeme AG\r
+ Spinnereistrasse 10\r
+ St. Gallen 9008\r
+ CH\r
+\r
+70-B3-D5 (hex) ITsynergy Ltd\r
+D2A000-D2AFFF (base 16) ITsynergy Ltd\r
+ 9 Bonhill Street\r
+ London EC2A 4DJ\r
+ GB\r
+\r
70-B3-D5 (hex) SHENZHEN HUINENGYUAN Technology Co., Ltd\r
A83000-A83FFF (base 16) SHENZHEN HUINENGYUAN Technology Co., Ltd\r
Room 206, 3 Building, Hongwanchuangke Center, Gushu, Xixiang, Baoan District\r
Littleton MA 01460\r
US\r
\r
-70-B3-D5 (hex) Inventeq B.V.\r
-529000-529FFF (base 16) Inventeq B.V.\r
- Ravenlaan 27\r
- Blaricum 1261WT\r
- NL\r
-\r
-70-B3-D5 (hex) Grossenbacher Systeme AG\r
-B75000-B75FFF (base 16) Grossenbacher Systeme AG\r
- Spinnereistrasse 10\r
- St. Gallen 9008\r
- CH\r
+70-B3-D5 (hex) Inventeq B.V.\r
+529000-529FFF (base 16) Inventeq B.V.\r
+ Ravenlaan 27\r
+ Blaricum 1261WT\r
+ NL\r
+\r
+70-B3-D5 (hex) Vaunix Technology Corporation\r
+EE6000-EE6FFF (base 16) Vaunix Technology Corporation\r
+ 7 New Pasture Rd\r
+ Newburyport MA 01950\r
+ US\r
+\r
+70-B3-D5 (hex) Portrait Displays, Inc.\r
+D77000-D77FFF (base 16) Portrait Displays, Inc.\r
+ 6663 OWENS DR\r
+ PLEASANTON CA 94588\r
+ US\r
+\r
+70-B3-D5 (hex) chargeBIG\r
+869000-869FFF (base 16) chargeBIG\r
+ Pragstraße 26-46\r
+ Stuttgart 70376\r
+ DE\r
+\r
+70-B3-D5 (hex) Tricom Research Inc.\r
+601000-601FFF (base 16) Tricom Research Inc.\r
+ 17791 Sky Park Circle Suite GHJ\r
+ Irvine CA 92614\r
+ US\r
+\r
+70-B3-D5 (hex) Sprintshield d.o.o.\r
+B03000-B03FFF (base 16) Sprintshield d.o.o.\r
+ Marina Getaldi?a 3\r
+ Velika Gorica 10410\r
+ HR\r
+\r
+70-B3-D5 (hex) KeyProd\r
+473000-473FFF (base 16) KeyProd\r
+ 66 avenue des Champs Elysées\r
+ Paris 77008\r
+ FR\r
+\r
+70-B3-D5 (hex) Mictrotrac Retsch GmbH\r
+F09000-F09FFF (base 16) Mictrotrac Retsch GmbH\r
+ Retsch-Allee 1-5\r
+ Haan NRW 42781\r
+ DE\r
+\r
+70-B3-D5 (hex) MB connect line GmbH Fernwartungssysteme\r
+6D7000-6D7FFF (base 16) MB connect line GmbH Fernwartungssysteme\r
+ Winnettener Straße 6\r
+ Dinkelsbuehl Bavaria 91550\r
+ DE\r
+\r
+70-B3-D5 (hex) EarTex\r
+E01000-E01FFF (base 16) EarTex\r
+ 41 Corsham Street\r
+ London England N1 6DR\r
+ GB\r
+\r
+70-B3-D5 (hex) Scharco Elektronik GmbH\r
+C72000-C72FFF (base 16) Scharco Elektronik GmbH\r
+ Tilsiter Strasse 8\r
+ Wuppertal NRW 42277\r
+ DE\r
+\r
+70-B3-D5 (hex) AVL DiTEST GmbH\r
+78D000-78DFFF (base 16) AVL DiTEST GmbH\r
+ Alte Poststrasse 156\r
+ Graz 8020\r
+ AT\r
+\r
+70-B3-D5 (hex) WARECUBE,INC\r
+AD3000-AD3FFF (base 16) WARECUBE,INC\r
+ #A-811, 142-10, Saneop-ro, 156beon-gil, Gwonseon-gu\r
+ Suwon-si 16648\r
+ KR\r
+\r
+70-B3-D5 (hex) myUpTech AB\r
+FC3000-FC3FFF (base 16) myUpTech AB\r
+ Box 14\r
+ Markaryd 28532\r
+ SE\r
+\r
+70-B3-D5 (hex) TextSpeak Corporation\r
+F0E000-F0EFFF (base 16) TextSpeak Corporation\r
+ 55 Greensfarm RD 2nd Flr 200-69\r
+ Westport CT 06880\r
+ US\r
+\r
+70-B3-D5 (hex) Techimp - Altanova group Srl\r
+6DB000-6DBFFF (base 16) Techimp - Altanova group Srl\r
+ via Toscana 11/C\r
+ Zola Predosa Bologna 40069\r
+ IT\r
+\r
+70-B3-D5 (hex) WAYNE ANALYTICS LLC\r
+301000-301FFF (base 16) WAYNE ANALYTICS LLC\r
+ 100 Rialto Place, Suite 721\r
+ MELBOURNE FL 32901\r
+ US\r
+\r
+70-B3-D5 (hex) HongSeok Ltd.\r
+30A000-30AFFF (base 16) HongSeok Ltd.\r
+ 166, Osan-ro, Osan-myeon\r
+ Iksan-si Jeollabuk-do 54670\r
+ KR\r
+\r
+70-B3-D5 (hex) GS Elektromedizinsiche Geräte G. Stemple GmbH\r
+3D3000-3D3FFF (base 16) GS Elektromedizinsiche Geräte G. Stemple GmbH\r
+ Hauswiesenstr. 26\r
+ Kaufering Bayern 86916\r
+ DE\r
+\r
+70-B3-D5 (hex) Hunan Lianzhong Technology Co.,Ltd.\r
+F4E000-F4EFFF (base 16) Hunan Lianzhong Technology Co.,Ltd.\r
+ 5th Floor, Chuangye Building, Economic and Technological Development Zone,\r
+ Loudi Hunan 417000\r
+ CN\r
+\r
+70-B3-D5 (hex) Diretta\r
+C90000-C90FFF (base 16) Diretta\r
+ 3-4-9 HigashiKomagata Sumida-ku\r
+ Tokyo 1300005\r
+ JP\r
+\r
+70-B3-D5 (hex) RoomMate AS\r
+E1C000-E1CFFF (base 16) RoomMate AS\r
+ Hamangskogen 60\r
+ Sandvika - 1338\r
+ NO\r
+\r
+70-B3-D5 (hex) DARBS Inc.\r
+63F000-63FFFF (base 16) DARBS Inc.\r
+ #153, #154, 65 Techno 3-ro\r
+ Daejeon Yuseong-gu 34016\r
+ KR\r
+\r
+70-B3-D5 (hex) Sequent AG\r
+291000-291FFF (base 16) Sequent AG\r
+ Eptingerstrasse 3\r
+ Basel 4052\r
+ CH\r
+\r
+70-B3-D5 (hex) KODENSHI CORP.\r
+DBA000-DBAFFF (base 16) KODENSHI CORP.\r
+ 161,Jyuichi,Makishima\r
+ UJI KYOTO 6110041\r
+ JP\r
+\r
+70-B3-D5 (hex) ID Quantique SA\r
+657000-657FFF (base 16) ID Quantique SA\r
+ 3 chemin de la marbrerie\r
+ Carouge 1227\r
+ CH\r
+\r
+70-B3-D5 (hex) Profusion Limited\r
+29A000-29AFFF (base 16) Profusion Limited\r
+ Aviation Way\r
+ Southend on Sea Essex SS2 6UN\r
+ GB\r
+\r
+70-B3-D5 (hex) CDS Institute of Management Strategy, Inc.\r
+3A3000-3A3FFF (base 16) CDS Institute of Management Strategy, Inc.\r
+ Fukuyoshi-cho Billding 7F, Roppongi 2-2-6\r
+ MINATO-KU TOKYO 1060032\r
+ JP\r
+\r
+70-B3-D5 (hex) Cubitech\r
+B86000-B86FFF (base 16) Cubitech\r
+ 4-6 Kiprou str\r
+ Tavros Athens 17778\r
+ GR\r
+\r
+70-B3-D5 (hex) BIT Group USA, Inc.\r
+C75000-C75FFF (base 16) BIT Group USA, Inc.\r
+ 15870 Bernardo center drive \r
+ San Diego CA 92127\r
+ US\r
+\r
+70-B3-D5 (hex) Zeus Control Systems Ltd\r
+E73000-E73FFF (base 16) Zeus Control Systems Ltd\r
+ 1-4 Alexander House Station Road\r
+ Nuneaton CV13 0PE\r
+ GB\r
+\r
+70-B3-D5 (hex) Flextronics International Kft.\r
+E2F000-E2FFFF (base 16) Flextronics International Kft.\r
+ Zrínyi Miklós str. 38.\r
+ Zalaegerszeg 8900\r
+ HU\r
+\r
+70-B3-D5 (hex) Beijing Lihong Create Co., Ltd.\r
+ED3000-ED3FFF (base 16) Beijing Lihong Create Co., Ltd.\r
+ Changping, Zhenxinglu. 46\r
+ Beijing 102299\r
+ CN\r
+\r
+70-B3-D5 (hex) Integra Metering SAS\r
+B6F000-B6FFFF (base 16) Integra Metering SAS\r
+ 12 rue Font Grasse\r
+ Blagnac 31700\r
+ FR\r
+\r
+70-B3-D5 (hex) AXING AG\r
+263000-263FFF (base 16) AXING AG\r
+ Gewerbehaus Moskau\r
+ Ramsen 8262\r
+ CH\r
+\r
+70-B3-D5 (hex) Paramount Bed Holdings Co., Ltd.\r
+8F1000-8F1FFF (base 16) Paramount Bed Holdings Co., Ltd.\r
+ 2-14-5. Higashisuna\r
+ Koto-ku Tokyo 136-8671\r
+ JP\r
+\r
+70-B3-D5 (hex) Schneider Electric Motion USA\r
+33D000-33DFFF (base 16) Schneider Electric Motion USA\r
+ 370 N. Main St.\r
+ Marlborough CT 06447\r
+ US\r
+\r
+70-B3-D5 (hex) Wired Broadcast Ltd\r
+177000-177FFF (base 16) Wired Broadcast Ltd\r
+ Berol House, 25 Ashley Road\r
+ LONDON County (optional) N17 9LJ\r
+ GB\r
+\r
+70-B3-D5 (hex) K&A Electronics Inc.\r
+9E4000-9E4FFF (base 16) K&A Electronics Inc.\r
+ 2609 Pinelawn dr.\r
+ La Crescenta CA 91214\r
+ US\r
+\r
+70-B3-D5 (hex) Indutherm Giesstechnologie GmbH\r
+8DE000-8DEFFF (base 16) Indutherm Giesstechnologie GmbH\r
+ Brettener Straße 32\r
+ Walzbachtal Baden-Württemberg 75045\r
+ DE\r
+\r
+70-B3-D5 (hex) MAHLE ELECTRONICS, SLU\r
+8BD000-8BDFFF (base 16) MAHLE ELECTRONICS, SLU\r
+ CTRA.MADRID-VALENCIA,KM.196\r
+ MOTILLA DEL PALANCAR CUENCA 16200\r
+ ES\r
+\r
+70-B3-D5 (hex) Intermobility\r
+6AA000-6AAFFF (base 16) Intermobility\r
+ Gabelle 18a\r
+ Bienne berne 2503\r
+ CH\r
+\r
+70-B3-D5 (hex) BRS Sistemas Eletrônicos\r
+D97000-D97FFF (base 16) BRS Sistemas Eletrônicos\r
+ Rua Gomes de Freitas, 491/204\r
+ Porto Alegre - RS (Non U.S.) 91380-000\r
+ BR\r
+\r
+70-B3-D5 (hex) Ideas srl\r
+B63000-B63FFF (base 16) Ideas srl\r
+ Via dei Brughi, 21\r
+ Gessate Milan 20060\r
+ IT\r
+\r
+70-B3-D5 (hex) 2M Technology\r
+F7D000-F7DFFF (base 16) 2M Technology\r
+ 802 Greenview Drive \r
+ Grand Prairie TX 75050\r
+ US\r
+\r
+70-B3-D5 (hex) DogWatch Inc\r
+567000-567FFF (base 16) DogWatch Inc\r
+ 10 Michigan Drive\r
+ Natick MA 01760\r
+ US\r
+\r
+70-B3-D5 (hex) Invert Robotics Ltd.\r
+FC7000-FC7FFF (base 16) Invert Robotics Ltd.\r
+ Unit A, 235 Annex Road\r
+ Christchurch 8024\r
+ NZ\r
\r
-70-B3-D5 (hex) ITsynergy Ltd\r
-D2A000-D2AFFF (base 16) ITsynergy Ltd\r
- 9 Bonhill Street\r
- London EC2A 4DJ\r
+70-B3-D5 (hex) AERIAL CAMERA SYSTEMS Ltd\r
+FC4000-FC4FFF (base 16) AERIAL CAMERA SYSTEMS Ltd\r
+ 3 The Merlin Centre, Lancaster Road,\r
+ HIGH WYCOMBE HP12 3QL\r
GB\r
\r
-70-B3-D5 (hex) Vaunix Technology Corporation\r
-EE6000-EE6FFF (base 16) Vaunix Technology Corporation\r
- 7 New Pasture Rd\r
- Newburyport MA 01950\r
- US\r
-\r
-70-B3-D5 (hex) chargeBIG\r
-869000-869FFF (base 16) chargeBIG\r
- Pragstraße 26-46\r
- Stuttgart 70376\r
- DE\r
+70-B3-D5 (hex) TUALCOM ELEKTRONIK A.S.\r
+4A3000-4A3FFF (base 16) TUALCOM ELEKTRONIK A.S.\r
+ Mustafa Kemal mah.\r
+ ANKARA 06530\r
+ TR\r
\r
-70-B3-D5 (hex) Portrait Displays, Inc.\r
-D77000-D77FFF (base 16) Portrait Displays, Inc.\r
- 6663 OWENS DR\r
- PLEASANTON CA 94588\r
+70-B3-D5 (hex) Underground Systems, Inc.\r
+424000-424FFF (base 16) Underground Systems, Inc.\r
+ 3A Trowbridge Drive\r
+ Bethel CT 06801\r
US\r
\r
-70-B3-D5 (hex) Sprintshield d.o.o.\r
-B03000-B03FFF (base 16) Sprintshield d.o.o.\r
- Marina Getaldi?a 3\r
- Velika Gorica 10410\r
- HR\r
+70-B3-D5 (hex) MPM Micro Präzision Marx GmbH\r
+F60000-F60FFF (base 16) MPM Micro Präzision Marx GmbH\r
+ Neuenweiherstraße 19\r
+ Erlangen Deutschland 91056\r
+ DE\r
\r
-70-B3-D5 (hex) Tricom Research Inc.\r
-601000-601FFF (base 16) Tricom Research Inc.\r
- 17791 Sky Park Circle Suite GHJ\r
- Irvine CA 92614\r
+70-B3-D5 (hex) DOLBY LABORATORIES, INC.\r
+73A000-73AFFF (base 16) DOLBY LABORATORIES, INC.\r
+ 100 Potrero Avenue\r
+ San Francisco CA 94103-4938\r
US\r
\r
-70-B3-D5 (hex) Mictrotrac Retsch GmbH\r
-F09000-F09FFF (base 16) Mictrotrac Retsch GmbH\r
- Retsch-Allee 1-5\r
- Haan NRW 42781\r
+70-B3-D5 (hex) Hensoldt Sensors GmbH\r
+2D3000-2D3FFF (base 16) Hensoldt Sensors GmbH\r
+ Woerthstrasse 85\r
+ Ulm Baden-Wuerttemberg 89081\r
DE\r
\r
-70-B3-D5 (hex) KeyProd\r
-473000-473FFF (base 16) KeyProd\r
- 66 avenue des Champs Elysées\r
- Paris 77008\r
- FR\r
+70-B3-D5 (hex) Kron Medidores\r
+C1E000-C1EFFF (base 16) Kron Medidores\r
+ Rua Alexandre de Gusmão, 278\r
+ São Paulo São Paulo 04760-020\r
+ BR\r
\r
-70-B3-D5 (hex) MB connect line GmbH Fernwartungssysteme\r
-6D7000-6D7FFF (base 16) MB connect line GmbH Fernwartungssysteme\r
- Winnettener Straße 6\r
- Dinkelsbuehl Bavaria 91550\r
- DE\r
+70-B3-D5 (hex) Shanghai Jupper Technology Co.Ltd\r
+157000-157FFF (base 16) Shanghai Jupper Technology Co.Ltd\r
+ Room511,building D10, Lane 3188, Xiupu road, Pudong New District\r
+ Shanghai 201315\r
+ CN\r
\r
-70-B3-D5 (hex) EarTex\r
-E01000-E01FFF (base 16) EarTex\r
- 41 Corsham Street\r
- London England N1 6DR\r
- GB\r
+70-B3-D5 (hex) S-Rain Control A/S\r
+B68000-B68FFF (base 16) S-Rain Control A/S\r
+ Oldenvej 6\r
+ Kvistgård Copenhagen DK-3490\r
+ DK\r
\r
-70-B3-D5 (hex) AVL DiTEST GmbH\r
-78D000-78DFFF (base 16) AVL DiTEST GmbH\r
- Alte Poststrasse 156\r
- Graz 8020\r
- AT\r
+70-B3-D5 (hex) Thermo Fisher Scientific Inc.\r
+D96000-D96FFF (base 16) Thermo Fisher Scientific Inc.\r
+ Thermo Fisher Scientific Inc.\r
+ Shanghai Shanghai 201206\r
+ CN\r
\r
-70-B3-D5 (hex) Scharco Elektronik GmbH\r
-C72000-C72FFF (base 16) Scharco Elektronik GmbH\r
- Tilsiter Strasse 8\r
- Wuppertal NRW 42277\r
- DE\r
+70-B3-D5 (hex) Autonomic Controls, Inc.\r
+BC7000-BC7FFF (base 16) Autonomic Controls, Inc.\r
+ 28 Kaysal Ct\r
+ ARMONK NY 10504\r
+ US\r
\r
-70-B3-D5 (hex) WARECUBE,INC\r
-AD3000-AD3FFF (base 16) WARECUBE,INC\r
- #A-811, 142-10, Saneop-ro, 156beon-gil, Gwonseon-gu\r
- Suwon-si 16648\r
- KR\r
+70-B3-D5 (hex) Yokogawa Denshikiki Co.,Ltd\r
+7F0000-7F0FFF (base 16) Yokogawa Denshikiki Co.,Ltd\r
+ Minami Shinjuku Hoshino Bldg. 5-23-13 Sendagaya\r
+ Shibuya-ku Tokyo 151-0051\r
+ JP\r
\r
-70-B3-D5 (hex) myUpTech AB\r
-FC3000-FC3FFF (base 16) myUpTech AB\r
- Box 14\r
- Markaryd 28532\r
- SE\r
+70-B3-D5 (hex) IK MULTIMEDIA PRODUCTION SRL\r
+2FB000-2FBFFF (base 16) IK MULTIMEDIA PRODUCTION SRL\r
+ Via dell'Industria 46\r
+ Modena Italy 41122\r
+ IT\r
\r
70-B3-D5 (hex) DISMUNTEL SAL\r
92C000-92CFFF (base 16) DISMUNTEL SAL\r
shenzhen China 518102\r
CN\r
\r
-70-B3-D5 (hex) Storbyte, Inc.\r
-63D000-63DFFF (base 16) Storbyte, Inc.\r
- 1800 Washington Blvd Suite 412\r
- Baltimore MD 21230\r
- US\r
-\r
70-B3-D5 (hex) Savari Inc\r
207000-207FFF (base 16) Savari Inc\r
2005 De la cruz blvd, st 111,\r
Oslo Oslo 0504\r
NO\r
\r
+70-B3-D5 (hex) RCH Vietnam Limited Liability Company\r
+6BD000-6BDFFF (base 16) RCH Vietnam Limited Liability Company\r
+ Workshop F.01B-2, Lot No. F.01B Long Hau\r
+ Ho Chi Minh City Ho Chi Minh 70000\r
+ VN\r
+\r
70-B3-D5 (hex) Gamber Johnson-LLC\r
E34000-E34FFF (base 16) Gamber Johnson-LLC\r
3001 Borham Ave\r
Stevens Point WI 54481\r
US\r
\r
-70-B3-D5 (hex) RCH Vietnam Limited Liability Company\r
-6BD000-6BDFFF (base 16) RCH Vietnam Limited Liability Company\r
- Workshop F.01B-2, Lot No. F.01B Long Hau\r
- Ho Chi Minh City Ho Chi Minh 70000\r
- VN\r
+70-B3-D5 (hex) YUYAMA MFG Co.,Ltd\r
+C2B000-C2BFFF (base 16) YUYAMA MFG Co.,Ltd\r
+ 3-3-1\r
+ TOYONAKASHI OSAKA 561-0841\r
+ JP\r
\r
70-B3-D5 (hex) YUYAMA MFG Co.,Ltd\r
1F2000-1F2FFF (base 16) YUYAMA MFG Co.,Ltd\r
Moscow 105484\r
RU\r
\r
-70-B3-D5 (hex) YUYAMA MFG Co.,Ltd\r
-C2B000-C2BFFF (base 16) YUYAMA MFG Co.,Ltd\r
- 3-3-1\r
- TOYONAKASHI OSAKA 561-0841\r
- JP\r
-\r
-70-B3-D5 (hex) Adcole Maryland Aerospace\r
-922000-922FFF (base 16) Adcole Maryland Aerospace\r
- 669 Forest St\r
- Marlborough MA 01752\r
- US\r
-\r
70-B3-D5 (hex) eSMART Technologies SA\r
979000-979FFF (base 16) eSMART Technologies SA\r
Chemin de la Rueyre, 118\r
Renens VD 1020\r
CH\r
\r
-70-B3-D5 (hex) Duplomatic MS spa\r
-DE1000-DE1FFF (base 16) Duplomatic MS spa\r
- Via Re Depaolini 24\r
- Parabiago Milan 20015\r
- IT\r
-\r
70-B3-D5 (hex) Axnes AS\r
65F000-65FFFF (base 16) Axnes AS\r
Terje Løvåsvei 1\r
Grimstad 4879\r
NO\r
\r
+70-B3-D5 (hex) Duplomatic MS spa\r
+DE1000-DE1FFF (base 16) Duplomatic MS spa\r
+ Via Re Depaolini 24\r
+ Parabiago Milan 20015\r
+ IT\r
+\r
70-B3-D5 (hex) Nanjing Pingguang Electronic Technology Co., Ltd\r
541000-541FFF (base 16) Nanjing Pingguang Electronic Technology Co., Ltd\r
B30/B31 4th Floor, Building#11, Shengtai Road, JiangNing District\r
NanJing 211100\r
CN\r
\r
+70-B3-D5 (hex) PHYZHON Health Inc\r
+744000-744FFF (base 16) PHYZHON Health Inc\r
+ 180 Blue Ravine Road, suite A\r
+ Folsom CA 95630\r
+ US\r
+\r
70-B3-D5 (hex) thingdust AG\r
3C1000-3C1FFF (base 16) thingdust AG\r
Moosstrasse 7\r
Lucerne Lucerne 6003\r
CH\r
\r
+70-B3-D5 (hex) Panoramic Power\r
+53A000-53AFFF (base 16) Panoramic Power\r
+ 15 Atir Yeda\r
+ Kfar Saba 4464312\r
+ IL\r
+\r
70-B3-D5 (hex) ALVAT s.r.o.\r
369000-369FFF (base 16) ALVAT s.r.o.\r
Chodovska 228/3\r
Praha 4 14100\r
CZ\r
\r
-70-B3-D5 (hex) PHYZHON Health Inc\r
-744000-744FFF (base 16) PHYZHON Health Inc\r
- 180 Blue Ravine Road, suite A\r
- Folsom CA 95630\r
- US\r
-\r
70-B3-D5 (hex) PCB Piezotronics\r
4CA000-4CAFFF (base 16) PCB Piezotronics\r
3425 Walden Avenue\r
Depew NY 14043\r
US\r
\r
-70-B3-D5 (hex) Panoramic Power\r
-53A000-53AFFF (base 16) Panoramic Power\r
- 15 Atir Yeda\r
- Kfar Saba 4464312\r
- IL\r
-\r
70-B3-D5 (hex) STEP sarl\r
481000-481FFF (base 16) STEP sarl\r
11, avenue Aristide Berges\r
LANCEY ISERE 38190\r
FR\r
+\r
+70-B3-D5 (hex) Mianjie Technology\r
+8FC000-8FCFFF (base 16) Mianjie Technology\r
+ Zhubang2000 Building2 1205\r
+ Beijing 100000\r
+ CN\r
+\r
+70-B3-D5 (hex) Redstone Sunshine(Beijing)Technology Co.,Ltd.\r
+6C9000-6C9FFF (base 16) Redstone Sunshine(Beijing)Technology Co.,Ltd.\r
+ Floor 2,Block B,Fu Xing Office Building,He Tao Yuan NO.30,Guan Dong Dian Bei Jie,Chao Yang District\r
+ Beijing 100020\r
+ CN\r
+\r
+70-B3-D5 (hex) ZPAS S.A.\r
+2D9000-2D9FFF (base 16) ZPAS S.A.\r
+ Przygorze 209\r
+ Woliborz Lower Silesian (Dolno?l?skie) 57-431\r
+ PL\r
+\r
+70-B3-D5 (hex) HAI ROBOTICS Co., Ltd.\r
+0B7000-0B7FFF (base 16) HAI ROBOTICS Co., Ltd.\r
+ Room 101, 1st Floor, Xuda Industrial Park, Xiaweiyuanyixiang Xixiang, Bao'an District\r
+ SHENZHEN GUANGDONG 518000\r
+ CN\r
+\r
+70-B3-D5 (hex) inomatic GmbH\r
+1CA000-1CAFFF (base 16) inomatic GmbH\r
+ Karl-Braun-Straße 12\r
+ Nordhorn 48531\r
+ DE\r
+\r
+70-B3-D5 (hex) Integer.pl S.A.\r
+2D1000-2D1FFF (base 16) Integer.pl S.A.\r
+ Wielicka 28\r
+ Krakow 30-552\r
+ PL\r
+\r
+70-B3-D5 (hex) Benchmark Electronics - Secure Technology\r
+67C000-67CFFF (base 16) Benchmark Electronics - Secure Technology\r
+ 1740 E Wilshire Ave\r
+ Santa Ana CA 92705\r
+ US\r
+\r
+70-B3-D5 (hex) Beijing Aumiwalker technology CO.,LTD\r
+C7C000-C7CFFF (base 16) Beijing Aumiwalker technology CO.,LTD\r
+ Floor 6, Tower 1, No.1 Zhonghe Road Fengtai Science Park Beijing P.R.C.\r
+ Beijing Beijing 100071\r
+ CN\r
+\r
+70-B3-D5 (hex) Peter Huber Kaeltemaschinenbau AG\r
+DC4000-DC4FFF (base 16) Peter Huber Kaeltemaschinenbau AG\r
+ Werner-von-Siemens-Str. 1\r
+ Offenburg Ba-Wue 77656\r
+ DE\r
+\r
+70-B3-D5 (hex) Kazdream Technologies LLP\r
+089000-089FFF (base 16) Kazdream Technologies LLP\r
+ 10, Turkestan Str.\r
+ Nur-Sultan 010000\r
+ KZ\r
+\r
+70-B3-D5 (hex) Cardinal Scales Manufacturing Co\r
+E5A000-E5AFFF (base 16) Cardinal Scales Manufacturing Co\r
+ 203 East Daugherty Street\r
+ Webb City MO 64870\r
+ US\r
+\r
+70-B3-D5 (hex) Military Research Institute\r
+2F7000-2F7FFF (base 16) Military Research Institute\r
+ Veslarska 230\r
+ Brno 63700\r
+ CZ\r
+\r
+70-B3-D5 (hex) Farmpro Ltd\r
+17C000-17CFFF (base 16) Farmpro Ltd\r
+ 806, 28 Digitalro 30gil, Gurogu\r
+ Seoul 08389\r
+ KR\r
+\r
+70-B3-D5 (hex) Talleres de Escoriaza SA\r
+E83000-E83FFF (base 16) Talleres de Escoriaza SA\r
+ Barrio Ventas, 35\r
+ Irun Gipuzkoa 20305\r
+ ES\r
+\r
+70-B3-D5 (hex) Network Innovations\r
+DA7000-DA7FFF (base 16) Network Innovations\r
+ 4950 West Prospect Road\r
+ Fort Lauderdale FL 33309\r
+ US\r
+\r
+70-B3-D5 (hex) SLAT\r
+2C8000-2C8FFF (base 16) SLAT\r
+ 11 Rue Jean-Elysée DUPUY\r
+ Champagne au Mont d'Or Rhône 69543\r
+ FR\r
+\r
+70-B3-D5 (hex) Grossenbacher Systeme AG\r
+5FE000-5FEFFF (base 16) Grossenbacher Systeme AG\r
+ Spinnereistrasse 10\r
+ St. Gallen 9008\r
+ CH\r
+\r
+70-B3-D5 (hex) QUISS GmbH\r
+AAB000-AABFFF (base 16) QUISS GmbH\r
+ Lilienthalstraße 5\r
+ Puchheim 82178\r
+ DE\r
+\r
+70-B3-D5 (hex) Shanghai Qinyue Communication Technology Co., Ltd.\r
+B57000-B57FFF (base 16) Shanghai Qinyue Communication Technology Co., Ltd.\r
+ Room 101,Building 51,Lane 588,ShuPing Road,Jiading District\r
+ Shanghai 201808\r
+ CN\r
+\r
+70-B3-D5 (hex) Selmatec AS\r
+8FE000-8FEFFF (base 16) Selmatec AS\r
+ Berghagen 3\r
+ Oslo Select One 1405\r
+ NO\r
+\r
+70-B3-D5 (hex) Accolade Technology Inc\r
+87A000-87AFFF (base 16) Accolade Technology Inc\r
+ 124 Grove Street, Suite 315\r
+ FRANKLIN MA 02038\r
+ US\r
+\r
+70-B3-D5 (hex) Loehnert Elektronik GmbH\r
+8A3000-8A3FFF (base 16) Loehnert Elektronik GmbH\r
+ Oskar-Sembach-Ring 18\r
+ Lauf a.d.Peg. Bavaria 91207\r
+ DE\r
+\r
+70-B3-D5 (hex) Adcole Space\r
+922000-922FFF (base 16) Adcole Space\r
+ 734 Forest St.,Suite #100\r
+ Marlborough MA 01752\r
+ US\r
+\r
+70-B3-D5 (hex) QSnet Visual Technologies Ltd\r
+5C7000-5C7FFF (base 16) QSnet Visual Technologies Ltd\r
+ 13 Gan Rave\r
+ YAVNE ISRAEL 8122321\r
+ IL\r
+\r
+70-B3-D5 (hex) MB connect line GmbH Fernwartungssysteme\r
+886000-886FFF (base 16) MB connect line GmbH Fernwartungssysteme\r
+ Winnettener Straße 6\r
+ Dinkelsbuehl Bavaria 91550\r
+ DE\r
+\r
+70-B3-D5 (hex) Tobi Tribe Inc\r
+D68000-D68FFF (base 16) Tobi Tribe Inc\r
+ 13263 MIDDLETON FARM LN,\r
+ HERNDON, VA 20171\r
+ US\r
+\r
+70-B3-D5 (hex) Edge Power Solutions\r
+612000-612FFF (base 16) Edge Power Solutions\r
+ 5131 Industry Drive, Suite 107\r
+ Melbourne FL 32940\r
+ US\r
+\r
+70-B3-D5 (hex) Eurotempest AB\r
+E37000-E37FFF (base 16) Eurotempest AB\r
+ Algolgatan 10\r
+ Linköping Other 58335\r
+ SE\r
+\r
+70-B3-D5 (hex) Antek Technology \r
+9E5000-9E5FFF (base 16) Antek Technology \r
+ 11F, No. 51 Heng Yang Road\r
+ Taipei 100\r
+ TW\r
+\r
+70-B3-D5 (hex) plc-tec AG\r
+095000-095FFF (base 16) plc-tec AG\r
+ Panoramastrasse 5\r
+ Hägglingen 5607\r
+ CH\r
+\r
+70-B3-D5 (hex) Weihai Weigao Medical Imaging Technology Co., Ltd\r
+534000-534FFF (base 16) Weihai Weigao Medical Imaging Technology Co., Ltd\r
+ No. 566-1, Qishan Road, Lingang Economic and Technological Development Zone\r
+ Weihai Shandong 264210\r
+ CN\r
+\r
+70-B3-D5 (hex) ARECA EMBEDDED SYSTEMS PVT LTD\r
+F15000-F15FFF (base 16) ARECA EMBEDDED SYSTEMS PVT LTD\r
+ Plot No.5B, Survey No.184-185, P-V, Cherlapally\r
+ HYDERABAD TELANGANA 500051\r
+ IN\r
+\r
+70-B3-D5 (hex) KOREA SPECTRAL PRODUCTS\r
+F59000-F59FFF (base 16) KOREA SPECTRAL PRODUCTS\r
+ Room #402, 273, DIGITAL-RO,\r
+ GURO-GU SEOUL 08381\r
+ KR\r
+\r
+70-B3-D5 (hex) YOUSUNG\r
+3B4000-3B4FFF (base 16) YOUSUNG\r
+ 76, Gaetbeol-ro, Yeonsu-gu\r
+ Incheon 21999\r
+ KR\r
+\r
+70-B3-D5 (hex) LiveCopper Inc.\r
+9E9000-9E9FFF (base 16) LiveCopper Inc.\r
+ 600 Greer Rd\r
+ Palo Alto CA 94303\r
+ US\r
#
# List of PCI ID's
#
-# Version: 2020.03.05
-# Date: 2020-03-05 03:15:04
+# Version: 2020.06.24
+# Date: 2020-06-24 03:15:01
#
# Maintained by Albert Pool, Martin Mares, and other volunteers from
# the PCI ID Project at https://pci-ids.ucw.cz/.
1703 ISDN Adapter (PCI Bus, DV, W)
1704 ISDN Adapter (PCI Bus, D, C)
0721 Sapphire, Inc.
+0731 Jingjia Microelectronics Co Ltd
+ 7200 JM7200 Series GPU
0777 Ubiquiti Networks, Inc.
0795 Wired Inc.
6663 Butane II (MPEG2 encoder board)
1028 1f4c PERC H330 Mini (for blades)
1028 1f4d PERC H330 Embedded (for monolithic)
1054 306a SAS 3004 iMR ROMB
+ 1734 1211 PRAID CP400i [D3307-A12]
1d49 04db ServeRAID M1210 SAS/SATA Controller
1d49 0504 ThinkSystem RAID 520-8i PCIe 12Gb Adapter
0060 MegaRAID SAS 1078
1028 1fd3 HBA330 MMZ
# Supermicro AOC-S3008L-L8e uses 0808 for their SAS3008 SAS controller
15d9 0808 AOC-S3008L-L8e
+ 1bd4 0008 12G SAS3008IMR Onboard
1bd4 000b 12G SAS3008IR
1bd4 000c 12G SAS3008IT
1bd4 0011 Inspur 12Gb 8i-3008 IT SAS HBA
1bd4 0012 12Gb SAS3008IR UDM
+ 1bd4 001f 12G SAS3008IR Onboard
+ 1bd4 0020 12G SAS3008IT Onboard
1bd4 0026 12G SAS3008IT RACK
1bd4 0027 12G SAS3008IMR RACK
1bd4 0028 12G SAS3008IR RACK
105b 0e13 N15235/A74MX mainboard / AMD SB700
1179 ff50 Satellite P305D-S8995E
1458 a022 GA-MA770-DS3rev2.0 Motherboard
+ 1458 a102 GA-880GMA-USB3
17f2 5000 KI690-AM2 Motherboard
4384 SBx00 PCI to PCI Bridge
4385 SBx00 SMBus Controller
1043 8443 M5A88-V EVO
1043 84dd M5A99X EVO (R1.0) SB950
105b 0e13 N15235/A74MX mainboard / AMD SB700
+ 1458 b002 GA-880GMA-USB3
174b 1001 PURE Fusion Mini
4392 SB7x0/SB8x0/SB9x0 SATA Controller [Non-RAID5 mode]
105b 0e13 N15235/A74MX mainboard / AMD SB700
1043 82ef M3A78-EH Motherboard
1043 8443 M5A88-V EVO
105b 0e13 N15235/A74MX mainboard / AMD SB700
+ 1458 5004 GA-880GMA-USB3
15d9 a811 H8DGU
174b 1001 PURE Fusion Mini
4397 SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
1043 82ef M3A78-EH Motherboard
1043 8443 M5A88-V EVO
105b 0e13 N15235/A74MX mainboard / AMD SB700
+ 1458 5004 GA-880GMA-USB3
15d9 a811 H8DGU
174b 1001 PURE Fusion Mini
4398 SB7x0 USB OHCI1 Controller
1043 82ef M3A78-EH Motherboard
1043 8443 M5A88-V EVO
105b 0e13 N15235/A74MX mainboard / AMD SB700
+ 1458 5004 GA-880GMA-USB3
174b 1001 PURE Fusion Mini
439c SB7x0/SB8x0/SB9x0 IDE Controller
1002 4392 MSI MS-7713 motherboard
6650 Bonaire
6651 Bonaire
6658 Bonaire XTX [Radeon R7 260X/360]
+ 1043 048f R7260X-DC2OC-2GD5
1043 04d3 AMD Radeon R7 260X
148c 0907 Radeon R7 360
1682 0907 Radeon R7 360
1002 0b37 Radeon RX 480
1028 1722 Radeon RX 570X
1028 1723 Radeon RX 580X
+# OEM card found in desktops sold by HP.
+ 103c 840e Radeon RX 580 4GB
1043 04a8 Radeon RX 480
1043 04b0 Radeon RX 470
1043 04fb Radeon RX 480
6861 Vega 10 XT [Radeon PRO WX 9100]
6862 Vega 10 XT [Radeon PRO SSG]
6863 Vega 10 XTX [Radeon Vega Frontier Edition]
- 6864 Vega
+ 6864 Vega 10 [Radeon Pro V340]
6867 Vega 10 XL [Radeon Pro Vega 56]
6868 Vega 10 [Radeon PRO WX 8100/8200]
686c Vega 10 [Radeon Instinct MI25 MxGPU]
687f Vega 10 XL/XT [Radeon RX Vega 56/64]
1002 0b36 RX Vega64
- 1002 6b76 RX Vega56
+ 1002 6b76 RX Vega64
6880 Lexington [Radeon HD 6550M]
103c 163c Pavilion dv6 Radeon HD 6550M
6888 Cypress XT [FirePro V8800]
6901 Topaz PRO [Radeon R5 M255]
103c 1318 Radeon R6 M255DX
6907 Meso XT [Radeon R5 M315]
- 6921 Amethyst XT [Radeon R9 M295X]
+ 6920 Amethyst [Radeon R9 M395/ M395X Mac Edition]
+ 6921 Amethyst XT [Radeon R9 M295X / M390X]
6929 Tonga XT GL [FirePro S7150]
692b Tonga PRO GL [FirePro W7100]
13cc 3d2b MXRT-7600
1043 049e Radeon R9 FURY
1043 04a0 Radeon R9 FURY X
174b e329 Radeon R9 FURY
- 7310 Navi 10
+ 7310 Navi 10 [Radeon Pro W5700X]
7312 Navi 10 [Radeon Pro W5700]
731f Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
+ 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]
7833 RS350 Host Bridge
7834 RS350 [Radeon 9100 PRO/XT IGP]
7835 RS350M [Mobility Radeon 9000 IGP]
9599 RV635 PRO [Radeon HD 3650 AGP]
95c0 RV620 PRO [Radeon HD 3470]
1002 95c0 Mobility Radeon HD 3470
+ 1028 3243 C120D
95c2 RV620/M82 [Mobility Radeon HD 3410/3430]
95c4 RV620/M82 [Mobility Radeon HD 3450/3470]
1002 95c4 Mobility Radeon HD 3400
aab0 Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000 Series]
aab8 Tiran HDMI Audio
aac0 Tobago HDMI Audio [Radeon R7 360 / R9 360 OEM]
+ 1043 aac0 R7260X-DC2OC-2GD5
aac8 Hawaii HDMI Audio [Radeon R9 290/290X / 390/390X]
aad8 Tonga HDMI Audio [Radeon R9 285/380]
174b aad8 Radeon R9 285/380 HDMI Audio
0519 MGA 2064W [Millennium]
051a MGA 1064SG [Mystique]
102b 0100 MGA-1064SG Mystique
+ 102b 051a MGA-1164SG Mystique 220
102b 1100 MGA-1084SG Mystique
102b 1200 MGA-1084SG Mystique
1100 102b MGA-1084SG Mystique
0fd3 GK107M [GeForce GT 640M LE]
0fd4 GK107M [GeForce GTX 660M]
0fd5 GK107M [GeForce GT 650M Mac Edition]
+ 0fd6 GK107M
0fd8 GK107M [GeForce GT 640M Mac Edition]
0fd9 GK107M [GeForce GT 645M]
0fdb GK107M
# GRID K1 USM
0fe7 GK107GL [GRID K100 vGPU]
10de 101e GRID K100
+ 0fe8 GK107M
0fe9 GK107M [GeForce GT 750M Mac Edition]
0fea GK107M [GeForce GT 755M Mac Edition]
0fec GK107M [GeForce 710A]
11a3 GK104M [GeForce GTX 680MX]
106b 010d iMac 13,2
11a7 GK104M [GeForce GTX 675MX]
+ 11a9 GK104M [GeForce GTX 870M]
11af GK104GLM [GRID IceCube]
11b0 GK104GL [GRID K240Q / K260Q vGPU]
10de 101a GRID K240Q
1287 GK208B [GeForce GT 730]
1288 GK208B [GeForce GT 720]
1289 GK208 [GeForce GT 710]
+ 128a GK208B
128b GK208B [GeForce GT 710]
1043 85f7 GT710-SL-1GD5
+ 128c GK208B
1290 GK208M [GeForce GT 730M]
103c 2afa GeForce GT 730A
103c 2b04 GeForce GT 730A
1adb TU106 USB Type-C UCSI Controller
1043 8673 TURBO-RTX2070-8G
1aeb TU116 High Definition Audio Controller
- 1aed TU116 [GeForce GTX 1650 SUPER]
+ 1aec TU116 USB 3.1 Host Controller
+ 1aed TU116 USB Type-C UCSI Controller
1b00 GP102 [TITAN X]
1b01 GP102 [GeForce GTX 1080 Ti 10GB]
1b02 GP102 [TITAN Xp]
1c91 GP107M [GeForce GTX 1050 3 GB Max-Q]
1c92 GP107M [GeForce GTX 1050 Mobile]
1c94 GP107M [GeForce MX350]
+ 1c96 GP107M [GeForce MX350]
1ca7 GP107GL
1ca8 GP107GL
1caa GP107GL
1d33 GP108GLM [Quadro P500 Mobile]
1d34 GP108GLM [Quadro P520]
1d52 GP108BM [GeForce MX250]
+ 1d56 GP108BM [GeForce MX330]
1d81 GV100 [TITAN V]
1db1 GV100GL [Tesla V100 SXM2 16GB]
1db2 GV100GL [Tesla V100 DGXS 16GB]
1e30 TU102GL [Quadro RTX 6000/8000]
10de 129e Quadro RTX 8000
10de 12ba Quadro RTX 6000
+ 1e36 TU102GL
1e37 TU102GL [GRID RTX T10-4/T10-8/T10-16]
10de 1347 GRID RTX T10-8
10de 1348 GRID RTX T10-4
1e87 TU104 [GeForce RTX 2080 Rev. A]
1e89 TU104 [GeForce RTX 2060]
1e90 TU104M [GeForce RTX 2080 Mobile]
+ 1e91 TU104M [GeForce RTX 2070 SUPER Mobile / Max-Q]
+ 1e93 TU104M [GeForce RTX 2080 SUPER Mobile / Max-Q]
1eab TU104M
1eae TU104M
1eb0 TU104GL [Quadro RTX 5000]
1ec2 TU104 [GeForce RTX 2070 SUPER]
1ec7 TU104 [GeForce RTX 2070 SUPER]
1ed0 TU104BM [GeForce RTX 2080 Mobile]
+ 1ed1 TU104BM [GeForce RTX 2070 SUPER Mobile / Max-Q]
+ 1ed3 TU104BM [GeForce RTX 2080 SUPER Mobile / Max-Q]
1f02 TU106 [GeForce RTX 2070]
1043 8673 TURBO RTX 2070
1f04 TU106
1f06 TU106 [GeForce RTX 2060 SUPER]
1f07 TU106 [GeForce RTX 2070 Rev. A]
1f08 TU106 [GeForce RTX 2060 Rev. A]
+ 1f09 TU106 [GeForce GTX 1660 SUPER]
+ 1f0a TU106 [GeForce GTX 1650]
1f10 TU106M [GeForce RTX 2070 Mobile]
1f11 TU106M [GeForce RTX 2060 Mobile]
+ 1f12 TU106M [GeForce RTX 2060 Max-Q]
+ 1f14 TU106M [GeForce RTX 2070 Mobile / Max-Q Refresh]
+ 1f15 TU106M [GeForce RTX 2060 Mobile]
1f2e TU106M
1f36 TU106GLM [Quadro RTX 3000 Mobile / Max-Q]
1f42 TU106 [GeForce RTX 2060 SUPER]
1f47 TU106 [GeForce RTX 2060 SUPER]
- 1f50 TU106BM [GeForce RTX 2070 Mobile]
+ 1f50 TU106BM [GeForce RTX 2070 Mobile / Max-Q]
1f51 TU106BM [GeForce RTX 2060 Mobile]
+ 1f54 TU106BM [GeForce RTX 2070 Mobile]
+ 1f55 TU106BM [GeForce RTX 2060 Mobile]
1f81 TU117
1f82 TU117 [GeForce GTX 1650]
1f91 TU117M [GeForce GTX 1650 Mobile / Max-Q]
1f92 TU117M [GeForce GTX 1650 Mobile]
+ 1f94 TU117M [GeForce GTX 1650 Mobile]
+ 1f95 TU117M [GeForce GTX 1650 Ti Mobile]
1f96 TU117M [GeForce GTX 1650 Mobile / Max-Q]
+ 1f99 TU117M
1fae TU117GL
1fb8 TU117GLM [Quadro T2000 Mobile / Max-Q]
1fb9 TU117GLM [Quadro T1000 Mobile]
1fbf TU117GL
+ 20b0 GA100 [GRID A100X]
+ 20be GA100 [GRID A100A]
+ 20bf GA100 [GRID A100B]
+ 20f1 GA100 [GRID A100 PCIe 40GB]
2182 TU116 [GeForce GTX 1660 Ti]
2183 TU116
2184 TU116 [GeForce GTX 1660]
2187 TU116 [GeForce GTX 1650 SUPER]
+ 2188 TU116 [GeForce GTX 1650]
2191 TU116M [GeForce GTX 1660 Ti Mobile]
+ 2192 TU116M [GeForce GTX 1650 Ti Mobile]
21ae TU116GL
21bf TU116GL
21c4 TU116 [GeForce GTX 1660 SUPER]
524a RTS524A PCI Express Card Reader
5250 RTS5250 PCI Express Card Reader
525a RTS525A PCI Express Card Reader
+ 1028 06d6 Latitude 7275 tablet
1028 06dc Latitude E7470
1028 06e4 XPS 15 9550
17aa 224f ThinkPad X1 Carbon 5th Gen
1028 04da Vostro 3750
1028 06f2 Latitude 3470
1028 06f3 Latitude 3570
+ 1028 0869 Vostro 3470
103c 1611 Pavilion DM1Z-3000
103c 1950 ProBook 450/455
103c 2a6f Asus IPIBL-LB Motherboard
1462 7c37 X570-A PRO motherboard
1775 11cc CC11/CL11
17aa 3814 Z50-75
+ 17aa 3823 Lenovo V130-15IGM Laptop - Type 81HL
17aa 5124 ThinkPad E595
1849 8168 Motherboard (one of many)
7470 3468 TG-3468 Gigabit PCI Express Network Adapter
1102 8071 SB0150 SoundBlaster PCI512
# EMU8008 PCI version of emu8000 chip
0003 SB AWE64(D)
+ 1102 0010 CT4600 AWE64D
+ 1102 0030 CT4650 AWE64D
+ 1102 0031 CT4655 AWE64D
0004 EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series]
1102 0040 SB0090 Audigy Player
# Probably an early engineering sample
# acquired by Diodes Inc.
12d8 Pericom Semiconductor
01a7 7C21P100 2-port PCI-X to PCI-X Bridge
+# 3Port-3Lane PCI Express Switch GreenPacket Family
+ 0303 PCI Express Switch 3-3
+# PI7C9X20508GP 5Port-8Lane PCI Express Switch GreenPacket Family
+ 0508 PI7C9X20508GP PCI Express Switch 5Port-8Lane
2304 PI7C9X2G304 EL/SL PCIe2 3-Port/4-Lane Packet Switch
2404 PI7C9X2G404 EL/SL PCIe2 4-Port/4-Lane Packet Switch
2608 PI7C9X2G608GP PCIe2 6-Port/8-Lane Packet Switch
1028 1ff9 Express Flash PM1725b 6.4TB AIC
1028 1ffa Express Flash PM1725b 12.8TB AIC
a824 NVMe SSD Controller PM173X
+ 1028 2040 EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 1.6TB
+ 1028 2041 EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 3.2TB
+ 1028 2042 EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 6.4TB
+ 1028 2043 EMC PowerEdge Express Flash Ent NVMe AGN MU U.2 Gen4 12.8TB
+ 1028 2044 EMC PowerEdge Express Flash Ent NVMe AGN MU AIC Gen4 1.6TB
+ 1028 2045 EMC PowerEdge Express Flash Ent NVMe AGN MU AIC Gen4 3.2TB
+ 1028 2046 EMC PowerEdge Express Flash Ent NVMe AGN MU AIC Gen4 6.4TB
+ 1028 2070 EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 1.92TB
+ 1028 2071 EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 3.84TB
+ 1028 2072 EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 7.68TB
+ 1028 2073 EMC PowerEdge Express Flash Ent NVMe AGN RI U.2 Gen4 15.36TB
+ 1028 2074 EMC PowerEdge Express Flash Ent NVMe AGN RI AIC Gen4 1.92TB
+ 1028 2075 EMC PowerEdge Express Flash Ent NVMe AGN RI AIC Gen4 3.84TB
+ 1028 2076 EMC PowerEdge Express Flash Ent NVMe AGN RI AIC Gen4 7.68TB
+ 1028 2090 EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 1.6TB
+ 1028 2091 EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 3.2TB
+ 1028 2092 EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 6.4TB
+ 1028 2093 EMC PowerEdge Express Flash Ent NVMe AGN SED MU U.2 Gen4 12.8TB
+ 1028 2094 EMC PowerEdge Express Flash Ent NVMe AGN SED MU AIC Gen4 1.6TB
+ 1028 2095 EMC PowerEdge Express Flash Ent NVMe AGN SED MU AIC Gen4 3.2TB
+ 1028 2096 EMC PowerEdge Express Flash Ent NVMe AGN SED MU AIC Gen4 6.4TB
+ 1028 2097 EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 1.92TB
+ 1028 2098 EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 3.84TB
+ 1028 2099 EMC PowerEdge Express Flash Ent NVMe AGN SED RI U.2 Gen4 7.68TB
144e OLITEC
144f Askey Computer Corp.
1450 Octave Communications Ind.
0215 MT42822 Family [BlueField-2 Secure Flash Recovery]
0216 MT2894 Family [ConnectX-6 Lx Flash Recovery]
0217 MT2894 Family [ConnectX-6 Lx Secure Flash Recovery]
+ 0218 MT2910 Family [ConnectX-7 Flash Recovery]
+ 0219 MT2910 Family [ConnectX-7 Secure Flash Recovery]
+ 021a MT43162 Family [BlueField-3 Lx SoC Flash Recovery]
+ 021b MT43162 Family [BlueField-3 Lx Secure Flash Recovery]
+ 021c MT43244 Family [BlueField-3 SoC Flash Recovery]
+ 021d MT43244 Family [BlueField-3 Secure Flash Recovery]
024e MT53100 [Spectrum-2, Flash recovery mode]
024f MT53100 [Spectrum-2, Secure Flash recovery mode]
0250 Spectrum-3, Flash recovery mode
0263 MT27710 [ConnectX-4 Lx Programmable Virtual Function] EN
0264 Innova-2 Flex Burn image
0281 NPS-600 Flash Recovery
- 0538 MT2910 Family [ConnectX-7 Flash Recovery]
- 0539 MT2910 Family [ConnectX-7 Secure Flash Recovery]
1002 MT25400 Family [ConnectX-2 Virtual Function]
1003 MT27500 Family [ConnectX-3]
1014 04b5 PCIe3 40GbE RoCE Converged Host Bus Adapter for Power
1976 MT28908 Family [ConnectX-6 PCIe Bridge]
1977 MT2892 Family [ConnectX-6 Dx PCIe Bridge]
1978 MT42822 Family [BlueField-2 SoC PCIe Bridge]
+ 1979 MT2910 Family [ConnectX-7 PCIe Bridge]
+ 197a MT43162 Family [BlueField-3 Lx SoC PCIe Bridge]
+ 197b MT43244 Family [BlueField-3 SoC PCIe Bridge]
4117 MT27712A0-FDCF-AE
1bd4 0039 SN10XMP2P25
1bd4 003a 25G SFP28 SP EO251FM9 Adapter
a2d4 MT42822 BlueField-2 SoC Crypto enabled
a2d5 MT42822 BlueField-2 SoC Crypto disabled
a2d6 MT42822 BlueField-2 integrated ConnectX-6 Dx network controller
+ a2d7 MT43162 BlueField-3 Lx SoC Crypto enabled
+ a2d8 MT43162 BlueField-3 Lx SoC Crypto disabled
+ a2d9 MT43162 BlueField-3 Lx integrated ConnectX-7 network controller
+ a2da MT43244 BlueField-3 SoC Crypto enabled
+ a2db MT43244 BlueField-3 SoC Crypto disabled
+ a2dc MT43244 BlueField-3 integrated ConnectX-7 network controller
c2d2 MT416842 BlueField SoC management interfac
c2d3 MT42822 BlueField-2 SoC Management Interface
+ c2d4 MT43162 BlueField-3 Lx SoC Management Interface
+ c2d5 MT43244 BlueField-3 SoC Management Interface
# SwitchX-2, 40GbE switch
c738 MT51136
c739 MT51136 GW
c580 Radeon RX 580
1688 CastleNet Technology Inc.
1170 WLAN 802.11b card
+168a Utimaco IS GmbH
# nee Atheros Communications, Inc.
168c Qualcomm Atheros
0007 AR5210 Wireless Network Adapter [AR5000 802.11a]
1028 0300 Wireless 1802 802.11abgn Adapter
1a56 2003 Killer Wireless-N 1202 Half-size Mini PCIe Card
0036 QCA9565 / AR9565 Wireless Network Adapter
+ 1028 020e Vostro 3470
0037 AR9485 Wireless Network Adapter
# Also used as Gigabyte GC-WB150 on a PCIe-to-mini-PCIe converter
1a3b 2100 AW-NB100H 802.11n Wireless Mini PCIe Card
0121 PCT-7303A PC card with IRC counters
0122 PCT-7408A PC card with counters and timers
0123 PCT-7424 PCI card with standard counters
+ 0141 PCA7208AL - Analog Inputs/Outputs
+ 0142 PCA7208AS - Analog inputs/Outputs
+ 0143 PCA7408AL - Analog Inputs/Outputs
+ 0144 PCA7408AS - Analog Inputs/Outputs
0214 PCT-7424C (F0) PC card with standard counters
0215 PCT-7424C (F1) PC card with standard counters
0216 PCT-7424E (F0) PC card with standard counters
0217 PCT-7424E (F1) PC card with standard counters
+ 0240 PCA7428CL_F0 - analog Inputs
+ 0241 PCA7428CL_F1 - analog Inputs
+ 0242 PCA7428CS_F0 - Analog Inputs/Outputs non isolated
+ 0243 PCA7428CS_F1 - Analog Inputs/Outputs non isolated
+ 0244 PCA7428CE_F0 - Analog Inputs isolated
+ 0245 PCA7428CE_F1 - Analog Inputs isolated
0303 PCD-7006C Digital Input & Output PCI Card
+ 0800 PCD8006 - PCIe digital Inputs/Outputs
ff00 CTU CAN FD PCIe Card
1761 Pickering Interfaces Ltd
1771 InnoVISION Multimedia Ltd.
1011 R1011 IDE Controller
1012 R1012 IDE Controller
1031 PCI/PCI-X to PCI-E Bridge
+# Integrated in Vortex86EX, Vortex86EX2 SoC
+ 1070 CAN Bus Controller
+# Integrated in Vortex86EX, Vortex86EX2 SoCs
+ 1331 Motion Control Interface
+# Found in the Vortex86EX2 SoC
+ 1930 Hybrid Function Control Register
+# IGP = on-chip integrated in the MSTI-PMX-1000 (Vortex86MX).
+ 2010 RDC M2010 VGA-compatible graphics adapter
2012 M2012/R3308 VGA-compatible graphics adapter
+# IGP = on-chip integrated in the Vortex86DX3. Basic 2D accel. UMA architecture.
+ 2015 RDC M2015 VGA-compatible graphics adapter
+# Found in the Vortex86EX SoC
+ 6011 R6011 ISA Bridge
+# Found in the Vortex86EX2 SoC
+ 6013 R6013 ISA Bridge
6020 R6020 North Bridge
6021 R6021 Host Bridge
+# Found in the Vortex86DX3 SoC
+ 6023 R6023 Host Bridge
+# Found in the Vortex86EX SoC
+ 6025 R6025 Host Bridge
+# Found in the Vortex86EX2 SoC
+ 6026 R6026 Host Bridge
6030 R6030 ISA Bridge
6031 R6031 ISA Bridge
+# Found in the Vortex86DX3 SoC
+ 6035 R6035 ISA Bridge
+# Found in MSTI-PMX-1000 (Vortex86MX) SoC.
+ 6036 R6036 ISA Bridge
6040 R6040 MAC Controller
6060 R6060 USB 1.1 Controller
6061 R6061 USB 2.0 Controller
1987 Phison Electronics Corporation
5007 E7 NVMe Controller
5012 E12 NVMe Controller
+ 5013 PS5013 E13 NVMe Controller
5016 E16 PCIe4 NVMe Controller
1989 Montilio Inc.
0001 RapidFile Bridge
0200 Hi1822 Family (2*100GE)
19e5 d139 Hi1822 SP572 (2*100GE)
19e5 d13d Hi1822 SC371 (2*100GE)
+ 19e5 d147 Hi1822 SP573 (2*100GE)
0202 Hi1822 Family (2*32G FC)
+ 19e5 d149 Hi1822 SP528 (2*32G FC)
19e5 d302 Hi1822 SP521 (2*32G FC)
19e5 d304 Hi1822 SP526 (2*32G FC)
0203 Hi1822 Family (2*16G FC)
+ 19e5 d148 Hi1822 SP527 (2*16G FC)
19e5 d301 Hi1822 SP520 (2*16G FC)
19e5 d305 Hi1822 SP525 (2*16G FC)
0205 Hi1822 Family (2*100GE)
0206 Hi1822 Family (2*25GE)
19e5 d138 Hi1822 SP582 (2*25GE)
19e5 d13a Hi1822 SC381 (2*25GE)
+ 19e5 d145 Hi1822 SP586 (2*25GE)
0210 Hi1822 Family (4*25GE)
19e5 df2e Hi1822 MZ532 MEZZ (4*25GE)
0211 Hi1822 Family (4*25GE)
19e5 d129 Hi1822 SP570 (4*25GE)
19e5 d136 Hi1822 SP580 (4*25GE)
19e5 d141 Hi1822 SP583 (4*25GE)
+ 19e5 d146 Hi1822 SP585 (4*25GE)
371e Hi1822 Family Virtual Bridge
375e Hi1822 Family Virtual Function
379e Hi1822 Family Virtual Function
a12a HiSilicon Add-on PCI-PCI Bridge
a220 HNS GE Network Controller
a221 HNS GE/10GE/25GE Network Controller
+ 19e5 0454 TM280
+ 19e5 04cc TM210
+ 19e5 d14a TM280 4*25G
+ 19e5 d14b TM210 4*GE
a222 HNS GE/10GE/25GE RDMA Network Controller
a224 HNS GE/10GE/25GE/50GE RDMA Network Controller
a226 HNS GE/10GE/25GE/50GE/100GE RDMA Network Controller
1050 Virtio GPU
# virtio 1.0
1052 Virtio input
+# virtio 1.0
+ 1053 Virtio socket
1110 Inter-VM shared memory
1af4 1100 QEMU Virtual Machine
1af5 Netezza Corp.
0007 DELTA-3G-elp-d
1b6f Etron Technology, Inc.
7023 EJ168 USB 3.0 Host Controller
+ 1458 5007 GA-880GMA-USB3
7052 EJ188/EJ198 USB 3.0 Host Controller
1849 7052 QC5000-ITX/PH
1b73 Fresco Logic
1102 OmniBusBox II Multi-Protocol Interface Core
1103 OmniBus II cPCIe/PXIe Multi-Protocol Interface Card
1bd4 Inspur Electronic Information Industry Co., Ltd.
+ 0911 Arria10_PCIe_F10A1150
1bee IXXAT Automation GmbH
0003 CAN-IB200/PCIe
1bef Lantiq
1c1c Symphony
0001 82C101
1c1f SoftLab-NSK
+ 0015 FD842
+ 0019 FD722
+ 001a FD788
+ 001b FD720
+ 001c FD922
+ 001d Vega
1c28 Lite-On IT Corp. / Plextor
0122 M6e PCI Express SSD [Marvell 88SS9183]
# previously Fiberblaze
a00a FBC2CGG3 Capture 8x10Gb [Mango]
a00e FB2CG Capture 2x100Gb [Savona]
a00f FB2CG Capture 2x40Gb [Savona]
+ a010 FB2CGHH Capture 2x40Gb [Tivoli]
a011 FB2CG Capture 2x25Gb [Savona]
a012 FB2CG Capture 8x10Gb [Savona]
+ a013 FB2CGHH Capture 2x25Gb [Tivoli]
+ a014 FB2CGHH Capture 8x10Gb [Tivoli]
+ a015 FB2CGHH Capture 2x100Gb [Tivoli]
# Used on V120 VME Crate Controller
1c32 Highland Technology, Inc.
1c33 Daktronics, Inc
0010 Pro Capture Endpoint
0014 PRO CAPTURE AIO 4K PLUS
0017 PRO CAPTURE AIO 4K
+ 0051 Eco Capture Dual HDMI M.2
+ 0052 Eco Capture HDMI 4K M.2
+ 0053 Eco Capture Dual SDI M.2
+ 0054 Eco Capture Quad SDI M.2
1cdd secunet Security Networks AG
1ce4 Exablaze
0001 ExaNIC X4
04de Taurus/McKinley
1d6a Aquantia Corp.
0001 AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
+ 00b1 AQC100 10G Ethernet MAC controller [AQtion]
07b1 AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
08b1 AQC108 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
11b1 AQC111 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion]
1d95 Graphcore Ltd
0001 Colossus GC2 [C2]
0002 Colossus GC1 [S1]
+1d97 Shenzhen Longsys Electronics Co., Ltd.
1d9b Facebook, Inc.
0010 Networking DOM Engine
0011 IO Bridge
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 4008 DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
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 4008 DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
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 4008 DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
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 4008 DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
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 4008 DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
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 4008 DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
1de0 Groq
0000 Q100 Tensor Streaming Processor
1de1 Tekram Technology Co.,Ltd.
0003 alst4x
1dfc JSC NT-COM
1181 TDM 8 Port E1/T1/J1 Adapter
+1e0f KIOXIA Corporation
+ 0007 NVMe SSD Controller Cx6
1e17 Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
1e24 Squirrels Research Labs
0101 Acorn CLE-101
0100 The device has already been deleted.
0000 0100 PY8800 64GB Accelerator
1e6b Axiado Corp.
+1e85 Heitec AG
1e89 ID Quantique SA
0002 Quantis-PCIe-40M
0003 Quantis-PCIe-240M
# aka SED Systems
1e94 Calian SED
+1e95 Solid State Storage Technology Corporation
# nee Tumsan Oy
1fc0 Ascom (Finland) Oy
0300 E2200 Dual E1/Rawpipe Card
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
02f0 Wireless-AC 9462
02f9 Comet Lake Thermal Subsytem
02fc Comet Lake Integrated Sensor Solution
8086 01f7 SCRU32
# uninitialized SRCU32 RAID Controller
061f 80303 I/O Processor
+ 068d Comet Lake LPC Controller
+ 06a3 Comet Lake PCH SMBus Controller
+ 06a4 Comet Lake PCH SPI Controller
+ 06a8 Comet Lake PCH Serial IO UART Host Controller #0
+ 06a9 Comet Lake PCH Serial IO UART Host Controller #1
+ 06aa Comet Lake PCH Serial IO SPI Controller #0
+ 06ab Comet Lake PCH Serial IO SPI Controller #1
+ 06ac Comet Lake PCI Express Root Port #21
+ 06b0 Comet Lake PCI Express Root Port #9
+ 06c0 Comet Lake PCI Express Root Port #17
+ 06c8 Comet Lake PCH cAVS
+ 06e0 Comet Lake HECI Controller
+ 06e8 Comet Lake PCH Serial IO I2C Controller #0
+ 06e9 Comet Lake PCH Serial IO I2C Controller #1
+ 06ea Comet Lake PCH Serial IO I2C Controller #2
+ 06eb Comet Lake PCH Serial IO I2C Controller #3
+ 06ed Comet Lake USB 3.1 xHCI Host Controller
+ 06ef Comet Lake PCH Shared SRAM
+ 06f0 Wi-Fi 6 AX201
+ 06f9 Comet Lake PCH Thermal Controller
+ 06fb Comet Lake PCH Serial IO SPI Controller #2
0700 CE Media Processor A/V Bridge
0701 CE Media Processor NAND Flash Controller
0703 CE Media Processor Media Control Unit 1
1028 1fe7 Express Flash NVMe 3.2TB 2.5" U.2 (P4600)
1028 1fe8 Express Flash NVMe 2.0TB HHHL AIC (P4600)
1028 1fe9 Express Flash NVMe 4.0TB HHHL AIC (P4600)
+ 0b60 NVMe DC SSD [3DNAND, Beta 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 2064 NVMe SED RI U.2 1.92TB (P5500)
+ 1028 2065 NVMe SED RI U.2 3.84TB (P5500)
+ 1028 2066 NVMe SED RI U.2 7.68TB (P5500)
+ 1028 209e NVMe MU U.2 1.6TB (P5600)
+ 1028 209f NVMe MU U.2 3.2TB (P5600)
+ 1028 2100 NVMe 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)
0be0 Atom Processor D2xxx/N2xxx Integrated Graphics Controller
0be1 Atom Processor D2xxx/N2xxx Integrated Graphics Controller
105b 0d7c D270S/D250S Motherboard
0d58 Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
8086 0000 Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
8086 0001 Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+ 0d9f Ethernet Controller (2) I225-IT
0e00 Xeon E7 v2/Xeon E5 v2/Core i7 DMI2
1028 04f7 Xeon E5 v2 on PowerEdge R320 server
15d9 066b X9SRL-F
17aa 4001 ThinkServer X710-4 AnyFabric for 10GbE SFP+
17aa 4002 ThinkServer X710-2 AnyFabric for 10GbE SFP+
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
8086 0001 Ethernet Converged Network Adapter X710-4
8086 0002 Ethernet Converged Network Adapter X710-4
8086 0008 Ethernet Network Adapter OCP XXV710-1
8086 0009 Ethernet 25G 2P XXV710 Adapter
8086 000a Ethernet 25G 2P XXV710 OCP
+ 8086 000c Ethernet Network Adapter XXV710-DA2 for OCP 3.0
8086 4001 Ethernet Network Adapter XXV710-2
1591 Ethernet Controller E810-C for backplane
1592 Ethernet Controller E810-C for QSFP
+ 1137 02bf E810CQDA2 2x100 GbE QSFP28 PCIe NIC
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 0006 Ethernet Network Adapter E810-C-Q2 for OCP3.0
8086 0009 Ethernet Network Adapter E810-C-Q1
+ 8086 000a Ethernet Network Adapter E810-C-Q1 for OCP
1593 Ethernet Controller E810-C for SFP
+ 1137 02c3 E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC
8086 0002 Ethernet Network Adapter E810-L-2
8086 0005 Ethernet Network Adapter E810-XXV-4
8086 0006 Ethernet Network Adapter E810-XXV-4
8086 0007 Ethernet Network Adapter E810-XXV-4
8086 0008 Ethernet Network Adapter E810-XXV-2
8086 0009 Ethernet Network Adapter E810-XXV-2 for OCP 2.0
+ 1599 Ethernet Controller E810-XXV for backplane
+ 159a Ethernet Controller E810-XXV for QSFP
+ 159b Ethernet Controller E810-XXV for SFP
+ 1137 02be E810XXVDA2 2x25/10 GbE SFP28 PCIe NIC
+ 1bd4 0057 Ethernet Network Adapter E810-XXVAM2
+ 1bd4 0058 Ethernet Network Adapter E810-XXVAM2 for OCP 3.0
+ 8086 0001 Ethernet 25G 2P E810-XXV OCP
+ 8086 0002 Ethernet 25G 2P E810-XXV Adapter
+ 8086 0003 Ethernet Network Adapter E810-XXV-2
+ 8086 0005 Ethernet Network Adapter E810-XXV-2 for OCP 3.0
+ 8086 4001 Ethernet Network Adapter E810-XXV-2
+ 8086 4002 Ethernet Network Adapter E810-XXV-2 for OCP 3.0
15a0 Ethernet Connection (2) I218-LM
15a1 Ethernet Connection (2) I218-V
15a2 Ethernet Connection (3) I218-LM
15ec JHL7540 Thunderbolt 3 USB Controller [Titan Ridge 4C 2018]
15ef JHL7540 Thunderbolt 3 Bridge [Titan Ridge DD 2018]
15f0 JHL7540 Thunderbolt 3 USB Controller [Titan Ridge DD 2018]
+ 15f2 Intel(R) Ethernet Controller I225-LM
+ 15f3 Intel(R) Ethernet Controller I225-V
15f4 Ethernet Connection (15) I219-LM
15f5 Ethernet Connection (15) I219-V
15f6 I210 Gigabit Ethernet Connection
1901 Xeon E3-1200 v5/E3-1500 v5/6th 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
103c 825b OMEN-17-w001nv
1908 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
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
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
103c 825b OMEN-17-w001nv
1911 Xeon E3-1200 v5/v6 / E3-1500 v5 / 6th/7th/8th Gen Core Processor Gaussian Mixture Model
+ 1028 0869 Vostro 3470
17aa 2247 ThinkPad T570
17aa 224f ThinkPad X1 Carbon 5th Gen
17aa 225d ThinkPad T480
103c 8079 EliteBook 840 G3
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
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
191f Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
1921 HD Graphics 520
1926 Iris Graphics 540
# Stone Peak 1x1
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
318c Celeron/Pentium Silver Processor Dynamic Platform and Thermal Framework Processor Participant
318e Celeron/Pentium Silver Processor NorthPeak
3192 Gemini Lake P2SB
3197 Celeron/Pentium Silver Processor PCI-default ISA-bridge
+ 3198 Celeron/Pentium Silver Processor High Definition Audio
+ 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
31ac Celeron/Pentium Silver Processor Serial IO I2C Host Controller
3e89 8th Gen Core Processor PCIe Controller (x4)
3e91 8th Gen Core Processor Gaussian Mixture Model
3e92 UHD Graphics 630 (Desktop)
+ 1028 0869 Vostro 3470
3e93 UHD Graphics 610
3e96 HD Graphics P630
3e98 UHD Graphics 630 (Desktop 9 Series)
1028 089e Inspiron 5482
3ea5 Iris Plus Graphics 655
3ec2 8th Gen Core Processor Host Bridge/DRAM Registers
+ 1028 0869 Vostro 3470
1043 8694 PRIME H310M-D
3ec4 8th Gen Core Processor Host Bridge/DRAM Registers
3ec6 8th Gen Core Processor Host Bridge/DRAM Registers
5201 EtherExpress PRO/100 Intelligent Server Fast Ethernet Controller
8086 0001 EtherExpress PRO/100 Server Ethernet Adapter
530d 80310 (IOP) IO Processor
+ 5502 Ethernet Controller (2) I225-LMvP
5845 QEMU NVM Express Controller
1af4 1100 QEMU Virtual Machine
5900 Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers
8a1f Ice Lake Thunderbolt 3 PCI Express Root Port #1
8a21 Ice Lake Thunderbolt 3 PCI Express Root Port #2
8a23 Ice Lake Thunderbolt 3 PCI Express Root Port #3
+ 8a51 Intel Iris Plus Graphics G7 (Ice Lake)
8a52 Iris Plus Graphics G7
+ 8a56 Iris Plus Graphics G1 (Ice Lake)
+ 8a5a Iris Plus Graphics G4 (Ice Lake)
+ 8a5c Intel Iris Plus Graphics G4 (Ice Lake)
8c00 8 Series/C220 Series Chipset Family 4-port SATA Controller 1 [IDE mode]
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]
8c0e 8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
8c0f 8 Series/C220 Series Chipset Family SATA Controller 1 [RAID mode]
8c10 8 Series/C220 Series Chipset Family PCI Express Root Port #1
+ 1043 8534 ASUS H81I-PLUS
17aa 220e ThinkPad T440p
8c11 8 Series/C220 Series Chipset Family PCI Express Root Port #1
8c12 8 Series/C220 Series Chipset Family PCI Express Root Port #2
9622 Integrated RAID
9641 Integrated RAID
96a1 Integrated RAID
+ 9a09 11th Gen Core Processor PCIe Controller
9a0b Volume Management Device NVMe RAID Controller
+ 9a13 Tiger Lake-LP Thunderbolt USB Controller
+ 9a14 11th Gen Core Processor Host Bridge/DRAM Registers
+ 9a1b Tiger Lake-LP Thunderbolt NHI #0
+ 9a1d Tiger Lake-LP 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
+ 9a33 Tiger Lake Trace Hub
+ 9a49 UHD Graphics
9b41 UHD Graphics
+ 9b44 10th Gen Core Processor Host Bridge/DRAM Registers
+ 9b54 10th Gen Core Processor Host Bridge/DRAM Registers
+ 9b64 10th Gen Core Processor Host Bridge/DRAM Registers
+ 9bc4 UHD Graphics
9c00 8 Series SATA Controller 1 [IDE mode]
9c01 8 Series SATA Controller 1 [IDE mode]
9c02 8 Series SATA Controller 1 [AHCI mode]
9d1a Sunrise Point-LP PCI Express Root Port #11
9d21 Sunrise Point-LP PMC
1025 115f Acer Aspire E5-575G
+ 1028 06d6 Latitude 7275 tablet
1028 06dc Latitude E7470
1028 06f3 Latitude 3570
103c 8079 EliteBook 840 G3
17aa 382a B51-80 Laptop
9d23 Sunrise Point-LP SMBus
1025 115f Acer Aspire E5-575G
+ 1028 06d6 Latitude 7275 tablet
1028 06dc Latitude E7470
1028 06f3 Latitude 3570
103c 8079 EliteBook 840 G3
9d2d Sunrise Point-LP Secure Digital IO Controller
9d2f Sunrise Point-LP USB 3.0 xHCI Controller
1025 115f Acer Aspire E5-575G
+ 1028 06d6 Latitude 7275 tablet
1028 06dc Latitude E7470
1028 06f3 Latitude 3570
103c 8079 EliteBook 840 G3
17aa 382a B51-80 Laptop
9d31 Sunrise Point-LP Thermal subsystem
1025 115f Acer Aspire E5-575G
+ 1028 06d6 Latitude 7275 tablet
1028 06dc Latitude E7470
1028 06f3 Latitude 3570
103c 8079 EliteBook 840 G3
17aa 224f ThinkPad X1 Carbon 5th Gen
17aa 225d ThinkPad T480
17aa 382a B51-80 Laptop
+ 9d32 CSI-2 Host Controller
+ 1028 06d6 Latitude 7275 tablet
9d35 Sunrise Point-LP Integrated Sensor Hub
+ 1028 06d6 Latitude 7275 tablet
9d3a Sunrise Point-LP CSME HECI #1
1025 115f Acer Aspire E5-575G
+ 1028 06d6 Latitude 7275 tablet
1028 06dc Latitude E7470
1028 06f3 Latitude 3570
103c 8079 EliteBook 840 G3
103c 8079 EliteBook 840 G3
9d43 Sunrise Point-LP LPC Controller
17aa 382a B51-80 Laptop
+ 9d46 LPC/eSPI Controller
+ 1028 06d6 Latitude 7275 tablet
9d48 Sunrise Point-LP LPC Controller
1028 06dc Latitude E7470
1028 06f3 Latitude 3570
17aa 224f ThinkPad X1 Carbon 5th Gen
9d60 Sunrise Point-LP Serial IO I2C Controller #0
1025 115f Acer Aspire E5-575G
+ 1028 06d6 Latitude 7275 tablet
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
9d62 Sunrise Point-LP Serial IO I2C Controller #2
+ 1028 06d6 Latitude 7275 tablet
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
9d66 Sunrise Point-LP Serial IO UART Controller #2
9d70 Sunrise Point-LP HD Audio
+ 1028 06d6 Latitude 7275 tablet
1028 06dc Latitude E7470
1028 06f3 Latitude 3570
103c 8079 EliteBook 840 G3
1028 089e Inspiron 5482
9da3 Cannon Point-LP SMBus Controller
9da4 Cannon Point-LP SPI Controller
+ 9da8 Cannon Point-LP Serial IO UART Controller #2
+ 9daa Cannon Point-LP Serial IO SPI Controller
9db0 Cannon Point-LP PCI Express Root Port #9
9db1 Cannon Point-LP PCI Express Root Port #10
9db2 Cannon Point-LP PCI Express Root Port #1
1043 83ac Eee PC 1015PX
144d c072 Notebook N150P
a013 Atom Processor D4xx/D5xx/N4xx/N5xx CHAPS counter
+ a082 Tiger Lake-LP LPC Controller
+ a0a3 Tiger Lake-LP SMBus Controller
+ a0a4 Tiger Lake-LP SPI Controller
+ a0a6 Tiger Lake-LP Trace Hub
+ a0a8 Tiger Lake-LP Serial IO UART Controller #0
+ 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
+ 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
+ a0c8 Tiger Lake-LP Smart Sound Technology Audio Controller
+ a0e0 Tiger Lake-LP Management Engine Interface
+ a0e8 Tiger Lake-LP Serial IO I2C Controller #0
+ a0e9 Tiger Lake-LP Serial IO I2C Controller #1
+ a0ea Tiger Lake-LP Serial IO I2C Controller #2
+ a0eb Tiger Lake-LP Serial IO I2C Controller #3
+ a0ed Tiger Lake-LP USB 3.2 Gen 2x1 xHCI Host Controller
+ a0ef Tiger Lake-LP Shared SRAM
+ a0f0 Wi-Fi 6 AX201
+ a0fc Tiger Lake-LP Integrated Sensor Hub
a102 Q170/Q150/B150/H170/H110/Z170/CM236 Chipset SATA Controller [AHCI Mode]
a103 HM170/QM170 Chipset SATA Controller [AHCI Mode]
1028 06e4 XPS 15 9550
a2ee 200 Series PCH PCI Express Root Port #24
a2f0 200 Series PCH HD Audio
a304 H370 Chipset LPC/eSPI Controller
+ 1028 0869 Vostro 3470
a305 Z390 Chipset LPC/eSPI Controller
a306 Q370 Chipset LPC/eSPI Controller
a309 Cannon Point-LP LPC Controller
a30c QM370 Chipset LPC/eSPI Controller
+ a30d HM470 Chipset LPC/eSPI Controller
+ a30e Cannon Lake LPC Controller
a323 Cannon Lake PCH SMBus Controller
+ 1028 0869 Vostro 3470
a324 Cannon Lake PCH SPI Controller
+ 1028 0869 Vostro 3470
a328 Cannon Lake PCH Serial IO UART Host Controller
a32c Cannon Lake PCH PCI Express Root Port #21
a32d Cannon Lake PCH PCI Express Root Port #22
a342 Cannon Lake PCH PCI Express Root Port #19
a343 Cannon Lake PCH PCI Express Root Port #20
a348 Cannon Lake PCH cAVS
+ 1028 0869 Vostro 3470
a352 Cannon Lake PCH SATA AHCI Controller
+ 1028 0869 Vostro 3470
a353 Cannon Lake Mobile PCH SATA AHCI Controller
a360 Cannon Lake PCH HECI Controller
+ 1028 0869 Vostro 3470
a363 Cannon Lake PCH Active Management Technology - SOL
a364 Cannon Lake PCH HECI Controller #2
a368 Cannon Lake PCH Serial IO I2C Controller #0
a36a Cannon Lake PCH Serial IO I2C Controller #2
a36b Cannon Lake PCH Serial IO I2C Controller #3
a36d Cannon Lake PCH USB 3.1 xHCI Host Controller
+ 1028 0869 Vostro 3470
a36f Cannon Lake PCH Shared SRAM
a370 Wireless-AC 9560 [Jefferson Peak]
a379 Cannon Lake PCH Thermal Controller
+ 1028 0869 Vostro 3470
a620 6400/6402 Advanced Memory Buffer (AMB)
abc0 Omni-Path Fabric Switch Silicon 100 Series
b152 21152 PCI-to-PCI Bridge
0001 SG2010 PCI over Starfabric Bridge
0002 SG2010 PCI to Starfabric Gateway
0003 SG1010 Starfabric Switch and PCI Bridge
+9d32 Beijing Starblaze Technology Co. Ltd.
+ 0000 STAR1000 PCIe NVMe SSD Controller
+ 1001 STAR1000P PCIe NVMe SSD Controller
+ 1201 STAR1200C NVMe SSD
+ 1202 STAR1200I NVMe SSD
+ 1203 STAR1200L NVMe SSD
+ 1204 STAR1200E NVMe SSD
a0a0 AOPEN Inc.
a0f1 UNISYS Corporation
a200 NEC Corporation
10 OHCI
20 EHCI
30 XHCI
+ 40 USB4 Host Interface
80 Unspecified
fe USB Device
04 Fibre Channel
# The latest version can be obtained from
# http://www.linux-usb.org/usb.ids
#
-# Version: 2020.02.28
-# Date: 2020-02-28 20:34:06
+# Version: 2020.06.22
+# Date: 2020-06-22 20:34:08
#
# Vendors, devices and interfaces. Please keep sorted.
0001 Fry's Electronics
7778 Counterfeit flash drive [Kingston]
0002 Ingram
+ 0002 passport00
0003 Club Mac
0004 Nebraska Furniture Mart
0011 Unknown
181b Venom Arcade Joystick
1843 Mayflash GameCube Controller Adapter
1844 Mayflash GameCube Controller
-0080 Assmann Electronic GmbH
- a001 Digitus DA-71114 SATA
+0080 Unknown
+ a001 JMS578 based SATA bridge
0085 Boeye Technology Co., Ltd.
0600 eBook Reader
0102 miniSTREAK
2417 LaserJet 4250
241d Gobi 2000 Wireless Modem (QDL mode)
2424 LP1965 19" Monitor Hub
+ 2441 Prime G2 [2AP18AA]
2502 PhotoSmart 7700 series
2504 DeskJet F4200 series
2505 ScanJet 3770
3504 DeskJet 6127c
3511 PSC 2300
3517 LaserJet 3390
+ 354a Slim Keyboard
3602 PhotoSmart 1315
3611 PSC 2410 PhotoSmart
3612 Officejet Pro 8000 A809
3e17 LaserJet P1006
3f02 PhotoSmart 7550~
3f11 PSC-1315/PSC-1317
+ 3f17 Laserjet P1505
4002 PhotoSmart 635/715/720/735/935/E337 (storage)
4004 CP1160
4102 PhotoSmart 618
7917 LaserJet M5025 MFP
7a02 PhotoSmart M415 (PTP mode)
7a04 DeskJet D2460
+ 7a11 Photosmart B109
7a17 LaserJet M3027 MFP
7b02 PhotoSmart M23 (PTP mode)
7b17 Color LaserJet CP4005
6011 FT4232H Quad HS USB-UART/FIFO IC
6014 FT232H Single HS USB-UART/FIFO IC
6015 Bridge(I2C/SPI/UART/FIFO)
+ 601f Myriad-RF LimeSDR-Mini
6f70 HB-RF-USB
8028 Dev board JTAG (FT232H based)
8040 4 Port Hub
1030 FV TouchCam N1 (Video)
3000 Optical dual-touch panel
3001 Optical Touch Screen
+ 3008 Optical Touch Screen
a060 HD Webcam
0409 NEC Corp.
0011 PC98 Series Layout Keyboard Mouse
3812 Smart Card Controller_2Interface
3813 Panel Display
5011 Virtual Com Port
+ 511b Nuvoton Nu-Link1 ICE
+ 511c Nuvoton Nu-Link1 ICE
+ 511d Nuvoton Nu-Link1 ICE/VCOM
+ 511e Nuvoton Nu-Link1 MSC/VCOM
+ 5200 Nuvoton Nu-Link2-ME ICE/MSC/VCOM
+ 5201 Nuvoton Nu-Link2-Pro ICE/MSC/VCOM
+ 5210 Nuvoton Nu-Link2 MSC FW UPGRADE
+ 5211 Nuvoton Nu-Link2 HID FW UPGRADE
5518 4-Port Hub
551a PC Sync Keypad
551b PC Async Keypad
2744 Hub
274d HTC Hub Controller
2807 Hub
+ 3fc7 RME Babyface audio system
3fcc RME MADIface
4041 Hub and media card controller
4060 Ultra Fast Media Reader
043e LG Electronics USA, Inc.
3001 AN-WF100 802.11abgn Wireless Adapter [Broadcom BCM4323]
3004 TWFM-B003D 802.11abgn Wireless Module [Broadcom BCM43236B]
+ 3009 VC400
3101 AN-WF500 802.11abgn + BT Wireless Adapter [Broadcom BCM43242]
42bd Flatron 795FT Plus Monitor
4a4d Flatron 915FT Plus Monitor
b307 vibrating Upad
b30b Wireless VibrationPad
b315 Firestorm Dual Analog 3
+ b320 Dual Trigger gamepad PC/PS2 2.0
b323 Dual Trigger 3-in-1 (PC Mode)
b324 Dual Trigger 3-in-1 (PS3 Mode)
b326 Gamepad GP XID
2046 TUSB2046 Hub
2077 TUSB2077 Hub
2f90 SM-USB-DIG
+ 3200 TUSB3200 Boot Loader
3410 TUSB3410 Microcontroller
3f00 OMAP1610
3f02 SMC WSKP100 Wi-Fi Phone
e012 TI-Nspire Calculator
e013 Network Bridge
e01c Data Collection Sled [Nspire Lab Cradle, Nspire Datatracker Cradle]
- e01e Nspire\99 CX Navigator\99 Access Point
+ e01e Nspire CX Navigator Access Point
e01f Python Adapter (firmware install mode)
e020 Python Adapter
e022 Nspire CX II
0072 Navigator 335
0083 Bluetooth Dongle
0087 Ergo 525V Laser Mouse
+ 0088 Genius Traveler 515 Laser
0089 Genius Traveler 350
00ca Pen Mouse
0100 EasyPen Tablet
501e Rio Chiba
501f Rio Cali
503f Cali256 MP3 Player
+ 5042 Rio Forge
5202 Rio Riot MP3 Player
5210 Rio Karma Music Player
5220 Rio Nitrus MP3 Player
07b2 2.4GHz Transceiver v8.0 used by mouse Wireless Desktop 900
07b6 Comfort Curve Keyboard 3000
07b9 Wired Keyboard 200
- 07c6 RTL8153 GigE [Surface Dock Ethernet]
+ 07c6 RTL8153 GigE [Surface Ethernet Adapter]
07ca Surface Pro 3 Docking Station Audio Device
07cd Surface Keyboard
07f8 Wired Keyboard 600 (model 1576)
07fd Nano Transceiver 1.1
+ 0800 Wireless keyboard (All-in-One-Media)
0810 LifeCam HD-3000
+ 0823 Classic IntelliMouse
0900 Surface Dock Hub
0901 Surface Dock Hub
0902 Surface Dock Hub
090b Hub
090c SD Card
091a Hub
+ 0927 RTL8153B GigE [Surface Ethernet Adapter]
+ 0955 Hub
+ 0957 Hub
+ 09a0 RTL8153B GigE [Surface Ethernet Adapter]
09c0 Surface Type Cover
0a00 Lumia 950 Dual SIM (RM-1118)
930a ISOUSB.SYS Intel 82930 Isochronous IO Test Board
4de3 HP 5-Button Optical Comfort Mouse
4de7 webcam
4e04 Lenovo Keyboard KB1021
+ 4e22 Dell Mouse, 2 Buttons, Modell: MS111-P
4e6f Acer Wired Keyboard Model KBAY211
0463 MGE UPS Systems
0001 UPS
0a07 Z-10 Speakers
0a0b ClearChat Pro USB
0a0c Clear Chat Comfort USB Headset
+ 0a10 V10 Notebook Speakers
0a13 Z-5 Speakers
0a14 USB Headset
0a15 G35 Headset
c080 G303 Gaming Mouse
c083 G403 Prodigy Gaming Mouse
c084 G203 Gaming Mouse
+ c08b G502 SE HERO Gaming Mouse
c101 UltraX Media Remote
c110 Harmony 785/880/885 Remote
c111 Harmony 525 Remote
c24c G400s Optical Mouse
c24d G710 Gaming Keyboard
c24e G500s Laser Gaming Mouse
+ c24f G29 Driving Force Racing Wheel [PS3]
+ c260 G29 Driving Force Racing Wheel [PS4]
c281 WingMan Force
c283 WingMan Force 3D
c285 WingMan Strike Force 3D
2160 Mio LINK Heart Rate Monitor
21e0 GoGEAR Raga
262c SPC230NC Webcam
+ 2721 PTA 317 TV Camera
485d Senselock SenseIV v2.x
df55 LPCXpresso LPC-Link
0472 Chicony Electronics Co., Ltd
0411 Savi Office Base Station
0ca1 USB DSP v4 Audio Interface
4254 BUA-100 Bluetooth Adapter
+ aa05 DA45
ac01 Savi 7xx
ad01 GameCom 777 5.1 Headset
af01 DA80
1234 Mass storage
1336 SD/MMC Cardreader
1345 Multi Cardreader
+ 8297 IT8297 RGB LED Controller
9006 IT9135 BDA Afatech DVB-T HDTV Dongle
9009 Zolid HD DVD Maker
9135 Zolid Mini DVB-T Stick
271c LBP7010C/7018C
2736 I-SENSYS MF4550d
2737 MF4410
+ 2742 imageRUNNER1133 series
2771 LBP6020
2796 LBP6230/6240
3041 PowerShot S10
0002 CY7C63x0x Thermometer
0033 Mouse
0060 Wireless optical mouse
+ 00f3 FX3 micro-controller (DFU mode)
0100 Cino FuzzyScan F760-B
0101 Keyboard/Hub
0102 Keyboard with APM
f115 PSoC FirstTouch Programmer
f231 DELLY Changer 4in1 universal IR remote
f232 Mono embedded computer
- fd13 Programmable power socket
+ fd10 Gembird MSIS-PM
+ fd13 Energenie EG-PMS
+ fd15 Energenie EG-PMS2
04b5 ROHM LSI Systems USA, LLC
3064 Hantek DSO-3064
04b6 Hint Corp.
0143 GT-S55
0144 GT-S85
0151 Perfection V800 Photo
- 0202 Receipt Printer M129C/TM-T70
+ 0202 Interface Card UB-U05 for Thermal Receipt Printers [M129C/TM-T70/TM-T88IV]
0401 CP 800 Digital Camera
0402 PhotoPC 850z
0403 PhotoPC 3000z
0849 Stylus SX205
084a PX-501A [Stylus NX400]
084d PX-402A [Stylus SX115/Stylus NX110 Series]
- 084f ME OFFICE 510
+ 084f Multifunctional Printer Scanner [ME Office 510 / Epson Stylus SX215]
0850 EP-702A [Stylus Photo PX650/TX650 Series]
0851 Stylus SX410
0852 EP-802A [Artisan 710 Series/Stylus Photo PX710W/TX720W Series]
0891 Stylus Office BX535WD
0892 Stylus Office BX935FWD
0893 EP-774A
+ 0e03 Thermal Receipt Printer [TM-T20]
1114 XP-440 [Expression Home Small-in-One Printer]
1129 ET-4750 [WorkForce ET-4750 EcoTank All-in-One]
04b9 Rainbow Technologies, Inc.
04ba Toucan Systems, Ltd
04bb I-O Data Device, Inc.
0101 USB2-IDE/ATAPI Bridge Adapter
+ 014a HDCL-UT
0201 USB2-IDE/ATAPI Bridge Adapter
0204 DVD Multi-plus unit iU-CD2
0206 DVD Multi-plus unit DVR-UEH8
072c Revio KD20M
072d Revio KD410Z
04ca Lite-On Technology Corp.
+ 0020 USB Keyboard
004b Keyboard
004f SK-9020 keyboard
+ 008a Acer Wired Mouse Model SM-9023
1766 HID Monitor Controls
2004 Bluetooth 4.0 [Broadcom BCM20702A0]
2006 Broadcom BCM43142A0 Bluetooth Device
300d Atheros AR3012 Bluetooth
300f Atheros AR3012 Bluetooth
3014 Qualcomm Atheros Bluetooth
+ 3015 Qualcomm Atheros QCA9377 Bluetooth
7022 HP HD Webcam
7025 HP HD Webcam
7046 TOSHIBA Web Camera - HD
8107 Microstick II
8108 ChipKit Pro MX7 (PIC32MX)
9004 Microchip REAL ICE
+ 9009 ICD3
900a PICkit3
9012 PICkit4
9015 ICD 4 In-Circuit Debugger
c001 PicoLCD 20x4
e11c TL866CS EEPROM Programmer [MiniPRO]
+ ed16 BeamiRC 2.0 CNC remote controller analoge
edb4 micro PLC (ATSAMD51G19A) [Black Brix ECU II]
edb5 ATMEGA32U4 [Black Brix ECU]
f2c4 Macareux-labs Hygrometry Temperature Sensor
ffee Devantech USB-ISS
ffef PICoPLC [APStech]
04d9 Holtek Semiconductor, Inc.
+ 0006 Wired Keyboard (78/79 key) [RPI Wired Keyboard 5]
0022 Portable Keyboard
+ 0348 Keyboard
048e Optical Mouse
0499 Optical Mouse
1135 Mouse [MGK-15BU/MLK-15BU]
a09f E-Signal LUOM G10 Mechanical Gaming Mouse
a100 Mouse [HV-MS735]
a11b Mouse [MX-3200]
+ a29f Microarray fingerprint reader
+ b534 LGT8F328P Microprocessor
e002 MCU
04da Panasonic (Matsushita)
0901 LS-120 Camera
0110 Connect3D Flash Drive
0111 Connect3D Flash Drive
0300 E2530 / GT-C3350 Phones (Mass storage mode)
+ 04e8 Galaxy (MIDI mode)
1003 MP3 Player and Recorder
1006 SDC-200Z
130c NX100
7081 Human Interface Device
7301 Fingerprint Device
8001 Handheld
+ 8002 Portable SSD 500GB Model Number: MU - P8500B
+ 8003 Portable SSD T1
d003 GT-I9003
e020 SERI E02 SCOM 6200 UMTS Phone
e021 SERI E02 SCOM 6200 Virtual UARTs
0833 KU-0833 Keyboard
0841 HP Multimedia Keyboard
0860 2.4G Multimedia Wireless Kit
+ 0939 Amazon Basics mouse
1061 HP KG-1061 Wireless Keyboard+Mouse
1121 Periboard 717 Mini Wireless Keyboard
a001 E-Video DC-100 Camera
b217 Lenovo Integrated Camera (0.3MP)
b221 integrated camera
b230 Integrated HP HD Webcam
+ b249 HP Integrated Webcam
b257 Lenovo Integrated Camera
b26b Sony Visual Communication Camera
b272 Lenovo EasyCamera
b3fd HD WebCam (Asus N-series)
b40e HP Truevision HD camera
b444 Lenovo Integrated Webcam
+ b49f Bluetooth (RTL8723BE)
b563 Integrated Camera
b5ce Integrated Camera
b5cf Integrated IR Camera
b5db HP Webcam
b604 Integrated Camera (1280x720@30)
+ b681 ThinkPad T490 Webcam
04f3 Elan Microelectronics Corp.
000a Touchscreen
0103 ActiveJet K-2024 Multimedia Keyboard
0039 HL-5340 series
0041 HL-2250DN Laser Printer
0042 HL-2270DW Laser Printer
+ 004d HL-6180DW series
+ 0080 HL-L6250DN series
0100 MFC8600/9650 series
0101 MFC9600/9870 series
0102 MFC9750/1200 series
023e DCP-197C
023f MFC-8680DN
0240 MFC-J950DN
+ 0245 MFC-9560CDW
0248 DCP-7055 scanner/printer
024e MFC-7460DN
0253 DCP-J125
03bb MFC-L2680W
03bc MFC-L2700DN
03bd DCP-J762N
+ 03fd ADS-2700W
1000 Printer
1002 Printer
2002 PTUSB Printing
2004 PT-2300/2310 p-Touch Laber Printer
2007 PT-2420PC P-touch Label Printer
- 2015 QL-500 P-touch label printer
- 2016 QL-550 P-touch label printer
+ 2015 QL-500 label printer
+ 2016 QL-550 printer
201a PT-18R P-touch label printer
- 201b QL-650TD P-touch Label Printer
- 2027 QL-560 P-touch Label Printer
- 2028 QL-570 P-touch Label Printer
+ 201b QL-650TD Label Printer
+ 2020 QL-1050 Label Printer
+ 2027 QL-560 Label Printer
+ 2028 QL-570 Label Printer
+ 202a QL-1060N Label Printer
202b PT-7600 P-touch Label Printer
+ 202c PT-1230PC P-touch Label Printer E mode
+ 202d PT-2430PC P-touch Label Printer
+ 2030 PT-1230PC P-touch Label Printer EL mode
2041 PT-2730 P-touch Label Printer
+ 2042 QL-700 Label Printer
+ 2043 QL-710W Label Printer
+ 2044 QL-720NW Label Printer
+ 204d QL-720NW Label Printer (mass storage mode)
2061 PT-P700 P-touch Label Printer
2064 PT-P700 P-touch Label Printer RemovableDisk
- 209b QL-800 P-touch Label Printer
- 209c QL-810W P-touch Label Printer
- 209d QL-820NWB P-touch Label Printer
+ 209b QL-800 Label Printer
+ 209c QL-810W Label Printer
+ 209d QL-820NWB Label Printer
+ 20a7 QL-1100 Label Printer
+ 20a8 QL-1110NWB Label Printer
+ 20a9 QL-1100 Label Printer (mass storage)
+ 20aa QL-1110NWB Label Printer (mass storage)
+ 20ab QL-1115NWB Label Printer
+ 20ac QL-1115NWB Label Printer (mass storage)
+ 20c0 QL-600 Label Printer
2100 Card Reader Writer
2102 Sewing machine
60a0 ADS-2000
a4a2 Linux-USB Ethernet/RNDIS Gadget
a4a3 Linux-USB user-mode isochronous source/sink
a4a4 Linux-USB user-mode bulk source/sink
- a4a5 Pocketbook Pro 903 / Mobius 2 Action Cam
+ a4a5 Pocketbook Pro 903 / Mobius 2 Action Cam / xDuoo X3
a4a6 Linux-USB Serial Gadget
a4a7 Linux-USB Serial Gadget (CDC ACM mode)
a4a8 Linux-USB Printer Gadget
02c4 Device
02d1 DVD RW
02d2 PSP Slim
+ 02d4 UP-CX1
02d8 SBAC-US10 SxS PRO memory card reader/writer
02e1 FeliCa S330 [PaSoRi]
02ea PlayStation 3 Memory Card Adaptor
0385 Walkman NWZ-E436F
0387 IC Recorder (P)
03bc Webbie HD - MHS-CM1
+ 03c3 UP-DR80MD
+ 03c4 Stryker SDP1000
+ 03c5 UP-DR80
03cc SD Card Reader
03d1 DPF-X95
03d3 DR-BT100CX
0c02 ILCE-7M3 [A7III] in Mass Storage mode
0c03 ILCE-7M3 [A7III] in MTP mode
0c34 ILCE-7M3 [A7III] in PC Remote mode
+ 0cd3 WH-1000XM3 [Wireless Noise-Canceling Headphones]
0cda PlayStation Classic controller
1000 Wireless Buzz! Receiver
054d Try Corp.
2802 Kbd Hub
3002 Keyboard
3004 Genius KB-29E
+ 3013 BakkerElkhuizen Wired Keyboard S-board 840 Design
+ 3020 BakkerElkhuizen Wired Keyboard S-board 840 Design USB-Hub
3027 Sun-Flex ProTouch
3107 Keyboard
3132 Optical mouse M-DY4DR / M-DY6DR
0093 TPC93
0097 TPC97
009a TPC9A
+ 00a2 STU-300B [LCD signature pad]
00b0 PTZ-430 [Intuos3 (4x5)]
00b1 PTZ-630 [Intuos3 (6x8)]
00b2 PTZ-930 [Intuos3 (9x12)]
00f4 DTK-2400 [Cintiq 24HD] tablet
00f6 DTH-2400 [Cintiq 24HD touch] touchscreen
00f8 DTH-2400 [Cintiq 24HD touch] tablet
+ 00f9 DTK-2200 [Cintiq 22HD] hub
00fa DTK-2200 [Cintiq 22HD] tablet
00fb DTU-1031
0100 TPC100
033d CTL-690 [Intuos Draw (M)]
033e CTH-690 [Intuos Art (M)]
0343 DTK-1651
- 0347 Integrated Hub
- 0348 Integrated Hub
+ 0347 DTH-W1620 [MobileStudio Pro 16] internal hub
+ 0348 DTH-W1620 [MobileStudio Pro 16] external hub
034a DTH-W1320 [MobileStudio Pro 13] touchscreen
034b DTH-W1620 [MobileStudio Pro 16] touchscreen
034d DTH-W1320 [MobileStudio Pro 13] tablet
038e DTH-3220 [Cintiq Pro 32] external hub
038f DTH-3220 [Cintiq Pro 32] internal hub
0390 DTK-1660 [Cintiq 16]
+ 0392 PTH-460 [Intuos Pro (S)]
+ 0396 DTK-1660E
+ 0398 DTH-W1320 [MobileStudio Pro 13] tablet
+ 0399 DTH-W1620 [MobileStudio Pro 16] tablet
+ 039a DTH-W1320 [MobileStudio Pro 13] touchscreen
+ 039b DTH-W1620 [MobileStudio Pro 16] touchscreen
+ 039c DTH-W1320 [MobileStudio Pro 16] external hub
+ 039d DTH-W1320 [MobileStudio Pro 16] internal hub
+ 03aa DTH-W1620 [MobileStudio Pro 16] tablet
+ 03ac DTH-W1620 [MobileStudio Pro 16] touchscreen
0400 PenPartner 4x5
4001 TPC4001
4004 TPC4004
0001 Monitor
0002 HID Monitor Controls
0003 Device Bay Controller
+ 4001 Monitor
056e Elecom Co., Ltd
0002 29UO Mouse
0057 Micro Grast Pop M-PGDL
00a4 Blue LED Mouse M-BL06DB
00a5 M-NV1BR Bluetooth Mouse
00a7 Blue LED Mouse M-BL08DB
+ 00a8 M-BL09DB Mouse
+ 00a9 M-BL10UB Mouse
+ 00aa M-BL11DB Mouse
+ 00ac M-A-BL01UL / M-BL15DB Mouse
+ 00b4 Track on Glass Mouse M-TG02DL
+ 00b5 Track on Glass Mouse M-TG03UL
+ 00b6 Track on Glass Mouse M-TG04DL
+ 00b8 M-A-BL01UL or M-ASKL2 Mouse
+ 00b9 M-A-BL02DB or M-ASKL Mouse
+ 00cb M-BL21DB Mouse
+ 00cd M-XG1UB Mouse
+ 00ce M-XG1DB Mouse
+ 00cf M-XG1BB Bluetooth Mouse
+ 00d0 M-XG2UB Mouse
+ 00d1 M-XG2DB Mouse
+ 00d2 M-XG2BB Bluetooth Mouse
+ 00d3 M-XG3DL Mouse
+ 00d4 M-LS11DL Mouse
+ 00da M-XG4UB Mouse
+ 00db M-XG4DB Mouse
+ 00dc M-XG4BB Bluetooth Mouse
+ 00dd M-LS12UL Mouse
+ 00de M-LS13UL Mouse
+ 00df M-BL22DB Mouse
+ 00e1 M-WK01DB or M-A-BL04DB
+ 00e2 M-A-BL03DB
+ 00e3 M-XGx10UB
+ 00e4 M-XGx10DB
+ 00e5 M-XGx10BB
+ 00e6 M-XGx20DL or M-XGx20DB UltimateLaser Mouse
+ 00f1 M-XT1DRBK USB EX-G Wireless Optical TrackBall
+ 00f2 M-XT1URBK EX-G Optical Trackball
+ 00f3 M-BL23DB
+ 00f4 M-BT13BL LBT-UAN05C2
+ 00f7 M-KN1DB
+ 00f8 M-BL22DB Mouse (other version)
+ 00f9 M-XT2URBK EX-G Optical TrackBall
+ 00fa M-XT2DRBK EX-G Wireless Optical TrackBall
+ 00fb M-XT3URBK EX-G Optical TrackBall
+ 00fc M-XT3DRBK EX-G Wireless Optical TrackBall
+ 00fd M-XT4DRBK EX-G Wireless Optical TrackBall
+ 00fe M-DT1URBK or M-DT2URBK DEFT Optical TrackBall
+ 00ff M-DT1DRBK or M-DT2DRBK DEFT Wireless Optical Mouse
+ 0101 M-BL25UBS
+ 0103 M-BT16BBS
+ 0104 M-BL26UBC
+ 0105 M-BL26DBC
+ 0107 M-LS15UL
+ 0108 M-LS15DL
+ 0109 M-LS16UL Mouse
+ 010a M-LS16DL / M-KN2DLS
+ 010b M-BL21DB Mouse
+ 010c M-HT1URBK HUGE Optical TrackBall
+ 010d M-HT1DRBK HUGE Wireless Optical TrackBall
+ 010e M-KS1DBS / M-FPG3DBS
+ 010f M-FBG3DB
+ 0115 M-BT13BL
+ 0121 M-ED01DB
+ 0122 M-NK01DB
+ 0124 Dual connect Mouse M-DC01MB Bluetooth
+ 0128 TrackBall Mouse M-XPT1MR Wired
+ 0129 TrackBall Mouse M-XPT1MR Wireless
+ 0130 TrackBall Mouse M-XPT1MR Bluetooth
+ 0131 TrackBall Mouse M-DPT1MR Wired
+ 0132 TrackBall Mouse M-DPT1MR Wireless
+ 0133 TrackBall Mouse M-DPT1MR Bluetooth
+ 0136 M-BT20BB
+ 0137 BlueTooth 4.0 Mouse M-BT21BB
+ 0138 M-A-BL07DB
+ 0140 M-G01UR
+ 0141 M-Y9UB
+ 0142 M-DY13DB
+ 0144 M-FBL01DB
+ 1055 TK-DCP03 WIRED
+ 1057 TK-DCP03 BT
2003 JC-U3613M
2004 JC-U3613M
200c LD-USB/TX
+ 200f JC-U4013S Gamepad
2012 JC-U4013S Gamepad
4002 Laneed 100Mbps Ethernet LD-USB/TX [pegasus]
4005 LD-USBL/TX
8501 FRITZ WLAN N v2 [RT5572/rt2870.bin]
057d Shark Multimedia, Inc.
057e Nintendo Co., Ltd
+ 0300 USB-EXI Adapter (GCP-2000)
+ 0304 RVT-H Reader
0305 Broadcom BCM2045A Bluetooth Radio [Nintendo Wii]
0306 Wii Remote Controller RVL-003
0337 Wii U GameCube Controller Adapter
+ 2000 Switch
2006 Joy-Con L
2007 Joy-Con R
+ 2009 Switch Pro Controller
+ 200e Joy-Con Charging Grip
+ 3000 SDK Debugger
057f QuickShot, Ltd
6238 USB StrikePad
0580 Denron, Inc.
0581 Racal Data Group
+ 0107 Tera Barcode Scanner 2.4 GHz Receiver
+ 020c Tera 2D Barcode Scanner EVHK0012
0582 Roland Corp.
0000 UA-100(G)
0002 UM-4/MPU-64 MIDI Interface
0159 DUO-CAPTURE EX
015b INTEGRA-7
015d R-88
+ 01b5 Boutique Series Synthesizer (Normal mode)
+ 01b6 Boutique Series Synthesizer (Storage mode)
+ 01df Rubix22
+ 01e0 Rubix24
+ 01e1 Rubix44
+ 01ef Go:KEYS MIDI
0505 EDIROL UA-101
0583 Padix Co., Ltd (Rockfire)
0001 4 Axis 12 button +POV
2033 RM-203 USB Nest [mode 4]
2050 PX-205 PSX Bridge
205f PSX/USB converter
+ 2060 2-axis 8-button gamepad
206f USB, 2-axis 8-button gamepad
3050 QF-305u Gamepad
3379 Rockfire X-Force
058e Tripath Technology, Inc.
058f Alcor Micro Corp.
1234 Flash Drive
+ 198b Webcam (Gigatech P-09)
2412 SCard R/W CSR-145
2802 Monterey Keyboard
5492 Hub
6387 Flash Drive
6390 USB 2.0-IDE bridge
6391 IDE Bridge
+ 6998 AU6998 Flash Disk Controller
9213 MacAlly Kbd Hub
9215 AU9814 Hub
9254 Hub
0004 Cable Modem
000b MR56SVS
0028 HJ-720IT / HEM-7080IT-E / HEM-790IT
+ 0051 FT232BM [E58CIFQ1 with FTDI USB2Serial Converter]
0591 Questra Consulting
0592 Powerware Corp.
0002 UPS (X-Slot)
0421 Big Disk G465
0525 BigDisk Extreme 500
0641 Mobile Hard Drive
+ 0828 d2 Quadra
0829 BigDisk Extreme+
1004 Little Disk 20 GB
100c Rugged Triple Interface Mobile Hard Drive
1021 Little Disk
1027 iamaKey V2
102a Rikiki Hard Drive
+ 103d D2
1049 rikiki Harddrive
1052 P'9220 Mobile Drive
+ 1053 P'9230 2TB [Porsche Design Desktop Drive 2TB]
1061 Rugged USB3-FW
1064 Rugged 16 and 32 GB
106b Rugged Mini HDD
106d Porsche Design Mobile Drive
106e Porsche Design Desktop Drive
+ 1094 Rugged THB
a601 HardDrive
a602 CD R/W
05a0 Vetronix Corp.
0002 CVA122 Cable Voice Adapter (WDM)
0003 CVA124E Cable Voice Adapter (WDM)
0004 CVA122E Cable Voice Adapter (WDM)
+ 0008 STA1520 Tuning Adapter
0a00 Integrated Management Controller Hub
0a01 Virtual Keyboard/Mouse
0a02 Virtual Mass Storage
0519 OV519 Microphone
1550 VEHO Filmscanner
2640 OV2640 Webcam
+ 2642 Integrated Webcam for Dell XPS 2010
2643 Monitor Webcam
264b Monitor Webcam
2800 SuperCAM
0247 Internal Keyboard/Trackpad (JIS)
024a Internal Keyboard/Trackpad (MacBook Air) (ISO)
024d Internal Keyboard/Trackpad (MacBook Air) (ISO)
+ 024f Aluminium Keyboard (ANSI)
0250 Aluminium Keyboard (ISO)
0252 Internal Keyboard/Trackpad (ANSI)
0253 Internal Keyboard/Trackpad (ISO)
0254 Internal Keyboard/Trackpad (JIS)
0259 Internal Keyboard/Trackpad
+ 025a Internal Keyboard/Trackpad
0263 Apple Internal Keyboard / Trackpad (MacBook Retina)
0267 Magic Keyboard A1644
0269 Magic Mouse 2 (Lightning connector)
12a4 iPad 3 (wifi)
12a5 iPad 3 (CDMA)
12a6 iPad 3 (3G, 16 GB)
- 12a8 iPhone5/5C/5S/6
+ 12a8 iPhone 5/5C/5S/6/SE
12a9 iPad 2
12aa iPod Touch 5.Gen [A1421]
12ab iPad 4/Mini1
1301 iPod Shuffle 2.Gen
1302 iPod Shuffle 3.Gen
1303 iPod Shuffle 4.Gen
+ 1392 Apple Watch charger
+ 1393 AirPods case
+ 1395 Smart Battery Case [iPhone 6]
+ 1398 Smart Battery Case
1401 Modem
1402 Ethernet Adapter [A1277]
1500 SuperDrive [A1379]
8242 Built-in IR Receiver
8281 Bluetooth Host Controller
8286 Bluetooth Host Controller
+ 8289 Bluetooth Host Controller
828c Bluetooth Host Controller
8290 Bluetooth Host Controller
8300 Built-in iSight (no firmware loaded)
8403 Internal Memory Card Reader
8404 Internal Memory Card Reader
+ 8406 Internal Memory Card Reader
8501 Built-in iSight [Micron]
8502 Built-in iSight
8505 Built-in iSight
8509 FaceTime HD Camera
850a FaceTime Camera
8510 FaceTime HD Camera (Built-in)
+ 8600 iBridge
911c Hub in A1082 [Cinema HD Display 23"]
9127 Hub in Thunderbolt Display
912f Hub in 30" Cinema Display
05b5 Dialogic Corp.
05b6 Proxima Corp.
05b7 Medianix Semiconductor, Inc.
-05b8 Agiler, Inc.
+05b8 SYSGRATION
3002 Scroll Mouse
+ 3126 APT-905 Wireless presenter
3223 ISY Wireless Presenter
05b9 Philips Research Laboratories
05ba DigitalPersona, Inc.
0008 AccelePort USB 8
05c6 Qualcomm, Inc.
0114 Select RW-200 CDMA Wireless Modem
+ 0a02 Jolla Device Developer Mode
+ 0a07 Jolla Device MTP
+ 0afe Jolla Device Charging Only
1000 Mass Storage Device
3100 CDMA Wireless Modem/Phone
3196 CDMA Wireless Modem
9003 Quectel UC20
9008 Gobi Wireless Modem (QDL mode)
9018 Qualcomm HSUSB Device
- 9025 Qualcomm HSUSB Device
+ 9025 HSUSB Device
+ 9090 Quectel UC15
+ 9091 Intex Aqua Fish & Jolla C Diagnostic Mode
+ 9092 Nokia 8110 4G
+ 90ba Audio 1.0 device
+ 90bb Snapdragon interface (MIDI + ADB)
+ 90dc Fairphone 2 (Charging & ADB)
9201 Gobi Wireless Modem (QDL mode)
9202 Gobi Wireless Modem
9203 Gobi Wireless Modem
9211 Acer Gobi Wireless Modem (QDL mode)
9212 Acer Gobi Wireless Modem
9214 Acer Gobi 2000 Wireless Modem (QDL mode)
- 9215 Acer Gobi 2000 Wireless Modem
+ 9215 Quectel EC20 LTE modem / Acer Gobi 2000 Wireless Modem
9221 Gobi Wireless Modem (QDL mode)
9222 Gobi Wireless Modem
9224 Sony Gobi 2000 Wireless Modem (QDL mode)
9265 Asus Gobi 2000 Wireless Modem
9274 iRex Technologies Gobi 2000 Wireless Modem (QDL mode)
9275 iRex Technologies Gobi 2000 Wireless Modem
+ f003 Nokia 8110 4G
05c7 Qtronix Corp.
0113 PC Line Mouse
1001 Lynx Mouse
0103 FO13FF-65 PC-CAM
010b Webcam (UVC)
021a HP Webcam
+ 0233 HP Webcam
0318 Webcam
0361 SunplusIT INC. HP Truevision HD Webcam
036e Webcam
+ 0374 HP EliteBook integrated HD Webcam
+ 03a1 XiaoMi Webcam
+ 03b1 Webcam
+ 03bc HP Wide Vision HD Integrated Webcam
+ 03cb HP Wide Vision HD Integrated Webcam
0403 Webcam
041b HP 2.0MP High Definition Webcam
05c9 Semtech Corp.
0403 Printing Support
0405 Type 101
0406 Type 102
+ 0437 Aficio SP 3510SF
+ 044e SP C250SF (multifunction device: printer, scanner, fax)
1803 V5 camera [R5U870]
1810 Pavilion Webcam [R5U870]
1812 Pavilion Webcam
183b Visual Communication Camera VGP-VCC8 [R5U870]
183d Sony Vaio Integrated Webcam
183e Visual Communication Camera VGP-VCC9 [R5U870]
+ 183f Sony Visual Communication Camera Integrated Webcam
1841 Fujitsu F01/ Lifebook U810 [R5U870]
1870 Webcam 1000
+ 1880 R5U880
18b0 Sony Vaio Integrated Webcam
18b1 Sony Vaio Integrated Webcam
18b3 Sony Vaio Integrated Webcam
4d02 MP3 Player
4d12 MP3 Player
4d30 MP3 Player
+ a201 JumpDrive S70 4GB
a209 JumpDrive S70
a300 JumpDrive2
a400 JumpDrive trade; Pro 40-501
c753 JumpDrive TwistTurn
c75c JumpDrive V10
05dd Delta Electronics, Inc.
+ a011 HID UPS Battery
ff31 AWU-120
ff32 FriendlyNET AeroLAN AL2011
ff35 PCW 100 - Wireless 802.11b Adapter
0502 GL620USB-A GeneLink USB-USB Bridge
0503 Webcam
0504 HID Keyboard Filter
+ 0510 Camera
0604 USB 1.1 Hub
- 0605 USB 2.0 Hub
+ 0605 Hub
0606 USB 2.0 Hub / D-Link DUB-H4 USB 2.0 Hub
0607 Logitech G110 Hub
0608 Hub
- 0610 4-port hub
+ 0610 Hub
0612 Hub
0616 hub
0660 USB 2.0 Hub
0711 Card Reader
0712 Delkin Mass Storage Device
0715 USB 2.0 microSD Reader
- 0716 USB 2.0 Multislot Card Reader/Writer
+ 0716 Multislot Card Reader/Writer
0717 All-in-1 Card Reader
0718 IDE/SATA Adapter
0719 SATA adapter
0727 microSD Reader/Writer
0731 GL3310 SATA 3Gb/s Bridge Controller
0732 All-in-One Cardreader
- 0736 microSD Reader/Writer
+ 0736 Colour arc SD Card Reader [PISEN]
0738 Card reader
0741 microSD Card Reader
0743 SDXC and microSDXC CardReader
0745 Logilink CR0012
0748 All-in-One Cardreader
+ 0749 SD Card Reader and Writer
0751 microSD Card Reader
0760 USB 2.0 Card Reader/Writer
0761 Genesys Mass Storage Device
05f9 PSC Scanning, Inc.
1104 Magellan 2200VS
1206 Gryphon series (OEM mode)
+ 120c Gryphon GD4430-BK
2202 Point of Sale Handheld Scanner
2206 Gryphon series (keyboard emulation mode)
220c Datalogic Gryphon GD4430
0251 Raider Pro
0253 ProPad 8 Digital
0286 SV-286 Cyclone Digital
+ 1007 Mad Catz Controller
107a PowerPad Pro X-Box pad
262a 3dfx HammerHead FX
262f HammerHead Fx
0014 Gamepad
1010 Optical Wireless
2001 Microsoft Wireless Receiver 700
+ 3030 Controller
+ 3031 Controller
05ff LeCroy Corp.
0600 Barco Display Systems
0601 Jazz Hipster Corp.
0602 Vista Imaging, Inc.
1001 ViCam Webcam
0603 Novatek Microelectronics Corp.
+ 0002 Sino Wealth keyboard/mouse 2.4 GHz receiver
00f1 Keyboard (Labtec Ultra Flat Keyboard)
00f2 Keyboard (Labtec Ultra Flat Keyboard)
6871 Mouse
2101 Keyboard
2231 KSK-6001 UELX Keyboard
2270 Gigabyte K8100 Aivia Gaming Keyboard
+ 500a Cougar 500k Gaming Keyboard
5253 Thermaltake MEKA G-Unit Gaming Keyboard
5811 ACK-571U Wireless Keyboard
5903 Japanese Keyboard - 595U
0622 Iotech, Inc.
0623 Littelfuse, Inc.
0624 Avocent Corp.
+ 0013 SC Secure KVM
0248 Virtual Hub
0249 Virtual Keyboard/Mouse
0251 Virtual Mass Storage
+ 0252 Virtual SD card reader
0294 Dell 03R874 KVM dongle
0402 Cisco Virtual Keyboard and Mouse
0403 Cisco Virtual Mass Storage
+ 1774 Cybex SC985
0625 TiMedia Technology Co., Ltd
0626 Nippon Systems Development Co., Ltd
0627 Adomax Technology Co., Ltd
062a MosArt Semiconductor Corp.
0000 Optical mouse
0001 Notebook Optical Mouse
+ 0020 Logic3 Gamepad
+ 0033 Competition Pro Steering Wheel
0102 Wireless Keyboard/Mouse Combo [MK1152WC]
0201 Defender Office Keyboard (K7310) S Zodiak KM-9010
0252 Emerge Uni-retractable Laser Mouse
2410 Wireless PS3 gamepad
3286 Nano Receiver [Sandstrom Laser Mouse SMWLL11]
4101 Wireless Keyboard/Mouse
+ 4102 Wireless Mouse
+ 4106 Wireless Mouse 2.4G
+ 4c01 2,4Ghz Wireless Transceiver [for Delux M618 Plus Wireless Vertical Mouse]
6301 Trust Wireless Optical Mouse MI-4150K
9003 VoIP Conference Hub (A16GH)
9004 USR9602 USB Internet Mini Phone
0a13 AV600U
0a15 Konica Minolta SC-110
0a16 Konica Minolta SC-215
+ 0a2a AV220 C2
0a30 UMAX Astra 6700 Scanner
0a41 Avision AM3000/MF3000 Series
0f01 fi-4010CU
064d TriTech Microelectronics, Ltd
064e Suyin Corp.
2100 Sony Visual Communication Camera
+ 3410 RGBIR Camera
9700 Asus Integrated Webcam
a100 Acer OrbiCam
a101 Acer CrystalEye Webcam
a110 HP Webcam
a114 Lemote Webcam
a116 UVC 1.3MPixel WebCam
+ a127 HP Integrated Webcam
a136 Asus Integrated Webcam [CN031B]
a219 1.3M WebCam (notebook emachines E730, Acer sub-brand)
c107 HP webcam [dv6-1190en]
e263 HP TrueVision HD Integrated Webcam
f102 Lenovo Integrated Webcam [R5U877]
f103 Lenovo Integrated Webcam [R5U877]
+ f207 Lenovo EasyCamera Integrated Webcam
f209 HP Webcam
f300 UVC 0.3M Webcam
064f WIBU-Systems AG
82e0 MP3 Player
8320 TrekStor i.Beat fun
835d MP3 Player
+ 83b5 Transcend T.sonic 530 MP3 Player
9000 MP3 Player
9001 MP3 Player
9002 MP3 Player
0600 IDE Bridge
0610 Onext EG210U MODEM
0611 AlDiga AL-11U Quad-band GSM/GPRS/EDGE modem
+ 1231 Orico SATA External Hard Disk Drive Lay-Flat Docking Station with USB 3.0 & eSATA interfaces.
2303 PL2303 Serial Port
2305 PL2305 Parallel Port
2306 Raylink Bridge Controller
2515 Flash Disk Embedded Hub
2517 Flash Disk Mass Storage Device
2528 Storage device (8gB thumb drive)
+ 2571 LG Electronics GE24LU21
25a1 PL25A1 Host-Host Bridge
2773 PL2773 SATAII bridge controller
3400 Hi-Speed Flash Disk with TruePrint AES3400
3009 Magicolor 2300W
300b PagePro 1350W
300c PagePro 1300W
+ 301b Develop D 1650iD
+ 3023 Develop D 2050iD
302e Develop D 1650iD PCL
3034 Develop D 2050iD PCL
4001 Dimage 2300
0500 GameStick 3D
0501 CH Pro Pedals
0504 F-16 Combat Stick
+068f Nihon KOHDEN
+ c00d MEK-6500
0690 Golden Bridge Electech, Inc.
0693 Hagiwara Sys-Com Co., Ltd
0002 FlashGate SmartMedia Card Reader
9999 VLxxxx Monitor+Hub
0699 Tektronix, Inc.
0347 AFG 3022B
+ 0365 TDS 2004B
036a TDS 2024B
069a Askey Computer Corp.
0001 VC010 Webcam [pwc]
0006 Cyborg Gold Joystick
0109 P880 Pad
0160 ST290 Pro
- 0200 Xbox Adrenalin Hub
+ 0200 Racing Wheel
+ 0201 Adrenalin Gamepad
0241 Xbox Adrenalin Gamepad
0255 X52 Flight Controller
040b P990 Dual Analog Pad
a2ae Pro Flight Instrument Panel
a502 Gaming Mouse
f518 P3200 Rumble Force Game Pad
+ f51a P3600
ff04 R440 Force Wheel
ff0c Cyborg Force Rumble Pad
ff0d P2600 Rumble Force Pad
000e HID Device
0010 Wireless TouchPad
0013 DisplayPad
+ 009a Metallica MIS Touch Fingerprint Reader
+ 00a2 Metallica MOH Touch Fingerprint Reader
+ 00bd Prometheus MIS Touch Fingerprint Reader
2970 touchpad
06cc Terayon Communication Systems
0101 Cable Modem
03aa CP3020DA
03ad CP-9800D/DW
03ae CP-9800DW-S
+ 0f10 Hori/Namco FlightStick 2
3b10 P95D
3b21 CP-9810D/DW
3b30 CP-D70DW / CP-D707DW
3b36 CP-D80DW
3b50 CP-W5000DW
3b60 CP-D90DW
+ 3b80 CP-M1
06d4 Cisco Systems
06d5 Toshiba
4000 Japanese Keyboard
0231 PS/2 Mouse Port
0232 Serial On Port
0240 PS/2 to USB Converter
+ 0260 PS/2 Keyboard and Mouse
0300 BAY-3U1S1P Parallel Port
0302 Parallel Port
0900 SVGA Adapter
c541 ISDN TA 280
0736 Lorom Industrial Co., Ltd
0738 Mad Catz, Inc.
+ 2215 X-55 Rhino Stick
+ 2237 V.1 Stick
+ 4506 Wireless Controller
4507 XBox Device
- 4516 XBox Device
- 4520 XBox Device
- 4526 XBox Device
- 4536 XBox Device
- 4540 XBox Device
- 4556 XBox Device
+ 4516 Control Pad
+ 4520 Control Pad Pro
+ 4522 LumiCON
+ 4526 Control Pad Pro
+ 4530 Universal MC2 Racing Wheel and Pedals
+ 4536 MicroCON
+ 4540 Beat Pad
+ 4556 Lynx Wireless Controller
4566 XBox Device
4576 XBox Device
- 4586 XBox Device
- 4588 XBox Device
+ 4586 MicroCON Wireless Controller
+ 4588 Blaster
+ 45ff Beat Pad
+ 4716 Wired Xbox 360 Controller
+ 4718 Street Fighter IV FightStick SE for Xbox 360
+ 4726 Xbox 360 Controller
+ 4728 Street Fighter IV FightPad for Xbox 360
+ 4730 MC2 Racing Wheel for Xbox 360
+ 4736 MicroCON for Xbox 360
+ 4738 Street Fighter IV Wired Controller for Xbox 360
+ 4740 Beat Pad for Xbox 360
+ 4743 Beat Pad Pro
+ 4758 Arcade Game Stick
+ 4a01 FightStick TE 2 for Xbox One
+ 6040 Beat Pad Pro
8818 Street Fighter IV Arcade FightStick (PS3)
+ 9871 Portable Drum Kit
+ a109 S.T.R.I.K.E.7 Keyboard
+ a215 X-55 Rhino Throttle
+ b726 Modern Warfare 2 Controller for Xbox 360
+ b738 Marvel VS Capcom 2 TE FightStick for Xbox 360
+ beef Joytech Neo SE Advanced Gamepad
+ cb02 Saitek Cyborg Rumble Pad
+ cb03 Saitek P3200 Rumble Pad
+ cb29 Saitek Aviator Stick AV8R02
+ f738 Super Street Fighter IV FightStick TE S for Xbox 360
073a Chaplet Systems, Inc.
2230 infrared dongle for remote
073b Suncom Technologies
0522 Pole Display (SPC522-3415 2 x 20 Line Display)
0624 Pole Display (SP324-3415 4 x 20 Line Display)
073d Eutron S.p.a.
+ 0000 SmartKey
0005 Crypto Token
0007 CryptoIdentity CCID
0025 SmartKey 3
200a ISDN TA [HFC-S]
0745 Syntech Information Co., Ltd
0746 Onkyo Corp.
+ 4700 Integra MZA-4.7
5500 SE-U55 Audio Device
0747 Labway Corp.
0748 Strong Man Enterprise Co., Ltd
0002 PS/2 Adapter
0755 Aureal Semiconductor
0757 Network Technologies, Inc.
+ 0a00 SUN Adapter
0758 Carl Zeiss Microscopy GmbH
075b Sophisticated Circuits, Inc.
0001 Kick-off! Watchdog
6003 ColorMunki Smile
d094 X-Rite DTP94 [Quato Silver Haze Pro]
0766 Jess-Link Products Co., Ltd
+ 0017 Packard Bell Carbon
001b Packard Bell Go
0204 TopSpeed Cyberlink Remote Control
0767 Tokheim Corp.
1021 CardMan 1021
1221 CardMan 1221
1784 CardMan 6020
- 3021 CardMan 3121
- 3022 CardMan 3021
+ 3021 CardMan 3021 / 3121
+ 3022 CardMan 3121 (HID Technologies)
3610 CardMan 3620
3621 CardMan 3621
3821 CardMan 3821
c000 CardMan 3x21 CS
c001 CardMan 5121 CS
076c Partner Tech
+ 0204 CD7220 Communications Port
+ 0302 RP-600
076d Denso Corp.
076e Kuan Tech Enterprise Co., Ltd
076f Jhen Vei Electronic Co., Ltd
0776 Inalways Corp.
0777 Comda Enterprise Corp.
0778 Volex, Inc.
-0779 Fairchild Semiconductor
+0779 ON Semiconductor (formerly Fairchild)
+ 0133 FUSB307B
+ 0134 FUSB308B
077a Sankyo Seiki Mfg. Co., Ltd
077b Linksys
08be BEFCMU10 v4 Cable Modem
07af iMic
1016 AirClick
627a Radio SHARK
+077e Softing AG
+ 008a NetLink Compact MPI/Profibus adapter
+ 0160 EDICblue
+ 0220 VAS5054A
077f Well Excellent & Most Corp.
0780 Sagem Monetel GmbH
1202 ORGA 900 Smart Card Terminal Virtual Com Port
5575 Cruzer Glide
5576 Cruzer Facet
5577 Cruzer Pop (8GB)
- 557d Cruzer Force (64GB)
+ 557d Cruzer Force
5580 SDCZ80 Flash Drive
5581 Ultra
5583 Ultra Fit
+ 5588 Extreme Pro
+ 5589 SD8SB8U512G[Extreme 500]
+ 558c Extreme Portable SSD
5590 Ultra Dual
5591 Ultra Flair
5e10 Encrypted
6100 Ultra II SD Plus 2GB
+ 6500 uSSD 5000
7100 Cruzer Mini
7101 Pen Flash
7102 Cruzer Mini
a7c1 Storage device (SD card reader)
a7e8 SDDR-113 MicroMate SDHC Reader
b2b3 SDDR-103 MobileMate SD+ Reader
+ b2b5 SDDR-104 MobileMate SD+ Reader
b4b5 SDDR-89 V4 ImageMate 12-in-1 Reader
+ b6b7 SDDR-99 V4 ImageMate 5-in-1 Reader
b6ba CF SDDR-289
0782 Trackerball
0783 C3PO
0063 LDR Device
0064 LDR-R Device
00b3 DVD Multi-plus unit LDR-H443U2
+ 00cc LHD Device
0105 LAN-TX/U1H2 10/100 Ethernet Adapter [pegasus II]
010c Realtek RTL8187 Wireless 802.11g 54Mbps Network Adapter
0160 LAN-GTJ/U2A
0986 AN986 Pegasus Ethernet
8266 Infineon WildCard-USB Wireless LAN Adapter
8511 ADM8511 Pegasus II Ethernet
- 8513 AN8513 Ethernet
- 8515 AN8515 Ethernet
+ 8513 ADM8513 Pegasus II Ethernet
+ 8515 ADM8515 Pegasus II Ethernet
07aa Corega K.K.
0001 Ether USB-T Ethernet [klsi]
0004 FEther USB-TX Ethernet [pegasus]
fc01 IDE bridge
fc02 Cable II USB-2
fc03 USB2-IDE IDE bridge
+ fc77 Quattro 3.0
fcd6 Freecom HD Classic
fcf6 DataBar
fcf8 Freecom Classic SL Network Drive
5101 SurfBoard SB5101 Cable Modem
5120 SurfBoard SB5120 Cable Modem (RNDIS)
5121 Surfboard 5121 Cable Modem
+ 6002 MTR7000 Cable Tuning Adapter
7030 WU830G 802.11bg Wireless Adapter [Envara WiND512]
07b3 Plustek, Inc.
0001 OpticPro 1212U Scanner
0413 OpticSlim 1200 Scanner
0601 OpticPro ST24 Scanner
0800 OpticPro ST48 Scanner
+ 0807 OpticFilm 7200 scanner
0900 OpticBook 3600 Scanner
090c OpticBook 3600 Plus Scanner
0a06 TVcam VD100
0e08 OpticBook A300 Scanner
1300 OpticBook 3800 Scanner
1301 OpticBook 4800 Scanner
+ 130f Bookreader v200
07b4 Olympus Optical Co., Ltd
0100 Camedia C-2100/C-3000 Ultra Zoom Camera
0102 Camedia E-10/C-220/C-50 Camera
0244 Digital Voice Recorder VN-8500PC
024f Digital Voice Recorder DS-7000
0280 m:robe 100
+ 0295 Digital Voice Recorder VN-541PC
07b5 Mega World International, Ltd
0017 Joystick
0213 Thrustmaster Firestorm Digital 3 Gamepad
07bc Canon Computer Systems, Inc.
07bd Webgear, Inc.
07be Veridicom
+ 1935 Elektron Music Machines
07c0 Code Mercenaries Hard- und Software GmbH
1113 JoyWarrior24F8
1116 JoyWarrior24F14
0837 H837 Hybrid ATSC/QAM
1228 MPEG-2 Capture Device (M038)
1830 AVerTV Volar Video Capture (H830)
+ 1871 TD310 DVB-T/T2/C dongle
3835 AVerTV Volar Green HD (A835B)
850a AverTV Volar Black HD (A850)
850b AverTV Red HD+ (A850T)
0501 Mass Storage
07cd Elektor
0001 USBuart Serial Port
+07ce Nidec Copal
+ c007 DPB-4000
+ c009 DPB-6000
+ c010 CPB-7000
07cf Casio Computer Co., Ltd
1001 QV-8000SX/5700/3000EX Digicam; Exilim EX-M20
1003 Exilim EX-S500
6102 fx-CP400
6801 PL-40R
6802 MIDI Keyboard
+ 6803 CTK-3500 (MIDI keyboard)
07d0 Dazzle
0001 Digital Video Creator I
0002 Global Village VideoFX Grabber
0000 FastLane MIDI Interface
0001 MIDI Interface
0002 MOTU Audio for 64 bit
+ 0004 MicroBook
+ 0008 M Series
07ff Unknown
00ff Portable Hard Drive
+ ffff Mad Catz Gamepad
0801 MagTek
0001 Mini Swipe Reader (Keyboard Emulation)
0002 Mini Swipe Reader
081c Mipsys
081e AlphaSmart, Inc.
df00 Handheld
+081f Manta
+ e401 MM812
0822 Reudo Corp.
2001 IRXpress Infrared Device
0825 GC Protronics
1005 Digimax 220
1009 Digimax V4
1012 6500 Document Camera
+ 103f Digimax S500
1058 S730 Camera
1064 Digimax D830 Camera
1542 Digimax 50 Duo
4300 WG111U Double 108 Mbps Wireless [Atheros AR5004X / AR5005UX]
4301 WG111U (no firmware) Double 108 Mbps Wireless [Atheros AR5004X / AR5005UX]
5f00 WPN111 802.11g Wireless Adapter [Atheros AR5523]
+ 68e1 LB1120-100NAS
6a00 WG111v2 54 Mbps Wireless [RealTek RTL8187L]
7100 WN121T RangeMax Next Wireless-N [Marvell TopDog]
9000 WN111(v1) RangeMax Next Wireless [Marvell 88W8362+88W8060]
9050 A6200 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526]
9051 A6200v2 802.11a/b/g/n/ac (2x2) Wireless Adapter [Realtek RTL8812AU]
9052 A6100 AC600 DB Wireless Adapter [Realtek RTL8811AU]
+ 9054 Nighthawk A7000 802.11ac Wireless Adapter AC1900 [Realtek 8814AU]
a001 PA101 10 Mbps HPNA Home Phoneline RJ-1
f001 On Networks N300MA 802.11bgn [Realtek RTL8192CU]
084d Minton Optic Industry Co., Inc.
0852 CSEM
0853 Topre Corporation
0100 HHKB Professional
+ 0119 RealForce 105UB
+ 0200 RealForce Compact Keyboard
0854 ActiveWire, Inc.
0100 I/O Board
0101 I/O Board, rev1
090f Fujitsu Devices, Inc.
0910 Alation Systems, Inc.
0911 Philips Speech Processing
+ 0c1c SpeechMike III
149a SpeechMike II Pro Plus LFH5276
2512 SpeechMike Pro
0912 Voquette, Inc.
23cc nüvi 1350
2459 GPSmap 62/78 series
2491 Edge 800
+ 2518 eTrex 10
2519 eTrex 30
2535 Edge 800
253c GPSmap 62sc
255b Nuvi 2505LM
+ 2613 Edge 200 TWN
26a1 Nuvi 55
+ 2802 fenix 3
+ 28db Drive 5
47fb nuviCam
+ 4cdb Fenix 6
0920 Echelon Co.
7500 Network Interface
0921 GoHubs, Inc.
0922 Dymo-CoStar Corp.
0007 LabelWriter 330
0009 LabelWriter 310
+ 0013 LabelManager 400
0019 LabelWriter 400
001a LabelWriter 400 Turbo
0020 LabelWriter 450
+ 0400 LabelWriter SE450
1001 LabelManager PnP
+ 8003 M10 Digital Postal Scale
8004 M25 Digital Postal Scale
+ 8009 S250 Digital Postal Scale
0923 IC Media Corp.
010f SIIG MobileCam
0924 Xerox
0925 Lakeview Research
0005 Gamtec.,Ltd SmartJoy PLUS Adapter
03e8 Wii Classic Controller Adapter
+ 1031 WiseGroup Ltd, Gameport Controller
+ 1700 PS/SS/N64 Joypad
3881 Saleae Logic
8101 Phidgets, Inc., 1-Motor PhidgetServo v2.0
8104 Phidgets, Inc., 4-Motor PhidgetServo v2.0
0929 American Biometric Co.
092a Toshiba Information & Industrial Sys. And Services
092b Sena Technologies, Inc.
+ 4210 20S - Bluetooth Motorcycle headset & universal intercom
092f Northern Embedded Science/CAVNEX
0004 JTAG-4
0005 JTAG-5
0509 BT EDR Dongle
0706 PocketPC e740
0707 Pocket PC e330 Series
- 0708 Pocket PC e350 Series
+ 0708 Pocket PC e350 Series
0709 Pocket PC e750 Series
070a Pocket PC e400 Series
070b Pocket PC e800 Series
130c F3607gw Mobile Broadband Module
1311 F3607gw v2 Mobile Broadband Module
1400 Memory Stick 2GB
+ 140b Memory Stick 64GB
642f TravelDrive
6506 TravelDrive 2C
6507 TravelDrive 2C
6540 TransMemory Flash Memory
6544 TransMemory-Mini / Kingston DataTraveler 2.0 Stick
6545 Kingston DataTraveler 102/2.0 / HEMA Flash Drive 2 GB / PNY Attache 4GB Stick
+ a002 SunplusIT SATA bridge
0931 Harmonic Data Systems, Ltd
0932 Crescentec Corp.
0300 VideoAdvantage
003c Rhythmedics HID Bootloader
0939 Lumberg, Inc.
0b15 Toshiba Stor.E Alu 2
+ 0b16 Toshiba StorE HDD
093a Pixart Imaging, Inc.
0007 CMOS 100K-R Rev. 1.90
010e Digital camera, CD302N/Elta Medi@ digi-cam/HE-501A
2621 PAC731x Trust Webcam
2622 Webcam Genius
2624 Webcam
+ 2628 Webcam Genius iLook 300
+ 2700 GE 1.3 MP MiniCam Pro
093b Plextor Corp.
0010 Storage Adapter
0011 PlexWriter 40/12/40U
+ 0012 PlexWriter 48/24/48U
0041 PX-708A DVD RW
0042 PX-712UF DVD RW
a002 ConvertX M402U XLOADER
0951 Kingston Technology
0008 Ethernet
000a KNU101TX 100baseTX Ethernet
+ 1539 Iron Key D300 (Virtual CD-ROM and USB Stick)
1600 DataTraveler II Pen Drive
1601 DataTraveler II+ Pen Drive
1602 DataTraveler Mini
1653 Data Traveler 100 G2 8 GiB
1656 DataTraveler Ultimate G2
1660 Data Traveller 108
- 1665 Digital DataTraveler SE9 64GB
- 1666 DataTraveler 100 G3/G4/SE9 G2
+ 1665 Digital DataTraveler SE9
+ 1666 DataTraveler 100 G3/G4/SE9 G2/50
1689 DataTraveler SE9
168a DataTraveler Micro
168c DT Elite 3.0
+ 16a4 HyperX 7.1 Audio
16b3 HyperX Savage
+ 16d2 HX-KB4BL1-US [HYPERX Alloy FPS Pro]
+ 16d4 HyperX SavageEXO [0382]
+ 16d5 DataTraveler Elite G2
+ 16df HyperX QuadCast
+ 16e4 HyperX Pulsefire Raid
0954 RPM Systems Corp.
0955 NVIDIA Corp.
+ 7005 Bootloader
7018 T186 [Tegra Parker]
701a U-Boot running on Tegra
7020 L4T (Linux for Tegra) running on Tegra
7100 Tegra Device
7140 T124 [Tegra K1/Logan 32-bit]
7210 SHIELD Controller
- 7721 T210 [Tegra Erista]
+ 7321 Switch [Tegra Erista] recovery mode
+ 7721 T210 [TX1 Tegra Erista] recovery mode
7820 T20 [Tegra 2] recovery mode
+ 7c18 T186 [TX2 Tegra Parker] recovery mode
b400 SHIELD (debug)
b401 SHIELD
cf05 SHIELD Tablet (debug)
0a07 34411A Multimeter
1507 33210A Waveform Generator
1745 Test and Measurement Device (IVI)
+ 1f01 N5181A MXG Analog Signal Generator
2918 U2702A oscilloscope
fb18 LC Device
0958 CompuLink Research, Inc.
0305 ePass2000Auto
0309 ePass3000GM
0401 ePass3000
+ 0405 Zzkey Dongle
+ 0608 SC Reader KP382
0702 ePass3003
0703 ePass3003Auto
0802 ePass2000 (G&D STARCOS SPK 2.4)
0984 Apricorn
0040 SATA Wire (2.5")
0200 Hard Drive Storage (TPP)
+ 1407 Secure Key 3.0
0985 cab Produkttechnik GmbH & Co KG
0045 Mach4/200 Label Printer
00a3 A3/200 or A3/300 Label Printer
0996 Integrated Telecom Express, Inc.
099a Zippy Technology Corp.
0638 Sanwa Supply Inc. Small Keyboard
+ 2620 Graphics tablet [Polostar PT1001, Zeniq PT1001, Leogics PT1001]
610c EL-610 Super Mini Electron luminescent Keyboard
+ 6330 SANWA Supply Inc. Slim Keyboard
713a WK-713 Multimedia Keyboard
7160 Hyper Slim Keyboard
099e Trimble Navigation, Ltd
3642 Prism 2.x 802.11b Adapter
09ab Japan Cash Machine Co., Ltd.
09ae Tripp Lite
+ 0002 Any Device (see discussion)
+09b0 Fargo
+ 2400 HDP5000
09b2 Franklin Electronic Publishers, Inc.
0001 eBookman Palm Computer
09b3 Altius Solutions, Inc.
1007 Ex-Series UVC and MSD interface
1008 Serial Port
1996 FLIR ONE Camera
+ 4007 Breach
09cc Workbit Corp.
0404 BAFO USB-ATA/ATAPI Bridge Controller
09cd Psion Dacom Home Networks, Ltd
09d2 Vreelin Engineering, Inc.
09d3 Com One
0001 ISDN TA / Light Rider 128K
- 000b Bluetooth Adapter class 1 [BlueLight]
-09d7 NovAtel Inc.
- 0100 NovAtel FlexPack GPS receiver
-09d8 ELATEC
+ 000b Bluetooth Adapter class 2
+09d7 Hexagon NovAtel Inc.
+ 0100 GPS/GNSS/SPAN sensor
+09d8 ELATEC GmbH
+ 0320 TWN3 Multi125
0406 TWN4 MIFARE NFC
09d9 KRF Tech, Ltd
09da A4Tech Co., Ltd.
024f RF Receiver and G6-20D Wireless Optical Mouse
0260 KV-300H Isolation Keyboard
032b Wireless Mouse (Battery Free)
+ 09da Bloody V8 Mouse
1068 Bloody A90 Mouse
+ 112c Bloody V5 Mouse
+ 3a60 Bloody V8M Core 2 Mouse
8090 X-718BK Oscar Optical Gaming Mouse
9033 X-718BK Optical Mouse
9066 F3 V-Track Gaming Mouse
9090 XL-730K / XL-750BK / XL-755BK Mice
+ f613 Bloody V7M Mouse
09db Measurement Computing Corp.
0075 MiniLab 1008
0076 PMD-1024
09e6 Silutia, Inc.
09e7 Real 3D, Inc.
09e8 AKAI Professional M.I. Corp.
+ 0045 MPK Mini Mk II MIDI Controller
0062 MPD16 MIDI Pad Controller Unit
006d EWI electronic wind instrument
0071 MPK25 MIDI Keyboard
5024 Mass Storage Device
5025 Mass Storage Device
0a4a Ploytec GmbH
+ a400 AUDIO JUNCTION 2.0
0a4b Fujitsu Media Devices, Ltd
0a4c Computex Co., Ltd
15d9 OPTICAL MOUSE
0a5b EAsics NV
0a5c Broadcom Corp.
0201 iLine10(tm) Network Adapter
+ 0bdc 802.11a/b/g/n/ac Wireless Adapter
2000 Bluetooth Device
2001 Bluetooth Device
2009 BCM2035 Bluetooth
21e3 HP Portable Valentine
21e6 BCM20702 Bluetooth 4.0 [ThinkPad]
21e8 BCM20702A0 Bluetooth 4.0
+ 21ec BCM20702A0 Bluetooth 4.0
21f1 HP Portable Bumble Bee
22be BCM2070 Bluetooth 3.0 + HS
4500 BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
0a5d Diatrend Corp.
0a5f Zebra
0009 LP2844 Printer
+ 0050 P120i / WM120i
0081 GK420t Label Printer
+ 0084 GX420d Desktop Label Printer
008b HC100 wristbands Printer
008c ZP 450 Printer
00d1 Zebra GC420d Label Printer
+ 0110 ZD500 Desktop Label Printer
930a Printer
0a62 MPMan
0010 MPMan MP-F40 MP3 Player
c303 Saturn USB 2.0 Camera
c326 Namuga 1.3M Webcam
c33f Webcam
+ c412 Lenovo IdeaCentre Web Camera
c429 Lenovo ThinkCentre Web Camera
c42d Lenovo IdeaCentre Web Camera
0ac9 Micro Solutions, Inc.
1786 USB-N10 802.11n Network Adapter [Realtek RTL8188SU]
1788 BT-270 Bluetooth Adapter
1791 WL-167G v3 802.11n Adapter [Realtek RTL8188SU]
+ 179c Bluetooth Adapter
179d USB-N53 802.11abgn Network Adapter [Ralink RT3572]
179e Eee Note EA800 (network mode)
179f Eee Note EA800 (tablet mode)
17a1 Eee Note EA800 (mass storage mode)
17ab USB-N13 802.11n Network Adapter (rev. B1) [Realtek RTL8192CU]
17ba N10 Nano 802.11n Network Adapter [Realtek RTL8192CU]
+ 17c2 ROG Spitfire
17c7 WL-330NUL
17c9 USB-AC53 802.11a/b/g/n/ac Wireless Adapter [Broadcom BCM43526]
17cb Broadcom BCM20702A0 Bluetooth
17db USB-AC50 802.11a/b/g/n/ac (1x1) Wireless Adapter [MediaTek MT7610U]
17e8 USB-N14 802.11b/g/n (2x2) Wireless Adapter [Ralink RT5372]
17eb USB-AC55 802.11a/b/g/n/ac Wireless Adapter [MediaTek MT7612U]
+ 17f5 Xonar U5 sound card
180a Broadcom BCM20702 Single-Chip Bluetooth 4.0 + LE
1817 USB-AC68 802.11a/b/g/n/ac (4x4) Wireless Adapter [Realtek RTL8814AU]
1825 Qualcomm Bluetooth 4.1
+ 18f0 Realtek 8188EUS [USB-N10 Nano]
4c80 Transformer Pad TF300TG
4c90 Transformer Pad Infinity TF700
4c91 Transformer Pad Infinity TF700 (Debug mode)
0b0d ProjectLab
0000 CenturyCD
0b0e GN Netcom
+ 0305 Jabra EVOLVE Link MS
+ 0311 Jabra EVOLVE 65
+ 0312 enc060:Buttons Volume up/down/mute + phone [Jabra]
+ 0343 Jabra UC VOICE 150a
0348 Jabra UC VOICE 550a MS
034c Jabra UC Voice 750 MS
+ 034d Jabra UC VOICE 750
0410 Jabra SPEAK 410
0420 Jabra SPEAK 510
+ 0422 Jabra SPEAK 510 USB
+ 0933 Jabra Freeway
094d GN Netcom / Jabra REVO Wireless
1017 Jabra PRO 930
1022 Jabra PRO 9450, Type 9400BS (DECT Headset)
1041 Jabra PRO 9460
1900 Jabra Biz 1900
2007 GN 2000 Stereo Corded Headset
+ 2456 Jabra SPEAK 810
+ 245e Jabra Link 370
620c Jabra BT620s
9330 Jabra GN9330 Headset
+ a346 Jabra Engage 75 Stereo
+ a50a Alienware Wireless Gaming Headset AW988
0b0f AVID Technology
+ 0400 DNxID
0b10 Pcally
0b11 I Tech Solutions Co., Ltd
0b1e Electronic Warfare Assoc., Inc. (EWA)
0030 ShuttlePro v2
0401 RollerMouse Free 2
0700 RollerMouse Pro
+ 08a0 Perfit Mouse
+ 1000 RollerMouse Red
+ 1010 Vidamic Technomouse IQ
0b37 Hitachi ULSI Systems Co., Ltd
0b38 Gear Head
0003 Keyboard
0100 D'music MP3 Player
0b4d Graphtec America, Inc.
110a Graphtec CC200-20
+ 1123 Electronic Cutting Tool [Silhouette Portrait]
0b4e Musical Electronics, Ltd
6500 MP3 Player
8028 MP3 Player
1720 10/100 Ethernet
1780 AX88178
1790 AX88179 Gigabit Ethernet
+ 6802 AX68002 KVM Switch SoC
7720 AX88772
772a AX88772A Fast Ethernet
772b AX88772B
0001 Android Phone via mass storage [Wiko Cink Peax 2]
00ce mmO2 XDA GSM/GPRS Pocket PC
00cf SPV C500 Smart Phone
+ 0306 Vive Hub Bluetooth 4.1 (Broadcom BCM920703)
0a01 PocketPC Sync
0a02 Himalaya GSM/GPRS Pocket PC
0a03 PocketPC Sync
0b2f Rhodium
0b51 Qtek 8310 mobile phone [Tornado Noble]
0bce Vario MDA
- 0c01 Dream / ADP1 / G1 / Magic / Tattoo
+ 0c01 Dream / ADP1 / G1 / Magic / Tattoo / FP1
0c02 Dream / ADP1 / G1 / Magic / Tattoo (Debug)
0c03 Android Phone [Fairphone First Edition (FP1)]
0c13 Diamond
0c9e Incredible
0ca2 Desire HD (debug mode)
0ca5 Android Phone [Evo Shift 4G]
+ 0cab Desire / Desire HD / Hero / Thunderbolt (HTC Sync Mode)
0cae T-Mobile MyTouch 4G Slide [Doubleshot]
0de5 One (M7)
0dea M7_UL [HTC One]
0f63 Desire 610 Via MTP
0f64 Desire 601
0fb4 Remote NDIS based Device
+ 0ff0 One Mini (M4)
0ff8 Desire HD (Tethering Mode)
0ff9 Desire / Desire HD / Hero / Thunderbolt (Charge Mode)
0ffe Desire HD (modem mode)
0fff Android Fastboot Bootloader
- 2008 Android Phone via MTP [Wiko Cink Peax 2]
+ 2008 Android Phone via MTP [MT65xx]
200b Android Phone via PTP [Wiko Cink Peax 2]
+ 2134 Vive Hub (SMSC USB2137B)
+ 2744 Vive Hub (HTC CB USB2)
+ 2c87 Vive
0bb5 Murata Manufacturing Co., Ltd
0bb6 Network Alchemy
0bb7 Joytech Computer Co., Ltd
2200 FreeAgent Go FW
2300 Expansion Portable
231a Expansion Portable
+ 231c Expansion Portable
2320 USB 3.0 bridge [Portable Expansion Drive]
2321 Expansion Portable
2322 SRD0NF1 Expansion Portable (STEA)
3008 FreeAgent Desk 1TB
3101 FreeAgent XTreme 640GB
3312 SRD00F2 Expansion Desktop Drive (STBV)
+ 331a Desktop HDD 5TB (ST5000DM000)
3320 SRD00F2 [Expansion Desktop Drive]
3322 SRD0NF2 [Expansion Desktop Drive]
+ 3323 Seagate RSS LLC
3332 Expansion
+ 3343 desktop drive stgy8000400
5020 FreeAgent GoFlex
5021 FreeAgent GoFlex USB 2.0
5030 FreeAgent GoFlex Upgrade Cable STAE104
5121 FreeAgent GoFlex
5161 FreeAgent GoFlex dock
6126 Maxtor D3 Station 5TB
+ 61b5 Maxtor HX-M201TCB [M3 Portable 2TB]
61b6 Maxtor HX-M101TCB/GM [M3 Portable 1TB]
61b7 Maxtor M3 Portable
a003 Backup Plus
a0a1 Backup Plus Desktop
a0a4 Backup Plus Desktop Drive
+ aa14 STJ4000400 [Seagate Basic Portable Drive 4TB]
ab00 Slim Portable Drive
ab1e Backup Plus Portable Drive
ab20 Backup Plus Portable Drive
ab21 Backup Plus Slim
ab24 Backup Plus Portable Drive
ab26 Backup Plus Slim Portable Drive 1 TB
+ ab28 Seagate Backup Plus Portable 5TB SRD00F1
+ ab2d SRD00F1 [Backup Plus Ultra Slim]
ab31 Backup Plus Desktop Drive (5TB)
ab34 Backup Plus
- ab38 Backup Plus Hub
+ ab38 Backup Plus Hub (Mass Storage)
+ ab44 Backup Plus Hub
+ ac20 Backup Plus Slim 2TB
0bc3 IPWireless, Inc.
0001 UMTS-TDD (TD-CDMA) modem
0bc4 Microcube Corp.
0186 Card Reader
0301 multicard reader
0307 Card Reader
+ 0316 Card Reader
0326 Card reader
+ 0411 Hub
+ 0811 Realtek 8812AU/8821AU 802.11ac WLAN Adapter [USB Wireless Dual-Band Adapter 2.4/5Ghz]
+ 0821 RTL8821A Bluetooth
1724 RTL8723AU 802.11n WLAN Adapter
+ 1a2b RTL8188GU 802.11n WLAN Adapter (Driver CDROM Mode)
2831 RTL2831U DVB-T
2832 RTL2832U DVB-T
2838 RTL2838 DVB-T
5401 RTL 8153 USB 3.0 hub with gigabit ethernet
+ 5411 RTS5411 Hub
+ 568c Integrated Webcam HD
570c Asus laptop camera
5730 HP 2.0MP High Definition Webcam
5751 Integrated Webcam
5775 HP "Truevision HD" laptop camera
+ 5776 HP Truevision HD integrated webcam
57b3 Acer 640 × 480 laptop camera
+ 57cc HD Webcam - Realtek Semiconductor
+ 57cf HD WebCam
57da Built-In Video Camera
+ 58c2 Integrated Webcam HD
58c8 Integrated Webcam HD
8150 RTL8150 Fast Ethernet Adapter
8151 RTL8151 Adapteon Business Mobile Networks BV
8197 RTL8187B Wireless Adapter
8198 RTL8187B Wireless Adapter
8199 RTL8187SU 802.11g WLAN Adapter
+ 8723 RTL8723A Bluetooth
8812 RTL8812AU 802.11a/b/g/n/ac 2T2R DB WLAN Adapter
8813 RTL8814AU 802.11a/b/g/n/ac Wireless Adapter
+ 881a RTL8812AU-VS 802.11a/b/g/n/ac 2T2R DB WLAN Adapter
+ 8821 RTL8821A Bluetooth
+ 9210 RTL9210 M.2 NVME Adapter
a811 RTL8811AU 802.11a/b/g/n/ac WLAN Adapter
+ b009 Realtek Bluetooth 4.2 Adapter
+ b00a Realtek Bluetooth 4.2 Adapter
+ b00b Realtek Bluetooth 4.2 Adapter
+ b023 RTL8822BE Bluetooth 4.2 Adapter
+ b711 RTL8188GU 802.11n WLAN Adapter (After Modeswitch)
+ b720 RTL8723BU 802.11b/g/n WLAN Adapter
+ b723 RTL8723B Bluetooth
+ b728 RTL8723B Bluetooth
+ b72a RTL8723B Bluetooth
+ b812 RTL88x2bu [AC1200 Techkey]
0bdb Ericsson Business Mobile Networks BV
1000 BV Bluetooth Device
1002 Bluetooth Device 1.2
1909 F3307 v2 Mobile Broadband Module
190a F3307 Mobile Broadband Module
190b C3607w v2 Mobile Broadband Module
- 1926 H5321 gw Mobile Broadband Driver
+ 1926 H5321 gw Mobile Broadband Module
0bdc Y Media Corp.
0bdd Orange PCS
0be2 Kanda Tsushin Kogyo Co., Ltd
0bee LTK Industries, Ltd
0bef Way2Call Communications
0bf0 Pace Micro Technology PLC
+ c010 EHD100SD
0bf1 Intracom S.A.
0001 netMod Driver Ver 2.4.17 (CAPI)
0002 netMod Driver Ver 2.4 (CAPI)
100f miniCard D2301 802.11bg Wireless Module [SiS 163U]
1017 Keyboard KB SCR
101f Fujitsu Full HD Pro Webcam
+0bfb Grass Valley Group
+ 0200 TURBO iDDR Front Panel
0bfd Kvaser AB
0004 USBcan II
000b Leaf Light HS
0c09 Comjet Information System
a5a5 Litto Version USB2.0
0c0a Highpoint Technologies, Inc.
+ 6124 RocketStor 6124V
0c0b Dura Micro, Inc. (Acomdata)
27cb 6-in-1 Flash Reader and Writer
27d7 Multi Memory reader/writer MD-005
b001 USB 2.0 Mass Storage IDE adapter
b004 MMC/SD Reader and Writer
0c12 Zeroplus
- 0005 PSX Vibration Feedback Converter
+ 0005 PSX Vibration Feedback Converter / Intec Wireless Controller for Xbox
0030 PSX Vibration Feedback Converter
700e Logic Analyzer (LAP-C-16032)
- 8801 Xbox Controller
+ 8801 Nyko Xbox Controller
8802 Xbox Controller
8809 Red Octane Ignition Xbox DDR Pad
880a Pelican Eclipse PL-2023
0c1a Silicon Motion, Inc.
0c1b MIPS Technologies
0c1c Hang Zhou Silan Electronics Co., Ltd
+0c1f Magicard
+ 1800 Tango 2E
0c22 Tally Printer Corp.
0c23 Lernout + Hauspie
0c24 Taiyo Yuden
0310 Scream Cam
0c26 Prolific Technology Inc.
0018 USB-Serial Controller [Icom Inc. OPC-478UC]
+ 002b Icom Inc. IC-R30
0c27 RFIDeas, Inc
+ 232a pcProx Plus RFID Reader (CDC serial)
3bfa pcProx Card Reader
0c2e Metrologic Instruments
0007 Metrologic MS7120 Barcode Scanner (IBM SurePOS mode)
0206 Metrologic MS4980 Barcode Scanner
0700 Metrologic MS7120 Barcode Scanner (uni-directional serial mode)
0720 Metrologic MS7120 Barcode Scanner (bi-directional serial mode)
+ 0a64 [Stratos 2700]
0b61 Vuquest 3310g
0b6a Vuquest 3310 Area-Imaging Scanner
0b81 Barcode scanner Voyager 1400g Series
1067 Mass Storage Reader
1158 A56AK
184c VoIP Phone
+ 1a90 2M pixel Microscope Camera (with capture button) [Andonstar V160]
+ 5101 2.4G Wireless Device [Rii MX3]
6001 Genius VideoCAM NB
6005 Sweex Mini Webcam
6007 VideoCAM Eye
62e0 MSI Starcam Racer
6300 PC Microscope camera
6310 Sonix USB 2.0 Camera
+ 6321 HP Integrated Webcam
6340 Camera
6341 Defender G-Lens 2577 HD720p Camera
+ 6366 Webcam Vitade AF
63e0 Sonix Integrated Webcam
63f1 Integrated Webcam
63f8 Sonix Integrated Webcam
644d 1.3 MPixel Integrated Webcam
6480 Sonix 1.3 MP Laptop Integrated Webcam
648b Integrated Webcam
+ 64ad Dell Laptop Integrated Webcam HD
64bd Sony Visual Communication Camera
64d0 Integrated Webcam
64d2 Integrated Webcam
651b HP Webcam
+ 652f Backlit Gaming Keyboard
6705 Integrated HD Webcam
+ 670c Integrated Webcam HD
6710 Integrated Webcam
+ 6712 Integrated Webcam HD
+ 671d Integrated_Webcam_HD
7401 TEMPer Temperature Sensor
7402 TEMPerHUM Temperature & Humidity Sensor
7403 Foot Switch
1600 Ion Quick Play LP turntable
1605 SSS Headphone Set
1607 audio controller
+ 5663 Audio Device
0c77 Sipix Group, Ltd
1001 SiPix Web2
1002 SiPix SC2100
0c99 Innochips Co., Ltd
0c9a Hanwool Robotics Corp.
0c9b Jobin Yvon, Inc.
+0c9c Brand Innovators BV
+ 1511 BI-1511 Laser Simulator
+ 1512 BI-1512 Syncbus Monitor
+ 1514 BI-1514 HPC
+ 1532 BI-1532 GPC
0c9d SemTek
0170 3873 Manual Insert card reader
0ca2 Zyfer
2010 myPad110 PC/SC Smart Card Reader
3050 EZ710 Smart Card Reader
0ca7 Information Systems Laboratories
+0caa Allied Telesis KK.
+ 3001 AT-VT-Kit3 Serial Adapter
0cad Motorola CGISS
1007 APX Series Consolette
1020 MOTOTRBO Series Radio (Portable)
1030 APX Series Radio (Portable)
1031 APX Series Radio (Mobile)
1602 IMPRES Battery Data Reader
- 9001 PowerPad Pocket PC Device
+ 9001 PowerPad Pocket PC Device
0cae Ascom Business Systems, Ltd
0caf Buslink
2507 Hi-Speed USB-to-IDE Bridge Controller
00a5 Cinergy Hybrid Stick
00a9 RTL2838 DVB-T COFDM Demodulator [TerraTec Cinergy T Stick Black]
00b3 NOXON DAB/DAB+ Stick
+ 00b9 WDR DAB/DAB+ Stick
00e0 NOXON DAB/DAB+ Stick V2
0102 Cinergy S2 Stick
0105 Cinergy S2 Box
10a7 TerraTec G3
+ 10ad Cinergy H5 Rev. 2
0cd4 Bang Olufsen
0101 BeolinkPC2
0cd5 LabJack Corporation
0004 AR5523 (no firmware)
0005 AR5523
0006 AR5523 (no firmware)
+ 0036 AR9462 Bluetooth
1001 Thomson TG121N [Atheros AR9001U-(2)NG]
1002 TP-Link TL-WN821N v2 / TL-WN822N v1 802.11n [Atheros AR9170]
1006 TP-Link TL-WN322G v3 / TL-WN422G v2 802.11g [Atheros AR9271]
3005 AR3011 Bluetooth
3007 AR3012 Bluetooth 4.0 (no firmware)
3008 Bluetooth (AR3011)
+ 311d Bluetooth
311f AR3012 Bluetooth
7015 TP-Link TL-WN821N v3 / TL-WN822N v2 802.11n [Atheros AR7010+AR9287]
9170 AR9170 802.11n
9271 AR9271 802.11n
+ 9378 QCA9377-7
b002 Ubiquiti WiFiStation 802.11n [Atheros AR9271]
b003 Ubiquiti WiFiStationEXT 802.11n [Atheros AR9271]
e006 Dell Wireless 1802 Bluetooth 4.0 LE
+ e300 QCA61x4 Bluetooth 4.0
0cf4 Fomtex Corp.
0cf5 Cellink Co., Ltd
0cf6 Compucable Corp.
0001 PhotoShuttle
0002 Photo Printer 730 series
0004 Photo Printer 63xPL/PS
+ 0007 P510K
+ 0009 P72x Series
+ 000a P728L
+ 000b P510L
+ 000d P518A
000e P910L
+ 0010 M610
0100 Photo Printer 63xPL/PS
0102 Photo Printer 64xPS
0103 Photo Printer 730 series
0104 Photo Printer 63xPL/PS
0105 Photo Printer 64xPS
+ 010e P510S
+ 0110 P110S
+ 0111 P510Si
+ 0112 P518S
0200 Photo Printer 64xDL
+ 0309 CS-200e
+ 030a CS-220e
+ 0501 P75x Series
+ 0502 P52x Series
+ 0503 P310L
+ 050a P310W
+ 050f P530D
+ 0800 X610
0d17 NALTEC, Inc.
0d18 coaXmedia
0d19 Hank Connection Industrial Co., Ltd
0d28 NXP
0204 ARM mbed
+0d2f Andamiro
+ 0002 Pump It Up Pad
0d32 Leo Hui Electric Wire & Cable Co., Ltd
0d33 AirSpeak, Inc.
0d34 Rearden Steel Technologies
0100 Audio
0d49 Maxtor
3000 Drive
+ 3005 Personal Storage 3000LS
3010 3000LE Drive
3100 Hi-Speed USB-IDE Bridge Controller
3200 Personal Storage 3200
0d4f EADS Airbus France
0d50 Cleware GmbH
0011 USB-Temp2 Thermometer
+ 0030 Multiplexer
0040 F4 foot switch
0d51 Volex (Asia) Pte., Ltd
0d53 HMI Co., Ltd
0d55 ASKA Technologies, Inc.
0d56 AVLAB Technology, Inc.
0d57 Solomon Microtech, Ltd
+0d59 TRC Simulators b.v.
+ 02a8 Digital Clock
0d5c SMC Networks, Inc.
a001 SMC2662W (v1) EZ Connect 802.11b Wireless Adapter [Atmel AT76C503A]
a002 SMC2662W v2 / SMC2662W-AR / Belkin F5D6050 [Atmel at76c503a]
2026 TECOM Bluetooth Device
2050 Mouse
2106 Dell L20U Multimedia Keyboard
+ 910e HP Business Slim Keyboard
a100 Optical Mouse
0d63 Fritz Gegauf AG
0d64 DXG Technology Corp.
0001 Audio Device
0002 Composite Device
0003 Sound Device
+ 0004 CM6631A Audio Processor
0005 Blue Snowball
0006 Storm HP-USB500 5.1 Headset
000c Audio Adapter
0da3 Nippon Electro-Sensory Devices Corp.
0da4 Polar Electro Oy
0001 Interface
+ 0003 FlowLink
0008 Loop
0da7 IOGear, Inc.
0da8 softDSP Co., Ltd
a97a Bluetooth EDR Device
b970 Bluetooth EDR Device
b97a Bluetooth EDR Device
+ ffff Bluetooth Adapter in DFU mode
0db1 Wen Te Electronics Co., Ltd
0db2 Shian Hwi Plug Parts, Plastic Factory
0db3 Tekram Technology Co., Ltd
013a Barcode Module - Virtual Keyboard
013b Barcode Module - HID
0160 NFC and Smartcard Module (NSM)
+ 0164 NFC and Smartcard Module (NSM)with 4 SAM slots
0db7 ELCON Systemtechnik
0002 Goldpfeil P-LAN
0dba Digidesign
0101 Hi-Speed Mass Storage Device
0209 SK-3500 S2
020a Oyen Digital MiniPro 2.5" hard drive enclosure
+ 0290 Mass Storage Device [NT2 U3.1]
0dc5 SDK Co., Ltd
0dc6 Precision Squared Technology Corp.
2301 Wireless Touchpad Keyboard
0003 Mass Storage (P)
0dd3 MediaQ
0dd4 Custom Engineering SPA
+ 0237 K80 80mm Thermal Printer
0dd5 California Micro Devices
0dd7 Kocom Co., Ltd
0dd8 Netac Technology Co., Ltd
+ 0562 Netac Portable SSD Z6s
1060 USB-CF-Card
e007 OnlyDisk U222 Pendrive
- f607 OnlyDisk U208 1G flash drive [U-SAFE]
+ f607 OnlyDisk U210 1G flash drive [U-SAFE]
0dd9 HighSpeed Surfing
0dda Integrated Circuit Solution, Inc.
0001 Multi-Card Reader 6in1
0dfa Toyo Communication Equipment Co., Ltd
0dfc GeneralTouch Technology Co., Ltd
0001 Touchscreen
+ 0003 MultiTouch TouchScreen(Dualtouch)
0101 5-point Touch Screen
+ d107 MultiTouch TouchScreen
0e03 Nippon Systemware Co., Ltd
0e08 Winbest Technology Co., Ltd
0e0b Amigo Technology Inc.
0004 Virtual CCID
0005 Virtual Mass Storage
0006 Virtual Keyboard
+ 000a Virtual Sensors
8001 Root Hub
8002 Root Hub
8003 Root Hub
0e17 Walex Electronic, Ltd
0e1a Unisys
0e1b Crewave
+0e1e Green Hills Software
0e20 Pegasus Technologies Ltd.
0101 NoteTaker
0200 Seiko Instruments InkLink Handwriting System
0e4a Shenzhen Bao Hing Electric Wire & Cable Mfr. Co.
0e4c Radica Games, Ltd
1097 Gamester Controller
- 2390 Games Jtech Controller
+ 1103 Gamester Reflex
+ 2390 Jtech Controller
+ 3510 Gamester for Xbox
7288 funkey reader
0e50 TechnoData Interware
0001 Matrix USB-Key
0002 Wrist PDA
0e6a Megawin Technology Co., Ltd
0101 MA100 [USB-UART Bridge IC]
+ 02c0 Defender Gaming Keyboard
030b Truly Ergonomic Computer Keyboard (Device Firmware Update mode)
030c Truly Ergonomic Computer Keyboard
6001 GEMBIRD Flexible keyboard KB-109F-B-DE
0003 Freebird wireless Controller
0005 Eclipse wireless Controller
0006 Edge wireless Controller
+ 0008 After Glow Pro Controller
+ 0105 Disney's High School Musical 3 Dance Pad for Xbox 360
+ 0113 Afterglow AX.1 Gamepad
+ 011f Rock Candy Wired Controller for Xbox 360
0128 Wireless PS3 Controller
+ 0131 PDP EA Sports Controller
+ 0133 Wired Controller
+ 0139 Afterglow Prismatic Wired Controller for Xbox One
+ 013a PDP Xbox One Controller
+ 0146 Rock Candy Wired Controller for Xbox One
+ 0147 PDP Marvel Controller for Xbox One
+ 015c PDP Arcade Stick for Xbox One
+ 0161 Camo Wired Controller for Xbox One
+ 0162 Xbox One Wired Controller
+ 0163 Legendary Collection Deliverer of Truth
+ 0164 Battlefield 1 Wired Controller for Xbox One
+ 0165 Titanfall 2 Wired Controller for Xbox One
+ 0201 Pelican PL-3601
+ 0213 Afterglow Gamepad for Xbox 360
+ 021f Rock Candy Gamepad for Xbox 360
+ 0246 Rock Candy Gamepad for Xbox One
+ 0301 Controller
+ 0346 Rock Candy Wired Controller for Xbox One
+ 0401 Controller
+ 0413 Afterglow AX.1 Gamepad for Xbox 360
+ 0501 Wired Controller
+ f501 Hi-TEC Essentials Wired Gamepad
+ f900 Afterglow AX.1
0e70 Tokyo Electronic Industry Co., Ltd
0e72 Hsi-Chin Electronics Co., Ltd
0e75 TVS Electronics, Ltd
0e83 Shin An Wire & Cable Co.
0e8c Well Force Electronic Co., Ltd
0e8d MediaTek Inc.
+ 0002 phone (mass storage mode) [Doro Primo 413]
0003 MT6227 phone
0004 MT6227 phone
- 0023 S103
+ 0023 S103 / Powertel M6200
00a5 GSM modem [Medion Surfstick Model:S4222]
1806 Samsung SE-208 Slim Portable DVD Writer
1836 Samsung SE-S084 Super WriteMaster Slim External DVD writer
+ 1887 Slim Portable DVD Writer
1956 Samsung SE-506 Portable BluRay Disc Writer
2000 MT65xx Preloader
+ 2008 Cyrus Technology CS 24
3329 Qstarz BT-Q1000XT
+ 7612 MT7612U 802.11a/b/g/n/ac Wireless Adapter
763e MT7630e Bluetooth Adapter
+ 7668 MT7668 2x2 Dual Band Dual Concurrent 802.11a/b/g/n/ac WiFi with MU-MIMO and Bluetooth 5.0 Radios
0e8f GreenAsia Inc.
0003 MaxFire Blaze2
0012 Joystick/Gamepad
0021 Multimedia Keyboard Controller
0022 multimedia keyboard controller
0201 SmartJoy Frag Xpad/PS2 adaptor
+ 3008 Xbox Controller
300a steering Wheel
0e90 WiebeTech, LLC
0100 Storage Adapter V1
2126 7-in-1 Card Reader
2153 SD Card Reader Key
2168 Transcend JetFlash 2.0 / Astone USB Drive / Intellegent Stick 2.0
+ 2213 WinDroid N287 AH7N2502.013317
6803 OTI-6803 Flash Disk
6808 OTI-6808 Flash Disk
6828 OTI-6828 Flash Disk
0eb7 Endor AG
0eb8 Mettler Toledo
2200 Ariva Scale
- f000 PS60 Scale
+ f000 BC60 Scale
0ebb Thermo Fisher Scientific
0002 FT-IR Spectrometer
0ebe VWeb Corp.
0eee Digital Stream Technology, Inc.
8810 Mass Storage Drive
0eef D-WAV Scientific Co., Ltd
- 0001 eGalax TouchScreen
+ 0001 Titan6001 Surface Acoustic Wave Touchscreen Controller [eGalax]
0002 Touchscreen Controller(Professional)
7200 Touchscreen Controller
+ 7904 Multitouch Capacitive Touchscreen eGalaxTouch EXC7904-21v00_T13 [IIyama Prolite T1932-MSC]
a802 eGalaxTouch EXC7920
+ b10e eGalaxTouch EXC3000
+ c000 Multitouch Capacitive Touchscreen eGalaxTouch EXC3188-4643-08.00.00.00 Sirius_4643 PCAP3188UR Series [IIyama Prolite PLT1932MSC]
0ef0 Hitachi Cable, Ltd
0ef1 Aichi Micro Intelligent Corp.
0ef2 I/O Magic Corp.
0f08 CSL Wire & Plug (Shen Zhen) Co.
0f0c CAS Corp.
0f0d Hori Co., Ltd
+ 000a Dead or Alive 4 FightStick for Xbox 360
+ 000c Horipad EX Turbo for Xbox 360
+ 000d Fighting Stick EX2 for Xbox 360
0011 Real Arcade Pro 3
+ 0016 Real Arcade Pro.EX for Xbox 360
+ 001b Real Aracde Pro.VX
+ 0063 Real Arcade Pro Hayabusa for Xbox One
+ 0067 Horipad One
+ 0078 Real Arcade Pro V Kai for Xbox One / Xbox 360
+ 0090 Horipad Ultimate
+ 00c1 HORIPAD for Nintendo Switch
0f0e Energy Full Corp.
0f0f Silego Technology Inc
0006 GreenPak Universal Dev Board (Active Mode)
0f2f Priva Design Services
0f30 Jess Technology Co., Ltd
001c PS3 Guitar Controller Dongle
+ 010b Philips Recoil
0110 Dual Analog Rumble Pad
0111 Colour Rumble Pad
+ 0202 Joytech Advanced Controller
0208 Xbox & PC Gamepad
+ 8888 BigBen XBMiniPad Controller
0f31 Chrysalis Development
0f32 YFC-BonEagle Electric Co., Ltd
0f37 Kokuyo Co., Ltd
0f38 Nien-Yi Industrial Corp.
0f39 TG3 Electronics
+ 0404 Recreated ZX Spectrum Keyboard
0876 Keyboard [87 Francium Pro]
1086 DK2108SZ Keyboard [Ducky Zero]
0f3d Airprime, Incorporated
ef12 Patriot
ff11 Liberty (firmware not loaded)
ff12 Liberty
+0f49 Evolis SA
+ 0a00 Zenius
0f4b St. John Technology Co., Ltd
0f4c WorldWide Cable Opto Corp.
0f4d Microtune, Inc.
8007 Blackberry Handheld
8010 Blackberry Playbook (Connect to Windows mode)
8011 Blackberry Playbook (Connect to Mac mode)
+ 8014 Blackberry Handheld Z30
8020 Blackberry Playbook (CD-Rom mode)
8037 Blackberry PRIV
0fce Sony Ericsson Mobile Communications AB
01a7 D5503
01ba D6603 [Xperia Z3]
01bb D5803 [Xperia Z3 Compact] (MTP mode)
- 0dde Xperia Mini Pro Bootloader
+ 01e0 F5122 [Xperia X dual] (MTP mode)
+ 01e8 F5321 [Xperia X Compact] (MTP mode)
+ 01f9 H8314 [Xperia XZ2 Compact]
1010 WMC Modem
10af V640i Phone [PictBridge]
10d4 C902 Phone [PictBridge]
5177 Xperia Ion [Debug Mode]
518c C1605 [Xperia E dual] MTD mode
51a7 D5503 (Xperia Z1 Compact)
+ 51e0 F5122 [Xperia X dual] (developer mode)
614f Xperia X12 (debug mode)
6166 Xperia Mini Pro
618c C1605 [Xperia E dual] MSC mode
715a Xperia Pro [Tethering]
7166 Xperia Mini Pro (Tethering mode)
7177 Xperia Ion [Tethering]
+ 71f4 G8441 (Xperia XZ1 Compact) [Tethering]
+ 71f9 H8314 [Xperia XZ2 Compact] (Tethering)
8004 9000 Phone [Mass Storage]
+ 81f4 G8441 (Xperia XZ1 Compact) [Tethering]
adde C2005 (Xperia M dual) in service mode
+ c1e0 F5122 [Xperia X dual] (MIDI mode)
+ c1e8 F5321 [Xperia X Compact] (MIDI mode)
+ c1f9 H8314 [Xperia XZ2 Compact] (MIDI)
d008 V800-Vodafone 802SE Phone
d016 K750i Phone
d017 K608i Phone
d046 K610i Phone
d065 W960i Phone (PC Suite)
d076 W910i (Phone mode)
+ d079 K530 Phone
d089 W580i Phone (mass storage)
d0a1 K810
d0af V640i Phone
002c EyeTV DTT Deluxe v2
0033 Video Capture
0037 Video Capture v2
+ 0060 Stream Deck
+ 0063 Stream Deck Mini
+ 006c Stream Deck XL
+ 006d Stream Deck original V2
0fda Quantec Networks GmbH
0100 quanton flight control
0fdc Micro Plus
0fde Oregon Scientific
ca01 WMRS200 weather station
ca05 CM160
+ ca08 WMR300 Professional Weather System
0fe0 Osterhout Design Group
0100 Bluetooth Mouse
0101 Bluetooth IMU
0ff7 CHI SHING Computer Accessories Co., Ltd
0ffc Clavia DMI AB
0021 Nord Stage 2
+ 002a Nord Piano 4
0ffd EarlySense
ff00 OEM
0fff Aopen, Inc.
1003 Sigma Corp.
0003 SD14
0100 SD9/SD10
+ 8781 Dock UD-01
1004 LG Electronics, Inc.
1fae U8120 3G Cellphone
6000 Various Mobile Phones
61fe Optimus Android Phone [USB tethering mode]
627f G3 (VS985) Android Phone (MTP/Download mode)
6300 G2/Optimus Android Phone [Charge mode]
- 631c G2/Optimus Android Phone [MTP mode]
+ 631c LM-X420xxx/G2/Optimus Android Phone (charge mode)
631d Optimus Android Phone (Camera/PTP Mode)
- 631e G2/Optimus Android Phone [Camera/PTP mode]
+ 631e LM-X420xxx/G2/Optimus Android Phone (PTP/camera mode)
631f Optimus Android Phone (Charge Mode)
633a Ultimate 2 Android Phone L41C
- 633e G2/G3 Android Phone [MTP/PTP/Download mode]
- 6344 G2 Android Phone [tethering mode]
+ 633e LM-X420xxx/G2/G3 Android Phone (MTP/download mode)
+ 6344 LM-X420xxx/G2 Android Phone (USB tethering mode)
+ 6348 LM-X420xxx Android Phone (MIDI mode)
6356 Optimus Android Phone [Virtual CD mode]
6800 CDMA Modem
7000 LG LDP-7024D(LD)USB
1004 MP3 Player
1006 MP3 Player
b113 Handy Steno/AH123 / Handy Steno 2.0/HT203
+ b155 Disk Module
b223 CD-RW + 6in1 Card Reader Digital Storage / Converter
1006 iRiver, Ltd.
3001 iHP-100
1015 Softronics Pty., Ltd
1016 Xiamen Hung's Enterprise Co., Ltd
1017 Speedy Industrial Supplies, Pte., Ltd
+ 9015 M625 [Vendor: DELUX]
1019 Elitegroup Computer Systems (ECS)
0c55 Flash Reader, Desknote UCR-61S2B
0f38 Infrared Receiver
1020 Labtec
0006 Wireless Keyboard
000a Wireless Optical Mouse
- 0106 Wireless Optical Mouse
+ 0106 Wireless Optical Mouse/Keyboard
1022 Shinko Shoji Co., Ltd
1025 Hyper-Paltek
005e USB DVB-T device
102c Etoms Electronics Corp.
6151 Q-Cam Sangha CIF
6251 Q-Cam VGA
+ ff0c Joytech Wireless Advanced Controller
102d Winic Corp.
1031 Comax Technology, Inc.
1032 C-One Technology Corp.
0068 3,5'' HDD case MD-231
1038 SteelSeries ApS
0100 Ideazon Zboard
+ 1260 Arctis 7 wireless adapter
1361 Ideazon Sensei
+ 1410 SRW-S1 [Simraceway Steering Wheel]
+ 1720 Mouse
1039 devolo AG
0824 1866 802.11bg [Texas Instruments TNETW1450]
2140 dsl+ 1100 duo
104c AMCO TEC International, Inc.
104d Newport Corporation
1003 Model-52 LED Light Source Power Supply and Driver
+ 3001 ESP301 3 Axis Motion Controller
104f WB Electronics
0001 Infinity Phoenix
0002 Smartmouse
0120 Yubikey Touch U2F Security Key
0200 Gnubby U2F
0211 Gnubby
- 0401 Yubikey 4 OTP
- 0402 Yubikey 4 U2F
- 0403 Yubikey 4 OTP+U2F
- 0404 Yubikey 4 CCID
- 0405 Yubikey 4 OTP+CCID
- 0406 Yubikey 4 U2F+CCID
- 0407 Yubikey 4 OTP+U2F+CCID
+ 0401 Yubikey 4/5 OTP
+ 0402 Yubikey 4/5 U2F
+ 0403 Yubikey 4/5 OTP+U2F
+ 0404 Yubikey 4/5 CCID
+ 0405 Yubikey 4/5 OTP+CCID
+ 0406 Yubikey 4/5 U2F+CCID
+ 0407 Yubikey 4/5 OTP+U2F+CCID
0410 Yubikey plus OTP+U2F
1053 Immanuel Electronics Co., Ltd
1054 BMS International Beheer N.V.
1123 My Book 3.0 (WDBABP)
1130 My Book Essential (WDBACW)
1140 My Book Essential (WDBACW)
+ 1170 My Book Essential 3TB (WDBACW0030HBK)
1230 My Book (WDBFJK)
1235 My Book (WDBFJK0040HBK)
2599 My Passport Ultra (WD40NMZW)
259d My Passport Ultra (WDBBKD)
259f My Passport Ultra (WD10JMVW)
- 25a1 Elements / My Passport (WD20NMVW)
+ 25a1 Elements / My Passport
25a2 Elements 25A2
25a3 Elements Desktop (WDBWLG)
+ 25da My Book (WDBFJK)
+ 25e1 My Passport (WD20NMVW)
25e2 My Passport (WD40NMZW)
+ 25ee My Book 25EE
+ 25f3 My Passport SSD (WDBK3E)
+ 25fa easystore Portable 5TB (WDBKUZ0050)
+ 25fb easystore Desktop (WDBCKA)
+ 2603 My Passport Game Storage for PS4 4TB (WDBZGE0040)
+ 2624 easystore Portable 5TB (WDBKUZ0050)
+ 2626 My Passport (WDBPKJ)
30a0 SATA adapter cable
1059 Giesecke & Devrient GmbH
000b StarSign Bio Token 3.0
108b Grand-tek Technology Co., Ltd
0005 HID Keyboard/Mouse PS/2 Translator
108c Robert Bosch GmbH
+ 017e GTC 400 C
108e Lotes Co., Ltd.
1091 Numerik Jena
8101 Absoflex
1099 Surface Optics Corp.
109a DATASOFT Systems GmbH
109b Hisense
+ 9109 CROSSCALL Trekker-M1 Core (MTP-Mode)
9118 Medion P4013 Mobile
+ 9119 CROSSCALL Trekker-M1 Core (PTP-Mode)
+ f009 CROSSCALL Trekker-M1 Core (CD-ROM-Mode)
109f eSOL Co., Ltd
3163 Trigem Mobile SmartDisplay84
3164 Trigem Mobile SmartDisplay121
0019 Shinko/Sinfonia CHC-S6145
001d Shinko/Sinfonia CHC-S6245
001e Ciaat Brava 21
+ 0039 Sinfonia CHC-S2245
+ 10ce Sinfonia CHC-S2245
ea6a MobiData EDGE USB Modem
10cf Velleman Components, Inc.
2011 R-Engine MPEG2 encoder/decoder
0004 PS/2 Converter
5552 KVM Human Interface Composite Device (Keyboard/Mouse ports)
55a2 2Port KVMSwitcher
+ 5a08 Dual Bay Docking Station
10d6 Actions Semiconductor Co., Ltd
0c02 BioniQ 1001 Tablet
1000 MP3 Player
1a2e HP Truevision HD Integrated Webcam
10f5 Turtle Beach
0200 Audio Advantage Roadie
+ 0231 Ear Force P11 Headset
+ 10f5 EarForce PX21 Gaming Headset
+10f8 Cesys GmbH
+ 3201 CeboLC
+ 3202 CeboStick
+ 3203 CeboMSA64
+ 3204 CeboDFN
+ 3205 PSAA2304W_CASC
+ c401 USBV4F unconfigured
+ c402 EFM01 unconfigured
+ c403 MISS2 unconfigured
+ c404 CID unconfigured
+ c405 USBS6 unconfigured
+ c406 OP_MISS2 unconfigured
+ c407 NanoUsb uncofigured
+ c481 USBV4F
+ c482 EFM01
+ c483 MISS2
+ c484 CID
+ c485 USBS6
+ c486 OP_MISS2
+ c487 NanoUsb
+ c501 EFM02 unconfigured
+ c502 EFM02/B unconfigured
+ c503 EFM03 unconfigured
+ c581 EFM02
+ c582 EFM02/B
+ c583 EFM03
10fb Pictos Technologies, Inc.
10fd Anubis Electronics, Ltd
7e50 FlyCam Usb 100
0001 FSK Electronics Super GSM Reader
1108 Brightcom Technologies, Ltd
110a Moxa Technologies Co., Ltd.
+ 1110 UPort 1110
+ 1150 UPort 1150 1-Port RS-232/422/485
1250 UPort 1250 2-Port RS-232/422/485
1251 UPort 1250I 2-Port RS-232/422/485 with Isolation
1410 UPort 1410 4-Port RS-232
1130 Tenx Technology, Inc.
0001 BlyncLight
0002 iBuddy
+ 0004 iBuddy Twins
0202 Rocket Launcher
6604 MCE IR-Receiver
+ 6606 U+P Mouse
660c Foot Pedal/Thermometer
6626 Key
6806 Keychain photo frame
9008 Gobi 2000 Wireless Modem
9009 Gobi 2000 Wireless Modem
900a Gobi 2000 Wireless Modem
+ 9011 MC8305 Modem
9013 Sierra Wireless Gobi 3000 Modem device (MC8355)
+ 9041 EM7305 Modem
9055 Gobi 9x15 Multimode 3G/4G LTE Modem (NAT mode)
9057 Gobi 9x15 Multimode 3G/4G LTE Modem (IP passthrough mode)
+ 9071 AirPrime MC7455 3G/4G LTE Modem
+ 9079 EM7455
119a ZHAN QI Technology Co., Ltd
119b ruwido austria GmbH
0400 Infrared Keyboard V2.01
6565 FuelBand
11b0 ATECH FLASH TECHNOLOGY
6208 PRO-28U
+ 6298 Kingston SNA-DC/U
11be R&D International NV
f0a0 Martin Maxxyz DMX
11c0 Betop
5506 Gamepad
11c5 Inmax
0521 IMT-0521 Smartcard Reader
+11c9 Nacon
+ 55f0 GC-100XF
11ca VeriFone Inc
+ 0201 MX870/MX880
0207 PIN Pad VX 810
0220 PIN Pad VX 805
11db Topfield Co., Ltd.
0140 TTP-245C
1209 Generic
0001 pid.codes Test PID
+ 0002 pid.codes Test PID
+ 0003 pid.codes Test PID
+ 0004 pid.codes Test PID
+ 0005 pid.codes Test PID
+ 0006 pid.codes Test PID
+ 0007 pid.codes Test PID
+ 0008 pid.codes Test PID
+ 0009 pid.codes Test PID
+ 000a pid.codes Test PID
+ 000b pid.codes Test PID
+ 000c pid.codes Test PID
+ 000d pid.codes Test PID
+ 000e pid.codes Test PID
+ 000f pid.codes Test PID
+ 0010 pid.codes Test PID
01c0 Input Club Kiibohd Device
01cb Input Club Kiibohd Device Bootloader
0256 Schwalm & Tate LLC pISO Raspberry Pi Hat
2016 Cupkee
2017 Benjamin Shockley Mini SAM
2020 Captain Credible Gate Crystal
- 2048 Housedillon.com MRF49XA Transciever
+ 2048 Housedillon.com MRF49XA Transceiver
2100 TinyFPGA B1 and B2 Boards
2101 TinyFPGA A-Series Programmer
2200 Dygma Shortcut Bootloader
317e Codecrete Wirekite
3210 OSH Lab, LLC Magic Keys
3333 LabConnect Digitalnetzteil
+ 345b kinX Hub
+ 345c kinX Keyboard Controller
3690 Kigakudoh TouchMIDI32
4096 CynaraKrewe Cynara
414c Adi Linden
5038 frotz.net mdebug rswd protocol
5039 frotz.net lpcboot protocol
5050 trebb ISO50
+ 5070 SoloHacker security key [SoloKey]
+ 50b0 boot for security key [SoloKey]
5222 telavivmakers attami
53c0 SatoshiLabs TREZOR Bootloader
53c1 SatoshiLabs TREZOR
7551 The Tessel Project Tessel 2
7777 circuitvalley IO Board V3
7778 circuitvalley IO Board V3 Bootloader
+ 7950 PIC18F87J94 Bootloader [GenII]
+ 7951 PIC18F87J94 Application [GenII]
+ 7952 PIC18F87J94 Bootloader [GenIII/IV]
+ 7953 PIC18F87J94 Application [GenIII/IV]
+ 7954 PIC18F87J94 Application [GenIII/IV]
7bd0 pokey9000 Tiny Bit Dingus
8000 Autonomii NODii 2
8086 MisfitTech Nano Zero Bootloader
dead chaosfield.at AVR-Ruler
deaf CrapLab 4chord MIDI
ded1 ManCave Made Quark One
+ deed Kroneum Time Tracker
df00 D.F.Mac. @TripArts Music mi:muz:tuch
df01 D.F.Mac. @TripArts Music mi:muz:can
df02 D.F.Mac. @TripArts Music mi:muz:can-lite
524e RoadMate 1475T
5260 Triton Handheld GPS Receiver (300/400/500/1500/2000)
1210 DigiTech
+ 000d RP250 Guitar Multi-Effects Processor
0016 RP500 Guitar Multi-Effects Processor
001b RP155 Guitar Multi-Effects Processor
001c RP255 Guitar Multi-Effects Processor
121e Jungsoft Co., Ltd
3403 Muzio JM250 Audio Player
+121f Panini S.p.A.
+ 0001 VisionX without Firmware
+ 0002 VisionX with Firmware
+ 0010 I-Deal
+ 0020 wI-Deal
+ 0021 VisionX Page Scanner Extension
+ 0030 VisionNext
+ 0040 mI:Deal Check Scanner
+ 0041 EverNext Check Scanner
1220 TC Electronic
000a Hall of Fame Reverb
002a Polytune
0039 Alter Ego X4 Vintage Echo
1221 Unknown manufacturer
3234 Disk (Thumb drive)
+1222 TiPro
+ faca programmable keyboard
1223 SKYCABLE ENTERPRISE. CO., LTD.
1228 Datapaq Limited
0012 Q18 Data Logger
0019 Impulse 25
001a Impulse 49
001b Impulse 61
+ 0032 Launchkey 61
+ 0069 Launchpad MK2
+ 0102 LaunchKey Mini MK3
4661 ReMOTE25
8000 Scarlett 18i6
8002 Scarlett 8i6
8012 Scarlett 6i6
8014 Scarlett 18i8
8016 Focusrite Scarlett 2i2
+ 8202 Focusrite Scarlett 2i2 2nd Gen
8203 Focusrite Scarlett 6i6
8204 Scarlett 18i8 2nd Gen
+ 8210 Scarlett 2i2 Camera
+ 8211 Scarlett Solo (3rd Gen.)
+ 8214 Scarlett 18i8 3rd Gen
+ 8215 Scarlett 18i20 3rd Gen
1241 Belkin
0504 Wireless Trackball Keyboard
1111 Mouse
1503 Keyboard
1603 Keyboard
f767 Keyboard
+1243 Holtek Semiconductor, Inc.
+ e000 Unique NFC/RFID reader (keyboard emulation)
124a AirVast
168b PRISM3 WLAN Adapter
4017 PC-Chips 802.11b Adapter
3200 Stealth MXP 1GB
125c Apogee Inc.
0010 Alta series CCD
+125d JMicron
+ 0580 JM580
125f A-DATA Technology Co., Ltd.
312a Superior S102
312b Superior S102 Pro
a15a DashDrive Durable HD710 portable HDD various size
a22a DashDrive Elite HE720 500GB
+ a31a HV620 Portable HDD
a91a Portable HDD CH91
c08a C008 Flash Drive
c81a Flash drive
1275 Xaxero Marine Software Engineering, Ltd.
0002 WeatherFax 2000 Demodulator
0080 SkyEye Weather Satellite Receiver
+ 0090 WeatherFax 2000 Demodulator
1278 Starlight Xpress
0105 SXV-M5
0107 SXV-M7
2001 88W8388 802.11a/b/g WLAN
2006 88W8362 802.11n WLAN
203c K30326 802.11bgn Wireless Module [Marvell 88W8786U]
+ 204c Bluetooth and Wireless LAN Composite
8001 BLOB boot loader firmware
1291 Qualcomm Flarion Technologies, Inc. / Leadtek Research, Inc.
0010 FDM 2xxx Flash-OFDM modem
1828 Gigaset USB Adapter 300
12a7 Trendchip Technologies Corp.
12ab Honey Bee Electronic International Ltd.
+ 0004 Dance Pad for Xbox 360
+ 0301 Afterglow Wired Controller for Xbox 360
+ 0303 Mortal Kombat Klassic FightStick for Xbox 360
+ 8809 Dance Dance Revolution Dance Pad
12b8 Zhejiang Xinya Electronic Technology Co., Ltd.
12b9 E28
12ba Licensed by Sony Computer Entertainment America
1037 Ideos
1038 Ideos (debug mode)
1039 Ideos (tethering mode)
- 1052 MT7-L09
+ 1052 MT7-L09 / P7-L10 / Y330-U01
+ 1053 P7-L10 (PTP)
+ 1054 P7-L10 (PTP + debug)
+ 1079 GEM-703LT [Honor/MediaPad X2]
+ 107e P10 smartphone
1404 EM770W miniPCI WCDMA Modem
1406 E1750
140b EC1260 Wireless Data Modem HSD USB Card
14cf K3772
14d1 K3770 3G Modem (Mass Storage Mode)
14db E353/E3131
- 14dc E33372 LTE/UMTS/GSM HiLink Modem/Networkcard
+ 14dc E3372 LTE/UMTS/GSM HiLink Modem/Networkcard
14f1 Gobi 3000 HSPA+ Modem
14fe Modem (Mass Storage Mode)
1501 Pulse
1520 K3765 HSPA
1521 K4505 HSPA+
155a R205 Mobile WiFi (CD-ROM mode)
+ 1573 ME909u-521 mPCIe LTE/GPS card
1575 K5150 LTE modem
15bb ME936 LTE/HSDPA+ 4G modem
15c1 ME906s LTE M.2 Module
1d50 ET302s TD-SCDMA/TD-HSDPA Mobile Broadband
1f01 E353/E3131 (Mass storage mode)
1f16 K5150 LTE modem (Mass Storage Mode)
+ 360e Y330-U01 (MTP Mode)
380b WiMAX USB modem(s)
12d2 LINE TECH INDUSTRIAL CO., LTD.
+12d3 LINAK
+ 0002 DeskLine CBD Control Box
12d6 EMS Dr. Thomas Wuensche
0444 CPC-USB/ARM7
0888 CPC-USB/M16C
1001 AWU2000b 802.11b Stick
12ff Fascinating Electronics, Inc.
0101 Advanced RC Servo Controller
+1306 FM20 Barcode Scanner
1307 Transcend Information, Inc.
0163 256MB/512MB/1GB Flash Drive
0165 2GB/4GB/8GB Flash Drive
0111 SP1 Spectrometer (VISA)
0112 SP2 Spectrometer (VISA)
8001 TXP-Series Slot (TXP5001, TXP5004)
+ 8011 BP1 Slit Beam Profiler
8012 BC106 Camera Beam Profiler
8013 WFS10 Wavefront Sensor
+ 8016 DMP40 Deformable Mirror
8017 BC206 Camera Beam Profiler
8019 BP2 Multi Slit Beam Profiler
8020 PM300 Optical Power Meter
8021 PM300E Optical Power and Energy Meter
8022 PM320E Optical Power and Energy Meter
+ 8025 WFS20 Wavefront Sensor
8030 ER100 Extinction Ratio Meter
+ 8039 PAX1000 Rotating Waveplate Polarimeter
+ 8047 CLD1000
+ 8048 TED4000
+ 8049 LDC4000
+ 804a ITC4000
+ 8058 LC-100
+ 8060 DC3100
+ 8061 DC4100
+ 8062 DC2100
+ 8065 CS2010
+ 8066 DC4104
8070 PM100D
8072 PM100USB Power and Energy Meter Interface
+ 8073 PM106 Wireless Powermeter Photodiode Sensor
+ 8074 PM160T Wireless Powermeter Thermal Sensor
+ 8075 PM400 Handheld Optical Power/Energy Meter
+ 8076 PM101 Serial PD Power Meter
8078 PM100D Compact Power and Energy Meter Console
8080 CCS100 - Compact Spectrometer
+ 8081 CCS100 Compact Spectrometer
+ 8083 CCS125 Spectrometer
+ 8085 CCS150 UV Spectrometer
+ 8087 CCS175 NIR Spectrometer
+ 8089 CCS200 Wide Range Spectrometer
+ 8090 SPCM Single Photon Counter
+ 80a0 LC100 series smart line camera
+ 80b0 PM200 Handheld Power and Energy Meter
+ 80c0 DC2200
+ 80c9 MTD Series
+ 80f0 TSP01
+ 80f1 M2SET Dongle
+ 8180 OCT Probe Controller (OCTH-1300)
+ 8181 OCT Device
131d Natural Point
0155 TrackIR 3 Pro Head Tracker
0156 TrackIR 4 Pro Head Tracker
0158 TrackIR 5 Pro Head Tracker
1325 ams AG
+ 00d6 I2C/SPI InterfaceBoard
+ 0c08 Embedded Linux Sensor Bridge
4002 I2C Dongle
132a Envara Inc.
1502 WiND 802.11abg / 802.11bg WLAN
0003 CX / DNP DS40
0004 CX-W / DNP DS80 / Mitsubishi CP3800
0005 CY / DNP DSRX1
- 0006 CW-02
+ 0006 CW-02 / OP900ii
0007 DNP DS80DX
- 0008 CX2 / DNP DS620
+ 0008 DNP DS620 (old)
+ 000a CX-02
+ 000b CX-02W
1345 Sino Lite Technology Corp.
001c Xbox Controller Hub
6006 Defender Wireless Controller
0089 OpenSDA - CDC Serial Port
0503 USB-ML-12 HCS08/HCS12 Multilink
0504 DEMOJM
+ 1000 Smart Control Touchpad
+135e Insta GmbH
+ 0021 Berker KNX Data Interface
+ 0022 Gira KNX Data Interface
+ 0023 JUNG KNX Data Interface
+ 0024 Merten/Schneider Electric KNX Data Interface
+ 0025 Hager KNX Data Interface
+ 0026 Feller KNX Data Interface
135f Control Development Inc.
0110 Linear Spectrograph
0111 Spectrograph - Renumerated
0240 MPP Spectrograph
1366 SEGGER
0101 J-Link PLUS
+ 1015 J-Link
136b STEC
136e Andor Technology Ltd.
0012 iXon Ultra CCD
4000 HDVD800
137b SCAPS GmbH
0002 SCAPS USC-2 Scanner Controller
+137c YASKAWA ELECTRIC CORP.
+ 0220 MP Series
+ 0250 SIGMA Series
+ 0401 AC Drive
1385 Netgear, Inc
4250 WG111T
4251 WG111T (no firmware)
138e Jungo LTD
9000 Raisonance S.A. STM32 ARM evaluation board / RLink dongle
1390 TOMTOM B.V.
- 0001 GO 520 T/GO 630/ONE XL (v9)
+ 0001 GO 520 T / GO 630 / ONE / ONE XL
5454 Blue & Me 2
7474 GPS Sport Watch [Runner, Multi-Sport]
a001 Bandit Action Camera Batt-Stick
1000 URTC-1000
1395 Sennheiser Communications
0025 Headset [PC 8]
+ 0026 SC230
+ 0027 SC260
+ 0028 SC230 CTRL
+ 0029 SC260 CTRL
+ 002a SC230 for Lync
+ 002b SC260 for Lync
+ 002d BTD-800
+ 002e Presence
+ 0030 CEHS-CI 02
+ 0031 U320 Gaming
+ 0032 SC30 for Lync
+ 0033 SC60 for Lync
+ 0034 SC30 Control
+ 0035 SC60 Control
+ 0036 SC630 for Lync
+ 0037 SC660 for Lync
+ 0038 SC630 CTRL
+ 0039 SC660 CTRL
+ 003f SP 20
+ 0040 MB Pro 1/2
+ 0041 SP 20 for Lync
+ 0042 SP 10
+ 0043 SP 10 for Lync
0046 PXC 550
+ 004a MOMENTUM M2 OEBT
+ 004b MOMENTUM M2 AEBT
+ 004f SC230 for MS II
+ 0050 SC260 for MS II
+ 0051 USB-ED CC 01
+ 0058 USB-ED CC 01 for MS
+ 0059 SC40 for MS
+ 005a SC70 for MS
+ 005b SC40 CTRL
+ 005c SC70 CTRL
+ 0060 SCx5 MS
+ 0061 SCx5 CTRL
+ 0064 MB 660 MS
+ 0065 MB 660
+ 0066 SP 20 D UC
+ 0067 SP 20 D MS
+ 006b SC5x5 MS
+ 0072 Headset
3556 USB Headset
1397 BEHRINGER International GmbH
+ 0004 FCA1616
00bc BCF2000
1398 Q-tec
2103 USB 2.0 Storage Device
3392 Azurewave 43228+20702
3394 Bluetooth
3474 Atheros AR3012 Bluetooth
+ 3526 Bluetooth Radio
5070 Webcam
5111 Integrated Webcam
5115 Integrated Webcam
5126 PC Cam
5130 Integrated Webcam
5134 Integrated Webcam
+ 5615 Lenovo EasyCamera
+ 5670 HP TrueVision HD
+ 5682 SunplusIT Integrated Camera
5702 UVC VGA Webcam
5710 UVC VGA Webcam
5716 UVC VGA Webcam
+ 5a07 VGA UVC WebCam
7020 DTV-DVB UDST7020BDA DVB-S Box(DVBS for MCE2005)
7022 DTV-DVB UDST7022BDA DVB-S Box(Without HID)
+ 784b XHC Camera
13d7 Guidance Software, Inc.
0001 T5 PATA forensic bridge
000c T8-R2 forensic bridge
0001 Optical Mouse
0003 Optical Mouse
13fd Initio Corporation
+ 0550 INIC-1530 PATA Bridge
0840 INIC-1618L SATA
0841 Samsung SE-T084M DVD-RW
0940 ASUS SBW-06D2X-U
1840 INIC-1608 SATA bridge
1e40 INIC-1610P SATA bridge
2040 Samsung Writemaster external DVD writer
+ 3920 INIC-3619PN SATA Bridge
3940 external DVD burner ECD819-SU3
+ 3960 INIC-3639
3e40 ZALMAN ZM-VE350
13fe Kingston Technology Company Inc.
1a00 512MB/1GB Flash Drive
2240 microSD card reader
3100 2/4 GB stick
3123 Verbatim STORE N GO 4GB
+ 3200 flash drive (2GB, EMTEC)
3600 flash drive (4GB, EMTEC)
3800 Rage XT Flash Drive
+ 3d00 Flash Drive
3e00 Flash Drive
4100 Flash drive
+ 4200 Platinum USB drive mini
5000 USB flash drive (32 GB SHARKOON Accelerate)
5100 Flash Drive
5200 DataTraveler R3.0
+ 5500 Flash drive
+ 6300 SP Mobile C31 (64GB)
1400 Axxion Group Corp.
1402 Bowe Bell & Howell
1403 Sitronix
0001 Digital Photo Frame
0003 Digital Photo Frame (DPF-1104)
+1404 Fundamental Software, Inc.
+ cddc Dongle
1409 IDS Imaging Development Systems GmbH
1000 generic (firmware not loaded yet)
1485 uEye UI1485
+ 3240 uEye UI3240
140e Telechips, Inc.
b011 TCC780X-based player (USB Boot mode)
b021 TCC77X-based players (USB Boot mode)
1430 RedOctane
0150 wireless receiver for skylanders wii
4734 Guitar Hero4 hub
+ 4748 Guitar Hero X-plorer
474b Guitar Hero MIDI interface
+ 8888 TX6500+ Dance Pad
+ f801 Controller
1431 Pertech Resources, Inc.
1435 Wistron NeWeb
0427 UR054g 802.11g Wireless Adapter [Intersil ISL3887]
0408 dedicated haptic device
1452 Dai Nippon Printing, Inc
8b01 DS620
+ 9001 DS820
1453 Radio Shack
4026 26-183 Serial Cable
1456 Extending Wire & Cable Co., Ltd.
0161 15901 802.11bg Wireless Adapter [Realtek RTL8187L]
0167 Widescreen 3MP Webcam
0176 Isla Keyboard
+ 019f 17676 Webcam
+ 01e5 Keyboard [GXT 830]
+ 0212 Panora Widescreen Graphic Tablet
+ 023f Mouse [GXT 168]
1460 Tatung Co.
9150 eHome Infrared Transceiver
1461 Staccato Communications
1462 Micro Star International
5512 MegaStick-1 Flash Stick
8807 DIGIVOX mini III [af9015]
+146b BigBen Interactive
+ 0601 Controller for Xbox 360
+ 0902 Wired Mini PS3 Game Controller
1472 Huawei-3Com
0007 Aolynk WUB300g [ZyDAS ZD1211]
0009 Aolynk WUB320g
1498 Microtek International Inc.
a090 DVB-T Tuner
149a Imagination Technologies
+ 069b PURE Digital Evoke-1XT Tri-band
2107 DBX1 DSP core
14aa WideView Technology Inc.
0001 Avermedia AverTV DVBT USB1.1 (cold)
14ae Printronix Inc.
14af ATP Electronics Inc.
14b0 StarTech.com Ltd.
+ 3410 Serial Adapter ICUSB2321X [TUSB3410I]
14b2 Ralink Technology, Corp.
3a93 Topcom 802.11bg Wireless Adapter [Atheros AR5523]
3a95 Toshiba WUS-G06G-JT 802.11bg Wireless Adapter [Atheros AR5523]
123a SD/MMC/RS-MMC Card Reader
125c SD card reader
127b SDXC Reader
+ 168a Elecom Co., Ltd MR-K013 Multicard Reader
6116 M6116 SATA Bridge
6600 M110E PATA bridge
6700 Card Reader
ab11 GU-1000T
ab13 GW-US54Mini 802.11bg
14ed Shure Inc.
+ 1000 MV5
+ 1002 MV51
+ 1003 MVi
+ 1004 SHA900
+ 1005 KSE1500
+ 1011 MV88+
+ 1100 ANIUSB-MATRIX
+ 1101 P300
29b6 X2u Adapter
+ 3000 RMCE-USB
14f7 TechniSat Digital GmbH
0001 SkyStar 2 HD CI
0002 SkyStar 2 HD CI
0500 DVB-PC TV Star HD
1500 Ellisys
1501 Pine-Tum Enterprise Co., Ltd.
+1504 Bixolon CO LTD
+ 001f SRP-350II Thermal Receipt Printer
1509 First International Computer, Inc.
0a01 LI-3100 Area Meter
0a02 LI-7000 CO2/H2O Gas Analyzer
0539 JMS539/567 SuperSpeed SATA II/III 3.0G/6.0G Bridge
0551 JMS551 SuperSpeed two ports SATA 3Gb/s bridge
0561 JMS551 - Sharkoon SATA QuickPort Duo
+ 0562 JMS567 SATA 6Gb/s bridge
0567 JMS567 SATA 6Gb/s bridge
- 0578 JMS567 SATA 6Gb/s bridge
+ 0576 Gen1 SATA 6Gb/s Bridge
+ 0578 JMS578 SATA 6Gb/s
+ 0583 JMS583Gen 2 to PCIe Gen3x2 Bridge
0770 Alienware Integrated Webcam
1561 JMS561U two ports SATA 6Gb/s bridge
+ 1576 External Disk 3.0
2329 JM20329 SATA Bridge
2335 ATA/ATAPI Bridge
2336 Hard Disk Drive
2590 JMS567 SATA 6Gb/s bridge
3562 JMS567 SATA 6Gb/s bridge
3569 JMS566 SATA 3Gb/s bridge
+ 578e JMS578 SATA 6Gb/s bridge
+ 8561 salcar docking station two disks
152e LG (HLDS)
+ 1640 INIC-1605 SATA Bridge
2507 PL-2507 IDE Controller
+ 2571 GP08NU6W DVD-RW
e001 GSA-5120D DVD-RW
1532 Razer USA, Ltd
0001 RZ01-020300 Optical Mouse [Diamondback]
+ 0002 Diamondback Optical Mouse
0003 Krait Mouse
+ 0005 Boomslang CE
0007 DeathAdder Mouse
- 0013 Orochi mouse
+ 0009 Gaming Mouse [Tempest Habu]
+ 000a Mamba (Wired)
+ 000c Lachesis
+ 000d DiamondBack 3G
+ 000e Megalodon
+ 000f Mamba (Wireless)
+ 0012 Gaming Mouse [Salmosa]
+ 0013 Orochi 2011
0015 Naga Mouse
- 0016 DeathAdder Mouse
+ 0016 DeathAdder 3.5G
0017 RZ01-0035 Laser Gaming Mouse [Imperator]
+ 0019 Marauder
+ 001a Spectre
+ 001b Gaming Headset
001c RZ01-0036 Optical Gaming Mouse [Abyssus]
- 0024 Mamba
- 002e RZ01-0058 Gaming Mouse [Naga]
+ 001e Lachesis (5600 DPI)
+ 001f Naga Epic (Wired)
+ 0020 Abyssus 1800
+ 0021 Naga Epic Dock (Wireless, Bluetooth)
+ 0022 Gaming Mouse [TRON]
+ 0023 Gaming Keyboard [TRON]
+ 0024 Mamba 2012 (Wired)
+ 0025 Mamba 2012 (Wireless)
+ 0029 DeathAdder Black Edition
+ 002a Gaming Mouse [Star Wars: The Old Republic]
+ 002b Gaming Keyboard [Star Wars: The Old Republic]
+ 002c Gaming Headset [Star Wars: The Old Republic]
+ 002e RZ01-0058 Gaming Mouse [Naga 2012]
002f Imperator 2012
- 0036 RZ01-0075, Gaming Mouse [Naga Hex]
+ 0031 Gaming Mouse Dock [Star Wars: The Old Republic]
+ 0032 Ouroboros 2012 (Wired)
+ 0033 Ouroboros 2012 (Wireless)
+ 0034 Taipan
+ 0035 Krait 2013 Essential
+ 0036 RZ01-0075, Gaming Mouse [Naga Hex (Red)]
+ 0037 DeathAdder 2013
+ 0038 DeathAdder 1800
+ 0039 Orochi 2013
+ 003e Naga Epic Chroma (Wired)
+ 003f Naga Epic Chroma (Wireless)
+ 0040 Naga 2014
+ 0041 Naga Hex
0042 Abyssus 2014
0043 DeathAdder Chroma
0044 Mamba Chroma (Wired)
0045 Mamba Chroma (Wireless)
0046 Mamba 2015 Tournament Edition [RZ01-01370100-R3]
- 0048 Orochi (Wired)
+ 0048 Orochi 2015 (Wired)
+ 004a RZ03-0133 Gaming Lapboard, Keyboard Mouse Combo, Dongle [Turret Dongle]
+ 004c Diamondback Chroma
+ 004d DeathAdder 2000 (Cynosa Pro Bundle)
+ 0050 Naga Hex V2
+ 0053 Naga Chroma
+ 0054 DeathAdder 3500
+ 0056 Orochi 2015 (Wireless)
+ 0059 RZ01-0212 Gaming Mouse [Lancehead (Wired)]
+ 005a RZ01-0212 Gaming Mouse [Lancehead (Wireless)]
+ 005b Abyssus V2
+ 005c DeathAdder Elite
+ 005e Abyssus 2000
+ 005f DeathAdder 2000
+ 0060 RZ01-0213 Gaming Mouse [Lancehead Tournament Edition]
+ 0062 Atheris
+ 0064 Basilisk
+ 0065 RZ01-0265, Gaming Mouse [Basilisk Essential]
+ 0067 Naga Trinity
+ 0068 Gaming Mouse Mat [Firefly Hyperflux]
+ 0069 Gaming Mouse [Mamba Hyperflux]
+ 006a Abyssus Elite (D.Va Edition)
+ 006b Abyssus Essential
+ 006c Mamba Elite (Wired)
+ 006e DeathAdder Essential
+ 006f RZ01-0257 Gaming Mouse [Lancehead Wireless (2019, Wireless, Receiver)]
+ 0070 RZ01-0257 Gaming Mouse [Lancehead Wireless (2019, Wired)]
+ 0071 RZ01-0254 Gaming Mouse [DeathAdder Essential White Edition]
+ 0072 Mamba 2018 (Wireless)
+ 0073 Mamba 2018 (Wired)
+ 0078 Viper (wired)
+ 007a RC30-0305 Gaming Mouse [Viper Ultimate (Wired)]
+ 007b RC30-0305 Gaming Mouse Dongle [Viper Ultimate (Wireless)]
+ 007e RC30-030502 Mouse Dock
+ 0084 RZ01-0321 Gaming Mouse [DeathAdder V2]
+ 0085 RZ01-0316 Gaming Mouse [Basilisk V2]
+ 0088 Razer Basilisk Ultimate Dongle
0101 Copperhead Mouse
0102 Tarantula Keyboard
+ 0103 Gaming Keyboard [Reclusa]
+ 0105 Gaming Keyboard [ProType]
+ 0106 Gaming Keyboard [ProType]
0109 Lycosa Keyboard
+ 010b Gaming Keyboard [Arctosa]
010d BlackWidow Ultimate 2012
+ 010e BlackWidow Classic (Alternate)
+ 010f Anansi
+ 0110 Cyclosa
+ 0111 Nostromo
0113 RZ07-0074 Gaming Keypad [Orbweaver]
- 0118 RZ03-0080, Gaming Keyboard [Deathstalker]
+ 0114 DeathStalker Ultimate
+ 0116 Blade Pro (2015)
+ 0118 RZ03-0080, Gaming Keyboard [Deathstalker Essential]
+ 0119 Gaming Keyboard [Lycosa]
011a BlackWidow Ultimate 2013
011b BlackWidow Classic
+ 011c BlackWidow Tournament Edition Stealth
+ 011d Blade 2013
+ 011e Gaming Keyboard Dock [Edge Keyboard Dock]
+ 011f Deathstalker Essential 2014
+ 0200 Gaming Keyboard [Reclusa]
+ 0201 Tartarus
+ 0202 DeathStalker Expert
0203 BlackWidow Chroma
+ 0204 DeathStalker Chroma
0205 Blade Stealth
- 0208 Tartarus
+ 0207 Orbweaver Chroma keypad
+ 0208 Tartarus Chroma
0209 BlackWidow Tournament Edition Chroma
+ 020d Cynosa Pro keyboard (Cynosa Pro Bundle)
+ 020f Blade QHD
+ 0210 Blade Pro (Late 2016)
+ 0211 BlackWidow Chroma (Overwatch)
0214 BlackWidow Ultimate 2016
+ 0215 Core
0216 BlackWidow X Chroma
+ 0217 BlackWidow X Ultimate
021a BlackWidow X Tournament Edition Chroma
+ 021b Gaming Keyboard [BlackWidow X Tournament Edition]
+ 021e Ornata Chroma
+ 021f Ornata
0220 Blade Stealth (2016)
+ 0221 RZ03-0203 Gaming Keyboard [BlackWidow Chroma V2]
+ 0224 Blade (Late 2016)
+ 0225 Blade Pro (2017)
+ 0226 Huntsman Elite
+ 0227 Huntsman
+ 0228 BlackWidow Elite
+ 022a Cynosa Chroma
+ 022b Tartarus V2
+ 022c Cynosa Chroma Pro
+ 022d Blade Stealth (Mid 2017)
+ 022f Blade Pro FullHD (2017)
+ 0232 Blade Stealth (Late 2017)
+ 0233 Blade 15 (2018)
+ 0234 Blade Pro 17 (2019)
+ 0235 BlackWidow Lite (2018)
+ 0237 BlackWidow Essential
+ 0239 Blade Stealth (2019)
+ 023a Blade 15 (2019) Advanced
+ 023b Blade 15 (2018) Base Model
+ 023f RZ03-0274 Gaming Keyboard [Cynosa Lite]
+ 0240 Blade 15 (2018) Mercury
+ 0241 BlackWidow (2019)
+ 0243 Huntsman Tournament Edition
+ 0244 RZ07-0311 Gaming Keypad [Tartarus Pro]
+ 0245 Blade 15 (Mid 2019) Mercury
+ 0246 Blade 15 (Mid 2019) Base Model
+ 024a Blade Stealth (Late 2019)
+ 024b Gaming Laptop [Blade 15 Advanced (Late 2019)]
+ 024c Gaming Laptop [Blade Pro (Late 2019)]
+ 024d Blade 15 Studio Edition (2019)
+ 0253 RZ09-0330, Gaming Laptop [Blade 15 Advanced (Early 2020)]
+ 0255 RZ09-0328, Gaming Laptop [Blade 15 Base Model (2020)]
0300 RZ06-0063 Motion Sensing Controllers [Hydra]
- 0c00 Firefly
+ 0401 Gaming Arcade Stick [Panthera]
+ 0501 Kraken 7.1
+ 0502 Gaming Headset [Kraken USB]
+ 0504 Kraken 7.1 Chroma
+ 0506 Kraken 7.1 (Alternate Version)
+ 0510 Kraken 7.1 V2
+ 0511 RZ19-0229 Gaming Microphone
+ 0514 Electra V2 USB
+ 0517 Nommo Chroma
+ 0518 Nommo Pro
+ 051a Nari Ultimate
+ 051c Nari (Wireless)
+ 051d Nari (Wired)
+ 0520 Kraken Tournament Edition
+ 0521 Kraken Kitty Edition
+ 0527 RZ04-0318 Gaming Headset [Kraken Ultimate]
+ 0904 R201-0282 Gaming Keyboard, Mouse Combination [Turret For Xbox One]
+ 0a00 Atrox Arcade Stick for Xbox One
+ 0a02 ManO'War
+ 0a03 Wildcat
+ 0c00 RZ02-0135 Hard Gaming Mouse Mat [Firefly]
+ 0c01 Goliathus
+ 0c02 Goliathus Extended
+ 0c04 Firefly V2
+ 0e03 Gaming Webcam [Kiyo]
+ 0f03 Tiamat 7.1 V2
+ 0f07 Chroma Mug Holder
+ 0f08 Base Station Chroma
+ 0f09 Chroma HDK
+ 0f0d Laptop Stand Chroma
+ 0f13 Lian Li O11 Dynamic Razer Edition
+ 0f1a Core X Chroma
+ 1000 Gaming Controller [Raiju]
+ 1004 Gaming Controller [Raiju Ultimate Wired]
+ 1007 Gaming Controller [Raiju 2 Tournament Edition (USB)]
+ 1008 Gaming Flightstick [Panthera Evo]
+ 1009 Gaming Controller [Raiju 2 Ultimate Edition (BT)]
+ 100a Gaming Controller [Raiju 2 Tournament Edition (BT)]
+ 110d Bootloader (Alternate)
+ 800e Bootloader
153b TerraTec Electronic GmbH
1181 Cinergy S2 PCIe Dual Port 1
1182 Cinergy S2 PCIe Dual Port 2
154a Celectronic GmbH
8180 CARD STAR/medic2
154b PNY
+ 000f Flash Drive
0010 USB 2.0 Flash Drive
0048 Flash Drive
004d 8 GB Flash Drive
005b Flash Drive
0062 Flash Drive
007a Classic Attache Flash Drive
+ 5408 2.5in drive enclosure
+ 6000 Flash Drive
6545 FD Device
fa05 Flash Drive
154d ConnectCounty Holdings Berhad
15a2 Freescale Semiconductor, Inc.
0038 9S08JS Bootloader
003b USB2CAN Application for ColdFire DEMOJM board
+ 0041 i.MX51 SystemOnChip in RecoveryMode
0042 OSBDM - Debug Port
+ 004e i.MX53 SystemOnChip in RecoveryMode
004f i.MX28 SystemOnChip in RecoveryMode
0052 i.MX50 SystemOnChip in RecoveryMode
0054 i.MX 6Dual/6Quad SystemOnChip in RecoveryMode
0061 i.MX 6Solo/6DualLite SystemOnChip in RecoveryMode
+ 006a Vybrid series SystemOnChip in RecoveryMode
+ 0076 i.MX 7Solo/7Dual SystemOnChip in RecoveryMode
+ 0080 i.MX 6ULL SystemOnChip in RecoveryMode
15a4 Afatech Technologies, Inc.
1000 AF9015/AF9035 DVB-T stick
1001 AF9015/AF9035 DVB-T stick
0004 OpenOCD JTAG TINY
002a ARM-USB-TINY-H JTAG interface
002b ARM-USB-OCD-H JTAG+RS232
+ 003c TERES Keyboard+Touchpad
15c0 XL Imaging
0001 2M pixel Microscope Camera
0002 3M pixel Microscope Camera
0a41 MI-2540D [Optical mouse]
0a4c USB+PS/2 Optical Mouse
0a4d Optical Mouse
+ 0a4e AM-5400 [Optical Mouse]
0a4f Optical Mouse
15dc Hynix Semiconductor Inc.
15e0 Seong Ji Industrial Co., Ltd.
2007 RSA SecurID (R) Authenticator
15e4 Numark
0024 Mixtrack
+ 003c DJ2GO2 Touch
0140 ION VCR 2 PC / Video 2 PC
+ 3f00 Power A Mini Pro Elite
+ 3f0a Airflo Wired Controller for Xbox 360
+ 3f10 Batarang controller for Xbox 360
15e8 SohoWare
9100 NUB100 Ethernet [pegasus]
9110 10/100 USB Ethernet
15f4 HanfTek
0001 HanfTek UMT-010 USB2.0 DVB-T (cold)
0025 HanfTek UMT-010 USB2.0 DVB-T (warm)
+ 0131 Astrometa DVB-T/T2/C FM & DAB receiver [RTL2832P]
0135 Astrometa T2hybrid
1604 Tascam
+ 10c0 Dell Integrated Hub
8000 US-428 Audio/Midi Controller (without fw)
8001 US-428 Audio/Midi Controller
8004 US-224 Audio/Midi Controller (without fw)
1631 Good Way Technology
6200 GWUSB2E
c019 RT2573
+1633 AIM GmbH
+ 4510 ASC1553
+ 4520 ASC429
+ 4560 ASC-FDX
1645 Entrega [hex]
0001 1S Serial Port
0002 2S Serial Port
1679 Total Phase
2001 Beagle Protocol Analyzer
2002 Cheetah SPI Host Adapter
+167b Pure Digital Technologies, Inc.
+ 2009 Flip Ultra U1120
1680 Golden Bridge Electech Inc.
a332 DVB-T Dongle [RTL2832U]
1681 Prevo Technologies, Inc.
1685 Delock
0200 Infrared adapter
1686 ZOOM Corporation
- 0045 H4 Digital Recorder
+ 0045 Handy Recorder stereo mix
+ 01c0 Zoom Handy Recorder card reader
+ 01c5 Zoom Handy Recorder multi track
+ 03d5 LiveTrak L-12
1687 Kingmax Digital Inc.
5289 FlashDisk
6211 FlashDisk
1688 Saab AB
1689 Razer USA, Ltd
fd00 Onza Tournament Edition controller
+ fd01 Onza Classic Edition
+ fe00 Sabertooth Elite
168c Atheros Communications
0001 AR5523
0002 AR5523 (no firmware)
0486 Teensyduino RawHID
0487 Teensyduino Serial+Keyboard+Mouse+Joystick
0488 Teensyduino Flight Sim Controls
+ 05b5 BU0836
05dc shared ID for use with libusb
05dd BlackcatUSB2
+ 05de Flashcat
05df HID device except mice, keyboards, and joysticks
05e1 Free shared USB VID/PID pair for CDC devices
05e4 Free shared USB VID/PID pair for MIDI devices
08cb Alpermann+Velte Studio Clock
08cc Alpermann+Velte SAM7S MT Boot Loader
08cd Alpermann+Velte SAM7X MT Boot Loader
+ 09ce LINKUSB
0a32 jbmedia Light-Manager Pro
27d8 libusb-bound devices
27d9 HID device except mice, keyboards, and joysticks
0504 RETRO Innovations ZoomFloppy
054b GrauTec ReelBox OLED Display (external)
05be EasyLogic Board
+ 05f0 Superior Freedom Programmable IR Remote
06cc Trinamic TMCM-3110
+ 06f0 Axium AX-R4C Controller
+ 06f1 Axium AX-R1D Controller
06f9 Gabotronics Xminilab
+ 0726 Autonomic M400 Amplifier
+ 0727 Autonomic M800 Amplifier
0753 Digistump DigiSpark
075c AB-1.x UAC1 [Audio Widget]
075d AB-1.x UAC2 [Audio Widget]
+ 07cc Xylanta Ltd, Saint3 Device
+ 07f8 Axium AX-R4D Controller
080a S2E1 Interface
+ 0830 DMXControl Projects e.V., Nodle U1
+ 0831 DMXControl Projects e.V., Desklamp
+ 0832 DMXControl Projects e.V., Nodle U2
+ 0833 DMXControl Projects e.V., Nodle R4S
0870 Kaufmann Automotive GmbH, RKS+CAN Interface
+ 09f2 Axium AX-1250 Amplifier
+ 09f4 Axium AX-Mini4 Amplifier
0b03 AIS Receiver [dAISy]
+ 0b7d Autonomic M801 Amplifier
+ 0b7e Autonomic M401 Amplifier
+ 0b7f Autonomic M120e Amplifier
0bd4 codesrc SCSI2SD
+ 0c9b Fermium LABS srl/LabTrek srl Hall Effect Apparatus
+ 0d3c InputStick BT4.0
+ 0e1e AtomMiner
16d1 Suprema Inc.
0401 SUP-SFR400(A) BioMini Fingerprint Reader
16d3 Frontline Test Equipment, Inc.
0015 CML Control, Measurement and Data Logging System
16de Telemecanique
16df King Billion Electronics Co., Ltd.
-16f0 GN ReSound A/S
+16f0 GN Hearing A/S
0001 Speedlink Programming Interface
0003 Airlink Wireless Programming Interface
+ 0004 Accessory Programming Interface
16f5 Futurelogic Inc.
+1702 FDI-MATELEC
+ 0002 Encodeur
1706 BlueView Technologies, Inc.
1707 ARTIMI
170b Swissonic
1733 Cellink Technology Co., Ltd
0101 RF Wireless Optical Mouse OP-701
1736 CANON IMAGING SYSTEM TECHNOLOGIES INC.
-1737 Linksys
+1737 802.11g Adapter [Linksys WUSB54GC v3]
0039 USB1000 Gigabit Notebook Adapter
0070 WUSB100 v1 RangePlus Wireless Network Adapter [Ralink RT2870]
0071 WUSB600N v1 Dual-Band Wireless-N Network Adapter [Ralink RT2870]
0101 Packet-Master USB12
174c ASMedia Technology Inc.
07d1 Transcend ESD400 Portable SSD (USB 3.0)
+ 1151 ASM1151W
1153 ASM1153 SATA 3Gb/s bridge
2074 ASM1074 High-Speed hub
3074 ASM1074 SuperSpeed hub
5106 ASM1051 SATA 3Gb/s bridge
5136 ASM1053 SATA 3Gb/s bridge
51d6 ASM1051W SATA 3Gb/s bridge
- 55aa Name: ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge
+ 55aa ASM1051E SATA 6Gb/s bridge, ASM1053E SATA 6Gb/s bridge, ASM1153 SATA 3Gb/s bridge, ASM1153E SATA 6Gb/s bridge
174f Syntek
1105 SM-MS/Pro-MMC-XD Card Reader
110b HP Webcam
+ 1122 HP Webcam
+ 1169 Lenovo EasyCamera
1403 Integrated Webcam
1404 USB Camera device, 1.3 MPixel Web Cam
+ 1758 XYZ printing cameraR2
+ 1759 XYZ printing cameraL2
5212 USB 2.0 UVC PC Camera
5a11 PC Camera
5a31 Sonix USB 2.0 Camera
1759 LucidPort Technology, Inc.
1761 ASUSTek Computer, Inc. (wrong ID)
0b05 802.11n Network Adapter (wrong ID - swapped vendor and device)
+1770 MSI
+ ff00 steel series rgb keyboard
1772 System Level Solutions, Inc.
1776 Arowana
501c 300K CMOS Camera
+1777 Microscan Systems, Inc.
+ 0003 MicroHAWK ID-20
177f Sweex
0004 MM004V5 Photo Key Chain (Digital Photo Frame) 1.5"
0153 LW153 802.11n Adapter [ralink rt3070]
0154 LW154 802.11bgn (1x1:1) Wireless Adapter [Realtek RTL8188SU]
0313 LW313 802.11n Adapter [ralink rt2770 + rt2720]
1781 Multiple Vendors
+ 07df Axium AX-800DAV Amplifier
+ 07e1 Axium AX-KPC Keypad
+ 07e2 Axium AX-KPD Keypad
+ 07e3 Axium AX-400DA Amplifier
083e MetaGeek Wi-Spy
083f MetaGeek Wi-Spy 2.4x
0938 Iguanaworks USB IR Transceiver
+ 0941 qNimble Quark
0a96 raphnet.net usb_game12
0a97 raphnet.net SNES mouse adapter
0a98 raphnet.net USBTenki
0a9d raphnet.net 4nes4snes
0a9e raphnet.net Megadrive multitap
0a9f raphnet.net MultiDB9joy
+ 0bad Mantracourt Load Cell
0c30 Telldus TellStick
0c31 Telldus TellStick Duo
0c9f USBtiny
1eef OpenAPC SecuKey
1ef0 E1701 Modular Controller Card
1ef1 E1701 Modular Controller Card
+ 1ef2 E1803 Compact Controller Card
1782 Spreadtrum Communications Inc.
+ 3d00 F200n mobile phone
1784 TopSeed Technology Corp.
0001 eHome Infrared Transceiver
0004 RF Combo Device
0011 eHome Infrared Transceiver
1787 ATI AIB
1788 ShenZhen Litkconn Technology Co., Ltd.
+178e ASUSTek Computer, Inc. (wrong ID)
+ 0b05 CrossLink cable 2GB (wrong ID - swapped vendor and device)
1796 Printrex, Inc.
1797 JALCO CO., LTD.
1799 Thales Norway A/S
0100 C03U multi-pattern microphone
0101 UB1 boundary microphone
0120 Meteorite condenser microphone
+ 0130 Go Mic Direct
+ 0132 Go Mic Mobile wireless receiver
0200 StudioDock monitors (internal hub)
0201 StudioDock monitors (audio)
0210 StudioGT monitors
+ 0211 StudioGT monitors [CM6400]
+ 0240 Go Mic Connect
+ 0241 G-Track Pro microphone
0301 Q2U handheld microphone with XLR
0302 GoMic compact condenser microphone
0303 C01U Pro condenser microphone
0304 Q2U handheld mic with XLR
0305 GoMic compact condenser mic
0310 Meteor condenser microphone
+ 0311 Satellite condenser microphone
+ 1616 RXD1 wireless receiver
+ b241 G-Track Pro firmware update
+ b311 Satellite firmware update
17a4 Concept2
0001 Performance Monitor 3
0002 Performance Monitor 4
17a8 Kamstrup A/S
0001 Optical Eye/3-wire
0005 M-Bus Master MultiPort 250D
+ 0010 444MHz Radio Mesh Frontend
+ 0011 444MHz RF sniffer
+ 0012 870MHz Radio Mesh Frontend
+ 0013 870MHz RF sniffer
17b3 Grey Innovation
0004 Linux-USB Midi Gadget
17b5 Lunatone
17c3 Singim International Corp.
17cc Native Instruments
041c Audio 2 DJ
+ 041d Traktor Audio 2
0808 Maschine Controller
0815 Audio Kontrol 1
0839 Audio 4 DJ
0d8d Guitarrig Mobile
+ 1001 Komplete Audio 6
+ 1110 Maschine Mikro
1915 Session I/O
1940 RigKontrol3
1969 RigKontrol2
17d3 Korea Techtron Co., Ltd.
17e9 DisplayLink
0051 USB VGA Adaptor
+ 0198 DisplayLink
+ 019e Overfly FY-1016A
+ 028f HIS Multi-View II
030b HP T100
0377 Plugable UD-160-A (M)
0378 Plugable UGA-2K-A
037d Plugable USB2-HDMI-165
410a HDMI Adapter
430a HP Port Replicator (Composite Device)
+ 430f Kensington Dock (Composite Device)
4312 S2340T
+ 436e Dell D3100 Docking Station
+ ff10 I1659FWUX {AOC Powered Monitor]
17eb Cornice, Inc.
17ef Lenovo
- 1000 Hub
+ 1000 ThinkPad X6 UltraBase
1003 Integrated Smart Card Reader
1004 Integrated Webcam
+ 1005 ThinkPad X200 Ultrabase (42X4963 )
1008 Hub
100a ThinkPad Mini Dock Plus Series 3
+ 100f ThinkPad Ultra Dock Hub
+ 1010 ThinkPad Ultra Dock Hub
+ 1020 ThinkPad Dock Hub
+ 1021 ThinkPad Dock Hub [Cypress HX2VL]
+ 3049 ThinkPad OneLink integrated audio
304b AX88179 Gigabit Ethernet [ThinkPad OneLink GigaLAN]
+ 304f RTL8153 Gigabit Ethernet [ThinkPad OneLink Pro Dock]
+ 3060 ThinkPad Dock
+ 3062 ThinkPad Dock Ethernet [Realtek RTL8153B]
+ 3063 ThinkPad Dock Audio
+ 3066 ThinkPad Thunderbolt 3 Dock MCU
+ 3069 ThinkPad TBT3 LAN
+ 306a ThinkPad Thunderbolt 3 Dock Audio
3815 ChipsBnk 2GB USB Stick
- 4802 Lenovo Vc0323+MI1310_SOC Camera
+ 4802 Vc0323+MI1310_SOC Camera
4807 UVC Camera
480c Integrated Webcam
480d Integrated Webcam [R5U877]
6004 ISD-V4 Tablet Pen
6007 Smartcard Keyboard
6009 ThinkPad Keyboard with TrackPoint
+ 600e Optical Mouse
6014 Mini Wireless Keyboard N5901
+ 6019 M-U0025-O Mouse
+ 6022 Ultraslim Plus Wireless Keyboard and Mouse
6025 ThinkPad Travel Mouse
+ 602d Black Silk Keyboard
+ 6032 Wireless Dongle for Keyboard and Mouse
+ 6044 ThinkPad Laser Mouse
+ 6047 ThinkPad Compact Keyboard with TrackPoint
+ 604b Precision Wireless Mouse
+ 608d Optical Mouse
+ 609b Professional Wireless Keyboard and Mouse Combo
+ 609c Professional Wireless Keyboard
7203 Ethernet adapter [U2L 100P-Y1]
+ 7205 Thinkpad LAN
+ 7217 VGA adapter
7423 IdeaPad A1 Tablet
7435 A789 (Mass Storage mode, with debug)
743a A789 (Mass Storage mode)
7498 A789 (MTP mode, with debug)
749a A789 (PTP mode)
749b A789 (PTP mode, with debug)
+ 7604 A760 (Mass Storage mode)
+ 7605 A760 (Mass Storage mode, with debug)
+ 760a A760 (MTP mode)
+ 760b A760 (MTP mode, with debug)
+ 760c A760 (PTP mode)
+ 760d A760 (PTP mode, with debug)
+ 76fc B8000-H (Yoga Tablet 10) (mass storage)
+ 76fd B8000-H (Yoga Tablet 10) (debug , mass storage)
+ 76fe B8000-H (Yoga Tablet 10) (MTP)
+ 76ff B8000-H (Yoga Tablet 10) (debug , MTP)
+ 7702 B8000-H (Yoga Tablet 10) (PTP)
+ 7703 B8000-H (Yoga Tablet 10) (debug , PTP)
+ 7704 B8000-H (Yoga Tablet 10) (USB tether)
+ 7705 B8000-H (Yoga Tablet 10) (debug , USB tether)
+ 7706 B8000-H (Yoga Tablet 10) (zerocd)
+ 7707 B8000-H (Yoga Tablet 10) (debug , zerocd)
+ 785f TAB 2 A7-10 Tablet
+ b000 Virtual Keyboard and Mouse
+ b001 Ethernet
+ b003 Virtual Keyboard and Mouse / Mass Storage
+ f003 MEDION LIFETAB X10605 MTP mode
17f4 WaveSense
aaaa Jazz Blood Glucose Meter
17f5 K.K. Rocky
-17f6 Unicomp, Inc
+17f6 Unicomp, Inc.
0709 Model M Keyboard
+ 0822 Ruffian 6 Keyboard v3 [Model M]
1809 Advantech
4604 USB-4604
4761 USB-4761 Portable Data Acquisition Module
0010 VoiceKey
1843 Vaisala
1849 ASRock Incorporation
+184f K2L GmbH
+ 0012 MOCCA compact
1852 GYROCOM C&C Co., LTD
+ 7022 Fiio E10
+ 7921 Audiotrak ProDigy CUBE
7922 Audiotrak DR.DAC2 DX [GYROCOM C&C]
1854 Memory Devices Ltd.
185b Compro
ee93 EasyLogger
187c Alienware Corporation
0511 AlienFX Mobile lighting
+ 0513 Gaming Desktop [Aurora R4]
+ 0550 LED controller
0600 Dual Compatible Game Pad
187f Siano Mobile Silicon
0010 Stallar Board
022b Portable Hard Drive (Store'n'Go)
0237 Portable Harddrive
0243 Flash Drive (Store'n'Go)
+ 0245 Store'n'Stay
0302 Flash Drive
0304 Store 'n' Go
+ 0408 Store 'n' Go
4123 Store N Go
18b1 Petalynx
0037 Maxter Remote Control
0006 Onda V972 MTP
0008 Onda V972 PTP (camera)
0d02 Celkon A88
- 2d00 Android-powered device in accessory mode
- 2d01 Android-powered device in accessory mode with ADB support
+ 2d00 Android Open Accessory device (accessory)
+ 2d01 Android Open Accessory device (accessory + ADB)
+ 2d02 Android Open Accessory device (audio)
+ 2d03 Android Open Accessory device (audio + ADB)
+ 2d04 Android Open Accessory device (accessory + audio)
+ 2d05 Android Open Accessory device (accessory + audio + ADB)
4e11 Nexus One
4e12 Nexus One (debug)
4e13 Nexus One (tether)
4e42 Nexus 7 (debug)
4e43 Nexus 7 (PTP)
4e44 Nexus 7 2012 (PTP)
- 4ee0 Nexus 4 (bootloader)
- 4ee1 Nexus Device (MTP)
- 4ee2 Nexus Device (debug)
- 4ee3 Nexus 4/5/7/10 (tether)
- 4ee4 Nexus 4/5/7/10 (debug + tether)
- 4ee5 Nexus 4 (PTP)
- 4ee6 Nexus 4/5 (PTP + debug)
+ 4ee0 Nexus/Pixel Device (fastboot)
+ 4ee1 Nexus/Pixel Device (MTP)
+ 4ee2 Nexus/Pixel Device (MTP + debug)
+ 4ee3 Nexus/Pixel Device (tether)
+ 4ee4 Nexus/Pixel Device (tether+ debug)
+ 4ee5 Nexus/Pixel Device (PTP)
+ 4ee6 Nexus/Pixel Device (PTP + debug)
+ 4ee7 Nexus/Pixel Device (charging + debug)
+ 4ee8 Nexus/Pixel Device (MIDI)
+ 4ee9 Nexus/Pixel Device (MIDI + debug)
+ 5033 Pixel earbuds
7102 Toshiba Thrive tablet
b004 Pandigital / B&N Novel 9" tablet
d001 Nexus 4 (fastboot)
d002 Nexus 4 (debug)
+ d00d Xiaomi Mi/Redmi 2 (fastboot)
d109 LG G2x MTP
d10a LG G2x MTP (debug)
18d5 Starline International Group Limited
3188 ARK3188 UVC Webcam
3299 Webcam Carrefour
3366 Bresser Biolux NV
+ 5850 CVBS / S-Video Capture Device [UVC]
+18ef ELV Elektronik AG
+ e014 FS20PCE
+ e015 FS20PCS
+ e01a Bedien-Anzeige-Terminal
18f8 [Maxxter]
+ 0f97 Optical Gaming Mouse [Xtrem]
0f99 Optical gaming mouse
+ 1142 Optical gaming mouse
+ 1486 X5s ZEUS Macro Pro Gaming Mouse
18fb Scriptel Corporation
01c0 ST1501-STN
01c1 ST1526-STN
1901 GE Healthcare
0015 Nemo Tracker
1908 GEMBIRD
- 1320 PhotoFrame PF-15-1
+ 0102 Digital Photo Frame
+ 0226 MicroSD Card Reader/Writer
+ 1315 Digital Photo Frame
+ 1320 DM8261 Flashdisc
+ 2070 Honk HK-5002 USB Speaker
+ 2220 Buildwin Media-Player
+ 2311 Generic UVC 1.00 camera [AppoTech AX2311]
190d Motorola GSG
1914 Alco Digital Devices Limited
1915 Nordic Semiconductor ASA
000c Wireless Desktop nRF24L01 CX-1766
+ 0101 HP Prime Wireless Kit [FOK65AA] (Flash mode)
2233 Linksys WUSB11 v2.8 802.11b Adapter [Atmel AT76C505]
2234 Linksys WUSB54G v1 OEM 802.11g Adapter [Intersil ISL3886]
2235 Linksys WUSB54GP v1 OEM 802.11g Adapter [Intersil ISL3886]
2236 Linksys WUSB11 v3.0 802.11b Adapter [Intersil PRISM 3]
+ 7777 Bitcraze Crazyradio (PA) dongle
191c Innovative Technology LTD
4104 Banknote validator NV-150
1923 FitLinxx
0085 1950 HID Touchscreen
0086 1950 HID Touchscreen
0087 1950 HID Touchscreen
+ 0dbf HID Touchscreen
0dc2 HID Touchscreen
+1928 Proceq SA
+ 0400 Equotip Piccolo
192f Avago Technologies, Pte.
0000 Mouse
0416 ADNS-5700 Optical Mouse Controller (3-button)
0616 ADNS-5700 Optical Mouse Controller (5-button)
+ 0916 ADNS-2710 Optical Mouse Controller
1930 Shenzhen Xianhe Technology Co., Ltd.
1931 Ningbo Broad Telecommunication Co., Ltd.
1934 Feature Integration Technology Inc. (Fintek)
0602 F71610 or F71612 Consumer Infrared Receiver/Transceiver
0702 Integrated Consumer Infrared Receiver/Transceiver
5168 F71610A or F71612A Consumer Infrared Receiver/Transceiver
+1935 Elektron Music Machines
+ 000d Elektron Digitakt
1938 Meinberg Funkuhren GmbH & Co. KG
0501 TCR51USB IRIG Time Code Reader
+ 0502 TCR600USB IRIG Time Code Reader
1941 Dream Link
8021 WH1080 Weather Station / USB Missile Launcher
1943 Sensoray Co., Inc.
2253 Model 2253 Audio/Video Codec Card
2255 Model 2255 4 Channel Capture Card
2257 Model 2257 4 Channel Capture Card
+ 2263 Model 2263 UVC HD Audio/Video Codec Card
a250 Model 2250 MPEG and JPEG Capture Card (cold)
a253 Model 2253 Audio/Video Codec Card (cold)
1949 Lab126, Inc.
0002 Amazon Kindle
0004 Amazon Kindle 3/4/Paperwhite
- 0006 Kindle Fire
+ 0006 Amazon Kindle Fire
0008 Amazon Kindle Fire HD 8.9"
+ 000a Amazon Kindle Fire 2nd generation (2012)
+ 0331 Kindle Fire HD 8 (2018)
+ 0417 Amazon Zukey; clone of Yubikey 4 OTP+U2F
+ 0800 Fire Phone
194f PreSonus Audio Electronics, Inc.
0101 AudioBox 22 VSL
0102 AudioBox 44 VSL
0103 AudioBox 1818 VSL
+ 0201 FaderPort
0301 AudioBox
1951 Hyperstone AG
1953 Ironkey Inc.
0202 S200 2GB Rev. 1
1954 Radiient Technologies
195d Itron Technology iONE
+ 2030 Func KB-460 Gaming Keyboard
7002 Libra-Q11 IR remote
7006 Libra-Q26 / 1.0 Remote
7777 Scorpius wireless keyboard
7779 Scorpius-P20MT
+1963 IK Multimedia
+ 0005 iRig KEYS
+ 0046 UNO Synth
1965 Uniden Corporation
0016 HomePatrol-1
+ 0018 UBC125XLT
+ 001a BCD436HP Scanner
1967 CASIO HITACHI Mobile Communications Co., Ltd.
196b Wispro Technology Inc.
1970 Dane-Elec Corp. USA
0000 Z Mate 16GB
+1973 Spectralink Corporation
+ 0002 Pivot recovery
+ 0003 Pivot Media Transfer Protocol
+ 0004 Pivot Media Transfer Protocol
1975 Dongguan Guneetal Wire & Cable Co., Ltd.
1976 Chipsbrand Microelectronics (HK) Co., Ltd.
- 6025 Flash Drive 512 MB
+ 1307 microSD Card Reader
+ 6025 CBM2090 Flash Drive
1977 T-Logic
0111 TL203 MP3 Player and Voice Recorder
197d Leuze electronic
0222 BCL 508i
+1980 Storage Appliance Corporation
+ 0808 Clickfree C2 Slimline (527SE)
1989 Nuconn Technology Corp.
198f Beceem Communications Inc.
0210 BCS200 WiMAX Adapter
3010 Camera Release 4
3011 OEM Camera
3012 e-ImageData Corp. ScanPro
+1997 Shenzhen Riitek Technology Co., Ltd
+ 0409 wireless mini keyboard with touchpad
+ 2433 wireless mini keyboard with touchpad
199b MicroStrain, Inc.
3065 3DM-GX3-25 Orientation Sensor
199e The Imaging Source Europe GmbH
8101 DFx 21BU04 Camera
+ 8457 DFK AFU130-L53 camera
199f Benica Corporation
+19a5 HARRIS Corp.
+ 0004 Remote NDIS Network Device
+ 0012 RF-7800S Secure Personal Radio
+ 0401 Mass Storage Device
+ 0402 Falcon III RF-7800V family RNDIS
19a8 Biforst Technology Inc.
19ab Bodelin
1000 ProScope HR
19b5 B & W Group
19b6 Infotech Logistic, LLC
19b9 Data Robotics
+ 4b10 Drobo
8d20 Drobo Elite
19c2 Futuba
6a11 MDM166A Fluorescent Display
19ca Mindtribe
0001 Sandio 3D HID Mouse
19cf Parrot SA
+ 0001 MiniKit Slim handsfree car kit in firmware update mode
+19d1 BYD
19d2 ZTE WCDMA Technologies MSM
0001 CDMA Wireless Modem
0002 MF632/ONDA ET502HS/MT505UP
0007 TU25 WiMAX Adapter [Beceem BCS200]
+ 0017 MF669
0031 MF110/MF627/MF636
+ 0037 ONDA MC503HSA
+ 0039 MF100
0063 K3565-Z HSDPA
0064 MF627 AU
0083 MF190
0103 MF112
0104 K4505-Z
+ 0117 MF667
0146 MF 195E (HSPA+ Modem)
0167 MF820 4G LTE
0172 AX226 WIMAX MODEM (After Modeswitch)
0325 LTE4G O2 ZTE MF821D LTE/UMTS/GSM Modem/Networkcard
0326 LTE4G O2 ZTE MF821D LTE/UMTS/GSM Modem/Networkcard
+ 0501 Lever Cell Phone Model Z936L
+ 1001 K3805-Z vodafone WCDMA/GSM Modem - storage mode (made by ZTE)
+ 1002 K3805-Z vodafone WCDMA/GSM Modem/Networkcard (made by ZTE)
1008 K3570-Z
1010 K3571-Z
1017 K5006-Z vodafone LTE/UMTS/GSM Modem/Networkcard
1203 MF691 [ T-Mobile webConnect Rocket 2.0]
1217 MF652
1218 MF652
+ 1270 MF667
2000 MF627/MF628/MF628+/MF636+ HSDPA/HSUPA
fff2 Gobi Wireless Modem (QDL mode)
fff3 Gobi Wireless Modem
19f7 RODE Microphones
0001 Podcaster
19fa Gampaq Co.Ltd
+ 0607 GAME CONTROLLER
0703 Steering Wheel
+19fd MTI Instruments Inc.
19ff Dynex
0102 1.3MP Webcam
0201 Rocketfish Wireless 2.4G Laser Mouse
+ 0220 RF-HDWEBLT RocketFish HD WebCam
0238 DX-WRM1401 Mouse
+ 0239 Bluetooth 4.0 Adapter [Broadcom, 1.12, BCM20702A0]
1a08 Bellwood International, Inc.
1a0a USB-IF non-workshop
badd USB OTG Compliance test device
1a2c China Resource Semico Co., Ltd
0021 Keyboard
0024 Multimedia Keyboard
+ 2124 Keyboard
+ 2d23 Keyboard
+ 427c Backlit Keyboard [Cougar Vantar]
1a32 Quanta Microsystems, Inc.
0304 802.11n Wireless LAN Card
1a34 ACRUX
1a5a Tandberg Data
1a61 Abbott Diabetes Care
3410 CoPilot System Cable
+ 3650 FreeStyle Libre
+ 3850 FreeStyle Optium/Precision Neo
+ 3950 FreeStyle Libre 2
+1a64 Mastervolt
+ 0000 MasterBus Link
1a6a Spansion Inc.
1a6d SamYoung Electronics Co., Ltd
1a6e Global Unichip Corp.
1008 E-861 PiezoWalk NEXACT Controller
1a79 Bayer Health Care LLC
6002 Contour
+ 6210 Contour Next Link 2.4 glucometer
+ 6300 Contour next link
7410 Contour Next
+ 7800 Contour Plus One
1a7b Lumberg Connect GmbH & Co. KG
1a7c Evoluent
0068 VerticalMouse 3
0168 VerticalMouse 3 Wireless
0191 VerticalMouse 4
+ 0195 VerticalMouse C Wireless
1a81 Holtek Semiconductor, Inc.
+ 1004 Wireless Dongle 2.4 GHZ HT82D40REW
+ 1701 Wireless dongle
+ 2004 Keyboard
2203 Laser Gaming mouse
2204 Optical Mouse
2205 Laser Mouse
+ 4001 Keyboard
1a86 QinHeng Electronics
5512 CH341 in EPP/MEM/I2C mode, EPP/I2C adapter
5523 CH341 in serial mode, usb to serial port converter
5584 CH341 in parallel mode, usb to printer port converter
- 7523 HL-340 USB-Serial adapter
+ 7523 CH340 serial converter
752d CH345 MIDI adapter
7584 CH340S
e008 HID-based serial adapater
1aa4 Data Drive Thru, Inc.
1aa5 UBeacon Technologies, Inc.
1aa6 eFortune Technology Corp.
+1aab Silvercreations Software AG
+ 7736 sceye (Gen 2)
+ 7737 sceye (Gen 3)
+ 7738 sceye (Gen 4, 3 Mpix)
+ 7750 sceyeS (Gen 5, 5 MPix)
1aad KeeTouch
0001 Touchscreen
1ab1 Rigol Technologies
+ 04b0 DS6000 SERIES
+ 04be DS4000 SERIES
+ 04ce DS1xx4Z/MSO1xxZ series
0588 DS1000 SERIES
+1ab2 Allied Vision
+ 0001 Vision device
1acb Salcomp Plc
1acc Midiplus Co, Ltd.
0103 AudioLink plus 4x4 2.9.28
1ad1 Desay Wire Co., Ltd.
1ad4 APS
0002 KM290-HRS
-1adb SEL C662 Serial Cable
+1adb Schweitzer Engineering Laboratories, Inc
+ 0001 C662 Serial Cable
+ 0003 CDC Ethernet Gadget
1ae4 ic-design Reinhard Gottinger GmbH
1ae7 X-TENSIONS
0381 VS-DVB-T 380U (af9015 based)
+ 0525 X-Tensions ISDN TA XC-525 [HFC-S USB]
2001 SpeedLink Snappy Mic webcam (SL-6825-SBK)
9003 SpeedLink Vicious And Devine Laplace webcam, white (VD-1504-SWT)
9004 SpeedLink Vicious And Devine Laplace webcam, black (VD-1504-SBK)
1aed High Top Precision Electronic Co., Ltd.
1aef Conntech Electronic (Suzhou) Corporation
1af1 Connect One Ltd.
+1af3 Kingsis Technology Corporation
+ 0001 ZOWIE Gaming mouse
1afe A. Eberle GmbH & Co. KG
0001 PQ Box 100
1b04 Meilhaus Electronic GmbH
1078 BLUDRIVE II CCID
1079 BLUDRIVE II CCID
1080 WRITECHIP II CCID
+1b12 Eventide
+ 0011 ModFactor
1b1c Corsair
0890 Flash Padlock
0a00 SP2500 Speakers
0a60 Vengeance K60 Keyboard
0c04 Link Cooling Node
+ 0c06 RM-Series C-Link Adapter
+ 0c0a Hydro Series H115i Liquid CPU Cooler
+ 0c0b Lighting Node Pro
+ 0c0c Lighting Node Loader
+ 0c22 iCUE H150i RGB PRO XT Liquid CPU Cooler
1a01 Flash Voyager GT
1a03 Voyager 3.0
1a09 Voyager GT 3.0
1a0a Survivor Stealth Flash Drive
1a0b Flash Voyager LS
+ 1a0e Voyager GTX
+ 1a14 Voyager Vega
1a15 Voyager Slider Flash Drive
1a90 Flash Voyager GT
1ab1 Voyager
1b09 Vengeance K70R keyboard
1b11 K95 RGB Mechanical Gaming Keyboard
1b13 Vengeance K70RGB keyboard
+ 1b20 STRAFE RGB Gaming Keyboard
+ 1b2d K95 RGB Platinum Keyboard [RGP0056]
+ 1b2e Corsair Corsair Gaming M65 Pro RGB Mouse
+ 1b2f Sabre RGB [CH-9303011-XX]
+ 1b3d Corsair Corsair Gaming K55 RGB Keyboard
+ 1b5e Harpoon Wireless Mouse
+ 1b65 Harpoon Wireless Dongle
1c00 Controller for Corsair Link
+ 1c02 AX1500i Power Supply
+ 1c05 HX750i Power Supply
+ 1c07 HX1000i Power Supply
+ 1c08 HX1200i Power Supply
+ 1c0b RM750i Power Supply
1c0c RM850i Power Supply
+ 1c1a Corsair CORSAIR Lighting Node CORE
+1b1e General Imaging / General Electric
+ 1003 A1250
1b1f eQ-3 Entwicklung GmbH
c00f HM-CFG-USB/HM-CFG-USB-2 [HomeMatic Configuration adapter]
+ c020 HmIP-RFUSB
1b20 MStar Semiconductor, Inc.
1b22 WiLinx Corp.
+1b24 Telegent Systems, Inc.
+ 4001 TLG2300 Hybrid TV Device
1b26 Cellex Power Products, Inc.
1b27 Current Electronics Inc.
1b28 NAVIsis Inc.
1b3f Generalplus Technology Inc.
0c52 808 Camera #9 (mass storage mode)
2002 808 Camera #9 (web-cam mode)
+ 2003 GPD6000 [Digital MP3 Player]
1b47 Energizer Holdings, Inc.
0001 CHUSB Duo Charger (NiMH AA/AAA USB smart charger)
1b48 Plastron Precision Co., Ltd.
1b5a Chao Zhou Kai Yuan Electric Co., Ltd.
1b65 The Hong Kong Standards and Testing Centre Ltd.
1b71 Fushicai
+ 0050 Encore ENUTV-4 Analog TV Tuner
3002 USBTV007 Video Grabber [EasyCAP]
1b72 ATERGI TECHNOLOGY CO., LTD.
1b73 Fresco Logic
d398 DVB-T receiver [RTL2832U]
d700 FM Radio SnapMusic Mobile 700 (FM700)
e297 Conceptronic DVB-T CTVDIGRCU V3.0
+ e302 CVBS / S-Video Capture Device [Pinnacle Dazzle / UB315-E]
+ e34c UB435-Q ATSC TV Stick
e383 DVB-T UB383-T [af9015]
e385 DVB-T UB385-T [af9015]
e386 DVB-T UB385-T [af9015]
1ba2 Lite Metals & Plastic (Shenzhen) Co., Ltd.
1ba4 Ember Corporation
0001 InSight USB Link
+ 0002 EM358 Virtual COM Port
1ba6 Abilis Systems
1ba8 China Telecommunication Technology Labs
1bad Harmonix Music
- 0002 Guitar for Xbox 360
- 0003 Drum Kit for Xbox 360
+ 0002 Rock Band Guitar for Xbox 360
+ 0003 Rock Band Drum Kit for Xbox 360
+ 0130 Ion Drum Rocker for Xbox 360
+ 028e Controller
+ 3330 Rock Band 3 Keyboard wii interface
+ f016 Controller
+ f018 Street Fighter IV SE FightStick for Xbox 360
+ f019 BrawlStick for Xbox 360
+ f021 Ghost Recon Future Soldier Gamepad for Xbox 360
+ f023 MLG Pro Circuit Controller for Xbox 360
+ f025 Call of Duty Controller for Xbox 360
+ f027 FPS Pro Controller for Xbox 360
+ f028 Street Fighter IV FightPad for Xbox 360
+ f02e FightPad
+ f030 MC2 MicroCON Racing Wheel for Xbox 360
+ f036 MicroCON Gamepad Pro for Xbox 360
+ f038 Street Fighter IV FightStick TE for Xbox 360
+ f039 Marvel VS Capcom 2 Tournament Stick for Xbox 360
+ f03a Street Fighter X Tekken FightStick Pro for Xbox 360
+ f03d Street Fighter IV Arcade Stick TE for Xbox 360
+ f03e MLG Arcade FightStick TE for Xbox 360
+ f03f Soulcalibur FightStick for Xbox 360
+ f042 Arcade FightStick TE S+ for Xbox 360
+ f080 FightStick TE2 for Xbox 360
+ f501 Horipad EX2 Turbo for Xbox 360
+ f502 Real Arcade Pro.VX SA for Xbox 360
+ f503 Fighting Stick VX for Xbox 360
+ f504 Real Arcade Pro.EX
+ f505 Fighting Stick EX2B for Xbox 360
+ f506 Real Arcade Pro.EX Premium VLX for Xbox 360
+ f900 Controller
+ f901 GameStop Controller
+ f903 Tron Controller for Xbox 360
+ f904 PDP Versus Fighting Pad for Xbox 360
+ f906 Mortal Kombat FightStick for Xbox 360
+ f907 Afterglow Gamepad
+ fa01 Gamepad
+ fd00 Razer Onza Tournament Edition
+ fd01 Razer Onza Classic Edition
1bae Vuzix Corporation
0002 VR920 Immersive Eyewear
1bbb T & A Mobile Phones
+ 0003 Alcatel one touch 4030D modem connection
+ 0017 HSPA Data Card
+ 007a Alcatel OneTouch (firmware upgrade mode)
011e Alcatel One Touch L100V / Telekom Speedstick LTE II
+ 0169 Alcatel ONE TOUCH Fierce
+ 0195 Alcatel OneTouch L850V / Telekom Speedstick LTE
+ a00e Vodafone Smart Tab 4G
+ f000 Alcatel OneTouch (mass storage mode)
f017 Alcatel One Touch L100V / Telekom Speedstick LTE II
+1bbd Videology Imaging Solutions, Inc.
+ 0060 1.3MP Mono Camera
+ 0066 1.3MP Mono Camera
+ 0067 1.3MP Mono Camera
+1bc0 Beijing Senseshield Technology Co.,Ltd.
+ 0013 Elitee-e
+ 0014 Elite4
+ 0020 iToken
+ 0021 Mikey
+ 0051 Elite5
+ 0055 Elite5 v3.x
+ 485d EliteIV
1bc4 Ford Motor Co.
1bc5 AVIXE Technology (China) Ltd.
1bc7 Telit Wireless Solutions
0020 HE863
0021 HE910
+ 0022 GE910-QUAD
0023 HE910-D ECM
+ 0032 LE910-EU V2
1003 UC864-E
1004 UC864-G
1005 CC864-DUAL
1006 CC864-SINGLE
1010 DE910-DUAL
1011 CE910-DUAL
- 1200 LE920
+ 1012 UE910 V2
+ 1101 ME910C1
+ 110a ME310
+ 1200 LE920 (old firmware)
+ 1201 LE910 / LE920
1bce Contac Cable Industrial Limited
1bcf Sunplus Innovation Technology Inc.
0005 Optical Mouse
053a Targa Silvercrest OMC807-C optische Funkmaus
05c5 SPRF2413A [2.4GHz Wireless Keyboard/Mouse Receiver]
05cf Micro keyboard & mouse receiver
+ 08a0 Gaming mouse [Philips SPK9304]
0c31 SPIF30x Serial-ATA bridge
+ 2281 SPCA2281 Web Camera
2880 Dell HD Webcam
+ 2883 Asus Webcam
2885 ASUS Webcam
2888 HP Universal Camera
+ 2895 Dell Integrated Webcam
28a2 Dell Integrated Webcam
28a6 DELL XPS Integrated Webcam
28ae Laptop Integrated Webcam HD
28bd Dell Integrated HD Webcam
2985 Laptop Integrated Webcam HD
2b83 Laptop Integrated Webcam FHD
+ 2b91 Dell E5570 integrated webcam
+ 2b97 Laptop Integrated Webcam FHD
+ 2c6e Laptop Integrated WebCam HD
1bd0 Hangzhou Riyue Electronic Co., Ltd.
1bd5 BG Systems, Inc.
+1bda University Of Southampton
+ 0010 Power Board v4 Rev B
+ 0011 Student Robotics SBv4B
1bde P-TWO INDUSTRIES, INC.
1bef Shenzhen Tongyuan Network-Communication Cables Co., Ltd
1bf0 RealVision Inc.
6968 Touch Screen
1c02 Kreton Corporation
1c04 QNAP System Inc.
+ 2074 ASM1074 High-Speed hub
+ 3074 ASM1074 SuperSpeed hub
+1c05 Shenxhen Stager Electric
+ ea75 G540 Programmer
1c0c Ionics EMS, Inc.
0102 Plug Computer
1c0d Relm Wireless
1c10 Lanterra Industrial Co., Ltd.
+1c11 Input Club Inc.
+ b04d ErgoDox Infinity
1c13 ALECTRONIC LIMITED
1c1a Datel Electronics Ltd.
+ 0100 Action Replay DS "3DS/DSi/DS/Lite Compatible"
1c1b Volkswagen of America, Inc.
1c1f Goldvish S.A.
1c20 Fuji Electric Device Technology Co., Ltd.
1c22 ZHONGSHAN CHIANG YU ELECTRIC CO., LTD.
1c26 Shanghai Haiying Electronics Co., Ltd.
1c27 HuiYang D & S Cable Co., Ltd.
+1c28 PMD Technologies
+ c003 CamCube
+ c004 CamBoard
+ c005 ConceptCam
+ c006 CamBoard 22
+ c007 CamBoard nano
+ c008 CamBoard mod
+ c009 CamBoard plus
+ c00a DigiCam
+ c00d CamBoard pico LDD
+ c00f CamBoard pico
1c29 Elster GmbH
0001 ExMFE5 Simulator
10fc enCore device
1c34 SpringCard
7241 Prox'N'Roll RFID Scanner
1c37 Authorizer Technologies, Inc.
+ 6190 U2F Fido-compliant cryptotoken
1c3d NONIN MEDICAL INC.
1c3e Wep Peripherals
1c40 EZPrototypes
0534 i2c-tiny-usb interface
0535 glcd2usb interface
0536 Swiss ColorPAL
+ 0537 MIST Board
1c49 Cherng Weei Technology Corp.
+1c4b Geratherm Medical AG
+ 026f Spirostik
1c4f SiGma Micro
0002 Keyboard TRACER Gamma Ivory
0003 HID controller
000e Genius KB-120 Keyboard
0026 Keyboard
+ 0032 Optical Mouse with Scroll Wheel
+ 0034 XM102K Optical Wheel Mouse
+ 0063 Touchpad (integrated in detachable keyboard of Chuwi SurBook)
+ 0065 Optical Wheel Mouse [Rapoo N1130]
3000 Micro USB Web Camera
3002 WebCam SiGma Micro
+1c57 Zalman Tech Co., Ltd.
+ 1e45 FPSGUN FG1000 Mouse
1c6b Philips & Lite-ON Digital Solutions Corporation
+ a220 DVD Writer Slimtype eSAU108
a222 DVD Writer Slimtype eTAU108
+ a223 DVD Writer Slimtype eUAU108
1c6c Skydigital Inc.
+1c71 Humanware Inc
+ c004 Braille Note Apex (braille terminal mode)
1c73 AMT
861f Anysee E30 USB 2.0 DVB-T Receiver
+1c75 Arturia
+ 0288 KeyStep
1c77 Kaetat Industrial Co., Ltd.
1c78 Datascope Corp.
1c79 Unigen Corporation
1c7a LighTuning Technology Inc.
+ 0577 Fingerprint Sensor
+ 0603 ES603 Swipe Fingerprint Sensor
0801 Fingerprint Reader
1c7b LUXSHARE PRECISION INDUSTRY (SHENZHEN) CO., LTD.
+1c82 Atracsys
+ 0200 spryTrac
1c83 Schomaecker GmbH
0001 RS150 V2
+ 0002 RFID card reader
+ 0003 Communicator
+ 0005 Mobile RFID Reader
1c87 2N TELEKOMUNIKACE a.s.
1c88 Somagic, Inc.
0007 SMI Grabber (EasyCAP DC60+ clone) (no firmware) [SMI-2021CBE]
1cb6 IdeaCom Technology Inc.
6681 IDC6681
1cbe Luminary Micro Inc.
+ 0002 CDC serial port [TivaWare]
00fd In-Circuit Debug Interface
00ff Stellaris ROM DFU Bootloader
0166 CANAL USB2CAN
+ 0240 McGill Robotics TM4C Microcontroller
1cbf FORTAT SKYMARK INDUSTRIAL COMPANY
1cc0 PlantSense
1cca NextWave Broadband Inc.
0023 deRFusbSniffer Sub-GHz
0025 deRFusb23E06
0027 deRFusb13E06
+ 0030 ZigBee gateway [ConBee II]
1cfc ANDES TECHNOLOGY CORPORATION
1cfd Flextronics Digital Design Japan, LTD.
1d03 iCON
1026 HSUPA Modem FLYING-LARK46-VER0.07 [Flying Angel]
1d0a Johnson Controls, Inc. The Automotive Business Unit
1d0b HAN HUA CABLE & WIRE TECHNOLOGY (J.X.) CO., LTD.
+1d0d TDKMedia
+ 0214 Trans-It Drive
1d0f Sonix Technology Co., Ltd.
1d14 ALPHA-SAT TECHNOLOGY LIMITED
1d17 C-Thru Music Ltd.
1101 DK DVB-T Dongle
1102 DK mini DVB-T Dongle
1103 DK 5217 DVB-T Dongle
+ 1104 MSI DigiVox Micro HD
6105 Video grabber
+ 610a Video grabber
8202 DK DVBC/T DONGLE
1d1f Diostech Co., Ltd.
1d20 SAMTACK INC.
1d27 ASUS
+ 0601 Xtion
1d34 Dream Cheeky
- 0001 Dream Cheeky Fidget
- 0004 Dream Cheeky Webmail Notifier
- 0008 Dream Cheeky button
- 000a Dream Cheeky Mailbox Friends Alert
- 000d Dream Cheeky Big Red Button
- 0013 Dream Cheeky LED Message Board
+ 0001 Fidget
+ 0002 Fidget (Basketball)
+ 0003 Fidget (Golf Ball)
+ 0004 Webmail Notifier
+ 0008 button
+ 000a Mailbox Friends Alert
+ 000d Big Red Button
+ 0013 LED Message Board
+ 0020 Stress Ball
1d45 Touch
1d45 Foxlink Optical touch sensor
+ 459d BenQ F5
+ 465c Harrier Mini by EE
1d4d PEGATRON CORPORATION
0002 Ralink RT2770/2720 802.11b/g/n Wireless LAN Mini-USB Device
000c Ralink RT3070 802.11b/g/n Wireless Lan USB Device
5123 Neo1973/FreeRunner internal USB CSR4 module
5124 Neo1973/FreeRunner Bluetooth Device ID service
5300 Rockbox
+ 530e iriver H10 20GB (Rockbox)
+ 530f iriver H10 5/6GB (Rockbox)
+ 5314 Apple iPod Color/Photo (Rockbox)
+ 5315 Apple iPod Nano 1g (Rockbox)
+ 5316 Apple iPod Video (Rockbox)
+ 5318 Apple iPod 4g Grayscale (Rockbox)
+ 5319 Apple iPod Mini 1g (Rockbox)
+ 531a Apple iPod Mini 2g (Rockbox)
+ 531c Apple iPod Nano 2g (Rockbox)
+ 531d Apple iPod Classic/6G (Rockbox)
+ 5321 Cowon D2 (Rockbox)
+ 5329 Toshiba Gigabeat S (Rockbox)
+ 5332 Sandisk Sansa e200 series (Rockbox)
+ 5334 Sandisk Sansa c200 series (Rockbox)
+ 5337 Sandisk Sansa Clip (Rockbox)
+ 5338 Sandisk Sansa e200v2 series (Rockbox)
+ 5339 Sandisk Sansa m200 v4 series (Rockbox)
+ 533a Sandisk Sansa Fuze (Rockbox)
+ 533b Sandisk Sansa c200v2 series (Rockbox)
+ 533c Sandisk Sansa Clipv2 (Rockbox)
+ 533e Sandisk Sansa Clip+ (Rockbox)
+ 533f Sandisk Sansa Fuze v2 (Rockbox)
+ 5340 Sandisk Sansa Fuze+ (Rockbox)
+ 5341 Sandisk Sansa Zip (Rockbox)
+ 5342 Sandisk Sansa Connect (Rockbox)
+ 5346 Olympus M:Robe 500i (Rockbox)
+ 5347 Olympus m:robe MR-100 (Rockbox)
+ 5359 Creative Zen X-Fi Style (Rockbox)
+ 535d Creative Zen X-Fi2 (Rockbox)
+ 535e Creative Zen X-Fi3 (Rockbox)
+ 5360 Creative Zen X-Fi (Rockbox)
+ 5361 Creative ZEN Mozaic (Rockbox)
+ 5362 Creative Zen (Rockbox)
+ 5364 Philips GoGear SA9200 (Rockbox)
+ 5365 Philips GoGear HDD16x0 (Rockbox)
+ 5366 Philips GoGear HDD63x0 (Rockbox)
+ 5378 Onda VX747 (Rockbox)
+ 5379 Onda VX767 (Rockbox)
+ 537b Onda VX777 (Rockbox)
+ 538c Samsung YH-820 (Rockbox)
+ 538d Samsung YH-920 (Rockbox)
+ 538e Samsung YH-925 (Rockbox)
+ 53a0 Packard Bell Vibe 500 (Rockbox)
+ 53b4 Rockchip 27xx generic (Rockbox)
+ 53be HiFiMAN HM-60x (Rockbox)
+ 53bf HiFiMAN HM-801 (Rockbox)
+ 53d2 HiFi E.T. MA9 (Rockbox)
+ 53d3 HiFi E.T. MA9C (Rockbox)
+ 53d4 HiFi E.T. MA8 (Rockbox)
+ 53d5 HiFi E.T. MA8C (Rockbox)
+ 53dc Sony NWZ-E370/E380 series (Rockbox)
+ 53dd Sony NWZ-E360 series (Rockbox)
+ 53e6 IHIFI 760 (Rockbox)
+ 53e7 IHIFI 960 (Rockbox)
+ 53ff Generic Rockbox device
6000 Ubertooth Zero
6001 Ubertooth Zero (DFU)
6002 Ubertooth One
601a Paparazzi Lisa/M
601b IST-2 chronograph for bullet speeds
601c EPOSMote II
+ 601d UDS18B20 temperature sensor
601e 5x5 STM32 prototyping board
601f uNSF
6020 Toad3
6023 Pixelkit
6024 Illucia
6025 Keyglove (HID)
+ 6026 Keyglove (Serial)
6027 Key64 Keyboard
6028 Teensy 2.0 Development Board [ErgoDox Keyboard]
+ 6029 Marlin 2.0 (Serial)
602a Marlin 2.0 (Mass Storage)
602b FPGALink
602c 5nes5snes (5x8)
602f K-copter
6030 USB-oscope
6031 Handmade GSM GPS tracker
+ 6032 ncrmnt.org uISP
6033 frobiac / adnw keyboard
6034 Tiflomag Ergo 2
6035 FreeLaserTag Gun
6052 APB Team Robotic Development Board
6053 Darkgame Controller
6054 Satlab/AAUSAT3 BlueBox
+ 6055 RADiuS ER900TRS-02 transciever with SMA Connector
6056 The Glitch
+ 6057 OpenPipe MIDI Shield
+ 6058 Novena OTG port
+ 6059 xser serial
+ 605a Daisho test
605b RfCat YARD Stick One
605c YARD Stick One bootloader
605d Funky Sensor v2
605f Small DIP package Cypress FX2
6060 Data logger using the Cypress FX2
6061 Power Manager
+ 6062 WhiteRabbit console and Wishbone bridge
6063 CPC FPGA
6064 CPC FPGA (DFU)
6065 CPC FPGA (Serial)
606c Blinkytape full-color light tape
606d TinyG open source motion controller
606e Reefangel Evolution 1.0
+ 606f Geschwister Schneider CAN adapter
6070 Open Pinball Project
6071 The Glitch HID
6072 The Glitch Disk
6076 Vultureprog BIOS chip programmer
6077 PaintDuino
6078 DTplug
+ 6079 Mood Light
607a Fadecandy
607b RCDongle for IR remote control
607c OpenVizsla USB sniffer/analyzer
607d Spark Core Arduino-compatible board with WiFi
+ 607e OSHUG Wuthering multi-tool
607f Spark Core Arduino-compatible board with WiFi (bootloader)
6080 arcin arcade controller
6081 BladeRF (bootloader)
6084 arcin arcade controller (DFU)
6085 IRKit for controlloing home electronics from iOS devices
6086 OneRNG entropy device
+ 6087 Blinkytape (alternate endpoint config)
6088 picp PIC16F145x based PIC16F145x programmer
6089 Great Scott Gadgets HackRF One SDR
608a BLEduino
60aa Blinky Light Controller
60ab AllPixel
60ac OpenBLT generic microcontroller (bootloader)
+ 60ad Clasic Gamepad Adapter (NES)
+ 60ae Clasic Gamepad Adapter (N64)
+ 60af Clasic Gamepad Adapter (DB9)
60b0 Waterott Arduino based Clock (caterina bootloader)
60b1 Drinkbot (processing)
60b2 Drinkbot (OTG-tablet support)
60bd Open Source control interface for multimedia applications
60be Pixelmatix Aurora (bootloader)
60bf Pixelmatix Aurora
+ 60c0 Nucular Keyboard adapter
60c1 BrewBit Model-T pOSHW temperature controller for homebrewers (bootloader)
60c2 BrewBit Model-T pOSHW temperature controller for homebrewers
60c3 X Antenna Tracker arduino board
+ 60c4 CAN bus communication device
+ 60c5 PIC16F1 bootloader
60c6 USBtrng hardware random number generator
60c7 Zubax GNSS positioning module for light UAV systems
60c8 Xlink data transfer and control system for Commodore C64
60ca FinalKey password manager
60cb PteroDAQ Data Acquisition on FRDM-KL25Z and future boards
60cc LamDiNao
+ 60cd Open Lighting DMX512 / RDM widget
60de Cryptech.is random number generator
60df Numato Opsis HDMI2USB board (unconfigured)
60e0 Numato Opsis HDMI2USB board (JTAG Programming Mode)
60e8 Alpen Clack keyboard
60e9 keyman64 keyboard itercepter
60ea Wiggleport FPGA-based I/O board
- 60ec Duet 3D Printer Controller
+ 60eb candleLight CAN adapter
+ 60ec Duet 2 WiFi or Duet 2 Ethernet 3D printer control electronics
+ 60ed Duet 2 Maestro 3D printer control electronics
+ 60ee Duet 3 motion control electronics
60f0 UDAD-T1 data aquisition device (boot)
60f1 UDAD-T1 data aquisition device
60f2 UDAD-T2 data aquisition device (boot)
6108 Myriad-RF LimeSDR
610c Magic Keys (boot)
610d Magic Keys
+ 6114 MIDI key
+ 6118 Thomson MO5 keyboard
+ 6122 Ultimate Hacking Keyboard
+ 614c dwtk In-Circuit Emulator
8085 Box0 (box0-v5)
- cc15 rad1o badge for CCC congress 2015
+ cc15 rad1o badge for CCC summer camp 2015
1d57 Xenta
0005 Wireless Receiver (Keyboard and Mouse)
0006 Wireless Receiver (RC Laser Pointer)
000c Optical Mouse
+ 130f 2.4Ghz wireless optical mouse receiver
2400 Wireless Mouse Receiver
32da 2.4GHz Receiver (Keyboard and Mouse)
83d0 Click-mouse!
ac01 Wireless Receiver (Keyboard and Mouse)
+ ac02 ViFit Activity Tracker
+ ac08 RFID Receiver (Keyboard)
ad02 SE340D PC Remote Control
+ ad03 [T3] 2.4GHz and IR Air Mouse Remote Control
af01 AUVIO Universal Remote Receiver for PlayStation 3
+ af03 Wireless Receiver
+ fa20 2.4GHz Wireless Reciever (Mini Keyboard & Mouse)
1d5b Smartronix, Inc.
1d5c Fresco Logic
2000 FL2000/FL2000DX VGA/DVI/HDMI Adapter
0104 Multifunction Composite Gadget
0105 FunctionFS Gadget
0200 Qemu Audio Device
+1d88 Mahr GmbH
+ 0001 Measurement Device [MarECon]
+ 0002 Probe
+ 0003 Surface Measurement [PS10]
1d90 Citizen
201e PPU-700
+ 2037 CL-S631 Barcode Printer
+ 20f0 Thermal Receipt Printer [CT-E351]
1d9d Sigma Sport
1010 Docking Station Topline 2009
1011 Docking Station Topline 2012
+ 1012 Docking Station Topline 2016
+1dd2 Leo Bodnar Electronics Ltd
+1dd3 Dajc Inc.
+ 0001 Expert I/O 1000
1de1 Actions Microelectronics Co.
1101 Generic Display Device (Mass storage mode)
c101 Generic Display Device
+1de6 MICRORISC s.r.o.
1e0e Qualcomm / Option
f000 iCON 210 UMTS Surfstick
1e10 Point Grey Research, Inc.
040c LPC2378 [Robotino XT Bootloader]
040d LPC2378 [Robotino 3]
040e LPC2378 [Robotino 3 Bootloader]
+ 040f LPC2148 [Robotino gripper]
+ 0410 LPC2148 [Robotino IR panel]
0501 CP2102 [CMSP]
0601 CMMP-AS
+ 0602 FTDI232 [CMMS]
+1e2d Gemalto M2M GmbH
+ 004f EGS3 GSM/GPRS modem
+ 0054 PH8 wireless module
+ 0058 Wireless Module [Cinterion EHS6]
+ 0059 Wireless Module [Cinterion BGx]
+ 005b Zoom 4625 Modem
+ 0061 ALSx PLSx LTE modem
+ 00a0 Cinterion ELS31-V
1e3d Chipsbank Microelectronics Co., Ltd
+ 198a Flash Disk
2093 CBM209x Flash Drive (OEM)
4082 CBM4082 SD Card Reader
1e41 Cleverscope
0001 CS328A PC Oscilloscope
+ 0004 CS448
+1e44 SHIMANO INC.
+ 7220 SM-BCR2
1e4e Cubeternet
0100 WebCam
0102 GL-UPC822 UVC WebCam
+ 0109 EtronTech CMOS based eSP570 WebCam [Onyx Titanium TC101]
1e54 TypeMatrix
2030 2030 USB Keyboard
1e68 TrekStor GmbH & Co. KG
001b DataStation maxi g.u
+ 004c DataStation Pocket Click
0050 DataStation maxi light
+ 1045 ST70408-3 [SurfTab breeze 7.0 quad 3G] (MTP Mode)
+ 1046 ST70408-3 [SurfTab breeze 7.0 quad 3G] (PTP Mode)
1e71 NZXT
0001 Avatar Optical Mouse
+ 170e Kraken X
+ 1711 Grid+ V3
+ 1714 Smart Device
+ 1715 Kraken M22
+ 2006 Smart Device V2
1e74 Coby Electronics Corporation
2211 MP300
2647 2 GB 2 Go Video MP3 Player [MP601-2G]
6511 MP705-8G MP3 player
6512 MP705-4G
7111 MP957 Music and Video Player
+1e7b Zurich Instruments
+ 0002 HF2
+ 0003 UHF
+ 0004 MFLI
1e7d ROCCAT
2c24 Pyra Mouse (wired)
+ 2c2e Lua Mouse
+ 2c38 Kiro Mouse
2ced Kone Mouse
+ 2cee Kova 2016 Gray Mouse
+ 2cef Kova 2016 White Mouse
+ 2cf0 Kova 2016 Black Mouse
2cf6 Pyra Mouse (wireless)
- 2d50 Kova+ Mouse
- 2d51 Kone+ Mouse
+ 2d50 Kova[+] Mouse
+ 2d51 Kone[+] Mouse
+ 2d5a Savu Mouse
+ 2db4 Kone Pure Optical Mouse
+ 2dbe Kone Pure Mouse
+ 2dbf Kone Pure Military Mouse
+ 2dc2 Kone Pure Optical Black Mouse
+ 2dcb Kone Pure SE(L) Mouse
2e22 Kone XTD Mouse
+ 2e23 Kone XTD Optical Mouse
+ 2e27 Kone AIMO Mouse
+ 2e4a Tyon Black Mouse
+ 2e4b Tyon White Mouse
+ 2e7c Nyth Black Mouse
+ 2e7d Nyth White Mouse
+ 2f76 Sova Keyboard
+ 2f94 Sova MK Keyboard
+ 2fa8 Suora Keyboard
+ 2fc6 Skeltr Keyboard
+ 2fda Ryos MK FX Keyboard
30d4 Arvo Keyboard
+ 3138 Ryos MK Keyboard
+ 316a Ryos TKL Keyboard
+ 319c Isku Keyboard
+ 31ce Ryos MK Glow Keyboard
+ 3232 Ryos MK Pro Keyboard
+ 3246 Suora FX Keyboard
+ 3264 Isku FX Keyboard
+1e8e Airbus Defence and Space
+ 6001 P8GR
+1e91 Other World Computing
+ b0b1 miniStack
1ea7 SHARKOON Technologies GmbH
+ 0030 Trust GXT 158 Orna Laser Gaming Mouse
+ 0064 2.4GHz Wireless rechargeable vertical mouse [More&Better]
0066 [Mediatrack Edge Mini Keyboard]
+ 0907 Keyboard
+ 1002 Vintorez Gaming Mouse
2007 SHARK ZONE K30 Illuminated Gaming Keyboard
+1eab Fujian Newland Computer Co., Ltd
+ 0103 HR200 Barcode scanner engine (HID keyboard)
+ 0106 HR200 Barcode scanner engine (Serial CDC)
+ 0110 HR200 Barcode scanner engine (HID Pos)
+ 0c03 HR100/HR3260 cordless/HR3290 cordless/BS80 Barcode scanner engine (HID keyboard)
+ 0c06 HR100/HR3260 cordless/HR3290 cordless/BS80 Barcode scanner engine (USB Serial CDC)
+ 0c10 HR100/HR3260 cordless/HR3290 cordless/BS80 Barcode scanner engine (HID Pos)
+ 0d03 EM2028 Barcode scanner engine (HID keyboard)
+ 0d06 EM2028 Barcode scanner engine (Serial CDC)
+ 0d10 EM2028 Barcode scanner engine (HID Pos)
+ 1303 EM30xx/EM20xx/HR3260 corded/HR200C Barcode scanner engine (HID keyboard)
+ 1306 EM30xx/EM20xx/HR3260 corded/HR200C Barcode scanner engine (USB serial CDC)
+ 1310 EM30xx/EM20xx/HR3260 corded/HR200C Barcode scanner engine (HID Pos)
+ 1403 HR15-xx Barcode scanner engine (HID keyboard)
+ 1406 HR15-xx Barcode scanner engine (Serial CDC)
+ 1410 HR15-xx Barcode scanner engine (HID Pos)
+ 1603 FM100-M/3250 Barcode scanner engine (HID keyboard)
+ 1606 FM100-M/3250 Barcode scanner engine (Serial CDC)
+ 1610 FM100-M/3250 Barcode scanner engine (HID Pos)
+ 1903 EM1300 Barcode scanner engine (HID keyboard)
+ 1906 EM1300 Barcode scanner engine (Serial CDC)
+ 1910 EM1300 Barcode scanner engine (HID Pos)
+ 1a03 HR3290 corded/HR22 Barcode scanner engine (HID keyboard)
+ 1a06 HR3290 corded/HR22 Barcode scanner engine (Serial CDC)
+ 1a10 HR3290 corded/HR22 Barcode scanner engine (HID Pos)
+ 1c03 HR2150 Barcode scanner engine (HID keyboard)
+ 1c06 HR2150 Barcode scanner engine (Serial CDC)
+ 1c10 HR2150 Barcode scanner engine (HID Pos)
+ 1d03 FM430 Barcode scanner engine (HID keyboard)
+ 1d06 FM430 Barcode scanner engine (Serial CDC)
+ 1d10 FM430 Barcode scanner engine (HID Pos)
+ 1e03 HR42 Barcode scanner engine (HID keyboard)
+ 1e06 HR42 Barcode scanner engine (Serial CDC)
+ 1e10 HR42 Barcode scanner engine (HID Pos)
+ 1f03 HR11+ Barcode scanner engine (HID keyboard)
+ 1f06 HR11+ Barcode scanner engine (Serial CDC)
+ 1f10 HR11+ Barcode scanner engine (HID Pos)
+ 2003 EM2037v2 Barcode scanner engine (HID keyboard)
+ 2006 EM2037v2 Barcode scanner engine (Serial CDC)
+ 2010 EM2037v2 Barcode scanner engine (HID Pos)
+ 8003 EM13x5-LD/HR15-70/HR100-70/HR12/HR1150-70 Barcode scanner engine (HID keyboard)
+ 8006 EM13x5-LD/HR15-70/HR100-70/HR12/HR1150-70 Barcode scanner engine (USB Serial CDC)
+ 8010 EM13x5-LD/HR15-70/HR100-70/HR12/HR1150-70 Barcode scanner engine (HID Pos)
+ 8203 EM3080-01/EM3095/FR20/FM30 Barcode scanner engine (HID keyboard)
+ 8206 EM3080-01/EM3095/FR20/FM30 Barcode scanner engine (USB Serial CDC)
+ 8210 EM3080-01/EM3095/FR20/FM30 Barcode scanner engine (HID Pos)
+ 8303 HR2160 Barcode scanner engine (HID keyboard)
+ 8306 HR2160 Barcode scanner engine (Serial CDC)
+ 8310 HR2160 Barcode scanner engine (HID Pos)
+1eaf Leaflabs
+ 0003 Maple DFU interface
+ 0004 Maple serial interface
+1eb8 Modacom Co., Ltd.
+ 7f00 MW-U3500 WiMAX adapter
1ebb NuCORE Technology, Inc.
+1ecb AMTelecom
+ 02e2 JMR1140 [Jiofi]
+1ed8 FENDER MUSICAL INSTRUMENTS CORPORATION
+ 0004 Mustang I/II
+ 0005 Mustang III/IV/V
+ 0006 Mustang I/II [Firmware Update]
+ 0007 Mustang III/IV/V [Firmware Update]
+ 0010 Mustang Mini
+ 0011 Mustang Mini [Firmware Update]
+ 0014 Mustang I (V.2)
+ 0016 Mustang IV v.2
1eda AirTies Wireless Networks
2012 Air2210 54 Mbps Wireless Adapter
2210 Air2210 54 Mbps Wireless Adapter
2410 Air2410 300 Mbps Wireless Adapter
1edb Blackmagic design
bd3b Intensity Shuttle
+ bd46 Mini Converter Analog to SDI
+ bd75 2.5K Cinema Camera (BMCC)
1ee8 ONDA COMMUNICATION S.p.a.
0014 MT833UP
1ef6 EADS Deutschland GmbH
5545 Cassidian SSDC Adapter III
5648 RIU CSMU/BSD
564a Cassidian RIU CSMU/BSD Simulator
+1f0c CMX Systems
+ 2000 HP StreamSmart 410 [NW278AA]
1f28 Cal-Comp
0020 CDMA USB Modem A600
0021 CD INSTALLER USB Device
-1f3a Onda (unverified)
- efe8 V972 tablet in flashing mode
+1f3a Allwinner Technology
+ 1000 Prestigio PER3464B ebook reader (Mass storage mode)
+ 1002 mediacom XPRO 415
+ 1010 Android device in fastboot mode
+ efe8 sunxi SoC OTG connector in FEL/flashing mode
1f44 The Neat Company
0001 NM-1000 scanner
1f48 H-TRONIC GmbH
0627 Data capturing system
0628 Data capturing and control module
1f4d G-Tek Electronics Group
+ a115 EVOLVEO XtraTV stick [DVB-T]
b803 Lifeview LV5TDLX DVB-T [RTL2832U]
+ c803 NotOnlyTV (Lifeview) LV5TDLX DVB-T [RTL2832U]
d220 Geniatech T220 DVB-T2 TV Stick
+1f52 Systems & Electronic Development FZCO (SEDCO)
+ 0001 Ultima 49 Printer
+ 0002 Ultima 90 Printer
+ 0003 FormsPro 50 Printer
+ 0004 Ultima 90+ Printer
1f6f Aliph
0023 Jawbone Jambox
8000 Jawbone Jambox - Updating
1f75 Innostor Technology Corporation
+ 0611 IS611 SATA/PATA Bridge Controller
+ 0621 IS621 SATA Storage Controller
0888 IS888 SATA Storage Controller
0902 IS902 UFD controller
+ 0916 IS916 Flash Drive
+ 0917 IS917 Mass storage
+ 0918 IS918 Flash Drive
1f82 TANDBERG
0001 PrecisionHD Camera
1f84 Alere, Inc.
+ 1f7e Lateral Flow Engine
1f87 Stantum
0002 Multi-touch HID Controller
1f9b Ubiquiti Networks, Inc.
0241 AirView2-EXT
+ b0b1 UniFi VoIP Phone
1fab Samsung Opto-Electroncs Co., Ltd.
104d ES65
+1fac Franklin Wireless
+ 0232 U770 3G/4G Wimax/4G LTE Modem
+1fae Lumidigm
+ 0040 M311 Fingerprint Scanner
+ 212c M30x (Mercury) fingerprint sensor
+1fb2 Withings
+ 0001 Wi-Fi Body Scale (WBS01)
+1fba DERMALOG Identification Systems GmbH
1fbd Delphin Technology AG
0001 Expert Key - Data aquisition system
1fc9 NXP Semiconductors
0003 LPC1343
+ 000c LPC4330FET180 [ARM Cortex M4 + M0] (device firmware upgrade mode)
+ 0082 LPC4330FET180 [ARM Cortex M4 + M0] (mass storage controller mode)
010b PR533
+ 0126 i.MX 7ULP SystemOnChip in RecoveryMode
012b i.MX 8M Dual/8M QuadLite/8M Quad Serial Downloader
+ 5002 PTN5002 [Startech VGA/DVI-D adapter]
+ 8124 SharkRF Bootloader
+ 824c LumiNode1
1fde ILX Lightwave Corporation
0001 UART Bridge
1fe7 Vertex Wireless Co., Ltd.
1ff7 CVT Electronics.Co.,Ltd
0013 CVTouch Screen (HID)
001a Human Interface Device
+1ffb Pololu Corporation
+ 0081 AVR Programmer
+ 0083 Jrk 21v3 Motor Controller
+ 0089 Micro Maestro 6-Servo Controller
+ 008a Mini Maestro 12-Channel Servo Controller
+ 008b Mini Maestro 18-Channel Servo Controller
+ 008c Mini Maestro 24-Channel Servo Controller
+ 00b0 AVR Programmer v2
1fff Ideofy Inc.
+2000 CMX Systems
+ 1f0c HP StreamSmart 410 [NW278AA]
2001 D-Link Corp.
0001 DWL-120 WIRELESS ADAPTER
0201 DHN-120 10Mb Home Phoneline Adapter
1a00 DUB-E100 Fast Ethernet Adapter(rev.A) [ASIX AX88172]
1a02 DUB-E100 Fast Ethernet Adapter(rev.C1) [ASIX AX88772]
200c 10/100 Ethernet
+ 3101 DWA-182 AC1200 DB Wireless Adapter(rev.A1) [Broadcom BCM43526]
3200 DWL-120 802.11b Wireless Adapter(rev.E1) [Atmel at76c503a]
3301 DWA-130 802.11n Wireless N Adapter(rev.C1) [Realtek RTL8192U]
3306 DWL-G122 Wireless Adapter(rev.F1) [Realtek RTL8188SU]
3308 DWA-121 802.11n Wireless N 150 Pico Adapter [Realtek RTL8188CUS]
3309 DWA-135 802.11n Wireless N Adapter(rev.A1) [Realtek RTL8192CU]
330a DWA-133 802.11n Wireless N Adapter [Realtek RTL8192CU]
+ 330d DWA-131 802.11n Wireless N Nano Adapter (rev.B1) [Realtek RTL8192CU]
+ 330f DWA-125 Wireless N 150 Adapter(rev.D1) [Realtek RTL8188ETV]
+ 3310 DWA-123 Wireless N 150 Adapter (rev.D1)
+ 3314 DWA-171 AC600 DB Wireless Adapter(rev.A1) [Realtek RTL8811AU]
+ 3315 DWA-182 Wireless AC Dualband Adapter(rev.C) [Realtek RTL8812AU]
+ 3317 DWA-137 Wireless N High-Gain Adapter [Ralink RT5372]
+ 3319 DWA-131 Wireless N Nano Adapter (Rev. E1) [Realtek RTL8192EU]
3500 Elitegroup Computer Systems WLAN card WL-162
3700 DWL-122 802.11b [Intersil Prism 3]
3701 DWL-G120 Spinnaker 802.11g [Intersil ISL3886]
3c19 DWA-125 Wireless N 150 Adapter(rev.A3) [Ralink RT5370]
3c1a DWA-160 802.11abgn Xtreme N Dual Band Adapter(rev.B2) [Ralink RT5572]
3c1b DWA-127 Wireless N 150 High-Gain Adapter(rev.A1) [Ralink RT3070]
+ 3c1e DWA-125 Wireless N 150 Adapter(rev.B1) [Ralink RT5370]
4000 DSB-650C Ethernet [klsi]
4001 DSB-650TX Ethernet [pegasus]
4002 DSB-650TX Ethernet [pegasus]
4003 DSB-650TX-PNA Ethernet [pegasus]
400b 10/100 Ethernet
4102 10/100 Ethernet
+ 4a00 DUB-1312 Gigabit Ethernet Adapter
5100 DSL-200 ADSL ATM Modem
5102 DSL-200 ADSL Loader
5b00 Remote NDIS Network Device
2002 DAP Technologies
2003 detectomat
ea61 dc3500
+2006 LenovoMobile
+2009 iStorage
+ 5004 datAshur 4GB
+ 5016 datAshur 16GB
+ 5032 datAshur 32GB
200c Reloop
100b Play audio soundcard
2013 PCTV Systems
+ 0242 QuatroStick 510e
0245 PCTV 73ESE
0246 PCTV 74E
0248 PCTV 282E
+ 024c DVB-S2 Stick 460e
024f nanoStick T2 290e
+ 0251 QuatroStick nano 520e
+ 0258 DVB-S2 Stick 461e
+ 025a AndroiDTV 78e
+ 025f tripleStick 292e
+ 0262 microStick 79e
+2018 Deutsche Telekom AG
+ 0406 Eumex 800
+ 0408 Eumex 800
2019 PLANEX
3220 GW-US11S WLAN [Atmel AT76C503A]
4901 GW-USSuper300 802.11bgn Wireless Adapter [Realtek RTL8191SU]
ed16 GW-USMicroN2W 802.11bgn Wireless Adapter [Realtek RTL8188SU]
ed17 GW-USValue-EZ 802.11n Wireless Adapter [Realtek RTL8188CUS]
ed18 GW-USHyper300 / GW-USH300N 802.11bgn Wireless Adapter [Realtek RTL8191SU]
+201e Haier
+ 2009 CE100 CDMA EVDO
+203a PARALLELS
203d Encore Electronics Inc.
1480 ENUWI-N3 [802.11n Wireless N150 Adapter]
2040 Hauppauge
+ 0265 WinTV-dualHD DVB
+ 026d WinTV-dualHD ATSC
0c80 Windham
0c90 Windham
+ 1605 WinTV-HVR 930C HD
1700 CataMount
1800 Okemo A
1801 Okemo B
2011 WinTV MiniCard [Dell Digital TV Receiver]
2019 Tiger Minicard
2400 WinTV PVR USB2 (Model 24019)
+ 4200 WinTV
4700 WinTV Nova-S-USB2
4902 HD PVR
4903 HS PVR
6500 WinTV HVR-900
6502 WinTV HVR-900
6503 WinTV HVR-930
- 6513 WinTV HVR-980
+ 6513 WinTV HVR-950/HVR-980
+ 6600 WinTV HVR-900H (Model 660xx)
7050 Nova-T Stick
7060 Nova-T Stick 2
7070 Nova-T Stick 3
9301 WinTV NOVA-T USB2 (warm)
9941 WinTV Nova-T-500
9950 WinTV Nova-T-500
+ b123 WinTV-HVR-955Q
+ b138 WinTV-HVR-900 model 00246 [WinTV-T Video]
b910 Windham
b980 Windham
b990 Windham
c000 Windham
c010 Windham
2047 Texas Instruments
- 0200 MSP430 USB HID Bootstrap Loader
+ 0013 MSP eZ-FET lite
+ 0014 MSP-FET
+ 0200 MSP430 Bootloader
+ 0203 eZ-FET Bootloader
+ 0204 MSP-FET Bootloader
+ 0300 MSP430 CDC Example
+ 0301 MSP430 HID Datapipe Example
+ 0302 MSP430 CDC+HID Example
+ 0309 MSP430 HID Mouse Example
+ 0313 MSP430 CDC+CDC Example
+ 0314 MSP430 HID+HID Example
+ 0315 MSP430 HID Keyboard Example
+ 0316 MSP430 MSC File System Emulation Example
+ 0317 MSP430 MSC SD Card Example
+ 0318 MSP430 MSC Multiple LUNs Example
+ 0319 MSP430 MSC+CDC+HID Example
+ 0320 MSP430 SYSBIOS Tasks MSC+CDC+HID Example
+ 0321 MSP430 SYSBIOS SWIs MSC+CDC+HID Example
+ 0322 MSP430 MSC Double-Buffering Example
+ 0323 MSP430 MSC CD-ROM Example
+ 03df MSP430 User Experiment
+ 03e0 MSP430 User Experiment
+ 03e1 MSP430 User Experiment
+ 03e2 MSP430 User Experiment
+ 03e3 MSP430 User Experiment
+ 03e4 MSP430 User Experiment
+ 03e5 MSP430 User Experiment
+ 03e6 MSP430 User Experiment
+ 03e7 MSP430 User Experiment
+ 03e8 MSP430 User Experiment
+ 03e9 MSP430 User Experiment
+ 03ea MSP430 User Experiment
+ 03eb MSP430 User Experiment
+ 03ec MSP430 User Experiment
+ 03ed MSP430 User Experiment
+ 03ee MSP430 User Experiment
+ 03ef MSP430 User Experiment
+ 03f0 MSP430 User Experiment
+ 03f1 MSP430 User Experiment
+ 03f2 MSP430 User Experiment
+ 03f3 MSP430 User Experiment
+ 03f4 MSP430 User Experiment
+ 03f5 MSP430 User Experiment
+ 03f6 MSP430 User Experiment
+ 03f7 MSP430 User Experiment
+ 03f8 MSP430 User Experiment
+ 03f9 MSP430 User Experiment
+ 03fa MSP430 User Experiment
+ 03fb MSP430 User Experiment
+ 03fc MSP430 User Experiment
+ 03fd MSP430 User Experiment
+ 0401 MSP430 Keyboard Example
0855 Invensense Embedded MotionApp HID Sensor
+ 08f8 FDC2x14/LDC13xx/LDC16xx EVM
0964 Inventio Software MSP430
+ 0a76 GEOKON S-3810A-5 USB-RS485 CONVERTER
+ ffe7 HID v1.00 Device [Improv Device]
2058 Nano River Technology
2058 ViperBoard I2C, SPI, GPIO interface
2077 Taicang T&W Electronics Co. Ltd
0002 NOOKcolor
0003 NOOK Simple Touch
0004 NOOK Tablet
+ 0005 BNTV600 [Nook HD+]
+ 0006 BNTV400 [Nook HD]
+ 0007 BNRV500 [Nook Glowlight]
+ 000a BNRV510 [Nook Glowlight Plus]
+ 000b BNRV520 [Nook Glowlight 3]
+ 000c BNRV700 [Nook Glowlight Plus]
2086 SIMPASS
2087 Cando
0a01 Multi Touch Panel
0a02 Multi Touch Panel
0b03 Multi Touch Panel
20a0 Clay Logic
+ 0006 flirc
+ 4107 GPF Crypto Stick V1.2
4123 IKALOGIC SCANALOGIC 2
414a MDE SPI Interface
415a OpenPilot
415b CopterControl
415c PipXtreme
+ 41e5 BlinkStick
+ 4211 Nitrokey Start
+ 4223 ATSAMD21 [castAR]
+ 428d Electrosense wideband converter
20b1 XMOS Ltd
10ad XUSB Loader
f7d1 XTAG2 - JTAG Adapter
1540 ben-wpan, AT86RF230-based
1db5 IDBG in DFU mode
1db6 IDBG in normal mode
+ 9db1 Glasgow Debug Tool
c25b C2 Dongle
cb72 ben-wpan, cntr
+20bc ShenZhen ShanWan Technology Co., Ltd.
+ 5500 Frostbite controller
20ce Minicircuits
0012 RF Sythesizer 250-4200MHz model SSG-4000LH
0021 RF Switch Matrix
0022 I/O Controller
20df Simtec Electronics
0001 Entropy Key [UDEKEY01]
+20f0 L3Harris Technologies
+ 2102 EWLA V2 Module
20f1 NET New Electronic Technology GmbH
0101 iCube3 Camera
20f4 TRENDnet
+ 646b TEW-646UBH High Power 150Mbps Wireless N Adapter [Realtek RTL8188SU]
648b TEW-648UBM 802.11n 150Mbps Micro Wireless N Adapter [Realtek RTL8188CUS]
+ 664b TEW-664UB H/W:V2.0R
+ 804b TEW-804UB 802.11a/b/g/n/ac (1x1) Wireless Adapter [Realtek RTL8811AU]
+ 805b TEW-805UB 300Mbps+867Mbps Wireless AC Adapter [Realtek RTL8812AU]
+ 806b TEW-806UBH 802.11a/b/g/n/ac (1x1) Wireless Adapter [MediaTek MT7610U]
20f7 XIMEA
3001 MQ or MD camera
3002 MU camera
30b3 MQ in U3V mode or MC camera
a003 MU camera
2100 RT Systems
+ 0e56 USB62C Radio Cable [Yaesu 857/D - 897/D]
+ 9e50 USB-59 Radio Cable [Yaesu VX-8/D/DR]
9e52 Yaesu VX-7
9e54 CT29B Radio Cable
9e57 RTS01 Radio Cable
+ 9e58 USB63C Radio Cable [Yaesu FTDX-1200]
9e5d K4Y Radio Cable
9e5f FT232RL [RTS05 Serial Cable]
2101 ActionStar
0201 SIIG 4-to-2 Printer Switch
+ 1402 Keyboard/Mouse Switch
+2104 Tobii Technology AB
+ 0050 Eye tracker [EYEX2]
+ 0124 Eyechip
+2107 RDING TECH CO.,LTD
2109 VIA Labs, Inc.
+ 0210 Hub
0700 VL700 SATA 3Gb/s bridge
0701 VL701 SATA 3Gb/s bridge
+ 0711 VL711 SATA 6Gb/s bridge
+ 0715 VL817 SATA Adaptor
0810 VL81x Hub
0811 Hub
0812 VL812 Hub
+ 0813 VL813 Hub
+ 0820 VL820 Hub
+ 2210 Hub
2811 Hub
2812 VL812 Hub
+ 2813 VL813 Hub
+ 2820 VL820 Hub
3431 Hub
+ 711f External
8110 Hub
2113 Softkinetic
0137 DepthSense 311 (3D)
0145 DepthSense 325
8000 DepthSense 311 (Color)
+2116 KT Tech
+ 000a IDE Hard Drive Enclosure
+211f CELOT Corporation
+ 6801 CDMA Products
+2123 Cheeky Dream
+ 1010 Rocket Launcher
+2125 Fiberpro Inc.
+ 0000 Bootloader
+ 0010 MCB-100 Series
+2133 signotec GmbH
+ 0001 LCD Signature Pad Sigma
+ 0018 Delta Pen
+ 0019 Delta Touch
+ 001c Kronos Pen
+ 0022 Epsilon Pen
2149 Advanced Silicon S.A.
211b Touchscreen Controller
+ 2306 TS58xxA/TC56xxA [CoolTouch]
2703 TS58xxA/TC56xxA [CoolTouch]
-2162 Creative (?)
+214b Huasheng Electronics
+ 7000 4-port hub [Maxxter ACT-HUB2-4P, HS8836, iSoul ultra-slim]
+214e Swiftpoint
+ 0005 Z - Gaming mouse [SM700]
+2162 Broadxent (Creative Labs)
2031 Network Blaster Wireless Adapter
500c DE5771 Modem Blaster
8001 Broadxent BritePort DSL Bridge 8010U
+2166 JVC Kenwood
+ 600b TH-D74
2184 GW Instek
0005 GDS-3000 Oscilloscope
0006 GDS-3000 Oscilloscope
0011 AFG Function Generator (CDC)
+ 0017 DSO
+ 0018 DSO
+ 0036 AFG-125 Function Generator (CDC)
+2188 No brand
+ 0610 Hub
+ 0611 Hub
+ 0620 Hub
+ 0625 Hub
+ 0754 Card Reader
+ 4042 CalDigit Pro Audio
+219c Seal One AG
+ 0010 USB 2200 K Secure Sign Token
21a1 Emotiv Systems Pty. Ltd.
0001 EPOC Consumer Headset Wireless Dongle
+21a4 Electronic Arts Inc.
+ ac27 SPORTS Active 2 Wireless Controller for PS3
+ ac40 SPORTS Active 2 Wireless Controller for Wii
+21a9 Saleae, Inc.
+ 1001 16-channel Logic Analyzer [Logic16]
+ 1003 Logic 4
+ 1004 Logic8
+ 1005 Logic Pro 8
+ 1006 Logic Pro 16
+21ab Planeta Informatica
+ 0010 RC700 NFC SmartCard Reader
+ 0011 DSR700 SmartCard Reader
+21b4 AudioQuest
+ 0081 DragonFly
+ 0082 DragonFly Red
21d6 Agecodagis SARL
0002 Seismic recorder [Tellus]
2207 Fuzhou Rockchip Electronics Company
320c RK3328 in Mask ROM mode
330a RK3368 in Mask ROM mode
330c RK3399 in Mask ROM mode
+221a ZTEX GmbH
+ 0100 FPGA Boards
2222 MacAlly
0004 iWebKey Keyboard
+ 0005 ICEKey Keyboard
+ 1001 Generic Hub
2520 Mini Tablet
4050 AirStick joystick
+2226 Copper Mountain technologies
2227 SAMWOO Enterprise
3105 SKYDATA SKD-U100
+222a ILI Technology Corp.
+ 0001 Multi-Touch Screen
+ 0037 Multi-Touch Screen
+2230 Plugable
+ 0001 UD-160-A / M Integrated Hub
+ 0003 DC-125 / M Integrated Hub
2232 Silicon Motion
1005 WebCam SCB-0385N
+ 1024 Webcam SC-13HDL11624N [Namuga Co., Ltd.]
1028 WebCam SC-03FFL11939N
1029 WebCam SC-13HDL11939N
1037 WebCam SC-03FFM12339N
+ 1045 WebCam SC-10HDP12631N
2233 RadioShack Corporation
6323 USB Electronic Scale
2237 Kobo Inc.
4161 eReader White
+ 4163 Touch
+ 4173 Glo
+2245 Aspeed Technology, Inc.
+ 1500 AST1500/1510 PC-over-LAN Virtual Hub
224f APDM
0001 Access Point
0002 Docking Station
0006 V2 Docking Station
0007 V2 Access Point ACM
0008 V2 Access Point
+2256 Faderfox
+ 1007 LV3 MIDI Controller
225d Morpho
0001 FINGER VP Multimodal Biometric Sensor
0008 CBM-E3 Fingerprint Sensor
- 0009 CBM Fingerprint Sensor [CBM-V3]
+ 0009 CBM-V3 Fingerprint Sensor
000a MSO1300-E3 Fingerprint Sensor
- 000b MSO1300 Fingerprint Sensor [MSO1300-V3]
+ 000b MSO1300-V3 Fingerprint Sensor
000c MSO1350-E3 Fingerprint Sensor & SmartCard Reader
- 000d MSO1350 Fingerprint Sensor & SmartCard Reader [MSO1350-V3]
+ 000d MSO1350-V3 Fingerprint Sensor & SmartCard Reader
000e MorphoAccess SIGMA Biometric Access Control Terminal
+ 9015 Tablet 2
+ 9024 Tablet 2
+ 9039 Tablet 2 secure multifunction biometric tablet
+ 904d Tablet 2 secure multifunction biometric tablet
+ 904e Tablet 2 secure multifunction biometric tablet
+ 9091 Tablet 2 secure multifunction biometric tablet
+ 9092 Tablet 2 secure multifunction biometric tablet
+ f000 Tablet 2 secure multifunction biometric tablet
+ f003 Tablet 2 secure multifunction biometric tablet
+ f006 Tablet 2 secure multifunction biometric tablet
+ f00e Tablet 2 secure multifunction biometric tablet
+226e DISPLAX
228d 8D Technologies inc.
0001 Terminal Bike Key Reader
+22a4 VERZO Technology
22a6 Pie Digital, Inc.
ffff PieKey "beta" 4GB model 4E4F41482E4F5247 (SM3251Q BB)
+22a7 Fortinet Technologies
+ 1001 FortiGate Device
+22b1 Secret Labs LLC
+ 1000 Netduino MCU pcb
22b8 Motorola PCS
0001 Wally 2.2 chipset
0002 Wally 2.4 chipset
0005 V.60c/V.60i GSM Phone
+ 002e XT1806
0830 2386C-HT820
0833 2386C-HT820 [Flash Mode]
0850 Bluetooth Device
2ac1 MSM6100 chipset
2ac3 MSM6100 chipset flash
2d78 XT300[SPICE]
+ 2e82 XT1541 [Moto G 3rd Gen]
+ 2e83 XT1033 [Moto G], PTP mode
3001 A835/E1000 GSM Phone (P2K)
3002 A835/E1000 GSM Phone (AT)
3801 C350L/C450 (P2K)
4234 MPc CDMA
4244 MPx100 Smartphone
4285 Droid X (Mass storage)
+ 42d9 XT910 [Droid RAZR]
4801 Neptune LTS chipset
4803 Neptune LTS chipset flash
4810 Triplet GSM Phone (storage)
6101 Talon integrated chipset
6401 Argon chipset
6403 Argon chipset flash
+ 6411 ROKR Z6 (print mode)
6415 ROKR Z6 (MTP mode)
+ 6422 ROKR Z6 (modem mode)
+ 6426 ROKR Z6 (storage mode)
6604 Washington CDMA Phone
6631 CDC Modem
7001 Q Smartphone
+ 7086 Atrix
+ 70a8 Xoom Tablet
fe01 StarTAC III MS900
22b9 eTurboTouch Technology, Inc.
0006 Touch Screen
22ba Technology Innovation Holdings, Ltd
+ 0108 Double Shock Steering Wheel HID
+ 0109 Double Shock Steering Wheel Hub
+22c9 StepOver GmbH
+ 0601 naturaSign Pad Colour
+ 0701 naturaSign Pad Mobile
+ 0801 naturaSign Pad Comfort
+ 0881 naturaSign Pad Flawless
+ 0901 naturaSign Pad Classic
+ 09e1 naturaSign Pad Biometric
+ 0ce1 duraSign Pad Brilliance
+ 0cf1 duraSign Pad Biometric 5.0
+ 0d01 duraSign 10.0
+ 0df1 duraSign Pad Biometric 10.0
+22cd Kinova Robotics Inc.
+22d4 Laview Technology
+ 1301 Mionix NAOS 8200 [STM32F103 MCU]
+ 1308 Mionix Avior 7000
+ 130c Mionix Naos 7000
+ 1316 Mionix Castor
+22d9 OPPO Electronics Corp.
+ 2765 Oppo N1
+ 2767 Oppo Find 5 (X909)
+22db Phase One
+ 0003 IQ3 100MP IG030372
+22dc Mellanox Technologies
+ 0004 BlueField SOC
+22de WeTelecom Incorporated
+22df Medicom MTD, Ltd
22e0 secunet Security Networks AG
0002 SINA Flash Drive
0003 SINA ID Token A
+22e8 Cambridge Audio
+ 6512 651N Audio
+ 6969 Audio Prototype
+ 7512 751R Audio
+ 770a X70A Audio
+ 850c 851C Audio [Azur 850C]
+ 851d 851D Audio [Azur 851D]
+ ca02 Audio
+ ca04 Audio
+ ca06 AmpMagic
+ dac2 DacMagic Plus
+ dac3 Azur DacMagic 100
+ dac4 Azur DacMagic 100
+ dac6 DacMagicXS 2.0
+ dac8 Audio
2304 Pinnacle Systems, Inc.
0109 Studio PCTV USB (SECAM)
0110 Studio PCTV USB (PAL)
0419 PCTV Bungee USB (PAL) with FM radio
061d PCTV Deluxe (NTSC) Device
061e PCTV Deluxe (PAL) Device
+ 2304 1689
+230d Teracom
+ 0103 Huwaii 3g wireless modem
+2314 INQ Mobile
2318 Shining Technologies, Inc. [hex]
0011 CitiDISK Jr. IDE Enclosure
+2319 Tronsmart
+ 0014 TSM01 Air Mouse + Keyboard
+232b Pantum Ltd.
+ 0810 P2000
+232e EA Elektro-Automatik GmbH & Co. KG
+ 0010 EA-PS-2000 B Series Power Supply
+2340 Teleepoch
2341 Arduino SA
0001 Uno (CDC ACM)
0010 Mega 2560 (CDC ACM)
+ 0036 Leonardo Bootloader
003b Serial Adapter (CDC ACM)
+ 003d Due Programming Port
+ 003e Due
003f Mega ADK (CDC ACM)
0042 Mega 2560 R3 (CDC ACM)
0043 Uno R3 (CDC ACM)
0044 Mega ADK R3 (CDC ACM)
0045 Serial R3 (CDC ACM)
+ 0049 ISP
8036 Leonardo (CDC ACM, HID)
+ 8038 Robot Control Board (CDC ACM, HID)
+ 8039 Robot Motor Board (CDC ACM, HID)
+2349 P2 Engineering Group, LLC
+234b Free Software Initiative of Japan
+ 0000 Gnuk Token
+ 0001 NeuG True RNG
2357 TP-Link
+ 0005 M7350 4G Mi-Fi Router
0100 TL-WN8200ND [Realtek RTL8192CU]
0101 RTL8812AU Archer T4U 802.11ac
0103 Archer T4UH wireless Realtek 8812AU
0105 Archer T1U 802.11a/n/ac Wireless Adapter [MediaTek MT7610U]
0106 Archer T9UH v1 [Realtek RTL8814AU]
- 0107 TL-WN821N Version 5 RTL8192EU
+ 0107 TL-WN821N v5/v6 [RTL8192EU]
0108 TL-WN822N Version 4 RTL8192EU
- 0109 TL WN823N RTL8192EU
- 010c TL-WN722N v2
- 010e TL-WN722N v2
+ 0109 TL-WN823N v2/v3 [Realtek RTL8192EU]
+ 010b Archer T2UHP [MediaTek MT7610U]
+ 010c TL-WN722N v2/v3 [Realtek RTL8188EUS]
+ 010d Archer T4U v2 [Realtek RTL8812AU]
+ 010e Archer T4UH v2 [Realtek RTL8812AU]
+ 010f Archer T4UHP [Realtek RTL8812AU]
+ 0115 Archer T4U ver.3
+ 011e AC600 wireless Realtek RTL8811AU [Archer T2U Nano]
+ 0120 Archer T2U PLUS [RTL8821AU]
+ 012d Archer T3U [Realtek RTL8812BU]
0200 MA 180 Zero CD
0201 HSUPA Modem MA180
+ 0600 UE300 10/100/1000 LAN (mass storage CD-ROM mode) [Realtek RTL8153]
+ 0601 UE300 10/100/1000 LAN (ethernet mode) [Realtek RTL8153]
+2366 Bitmanufaktur GmbH
+ 0001 Reserved Prototyping PID
+ 0002 OpenBeacon USB 2
+ 0003 OpenPCD 2 RFID Reader for 13.56MHz
+ 0004 OpenBeacon
+ 0005 Blinkenlights WDIM
+ 0006 Blinkenlights WMCU
+ 0007 OpenBeacon Ethernet EasyReader PoE II - Active 2.4GHz RFID Reader
+ 0008 OpenBeacon WLAN
+ 0009 OpenPCD 2 RFID Reader for 13.56MHz
+ 000a OpenPCD 2 Audio & LCD Display
+2367 Teenage Engineering
+ 0002 OP-1 Portable synthesizer
+ 000c OP-Z Portable synthesizer
+2368 Peterson Electro-Musical Products Inc.
+ 0001 BBS-1 [BodyBeat Sync]
+236a SiBEAM
+ 1965 SB6501 802.11ad Wireless Network Adapter
2373 Pumatronix Ltda
0001 5 MegaPixel Digital Still Camera [DSC5M]
2375 Digit@lway, Inc.
0001 Digital Audio Player
+2378 OnLive
+ 100a Universal Wireless Controller
+237d Cradlepoint
+ 0400 MC400
+2386 Raydium Corporation
+ 3125 Touch System
+ 4328 Touch System
+ 432f Touch System
+238b Hytera Communications
+ 0a11 DMR Radio
+239a Adafruit
+ 0001 CDC Bootloader
+ 801e Trinket M0
+23a0 BIFIT
+ 0001 Token iBank2key
+ 0002 iBank2Key Type M Token
+ 0003 iToken
+ 0008 MS_KEY K - Angara
+23a6 Tronical Components GmbH
+ 2000 Gibson Firebird X Pedal Board
+ 2001 Gibson Firebird X Switch Board
+23b4 Dental Wings Inc.
+ 0200 DW0200 Color Camera
+ 0300 DW0300 Hight Speed Monochrome Camera
+23c7 Gemini
+ 1021 FirstMix
+23fc SesKion GmbH
+ 0201 SPI-Simulyzer box for SPI data communication
+ 0202 PSI5-Simulyzer box for PSI5 (Peripheral-Sensor-Interfacs) data communication
+ 0203 SENT-Simulyzer box for SENT data communication
+ 0204 DSI-Simulyzer box for DSI3 data communication
+2405 Custom Computer Services, Inc
+ 0002 West Mountain Radio RIGblaster Advantage Audio
+ 0003 West Mountain Radio RIGblaster Advantage
2406 SANHO Digital Electronics Co., Ltd.
6688 PD7X Portable Storage
+2420 IRiver
+242e Vossloh-Schwabe Deutschland GmbH
+ 0001 DALI Master
+ 0002 LiCS Bootloader Mode
+ 0003 LiCS Running Mode
+ 0004 iProgrammer
+ 0005 NFC programming device
+2433 ASETEK
+ b200 [NZXT Kraken X60]
2443 Aessent Technology Ltd
00dc aes220 FPGA Mini-Module
+2457 Ocean Optics Inc.
+ 100a HR2000 Spectrometer 1.00.0
+ 1012 HR4000 Spectrometer
+2458 Bluegiga Technologies
+ 0001 BLED112 Bluetooth 4.0 Single Mode Dongle
+245f Chord Electronics Limited
+2464 Nest
+ 0001 Learning Thermostat
+ 0002 Learning Thermostat (2nd Generation)
+ 0010 Protect : Smoke + Carbon Monoxide
+ 0020 Heat Link
+2466 Fractal Audio Systems
+ 8003 Axe-Fx II
+ 8010 Axe-FX III
+2476 YEI Technology
+ 1040 3-Space Embedded Sensor
2478 Tripp-Lite
2008 U209-000-R Serial Port
248a Maxxter
8366 Wireless Optical Mouse ACT-MUSW-002
+ 8367 Telink Wireless Receiver
249c M2Tech s.r.l.
+24a4 Primare AB
+ 0002 I15_v1.06 [Primare Audio DAC]
+24ae Shenzhen Rapoo Technology Co., Ltd.
+ 0001 KX Keyboard
+ 0197 meva Barcode Scanner
+ 1813 E9260 Wireless Multi-mode Keyboard
+ 2000 2.4G Wireless Device Serial
+ 2001 5 GHz Wireless Receiver
+ 2003 5GHz Wireless Transceiver
+ 4110 Optical Gaming Mouse [V280]
+ 6000 Wireless Audio
+24c0 Chaney Instrument
+ 0003 Model 01036 weather center
+24c6 ThrustMaster, Inc.
+ 5000 Razer Atrox Gaming Arcade Stick
+ 5300 PowerA Mini ProEX Controller for Xbox 360
+ 5303 Airflo Wired Controller for Xbox 360
+ 530a ProEX Controller for Xbox 360
+ 531a Pro Ex mini for XBOX
+ 5397 FUS1ON Tournament Controller
+ 541a PowerA CPFA115320-01 [Mini Controller for Xbox One]
+ 542a Spectra for Xbox One
+ 543a PowerA Wired Controller for Xbox One
+ 5500 Horipad EX2 Turbo
+ 5501 Hori Real Arcade Pro.VX-SA for Xbox 360
+ 5502 Hori Fighting Stick VX Alt for Xbox 360
+ 5503 Hori Fighting Edge for Xbox 360
+ 5506 Hori Soulcalibur V Stick for Xbox 360
+ 550d Hori Gem Controller for Xbox 360
+ 550e Real Arcade Pro V Kai for Xbox One / Xbox 360
+ 551a Fusion Pro Controller
+ 561a Fusion Controller for Xbox One
+ 5b00 Ferrari 458 Italia Racing Wheel
+ 5b02 GPX Controller
+ 5d04 Sabertooth Elite
+ fa00 INF-8032385 Disney Infinity Reader
+ fafb Aplay Controller
+ fafd Afterglow Gamepad for Xbox 360
+ fafe Rock Candy Gamepad for Xbox 360
+24cf Lytro, Inc.
+ 00a1 Light Field Camera
+24dc Aladdin R.D.
+ 0406 JaCarta SF GOST
+24e0 Yoctopuce Sarl
24e1 Paratronic
3001 Adp-usb
3005 Radius
+24e3 K-Touch
+24ea Meva
+ 0197 Barcode Scanner
+24ed Zen Group
+ 044d Chat Headset
+24f0 Metadot
+ 0105 Das Keyboard 4
+ 0140 Das Keyboard 4
+ 2020 Das Keyboard 5Q
+24ff Acroname Inc.
+2500 Ettus Research LLC
+ 0020 USRP B210
+ 0021 USRP B200-mini
+ 0022 USRP B205-mini
+ 0200 USRP B200
2516 Cooler Master Co., Ltd.
0003 Storm Xornet
0004 Storm QuickFire Rapid Mechanical Keyboard
0006 Storm Recon
0007 Storm Sentinel Advance II
0009 Storm Quick Fire PRO
- 0011 Storm Quick Fire TK
+ 0011 Storm Quick Fire TK 6keys
+ 0014 Storm Quick Fire TK Nkeys
+ 0015 Storm QuickFire Pro/Ultimate keyboard
0017 CM Storm Quick Fire Stealth
+ 001a Storm Quick Fire XT
0020 QuickFire Rapid-i Keyboard
0027 CM Storm Coolermaster Novatouch TKL
002d Alcor mouse
+ 0042 Masterkeys Lite L Combo RGB Keyboard
+ 0044 Masterkeys Lite L Combo RGB Mouse
+ 0046 Masterkeys PRO L
0047 MasterKeys Pro L
+ 0055 MasterKeys L
+ 1006 MasterCase SL600M
9494 Sirus Headset
+2520 ANA-U GmbH
+ 0001 EasyPrinter S3
+2527 Software Bisque
+ 1388 Paramount 5
+2537 Norelsys
+ 1066 NS1066
+ 1068 NS1068/NS1068X SATA Bridge Controller
+2544 Energy Micro AS
+2546 Ravensburger
+ e301 TipToi Pen
2548 Pulse-Eight
1001 CEC Adapter
1002 CEC Adapter
+254e SHF Communication Technologies AG
+ e2b3 SHF 58035 A BiasBoard
+2554 ASSA ABLOY AB
+2555 Basis Science Inc.
+ 0001 B1 Fitness Band
+255e Beijing Bonxeon Technology Co., Ltd.
+ 0001 Device
+ 0002 Dual
+2560 e-con Systems
+ c152 See3CAM_CU51 5 Mpx monochrome camera
+2563 ShenZhen ShanWan Technology Co., Ltd.
+ 031d DXT Mouse
+ 0523 BM0523 WirelessGamepad
+ 0575 ZD-V+ Wired Gaming Controller
+256b Perreaux Industries Ltd
+ 0121 Audiant 80i
+256f 3Dconnexion
+ c62e SpaceMouse Wireless (cabled)
+ c62f SpaceMouse Wireless Receiver
+ c631 SpaceMouse Pro Wireless (cabled)
+ c632 SpaceMouse Pro Wireless Receiver
+ c633 SpaceMouse Enterprise
+ c635 SpaceMouse Compact
+ c651 CadMouse Wireless
+ c652 Universal Receiver
+ c654 CadMouse Pro Wireless
+ c657 CadMouse Pro Wireless Left
+2573 ESI Audiotechnik GmbH
+ 0017 MAYA22
+2574 AVer Information, Inc.
+ 0901 VC520
+ 0910 CAM520
+ 0920 VC320
+ 0930 CAM530
+ 0940 CAM340
+ 0950 VC322
+ 0960 VB342
+2575 Weida Hi-Tech Co., Ltd.
+2576 AFO Co., Ltd.
+ 0003 TCM
+ 0005 BL [Boot Loader]
+ 0011 THM
+2578 Pluscom
+ 4168 2.4GHZ Wireless Arc Folding Mouse
+2581 Plug-up
+ 1807 Generic HID Smartcard
+ 1808 WinUSB Smartcard
+ f1d0 FIDO U2F Security Key
+258d Sequans Communications
+259a TriQuint Semiconductor
+25a7 Areson Technology Corp
+ 2410 Laser mouse
+ fa23 2.4G Receiver
+ fa61 Elecom Co., Ltd MR-K013 Multicard Reader
25b5 FlatFrog
0002 Multitouch 3200
+25bb Brunner Elektronik AG
+ 0063 PRT.5105 [Yoke]
+ 0064 PRT.5105 [reserved]
+ 0065 PRT.5096 [Battery Management System]
+ 0066 PRT.5096 [Battery Management System]
+ 0067 PRT.5094
+ 0068 PRT.5094
+ 0069 PRT.5119 [Ethernet2CAN LC Gateway]
+ 006a PRT.5113 [CLS CANaerospace Gateway]
+ 006b PRT.5123
+ 006c PRT.5123 [reserved]
+ 006d PRT.5127
+ 00ff MSP430 HID Update Agent
+25bf Elegant Invention
+ 0001 Isostick
+ 0002 Isostick updater
+25c4 ARCAM
+25c6 Vitus Audio (AVA Group A/S)
+25c8 Visual Planet Ltd
+ 0014 Single User touchfoil(tm) (SU2-80)
+25da Netatmo
+ 0001 Weather Station
+25e3 Lumigon
+25f0 ShanWan
+ c131 Gioteck PS3 2.4G Wireless Controller
+25fb Pentax Ricoh Imaging Co., Ltd
+ 0102 K-5
+2604 Tenda
+ 0012 U12
+2625 MilDef AB
+2626 Aruba Networks
+ ea60 UART Bridge Controller [cp210x]
+262a SAVITECH Corp.
+ 100e SA9027 Audio Streaming Controller
+ 10e0 SA9023 Audio Streaming Controller
+ 9020 SA9020 audio controller
+ 9023 SA9023 audio controller
+ 9027 SA9027 audio controller
+ 9226 SA9226 192KHz audio controller
+ 9227 SA9227 384KHz audio controller
+ 9228 SA9228 384KHz/DSD audio controller
2632 TwinMOS
3209 7-in-1 Card Reader
2639 Xsens
0102 Awinda Dongle
0103 Sync Station
0200 MTw
+ 0300 Motion Tracker Development Board
+ 0301 MTi Converter
d00d Wireless Receiver
+264a Thermaltake
+ 1004 Ventus
2650 Electronics For Imaging, Inc. [hex]
+ 1311 eBeam Classic [Luidia]
2659 Sundtek
1101 TNT DVB-T/DAB/DAB+/FM
1201 FM Transmitter/Receiver
1211 MediaTV Pro III (US)
1212 MediaTV Pro III MiniPCIe (EU)
1213 MediaTV Pro III MiniPCIe (US)
+2662 Moog Music Inc.
+266e Silicon Integrated Systems
+2672 GoPro
+ 0004 Hero 3
+ 0006 HERO 3+ Silver Edition
+ 0007 HERO 3+ Black
+ 000e HERO4 Black
+ 0011 Hero 3+ Black
2676 Basler AG
ba02 ace
+ ba03 ba03 dart Vision Caera
+ ba04 ba04 pulse Vision Camera
+ ba05 Vision Camera
+ ba06 Vision Camera
+ ba07 Vision Camera
+ ba08 Vision Camera
+ ba09 Vision Camera
+ ba0a Vision Camera
+ ba0b Vision Camera
+ ba0c Vision Camera
+ ba0d Vision Camera
+ ba0e Vision Camera
+ ba0f Vision Camera
+2685 Cardo Peripheral Systems LTD
+ 0900 [Packtalk Bold Bluetooth Motorcycle Intercom]
+2687 Fitbit Inc.
+ fb01 Base Station
+2689 StepOver International GmbH
+ 0601 naturaSign Pad POS
+ 0901 naturaSign Pad Light
+ 0ce1 Pad Vivid US
+ 0cf1 Pad Biometric US 5.0
+ 0d01 duraSign Pad US 10.0
+ 0df1 duraSign Pad Biometric US 10.0
+268b Dimension Engineering
+ 0101 DELink 2
+ 0201 Sabertooth 2x32
+ 0405 Evolv DNA 200
+ 0406 Evolv DNA 200
+ 0407 Evolv DNA 200
+ 0408 Evolv DNA 75
+ 0409 Evolv DNA 250
+ 0412 Evolv DNA 60
+ 0413 Evolv DNA 200
+ 0414 Evolv DNA 250
+ 0415 Evolv DNA 75
+ 0416 Evolv DNA 60
+ 0417 Evolv DNA Go
+ 0419 Evolv DNA 250 Color
+ 0423 Evolv DNA 200
+ 0424 Evolv DNA 250
+ 0425 Evolv DNA 75
+ 0426 Evolv DNA 60
+ 8405 Evolv DNA 200 (recovery mode)
+ 8406 Evolv DNA 200 (recovery mode)
+ 8407 Evolv DNA 200 (recovery mode)
+ 8408 Evolv DNA 75 (recovery mode)
+ 8409 Evolv DNA 250 (recovery mode)
+ 8412 Evolv DNA 60 (recovery mode)
+ 8413 Evolv DNA 200 (recovery mode)
+ 8414 Evolv DNA 250 (recovery mode)
+ 8415 Evolv DNA 75 (recovery mode)
+ 8416 Evolv DNA 60 (recovery mode)
+ 8423 Evolv DNA 200 (recovery mode)
+ 8424 Evolv DNA 250 (recovery mode)
+ 8425 Evolv DNA 75 (recovery mode)
+ 8426 Evolv DNA 60 (recovery mode)
+26a9 Research Industrial Systems Engineering
+ 0001 Payment Terminal v1.0
+26aa Yaesu Musen
+ 0001 FT-1D
+ 000e FTA-550
+ 000f FTA-750
+26b5 Electrocompaniet
+ 0002 ECD 2
+ 0003 ECD 2 (Audio Class 1)
+ 0004 PI 2D
+ 0005 PI 2D (Audio Class 1)
+ 0006 ECI 6
+ 0007 ECI 6 (Audio Class 1)
+ 0020 ECI 80
+26bd Integral Memory
+ 9917 Fusion Flash Drive
+26e2 Ingenieurbuero Dietzsch und Thiele, PartG
+26f2 Micromega
+ 0200 MyDac
+2707 Bardac Corporation
+ 0005 drive.web
+270d Rosand Technologies
+ 1001 R-Idge Bootloader
+ 1002 R-Idge Router
2717 Xiaomi Inc.
0011 100Mbps Network Card Adapter
0360 Mi3W
ff68 Mi-4c
ff80 Mi/Redmi series (RNDIS)
ff88 Mi/Redmi series (RNDIS + ADB)
+272a StarLeaf Ltd.
+272c Signum Systems
+ 7d13 I-jet
2730 Citizen
+ 0fff CT-S2000/4000/310/CLP-521/621/631/CL-S700 Series
+ 1004 PPU-700
+ 2002 CT-S2000 Thermal Printer (Parallel mode)
200f CT-S310 Label printer
2735 DigitalWay
0003 MPIO HS100
1003 ColorHug+ Bootloader
1004 ColorHug2
1005 ColorHug2 bootloader
+2756 Victor Hasselblad AB
+ 0002 X1D Camera
+2759 Philip Morris Products S.A.
+ 0003 IQOS Pocket Charger 2.4
+2765 Firstbeat Technologies, Ltd.
+ 0004 Bodyguard 2
+2766 LifeScan
+ 0000 OneTouch Verio
2770 NHJ, Ltd
0a01 ScanJet 4600 series
905c Che-Ez Snap SNAP-U/Digigr8/Soundstar TDC-35
915d Cyberpix S-210S / Little Tikes My Real Digital Camera
930b CCD Webcam(PC370R)
930c CCD Webcam(PC370R)
+27a8 Square, Inc.
+ a120 Contactless + Chip Reader
27b8 ThingM
01ed blink(1)
+27bd Codethink Ltd.
+ 0001 Slab Node Manager
+ 0002 Slab Node Manager JTAG
+27c0 Cadwell Laboratories, Inc.
+ 0818 Paperlike HD-FT
27c6 Shenzhen Goodix Technology Co.,Ltd.
5117 Fingerprint Reader
5201 Fingerprint Reader
5301 Fingerprint Reader
530c Fingerprint Reader
+ 532d Fingerprint
+ 5381 Fingerprint Reader
5385 Fingerprint Reader
538c Fingerprint Reader
5395 Fingerprint Reader
5584 Fingerprint Reader
55b4 Fingerprint Reader
5740 Fingerprint Reader
+27d4 Blackstar Amplification Limited
+27dd Mindeo
+ 0002 Mindeo Virtual COM Port
+27f2 Softnautics LLP
+2803 StarLine LLC.
+ 0001 Controller Area Network car alarm module [SLCAN-2]
+2806 SIMPASS
+ 0001 N-PASS X1
+2817 Signal Hound, Inc.
+ 0002 BB60C Spectrum Analyzer
+ 0004 SM200A Spectrum Analyzer
+2818 Codex Digital Limited
+ 0001 Transfer Drive Dock
2821 ASUSTek Computer Inc.
0161 WL-161 802.11b Wireless Adapter [SiS 162U]
160f WL-160g 802.11g Wireless Adapter [Envara WiND512]
3300 WL-140 / Hawking HWU36D 802.11b Wireless Adapter [Intersil PRISM 3]
+2822 REFLEXdigital
+2833 Oculus VR, Inc.
+ 0001 Rift Developer Kit 1
+ 0021 Rift DK2
+ 0031 Rift CV1
+ 0101 Latency Tester
+ 0137 Quest Headset
+ 0201 Camera DK2
+ 0211 Rift CV1 Sensor
+ 0330 Rift CV1 Audio
+ 1031 Rift CV1
+ 2021 Rift DK2
+ 2031 Rift CV1
+ 3031 Rift CV1
+2836 OUYA
+286b STANEO SAS
+ 0003 D6BB/D9 seismic digitizer
+2886 Seeed Technology Co., Ltd.
+ 0002 Seeeduino Lite
+2890 Teknic, Inc
+ 0213 ClearPath 4-axis Comm Hub
2899 Toptronic Industrial Co., Ltd
012c Camera Device
289b Dracal/Raphnet technologies
000a Dreamcast (Keyboard mode)
000b Gamecube/N64 controller v2.9 (Keyboard mode)
000c Gamecube/N64 controller v2.9 (Joystick mode)
+ 000e VirtualBoy controller
+ 0010 WUSBMote v1.2 (Joystick mode)
+ 0011 WUSBMote v1.2 (Mouse mode)
+ 0012 WUSBMote v1.2.1 (Joystick mode)
+ 0013 WUSBMote v1.2.1 (Mouse mode)
+ 0014 WUSBMote v1.3 (Joystick mode)
+ 0015 WUSBMote v1.3 (Mouse mode)
+ 0016 WUSBMote v1.3 (I2C interface mode)
+ 0017 Gamecube/N64 controller v3.0
+ 0018 Atari Jaguar controller
+ 0019 MultiDB9joy v3
+ 001a MultiDB9joy v3 (multitap mode)
0100 Dual-relay board
0500 Energy meter
0502 Precision barometer
+289d Seek Thermal, Inc.
+ 0010 PIR206 Thermal Camera [Seek Compact]
+28bd XP-Pen
+ 0920 Star G960 Graphic Tablet
+28c7 Ultimaker B.V.
+ 0001 3D printer serial interface
+28d4 Devialet
+ 0008 120/200/250/400/800/D-Premier
28de Valve Software
1102 Wired Controller
1142 Wireless Steam Controller
2000 Lighthouse FPGA RX
+ 2012 Virtual Reality Controller [VRC]
2101 Watchman Dongle
+ 2500 Lighthouse Base Station
+28e0 PT. Prasimax Inovasi Teknologi
+ 1001 BTS Monitoring Config for Prototype
+ 5740 TRUMON TS-107
+ 5741 TRUMON TS-108
+28e9 GDMicroelectronics
+ 0189 GD32 DFU Bootloader (Longan Nano)
+28f3 Clover Network, Inc.
+ 2000 Mobile Wi-Fi (C200)
+ 3000 Mini
+ 4000 Flex
+28f9 Profitap HQ BV
+ 0001 Profishark 1G Black
+ 0003 Profishark 1G+
+ 0004 Profishark 1G
+ 0005 Profishark 10G
+ 0006 Profishark 100M
+290c R. Hamilton & Co. Ltd.
+ 4b4d Mercury iPod Dock
+2912 Audioengine
+ 20c8 D1 24-bit DAC
+ 30c8 D1 24-bit DAC
+2916 Yota Devices
2931 Jolla Oy
0a01 Jolla Phone MTP
0a02 Jolla Phone Developer
0a05 Jolla PC connection
+ 0a07 Phone MTP
0afe Jolla charging only
2939 Zaber Technologies Inc.
4959 A-MCB2
495a X-MCB1
495b X-MCB2
+ 49b1 X-MCB1
+ 49b2 X-MCB2
+ 49c1 X-MCC1
+ 49c2 X-MCC2
+ 49c3 X-MCC3
+ 49c4 X-MCC4
+2957 Obsidian Research Corporation
+ 0001 Management Console
+2961 Miselu
+ 0001 C.24 keyboard
+296b Xacti Corporation
+ 3917 CX-WE100 Camera
+2972 FiiO Electronics Technology
+ 0007 X3 2nd gen audio player / DAC
+298d Next Biometrics
+ 2020 NB-2020-U Fingerprint Reader
+29bd Silicon Works
+ 4101 Multi-touch Device
+29c1 Taztag
+ 1105 M17-G903-1 [Tazpad]
+ 1107 M17-G903-A [Tazpad] (CCID)
+29c2 Lewitt GmbH
+ 0001 DGT 650
+ 0003 DGT 450
+ 0009 DGT 260
+ 0011 Stream 4x5
+29c3 Noviga
+29e2 Huatune Technology (Shanghai) Co., Ltd.
+29e7 Brunel University
+29e8 4Links Limited
+29ea Kinesis Corporation
+ 0102 Advantage2 Keyboard
+29f1 Canaan Creative Co., Ltd
+ 33f1 Avalon nano 1.0
+ 33f2 Avalon USB2IIC Converter
+ 33f3 Avalon nano 2.0
+ 40f1 Avalon4 mini
2a03 dog hunter AG
0001 Linino ONE (bootloader)
0036 Arduino Leonardo (bootloader)
0038 Arduino Robot Control (bootloader)
0039 Arduino Robot Motor (bootloader)
003a Arduino Micro ADK rev3 (bootloader)
- 003b Arduino Serial
+ 003b Arduino usb2serial
003c Arduino Explora (bootloader)
003d Arduino Due (usb2serial)
003e Arduino Due
803c Arduino Explora (CDC ACM)
8041 Arduino Yun (CDC ACM)
804d Arduino Zero Pro (CDC ACM)
+2a0e Shenzhen DreamSource Technology Co., Ltd.
+2a13 Grabba International
+ 0000 S-Series data capture device
+2a19 Numato Systems Pvt. Ltd
+ 1002 Mimas V2 Spartan6 FPGA Development Board
+ 5440 TimVideos' HDMI2USB Opsis (FX2) - Unconfigured device
+ 5441 TimVideos' HDMI2USB Opsis (FX2) - Firmware load/upgrade
+ 5442 TimVideos' HDMI2USB Opsis (FX2) - HDMI/DVI Capture Device
+2a1d Oxford Nanopore Technologies, Ltd
+ 0000 MinION
+ 0001 MinION
+ 0010 VolTRAX
+ 0011 VolTRAX
+ 0020 GridION
+ 0021 GridION
2a37 RTD Embedded Technologies, Inc.
5110 UPS35110/UPS25110
+2a39 RME
+ 3fb0 Babyface Pro (Class Compliant Mode)
+ 3fc0 Babyface Pro
+ 3fc1 Fireface UFX+
+ 3fc2 Fireface UFX+
+ 3fd1 Fireface UFX+
+2a3c Trinamic Motion Control GmbH & Co KG
+ 0100 Stepper Device
+ 0200 BLDC/PMSM Device
+ 0300 Motor Control Device
+ 0400 Motor Control Device
+ 0500 PANdrive(TM)
+ 0600 motionCookie(TM)
+ 0700 Evaluation Device
+ 0800 Interface Device
+ 0900 Generic Device
2a45 Meizu Corp.
0001 MX Phone (BICR)
0c02 MX Phone (MTP & ADB)
200b MX Phone (PTP)
200c MX Phone (PTP & ADB)
2012 MX Phone (MTP & ACM)
+2a47 Mundo Reader, S.L.
+ 0c02 bq Aquaris E4.5
+ 201d Tablet Edison 3
+ 903a bq Aquaris U
+2a4b EMULEX Corporation
+ 0400 Pilot4 Integrated Hub
+2a62 Flymaster Avionics
+ b301 LiveSD
+ b302 NavSD
+2a6e Bare Conductive
+ 0003 Touch Board
+ 8003 Touch Board
+2a70 OnePlus Technology (Shenzhen) Co., Ltd.
+ 4ee7 ONEPLUS A3010 [OnePlus 3T] / A5010 [OnePlus 5T] / A6003 [OnePlus 6] (Charging + USB debugging modes)
+ 904d A3000 phone (PTP mode) [3T]
+ 904e A3000 phone (PTP mode, with debug) [3T]
+2a88 DFU Technology Ltd
+ ffff DFU
+2a8d Keysight Technologies, Inc.
+2ab6 T+A elektroakustik GmbH & Co KG, Germany
+ 0001 PDP3000HV DAC
+ 0002 MP1000E, MP2000R, MP2500R, MP3100HV
+ 0003 TA HD AUDIO V2
2ac7 Ultrahaptics Ltd.
0101 Evaluation Kit [Dragonfly]
0102 UHDK5
0112 STRATOS Inspire
0113 STRATOS Inspire DFU
ffff DFU
+2ad1 Picotronic GmbH
+ 7ab8 Turningtable
+2ae5 Fairphone B.V.
+ 9015 2 (Mass storage & ADB)
+ 9024 2 (RNDIS & ADB)
+ 9039 2 (MTP & ADB)
+ 904d 2 (PTP)
+ 904e 2 (PTP & ADB)
+ 90de 2 (Charging)
+ f000 2 (Mass storage)
+ f003 2 (MTP)
+ f005 2 (tethering)
+ f00e 2 (RNDIS)
+2aec Ambiq Micro, Inc.
+ 6011 Converter
+2af4 ROLI Ltd.
+ 0100 Seaboard GRAND
+ 0200 Seaboard RISE
+ 0300 BlueWing Proto
+ 0400 VOICE
+ 0500 BLOCKS
+2b03 STEREOLABS
+ f580 ZED camera
+ f582 ZED camera
+ f680 ZED-M camera
+ f681 ZED-M HID Interface
+ f682 ZED-M camera
+ f683 ZED-M HID Interface
+ f684 ZED-M camera
+2b0e LeEco
+ 171b Le2
+ 171e Le2 in USB tethering mode
+ 1830 Le1 Pro
+ 1844 Le Max2
+ 2b0e LeEco
+ 6108 Lex720 [LePro 3] in connection sharing usb
+ 610b Lex720 [LePro 3] in Camera mode
+ 610c Lex720 [LePro 3]
+ 610d Lex720 [LePro 3] in debug
+2b23 Red Hat, Inc.
+ cafe UsbDk (USB Development Kit)
2b24 KeepKey LLC
- 0001 Bitcoin hardware wallet
+ 0001 Bitcoin Wallet [KeepKey]
+ 0002 Bitcoin Wallet
+2b3e NewAE Technology Inc.
+ ace2 CW1173 [ChipWhisperer-Lite]
+2b4c ZUK
+ 1004 Z1 MTP
+2bc5 Orbbec 3D Technology International, Inc
+ 0401 Astra
+ 0403 Astra Pro
+ 0407 Astra Mini S
+2bcc InoTec GmbH Organisationssysteme
+2bd6 Coroware, Inc.
+ 4201 RS-485 Controller and Interface [Cypress Semiconductor]
+2bd8 ROPEX Industrie-Elektronik GmbH
2c02 Planex Communications
14ea GW-US11H WLAN
2c1a Dolphin Peripherals
0000 Wireless Optical Mouse
+2c23 Supermicro Computer Incorporated
+ 1b83 NIC
+2c4e Mercucys INC
+ 0100 MW300UM RTL8192EU wifi
+2c4f Canon Electronic Business Machines Co., Ltd.
+ 3003 PR Wireless Presenter
+2c55 Magic Leap, Inc.
+ a100 ML1 Lightpack (MLDB)
+ b100 ML1 Lightpack (fastboot)
+ c001 ML1 Control (COM)
+ c002 ML1 Control (Bootloader)
2c7c Quectel Wireless Solutions Co., Ltd.
0121 EC21 LTE modem
0125 EC25 LTE modem
0296 BG96 CAT-M1/NB-IoT modem
0306 EG06/EP06/EM06 LTE-A modem
0435 AG35 LTE modem
+2c97 Ledger
+ 0000 Blue
+ 0001 Nano S
+ 0004 Nano X
+2c99 Prusa
+ 0001 i3 MK2S
+2c9c Vayyar Imaging Ltd.
+ 1000 Walabot Makers Series
+ 1020 Walabot DIY
+ 1022 Walabot DIY Plus
+ 1030 Walabot Home (vHC)
+ 9100 VNAKit
+2c9d Nod Inc
+ 90a0 Goa
+ bac5 Backspin
+2ca3 DJI Technology Co., Ltd.
+ 0008 Mavic Mini MR1SD25 Remote controller
+2cb7 Fibocom
+ 0210 L830-EB-00 LTE WWAN Modem
+2cc0 Hangzhou Zero Zero Infinity Technology Co., Ltd.
+2cc2 Lautsprecher Teufel GmbH
+2ccf Hypersecu
+ 0880 HyperFIDO
+2cd9 Cambrionix Ltd
+ 0804 PowerSync4 USBPD Hub
2cdc Sea & Sun Technology GmbH
f232 CTD48Mc CTD Probe
+2ce5 InX8 Inc [AKiTiO]
+ 0014 Mass Storage [NT2 U31C]
+2cf0 Nuand LLC
+ 5246 bladeRF
+ 5250 bladeRF 2.0 micro
+2d1f Wacom Taiwan Information Co. Ltd.
+2d25 Kronegger GmbH.
+2d2d proxmark.org
+ 504d Proxmark3
+2d37 Zhuhai Poskey Technology Co.,Ltd
+2d6b NetUP Inc.
+ 7777 Joker TV universal DTV receiver
+2d81 Evollve Inc.
+ 4f01 Ozobot Evo
+2d84 Zhuhai Poskey Technology Co.,Ltd
+ b806 DT-108B Thermal Label Printer
+2dc8 8BitDo
+ 5006 M30 Bluetooth gamepad
+ 5750 Bootloader
+ 6000 SF30 Pro gamepad
+ 6001 SN30/SF30 Pro gamepad
+ ab11 F30 gamepad
+ ab12 N30 gamepad
+ ab20 SN30/SF30 gamepad
+ ab21 SF30 gamepad
2dcf Dialog Semiconductor
+ c951 Audio Class 1.0 Devices
c952 Audio Class 2.0 Devices
+2def Kirale Technologies
+ 0000 KiNOS Boot DFU
+ 0102 KTWM102 Module
+2df2 LIPS Corporation
+ 0213 LIPSedge DL 3D ToF Camera
+ 0215 LIPSedge DL RGB Camera
+ 2102 LIPSedge 5 Megapixel RGB Camera
+2e04 HMD Global
+ 0001 Nokia 3310 3G
+ 0002 Nokia 3310 3G
+ 0a14 Nokia 3310 3G
+ c008 Tethering Network Interface
+ c009 Nokia 1 (bootloader)
+ c025 Nokia 8 (MTP mode)
+ c026 Nokia Smartphone
+ c029 Nokia 8 (PTP mode)
+ c031 Nokia 1 (PTP)
+ c03f Nokia 8 (MIDI mode)
+2e0e Hatteland Display AS
+ 0001 CAN Gateway
+2e24 Hyperkin
+ 0652 Duke Xbox One controller
+ 1688 X91 Xbox One controller
+2e3b uSens Inc.
+2e57 MEGWARE Computer Vertrieb und Service GmbH
+ 454d SlideSX EnergyMeter
+ 454e SlideSX EnergyMeter DFU
+ 5cba SlideSX / ClustSafe Bus Adapter
+2e69 Swift Navigation
+ 1001 Piksi Multi
+2e95 SCUF Gaming
+ 7725 Controller
+2f76 KeyXentic Inc.
+ 0905 KX905 Smart Terminal
+ 0906 KX906 Smart Card Reader
+ 1906 KX906 Smart Token (Mass Storage)
+2fad Definium Technologies
+2fb0 Infocrypt
2fb2 Fujitsu, Ltd
+2fc0 Sensidyne, LP
+ 0001 Project Archer
+2fc6 Comtrue Inc.
+ 6012 UAC2 Device GB
+2fe0 Xaptum, Inc.
+ 8b01 XAP-RC-001 ENF Router Card
+ 8b02 XAP-RW-001 ENF Router Card with WiFi
+ 8bde XAP-EA-002 ENF Access Card
+ 8bee XAP-EA-003 ENF Access Card
+2fe3 NordicSemiconductor
+2fe7 ELGIN S.A.
+ 0001 SMART S@T
+2feb Beijing Veikk E-Commerce Co., Ltd.
+ 0004 Veikk A15 Pen Tablet
+2ff4 Quixant Plc
3016 Boundary Devices, LLC
0001 Nitrogen Bootloader
+3036 Control iD
+ 0001 Print iD
+ 0002 iDBio
+3037 Beijing Chushifengmang Technology Development Co.,Ltd.
+3057 Kingsis Corporation
+ 0002 ZOWIE Gaming mouse
+308f Input Club
+ 0000 Infinity 60% Bootloader
+ 0001 Infinity 60% - Standard
+ 0002 Infinity 60% - Hacker
+ 0003 Infinity Ergodox Bootloader
+ 0004 Infinity Ergodox
+ 0005 WhiteFox Bootloader
+ 0006 WhiteFox - Vanilla
+ 0007 WhiteFox - ISO
+ 0008 WhiteFox - Aria
+ 0009 WhiteFox - Winkeyless
+ 000a WhiteFox - True Fox
+ 000b WhiteFox - Jack of All Trades
+ 000c Infinity 60% LED Bootloader
+ 000d Infinity 60% LED - Standard
+ 000e Infinity 60% LED - Hacker
+ 000f Infinity 60% LED - Alphabet
+ 0010 K-Type Bootloader
+ 0011 K-Type
+ 0012 Kira Bootloader
+ 0013 Kira
+ 0014 Gemini Dawn/Dusk Bootloader
+ 0015 Gemini Dawn/Dusk
+ 0016 Re:Type Bootloader
+ 0017 Re:Type
+ 0018 Re:Type USB Hub
+ 0019 WhiteFox (SAM4S) Bootloader
+ 001a WhiteFox (SAM4S) - Vanilla
+ 001b WhiteFox (SAM4S) - ISO
+ 001c WhiteFox (SAM4S) - Aria
+ 001d WhiteFox (SAM4S) - Winkeyless
+ 001e WhiteFox (SAM4S) - True Fox
+ 001f WhiteFox (SAM4S) - Jack of All Trades
30a4 Blues Wireless
0001 Notecard
30c2 UNPARALLEL Innovation, Lda
1388 SPL Meter
+30c9 Luxvisions Innotech Limited
30ee Fujitsu Connected Technologies Limited
1001 F-01L
+30f2 Varex Imaging
+3111 Hiperscan GmbH
+ 0000 SGS-NT Microspectrometer
+3112 Meteca SA
+ 0001 MBC-WB01 (CDC-ACM)
+ 0002 MBC-WB01 (Bootloader)
+ 0003 ABC (CDC ACM)
+ 0004 ABC (Bootloader)
3125 Eagletron
0001 TrackerPod Camera Stand
3136 Navini Networks
+3145 SafeLogic Inc.
+3147 Tanvas, Inc.
+316c SigmaSense, LLC
+316d Purism, SPC
+ 4c4b Librem Key
+316e SPECINFOSYSTEMS
+ 0001 DIAMOND token
+3171 8086 Consultancy
+ 0011 ClusterCTRL DA
+ 0012 ClusterCTRL pHAT
+ 0013 ClusterCTRL A+6
+ 0014 ClusterCTRL Triple
+ 0015 ClusterCTRL Single
3176 Whanam Electronics Co., Ltd
3195 Link Instruments
f190 MSO-19
f280 MSO-28
f281 MSO-28
+31c9 BeiJing LanXum Computer Technology Co., Ltd.
+ 1001 Printer
+ 1301 Black and White Laser Printer
+ 1501 LaserPrint GA50 series
+3200 Alcatel-Lucent Enterprise
+ 2100 ALE 8058s
+ 2101 ALE 8068s
+ 2102 8078s
+3219 Smak Tecnologia e Automacao LTDA
+ 0044 SKO44 Optical Keyboard
+321c Premio, Inc.
+324c CUPRIS Ltd.
+326d Agile Display Solutions Co., Ltd
+ 0001 Avocor USB Camera
3275 VidzMedia Pte Ltd
4fb1 MonsterTV P2H
+3293 Unhuman Inc.
+32b3 TEXA
+ d1a6 TXT Multihub
+ d1a7 TXT Multihub
3333 InLine
3333 2 port KVM switch model 60652K
3334 AEI
043a Mio A701 DigiWalker PPCPhone
0e3a Pocket PC 300 GPS SL / Typhoon MyGuide 3500
a0a3 deltaX 5 BT (D) PDA
+ ffff Mio DigiWalker Sync
3344 Leaguer Microelectronics (LME)
3744 OEM PC Remote
+348f ISY
+ 2322 Wireless Presenter
3504 Micro Star
f110 Security Key
3538 Power Quotient International Co., Ltd
0022 Hi-Speed Mass Storage Device
0042 Cool Drive U339 Flash Disk
0054 Flash Drive (2GB)
+ 0901 Traveling Disk U273 (4GB)
3579 DIVA
6901 Media Reader
357d Sharkoon
- 7788 QuickPort XT
+ 7788 JMicron JMS567 ATA/ATAPI Bridge
3636 InVibro
+3767 Fanatec
+ 0101 Speedster 3 Forceshock Wheel
3838 WEM
0001 5-in-1 Card Reader
+ 1031 2.4G Wireless Mouse
3923 National Instruments Corp.
12c0 DAQPad-6020E
12d0 DAQPad-6507
1f50 DAQPad-6036E
2f80 DAQPad-6052E
2f90 DAQPad-6052E
- 702b GPIB-USB-B
+ 702a GPIB-USB-B
+ 702b GPIB-USB-B Initialization
703c USB-485 RS485 Cable
709b GPIB-USB-HS
+ 7166 USB-8451
+ 716e USB-8451 Firmware Loader
+ 717a USB-6008
+ 717b USB-6009
+ 71d6 USB-6008 OEM
+ 71d7 USB-6009 OEM
+ 71d8 USB-6009 OEM
7254 NI MIO (data acquisition card) firmware updater
729e USB-6251 (OEM) data acquisition card
+ 7346 USB-6229
+ 755b myDAQ
+ 76af USB-6000
+ 76b0 USB-6000 OEM
+ 76bf USB-6001
+ 76c0 USB-6001 OEM
+ 76c4 USB-6002
+ 76c5 USB-6002 OEM
+ 76c6 USB-6003
+ 76c7 USB-6003 OEM
40bb I-O Data
0a09 USB2.0-SCSI Bridge USB2-SC
4101 i-rocks
1005 Multimedia Pro Keyboard Hub
2001 Keyboard HID Support
2002 SK-8125 Keyboard
- 2003 Keyboard
+ 2003 Keyboard SK-8115
2005 RT7D50 Keyboard
2010 Keyboard
2011 Multimedia Pro Keyboard
2100 SK-3106 Keyboard
- 2101 SmartCard Reader Keyboard
+ 2101 SK-3205 SmartCard Reader Keyboard
2105 Model L100 Keyboard
- 2106 Dell QuietKey Keyboard
+ 2106 QuietKey Keyboard
+ 2107 KB212-B Quiet Key Keyboard
+ 2113 KB216 Wired Keyboard
+ 2134 Hub of E-Port Replicator
+ 21d7 Dell Wireless 5560 HSPA+ Mobile Broadband Modem
2500 DRAC4 Remote Access Card
+ 2501 Keyboard and mouse dongle
2513 internal USB Hub of E-Port Replicator
3010 Optical Wheel Mouse
3012 Optical Wheel Mouse
3016 Optical 5-Button Wheel Mouse
+ 301a Dell MS116 Optical Mouse
+ 301b Universal Bluetooth Receiver
3200 Mouse
4001 Axim X5
4002 Axim X3
5118 AIO 810
5124 Laser MFP 1815
5128 Photo AIO 928
+ 5133 968 AIO Printer
5200 Laser Printer
5202 Printing Support
5203 Printing Support
5220 Laser MFP 1600n
5225 Printing Support
5226 Printing Support
+ 5228 Laser Printer 1720dn
5300 Laser Printer
5400 Laser Printer
5401 Laser Printer
+ 5404 1250c Color Printer
5513 WLA3310 Wireless Adapter [Intersil ISL3887]
+ 5534 Hub of E-Port Replicator
5601 Laser Printer 3100cn
5602 Laser Printer 3000cn
+ 5607 MFP Color Laser Printer 3115cn
5631 Laser Printer 5100cn
+ 564a C1765 series Multifunction Color LaserPrinter, Scanner & Copier
5905 Printing Support
8000 BC02 Bluetooth Adapter
8010 TrueMobile Bluetooth Module in
8138 Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard EAP-SIM Port
8140 Wireless 360 Bluetooth
8142 Mobile 360 in DFU
+ 8143 Broadcom BCM20702A0 Bluetooth
8147 F3507g Mobile Broadband Module
8156 Wireless 370 Bluetooth Mini-card
8157 Integrated Keyboard
8185 Gobi 2000 Wireless Modem (QDL mode)
8186 Gobi 2000 Wireless Modem
8187 DW375 Bluetooth Module
+ 818e DW5560 miniPCIe HSPA+ Mobile Broadband Modem
+ 8197 BCM20702A0 Bluetooth Module
+ 81a0 Wireless 5808 Mobile Broadband (Sierra Wireless MC7355 Mini PCIE, 4G UMTS,HSDPA,HSPA+,LTE,1xRTT,EVDO Rev A,GSM,GPRS)
+ 81a3 Hub of E-Port Replicator
+ 81a8 Wireless 5808 Mobile Broadband (Sierra Wireless Mini PCIE, 4G UMTS,HSDPA,HSPA+,LTE,1xRTT,EVDO Rev A,GSM,GPRS)
8501 Bluetooth Adapter
+ 9001 ATA Bridge
+ 9009 Portable Device
9500 USB CP210x UART Bridge Controller [DW700]
a001 Hub
a005 Internal 2.0 Hub
+ a101 Internal Dual SD Card module
+ a102 iDRAC Virtual NIC
+ a503 AC511 Sound Bar
a700 Hub (in 1905FP LCD Monitor)
+ b007 Streak 5 Android Tablet
4146 USBest Technology
9281 Iomega Micro Mini 128MB Flash Drive
ba01 Intuix Flash Drive
0701 U.S. Robotics USR5425 Wireless MAXg Adapter
0711 Belkin F5D7051 v3000 802.11g
0720 Dynex DX-BUSB
+ 0721 Dynex DX-EBUSB
4348 WinChipHead
- 5523 USB->RS 232 adapter with Prolifec PL 2303 chipset
+ 5523 USB->RS 232 adapter with Prolific PL 2303 chipset
5537 13.56Mhz RFID Card Reader and Writer
5584 CH34x printer adapter cable
4572 Shuttle, Inc.
1026 Crystal Bar Flash Drive
4670 EMS Production
9394 Game Cube USB Memory Adaptor 64M
+46f4 QEMU
4752 Miditech
0011 Midistart-2
4757 GW Instek
4855 Memorex
7288 Ultra Traveldrive 160G 2.5" HDD
4971 SimpleTech
+ 1004 Hitachi LifeStudio Desk (3.5" HDD) [w/o flash key]
+ 1013 Touro Desk Pro
+ 1015 Touro Desk 3.0
+ 8001 G-Tech G-DRIVE Mobile
cb01 SP-U25/120G
+ cd15 Simple Drive Mini (2.5" HDD)
+ ce07 SimpleDrive (3.5" HDD)
+ ce12 FV-U35
ce17 1TB SimpleDrive II USB External Hard Drive
+ ce18 (re)Drive
+ ce21 JMicron JM20329 SATA Bridge [eg. HITACHI SimpleDrive mini]
+ ce22 Hitachi SimpleTough (3.5" HDD)
4d46 Musical Fidelity
0001 V-Link
0002 V-DAC II
0bb9 Grandtec USB1.1 DVB-T (warm)
0fa0 Grandtec USB1.1 DVB-T (cold)
0fa1 Grandtec USB1.1 DVB-T (warm)
-5041 Linksys (?)
- 2234 WUSB54G v1 802.11g Adapter [Intersil ISL3886]
- 2235 WUSB54GP v1 802.11g Adapter [Intersil ISL3886]
50c2 Averatec (?)
4013 WLAN Adapter
+5131 MSR
+ 2007 MSR-101U Mini HID magnetic card reader
5173 Sweex
1809 ZD1211
5219 I-Tetra
1001 Cetus CDC Device
+5332 Clearly Superior Technologies, Inc.
+ 1300 CST2545-5W (L-Trac)
5345 Owon
1234 PDS6062T Oscilloscope
534c SatoshiLabs
0001 Bitcoin Wallet [TREZOR]
+ 0002 Bitcoin Wallet [TREZOR v2]
+534d MacroSilicon
+ 0021 MS210x Video Grabber [EasierCAP]
+ 6021 VGA Display Adapter
5354 Meyer Instruments (MIS)
0017 PAXcam2
544d Transmeta Corp.
0005 Tablet WP8060U
0041 Genius PenSketch 6x8 Tablet
0042 Tablet PF1209
+ 004a XP-Pen Artist 10S tablet
+ 004d Tablet Monitor MSP19U
0064 Aiptek HyperPen 10000U
+ 3031 Graphics tablet [DrawImage G3, Ugee G3]
5555 Epiphan Systems Inc.
1110 VGA2USB
1120 KVM2USB
3344 KVM2USB LR
3411 DVI2USB Solo
3422 DVI2USB Duo
+ 3500 DVI2USB3
+ 3501 DVI2USB3 Rev3
+ 3510 DVI2USB3_ET
+ 3520 SDI2USB3
55aa OnSpec Electronic, Inc.
0015 Hard Drive
0102 SuperDisk
0100 Orbicam
0101 USB2.0 Camera
0102 Crystal Eye Webcam
+ 0137 HP Webcam
+ 0141 BisonCam, NB Pro
+ 0149 HP Webcam-101
+ 014c MSI Integrated Webcam
01a6 Lenovo Integrated Webcam
01a7 Lenovo Integrated Webcam
01a9 Lenovo Integrated Webcam
0200 OrbiCam
+ 0202 Fujitsu Webcam
0203 BisonCam NB Pro 1300
+ 0205 Lenovo EasyCamera
+ 0217 Integrated Webcam
0241 BisonCam, NB Pro
+ 0268 SunplusIT INC. Integrated Camera
+ 026a Integrated Camera
+ 0292 Lenovo Integrated Webcam
+ 0294 Lenovo Integrated Webcam
+ 0295 Lenovo Integrated Webcam
+ 0299 Lenovo Integrated Webcam
+ 029c Lenovo EasyCamera
+ 02ac HP TrueVision HD Webcam
02d0 Lenovo Integrated Webcam [R5U877]
+ 02d2 ThinkPad Integrated Camera
+ 02d5 Integrated Camera
+ 03b3 Lenovo Integrated Webcam
03d0 Lenovo Integrated Webcam [R5U877]
+ 0400 BisonCam, NB Pro
+ 0535 Lenovo EasyCamera integrated webcam
+ 055a Lenovo Integrated Webcam
+ 0652 Lenovo EasyCamera
+ 0670 Lenovo EasyCamera
+ 0671 Lenovo EasyCamera
+ 0706 ThinkPad P50 Integrated Camera
+ 2113 SunplusIT Integrated Camera
+ a002 Lenovo EasyCamera Integrated Webcam
59e3 Nonolith Labs
5a57 Zinwell
0260 RT2570
0282 802.11b/g/n USB Wireless LAN Card
0283 802.11b/g/n USB Wireless LAN Card
0284 802.11a/b/g/n USB Wireless LAN Card
- 0290 ZW-N290 802.11n [Realtek RTL8192SU]
+ 0290 ZW-N290 802.11n [Realtek RTL8192U]
5257 Metronic 495257 wifi 802.11ng
6000 Beholder International Ltd.
+ 0001 Trident TVBOX Video Grabber
dec0 TV Wander
dec1 TV Voyage
601a Ingenic Semiconductor Ltd.
4740 XBurst Jz4740 boot mode
+ 4760 JZ4760 Boot Device
+6022 Xektek
+ 0500 SuperPro Universal Device Programmer
6189 Sitecom
- 182d USB 2.0 Ethernet
+ 182d LN-029 10/100 Ethernet Adapter
2068 USB to serial cable (v2)
6244 LightingSoft AG
0101 Intelligent Usb Dmx Interface SIUDI5A
0491 Intelligent Usb Dmx Interface SIUDI9D
0500 Touch Sensitive Intelligent Control Keypad STICK2B Firmware download
0501 Touch Sensitive Intelligent Control Keypad STICK2B
+ 0520 Touch Sensitive Intelligent Control Keypad (STICK2C Firmware download, 32/64bits
+ 0521 Touch Sensitive Intelligent Control Keypad (STICK2C, 32/64bits)
+ 0540 Sunlite Universal Smart Handy Interface (SUSHI1A Firmware download, 32/64bits)
+ 0541 Sunlite Universal Smart Handy Interface (SUSHI1A, 32/64bits)
+ 0570 Touch Sensitive Intelligent Control Keypad (STICK4A Firmware download, 32/64bits)
+ 0571 Touch Sensitive Intelligent Control Keypad (STICK4A, 32/64bits)
+ 0580 Touch Sensitive Intelligent Control Keypad (STICK5A Firmware download, 32/64bits)
+ 0581 Touch Sensitive Intelligent Control Keypad (STICK5A, 32/64bits)
+ 0590 Intelligent Dmx Interface (SIUDI9S Firmware Download, 32/64bits)
+ 0591 Intelligent Dmx Interface (SIUDI9S, 32/64bits)
+ 0600 Intelligent Dmx Interface (SIUDI9M Firmware Download, 32/64bits)
+ 0601 Intelligent Dmx Interface (SIUDI9M, 32/64bits)
+ 0610 Intelligent Dmx Interface SIUDI10A Firmware Download
+ 0611 Intelligent Dmx Interface SIUDI10A
6253 TwinHan Technology Co., Ltd
0100 Ir reciver f. remote control
636c CoreLogic, Inc.
-6472 Unknown (Sony?)
+6472 Sony Corp.
01c8 PlayStation Portable [Mass Storage]
6547 Arkmicro Technologies Inc.
0232 ARK3116 Serial
+6557 Emtec
+ 5500 Mass Storage Device
+ 8005 Car Key
6615 IRTOUCHSYSTEMS Co. Ltd.
0001 Touchscreen
+ 0020 IRTOUCH InfraRed TouchScreen
+ 0081 TouchScreen
6666 Prototype product Vendor ID
0667 WiseGroup Smart Joy PSX, PS-PC Smart JoyPad
+ 1c40 TELEMIC 802.15.4 Sensor node (Bootloader)
+ 1c41 TELEMIC 802.15.4 Sensor node
2667 JCOP BlueZ Smartcard reader
8802 SmartJoy Dual Plus PS2 converter
8804 WiseGroup SuperJoy Box 5
6677 WiseGroup, Ltd.
8802 SmartJoy Dual Plus PS2 converter
8811 Deluxe Dance Mat
+675d Humanscale
+ 062a Switch Mouse
6891 3Com
a727 3CRUSB10075 802.11bg [ZyDAS ZD1211]
695c Opera1
2202 UF5/UF6/UF7/UF8 MIDI Master Keyboard
726c StackFoundry LLC
2149 EntropyKing Random Number Generator
+7302 Solinftec
+ 0001 HUB 4X232
734c TBS Technologies China
5920 Q-Box II DVB-S2 HD
5928 Q-Box II DVB-S2 HD
7373 Beijing STONE Technology Co. Ltd.
5740 Intelligent TFT-LCD Module
7392 Edimax Technology Co., Ltd
- 7711 EW-7711UTn nLite Wireless Adapter [Ralink RT2870]
- 7717 EW-7717UN 802.11n Wireless Adapter [Ralink RT2870]
+ 7711 EW-7711UTn nLite Wireless Adapter [Ralink RT3070]
+ 7717 EW-7717UN 802.11n Wireless Adapter [Ralink RT2770]
7718 EW-7718UN 802.11n Wireless Adapter [Ralink RT2870]
- 7722 EW-7722UTn 802.11n Wireless Adapter [Ralink RT307x]
+ 7722 EW-7722UTn 802.11n Wireless Adapter [Ralink RT3072]
+ 7733 EW-7733UnD 802.11abgn 3x3:3 [Ralink RT3573]
7811 EW-7811Un 802.11n Wireless Adapter [Realtek RTL8188CUS]
+ 7822 EW-7612UAn V2 802.11n Wireless Adapter [Realtek RTL8192CU]
+ a611 EW-7611ULB 802.11b/g/n and Bluetooth 4.0 Adapter
+ a711 EW-7711MAC 802.11ac Wireless Adapter
+ a811 EW-7811UTC 802.11ac Wireless Adapter
+ b711 EW-7722UAC 802.11a/b/g/n/ac (2x2) Wireless Adapter [MediaTek MT7612U]
+ b822 EW-7822ULC 802.11ac Wireless Adapter [Realtek RTL8812AU]
+73d8 Progeny Dental Equipment Specialists
+ 0104 VetPro DR, Size 1
+ 0105 VetPro DR, Size 2
+7669 Venable Instruments
+ 350c Model 350c, Frequency Response Analyzer
+ 5140 Model 5140, Frequency Response Analyzer
+ 6305 Model 6305, Frequency Response Analyzer
+ 6320 Model 6320, Frequency Response Analyzer
+ 6340 Model 6340, Frequency Response Analyzer
+ 7405 Model 7405, Frequency Response Analyzer
+ 7420 Model 7420, Frequency Response Analyzer
+ 7440 Model 7440, Frequency Response Analyzer
+ 8805 Model 8805, Frequency Response Analyzer
+ 8820 Model 8820, Frequency Response Analyzer
+ 8840 Model 8840, Frequency Response Analyzer
+7825 Other World Computing
+ a2a4 External SATA Hard Drive Adapter cable PA023U3
+ b0b3 miniStack MAX
+8070 ACCES I/O Products, Inc.
+ 8003 USB-DIO-96
+ 8070 USB-AO16-16A
8086 Intel Corp.
0001 AnyPoint (TM) Home Network 1.6 Mbps Wireless Adapter
0044 CPU DRAM Controller
0182 WiMAX Connection 2400m
0186 WiMAX Connection 2400m
0188 WiMAX Connection 2400m
+ 0189 Centrino Advanced-N 6230 Bluetooth adapter
0200 AnyPoint(TM) Wireless II Network 11Mbps Adapter [Atmel AT76C503A]
- 0431 Intel Pro Video PC Camera
+ 0431 Pro Video PC Camera
0510 Digital Movie Creator
0630 Pocket PC Camera
0780 CS780 Microphone Input
07d3 BLOB boot loader firmware
+ 07dc Bluetooth 4.0* Smart Ready (low energy)
+ 0b07 RealSense D435
0dad Cherry MiniatureCard Keyboard
1010 AnyPoint(TM) Home Network 10 Mbps Phoneline Adapter
110a Bluetooth Controller from (Ericsson P4A)
110b Bluetooth Controller from (Intel/CSR)
1110 PRO/Wireless LAN Module
1111 PRO/Wireless 2011B 802.11b Adapter [Intersil PRISM 2.5]
+ 1122 Integrated Hub
1134 Hollister Mobile Monitor
1139 In-Target Probe (ITP)
1234 Prototype Reader/Writer
3240 AnyPoint® 3240 Modem - WAN
3241 AnyPoint® 3240 Modem
8602 Miniature Card Slot
- 9303 Intel 8x930Hx Hub
+ 8c26 8 Series/C220 Series EHCI #1
+ 8c2d 8 Series/C220 Series EHCI #2
+ 8c31 eXtensible Host Controller
+ 9303 8x930Hx Hub
9500 CE 9500 DVB-T
9890 82930 Test Board
beef SCM Miniature Card Reader/Writer
c013 Wireless HID Station
+ dead Galileo
f001 XScale PXA27x Bulverde flash
f1a5 Z-U130 [Value Solid State Drive]
8087 Intel Corp.
0020 Integrated Rate Matching Hub
0024 Integrated Rate Matching Hub
+ 0025 Wireless-AC 9260 Bluetooth Adapter
+ 0029 AX200 Bluetooth
+ 0716 Modem Flashloader
+ 07da Centrino Bluetooth Wireless Transceiver
+ 07dc Bluetooth wireless interface
+ 07eb Oaktrail tablet
+ 0a2a Bluetooth wireless interface
+ 0a2b Bluetooth wireless interface
+ 0a9e Edison
+ 0aa7 Wireless-AC 3168 Bluetooth
+ 0aaa Bluetooth 9460/9560 Jefferson Peak (JfP)
+ 0fff Intel Android Bootloader Interface
+ 8000 Integrated Rate Matching Hub
+ 8001 Integrated Hub
+ 8002 8 channel internal hub
+ 8008 Integrated Rate Matching Hub
+ 800a Hub
80ee VirtualBox
0021 USB Tablet
+ 0022 multitouch tablet
8282 Keio
3201 Retro Adapter
3301 Retro Adapter Mouse
+8301 Hapurs
+ 0089 HPBT05R 2.4 G Mini Wireless Touchpad Keyboard
8341 EGO Systems, Inc.
2000 Flashdisk
8564 Transcend Information, Inc.
1000 JetFlash
- 4000 RDF8
+ 4000 microSD/SD/CF UHS-II Card Reader [RDF8, RDF9]
+ 6000 digital photo frame PF830
+ 6002 digital photo frame PF830
+ 7000 StoreJet 25H3
8644 Intenso GmbG
8003 Micro Line
800b Micro Line (4GB)
8e06 CH Products, Inc.
f700 DT225 Trackball
+8ea3 Doosl
+ a02c Wireless Presenter Receiver
9016 Sitecom
182d WL-022 802.11b Adapter
9022 TeVii Technology Ltd.
9148 GeoLab, Ltd
# All of GeoLab's devices share the same ID 0004.
0004 R3 Compatible Device
+9516 Studiologic
9710 MosChip Semiconductor
7703 MCS7703 Serial Port Adapter
7705 MCS7705 Parallel port adapter
7720 MCS7720 Dual serial port adapter
7730 MCS7730 10/100 Mbps Ethernet adapter
7780 MCS7780 4Mbps Fast IrDA Adapter
+ 7784 MCS7784 115.2Kb IrDA Adapter
+ 7810 MCS7810 Serial Port Adapter
+ 7820 MCS7820 Dual Serial Port Adapter
7830 MCS7830 10/100 Mbps Ethernet adapter
7832 MCS7832 10/100 Mbps Ethernet adapter
7840 MCS7820/MCS7840 2/4 port serial adapter
+ 9990 MCS9990 PCIe Host Controller
9849 Bestmedia CD Recordable GmbH & Co. KG
0701 Platinum MyDrive HP
+9886 Astro Gaming
+ 0015 A50
9999 Odeon
0001 JAF Mobile Phone Flasher Interface
99fa Grandtec
4b8f ProxMark-3 RFID Instrument
9e88 Marvell Semiconductor, Inc.
9e8f Plug Computer Basic [SheevaPlug]
+a014 Insignia (Best Buy)
+ b014 Desktop Microphone NS-PAUM50
+a108 Ingenic Semiconductor Co.,Ltd
+ 1000 X1000
+ 4775 JZ4775 Boot Device
a128 AnMo Electronics Corp. / Dino-Lite (?)
0610 Dino-Lite Digital Microscope (SN9C201 + HV7131R)
0611 Dino-Lite Digital Microscope (SN9C201 + HV7131R)
0615 Dino-Lite Pro Digital Microscope
0617 Dino-Lite Pro Digital Microscope
0618 Dino-Lite Digital Microscope
-a600 Asix
+a466 Haikou Xingong Electronics Co.,Ltd
+ 0a53 TL866II Plus Device Programmer [MiniPRO]
+a600 ASIX s.r.o.
+ 5500 zuban H2OPS - GPS for canoeing
+ a000 SIGMA Logic Analyzer
+ a002 EMUSB interface pro MU Beta
+ c000 MREL Data Trap II
+ c001 VUTS DMU4
+ c002 Electrone MASH
+ c005 MREL HTU HandiTrap cable
+ c006 JRC COmeter
e110 OK1ZIA Davac 4.x
+ e112 OK1ZIA Antenna rotator
+ e113 OK1ZIA GPIO
+ e114 OK1ZIA HD&Keyb
a727 3Com
6893 3CRUSB20075 OfficeConnect Wireless 108Mbps 11g Adapter [Atheros AR5523]
6895 AR5523
6897 AR5523
+a88a Clas Ohlsson
+ 3003 PCFree Multimedia Remote Control PC
aaaa MXT
8815 microSD CardReader
-abcd Unknown
+ 8816 microSD CardReader
+ab12 aplic
+ 34cd JMICRON JMS578 SATA 6Gb/s bridge
+abcd LogiLink
+ 1234 UDisk flash drive
+ 6104 PCCloneEX Lite+ SATA docking station [QP0017]
cdee Petcam
b58e Blue Microphones
9e84 Yeti Stereo Microphone
+ba77 Clockmaker
+ 7147 Agterbosch
c216 Card Device Expert Co., LTD
0180 MSR90 MagStripe reader
c251 Keil Software, Inc.
+ 1705 MCB2300
2710 ULink
+ 2723 ULink-ME
+c502 AGPTek
+ 0029 Rocker
cace CACE Technologies Inc.
0002 AirPCAP Classic 802.11 packet capture adapter
- 0300 AirPcap NX [Atheros AR9001U-(2)NG]
+ 0300 AirPcap NX [Atheros AR9170+AR9104]
cd12 SMART TECHNOLOGY INDUSTRIAL LTD.
d208 Ultimarc
0310 Mini-PAC Arcade Control Interface
d209 Ultimarc
0301 I-PAC Arcade Control Interface
0501 Ultra-Stik Ultimarc Ultra-Stik Player 1
+ 1571 A-PAC Arcade Control Interface
d904 LogiLink
0003 Laser Mouse (ID0009A)
+e2b7 Jie Li
+ 0811 CD002
+ 0812 CD005 MP3 Player
e4e4 Xorcom Ltd.
1130 Astribank series
1131 Astribank series
2750 ECS Elitegroup G220 integrated Webcam
2761 EeePC 701 integrated Webcam
2776 Combined audio and video input device
- 2800 Terratec Cinergy 200
- 2801 GrabBeeX+ Video Encoder
+ 2800 EM2800 Video Capture
+ 2801 EM2801 Video Capture
+ 2820 EM2820 Video Capture
+ 2821 EM2820 Video Capture
+ 2840 EM2840 Video Capture
+ 2841 EM2840 Video Capture
+ 2861 EasyCAP DC60+ [EM2861]
2863 Video Grabber
2870 Pinnacle PCTV Stick
2881 EM2881 Video Controller
50a3 Gadmei UTV380 TV Box
50a6 Gadmei UTV330 TV Box
+ 5166 video grabber 28282
+ 5184 VIDBOX NW06 [EM28281]
+ 8179 Terratec Cinergy T2 Stick HD
+ e305 KWorld PlusTV Analog Stick
e355 KWorld DVB-T 355U Digital TV Dongle
eb2a KWorld
ef18 SMART TECHNOLOGY INDUSTRIAL LTD.
f003 Hewlett Packard
6002 PhotoSmart C500
+f007 Teslong
+ a999 Endoscope Camera
+ b999 Otoscope Camera
f182 Leap Motion
0003 Controller
+f3f0 CCT, Inc
+ 0740 multi-function device
+ 1340 multi-function printer
+ 1440 printer device
+ 1921 printer
f4ec Atten Electronics / Siglent Technologies
ee38 Digital Storage Oscilloscope
f4ed Shenzhen Siglent Co., Ltd.
ee3a SDG1010 Waveform Generator (TMC mode)
f766 Hama
0001 PC-Gamepad "Greystorm"
+fa11 DyingLight
+ 5afe DyingLight
fc08 Conrad Electronic SE
0101 MIDI Cable UA0037
+ff00 Power Delivery
ffee FNK Tech
0100 Card Reader Controller RTS5101/RTS5111/RTS5116
of firmware, this firmware may also load the kernel directly.</para>
<para>The kernel (optionally) mounts an in-memory file system, often generated by
- <citerefentry project='die-net'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry project='man-pages'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
which looks for the root file system. Nowadays this is usually implemented as an initramfs — a compressed
archive which is extracted when the kernel boots up into a lightweight in-memory file system based on
tmpfs, but in the past normal file systems using an in-memory block device (ramdisk) were used, and the
<citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.target</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-halt.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry project='die-net'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ <citerefentry project='man-pages'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>
</para>
</refsect1>
<title>Options</title>
<para>All options are configured in the
- <literal>[Coredump]</literal> section:</para>
+ [Coredump] section:</para>
<variablelist class='config-directives'>
matching specified characteristics. If no command is
specified, this is the implied default.</para>
- <para>The output is designed to be human readable and contains list contains
- a table with the following columns:</para>
+ <para>The output is designed to be human readable and contains a table with the following
+ columns:</para>
<variablelist>
<varlistentry>
<term>TIME</term>
<listitem><para>Invoke a debugger on the last core dump
matching specified characteristics. By default,
- <citerefentry><refentrytitle>gdb</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <citerefentry project='man-pages'><refentrytitle>gdb</refentrytitle><manvolnum>1</manvolnum></citerefentry>
will be used. This may be changed using the <option>--debugger=</option>
option or the <varname>$SYSTEMD_DEBUGGER</varname> environment
variable.</para></listitem>
<listitem><para>Use the given debugger for the <command>debug</command>
command. If not given and <varname>$SYSTEMD_DEBUGGER</varname> is unset, then
- <citerefentry><refentrytitle>gdb</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <citerefentry project='man-pages'><refentrytitle>gdb</refentrytitle><manvolnum>1</manvolnum></citerefentry>
will be used. </para></listitem>
</varlistentry>
<listitem><para>Perform encryption using the same cpu that IO was submitted on. The default is to use
an unbound workqueue so that encryption work is automatically balanced between available CPUs.</para>
+
<para>This requires kernel 4.0 or newer.</para>
</listitem>
</varlistentry>
<term><option>submit-from-crypt-cpus</option></term>
<listitem><para>Disable offloading writes to a separate thread after encryption. There are some
- situations where offloading write bios from the encryption threads to a single thread degrades
- performance significantly. The default is to offload write bios to the same thread because it benefits
- CFQ to have writes submitted using the same context.</para>
+ situations where offloading write requests from the encryption threads to a dedicated thread degrades
+ performance significantly. The default is to offload write requests to a dedicated thread because it
+ benefits the CFQ scheduler to have writes submitted using the same context.</para>
+
<para>This requires kernel 4.0 or newer.</para>
</listitem>
</varlistentry>
<para>The PKCS#11 logic allows hooking up any compatible security token that is capable of storing RSA
decryption keys. Here's an example how to set up a Yubikey security token for this purpose, using
- <command>ykman</command> from the yubikey-manager project:</para>
+ <citerefentry project='debian'><refentrytitle>ykmap</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ from the yubikey-manager project:</para>
<programlisting><xi:include href="yubikey-crypttab.sh" parse="text" /></programlisting>
special target unit <filename>sockets.target</filename>. It is
recommended to place a
<varname>WantedBy=sockets.target</varname> directive in the
- <literal>[Install]</literal> section to automatically add such a
+ [Install] section to automatically add such a
dependency on installation of a socket unit. Unless
<varname>DefaultDependencies=no</varname> is set, the necessary
ordering dependencies are implicitly created for all socket
operating system-independent.</para></listitem>
<listitem><para>Make sure to include an
- <literal>[Install]</literal> section including installation
+ [Install] section including installation
information for the unit file. See
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details. To activate your service on boot, make sure to
<filename>/usr/share/</filename> hierarchy to the locations
defined by the various relevant specifications.</para>
- <para>During runtime, and for local configuration and state,
+ <para>During runtime, and for local configuration and runtime state,
additional directories are defined:</para>
<table>
<term><option>--identity=</option><replaceable>FILE</replaceable></term>
<listitem><para>Read the user's JSON record from the specified file. If passed as
- <literal>-</literal> reads the user record from standard input. The supplied JSON object must follow
- the structure documented on <ulink url="https://systemd.io/USER_RECORDS">JSON User
- Records</ulink>. This option may be used in conjunction with the <command>create</command> and
+ <literal>-</literal> read the user record from standard input. The supplied JSON object must follow
+ the structure documented on <ulink url="https://systemd.io/USER_RECORD">JSON User Records</ulink>.
+ This option may be used in conjunction with the <command>create</command> and
<command>update</command> commands (see below), where it allows configuring the user record in JSON
as-is, instead of setting the individual user record properties (see below).</para></listitem>
</varlistentry>
different system and the configured UID is taken by another user there, then
<command>systemd-homed</command> may assign the user a different UID on that system. The specified
UID must be outside of the system user range. It is recommended to use the 60001…60513 UID range for
- this purpose. If not specified the UID is automatically picked. When logging in and the home
- directory is found to be owned by a UID not matching the user's assigned one the home directory and
- all files and directories inside it will have their ownership changed automatically before login
- completes.</para>
+ this purpose. If not specified, the UID is automatically picked. If the home directory is found to be
+ owned by a different UID when logging in, the home directory and everything underneath it will have
+ its ownership changed automatically before login completes.</para>
<para>Note that users managed by <command>systemd-homed</command> always have a matching group
associated with the same name as well as a GID matching the UID of the user. Thus, configuring the
privileges. Note that <command>systemd-homed</command> does not manage any groups besides a group
matching the user in name and numeric UID/GID. Thus any groups listed here must be registered
independently, for example with <citerefentry
- project='man-pages'><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>. If
- non-existent groups that are listed there are ignored. This option may be used more than once, in
- which case all specified group lists are combined. If the user is currently a member of a group
- which is not listed, the user will be removed from the group.</para></listitem>
+ project='man-pages'><refentrytitle>groupadd</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
+ Any non-existent groups are ignored. This option may be used more than once, in which case all
+ specified group lists are combined. If the user is currently a member of a group which is not listed,
+ the user will be removed from the group.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--skel=</option><replaceable>PATH</replaceable></term>
<listitem><para>Takes a file system path to a directory. Specifies the skeleton directory to
- initialize the home directory with. All files and directories in the specified are copied into any
- newly create home directory. If not specified defaults to
- <filename>/etc/skel/</filename>.</para></listitem>
+ initialize the home directory with. All files and directories in the specified path are copied into
+ any newly create home directory. If not specified defaults to <filename>/etc/skel/</filename>.
+ </para></listitem>
</varlistentry>
<varlistentry>
<listitem><para>Takes a specifier indicating the preferred language of the user. The
<varname>$LANG</varname> environment variable is initialized from this value on login, and thus a
value suitable for this environment variable is accepted here, for example
- <option>--language=de_DE.UTF8</option></para></listitem>
+ <option>--language=de_DE.UTF8</option>.</para></listitem>
</varlistentry>
<varlistentry>
security token with exactly one pair of X.509 certificate and private key. A random secret key is
then generated, encrypted with the public key of the X.509 certificate, and stored as part of the
user record. At login time it is decrypted with the PKCS#11 module and then used to unlock the
- account and associated resources. See below for an example how to set up authentication with security
- token.</para></listitem>
+ account and associated resources. See below for an example how to set up authentication with a
+ security token.</para>
+
+ <para>Instead of a valid PKCS#11 URI, the special strings <literal>list</literal> and
+ <literal>auto</literal> may be specified. If <literal>list</literal> is passed, a brief table of
+ suitable, currently plugged in PKCS#11 hardware tokens is shown, along with their URIs. If
+ <literal>auto</literal> is passed, a suitable PKCS#11 hardware token is automatically selected (this
+ operation will fail if there isn't exactly one suitable token discovered). The latter is a useful
+ shortcut for the most common case where a single PKCS#11 hardware token is plugged in.</para>
+
+ <para>Note that many hardware security tokens implement both PKCS#11/PIV and FIDO2 with the
+ <literal>hmac-secret</literal> extension (for example: the YubiKey 5 series), as supported with the
+ <option>--fido2-device=</option> option below. Both mechanisms are similarly powerful, though FIDO2
+ is the more modern technology. PKCS#11/PIV tokens have the benefit of being recognizable before
+ authentication and hence can be used for implying the user identity to use for logging in, which
+ FIDO2 does not allow. PKCS#11/PIV devices generally require initialization (i.e. storing a
+ private/public key pair on them, see example below) before they can be used; FIDO2 security tokens
+ generally do not required that, and work out of the box.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>--fido2-device=</option><replaceable>PATH</replaceable></term>
+
+ <listitem><para>Takes a path to a Linux <literal>hidraw</literal> device
+ (e.g. <filename>/dev/hidraw1</filename>), referring to a FIDO2 security token implementing the
+ <literal>hmac-secret</literal> extension, that shall be able to unlock the user account. If used, a
+ random salt value is generated on the host, which is passed to the FIDO2 device, which calculates a
+ HMAC hash of it, keyed by its internal secret key. The result is then used as key for unlocking the
+ user account. The random salt is included in the user record, so that whenever authentication is
+ needed it can be passed again to the FIDO2 token, to retrieve the actual key.</para>
+
+ <para>Instead of a valid path to a FIDO2 <literal>hidraw</literal> device the special strings
+ <literal>list</literal> and <literal>auto</literal> may be specified. If <literal>list</literal> is
+ passed, a brief table of suitable discovered FIDO2 devices is shown. If <literal>auto</literal> is
+ passed, a suitable FIDO2 token is automatically selected, if exactly one is discovered. The latter is
+ a useful shortcut for the most common case where a single FIDO2 hardware token is plugged in.</para>
+
+ <para>Note that FIDO2 devices suitable for this option must implement the
+ <literal>hmac-secret</literal> extension. Most current devices (such as the YubiKey 5 series) do. If
+ the extension is not implemented the device cannot be used for unlocking home directories.</para>
+
+ <para>Note that many hardware security tokens implement both FIDO2 and PKCS#11/PIV (and thus may be
+ used with either <option>--fido2-device=</option> or <option>--pkcs11-token-uri=</option>), for a
+ discussion see above.</para></listitem>
</varlistentry>
<varlistentry>
<listitem><para>Each of these options takes a time span specification as argument (in the syntax
documented in
<citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>5</manvolnum></citerefentry>) and
- configure various aspects of the user's password expiration policy. Specifically,
+ configures various aspects of the user's password expiration policy. Specifically,
<option>--password-change-min=</option> configures how much time has to pass after changing the
password of the user until the password may be changed again. If the user tries to change their
password before this time passes the attempt is refused. <option>--password-change-max=</option>
- configures how much time has to pass after the the password is changed until the password expires and
- needs to be changed again. After this time passes any attempts to log in may only proceed after the
- password is changed. <option>--password-change-warn=</option> specifies how much earlier than then
- the time configured with <option>--password-change-max=</option> the user is warned at login to
- change their password as it will expire soon. Finally <option>--password-change-inactive=</option>
- configures the time which has to pass after the password as expired until the user is not permitted
- to log in or change the password anymore. Note that these options only apply to password
- authentication, and do not apply to other forms of authentication, for example PKCS#11-based security
- token authentication.</para></listitem>
+ configures how soon after it has been changed the password expires and needs to be changed again.
+ After this time passes logging in may only proceed after the password is changed.
+ <option>--password-change-warn=</option> specifies how much earlier than then the time configured
+ with <option>--password-change-max=</option> the user is warned at login to change their password as
+ it will expire soon. Finally <option>--password-change-inactive=</option> configures the time which
+ has to pass after the password as expired until the user is not permitted to log in or change the
+ password anymore. Note that these options only apply to password authentication, and do not apply to
+ other forms of authentication, for example PKCS#11-based security token
+ authentication.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>--tasks-max=</option><replaceable>TASKS</replaceable></term>
<listitem><para>Takes a non-zero unsigned integer as argument. Configures the maximum numer of tasks
- (i.e. processes and threads) the user may have at any given time. This limit applies to all tasks
- forked off the user's sessions, even if they change user identity via <citerefentry
- project='man-pages'><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry> or a
- similar tool. Use <option>--rlimit=LIMIT_NPROC=</option> to place a limit on the tasks actually
+ (i.e. threads, where each process is at least one thread) the user may have at any given time. This
+ limit applies to all tasks forked off the user's sessions, even if they change user identity via
+ <citerefentry project='man-pages'><refentrytitle>su</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ or a similar tool. Use <option>--rlimit=LIMIT_NPROC=</option> to place a limit on the tasks actually
running under the UID of the user, thus excluding any child processes that might have changed user
identity. This controls the <varname>TasksMax=</varname> setting of the per-user systemd slice unit
<filename>user-$UID.slice</filename>. See
<term><option>--cpu-weight=</option><replaceable>WEIGHT</replaceable></term>
<term><option>--io-weight=</option><replaceable>WEIGHT</replaceable></term>
- <listitem><para>Set a CPU and IO scheduling weights of the processes of the user, including those of
+ <listitem><para>Set CPU and IO scheduling weights of the processes of the user, including those of
processes forked off by the user that changed user credentials. Takes a numeric value in the range
1…10000. This controls the <varname>CPUWeight=</varname> and <varname>IOWeight=</varname> settings of
the per-user systemd slice unit <filename>user-$UID.slice</filename>. See
<para>Activation of a home directory involves various operations that depend on the selected storage
mechanism. If the LUKS2 mechanism is used, this generally involves: inquiring the user for a
password, setting up a loopback device, validating and activating the LUKS2 volume, checking the file
- system, mounting the file system, and potentiatlly changing the ownership of all included files to
- the correct UID/GID.</para></listitem>
+ system, mounting the file system, and potentially changing the ownership of all included files to the
+ correct UID/GID.</para></listitem>
</varlistentry>
<varlistentry>
</example>
<example>
- <title>Set up authentication with a YubiKey security token:</title>
+ <title>Set up authentication with a YubiKey security token using PKCS#11/PIV:</title>
<programlisting># Clear the Yubikey from any old keys (careful!)
ykman piv reset
# Create a self-signed certificate from this public key, and store it on the device.
ykman piv generate-certificate --subject "Knobelei" 9d pubkey.pem
-# We don't need the publibc key on disk anymore
+# We don't need the public key on disk anymore
rm pubkey.pem
-# Check if the newly create key on the Yubikey shows up as token in PKCS#11. Have a look at the output, and
-# copy the resulting token URI to the clipboard.
-p11tool --list-tokens
+# Allow the security token to unlock the account of user 'lafcadio'.
+homectl update lafcadio --pkcs11-token-uri=auto</programlisting>
+ </example>
+
+ <example>
+ <title>Set up authentication with a FIDO2 security token:</title>
-# Allow the security token referenced by the determined PKCS#11 URI to unlock the account of user
-# 'lafcadio'. (Replace the '…' by the URI from the clipboard.)
-homectl update lafcadio --pkcs11-token-uri=…</programlisting>
+ <programlisting># Allow a FIDO2 security token to unlock the account of user 'nihilbaxter'.
+homectl update nihilbaxter --fido2-device=auto</programlisting>
</example>
</refsect1>
<refsect1>
<title>Options</title>
- <para>The following options are available in the <literal>[Home]</literal> section:</para>
+ <para>The following options are available in the [Home] section:</para>
<variablelist class='home-directives'>
exit 1
fi
-# make sure the rules have been regenrated (in case man/update-man-rules was just run)
+# make sure the rules have been regenerated (in case man/update-man-rules was just run)
ninja -C "@BUILD_ROOT@" version.h
target="man/$1.html"
<title>Options</title>
<para>All options are configured in the
- <literal>[Remote]</literal> section:</para>
+ [Remote] section:</para>
<variablelist class='config-directives'>
<varlistentry>
<refsect1>
<title>Options</title>
- <para>All options are configured in the <literal>[Upload]</literal> section:</para>
+ <para>All options are configured in the [Upload] section:</para>
<variablelist class='config-directives'>
<varlistentry>
is also added for <literal>_SYSTEMD_SLICE=<replaceable>UNIT</replaceable></literal>,
such that if the provided <replaceable>UNIT</replaceable> is a
<citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- unit, all logs of the children of the slice will be logged.
+ unit, all logs of children of the slice will be shown.
</para>
<para>This parameter can be specified multiple times.</para>
is also added for <literal>_SYSTEMD_USER_SLICE=<replaceable>UNIT</replaceable></literal>,
such that if the provided <replaceable>UNIT</replaceable> is a
<citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- unit, all logs of the children of the unit will be logged.</para>
+ unit, all logs of children of the unit will be shown.</para>
<para>This parameter can be specified multiple times.</para>
</listitem>
<listitem><para>Filter output to entries where the <varname>MESSAGE=</varname>
field matches the specified regular expression. PERL-compatible regular expressions
are used, see
- <citerefentry><refentrytitle>pcre2pattern</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ <citerefentry project='url'><refentrytitle url='http://pcre.org/current/doc/html/pcre2pattern.html'>pcre2pattern</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for a detailed description of the syntax.</para>
<para>If the pattern is all lowercase, matching is case insensitive.
underneath the specified directory instead of the root
directory (e.g. <option>--update-catalog</option> will create
<filename><replaceable>ROOT</replaceable>/var/lib/systemd/catalog/database</filename>,
- and journal files under <filename><replaceable>ROOT</replaceable>/run/journal</filename>
- or <filename><replaceable>ROOT</replaceable>/var/log/journal</filename> will be displayed).
+ and journal files under <filename><replaceable>ROOT</replaceable>/run/journal/</filename>
+ or <filename><replaceable>ROOT</replaceable>/var/log/journal/</filename> will be displayed).
</para></listitem>
</varlistentry>
<filename>/run/log/journal/</filename> into <filename>/var/log/journal/</filename>, if persistent
storage is enabled. This call does not return until the operation is complete. Note that this call is
idempotent: the data is only flushed from <filename>/run/log/journal/</filename> into
- <filename>/var/log/journal</filename> once during system runtime (but see
+ <filename>/var/log/journal/</filename> once during system runtime (but see
<option>--relinquish-var</option> below), and this command exits cleanly without executing any
operation if this has already happened. This command effectively guarantees that all data is flushed
- to <filename>/var/log/journal</filename> at the time it returns.</para></listitem>
+ to <filename>/var/log/journal/</filename> at the time it returns.</para></listitem>
</varlistentry>
<varlistentry>
<title>Options</title>
<para>All options are configured in the
- <literal>[Journal]</literal> section:</para>
+ [Journal] section:</para>
<variablelist class='config-directives'>
<para>During early boot, the generation of core dump files is disabled until a core dump handler (if any)
takes over. This parameter allows specifying an absolute path where core dump files should be stored until
a handler is installed. The path should be absolute and may contain specifiers, see
- <citerefentry><refentrytitle>core</refentrytitle><manvolnum>5</manvolnum></citerefentry> for details.</para>
+ <citerefentry project='man-pages'><refentrytitle>core</refentrytitle><manvolnum>5</manvolnum></citerefentry> for details.</para>
</listitem>
</varlistentry>
<term><varname>systemd.clock-usec=</varname></term>
<listitem><para>Takes a decimal, numeric timestamp in µs since January 1st 1970, 00:00am, to set the
- system clock to. The system time is set to the specified timestamp early during
- boot. It is not propagated to the hardware clock (RTC).</para></listitem>
+ system clock to. The system time is set to the specified timestamp early during boot. It is not
+ propagated to the hardware clock (RTC).</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>systemd.random-seed=</varname></term>
+
+ <listitem><para>Takes a base64 encoded random seed value to credit with full entropy to the kernel's
+ random pool during early service manager initialization. This option is useful in testing
+ environments where delays due to random pool initialization in entropy starved virtual machines shall
+ be avoided.</para>
+
+ <para>Note that if this option is used the seed is accessible to unprivileged programs from
+ <filename>/proc/cmdline</filename>. This option is hence a security risk when used outside of test
+ systems, since the (possibly) only seed used for initialization of the kernel's entropy pool might be
+ easily acquired by unprivileged programs.</para>
+
+ <para>It is recommended to pass 512 bytes of randomized data (as that matches the Linux kernel pool
+ size), which may be generated with a command like the following:</para>
+
+ <programlisting>dd if=/dev/urandom bs=512 count=1 status=none | base64 -w 0</programlisting>
+
+ <para>Again: do not use this option outside of testing environments, it's a security risk elsewhere,
+ as secret key material derived from the entropy pool can possibly be reconstructed by unprivileged
+ programs.</para>
+ </listitem>
</varlistentry>
<varlistentry>
<title>Description</title>
<para><command>kernel-install</command> is used to install and remove kernel and initramfs images to and
from the boot loader partition, referred to as <varname>$BOOT</varname> here. It will usually be one of
- <filename>/boot</filename>, <filename>/efi</filename>, or <filename>/boot/efi</filename>, see below.
+ <filename>/boot/</filename>, <filename>/efi/</filename>, or <filename>/boot/efi/</filename>, see below.
</para>
<para><command>kernel-install</command> will execute the files
</para></listitem>
<listitem><para><filename>50-depmod.install</filename> runs
- <citerefentry><refentrytitle>depmod</refentrytitle><manvolnum>8</manvolnum></citerefentry> for the
+ <citerefentry project='man-pages'><refentrytitle>depmod</refentrytitle><manvolnum>8</manvolnum></citerefentry> for the
<replaceable>KERNEL-VERSION</replaceable>.</para></listitem>
<listitem><para><filename>90-loaderentry.install</filename> copies <replaceable>KERNEL-IMAGE</replaceable>
<para>The partition where the kernels and <ulink url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot
Loader Specification</ulink> snippets are located is called <varname>$BOOT</varname>.
<command>kernel-install</command> determines the location of this partition by checking
- <filename>/efi/</filename>, <filename>/boot/</filename>, and <filename>/boot/efi</filename>
+ <filename>/efi/</filename>, <filename>/boot/</filename>, and <filename>/boot/efi/</filename>
in turn. The first location where <filename>$BOOT/loader/entries/</filename> or
<filename>$BOOT/$MACHINE_ID/</filename> exists is used.</para>
</refsect1>
<para>
<citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>depmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry project='man-pages'><refentrytitle>depmod</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<ulink url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink>
</para>
<title>Options</title>
<para>All options are configured in the
- <literal>[Login]</literal> section:</para>
+ [Login] section:</para>
<variablelist class='config-directives'>
<varlistentry>
<term><varname>HoldoffTimeoutSec=</varname></term>
- <listitem><para>Specifies the timeout after system startup or
+ <listitem><para>Specifies a period of time after system startup or
system resume in which systemd will hold off on reacting to
lid events. This is required for the system to properly
detect any hotplugged devices so systemd can ignore lid events
<para>The machine ID may be set, for example when network booting, with the
<varname>systemd.machine_id=</varname> kernel command line parameter or by passing the
- option <option>--machine-id=</option> to systemd. An ID is specified in this manner
+ option <option>--machine-id=</option> to systemd. An ID specified in this manner
has higher priority and will be used instead of the ID stored in
<filename>/etc/machine-id</filename>.</para>
<listitem><para>Copies files or directories from a container
into the host system. Takes a container name, followed by the
- source path in the container the destination path on the host.
+ source path in the container and the destination path on the host.
If the destination path is omitted, the same as the source path
is used.</para>
exit 1
fi
-# make sure the rules have been regenrated (in case man/update-man-rules was just run)
+# make sure the rules have been regenerated (in case man/update-man-rules was just run)
ninja -C "@BUILD_ROOT@" version.h
page="$(echo "$1" | sed 's/\./\\./')"
<listitem><para>Show numerical address labels that can be used for address selection.
This is the same information that
- <citerefentry><refentrytitle>ip-addrlabel</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ <citerefentry project='die-net'><refentrytitle>ip-addrlabel</refentrytitle><manvolnum>8</manvolnum></citerefentry>
shows. See <ulink url="https://tools.ietf.org/html/rfc3484">RFC 3484</ulink>
for a discussion of address labels.</para>
<refsect1>
<title>[Network] Section Options</title>
- <para>The following options are available in the <literal>[Network]</literal> section:</para>
+ <para>The following options are available in the [Network] section:</para>
<variablelist class='network-directives'>
<varlistentry>
<refnamediv>
<refname>nss-myhostname</refname>
<refname>libnss_myhostname.so.2</refname>
- <refpurpose>Provide hostname resolution for the locally
- configured system hostname.</refpurpose>
+ <refpurpose>Hostname resolution for the locally configured system hostname</refpurpose>
</refnamediv>
<refsynopsisdiv>
<refnamediv>
<refname>nss-mymachines</refname>
<refname>libnss_mymachines.so.2</refname>
- <refpurpose>Provide hostname resolution for local
- container instances.</refpurpose>
+ <refpurpose>Hostname resolution for local container instances</refpurpose>
</refnamediv>
<refsynopsisdiv>
<refnamediv>
<refname>nss-resolve</refname>
<refname>libnss_resolve.so.2</refname>
- <refpurpose>Provide hostname resolution via <filename>systemd-resolved.service</filename></refpurpose>
+ <refpurpose>Hostname resolution via <filename>systemd-resolved.service</filename></refpurpose>
</refnamediv>
<refsynopsisdiv>
<refnamediv>
<refname>nss-systemd</refname>
<refname>libnss_systemd.so.2</refname>
- <refpurpose>Provide UNIX user and group name resolution for user/group lookup via Varlink</refpurpose>
+ <refpurpose>UNIX user and group name resolution for user/group lookup via Varlink</refpurpose>
</refnamediv>
<refsynopsisdiv>
<title>Properties</title>
<para><varname>LogLevel</varname> describes the
- <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>-style
+ <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry>-style
log-level, and should be one of <literal>emerg</literal>, <literal>alert</literal>,
<literal>crit</literal>, <literal>err</literal>, <literal>warning</literal>, <literal>notice</literal>,
<literal>info</literal>, <literal>debug</literal>, in order of increasing verbosity.</para>
<para><varname>LogTarget</varname> describes the log target (mechanism). It should be one of
<literal>console</literal> (log to the console or standard output),
<literal>kmsg</literal> (log to the kernel ring buffer),
- <literal>journal</literal> (log the the journal natively, see
+ <literal>journal</literal> (log to the journal natively, see
<citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>),
<literal>syslog</literal> (log using the
- <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry> call).
+ <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry> call).
</para>
<para>Those two properties are writable, so they may be set by sufficiently privileged users.</para>
<para><varname>SyslogIdentifier</varname> is a read-only property that shows the "syslog identifier".
It is a short string that identifies the program that is the source of log messages that is passed to
- the <citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry> call.
+ the <citerefentry project='man-pages'><refentrytitle>syslog</refentrytitle><manvolnum>3</manvolnum></citerefentry> call.
</para>
<para>Note: <command>journalctl</command> option <option>-p</option>/<option>--priority=</option> may
<title>Introduction</title>
<para><citerefentry><refentrytitle>systemd-homed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- is a system service which may be used to to create, remove, change or inspect home areas. This page
+ is a system service which may be used to create, remove, change or inspect home areas. This page
describes the D-Bus interface.
</para>
</refsect1>
<para><function>GetHomeByName()</function> returns basic user information (a minimal subset of the full
user record), provided a user name. The information supplied more or less matches what
- <citerefentry><refentrytitle>getpwnam</refentrytitle><manvolnum>3</manvolnum></citerefentry> returns:
+ <citerefentry project='man-pages'><refentrytitle>getpwnam</refentrytitle><manvolnum>3</manvolnum></citerefentry> returns:
the numeric UID and GID, the real name, home directory and shell. In addition it returns a state
identifier describing the state the user's home directory is in, as well as a bus path referring to the
bus object encapsulating the user record and home directory. This object implements the
interface.</para>
<para><function>CreateHome()</function> registers and creates a new home directory. This takes a fully
- specified JSON user record as argument (including the <literal>secret</literal> section. This registers
+ specified JSON user record as argument (including the <literal>secret</literal> section). This registers
the user record locally and creates a home directory matching it, depending on the settings specified
in the record in combination with local configuration.</para>
<para><varname>KernelName</varname>, <varname>KernelRelease</varname>, and
<varname>KernelVersion</varname> expose the kernel name (e.g. <literal>Linux</literal>), release
- (e.g. <literal>5.0.0-11</literal>, and version (i.e. the build number, e.g. <literal>#11</literal>) as
+ (e.g. <literal>5.0.0-11</literal>), and version (i.e. the build number, e.g. <literal>#11</literal>) as
reported by
<citerefentry project="man-pages"><refentrytitle>uname</refentrytitle><manvolnum>2</manvolnum></citerefentry>.
<varname>OperatingSystemPrettyName</varname>, <varname>OperatingSystemCPEName</varname>, and
is mostly a small companion service for
<citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
Many operations to manipulate local container and VM images are hence available via the <command>systemd-machined</command> D-Bus API, c.f.
- <citerefentry><refentrytitle>org.freedesktop.machine1.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ <citerefentry><refentrytitle>org.freedesktop.machine1</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
</para>
</refsect1>
<para><function>SetWallMessage()</function> sets the wall message (the message that will be sent out to
all terminals and stored in a
- <citerefentry><refentrytitle>utmp</refentrytitle><manvolnum>5</manvolnum></citerefentry> record) for a
+ <citerefentry project='man-pages'><refentrytitle>utmp</refentrytitle><manvolnum>5</manvolnum></citerefentry> record) for a
subsequent scheduled shutdown operation. The parameter <varname>wall_message</varname> specifies the
shutdown reason (and may be empty) which will be included in the shutdown message. The parameter
<varname>enable</varname> specifies whether to print a wall message on shutdown.</para>
<para><function>OpenMachinePTY()</function> allocates a pseudo TTY in the container and returns a file
descriptor and its path. This is equivalent to transitioning into the container and invoking
- <citerefentry><refentrytitle>posix_openpt</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
+ <citerefentry project='man-pages'><refentrytitle>posix_openpt</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+ </para>
<para><function>OpenMachineLogin()</function> allocates a pseudo TTY in the container and ensures that
a getty login prompt of the container is running on the other end. It returns the file descriptor of
<para><function>SetUnitProperties()</function> may be used to modify certain unit properties at
runtime. Not all properties may be changed at runtime, but many resource management settings (primarily
those listed in
- <citerefentry><refentrytitle>systemd.cgroup</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
+ <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
may. The changes are applied instantly and stored on disk for future boots, unless
<varname>runtime</varname> is true, in which case the settings only apply until the next
reboot. <varname>name</varname> is the name of the unit to modify. <varname>properties</varname> are
<para>Read access is generally granted to all clients. Additionally, for unprivileged clients, some
operations are allowed through the polkit privilege system. Operations which modify unit state
(<function>StartUnit()</function>, <function>StopUnit()</function>, <function>KillUnit()</function>,
- <function>RestartUnit()</function> and similar, <function>SetProperty</function>) require
+ <function>RestartUnit()</function> and similar, <function>SetProperty()</function>) require
<interfacename>org.freedesktop.systemd1.manage-units</interfacename>. Operations which modify unit file
enablement state (<function>EnableUnitFiles()</function>, <function>DisableUnitFiles()</function>,
<function>ReenableUnitFiles()</function>, <function>LinkUnitFiles()</function>,
<function>PresetUnitFiles</function>, <function>MaskUnitFiles</function>, and similar) require
- <interfacename>org.freedesktop.systemd1.manage-unit-files</interfacename>). Operations which modify the
+ <interfacename>org.freedesktop.systemd1.manage-unit-files</interfacename>. Operations which modify the
exported environment (<function>SetEnvironment()</function>, <function>UnsetEnvironment()</function>,
<function>UnsetAndSetEnvironment()</function>) require
<interfacename>org.freedesktop.systemd1.set-environment</interfacename>. <function>Reload()</function>
<para>Most of the properties map directly to the corresponding settings in swap unit files. As mount
units invoke the
- <citerefentry><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry> command,
+ <citerefentry project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry> command,
their bus objects include implicit <varname>ExecActivate</varname> (and similar) fields which contain
information about processes to execute. They also share most of the fields related to the execution
context that Service objects expose (see above). In addition to these properties there are the
following:</para>
<para><varname>ControlPID</varname> contains the PID of the currently running
- <citerefentry><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry> or
- <citerefentry><refentrytitle>swapoff</refentrytitle><manvolnum>8</manvolnum></citerefentry> command if
- there is one running, otherwise 0.</para>
+ <citerefentry project='man-pages'><refentrytitle>swapon</refentrytitle><manvolnum>8</manvolnum></citerefentry> or
+ <citerefentry project='man-pages'><refentrytitle>swapoff</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ command if there is one running, otherwise 0.</para>
<para><varname>Result</varname> contains a value explaining why a mount unit failed if it failed. It
can take the values <literal>success</literal>, <literal>resources</literal>,
hence be used to uniquely label files or other resources of this session. Combine this ID with the boot
identifier, as returned by
<citerefentry><refentrytitle>sd_id128_get_boot</refentrytitle><manvolnum>3</manvolnum></citerefentry>, for a
- globally unique identifier for the current session.</para></listitem>
+ globally unique identifier.</para></listitem>
</varlistentry>
<varlistentry>
<para> See
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry> for more information about the resources.
- Also, see <citerefentry><refentrytitle>pam_set_data</refentrytitle><manvolnum>3</manvolnum></citerefentry> for additional information about how to set
+ Also, see <citerefentry project='man-pages'><refentrytitle>pam_set_data</refentrytitle><manvolnum>3</manvolnum></citerefentry> for additional information about how to set
the context objects.
</para>
<para>By default all unit files whose names start with a prefix generated from the image's file name are copied
out. Specifically, the prefix is determined from the image file name with any suffix such as
- <filename>.raw</filename> removed, truncated at the first occurrence of and underscore character
+ <filename>.raw</filename> removed, truncated at the first occurrence of an underscore character
(<literal>_</literal>), if there is one. The underscore logic is supposed to be used to versioning so that the
an image file <filename>foobar_47.11.raw</filename> will result in a unit file matching prefix of
<filename>foobar</filename>. This prefix is then compared with all unit files names contained in the image in
</tgroup>
</table>
- <para>For details on this profiles, and their effects please have a look at their precise definitions,
+ <para>For details on these profiles and their effects see their precise definitions,
e.g. <filename>/usr/lib/systemd/portable/profile/default/service.conf</filename> and similar.</para>
</refsect1>
<title>Options</title>
<para>All options are configured in the
- <literal>[PStore]</literal> section:</para>
+ [PStore] section:</para>
<variablelist class='config-directives'>
<refsect1>
<title>See Also</title>
<para>
- <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-journald.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
</para>
</refsect1>
<row>
<entry><constant>root-secondary</constant></entry>
- <entry>Root file system partition of the secondary architecture of the local architecture; usually the matching 32bit architecture for the local 64bit architecture)</entry>
+ <entry>Root file system partition of the secondary architecture of the local architecture (usually the matching 32bit architecture for the local 64bit architecture)</entry>
</row>
<row>
<term><varname>PaddingMinBytes=</varname></term>
<term><varname>PaddingMaxBytes=</varname></term>
- <listitem><para>Specifies minimum and maximum size constrains in bytes for the free space after the
+ <listitem><para>Specifies minimum and maximum size constraints in bytes for the free space after the
partition (the "padding"). Semantics are similar to <varname>SizeMinBytes=</varname> and
<varname>SizeMaxBytes=</varname>, except that unlike partition sizes free space can be shrunk and can
be as small as zero. By default no size constraints on padding are set, so that only
<varname>PaddingWeight=</varname> determines the size of the padding applied.</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>CopyBlocks=</varname></term>
+
+ <listitem><para>Takes a path to a regular file, block device node or directory. If specified and the
+ partition is newly created the data from the specified path is written to the newly created
+ partition, on the block level. If a directory is specified the backing block device of the file
+ system the directory is on is determined and the data read directly from that. This option is useful
+ to efficiently replicate existing file systems on the block level on a new partition, for example to
+ build a simple OS installer or OS image builder.</para>
+
+ <para>The file specified here must have a size that is a multiple of the basic block size 512 and not
+ be empty. If this option is used, the size allocation algorithm is slightly altered: the partition is
+ created as least as big as required to fit the data in, i.e. the data size is an additional minimum
+ size value taken into consideration for the allocation algorithm, similar to and in addition to the
+ <varname>SizeMin=</varname> value configured above.</para>
+
+ <para>This option has no effect if the partition it is declared for already exists, i.e. existing
+ data is never overwritten. Note that the data is copied in before the partition table is updated,
+ i.e. before the partition actually is persistently created. This provides robustness: it is
+ guaranteed that the partition either doesn't exist or exists fully populated; it is not possible that
+ the partition exists but is not or only partially populated.</para></listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>FactoryReset=</varname></term>
<term><option>-a</option></term>
<listitem><para>Registers per-interface DNS configuration data with
<command>systemd-resolved</command>. Expects a network interface name as only command line argument. Reads
- <citerefentry><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> compatible DNS
- configuration data from its standard input. Relevant fields are <literal>nameserver</literal> and
+ <citerefentry project='man-pages'><refentrytitle>resolv.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>-compatible
+ DNS configuration data from its standard input. Relevant fields are <literal>nameserver</literal> and
<literal>domain</literal>/<literal>search</literal>. This command is mostly identical to invoking
- <command>resolvectl</command> with a combination of <option>dns</option> and
- <option>domain</option> commands.</para></listitem>
+ <command>resolvectl</command> with a combination of <option>dns</option> and <option>domain</option>
+ commands.</para></listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>Options</title>
- <para>The following options are available in the <literal>[Resolve]</literal> section:</para>
+ <para>The following options are available in the [Resolve] section:</para>
<variablelist class='network-directives'>
<para>The domains prefixed with <literal>~</literal> are called "routing domains". All domains listed
here (both search domains and routing domains after removing the <literal>~</literal> prefix) define
- a search path that preferably directs DNS queries to this inteface. This search path has an effect
+ a search path that preferably directs DNS queries to this interface. This search path has an effect
only when suitable per-link DNS servers are known. Such servers may be defined through the
<varname>DNS=</varname> setting (see above) and dynamically at run time, for example from DHCP
leases. If no per-link DNS servers are known, routing domains have no effect.</para>
<citerefentry><refentrytitle>sd_bus_get_name_machine_id</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_name_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_owner_creds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>sd_bus_get_property</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>sd_bus_get_property_trivial</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>sd_bus_get_property_string</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+<citerefentry><refentrytitle>sd_bus_get_property_strv</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_scope</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_tid</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_get_unique_name</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-<citerefentry><refentrytitle>sd_bus_message_get_property</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-<citerefentry><refentrytitle>sd_bus_message_get_property_trivial</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-<citerefentry><refentrytitle>sd_bus_message_get_property_string</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
-<citerefentry><refentrytitle>sd_bus_message_get_property_strv</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_sender</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_signature</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_type</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
information, in particular it should not be used for security-relevant decisions. That's because the
executable might have been replaced or removed by the time the value can be processed. Moreover, the
kernel exports this information in an ambiguous way (i.e. a deleted executable cannot be safely
- distinguished from one whose name suffix is <literal> (deleted)</literal>.</para>
+ distinguished from one whose name suffix is <literal> (deleted)</literal>).</para>
<para><function>sd_bus_creds_get_cmdline()</function> will
retrieve an array of command line arguments (as stored in
<refnamediv>
<refname>sd_bus_enqueue_for_read</refname>
- <refpurpose>Re-enqueue a bus message on a bus connection, for reading.</refpurpose>
+ <refpurpose>Re-enqueue a bus message on a bus connection, for reading</refpurpose>
</refnamediv>
<refsynopsisdiv>
<constant>POLLIN</constant>, <constant>POLLOUT</constant>, … events, or negative on error.
</para>
- <para><function>sd_bus_get_timeout()</function> returns the timeout in µs to pass to to
+ <para><function>sd_bus_get_timeout()</function> returns the timeout in µs to pass to
<function>poll()</function> or a similar call when waiting for events on the specified bus
connection. The returned timeout may be zero, in which case a subsequent I/O polling call
should be invoked in non-blocking mode. The returned timeout may be
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>sd_bus_message_call_method</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>sd_bus_call_method</refentrytitle><manvolnum>3</manvolnum></citerefentry>
</para>
</refsect1>
<refname>sd_bus_is_open</refname>
<refname>sd_bus_is_ready</refname>
- <refpurpose>Check whether the a bus connection is open or ready.</refpurpose>
+ <refpurpose>Check whether the bus connection is open or ready</refpurpose>
</refnamediv>
<refsynopsisdiv>
<constant>SD_BUS_MESSAGE_METHOD_RETURN</constant>, <constant>SD_BUS_MESSAGE_METHOD_ERROR</constant>,
<constant>SD_BUS_MESSAGE_SIGNAL</constant>. This type is either specified as a parameter when the message
is created using
- <citerefentry><refentrytitle>sd_bus_set_message_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>sd_bus_message_new</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
or is set automatically when the message is created using
- <citerefentry><refentrytitle>sd_bus_set_message_new_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>sd_bus_set_message_new_method_call</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>sd_bus_set_message_new_method_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>sd_bus_message_new_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>sd_bus_message_new_method_call</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>sd_bus_message_new_method_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>
and similar functions.</para>
<para><function>sd_bus_message_get_error()</function> returns the error stored in the message
signal message. If <parameter>interface</parameter> is non-null, it also checks if the message has the
same interface set. If <parameter>member</parameter> is non-null, it also checks if the message has the
same member set. Also see
- <citerefentry><refentrytitle>sd_bus_set_message_new_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+ <citerefentry><refentrytitle>sd_bus_message_new_signal</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
It returns true when all checks pass.</para>
<para><function>sd_bus_message_is_method_call()</function> checks if message <parameter>m</parameter>
is a method call message. If <parameter>interface</parameter> is non-null, it also checks if the message
has the same interface set. If <parameter>member</parameter> is non-null, it also checks if the message
has the same member set. Also see
- <citerefentry><refentrytitle>sd_bus_set_message_new_method_call</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+ <citerefentry><refentrytitle>sd_bus_message_new_method_call</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
It returns true when all checks pass.</para>
<para><function>sd_bus_message_is_method_error()</function> checks if message <parameter>m</parameter>
is an error reply message. If <parameter>name</parameter> is non-null, it also checks if the message has
the same error identifier set. Also see
- <citerefentry><refentrytitle>sd_bus_set_message_new_method_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+ <citerefentry><refentrytitle>sd_bus_message_new_method_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
It returns true when all checks pass.</para>
</refsect1>
<refname>sd_bus_message_new_method_errno</refname>
<refname>sd_bus_message_new_method_errnof</refname>
- <refpurpose>Create a an error reply for a method call</refpurpose>
+ <refpurpose>Create an error reply for a method call</refpurpose>
</refnamediv>
<refsynopsisdiv>
an error reply similarly to
<function>sd_bus_message_new_method_error()</function>, but in addition to the
error structure <parameter>p</parameter>, it takes an
- <citerefentry><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ <citerefentry project='man-pages'><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>
error value in parameter <parameter>error</parameter>. If the error
<parameter>p</parameter> is set (see
<citerefentry><refentrytitle>sd_bus_error_is_set</refentrytitle><manvolnum>3</manvolnum></citerefentry>),
<para>The <function>sd_bus_message_new_method_errnof()</function> function
creates an error reply similarly to
<function>sd_bus_message_new_method_error()</function>. It takes an
- <citerefentry><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ <citerefentry project='man-pages'><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry>
error value in parameter <parameter>error</parameter>, plus a <citerefentry
project='man-pages'><refentrytitle>printf</refentrytitle><manvolnum>3</manvolnum></citerefentry>
format string <parameter>format</parameter> and corresponding arguments.
parameter. The signal will be sent to path <parameter>path</parameter>, on the interface
<parameter>interface</parameter>, member <parameter>member</parameter>. When this message is
sent, no reply is expected. See
- <citerefentry><refentrytitle>sd_bus_message_new_call</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>sd_bus_message_new_method_call</refentrytitle><manvolnum>1</manvolnum></citerefentry>
for a short description of the meaning of the <parameter>path</parameter>,
<parameter>interface</parameter>, and <parameter>member</parameter> parameters.
</para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_start</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>sd_bus_message_can_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>sd_bus_can_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_monotonic_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_message_get_seqnum</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<para>The <function>sd_bus_reply_method_error()</function> function sends an error reply to the
<parameter>call</parameter> message. The error structure <parameter>e</parameter> specifies the
error to send, and is used as described in
- <citerefentry><refentrytitle>sd_bus_message_new_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+ <citerefentry><refentrytitle>sd_bus_message_new_method_error</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
If no reply is expected to <parameter>call</parameter>, this function succeeds without sending a
reply.</para>
<refname>sd_bus_set_connected_signal</refname>
<refname>sd_bus_get_connected_signal</refname>
- <refpurpose>Control emmission of local connection establishment signal on bus connections</refpurpose>
+ <refpurpose>Control emission of local connection establishment signal on bus connections</refpurpose>
</refnamediv>
<refsynopsisdiv>
socket binding for a bus connection object. If the <parameter>b</parameter> is true, the feature is enabled,
otherwise disabled (which is the default). When enabled, and the selected bus address refers to an
<filename>AF_UNIX</filename> socket in the file system which does not exist while the connection attempt is made an
- <citerefentry><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry> watch is installed on
+ <citerefentry project='man-pages'><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry> watch is installed on
it, waiting for the socket to appear. As soon as the socket appears the connection is made. This functionality is
useful in particular in early-boot programs that need to run before the system bus is available, but want to
connect to it the instant it may be connected to.</para>
<para><function>sd_bus_get_watch_bind()</function> may be used to query the current setting of this feature. It
returns zero when the feature is disabled, and positive if enabled.</para>
- <para>Note that no timeout is applied while it is waited for the socket to appear. This means that any synchronous
- remote operation (such as
+ <para>Note that no timeout is applied while we wait for the socket to appear. This means that any
+ synchronous remote operation (such as
<citerefentry><refentrytitle>sd_bus_call</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_add_match</refentrytitle><manvolnum>3</manvolnum></citerefentry> or
- <citerefentry><refentrytitle>sd_bus_request_name</refentrytitle><manvolnum>3</manvolnum></citerefentry>), that is
- used on a connection with this feature enabled that is not established yet might block unbounded if the socket is
- never created. However, asynchronous remote operations (such as
+ <citerefentry><refentrytitle>sd_bus_request_name</refentrytitle><manvolnum>3</manvolnum></citerefentry>),
+ that is used on a connection with this feature enabled that hasn't been established yet, might block
+ forever if the socket is never created. However, asynchronous remote operations (such as
<citerefentry><refentrytitle>sd_bus_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>sd_bus_add_match_async</refentrytitle><manvolnum>3</manvolnum></citerefentry> or
- <citerefentry><refentrytitle>sd_bus_request_match_async</refentrytitle><manvolnum>3</manvolnum></citerefentry>) do
- not block in this case, and safely enqueue the requested operations to be dispatched the instant the connection is
- set up.</para>
+ <citerefentry><refentrytitle>sd_bus_call_async</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>sd_bus_add_match_async</refentrytitle><manvolnum>3</manvolnum></citerefentry>)
+ do not block in this case, and safely enqueue the requested operations to be dispatched the instant the
+ connection is set up.</para>
<para>Use <citerefentry><refentrytitle>sd_bus_is_ready</refentrytitle><manvolnum>3</manvolnum></citerefentry> to
determine whether the connection is fully established, i.e. whether the peer socket has been bound, connected to
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
+ <citerefentry project='man-pages'><refentrytitle>inotify</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_call</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_add_match</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd_bus_request_name</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<refname>sd_bus_track_get_destroy_callback</refname>
<refname>sd_bus_destroy_t</refname>
- <refpurpose>Define the callback function for resource cleanup.</refpurpose>
+ <refpurpose>Define the callback function for resource cleanup</refpurpose>
</refnamediv>
<refsynopsisdiv>
<refname>sd_bus_slot_set_floating</refname>
<refname>sd_bus_slot_get_floating</refname>
- <refpurpose>Control whether a bus slot object is "floating".</refpurpose>
+ <refpurpose>Control whether a bus slot object is "floating"</refpurpose>
</refnamediv>
<refsynopsisdiv>
automatically as the code block is left:</para>
<programlisting>{
- __attribute__((cleanup(sd_event_unrefp)) sd_event *event = NULL;
+ __attribute__((cleanup(sd_event_unrefp))) sd_event *event = NULL;
int r;
…
r = sd_event_default(&event);
<refname>sd_event_source_get_destroy_callback</refname>
<refname>sd_event_destroy_t</refname>
- <refpurpose>Define the callback function for resource cleanup.</refpurpose>
+ <refpurpose>Define the callback function for resource cleanup</refpurpose>
</refnamediv>
<refsynopsisdiv>
<para><function>sd_hwdb_get()</function> queries the <parameter>hwdb</parameter> object created earlier
with <citerefentry><refentrytitle>sd_hwdb_new</refentrytitle><manvolnum>3</manvolnum></citerefentry> for
entries matching the specified string <parameter>modalias</parameter>, and returns the value
- corresponding to the the key <parameter>key</parameter>. The value is returned as a
+ corresponding to the key <parameter>key</parameter>. The value is returned as a
<constant>NUL</constant>-terminated string in <parameter>value</parameter>. It must not be modified by
the caller and is valid as long as a reference to <parameter>hwdb</parameter> is kept. When multiple
patterns in the database match <parameter>modalias</parameter>, the one with the highest priority is
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd-udev.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-hwdb</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-hwdb</refentrytitle><manvolnum>8</manvolnum></citerefentry>
</para>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd-udev.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-udevd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-hwdb</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-hwdb</refentrytitle><manvolnum>3</manvolnum></citerefentry>
</para>
<refnamediv>
<refname>sd_journal_has_runtime_files</refname>
<refname>sd_journal_has_persistent_files</refname>
- <refpurpose>Query availability of runtime or persistent journal files.</refpurpose>
+ <refpurpose>Query availability of runtime or persistent journal files</refpurpose>
</refnamediv>
<refsynopsisdiv>
code block is left:</para>
<programlisting>{
- __attribute__((cleanup(sd_login_monitor_unrefp)) sd_login_monitor *m = NULL;
+ __attribute__((cleanup(sd_login_monitor_unrefp))) sd_login_monitor *m = NULL;
int r;
…
r = sd_login_monitor_default(&m);
<refname>sd_machine_get_class</refname>
<refname>sd_machine_get_ifindices</refname>
<refpurpose>Determine the class and network interface indices of a
- locally running virtual machine or container.</refpurpose>
+ locally running virtual machine or container</refpurpose>
</refnamediv>
<refsynopsisdiv>
<refname>sd_peer_get_cgroup</refname>
<refpurpose>Determine the owner uid of the user unit or session,
or the session, user unit, system unit, container/VM or slice that
- a specific PID or socket peer belongs to.</refpurpose>
+ a specific PID or socket peer belongs to</refpurpose>
</refnamediv>
<refsynopsisdiv>
<para>Configuration files are read from directories in <filename>/etc/</filename>,
<filename>/run/</filename>, <filename>/usr/local/lib/</filename>, and <filename>/usr/lib/</filename>, in
- order of precedence, as listed in the SYNOPSIS section above. Files must have the the
+ order of precedence, as listed in the SYNOPSIS section above. Files must have the
<literal>.conf</literal> extension. Files in <filename>/etc/</filename> override files with the same name
in <filename>/run/</filename>, <filename>/usr/local/lib/</filename>, and
<filename>/usr/lib/</filename>. Files in <filename>/run/</filename> override files with the same name
<literal>net.ipv4.conf.enp3s0/200.forwarding</literal> or
<literal>net/ipv4/conf/enp3s0.200/forwarding</literal> may be used to refer to
<filename>/proc/sys/net/ipv4/conf/enp3s0.200/forwarding</filename>. A glob
- <citerefentry><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry> pattern may be
+ <citerefentry project='man-pages'><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry> pattern may be
used to write the same value to all matching keys. Keys for which an explicit pattern exists will be
excluded from any glob matching. In addition, a key may be explicitly excluded from being set by any
matching glob patterns by specifying the key name prefixed with a <literal>-</literal> character and not
followed by <literal>=</literal>, see SYNOPSIS.</para>
<para>Any access permission errors and attempts to write variables not present on the local system are
- logged, but do not cause the service to fail. Debug log level is used, which means that the message will
- not show up at all by default. Moreover, if a variable assignment is prefixed with a single
- <literal>-</literal> character, any failure to set the variable will be logged at debug level, but will
- not cause the service to fail. All other errors when setting variables are logged with higher priority
- and cause the service to return failure at the end (other variables are still processed).</para>
+ logged at debug level and do not cause the service to fail. Moreover, if a variable assignment is
+ prefixed with a single <literal>-</literal> character, failure to set the variable for other reasons will
+ be logged at debug level and will not cause the service to fail. In other cases, errors when setting
+ variables are logged with higher priority and cause the service to return failure at the end (after
+ processing other variables).</para>
<para>The settings configured with <filename>sysctl.d</filename> files will be applied early on boot. The
network interface-specific options will also be applied individually for each network interface as it
<para>The "Loaded:" line in the output will show <literal>loaded</literal> if the unit has been loaded into
memory. Other possible values for "Loaded:" include: <literal>error</literal> if there was a problem
- loading it, <literal>not-found</literal> if not unit file was found for this unit,
+ loading it, <literal>not-found</literal> if no unit file was found for this unit,
<literal>bad-setting</literal> if an essential unit file setting could not be parsed and
<literal>masked</literal> if the unit file has been masked. Along with showing the path to the unit file,
this line will also show the enablement state. Enabled commands start at boot. See the full table of
<listitem>
<para>Enable one or more units or unit instances. This will create a set of symlinks, as encoded in the
- <literal>[Install]</literal> sections of the indicated unit files. After the symlinks have been created,
+ [Install] sections of the indicated unit files. After the symlinks have been created,
the system manager configuration is reloaded (in a way equivalent to <command>daemon-reload</command>), in
order to ensure the changes are taken into account immediately. Note that this does
<emphasis>not</emphasis> have the effect of also starting any of the units being enabled. If this is
<option>--quiet</option>.
</para>
- <para>Note that this operation creates only the symlinks suggested in the <literal>[Install]</literal>
+ <para>Note that this operation creates only the symlinks suggested in the [Install]
section of the unit files. While this command is the recommended way to manipulate the unit configuration
directory, the administrator is free to make additional changes manually by placing or removing symlinks
below this directory. This is particularly useful to create configurations that deviate from the suggested
<para>This command expects valid unit names only, it does not accept paths to unit files.</para>
<para>In addition to the units specified as arguments, all units are disabled that are listed in the
- <varname>Also=</varname> setting contained in the <literal>[Install]</literal> section of any of the unit
+ <varname>Also=</varname> setting contained in the [Install] section of any of the unit
files being operated on.</para>
<para>This command implicitly reloads the system manager configuration after completing the operation. Note
<listitem>
<para>Reenable one or more units, as specified on the command line. This is a combination of
<command>disable</command> and <command>enable</command> and is useful to reset the symlinks a unit file is
- enabled with to the defaults configured in its <literal>[Install]</literal> section. This command expects
+ enabled with to the defaults configured in its [Install] section. This command expects
a unit name only, it does not accept paths to unit files.</para>
</listitem>
</varlistentry>
</row>
<row>
<entry><literal>static</literal></entry>
- <entry>The unit file is not enabled, and has no provisions for enabling in the <literal>[Install]</literal> unit file section.</entry>
+ <entry>The unit file is not enabled, and has no provisions for enabling in the [Install] unit file section.</entry>
<entry>0</entry>
</row>
<row>
<entry><literal>indirect</literal></entry>
- <entry>The unit file itself is not enabled, but it has a non-empty <varname>Also=</varname> setting in the <literal>[Install]</literal> unit file section, listing other unit files that might be enabled, or it has an alias under a different name through a symlink that is not specified in <varname>Also=</varname>. For template unit file, an instance different than the one specified in <varname>DefaultInstance=</varname> is enabled.</entry>
+ <entry>The unit file itself is not enabled, but it has a non-empty <varname>Also=</varname> setting in the [Install] unit file section, listing other unit files that might be enabled, or it has an alias under a different name through a symlink that is not specified in <varname>Also=</varname>. For template unit files, an instance different than the one specified in <varname>DefaultInstance=</varname> is enabled.</entry>
<entry>0</entry>
</row>
<row>
<entry><literal>disabled</literal></entry>
- <entry>The unit file is not enabled, but contains an <literal>[Install]</literal> section with installation instructions.</entry>
+ <entry>The unit file is not enabled, but contains an [Install] section with installation instructions.</entry>
<entry>> 0</entry>
</row>
<row>
<para>This command will load unit files and print warnings if any errors are detected. Files specified
on the command line will be loaded, but also any other units referenced by them. The full unit search
path is formed by combining the directories for all command line arguments, and the usual unit load
- paths (variable <varname>$SYSTEMD_UNIT_PATH</varname> is supported, and may be used to replace or
+ paths. The variable <varname>$SYSTEMD_UNIT_PATH</varname> is supported, and may be used to replace or
augment the compiled in set of unit load paths; see
- <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>). All
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>. All
units files present in the directories containing the command line arguments will be used in preference
to the other paths.</para>
<command>dot</command> command (see above), this selects which
relationships are shown in the dependency graph. Both options
require a
- <citerefentry project='die-net'><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ <citerefentry project='man-pages'><refentrytitle>glob</refentrytitle><manvolnum>7</manvolnum></citerefentry>
pattern as an argument, which will be matched against the
left-hand and the right-hand, respectively, nodes of a
relationship.</para>
<varlistentry>
<term><option>--man=no</option></term>
- <listitem><para>Do not invoke man to verify the existence of
- man pages listed in <varname>Documentation=</varname>.
- </para></listitem>
+ <listitem><para>Do not invoke
+ <citerefentry project='man-pages'><refentrytitle>man</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ to verify the existence of man pages listed in <varname>Documentation=</varname>.</para></listitem>
</varlistentry>
<varlistentry>
<refnamediv>
<refname>systemd-bless-boot-generator</refname>
- <refpurpose>Pull <filename>systemd-bless-boot.service</filename> into the initial boot transaction when boot counting is in effect.</refpurpose>
+ <refpurpose>Pull <filename>systemd-bless-boot.service</filename> into the initial boot transaction when boot counting is in effect</refpurpose>
</refnamediv>
<refsynopsisdiv>
<listitem><para>The boot manager optionally reads a random seed from the ESP partition, combines it
with a 'system token' stored in a persistent EFI variable and derives a random seed to use by the OS as
- entropy pool initializaton, providing a full entropy pool during early boot.</para></listitem>
+ entropy pool initialization, providing a full entropy pool during early boot.</para></listitem>
</itemizedlist>
<para><citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
is maintained persistently, while <varname>LoaderConfigTimeoutOneShot</varname> is a one-time override which is
read once (in which case it takes precedence over <varname>LoaderConfigTimeout</varname>) and then
removed. <varname>LoaderConfigTimeout</varname> may be manipulated with the
- <keycap>t</keycap>/<keycap>T</keycap> keys, see above.)</para></listitem>
+ <keycap>t</keycap>/<keycap>T</keycap> keys, see above.</para></listitem>
</varlistentry>
<varlistentry>
boots. <citerefentry><refentrytitle>bootctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
<option>set-default</option> and <option>set-oneshot</option> commands make use of these variables. The boot
loader modifies <varname>LoaderEntryDefault</varname> on request, when the <keycap>d</keycap> key is used, see
- above.)</para></listitem>
+ above.</para></listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>LoaderSystemToken</varname></term>
- <listitem><para>A binary random data field, that is used for generating the random see to pass to the
- OS (see above). Note that this random data is generally only generated once, during OS installation,
- and is then never updated again.</para></listitem>
+ <listitem><para>A binary random data field, that is used for generating the random seed to pass to
+ the OS (see above). Note that this random data is generally only generated once, during OS
+ installation, and is then never updated again.</para></listitem>
</varlistentry>
</variablelist>
</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--image=<replaceable>path</replaceable></option></term>
+ <listitem><para>Takes a path to a disk image file or block device node. If specified all operations
+ are applied to file system in the indicated disk image. This is similar to <option>--root=</option>
+ but operates on file systems stored in disk images or block devices. The disk image should either
+ contain just a file system or a set of file systems within a GPT partition table, following the
+ <ulink url="https://systemd.io/DISCOVERABLE_PARTITIONS">Discoverable Partitions
+ Specification</ulink>. For further information on supported disk images, see
+ <citerefentry><refentrytitle>systemd-nspawn</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
+ switch of the same name.</para></listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>--locale=<replaceable>LOCALE</replaceable></option></term>
<term><option>--locale-messages=<replaceable>LOCALE</replaceable></option></term>
option should not be used lightly.</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--welcome=</option></term>
+
+ <listitem><para>Takes a boolean argument. By default when prompting the user for configuration
+ options a brief welcome text is shown before the first question is asked. Pass false to this option
+ to turn off the welcome text.</para></listitem>
+ </varlistentry>
+
<xi:include href="standard-options.xml" xpointer="help" />
<xi:include href="standard-options.xml" xpointer="version" />
</variablelist>
<refname>systemd-gpt-auto-generator</refname>
<refpurpose>Generator for automatically discovering and mounting root, <filename>/home/</filename>,
<filename>/srv/</filename>, <filename>/var/</filename> and <filename>/var/tmp/</filename> partitions, as
- well as discovering and enabling swap partitions, based on GPT partition type GUIDs.</refpurpose>
+ well as discovering and enabling swap partitions, based on GPT partition type GUIDs</refpurpose>
</refnamediv>
<refsynopsisdiv>
</para>
<para>where
- <option>cursor</option> is a cursor string,
- <option>num_skip</option> is an integer,
- <option>num_entries</option> is an unsigned integer.
+ <replaceable>cursor</replaceable> is a cursor string,
+ <replaceable>num_skip</replaceable> is an integer,
+ <replaceable>num_entries</replaceable> is an unsigned integer.
</para>
<para>Range defaults to all available events.</para>
those files can be specified using
<varname>TrustedCertificateFile=</varname>,
<varname>ServerCertificateFile=</varname>,
- <varname>ServerKeyFile=</varname>, in
+ and <varname>ServerKeyFile=</varname> in
<filename>/etc/systemd/journal-remote.conf</filename> and
<filename>/etc/systemd/journal-upload.conf</filename>,
respectively. The default locations can be queried by using
errors. In order to react gracefully in this case it is recommended that programs logging to standard output/error
ignore such errors. If the <constant>SIGPIPE</constant> UNIX signal handler is not blocked or turned off, such
write attempts will also result in such process signals being generated, see
- <citerefentry><refentrytitle>signal</refentrytitle><manvolnum>7</manvolnum></citerefentry>. To mitigate this issue,
- systemd service manager explicitly turns off the <constant>SIGPIPE</constant> signal for all invoked processes by
- default (this may be changed for each unit individually via the <varname>IgnoreSIGPIPE=</varname> option, see
+ <citerefentry project='man-pages'><refentrytitle>signal</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
+ To mitigate this issue, systemd service manager explicitly turns off the <constant>SIGPIPE</constant>
+ signal for all invoked processes by default (this may be changed for each unit individually via the
+ <varname>IgnoreSIGPIPE=</varname> option, see
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
- details). After the standard output/standard error streams have been terminated they may not be recovered until the
- services they are associated with are restarted. Note that during normal operation,
- <filename>systemd-journald.service</filename> stores copies of the file descriptors for those streams in the
- service manager. If <filename>systemd-journald.service</filename> is restarted using <command>systemctl
- restart</command> or equivalent operation instead of a pair of separate <command>systemctl stop</command> and
- <command>systemctl start</command> commands (or equivalent operations), these stream connections are not terminated
- and survive the restart. It is thus safe to restart <filename>systemd-journald.service</filename>, but stopping it
- is not recommended.</para>
+ details). After the standard output/standard error streams have been terminated they may not be recovered
+ until the services they are associated with are restarted. Note that during normal operation,
+ <filename>systemd-journald.service</filename> stores copies of the file descriptors for those streams in
+ the service manager. If <filename>systemd-journald.service</filename> is restarted using
+ <command>systemctl restart</command> or equivalent operation instead of a pair of separate
+ <command>systemctl stop</command> and <command>systemctl start</command> commands (or equivalent
+ operations), these stream connections are not terminated and survive the restart. It is thus safe to
+ restart <filename>systemd-journald.service</filename>, but stopping it is not recommended.</para>
<para>Note that the log record metadata for records transferred via such standard output/error streams reflect the
metadata of the peer the stream was originally created for. If the stream connection is passed on to other
<citerefentry><refentrytitle>systemd-user-sessions.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>loginctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>logind.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>pam_systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>sd-login</refentrytitle><manvolnum>3</manvolnum></citerefentry>
</para>
</refsect1>
<listitem><para>The
<citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry> library
exposes the
- <citerefentry><refentrytitle>sd_bus_open_system_container</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>sd_bus_open_system_machine</refentrytitle><manvolnum>3</manvolnum></citerefentry>
call to connect to the system bus of any registered container.</para></listitem>
<listitem><para>The
<replaceable>WHERE</replaceable>.</para>
<para>In many ways, <command>systemd-mount</command> is similar to the lower-level
- <citerefentry project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry> command, however instead
- of executing the mount operation directly and immediately, <command>systemd-mount</command> schedules it through
- the service manager job queue, so that it may pull in further dependencies (such as parent mounts, or a file system
- checker to execute a priori), and may make use of the auto-mounting logic.</para>
+ <citerefentry project='man-pages'><refentrytitle>mount</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ command, however instead of executing the mount operation directly and immediately,
+ <command>systemd-mount</command> schedules it through the service manager job queue, so that it may pull
+ in further dependencies (such as parent mounts, or a file system checker to execute a priori), and may
+ make use of the auto-mounting logic.</para>
<para>The command takes either one or two arguments. If only one argument is specified it should refer to
a block device or regular file containing a file system (e.g. <literal>/dev/sdb1</literal> or
label and other metadata, and is mounted to a directory below <filename>/run/media/system/</filename>
whose name is generated from the file system label. In this mode the block device or image file must
exist at the time of invocation of the command, so that it may be probed. If the device is found to be a
- removable block device (e.g. a USB stick) an automount point instead of a regular mount point is created
+ removable block device (e.g. a USB stick), an automount point is created instead of a regular mount point
(i.e. the <option>--automount=</option> option is implied, see below).</para>
- <para>If two arguments are specified the first indicates the mount source (the <replaceable>WHAT</replaceable>) and
- the second indicates the path to mount it on (the <replaceable>WHERE</replaceable>). In this mode no probing of the
- source is attempted, and a backing device node doesn't have to exist yet. However, if this mode is combined with
- <option>--discover</option>, device node probing for additional metadata is enabled, and – much like in the
- single-argument case discussed above – the specified device has to exist at the time of invocation of the
- command.</para>
+ <para>If two arguments are specified, the first indicates the mount source (the
+ <replaceable>WHAT</replaceable>) and the second indicates the path to mount it on (the
+ <replaceable>WHERE</replaceable>). In this mode no probing of the source is attempted, and a backing
+ device node doesn't have to exist. However, if this mode is combined with <option>--discover</option>,
+ device node probing for additional metadata is enabled, and – much like in the single-argument case
+ discussed above – the specified device has to exist at the time of invocation of the command.</para>
<para>Use the <option>--list</option> command to show a terse table of all local, known block devices with file
systems that may be mounted with this command.</para>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-networkd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ <citerefentry project='man-pages'><refentrytitle>dracut</refentrytitle><manvolnum>8</manvolnum></citerefentry>
</para>
</refsect1>
<citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-networkd-wait-online.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>systemd-networkd-generator.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ <citerefentry><refentrytitle>systemd-network-generator.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
</para>
</refsect1>
<para>Single file system images (i.e. file systems without a surrounding partition table) can be opened using
dm-verity if the integrity data is passed using the <option>--root-hash=</option> and
- <option>--verity-data=</option> options.</para>
+ <option>--verity-data=</option> (and optionally <option>--root-hash-sig=</option>) options.</para>
<para>Any other partitions, such as foreign partitions or swap partitions are not mounted. May not be specified
together with <option>--directory=</option>, <option>--template=</option>.</para></listitem>
is read from it and automatically used, also as formatted hexadecimal characters.</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--root-hash-sig=</option></term>
+
+ <listitem><para>Takes a PKCS7 formatted binary signature of the <option>--root-hash=</option> option as a path
+ to a DER encoded signature file or as an ASCII base64 string encoding of the DER encoded signature, prefixed
+ by <literal>base64:</literal>. The dm-verity volume will only be opened if the signature of the root hash hex
+ string is valid and done by a public key present in the kernel keyring. If this option is not specified, but a
+ file with the <filename>.roothash.p7s</filename> suffix is found next to the image file, bearing otherwise the
+ same name (except if the image has the <filename>.raw</filename> suffix, in which case the signature file must
+ not have it in its name), the signature is read from it and automatically used.</para></listitem>
+ </varlistentry>
+
<varlistentry>
<term><option>--verity-data=</option></term>
<term><option>-u</option></term>
<term><option>--user=</option></term>
- <listitem><para>After transitioning into the container, change
- to the specified user-defined in the container's user
- database. Like all other systemd-nspawn features, this is not
- a security feature and provides protection against accidental
- destructive operations only.</para></listitem>
+ <listitem><para>After transitioning into the container, change to the specified user defined in the
+ container's user database. Like all other systemd-nspawn features, this is not a security feature and
+ provides protection against accidental destructive operations only.</para></listitem>
</varlistentry>
<varlistentry>
With option <option>yes</option> systemd-nspawn waits for the
<literal>READY=1</literal> message from the init process in the container
before sending its own to systemd. For more details about notifications
- see <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>).</para></listitem>
+ see <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para></listitem>
</varlistentry>
</variablelist>
<varlistentry>
<term><option>--no-new-privileges=</option></term>
- <listitem><para>Takes a boolean argument. Specifies the value of the <constant>PR_SET_NO_NEW_PRIVS</constant>
- flag for the container payload. Defaults to off. When turned on the payload code of the container cannot
- acquire new privileges, i.e. the "setuid" file bit as well as file system capabilities will not have an effect
- anymore. See <citerefentry
- project='man-pages'><refentrytitle>prctl</refentrytitle><manvolnum>2</manvolnum></citerefentry> for details
- about this flag. </para></listitem>
+ <listitem><para>Takes a boolean argument. Specifies the value of the
+ <constant>PR_SET_NO_NEW_PRIVS</constant> flag for the container payload. Defaults to off. When turned
+ on the payload code of the container cannot acquire new privileges, i.e. the "setuid" file bit as
+ well as file system capabilities will not have an effect anymore. See <citerefentry
+ project='man-pages'><refentrytitle>prctl</refentrytitle><manvolnum>2</manvolnum></citerefentry> for
+ details about this flag. </para></listitem>
</varlistentry>
<varlistentry>
- <term><option>--system-call-filter=</option></term>
-
- <listitem><para>Alter the system call filter applied to containers. Takes a space-separated list of system call
- names or group names (the latter prefixed with <literal>@</literal>, as listed by the
- <command>syscall-filter</command> command of
+ <term><option>--system-call-filter=</option></term> <listitem><para>Alter the system call filter
+ applied to containers. Takes a space-separated list of system call names or group names (the latter
+ prefixed with <literal>@</literal>, as listed by the <command>syscall-filter</command> command of
<citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>). Passed
- system calls will be permitted. The list may optionally be prefixed by <literal>~</literal>, in which case all
- listed system calls are prohibited. If this command line option is used multiple times the configured lists are
- combined. If both a positive and a negative list (that is one system call list without and one with the
- <literal>~</literal> prefix) are configured, the negative list takes precedence over the positive list. Note
- that <command>systemd-nspawn</command> always implements a system call whitelist (as opposed to a blacklist),
- and this command line option hence adds or removes entries from the default whitelist, depending on the
- <literal>~</literal> prefix. Note that the applied system call filter is also altered implicitly if additional
- capabilities are passed using the <command>--capabilities=</command>.</para></listitem>
+ system calls will be permitted. The list may optionally be prefixed by <literal>~</literal>, in which
+ case all listed system calls are prohibited. If this command line option is used multiple times the
+ configured lists are combined. If both a positive and a negative list (that is one system call list
+ without and one with the <literal>~</literal> prefix) are configured, the negative list takes
+ precedence over the positive list. Note that <command>systemd-nspawn</command> always implements a
+ system call allow list (as opposed to a deny list!), and this command line option hence adds or
+ removes entries from the default allow list, depending on the <literal>~</literal> prefix. Note that
+ the applied system call filter is also altered implicitly if additional capabilities are passed using
+ the <command>--capabilities=</command>.</para></listitem>
</varlistentry>
<varlistentry>
<para>Finally, if set to <literal>auto</literal> the file is left as it is if private networking is
turned on (see <option>--private-network</option>). Otherwise, if
- <filename>systemd-resolved.service</filename> is connectible its stub
- <filename>resolv.conf</filename> file is used, and if not the host's
- <filename>/etc/resolv.conf</filename> file is used. In the latter cases the file is copied if the
- image is writable, and bind mounted otherwise.</para>
+ <filename>systemd-resolved.service</filename> is running its stub <filename>resolv.conf</filename>
+ file is used, and if not the host's <filename>/etc/resolv.conf</filename> file. In the latter cases
+ the file is copied if the image is writable, and bind mounted otherwise.</para>
<para>It's recommended to use <literal>copy-…</literal> or <literal>replace-…</literal> if the
container shall be able to make changes to the DNS configuration on its own, deviating from the
<varlistentry>
<term><option>--timezone=</option></term>
- <listitem><para>Configures how <filename>/etc/localtime</filename> inside of the container (i.e. local timezone
- synchronization from host to container) shall be handled. Takes one of <literal>off</literal>,
- <literal>copy</literal>, <literal>bind</literal>, <literal>symlink</literal>, <literal>delete</literal> or
- <literal>auto</literal>. If set to <literal>off</literal> the <filename>/etc/localtime</filename> file in the
- container is left as it is included in the image, and neither modified nor bind mounted over. If set to
- <literal>copy</literal> the <filename>/etc/localtime</filename> file of the host is copied into the
- container. Similar, if <literal>bind</literal> is used, it is bind mounted from the host into the container. If
- set to <literal>symlink</literal> a symlink from <filename>/etc/localtime</filename> in the container is
- created pointing to the matching the timezone file of the container that matches the timezone setting on the
- host. If set to <literal>delete</literal> the file in the container is deleted, should it exist. If set to
- <literal>auto</literal> and the <filename>/etc/localtime</filename> file of the host is a symlink, then
- <literal>symlink</literal> mode is used, and <literal>copy</literal> otherwise, except if the image is
- read-only in which case <literal>bind</literal> is used instead. Defaults to
+ <listitem><para>Configures how <filename>/etc/localtime</filename> inside of the container
+ (i.e. local timezone synchronization from host to container) shall be handled. Takes one of
+ <literal>off</literal>, <literal>copy</literal>, <literal>bind</literal>, <literal>symlink</literal>,
+ <literal>delete</literal> or <literal>auto</literal>. If set to <literal>off</literal> the
+ <filename>/etc/localtime</filename> file in the container is left as it is included in the image, and
+ neither modified nor bind mounted over. If set to <literal>copy</literal> the
+ <filename>/etc/localtime</filename> file of the host is copied into the container. Similarly, if
+ <literal>bind</literal> is used, the file is bind mounted from the host into the container. If set to
+ <literal>symlink</literal>, a symlink is created pointing from <filename>/etc/localtime</filename> in
+ the container to the timezone file in the container that matches the timezone setting on the host. If
+ set to <literal>delete</literal>, the file in the container is deleted, should it exist. If set to
+ <literal>auto</literal> and the <filename>/etc/localtime</filename> file of the host is a symlink,
+ then <literal>symlink</literal> mode is used, and <literal>copy</literal> otherwise, except if the
+ image is read-only in which case <literal>bind</literal> is used instead. Defaults to
<literal>auto</literal>.</para></listitem>
</varlistentry>
<para>This installs a minimal Fedora distribution into the
directory <filename index="false">/var/lib/machines/f&fedora_latest_version;</filename>
- and then boots an OS in a namespace container in it. Because the installation
+ and then boots that OS in a namespace container. Because the installation
is located underneath the standard <filename>/var/lib/machines/</filename>
directory, it is also possible to start the machine using
<command>systemd-nspawn -M f&fedora_latest_version;</command>.</para>
<para>This installs a minimal Debian unstable distribution into
the directory <filename>~/debian-tree/</filename> and then
- spawns a shell in a namespace container in it.</para>
+ spawns a shell from this image in a namespace container.</para>
<para><command>debootstrap</command> supports
<ulink url="https://www.debian.org">Debian</ulink>,
<citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>, with
its <command>bootctl random-seed</command> functionality.</para>
- <para>When loading the random seed from disk its file is immediately updated with a new seed retrieved
+ <para>When loading the random seed from disk, the file is immediately updated with a new seed retrieved
from the kernel, in order to ensure no two boots operate with the same random seed. This new seed is
retrieved synchronously from the kernel, which means the service will not complete start-up until the
random pool is fully initialized. On entropy-starved systems this may take a while. This functionality is
available but not yet used. Specifically the following use cases are among those covered:</para>
<itemizedlist>
- <listitem><para>The root partition may be grown to cover the whole available disk space</para></listitem>
- <listitem><para>A <filename>/home/</filename>, swap or <filename>/srv/</filename> partition can be added in</para></listitem>
- <listitem><para>A second (or third, …) root partition may be added in, to cover A/B style setups
+ <listitem><para>The root partition may be grown to cover the whole available disk space.</para></listitem>
+ <listitem><para>A <filename>/home/</filename>, swap or <filename>/srv/</filename> partition can be
+ added.</para></listitem>
+ <listitem><para>A second (or third, …) root partition may be added, to cover A/B style setups
where a second version of the root file system is alternatingly used for implementing update
schemes. The deployed image would carry only a single partition ("A") but on first boot a second
partition ("B") for this purpose is automatically created.</para></listitem>
<orderedlist>
<listitem><para>The <filename>repart.d/*.conf</filename> configuration files are loaded and parsed,
- and ordered by filename (without the directory suffix). </para></listitem>
+ and ordered by filename (without the directory prefix).</para></listitem>
<listitem><para>The partition table already existing on the block device is loaded and
parsed.</para></listitem>
</orderedlist>
<para>As exception to the normally strictly incremental operation, when called in a special "factory
- reset" mode <command>systemd-repart</command> may also be used to erase select existing partitions to
+ reset" mode, <command>systemd-repart</command> may also be used to erase existing partitions to
reset an installation back to vendor defaults. This mode of operation is used when either the
<option>--factory-reset=yes</option> switch is passed on the tool's command line, or the
<option>systemd.factory_reset=yes</option> option specified on the kernel command line, or the
<varname>FactoryReset</varname> EFI variable (vendor UUID
<constant>8cf2644b-4b0b-428f-9387-6d876050dc67</constant>) is set to "yes". It alters the algorithm above
- slightly: between the 3rd and the 4th step above the any partition marked explicitly via the
+ slightly: between the 3rd and the 4th step above any partition marked explicitly via the
<varname>FactoryReset=</varname> boolean is deleted, and the algorithm restarted, thus immediately
re-creating these partitions anew empty.</para>
<varlistentry>
<term><option>--definitions=</option></term>
- <listitem><para>Takes a file system path. If specified the <filename>*.conf</filename> are directly
- read from the specified directory instead of searching in
- <filename>/usr/lib/repart.d/*.conf</filename>, <filename>/etc/repart.d/*.conf</filename>,
+ <listitem><para>Takes a file system path. If specified the <filename>*.conf</filename> files are read
+ from the specified directory instead of searching in <filename>/usr/lib/repart.d/*.conf</filename>,
+ <filename>/etc/repart.d/*.conf</filename>,
<filename>/run/repart.d/*.conf</filename>.</para></listitem>
</varlistentry>
<title>Options</title>
<para>The following options can be configured in the
- <literal>[Sleep]</literal> section of
+ [Sleep] section of
<filename>/etc/systemd/sleep.conf</filename> or a
<filename>sleep.conf.d</filename> file:</para>
</refmeta>
<refnamediv>
<refname>systemd-socket-proxyd</refname>
- <refpurpose>Bidirectionally proxy local sockets to another (possibly remote) socket.</refpurpose>
+ <refpurpose>Bidirectionally proxy local sockets to another (possibly remote) socket</refpurpose>
</refnamediv>
<refsynopsisdiv>
<cmdsynopsis>
url="https://www.freedesktop.org/wiki/Software/systemd/inhibit">Inhibitor
interface</ulink>.</para>
- <para>Note that
- <filename>systemd-suspend.service</filename>,
- <filename>systemd-hibernate.service</filename>, and
- <filename>systemd-hybrid-sleep.service</filename>
- <filename>systemd-suspend-then-hibernate.service</filename>
- should never be executed directly. Instead, trigger system sleep
- states with a command such as <literal>systemctl suspend</literal>
- or similar.</para>
+ <para>Note that <filename>systemd-suspend.service</filename>,
+ <filename>systemd-hibernate.service</filename>, <filename>systemd-hybrid-sleep.service</filename>, and
+ <filename>systemd-suspend-then-hibernate.service</filename> should never be executed directly. Instead,
+ trigger system sleep with a command such as <command>systemctl suspend</command> or <command>systemctl
+ hibernate</command>.</para>
<para>Internally, this service will echo a string like
<literal>mem</literal> into <filename>/sys/power/state</filename>,
to trigger the actual system suspend. What exactly is written
- where can be configured in the <literal>[Sleep]</literal> section
+ where can be configured in the [Sleep] section
of <filename>/etc/systemd/sleep.conf</filename> or a
<filename>sleep.conf.d</filename> file. See
<citerefentry><refentrytitle>systemd-sleep.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
<title>Options</title>
<para>All options are configured in the
- <literal>[Manager]</literal> section:</para>
+ [Manager] section:</para>
<variablelist class='config-directives'>
for details. During the first phase of the shutdown operation the system and service manager remains running
and hence <varname>RuntimeWatchdogSec=</varname> is still honoured. In order to define a timeout on this first
phase of system shutdown, configure <varname>JobTimeoutSec=</varname> and <varname>JobTimeoutAction=</varname>
- in the <literal>[Unit]</literal> section of the <filename>shutdown.target</filename> unit. By default
+ in the [Unit] section of the <filename>shutdown.target</filename> unit. By default
<varname>RuntimeWatchdogSec=</varname> defaults to 0 (off), and <varname>RebootWatchdogSec=</varname> to
10min. <varname>KExecWatchdogSec=</varname> may be used to additionally enable the watchdog when kexec
is being executed rather than when rebooting. Note that if the kernel does not reset the watchdog on kexec (depending
units. See
<citerefentry><refentrytitle>setrlimit</refentrytitle><manvolnum>2</manvolnum></citerefentry> for
details. These settings may be overridden in individual units using the corresponding
- <varname>LimitXXX=</varname> directives, see
- <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>, for
- details, and they accept the same parameter syntax. Note that these resource limits are only defaults
+ <varname>LimitXXX=</varname> directives and they accept the same parameter syntax,
+ see <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for details. Note that these resource limits are only defaults
for units, they are not applied to the service manager process (i.e. PID 1) itself.</para></listitem>
</varlistentry>
<refnamediv>
<refname>systemd-time-wait-sync.service</refname>
<refname>systemd-time-wait-sync</refname>
- <refpurpose>Wait Until Kernel Time Synchronized</refpurpose>
+ <refpurpose>Wait until kernel time is synchronized</refpurpose>
</refnamediv>
<refsynopsisdiv>
<term><option>--timeout-signal=</option></term>
<listitem>
<para>Set the signal which <filename>systemd-udevd</filename> will send to
- forked off processes after reaching event timeout. The setting can be overriden
+ forked off processes after reaching event timeout. The setting can be overridden
at boot time with the kernel command line option
<varname>udev.timeout_signal=</varname>. Setting to <constant>SIGABRT</constant>
may be helpful in order to debug worker timeouts. Defaults to
this unit type. See
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the common options of all unit configuration files. The common
- configuration items are configured in the generic <literal>[Unit]</literal> and
- <literal>[Install]</literal> sections. The automount specific configuration options
- are configured in the <literal>[Automount]</literal> section.</para>
+ configuration items are configured in the generic [Unit] and
+ [Install] sections. The automount specific configuration options
+ are configured in the [Automount] section.</para>
<para>Automount units must be named after the automount directories they control. Example: the automount point
<filename index="false">/home/lennart</filename> must be configured in a unit file
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the common options of all unit configuration files. The common
configuration items are configured in the generic
- <literal>[Unit]</literal> and <literal>[Install]</literal>
- sections. A separate <literal>[Device]</literal> section does not
+ [Unit] and [Install]
+ sections. A separate [Device] section does not
exist, since no device-specific options may be configured.</para>
<para>systemd will dynamically create device units for all kernel
<para>Device units will be reloaded by systemd whenever the
corresponding device generates a <literal>changed</literal> event.
Other units can use <varname>ReloadPropagatedFrom=</varname> to react
- to that event</para>
+ to that event.</para>
</refsect1>
<refsect1>
<refsect1>
<title>[Service] Section Options</title>
- <para>The network service file contains a <literal>[Service]</literal>
+ <para>The network service file contains a [Service]
section, which specifies a discoverable network service announced in a
local network with Multicast DNS broadcasts.</para>
<xi:include href="system-only.xml" xpointer="singular"/></listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>RootHashSignature=</varname></term>
+
+ <listitem><para>Takes a PKCS7 formatted binary signature of the <varname>RootHash=</varname> option as a path
+ to a DER encoded signature file or as an ASCII base64 string encoding of the DER encoded signature, prefixed
+ by <literal>base64:</literal>. The dm-verity volume will only be opened if the signature of the root hash
+ signature is valid and created by a public key present in the kernel keyring. If this option is not specified,
+ but a file with the <filename>.roothash.p7s</filename> suffix is found next to the image file, bearing otherwise
+ the same name (except if the image has the <filename>.raw</filename> suffix, in which case the signature file
+ must not have it in its name), the signature is read from it and automatically used.</para>
+
+ <xi:include href="system-only.xml" xpointer="singular"/></listitem>
+ </varlistentry>
+
<varlistentry>
<term><varname>RootVerity=</varname></term>
files or directories. Moreover <varname>ProtectSystem=strict</varname> and
<varname>ProtectHome=read-only</varname> are implied, thus prohibiting the service to write to
arbitrary file system locations. In order to allow the service to write to certain directories, they
- have to be whitelisted using <varname>ReadWritePaths=</varname>, but care must be taken so that
+ have to be allow-listed using <varname>ReadWritePaths=</varname>, but care must be taken so that
UID/GID recycling doesn't create security issues involving files created by the service. Use
<varname>RuntimeDirectory=</varname> (see below) in order to assign a writable runtime directory to a
service, owned by the dynamic user/group and removed automatically when the unit is terminated. Use
<varlistentry>
<term><varname>AppArmorProfile=</varname></term>
- <listitem><para>Takes a profile name as argument. The process executed by the unit will switch to this profile
- when started. Profiles must already be loaded in the kernel, or the unit will fail. This result in a non
- operation if AppArmor is not enabled. If prefixed by <literal>-</literal>, all errors will be ignored. This
- does not affect commands prefixed with <literal>+</literal>.</para></listitem>
+ <listitem><para>Takes a profile name as argument. The process executed by the unit will switch to
+ this profile when started. Profiles must already be loaded in the kernel, or the unit will fail. If
+ prefixed by <literal>-</literal>, all errors will be ignored. This setting has no effect if AppArmor
+ is not enabled. This setting not affect commands prefixed with <literal>+</literal>.</para>
+ </listitem>
</varlistentry>
<varlistentry>
kernel default of <literal><constant>private-anonymous</constant>
<constant>shared-anonymous</constant> <constant>elf-headers</constant>
<constant>private-huge</constant></literal>). See
- <citerefentry><refentrytitle>core</refentrytitle><manvolnum>5</manvolnum></citerefentry> for the
- meaning of the mapping types. When specified multiple times, all specified masks are ORed. When not
- set, or if the empty value is assigned, the inherited value is not changed.</para>
+ <citerefentry project='man-pages'><refentrytitle>core</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ for the meaning of the mapping types. When specified multiple times, all specified masks are
+ ORed. When not set, or if the empty value is assigned, the inherited value is not changed.</para>
<example>
<title>Add DAX pages to the dump filter</title>
in <varname>NUMAMask=</varname>. For more details on each policy please see,
<citerefentry><refentrytitle>set_mempolicy</refentrytitle><manvolnum>2</manvolnum></citerefentry>. For overall
overview of NUMA support in Linux see,
- <citerefentry><refentrytitle>numa</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ <citerefentry project='man-pages'><refentrytitle>numa</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
</para></listitem>
</varlistentry>
<varname>RootDirectory=</varname> or <varname>RootImage=</varname> these paths always reside on the host and
are mounted from there into the unit's file system namespace.</para>
- <para>If <varname>DynamicUser=</varname> is used in conjunction with <varname>StateDirectory=</varname>,
- <varname>CacheDirectory=</varname> and <varname>LogsDirectory=</varname> is slightly altered: the directories
- are created below <filename>/var/lib/private</filename>, <filename>/var/cache/private</filename> and
+ <para>If <varname>DynamicUser=</varname> is used in conjunction with
+ <varname>StateDirectory=</varname>, the logic for <varname>CacheDirectory=</varname> and
+ <varname>LogsDirectory=</varname> is slightly altered: the directories are created below
+ <filename>/var/lib/private</filename>, <filename>/var/cache/private</filename> and
<filename>/var/log/private</filename>, respectively, which are host directories made inaccessible to
- unprivileged users, which ensures that access to these directories cannot be gained through dynamic user ID
- recycling. Symbolic links are created to hide this difference in behaviour. Both from perspective of the host
- and from inside the unit, the relevant directories hence always appear directly below
- <filename>/var/lib</filename>, <filename>/var/cache</filename> and <filename>/var/log</filename>.</para>
+ unprivileged users, which ensures that access to these directories cannot be gained through dynamic
+ user ID recycling. Symbolic links are created to hide this difference in behaviour. Both from
+ perspective of the host and from inside the unit, the relevant directories hence always appear
+ directly below <filename>/var/lib</filename>, <filename>/var/cache</filename> and
+ <filename>/var/log</filename>.</para>
<para>Use <varname>RuntimeDirectory=</varname> to manage one or more runtime directories for the unit and bind
their lifetime to the daemon runtime. This is particularly useful for unprivileged daemons that cannot create
contain symlinks, they are resolved relative to the root directory set with
<varname>RootDirectory=</varname>/<varname>RootImage=</varname>.</para>
- <para>Paths listed in <varname>ReadWritePaths=</varname> are accessible from within the namespace with the same
- access modes as from outside of it. Paths listed in <varname>ReadOnlyPaths=</varname> are accessible for
- reading only, writing will be refused even if the usual file access controls would permit this. Nest
- <varname>ReadWritePaths=</varname> inside of <varname>ReadOnlyPaths=</varname> in order to provide writable
- subdirectories within read-only directories. Use <varname>ReadWritePaths=</varname> in order to whitelist
- specific paths for write access if <varname>ProtectSystem=strict</varname> is used.</para>
+ <para>Paths listed in <varname>ReadWritePaths=</varname> are accessible from within the namespace
+ with the same access modes as from outside of it. Paths listed in <varname>ReadOnlyPaths=</varname>
+ are accessible for reading only, writing will be refused even if the usual file access controls would
+ permit this. Nest <varname>ReadWritePaths=</varname> inside of <varname>ReadOnlyPaths=</varname> in
+ order to provide writable subdirectories within read-only directories. Use
+ <varname>ReadWritePaths=</varname> in order to allow-list specific paths for write access if
+ <varname>ProtectSystem=strict</varname> is used.</para>
<para>Paths listed in <varname>InaccessiblePaths=</varname> will be made inaccessible for processes inside
the namespace along with everything below them in the file system hierarchy. This may be more restrictive than
<term><varname>PrivateTmp=</varname></term>
<listitem><para>Takes a boolean argument. If true, sets up a new file system namespace for the executed
- processes and mounts private <filename>/tmp</filename> and <filename>/var/tmp</filename> directories inside it
- that is not shared by processes outside of the namespace. This is useful to secure access to temporary files of
+ processes and mounts private <filename>/tmp/</filename> and <filename>/var/tmp/</filename> directories inside it
+ that are not shared by processes outside of the namespace. This is useful to secure access to temporary files of
the process, but makes sharing between processes via <filename>/tmp</filename> or <filename>/var/tmp</filename>
impossible. If this is enabled, all temporary files created by a service in these directories will be removed
after the service is stopped. Defaults to false. It is possible to run two or more units within the same
this option removes <constant>CAP_SYS_TIME</constant> and <constant>CAP_WAKE_ALARM</constant> from the
capability bounding set for this unit, installs a system call filter to block calls that can set the
clock, and <varname>DeviceAllow=char-rtc r</varname> is implied. This ensures <filename>/dev/rtc0</filename>,
- <filename>/dev/rtc1</filename>, etc are made read only to the service. See
+ <filename>/dev/rtc1</filename>, etc. are made read-only to the service. See
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the details about <varname>DeviceAllow=</varname>.</para>
<varlistentry>
<term><varname>RestrictAddressFamilies=</varname></term>
- <listitem><para>Restricts the set of socket address families accessible to the processes of this unit. Takes a
- space-separated list of address family names to whitelist, such as <constant>AF_UNIX</constant>,
- <constant>AF_INET</constant> or <constant>AF_INET6</constant>. When prefixed with <constant>~</constant> the
- listed address families will be applied as blacklist, otherwise as whitelist. Note that this restricts access
- to the <citerefentry
- project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>2</manvolnum></citerefentry> system call
- only. Sockets passed into the process by other means (for example, by using socket activation with socket
- units, see <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
- are unaffected. Also, sockets created with <function>socketpair()</function> (which creates connected AF_UNIX
- sockets only) are unaffected. Note that this option has no effect on 32-bit x86, s390, s390x, mips, mips-le,
- ppc, ppc-le, pcc64, ppc64-le and is ignored (but works correctly on other ABIs, including x86-64). Note that on
- systems supporting multiple ABIs (such as x86/x86-64) it is recommended to turn off alternative ABIs for
- services, so that they cannot be used to circumvent the restrictions of this option. Specifically, it is
- recommended to combine this option with <varname>SystemCallArchitectures=native</varname> or similar. If
- running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant> capability
- (e.g. setting <varname>User=nobody</varname>), <varname>NoNewPrivileges=yes</varname> is implied. By default,
- no restrictions apply, all address families are accessible to processes. If assigned the empty string, any
- previous address family restriction changes are undone. This setting does not affect commands prefixed with
- <literal>+</literal>.</para>
+ <listitem><para>Restricts the set of socket address families accessible to the processes of this
+ unit. Takes a space-separated list of address family names to allow-list, such as
+ <constant>AF_UNIX</constant>, <constant>AF_INET</constant> or <constant>AF_INET6</constant>. When
+ prefixed with <constant>~</constant> the listed address families will be applied as deny list,
+ otherwise as allow list. Note that this restricts access to the <citerefentry
+ project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>2</manvolnum></citerefentry>
+ system call only. Sockets passed into the process by other means (for example, by using socket
+ activation with socket units, see
+ <citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
+ are unaffected. Also, sockets created with <function>socketpair()</function> (which creates connected
+ AF_UNIX sockets only) are unaffected. Note that this option has no effect on 32-bit x86, s390, s390x,
+ mips, mips-le, ppc, ppc-le, ppc64, ppc64-le and is ignored (but works correctly on other ABIs,
+ including x86-64). Note that on systems supporting multiple ABIs (such as x86/x86-64) it is
+ recommended to turn off alternative ABIs for services, so that they cannot be used to circumvent the
+ restrictions of this option. Specifically, it is recommended to combine this option with
+ <varname>SystemCallArchitectures=native</varname> or similar. If running in user mode, or in system
+ mode, but without the <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting
+ <varname>User=nobody</varname>), <varname>NoNewPrivileges=yes</varname> is implied. By default, no
+ restrictions apply, all address families are accessible to processes. If assigned the empty string,
+ any previous address family restriction changes are undone. This setting does not affect commands
+ prefixed with <literal>+</literal>.</para>
<para>Use this option to limit exposure of processes to remote access, in particular via exotic and sensitive
network protocols, such as <constant>AF_PACKET</constant>. Note that in most cases, the local
- <constant>AF_UNIX</constant> address family should be included in the configured whitelist as it is frequently
+ <constant>AF_UNIX</constant> address family should be included in the configured allow list as it is frequently
used for local communication, including for
<citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>2</manvolnum></citerefentry>
logging.</para></listitem>
any combination of: <constant>cgroup</constant>, <constant>ipc</constant>, <constant>net</constant>,
<constant>mnt</constant>, <constant>pid</constant>, <constant>user</constant> and <constant>uts</constant>. Any
namespace type listed is made accessible to the unit's processes, access to namespace types not listed is
- prohibited (whitelisting). By prepending the list with a single tilde character (<literal>~</literal>) the
+ prohibited (allow-listing). By prepending the list with a single tilde character (<literal>~</literal>) the
effect may be inverted: only the listed namespace types will be made inaccessible, all unlisted ones are
- permitted (blacklisting). If the empty string is assigned, the default namespace restrictions are applied,
+ permitted (deny-listing). If the empty string is assigned, the default namespace restrictions are applied,
which is equivalent to false. This option may appear more than once, in which case the namespace types are
merged by <constant>OR</constant>, or by <constant>AND</constant> if the lines are prefixed with
<literal>~</literal> (see examples below). Internally, this setting limits access to the
<option>shared</option> mount propagation is used, but — as mentioned — as <option>slave</option> is applied
first, propagation from the unit's processes to the host is still turned off.</para>
- <para>It is not recommended to to use <option>private</option> mount propagation for units, as this means
+ <para>It is not recommended to use <option>private</option> mount propagation for units, as this means
temporary mounts (such as removable media) of the host will stay mounted and thus indefinitely busy in forked
off processes, as unmount propagation events won't be received by the file system namespace of the unit.</para>
<listitem><para>Takes a space-separated list of system call names. If this setting is used, all
system calls executed by the unit processes except for the listed ones will result in immediate
- process termination with the <constant>SIGSYS</constant> signal (whitelisting). (See
+ process termination with the <constant>SIGSYS</constant> signal (allow-listing). (See
<varname>SystemCallErrorNumber=</varname> below for changing the default action). If the first
character of the list is <literal>~</literal>, the effect is inverted: only the listed system calls
- will result in immediate process termination (blacklisting). Blacklisted system calls and system call
+ will result in immediate process termination (deny-listing). Deny-listed system calls and system call
groups may optionally be suffixed with a colon (<literal>:</literal>) and <literal>errno</literal>
error number (between 0 and 4095) or errno name such as <constant>EPERM</constant>,
<constant>EACCES</constant> or <constant>EUCLEAN</constant> (see <citerefentry
project='man-pages'><refentrytitle>errno</refentrytitle><manvolnum>3</manvolnum></citerefentry> for a
- full list). This value will be returned when a blacklisted system call is triggered, instead of
+ full list). This value will be returned when a deny-listed system call is triggered, instead of
terminating the processes immediately. This value takes precedence over the one given in
<varname>SystemCallErrorNumber=</varname>, see below. If running in user mode, or in system mode,
but without the <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting
for enforcing a minimal sandboxing environment. Note that the <function>execve</function>,
<function>exit</function>, <function>exit_group</function>, <function>getrlimit</function>,
<function>rt_sigreturn</function>, <function>sigreturn</function> system calls and the system calls
- for querying time and sleeping are implicitly whitelisted and do not need to be listed
+ for querying time and sleeping are implicitly allow-listed and do not need to be listed
explicitly. This option may be specified more than once, in which case the filter masks are
merged. If the empty string is assigned, the filter is reset, all prior assignments will have no
effect. This does not affect commands prefixed with <literal>+</literal>.</para>
might be necessary to temporarily disable system call filters in order to simplify debugging of such
failures.</para>
- <para>If you specify both types of this option (i.e. whitelisting and blacklisting), the first encountered
- will take precedence and will dictate the default action (termination or approval of a system call). Then the
- next occurrences of this option will add or delete the listed system calls from the set of the filtered system
- calls, depending of its type and the default action. (For example, if you have started with a whitelisting of
- <function>read</function> and <function>write</function>, and right after it add a blacklisting of
- <function>write</function>, then <function>write</function> will be removed from the set.)</para>
+ <para>If you specify both types of this option (i.e. allow-listing and deny-listing), the first
+ encountered will take precedence and will dictate the default action (termination or approval of a
+ system call). Then the next occurrences of this option will add or delete the listed system calls
+ from the set of the filtered system calls, depending of its type and the default action. (For
+ example, if you have started with an allow list rule for <function>read</function> and
+ <function>write</function>, and right after it add a deny list rule for <function>write</function>,
+ then <function>write</function> will be removed from the set.)</para>
<para>As the number of possible system calls is large, predefined sets of system calls are provided. A set
starts with <literal>@</literal> character, followed by name of the set.
</row>
<row>
<entry>@file-system</entry>
- <entry>File system operations: opening, creating files and directories for read and write, renaming and removing them, reading file properties, or creating hard and symbolic links.</entry>
+ <entry>File system operations: opening, creating files and directories for read and write, renaming and removing them, reading file properties, or creating hard and symbolic links</entry>
</row>
<row>
<entry>@io-event</entry>
</row>
<row>
<entry>@memlock</entry>
- <entry>Locking of memory into RAM (<citerefentry project='man-pages'><refentrytitle>mlock</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>mlockall</refentrytitle><manvolnum>2</manvolnum></citerefentry> and related calls)</entry>
+ <entry>Locking of memory in RAM (<citerefentry project='man-pages'><refentrytitle>mlock</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>mlockall</refentrytitle><manvolnum>2</manvolnum></citerefentry> and related calls)</entry>
</row>
<row>
<entry>@module</entry>
</row>
<row>
<entry>@process</entry>
- <entry>Process control, execution, namespaceing operations (<citerefentry project='man-pages'><refentrytitle>clone</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>kill</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>namespaces</refentrytitle><manvolnum>7</manvolnum></citerefentry>, …</entry>
+ <entry>Process control, execution, namespaceing operations (<citerefentry project='man-pages'><refentrytitle>clone</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>kill</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>namespaces</refentrytitle><manvolnum>7</manvolnum></citerefentry>, …)</entry>
</row>
<row>
<entry>@raw-io</entry>
</row>
<row>
<entry>@sync</entry>
- <entry>Synchronizing files and memory to disk: (<citerefentry project='man-pages'><refentrytitle>fsync</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>msync</refentrytitle><manvolnum>2</manvolnum></citerefentry>, and related calls)</entry>
+ <entry>Synchronizing files and memory to disk (<citerefentry project='man-pages'><refentrytitle>fsync</refentrytitle><manvolnum>2</manvolnum></citerefentry>, <citerefentry project='man-pages'><refentrytitle>msync</refentrytitle><manvolnum>2</manvolnum></citerefentry>, and related calls)</entry>
</row>
<row>
<entry>@system-service</entry>
- <entry>A reasonable set of system calls used by common system services, excluding any special purpose calls. This is the recommended starting point for whitelisting system calls for system services, as it contains what is typically needed by system services, but excludes overly specific interfaces. For example, the following APIs are excluded: <literal>@clock</literal>, <literal>@mount</literal>, <literal>@swap</literal>, <literal>@reboot</literal>.</entry>
+ <entry>A reasonable set of system calls used by common system services, excluding any special purpose calls. This is the recommended starting point for allow-listing system calls for system services, as it contains what is typically needed by system services, but excludes overly specific interfaces. For example, the following APIs are excluded: <literal>@clock</literal>, <literal>@mount</literal>, <literal>@swap</literal>, <literal>@reboot</literal>.</entry>
</row>
<row>
<entry>@timer</entry>
<command>systemd-analyze syscall-filter</command> to list the actual list of system calls in each
filter.</para>
- <para>Generally, whitelisting system calls (rather than blacklisting) is the safer mode of operation. It is
- recommended to enforce system call whitelists for all long-running system services. Specifically, the
- following lines are a relatively safe basic choice for the majority of system services:</para>
+ <para>Generally, allow-listing system calls (rather than deny-listing) is the safer mode of
+ operation. It is recommended to enforce system call allow lists for all long-running system
+ services. Specifically, the following lines are a relatively safe basic choice for the majority of
+ system services:</para>
<programlisting>[Service]
SystemCallFilter=@system-service
call may be used to execute operations similar to what can be done with the older
<function>kill()</function> system call, hence blocking the latter without the former only provides
weak protection. Since new system calls are added regularly to the kernel as development progresses,
- keeping system call blacklists comprehensive requires constant work. It is thus recommended to use
- whitelisting instead, which offers the benefit that new system calls are by default implicitly
- blocked until the whitelist is updated.</para>
+ keeping system call deny lists comprehensive requires constant work. It is thus recommended to use
+ allow-listing instead, which offers the benefit that new system calls are by default implicitly
+ blocked until the allow list is updated.</para>
<para>Also note that a number of system calls are required to be accessible for the dynamic linker to
work. The dynamic linker is required for running most regular programs (specifically: all dynamic ELF
manager is compiled for). If running in user mode, or in system mode, but without the
<constant>CAP_SYS_ADMIN</constant> capability (e.g. setting <varname>User=nobody</varname>),
<varname>NoNewPrivileges=yes</varname> is implied. By default, this option is set to the empty list, i.e. no
- system call architecture filtering is applied.</para>
+ filtering is applied.</para>
<para>If this setting is used, processes of this unit will only be permitted to call native system calls, and
system calls of the specified architectures. For the purposes of this option, the x32 architecture is treated
<constant>AF_UNIX</constant> socket in the file system, as in that case only a
single stream connection is created for both input and output.</para>
- <para><option>append:<replaceable>path</replaceable></option> is similar to <option>file:<replaceable>path
- </replaceable></option> above, but it opens the file in append mode.</para>
+ <para><option>append:<replaceable>path</replaceable></option> is similar to
+ <option>file:<replaceable>path</replaceable></option> above, but it opens the file in append mode.
+ </para>
<para><option>socket</option> connects standard output to a socket acquired via socket activation. The
semantics are similar to the same option of <varname>StandardInput=</varname>, see above.</para>
<varname>UnsetEnvironment=</varname> are removed again from the compiled environment variable list, immediately
before it is passed to the executed process.</para>
- <para>The following select environment variables are set or propagated by the service manager for each invoked
+ <para>The following environment variables are set or propagated by the service manager for each invoked
process:</para>
<variablelist class='environment-variables'>
<term><varname>$LOGS_DIRECTORY</varname></term>
<term><varname>$CONFIGURATION_DIRECTORY</varname></term>
- <listitem><para>Contains and absolute paths to the directories defined with
+ <listitem><para>Absolute paths to the directories defined with
<varname>RuntimeDirectory=</varname>, <varname>StateDirectory=</varname>,
<varname>CacheDirectory=</varname>, <varname>LogsDirectory=</varname>, and
<varname>ConfigurationDirectory=</varname> when those settings are used.</para>
<row>
<entry>242</entry>
<entry><constant>EXIT_NUMA_POLICY</constant></entry>
- <entry>Failed to set up unit's NUMA memory policy. See <varname>NUMAPolicy=</varname> and <varname>NUMAMask=</varname>above.</entry>
+ <entry>Failed to set up unit's NUMA memory policy. See <varname>NUMAPolicy=</varname> and <varname>NUMAMask=</varname> above.</entry>
</row>
</tbody>
structured log entries via calls such as
<citerefentry><refentrytitle>sd_journal_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
They may also not be used as matches for
- <citerefentry><refentrytitle>sd_journal_add_match</refentrytitle><manvolnum>3</manvolnum></citerefentry></para>
+ <citerefentry><refentrytitle>sd_journal_add_match</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
+ </para>
<variablelist class='journal-directives'>
<varlistentry>
terminate upon receiving the initial <constant>SIGTERM</constant>
signal. This can be achieved by configuring <varname>LimitCORE=</varname>
and setting <varname>FinalKillSignal=</varname> to either
- <constant>SIGQUIT</constant> or <constant>SIGABRT</constant>
+ <constant>SIGQUIT</constant> or <constant>SIGABRT</constant>.
Defaults to <constant>SIGKILL</constant>.
</para></listitem>
</varlistentry>
<title>Description</title>
<para>A plain ini-style text file that encodes configuration for matching network devices, used by
- <citerefentry><refentrytitle>systemd-udev</refentrytitle><manvolnum>8</manvolnum></citerefentry> and in
+ <citerefentry><refentrytitle>systemd-udevd</refentrytitle><manvolnum>8</manvolnum></citerefentry> and in
particular its <command>net_setup_link</command> builtin. See
<citerefentry><refentrytitle>systemd.syntax</refentrytitle><manvolnum>5</manvolnum></citerefentry> for a
general description of the syntax.</para>
<title>[Match] Section Options</title>
<para>A link file is said to match a device if all matches specified by the
- <literal>[Match]</literal> section are satisfied. When a link file does not contain valid settings
- in <literal>[Match]</literal> section, then the file will match all devices and
+ [Match] section are satisfied. When a link file does not contain valid settings
+ in [Match] section, then the file will match all devices and
<command>systemd-udevd</command> warns about that. Hint: to avoid the warning and to make it clear
that all interfaces shall be matched, add the following:
<programlisting>OriginalName=*</programlisting>
this unit type. See
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the common options of all unit configuration files. The common
- configuration items are configured in the generic <literal>[Unit]</literal> and
- <literal>[Install]</literal> sections. The mount specific configuration options are
- configured in the <literal>[Mount]</literal> section.</para>
+ configuration items are configured in the generic [Unit] and
+ [Install] sections. The mount specific configuration options are
+ configured in the [Mount] section.</para>
<para>Additional options are listed in
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
system that merges multiple mount points). See
<varname>After=</varname> and <varname>Requires=</varname> in
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for details.</para></listitem>
+ for details.</para>
+
+ <para>Note that this option always applies to the created mount unit
+ only regardless whether <option>x-systemd.automount</option> has been
+ specified.</para></listitem>
</varlistentry>
<varlistentry>
unit.
See <varname>Before=</varname> and <varname>After=</varname> in
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for details.</para></listitem>
+ for details.</para>
+
+ <para>Note that these options always apply to the created mount unit
+ only regardless whether <option>x-systemd.automount</option> has been
+ specified.</para></listitem>
</varlistentry>
<varlistentry>
</variablelist>
<para>Note that <constant>latest</constant> may be used to denote the latest scheme known (to this
- particular version of systemd.</para>
+ particular version of systemd).</para>
</refsect1>
<refsect1>
<entry>An IPv4 over IPv4 tunnel.</entry></row>
<row><entry><varname>ipvlan</varname></entry>
- <entry>An ipvlan device is a stacked device which receives packets from its underlying device based on IP address filtering.</entry></row>
+ <entry>An IPVLAN device is a stacked device which receives packets from its underlying device based on IP address filtering.</entry></row>
<row><entry><varname>ipvtap</varname></entry>
- <entry>An ipvtap device is a stacked device which receives packets from its underlying device based on IP address filtering and can be accessed using the tap user space interface.</entry></row>
+ <entry>An IPVTAP device is a stacked device which receives packets from its underlying device based on IP address filtering and can be accessed using the tap user space interface.</entry></row>
<row><entry><varname>macvlan</varname></entry>
<entry>A macvlan device is a stacked device which receives packets from its underlying device based on MAC address filtering.</entry></row>
<row><entry><varname>wireguard</varname></entry>
<entry>WireGuard Secure Network Tunnel.</entry></row>
- <row><entry><varname>netdevsim</varname></entry>
- <entry>A simulator. This simulated networking device is used for testing various networking APIs and at this time is particularly focused on testing hardware offloading related interfaces.</entry></row>
-
<row><entry><varname>nlmon</varname></entry>
<entry>A Netlink monitor device. Use an nlmon device when you want to monitor system Netlink messages.</entry></row>
<title>[Match] Section Options</title>
<para>A virtual network device is only created if the
- <literal>[Match]</literal> section matches the current
+ [Match] section matches the current
environment, or if the section is empty. The following keys are
accepted:</para>
<refsect1>
<title>[NetDev] Section Options</title>
- <para>The <literal>[NetDev]</literal> section accepts the
+ <para>The [NetDev] section accepts the
following keys:</para>
<variablelist class='network-directives'>
<term><varname>Name=</varname></term>
<listitem>
<para>The interface name used when creating the netdev.
- This option is compulsory.</para>
+ This setting is compulsory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Kind=</varname></term>
<listitem>
- <para>The netdev kind. This option is compulsory. See the
+ <para>The netdev kind. This setting is compulsory. See the
<literal>Supported netdev kinds</literal> section for the
valid keys.</para>
</listitem>
<varlistentry>
<term><varname>MTUBytes=</varname></term>
<listitem>
- <para>The maximum transmission unit in bytes to set for the device. The usual suffixes K, M, G,
+ <para>The maximum transmission unit in bytes to set for the device. The usual suffixes K, M, G
are supported and are understood to the base of 1024. For <literal>tun</literal> or
<literal>tap</literal> devices, <varname>MTUBytes=</varname> setting is not currently supported in
- <literal>[NetDev]</literal> section. Please specify it in <literal>[Link]</literal> section of
+ [NetDev] section. Please specify it in [Link] section of
corresponding
<citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
files.</para>
<term><varname>MACAddress=</varname></term>
<listitem>
<para>The MAC address to use for the device. For <literal>tun</literal> or <literal>tap</literal>
- devices, setting <varname>MACAddress=</varname> in the <literal>[NetDev]</literal> section is not
- supported. Please specify it in <literal>[Link]</literal> section of the corresponding
+ devices, setting <varname>MACAddress=</varname> in the [NetDev] section is not
+ supported. Please specify it in [Link] section of the corresponding
<citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
file. If this option is not set, <literal>vlan</literal> devices inherit the MAC address of the
physical interface. For other kind of netdevs, if this option is not set, then MAC address is
<refsect1>
<title>[Bridge] Section Options</title>
- <para>The <literal>[Bridge]</literal> section only applies for
+ <para>The [Bridge] section only applies for
netdevs of kind <literal>bridge</literal>, and accepts the
following keys:</para>
<refsect1>
<title>[VLAN] Section Options</title>
- <para>The <literal>[VLAN]</literal> section only applies for
+ <para>The [VLAN] section only applies for
netdevs of kind <literal>vlan</literal>, and accepts the
following key:</para>
<term><varname>Id=</varname></term>
<listitem>
<para>The VLAN ID to use. An integer in the range 0–4094.
- This option is compulsory.</para>
+ This setting is compulsory.</para>
</listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>ReorderHeader=</varname></term>
<listitem>
- <para>Takes a boolean. The VLAN reorder header is set VLAN interfaces behave like physical interfaces.
- When unset, the kernel's default will be used.</para>
+ <para>Takes a boolean. When enabled, the VLAN reorder header is used and VLAN interfaces behave
+ like physical interfaces. When unset, the kernel's default will be used.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>[MACVLAN] Section Options</title>
- <para>The <literal>[MACVLAN]</literal> section only applies for
+ <para>The [MACVLAN] section only applies for
netdevs of kind <literal>macvlan</literal>, and accepts the
following key:</para>
<para>The MACVLAN mode to use. The supported options are
<literal>private</literal>,
<literal>vepa</literal>,
- <literal>bridge</literal>, and
- <literal>passthru</literal>.
+ <literal>bridge</literal>,
+ <literal>passthru</literal>, and
+ <literal>source</literal>.
</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>SourceMACAddress=</varname></term>
+ <listitem>
+ <para>A whitespace-separated list of remote hardware addresses allowed on the MACVLAN. This
+ option only has an effect in source mode. Use full colon-, hyphen- or dot-delimited
+ hexadecimal. This option may appear more than once, in which case the lists are merged. If
+ the empty string is assigned to this option, the list of hardware addresses defined prior
+ to this is reset. Defaults to unset.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>[MACVTAP] Section Options</title>
- <para>The <literal>[MACVTAP]</literal> section applies for
+ <para>The [MACVTAP] section applies for
netdevs of kind <literal>macvtap</literal> and accepts the
- same key as <literal>[MACVLAN]</literal>.</para>
+ same key as [MACVLAN].</para>
</refsect1>
<refsect1>
<title>[IPVLAN] Section Options</title>
- <para>The <literal>[IPVLAN]</literal> section only applies for
+ <para>The [IPVLAN] section only applies for
netdevs of kind <literal>ipvlan</literal>, and accepts the
following key:</para>
<refsect1>
<title>[IPVTAP] Section Options</title>
- <para>The <literal>[IPVTAP]</literal> section only applies for
+ <para>The [IPVTAP] section only applies for
netdevs of kind <literal>ipvtap</literal> and accepts the
- same key as <literal>[IPVLAN]</literal>.</para>
+ same key as [IPVLAN].</para>
</refsect1>
<refsect1>
<title>[VXLAN] Section Options</title>
- <para>The <literal>[VXLAN]</literal> section only applies for
+ <para>The [VXLAN] section only applies for
netdevs of kind <literal>vxlan</literal>, and accepts the
following keys:</para>
<varlistentry>
<term><varname>Group=</varname></term>
<listitem>
- <para>Configures VXLAN multicast group IP address. All members of a VXLAN must use the same multicast group address.</para>
+ <para>Configures VXLAN multicast group IP address. All members of a VXLAN must use the same
+ multicast group address.</para>
</listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>L3MissNotification=</varname></term>
<listitem>
- <para>Takes a boolean. When true, enables netlink IP address miss
- notifications.</para>
+ <para>Takes a boolean. When true, enables netlink IP address miss notifications.</para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[GENEVE] Section Options</title>
- <para>The <literal>[GENEVE]</literal> section only applies for
+ <para>The [GENEVE] section only applies for
netdevs of kind <literal>geneve</literal>, and accepts the
following keys:</para>
<varlistentry>
<term><varname>TTL=</varname></term>
<listitem>
- <para>Accepts the same key in <literal>[VXLAN]</literal> section except when unset or
- set to 0, the kernel's default will be used meaning that packets TTL will be set from
+ <para>Accepts the same values as in the [VXLAN] section, except that when unset
+ or set to 0, the kernel's default will be used, meaning that packet TTL will be set from
<filename>/proc/sys/net/ipv4/ip_default_ttl</filename>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>UDPChecksum=</varname></term>
<listitem>
- <para>Takes a boolean. When true, specifies if UDP checksum is calculated for transmitted packets over IPv4.</para>
+ <para>Takes a boolean. When true, specifies that UDP checksum is calculated for transmitted packets
+ over IPv4.</para>
</listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>IPDoNotFragment=</varname></term>
<listitem>
- <para>Accepts the same key in <literal>[VXLAN]</literal> section.</para>
+ <para>Accepts the same key in [VXLAN] section.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>[L2TP] Section Options</title>
- <para>The <literal>[L2TP]</literal> section only applies for
+ <para>The [L2TP] section only applies for
netdevs of kind <literal>l2tp</literal>, and accepts the
following keys:</para>
<varlistentry>
<term><varname>TunnelId=</varname></term>
<listitem>
- <para>Specifies the tunnel id. The value used must match the <literal>PeerTunnelId=</literal> value being used at the peer.
- Ranges a number between 1 and 4294967295). This option is compulsory.</para>
+ <para>Specifies the tunnel identifier. Takes an number in the range 1–4294967295. The value used
+ must match the <literal>PeerTunnelId=</literal> value being used at the peer. This setting is
+ compulsory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>PeerTunnelId=</varname></term>
<listitem>
- <para>Specifies the peer tunnel id. The value used must match the <literal>PeerTunnelId=</literal> value being used at the peer.
- Ranges a number between 1 and 4294967295). This option is compulsory.</para>
+ <para>Specifies the peer tunnel id. Takes a number in the range 1—4294967295. The value used must
+ match the <literal>PeerTunnelId=</literal> value being used at the peer. This setting is
+ compulsory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Remote=</varname></term>
<listitem>
- <para>Specifies the IP address of the remote peer. This option is compulsory.</para>
+ <para>Specifies the IP address of the remote peer. This setting is compulsory.</para>
</listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>EncapsulationType=</varname></term>
<listitem>
- <para>Specifies the encapsulation type of the tunnel. Takes one of <literal>udp</literal> or <literal>ip</literal>.</para>
+ <para>Specifies the encapsulation type of the tunnel. Takes one of <literal>udp</literal> or
+ <literal>ip</literal>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>UDPSourcePort=</varname></term>
<listitem>
- <para>Specifies the UDP source port to be used for the tunnel. When UDP encapsulation is selected it's mandotory. Ignored when ip
- encapsulation is selected.</para>
+ <para>Specifies the UDP source port to be used for the tunnel. When UDP encapsulation is selected
+ it's mandatory. Ignored when IP encapsulation is selected.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>UDPDestinationPort=</varname></term>
<listitem>
- <para>Specifies destination port. When UDP encapsulation is selected it's mandotory. Ignored when ip
+ <para>Specifies destination port. When UDP encapsulation is selected it's mandatory. Ignored when IP
encapsulation is selected.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>UDPChecksum=</varname></term>
<listitem>
- <para>Takes a boolean. When true, specifies if UDP checksum is calculated for transmitted packets over IPv4.</para>
+ <para>Takes a boolean. When true, specifies that UDP checksum is calculated for transmitted packets
+ over IPv4.</para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[L2TPSession] Section Options</title>
- <para>The <literal>[L2TPSession]</literal> section only applies for
+ <para>The [L2TPSession] section only applies for
netdevs of kind <literal>l2tp</literal>, and accepts the
following keys:</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>Name=</varname></term>
<listitem>
- <para>Specifies the name of the session. This option is compulsory.</para>
+ <para>Specifies the name of the session. This setting is compulsory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>SessionId=</varname></term>
<listitem>
- <para>Specifies the session id. The value used must match the <literal>SessionId=</literal> value being used at the peer.
- Ranges a number between 1 and 4294967295). This option is compulsory.</para>
+ <para>Specifies the session identifier. Takes an number in the range 1–4294967295. The value used
+ must match the <literal>SessionId=</literal> value being used at the peer. This setting is
+ compulsory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>PeerSessionId=</varname></term>
<listitem>
- <para>Specifies the peer session id. The value used must match the <literal>PeerSessionId=</literal> value being used at the peer.
- Ranges a number between 1 and 4294967295). This option is compulsory.</para>
+ <para>Specifies the peer session identifier. Takes an number in the range 1–4294967295.
+ The value used must match the <literal>PeerSessionId=</literal> value being used at the peer.
+ This setting is compulsory.</para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[MACsec] Section Options</title>
- <para>The <literal>[MACsec]</literal> section only applies for network devices of kind
+ <para>The [MACsec] section only applies for network devices of kind
<literal>macsec</literal>, and accepts the following keys:</para>
<variablelist class='network-directives'>
<refsect1>
<title>[MACsecReceiveChannel] Section Options</title>
- <para>The <literal>[MACsecReceiveChannel]</literal> section only applies for network devices of
+ <para>The [MACsecReceiveChannel] section only applies for network devices of
kind <literal>macsec</literal>, and accepts the following keys:</para>
<variablelist class='network-directives'>
<term><varname>MACAddress=</varname></term>
<listitem>
<para>Specifies the MAC address to be used for the MACsec receive channel. The MAC address
- used to make secure channel identifier (SCI). This option is compulsory, and is not set by
+ used to make secure channel identifier (SCI). This setting is compulsory, and is not set by
default.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[MACsecTransmitAssociation] Section Options</title>
- <para>The <literal>[MACsecTransmitAssociation]</literal> section only applies for network devices
+ <para>The [MACsecTransmitAssociation] section only applies for network devices
of kind <literal>macsec</literal>, and accepts the following keys:</para>
<variablelist class='network-directives'>
<term><varname>Key=</varname></term>
<listitem>
<para>Specifies the encryption key used in the transmission channel. The same key must be
- configured on the peer’s matching receive channel. This option is compulsory, and is not set
+ configured on the peer’s matching receive channel. This setting is compulsory, and is not set
by default. Takes a 128-bit key encoded in a hexadecimal string, for example
<literal>dffafc8d7b9a43d5b9a3dfbbf6a30c16</literal>.</para>
</listitem>
<term><varname>UseForEncoding=</varname></term>
<listitem>
<para>Takes a boolean. If enabled, then the security association is used for encoding. Only
- one <literal>[MACsecTransmitAssociation]</literal> section can enable this option. When enabled,
+ one [MACsecTransmitAssociation] section can enable this option. When enabled,
<varname>Activate=yes</varname> is implied. Defaults to unset.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[MACsecReceiveAssociation] Section Options</title>
- <para>The <literal>[MACsecReceiveAssociation]</literal> section only applies for
+ <para>The [MACsecReceiveAssociation] section only applies for
network devices of kind <literal>macsec</literal>, and accepts the
following keys:</para>
<varlistentry>
<term><varname>Port=</varname></term>
<listitem>
- <para>Accepts the same key in <literal>[MACsecReceiveChannel]</literal> section.</para>
+ <para>Accepts the same key in [MACsecReceiveChannel] section.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>MACAddress=</varname></term>
<listitem>
- <para>Accepts the same key in <literal>[MACsecReceiveChannel]</literal> section.</para>
+ <para>Accepts the same key in [MACsecReceiveChannel] section.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>PacketNumber=</varname></term>
<listitem>
- <para>Accepts the same key in <literal>[MACsecTransmitAssociation]</literal> section.</para>
+ <para>Accepts the same key in [MACsecTransmitAssociation] section.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>KeyId=</varname></term>
<listitem>
- <para>Accepts the same key in <literal>[MACsecTransmitAssociation]</literal> section.</para>
+ <para>Accepts the same key in [MACsecTransmitAssociation] section.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Key=</varname></term>
<listitem>
- <para>Accepts the same key in <literal>[MACsecTransmitAssociation]</literal> section.</para>
+ <para>Accepts the same key in [MACsecTransmitAssociation] section.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>KeyFile=</varname></term>
<listitem>
- <para>Accepts the same key in <literal>[MACsecTransmitAssociation]</literal> section.</para>
+ <para>Accepts the same key in [MACsecTransmitAssociation] section.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Activate=</varname></term>
<listitem>
- <para>Accepts the same key in <literal>[MACsecTransmitAssociation]</literal> section.</para>
+ <para>Accepts the same key in [MACsecTransmitAssociation] section.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>[Tunnel] Section Options</title>
- <para>The <literal>[Tunnel]</literal> section only applies for
+ <para>The [Tunnel] section only applies for
netdevs of kind
<literal>ipip</literal>,
<literal>sit</literal>,
<para>A fixed Time To Live N on tunneled packets. N is a
number in the range 1–255. 0 is a special value meaning that
packets inherit the TTL value. The default value for IPv4
- tunnels is: inherit. The default value for IPv6 tunnels is
+ tunnels is 0 (inherit). The default value for IPv6 tunnels is
64.</para>
</listitem>
</varlistentry>
both directions (<varname>InputKey=</varname> and <varname>OutputKey=</varname>).
The <varname>Key=</varname> is either a number or an IPv4 address-like dotted quad.
It is used as mark-configured SAD/SPD entry as part of the lookup key (both in data
- and control path) in ip xfrm (framework used to implement IPsec protocol).
+ and control path) in IP XFRM (framework used to implement IPsec protocol).
See <ulink url="http://man7.org/linux/man-pages/man8/ip-xfrm.8.html">
ip-xfrm — transform configuration</ulink> for details. It is only used for VTI/VTI6,
GRE, GRETAP, and ERSPAN tunnels.</para>
<varlistentry>
<term><varname>Encapsulation=</varname></term>
<listitem>
- <para>Accepts the same key as in the <literal>[FooOverUDP]</literal> section.</para>
+ <para>Accepts the same key as in the [FooOverUDP] section.</para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[FooOverUDP] Section Options</title>
- <para>The <literal>[FooOverUDP]</literal> section only applies for
+ <para>The [FooOverUDP] section only applies for
netdevs of kind <literal>fou</literal> and accepts the
following keys:</para>
<varlistentry>
<term><varname>Encapsulation=</varname></term>
<listitem>
- <para>Specifies the encapsulation mechanism used to store networking packets of various protocols inside the UDP packets. Supports the following values:
+ <para>Specifies the encapsulation mechanism used to store networking packets of various protocols
+ inside the UDP packets. Supports the following values:
- <literal>FooOverUDP</literal> provides the simplest no frills model of UDP encapsulation, it simply encapsulates
- packets directly in the UDP payload.
- <literal>GenericUDPEncapsulation</literal> is a generic and extensible encapsulation, it allows encapsulation of packets for any IP
- protocol and optional data as part of the encapsulation.
- For more detailed information see <ulink url="https://lwn.net/Articles/615044">Generic UDP Encapsulation</ulink>.
- Defaults to <literal>FooOverUDP</literal>.
+ <literal>FooOverUDP</literal> provides the simplest no frills model of UDP encapsulation, it simply
+ encapsulates packets directly in the UDP payload. <literal>GenericUDPEncapsulation</literal> is a
+ generic and extensible encapsulation, it allows encapsulation of packets for any IP protocol and
+ optional data as part of the encapsulation. For more detailed information see <ulink
+ url="https://lwn.net/Articles/615044">Generic UDP Encapsulation</ulink>. Defaults to
+ <literal>FooOverUDP</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Port=</varname></term>
<listitem>
- <para>Specifies the port number, where the IP encapsulation packets will arrive. Please take note that the packets
- will arrive with the encapsulation will be removed. Then they will be manually fed back into the network stack, and sent ahead
- for delivery to the real destination. This option is mandatory.</para>
+ <para>Specifies the port number, where the IP encapsulation packets will arrive. Please take note
+ that the packets will arrive with the encapsulation will be removed. Then they will be manually fed
+ back into the network stack, and sent ahead for delivery to the real destination. This option is
+ mandatory.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>PeerPort=</varname></term>
<listitem>
- <para>Specifies the peer port number. Defaults to unset. Note that when peer port is set <literal>Peer=</literal> address is mandotory.</para>
+ <para>Specifies the peer port number. Defaults to unset. Note that when peer port is set
+ <literal>Peer=</literal> address is mandatory.</para>
</listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>Peer=</varname></term>
<listitem>
- <para>Configures peer IP address. Note that when peer address is set <literal>PeerPort=</literal> is mandotory.</para>
+ <para>Configures peer IP address. Note that when peer address is set <literal>PeerPort=</literal>
+ is mandatory.</para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[Peer] Section Options</title>
- <para>The <literal>[Peer]</literal> section only applies for
+ <para>The [Peer] section only applies for
netdevs of kind <literal>veth</literal> and accepts the
following keys:</para>
<term><varname>Name=</varname></term>
<listitem>
<para>The interface name used when creating the netdev.
- This option is compulsory.</para>
+ This setting is compulsory.</para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[VXCAN] Section Options</title>
- <para>The <literal>[VXCAN]</literal> section only applies for
+ <para>The [VXCAN] section only applies for
netdevs of kind <literal>vxcan</literal> and accepts the
following key:</para>
<term><varname>Peer=</varname></term>
<listitem>
<para>The peer interface name used when creating the netdev.
- This option is compulsory.</para>
+ This setting is compulsory.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>[Tun] Section Options</title>
- <para>The <literal>[Tun]</literal> section only applies for
+ <para>The [Tun] section only applies for
netdevs of kind <literal>tun</literal>, and accepts the following
keys:</para>
<refsect1>
<title>[Tap] Section Options</title>
- <para>The <literal>[Tap]</literal> section only applies for
+ <para>The [Tap] section only applies for
netdevs of kind <literal>tap</literal>, and accepts the same keys
- as the <literal>[Tun]</literal> section.</para>
+ as the [Tun] section.</para>
</refsect1>
<refsect1>
<title>[WireGuard] Section Options</title>
- <para>The <literal>[WireGuard]</literal> section accepts the following
+ <para>The [WireGuard] section accepts the following
keys:</para>
<variablelist class='network-directives'>
<refsect1>
<title>[WireGuardPeer] Section Options</title>
- <para>The <literal>[WireGuardPeer]</literal> section accepts the following
+ <para>The [WireGuardPeer] section accepts the following
keys:</para>
<variablelist class='network-directives'>
<refsect1>
<title>[Bond] Section Options</title>
- <para>The <literal>[Bond]</literal> section accepts the following
+ <para>The [Bond] section accepts the following
key:</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>AdActorSystemPriority=</varname></term>
<listitem>
- <para>Specifies the 802.3ad actor system priority. Ranges [1-65535].</para>
+ <para>Specifies the 802.3ad actor system priority. Takes a number in the range 1—65535.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>AdUserPortKey=</varname></term>
<listitem>
- <para>Specifies the 802.3ad user defined portion of the port key. Ranges [0-1023].</para>
+ <para>Specifies the 802.3ad user defined portion of the port key. Takes a number in the range
+ 0–1023.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[Xfrm] Section Options</title>
- <para>The <literal>[Xfrm]</literal> section accepts the following
+ <para>The [Xfrm] section accepts the following
keys:</para>
<variablelist class='network-directives'>
</variablelist>
<para>For more detail information see
- <ulink url="https://lwn.net/Articles/757391">
- Virtual xfrm interfaces</ulink></para>
+ <ulink url="https://lwn.net/Articles/757391">Virtual XFRM Interfaces</ulink>.</para>
</refsect1>
<refsect1>
<title>[VRF] Section Options</title>
- <para>The <literal>[VRF]</literal> section only applies for
+ <para>The [VRF] section only applies for
netdevs of kind <literal>vrf</literal> and accepts the
following key:</para>
<varlistentry>
<term><varname>Table=</varname></term>
<listitem>
- <para>The numeric routing table identifier. This option is compulsory.</para>
+ <para>The numeric routing table identifier. This setting is compulsory.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>[Match] Section Options</title>
- <para>The network file contains a <literal>[Match]</literal>
- section, which determines if a given network file may be applied
- to a given device; and a <literal>[Network]</literal> section
- specifying how the device should be configured. The first (in
- lexical order) of the network files that matches a given device
- is applied, all later files are ignored, even if they match as
- well.</para>
-
- <para>A network file is said to match a network interface if all matches specified by the
- <literal>[Match]</literal> section are satisfied. When a network file does not contain valid
- settings in <literal>[Match]</literal> section, then the file will match all interfaces and
- <command>systemd-networkd</command> warns about that. Hint: to avoid the warning and to make it
- clear that all interfaces shall be matched, add the following:
- <programlisting>Name=*</programlisting>
- The following keys are accepted:</para>
+ <para>The network file contains a [Match] section, which determines if a given network file may be
+ applied to a given device; and a [Network] section specifying how the device should be configured. The
+ first (in lexical order) of the network files that matches a given device is applied, all later files
+ are ignored, even if they match as well.</para>
+
+ <para>A network file is said to match a network interface if all matches specified by the [Match]
+ section are satisfied. When a network file does not contain valid settings in [Match] section, then the
+ file will match all interfaces and <command>systemd-networkd</command> warns about that. Hint: to avoid
+ the warning and to make it clear that all interfaces shall be matched, add the following:
+ <programlisting>Name=*</programlisting> The following keys are accepted:</para>
<variablelist class='network-directives'>
<xi:include href="systemd.link.xml" xpointer="mac-address" />
<listitem>
<para>A whitespace-separated list of hardware address of the currently connected wireless
LAN. Use full colon-, hyphen- or dot-delimited hexadecimal. See the example in
- <varname>MACAddress=</varname>. This option may appear more than one, in which case the
- lists are merged. If the empty string is assigned to this option, the list of BSSID defined
- prior to this is reset.</para>
+ <varname>MACAddress=</varname>. This option may appear more than once, in which case the
+ lists are merged. If the empty string is assigned to this option, the list is reset.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[Link] Section Options</title>
- <para> The <literal>[Link]</literal> section accepts the following keys:</para>
+ <para> The [Link] section accepts the following keys:</para>
<variablelist class='network-directives'>
<varlistentry>
This happens when multicast routing is enabled.</para>
</listitem>
</varlistentry>
- <varlistentry>
- <term><varname>IPv6LinkLocalAddressGenerationMode=</varname></term>
- <listitem>
- <para>Specifies how IPv6 link local address is generated. Takes one of <literal>eui64</literal>,
- <literal>none</literal>, <literal>stable-privacy</literal> and <literal>random</literal>.
- When unset, the kernel's default will be used. Note that if <varname>LinkLocalAdressing=</varname>
- not configured as <literal>ipv6</literal> then <varname>IPv6LinkLocalAddressGenerationMode=</varname>
- is ignored.</para>
- </listitem>
- </varlistentry>
<varlistentry>
<term><varname>Unmanaged=</varname></term>
<listitem>
<para>Link groups are similar to port ranges found in managed switches.
When network interfaces are added to a numbered group, operations on
all the interfaces from that group can be performed at once. An unsigned
- integer ranges 0 to 4294967294. Default to unset.</para>
+ integer in the range 0—4294967294. Defaults to unset.</para>
</listitem>
</varlistentry>
<varlistentry>
</variablelist>
</refsect1>
+ <refsect1>
+ <title>[SR-IOV] Section Options</title>
+ <para>The [SR-IOV] section accepts the following keys. Specify several [SR-IOV] sections to configure
+ several SR-IOVs. SR-IOV provides the ability to partition a single physical PCI resource into virtual
+ PCI functions which can then be injected into a VM. In the case of network VFs, SR-IOV improves
+ north-south network performance (that is, traffic with endpoints outside the host machine) by allowing
+ traffic to bypass the host machine’s network stack.</para>
+
+ <variablelist class='network-directives'>
+ <varlistentry>
+ <term><varname>VirtualFunction=</varname></term>
+ <listitem>
+ <para>Specifies a Virtual Function (VF), lightweight PCIe function designed solely to move data
+ in and out. Takes an unsigned integer in the range 0..2147483646. This option is compulsory.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>VLANId=</varname></term>
+ <listitem>
+ <para>Specifies VLAN ID of the virtual function. Takes an unsigned integer in the range 1..4095.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>QualityOfService=</varname></term>
+ <listitem>
+ <para>Specifies quality of service of the virtual function. Takes an unsigned integer in the range 1..4294967294.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>VLANProtocol=</varname></term>
+ <listitem>
+ <para>Specifies VLAN protocol of the virtual function. Takes <literal>802.1Q</literal> or
+ <literal>802.1ad</literal>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>MACSpoofCheck=</varname></term>
+ <listitem>
+ <para>Takes a boolean. Controls the MAC spoof checking. When unset, the kernel's default will be used.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>QueryReceiveSideScaling=</varname></term>
+ <listitem>
+ <para>Takes a boolean. Toggle the ability of querying the receive side scaling (RSS)
+ configuration of the virtual function (VF). The VF RSS information like RSS hash key may be
+ considered sensitive on some devices where this information is shared between VF and the
+ physical function (PF). When unset, the kernel's default will be used.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>Trust=</varname></term>
+ <listitem>
+ <para>Takes a boolean. Allows to set trust mode of the virtual function (VF). When set, VF
+ users can set a specific feature which may impact security and/or performance. When unset,
+ the kernel's default will be used.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>LinkState=</varname></term>
+ <listitem>
+ <para>Allows to set the link state of the virtual function (VF). Takes a boolean or a
+ special value <literal>auto</literal>. Setting to <literal>auto</literal> means a
+ reflection of the physical function (PF) link state, <literal>yes</literal> lets the VF to
+ communicate with other VFs on this host even if the PF link state is down,
+ <literal>no</literal> causes the hardware to drop any packets sent by the VF. When unset,
+ the kernel's default will be used.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>MACAddress=</varname></term>
+ <listitem>
+ <para>Specifies the MAC address for the virtual function.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </refsect1>
+
<refsect1>
<title>[Network] Section Options</title>
- <para>The <literal>[Network]</literal> section accepts the following keys:</para>
+ <para>The [Network] section accepts the following keys:</para>
<variablelist class='network-directives'>
<varlistentry>
specified through DHCP is not used for name resolution.
See option <option>UseDomains=</option> below.</para>
- <para>See the <literal>[DHCPv4]</literal> or <literal>[DHCPv6]</literal> section below for
- further configuration options for the DHCP client support.</para>
+ <para>See the [DHCPv4] or [DHCPv6] sections below for further configuration options for the DHCP
+ client support.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>DHCPServer=</varname></term>
<listitem>
<para>Takes a boolean. If set to <literal>yes</literal>, DHCPv4 server will be started. Defaults
- to <literal>no</literal>. Further settings for the DHCP
- server may be set in the <literal>[DHCPServer]</literal>
+ to <literal>no</literal>. Further settings for the DHCP server may be set in the [DHCPServer]
section described below.</para>
</listitem>
</varlistentry>
</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>IPv6LinkLocalAddressGenerationMode=</varname></term>
+ <listitem>
+ <para>Specifies how IPv6 link local address is generated. Takes one of <literal>eui64</literal>,
+ <literal>none</literal>, <literal>stable-privacy</literal> and <literal>random</literal>.
+ When unset, the kernel's default will be used. Note that if <varname>LinkLocalAdressing=</varname>
+ not configured as <literal>ipv6</literal> then <varname>IPv6LinkLocalAddressGenerationMode=</varname>
+ is ignored.</para>
+ </listitem>
+ </varlistentry>
<varlistentry>
<term><varname>IPv4LLRoute=</varname></term>
<listitem>
<varlistentry>
<term><varname>DNSSEC=</varname></term>
<listitem>
- <para>Takes a boolean. or
- <literal>allow-downgrade</literal>. When true, enables
- <ulink
- url="https://tools.ietf.org/html/rfc4033">DNSSEC</ulink>
+ <para>Takes a boolean or <literal>allow-downgrade</literal>. When true, enables
+ <ulink url="https://tools.ietf.org/html/rfc4033">DNSSEC</ulink>
DNS validation support on the link. When set to
<literal>allow-downgrade</literal>, compatibility with
non-DNSSEC capable networks is increased, by automatically
forwarding is enabled, and to enable it otherwise. Cannot be enabled on bond devices and when link
local addressing is disabled.</para>
- <para>Further settings for the IPv6 RA support may be configured in the
- <literal>[IPv6AcceptRA]</literal> section, see below.</para>
+ <para>Further settings for the IPv6 RA support may be configured in the [IPv6AcceptRA] section, see
+ below.</para>
<para>Also see <ulink
url="https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt">ip-sysctl.txt</ulink> in the kernel
<term><varname>IPv4ProxyARP=</varname></term>
<listitem><para>Takes a boolean. Configures proxy ARP for IPv4. Proxy ARP is the technique in which one host,
usually a router, answers ARP requests intended for another machine. By "faking" its identity,
- the router accepts responsibility for routing packets to the "real" destination. (see <ulink
+ the router accepts responsibility for routing packets to the "real" destination. See <ulink
url="https://tools.ietf.org/html/rfc1027">RFC 1027</ulink>.
When unset, the kernel's default will be used.
</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>IPv6PrefixDelegation=</varname></term>
- <listitem><para>Whether to enable or disable Router Advertisement sending on a link.
- Allowed values are <literal>static</literal> which distributes prefixes as defined in
- the <literal>[IPv6PrefixDelegation]</literal> and any <literal>[IPv6Prefix]</literal>
- sections, <literal>dhcpv6</literal> which requests prefixes using a DHCPv6 client
- configured for another link and any values configured in the
- <literal>[IPv6PrefixDelegation]</literal> section while ignoring all static prefix
- configuration sections, <literal>yes</literal> which uses both static configuration
- and DHCPv6, and <literal>false</literal> which turns off IPv6 prefix delegation
- altogether. Defaults to <literal>false</literal>. See the
- <literal>[IPv6PrefixDelegation]</literal> and the <literal>[IPv6Prefix]</literal>
- sections for more configuration options.
- </para></listitem>
+ <listitem><para>Whether to enable or disable Router Advertisement sending on a link. Allowed
+ values are <literal>static</literal> which distributes prefixes as defined in the
+ [IPv6PrefixDelegation] and any [IPv6Prefix] sections, <literal>dhcpv6</literal> which requests
+ prefixes using a DHCPv6 client configured for another link and any values configured in the
+ [IPv6PrefixDelegation] section while ignoring all static prefix configuration sections,
+ <literal>yes</literal> which uses both static configuration and DHCPv6, and
+ <literal>false</literal> which turns off IPv6 prefix delegation altogether. Defaults to
+ <literal>false</literal>. See the [IPv6PrefixDelegation] and the [IPv6Prefix] sections for more
+ configuration options.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>IPv6PDSubnetId=</varname></term>
<refsect1>
<title>[Address] Section Options</title>
- <para>An <literal>[Address]</literal> section accepts the
- following keys. Specify several <literal>[Address]</literal>
+ <para>An [Address] section accepts the following keys. Specify several [Address]
sections to configure several addresses.</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>Address=</varname></term>
<listitem>
- <para>As in the <literal>[Network]</literal> section. This key is mandatory. Each
- <literal>[Address]</literal> section can contain one <varname>Address=</varname> setting.</para>
+ <para>As in the [Network] section. This key is mandatory. Each [Address] section can contain one
+ <varname>Address=</varname> setting.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Scope=</varname></term>
<listitem>
<para>The scope of the address, which can be <literal>global</literal>,
- <literal>link</literal> or <literal>host</literal> or an unsigned integer ranges 0 to 255.
+ <literal>link</literal> or <literal>host</literal> or an unsigned integer in the range 0—255.
Defaults to <literal>global</literal>.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[Neighbor] Section Options</title>
- <para>A <literal>[Neighbor]</literal> section accepts the
- following keys. The neighbor section adds a permanent, static
- entry to the neighbor table (IPv6) or ARP table (IPv4) for
- the given hardware address on the links matched for the network.
- Specify several <literal>[Neighbor]</literal> sections to configure
- several static neighbors.</para>
+ <para>A [Neighbor] section accepts the following keys. The neighbor section adds a permanent, static
+ entry to the neighbor table (IPv6) or ARP table (IPv4) for the given hardware address on the links
+ matched for the network. Specify several [Neighbor] sections to configure several static neighbors.
+ </para>
<variablelist class='network-directives'>
<varlistentry>
<refsect1>
<title>[IPv6AddressLabel] Section Options</title>
- <para>An <literal>[IPv6AddressLabel]</literal> section accepts the
- following keys. Specify several <literal>[IPv6AddressLabel]</literal>
- sections to configure several address labels. IPv6 address labels are
- used for address selection. See <ulink url="https://tools.ietf.org/html/rfc3484">RFC 3484</ulink>.
- Precedence is managed by userspace, and only the label itself is stored in the kernel</para>
+ <para>An [IPv6AddressLabel] section accepts the following keys. Specify several [IPv6AddressLabel]
+ sections to configure several address labels. IPv6 address labels are used for address selection. See
+ <ulink url="https://tools.ietf.org/html/rfc3484">RFC 3484</ulink>. Precedence is managed by userspace,
+ and only the label itself is stored in the kernel</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>Label=</varname></term>
<listitem>
- <para> The label for the prefix (an unsigned integer) ranges 0 to 4294967294.
- 0xffffffff is reserved. This key is mandatory.</para>
+ <para>The label for the prefix, an unsigned integer in the range 0–4294967294.
+ 0xffffffff is reserved. This setting is mandatory.</para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[RoutingPolicyRule] Section Options</title>
- <para>An <literal>[RoutingPolicyRule]</literal> section accepts the
- following keys. Specify several <literal>[RoutingPolicyRule]</literal>
+ <para>An [RoutingPolicyRule] section accepts the following keys. Specify several [RoutingPolicyRule]
sections to configure several rules.</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>TypeOfService=</varname></term>
<listitem>
- <para>Specifies the type of service to match a number between 0 to 255.</para>
+ <para>Takes a number between 0 and 255 that specifies the type of service to match.</para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[NextHop] Section Options</title>
- <para>The <literal>[NextHop]</literal> section accepts the
- following keys. Specify several <literal>[NextHop]</literal>
- sections to configure several nexthop. Nexthop is used to manipulate entries in the kernel's nexthop
- tables.</para>
+ <para>The [NextHop] section is used to manipulate entries in the kernel's "nexthop" tables. The
+ [NextHop] section accepts the following keys. Specify several [NextHop] sections to configure several
+ hops.</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>Gateway=</varname></term>
<listitem>
- <para>As in the <literal>[Network]</literal> section. This is mandatory.</para>
+ <para>As in the [Network] section. This is mandatory.</para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[Route] Section Options</title>
- <para>The <literal>[Route]</literal> section accepts the
- following keys. Specify several <literal>[Route]</literal>
- sections to configure several routes.</para>
+ <para>The [Route] section accepts the following keys. Specify several [Route] sections to configure
+ several routes.</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>IPv6Preference=</varname></term>
<listitem>
<para>Specifies the route preference as defined in <ulink
- url="https://tools.ietf.org/html/rfc4191">RFC4191</ulink> for Router Discovery messages.
- Which can be one of <literal>low</literal> the route has a lowest priority,
- <literal>medium</literal> the route has a default priority or
- <literal>high</literal> the route has a highest priority.</para>
+ url="https://tools.ietf.org/html/rfc4191">RFC 4191</ulink> for Router Discovery messages. Which
+ can be one of <literal>low</literal> the route has a lowest priority, <literal>medium</literal>
+ the route has a default priority or <literal>high</literal> the route has a highest priority.
+ </para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[DHCPv4] Section Options</title>
- <para>The <literal>[DHCPv4]</literal> section configures the
- DHCPv4 client, if it is enabled with the
+ <para>The [DHCPv4] section configures the DHCPv4 client, if it is enabled with the
<varname>DHCP=</varname> setting described above:</para>
<variablelist class='network-directives'>
<para>The table identifier for DHCP routes (a number between 1 and 4294967295, or 0 to unset).
The table can be retrieved using <command>ip route show table <replaceable>num</replaceable></command>.
</para>
- <para>When used in combination with <varname>VRF=</varname> the
- VRF's routing table is used unless this parameter is specified.
+ <para>When used in combination with <varname>VRF=</varname>, the
+ VRF's routing table is used when this parameter is not specified.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>SendDecline=</varname></term>
<listitem>
- <para>A boolean. When <literal>true</literal>, DHCPv4 clients receives IP address from DHCP server.
- After new IP is received, DHCPv4 performs IPv4 Duplicate Address Detection. If duplicate use of IP is detected
- the DHCPv4 client rejects the IP by sending a DHCPDECLINE packet DHCP clients try to obtain an IP address again.
- See <ulink url="https://tools.ietf.org/html/rfc5227">RFC 5224</ulink>.
- Defaults to <literal>unset</literal>.</para>
+ <para>A boolean. When <literal>true</literal>, the DHCPv4 client receives the IP address from the
+ DHCP server. After a new IP is received, the DHCPv4 client performs IPv4 Duplicate Address
+ Detection. If duplicate use is detected, the DHCPv4 client rejects the IP by sending a
+ DHCPDECLINE packet and tries to obtain an IP address again. See <ulink
+ url="https://tools.ietf.org/html/rfc5227">RFC 5224</ulink>. Defaults to
+ <literal>unset</literal>.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><varname>BlackList=</varname></term>
+ <term><varname>DenyList=</varname></term>
<listitem>
- <para>A whitespace-separated list of IPv4 addresses. DHCP offers from servers in the list are rejected.</para>
+ <para>A whitespace-separated list of IPv4 addresses. DHCP offers from servers in the list are rejected. Note that
+ if <varname>AllowList=</varname> is configured then <varname>DenyList=</varname> is ignored.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>AllowList=</varname></term>
+ <listitem>
+ <para>A whitespace-separated list of IPv4 addresses. DHCP offers from servers in the list are accepted.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[DHCPv6] Section Options</title>
- <para>The <literal>[DHCPv6]</literal> section configures the DHCPv6 client, if it is enabled with the
+ <para>The [DHCPv6] section configures the DHCPv6 client, if it is enabled with the
<varname>DHCP=</varname> setting described above, or invoked by the IPv6 Router Advertisement:</para>
<variablelist class='network-directives'>
<term><varname>UseDNS=</varname></term>
<term><varname>UseNTP=</varname></term>
<listitem>
- <para>As in the <literal>[DHCPv4]</literal> section.</para>
+ <para>As in the [DHCPv4] section.</para>
</listitem>
</varlistentry>
<para>Takes a boolean. The DHCPv6 client can obtain configuration parameters from a DHCPv6 server through
a rapid two-message exchange (solicit and reply). When the rapid commit option is enabled by both
the DHCPv6 client and the DHCPv6 server, the two-message exchange is used, rather than the default
- four-method exchange (solicit, advertise, request, and reply). The two-message exchange provides
+ four-message exchange (solicit, advertise, request, and reply). The two-message exchange provides
faster client configuration and is beneficial in environments in which networks are under a heavy load.
See <ulink url="https://tools.ietf.org/html/rfc3315#section-17.2.1">RFC 3315</ulink> for details.
Defaults to true.</para>
<varlistentry>
<term><varname>SendVendorOption=</varname></term>
<listitem>
- <para>Send an arbitrary vendor option in the DHCPv6 request. Takes an enterprise identifier, DHCP option number,
- data type, and data separated with a colon
- (<literal><replaceable>enterprise identifier</replaceable>:<replaceable>option</replaceable>:<replaceable>type</replaceable>:
- <replaceable>value</replaceable></literal>). Enterprise identifier is an unsigned integer ranges 1..4294967294.
- The option number must be an integer in the range 1..254. Data type takes one of <literal>uint8</literal>,
- <literal>uint16</literal>, <literal>uint32</literal>, <literal>ipv4address</literal>, <literal>ipv6address</literal>, or
- <literal>string</literal>. Special characters in the data string may be escaped using
- <ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
+ <para>Send an arbitrary vendor option in the DHCPv6 request. Takes an enterprise identifier, DHCP
+ option number, data type, and data separated with a colon (<literal><replaceable>enterprise
+ identifier</replaceable>:<replaceable>option</replaceable>:<replaceable>type</replaceable>:
+ <replaceable>value</replaceable></literal>). Enterprise identifier is an unsigned integer in the
+ range 1–4294967294. The option number must be an integer in the range 1–254. Data type takes one
+ of <literal>uint8</literal>, <literal>uint16</literal>, <literal>uint32</literal>,
+ <literal>ipv4address</literal>, <literal>ipv6address</literal>, or
+ <literal>string</literal>. Special characters in the data string may be escaped using <ulink
+ url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style
escapes</ulink>. This setting can be specified multiple times. If an empty string is specified,
then all options specified earlier are cleared. Defaults to unset.</para>
</listitem>
<varlistentry>
<term><varname>PrefixDelegationHint=</varname></term>
<listitem>
- <para>Takes an IPv6 address with prefix length as <varname>Address=</varname> in
- the "[Network]" section. Specifies the DHCPv6 client for the requesting router to include
- a prefix-hint in the DHCPv6 solicitation. Prefix ranges 1..128. Defaults to unset.</para>
+ <para>Takes an IPv6 address with prefix length in the same format as the
+ <varname>Address=</varname> in the [Network] section. The DHCPv6 client will include a prefix
+ hint in the DHCPv6 solicitation sent to the server. The prefix length must be in the range
+ 1–128. Defaults to unset.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>WithoutRA=</varname></term>
<listitem>
- <para>When true, DHCPv6 client starts without router advertisements's managed or other address configuration flag.
- Defaults to false.</para>
+ <para>Allows DHCPv6 client to start without router advertisements's managed or other address
+ configuration flag. Takes one of <literal>solicit</literal> or
+ <literal>information-request</literal>. Defaults to unset.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>SendOption=</varname></term>
<listitem>
- <para>As in the <literal>[DHCPv4]</literal> section, however because DHCPv6 uses 16-bit fields to store
+ <para>As in the [DHCPv4] section, however because DHCPv6 uses 16-bit fields to store
option numbers, the option number is an integer in the range 1..65536.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[IPv6AcceptRA] Section Options</title>
- <para>The <literal>[IPv6AcceptRA]</literal> section configures the IPv6 Router Advertisement
- (RA) client, if it is enabled with the <varname>IPv6AcceptRA=</varname> setting described
- above:</para>
+ <para>The [IPv6AcceptRA] section configures the IPv6 Router Advertisement (RA) client, if it is enabled
+ with the <varname>IPv6AcceptRA=</varname> setting described above:</para>
<variablelist class='network-directives'>
<varlistentry>
</varlistentry>
<varlistentry>
- <term><varname>BlackList=</varname></term>
+ <term><varname>DenyList=</varname></term>
<listitem>
<para>A whitespace-separated list of IPv6 prefixes. IPv6 prefixes supplied via router advertisements in the list are ignored.</para>
</listitem>
<refsect1>
<title>[DHCPServer] Section Options</title>
- <para>The <literal>[DHCPServer]</literal> section contains
- settings for the DHCP server, if enabled via the
+ <para>The [DHCPServer] section contains settings for the DHCP server, if enabled via the
<varname>DHCPServer=</varname> option described above:</para>
<variablelist class='network-directives'>
<refsect1>
<title>[IPv6PrefixDelegation] Section Options</title>
- <para>The <literal>[IPv6PrefixDelegation]</literal> section contains
- settings for sending IPv6 Router Advertisements and whether to act as
- a router, if enabled via the <varname>IPv6PrefixDelegation=</varname>
- option described above. IPv6 network prefixes are defined with one or
- more <literal>[IPv6Prefix]</literal> sections.</para>
+ <para>The [IPv6PrefixDelegation] section contains settings for sending IPv6 Router Advertisements and
+ whether to act as a router, if enabled via the <varname>IPv6PrefixDelegation=</varname> option described
+ above. IPv6 network prefixes are defined with one or more [IPv6Prefix] sections.</para>
<variablelist class='network-directives'>
<term><varname>EmitDNS=</varname></term>
<term><varname>DNS=</varname></term>
- <listitem><para><varname>DNS=</varname> specifies a list of recursive DNS server IPv6 addresses
- that are distributed via Router Advertisement messages when <varname>EmitDNS=</varname> is
- true. <varname>DNS=</varname> also takes special value <literal>_link_local</literal>; in that
- case the IPv6 link local address is distributed. If <varname>DNS=</varname> is empty, DNS
- servers are read from the <literal>[Network]</literal> section. If the
- <literal>[Network]</literal> section does not contain any DNS servers either, DNS servers from
- the uplink with the highest priority default route are used. When <varname>EmitDNS=</varname>
- is false, no DNS server information is sent in Router Advertisement messages.
- <varname>EmitDNS=</varname> defaults to true.
- </para></listitem>
+ <listitem><para><varname>DNS=</varname> specifies a list of recursive DNS server IPv6 addresses that
+ are distributed via Router Advertisement messages when <varname>EmitDNS=</varname> is
+ true. <varname>DNS=</varname> also takes special value <literal>_link_local</literal>; in that case
+ the IPv6 link local address is distributed. If <varname>DNS=</varname> is empty, DNS servers are read
+ from the [Network] section. If the [Network] section does not contain any DNS servers either, DNS
+ servers from the uplink with the highest priority default route are used. When
+ <varname>EmitDNS=</varname> is false, no DNS server information is sent in Router Advertisement
+ messages. <varname>EmitDNS=</varname> defaults to true.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>EmitDomains=</varname></term>
<term><varname>Domains=</varname></term>
- <listitem><para>A list of DNS search domains distributed via Router
- Advertisement messages when <varname>EmitDomains=</varname> is true. If
- <varname>Domains=</varname> is empty, DNS search domains are read from the
- <literal>[Network]</literal> section. If the <literal>[Network]</literal>
- section does not contain any DNS search domains either, DNS search
- domains from the uplink with the highest priority default route are
- used. When <varname>EmitDomains=</varname> is false, no DNS search domain
- information is sent in Router Advertisement messages.
- <varname>EmitDomains=</varname> defaults to true.
- </para></listitem>
+ <listitem><para>A list of DNS search domains distributed via Router Advertisement messages when
+ <varname>EmitDomains=</varname> is true. If <varname>Domains=</varname> is empty, DNS search domains
+ are read from the [Network] section. If the [Network] section does not contain any DNS search domains
+ either, DNS search domains from the uplink with the highest priority default route are used. When
+ <varname>EmitDomains=</varname> is false, no DNS search domain information is sent in Router
+ Advertisement messages. <varname>EmitDomains=</varname> defaults to true.</para></listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[IPv6Prefix] Section Options</title>
- <para>One or more <literal>[IPv6Prefix]</literal> sections contain the IPv6
- prefixes that are announced via Router Advertisements. See
- <ulink url="https://tools.ietf.org/html/rfc4861">RFC 4861</ulink>
- for further details.</para>
+ <para>One or more [IPv6Prefix] sections contain the IPv6 prefixes that are announced via Router
+ Advertisements. See <ulink url="https://tools.ietf.org/html/rfc4861">RFC 4861</ulink> for further
+ details.</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>Prefix=</varname></term>
- <listitem><para>The IPv6 prefix that is to be distributed to hosts.
- Similarly to configuring static IPv6 addresses, the setting is
- configured as an IPv6 prefix and its prefix length, separated by a
- <literal>/</literal> character. Use multiple
- <literal>[IPv6Prefix]</literal> sections to configure multiple IPv6
- prefixes since prefix lifetimes, address autoconfiguration and onlink
- status may differ from one prefix to another.</para></listitem>
+ <listitem><para>The IPv6 prefix that is to be distributed to hosts. Similarly to configuring static
+ IPv6 addresses, the setting is configured as an IPv6 prefix and its prefix length, separated by a
+ <literal>/</literal> character. Use multiple [IPv6Prefix] sections to configure multiple IPv6
+ prefixes since prefix lifetimes, address autoconfiguration and onlink status may differ from one
+ prefix to another.</para></listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[IPv6RoutePrefix] Section Options</title>
- <para>One or more <literal>[IPv6RoutePrefix]</literal> sections contain the IPv6
+ <para>One or more [IPv6RoutePrefix] sections contain the IPv6
prefix routes that are announced via Router Advertisements. See
<ulink url="https://tools.ietf.org/html/rfc4191">RFC 4191</ulink>
for further details.</para>
<varlistentry>
<term><varname>Route=</varname></term>
- <listitem><para>The IPv6 route that is to be distributed to hosts.
- Similarly to configuring static IPv6 routes, the setting is
- configured as an IPv6 prefix routes and its prefix route length,
- separated by a<literal>/</literal> character. Use multiple
- <literal>[IPv6PrefixRoutes]</literal> sections to configure multiple IPv6
- prefix routes.</para></listitem>
+ <listitem><para>The IPv6 route that is to be distributed to hosts. Similarly to configuring static
+ IPv6 routes, the setting is configured as an IPv6 prefix routes and its prefix route length,
+ separated by a <literal>/</literal> character. Use multiple [IPv6PrefixRoutes] sections to configure
+ multiple IPv6 prefix routes.</para></listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[Bridge] Section Options</title>
- <para>The <literal>[Bridge]</literal> section accepts the
- following keys.</para>
+ <para>The [Bridge] section accepts the following keys:</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>UnicastFlood=</varname></term>
<varlistentry>
<term><varname>HairPin=</varname></term>
<listitem>
- <para>Takes a boolean. Configures whether traffic may be sent back
- out of the port on which it was received. When this flag is false, and the bridge
- will not forward traffic back out of the receiving port.
- When unset, the kernel's default will be used.</para>
+ <para>Takes a boolean. Configures whether traffic may be sent back out of the port on which it
+ was received. When this flag is false, then the bridge will not forward traffic back out of the
+ receiving port. When unset, the kernel's default will be used.</para>
</listitem>
</varlistentry>
<varlistentry>
</refsect1>
<refsect1>
<title>[BridgeFDB] Section Options</title>
- <para>The <literal>[BridgeFDB]</literal> section manages the
- forwarding database table of a port and accepts the following
- keys. Specify several <literal>[BridgeFDB]</literal> sections to
- configure several static MAC table entries.</para>
+ <para>The [BridgeFDB] section manages the forwarding database table of a port and accepts the following
+ keys. Specify several [BridgeFDB] sections to configure several static MAC table entries.</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>MACAddress=</varname></term>
<listitem>
- <para>As in the <literal>[Network]</literal> section. This
- key is mandatory.</para>
+ <para>As in the [Network] section. This key is mandatory.</para>
</listitem>
</varlistentry>
<varlistentry>
<refsect1>
<title>[LLDP] Section Options</title>
- <para>The <literal>[LLDP]</literal> section manages the Link Layer Discovery Protocol (LLDP) and accepts the
- following keys.</para>
+ <para>The [LLDP] section manages the Link Layer Discovery Protocol (LLDP) and accepts the following
+ keys.</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>MUDURL=</varname></term>
<refsect1>
<title>[CAN] Section Options</title>
- <para>The <literal>[CAN]</literal> section manages the Controller Area Network (CAN bus) and accepts the
- following keys.</para>
+ <para>The [CAN] section manages the Controller Area Network (CAN bus) and accepts the
+ following keys:</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>BitRate=</varname></term>
<refsect1>
<title>[QDisc] Section Options</title>
- <para>The <literal>[QDisc]</literal> section manages the traffic control queueing discipline (qdisc).</para>
+ <para>The [QDisc] section manages the traffic control queueing discipline (qdisc).</para>
<variablelist class='network-directives'>
<varlistentry>
<refsect1>
<title>[NetworkEmulator] Section Options</title>
- <para>The <literal>[NetworkEmulator]</literal> section manages the queueing discipline (qdisc) of
- the network emulator. It can be used to configure the kernel packet scheduler and simulate packet
- delay and loss for UDP or TCP applications, or limit the bandwidth usage of a particular service to
- simulate internet connections.</para>
+ <para>The [NetworkEmulator] section manages the queueing discipline (qdisc) of the network emulator. It
+ can be used to configure the kernel packet scheduler and simulate packet delay and loss for UDP or TCP
+ applications, or limit the bandwidth usage of a particular service to simulate internet connections.
+ </para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<term><varname>PacketLimit=</varname></term>
<listitem>
<para>Specifies the maximum number of packets the qdisc may hold queued at a time.
- An unsigned integer ranges 0 to 4294967294. Defaults to 1000.</para>
+ An unsigned integer in the range 0–4294967294. Defaults to 1000.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[TokenBucketFilter] Section Options</title>
- <para>The <literal>[TokenBucketFilter]</literal> section manages the queueing discipline (qdisc) of
- token bucket filter (tbf).</para>
+ <para>The [TokenBucketFilter] section manages the queueing discipline (qdisc) of token bucket filter
+ (tbf).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
</varlistentry>
<varlistentry>
- <term><varname>LimitSize=</varname></term>
+ <term><varname>LimitBytes=</varname></term>
<listitem>
<para>Takes the number of bytes that can be queued waiting for tokens to become available.
When the size is suffixed with K, M, or G, it is parsed as Kilobytes, Megabytes, or Gigabytes,
- respectively, to the base of 1000. Defaults to unset.</para>
+ respectively, to the base of 1024. Defaults to unset.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><varname>Burst=</varname></term>
+ <term><varname>BurstBytes=</varname></term>
<listitem>
<para>Specifies the size of the bucket. This is the maximum amount of bytes that tokens
can be available for instantaneous transfer. When the size is suffixed with K, M, or G, it is
- parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1000. Defaults to
+ parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1024. Defaults to
unset.</para>
</listitem>
</varlistentry>
<listitem>
<para>The Minimum Packet Unit (MPU) determines the minimal token usage (specified in bytes)
for a packet. When suffixed with K, M, or G, the specified size is parsed as Kilobytes,
- Megabytes, or Gigabytes, respectively, to the base of 1000. Defaults to zero.</para>
+ Megabytes, or Gigabytes, respectively, to the base of 1024. Defaults to zero.</para>
</listitem>
</varlistentry>
<term><varname>MTUBytes=</varname></term>
<listitem>
<para>Specifies the size of the peakrate bucket. When suffixed with K, M, or G, the specified
- size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1000.
+ size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1024.
Defaults to unset.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[PIE] Section Options</title>
- <para>The <literal>[PIE]</literal> section manages the queueing discipline
- (qdisc) of Proportional Integral controller-Enhanced (PIE).</para>
+ <para>The [PIE] section manages the queueing discipline (qdisc) of Proportional Integral
+ controller-Enhanced (PIE).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<term><varname>PacketLimit=</varname></term>
<listitem>
<para>Specifies the hard limit on the queue size in number of packets. When this limit is reached, incoming packets are
- dropped. An unsigned integer ranges 1 to 4294967294. Defaults to unset and kernel's default is used.</para>
+ dropped. An unsigned integer in the range 1–4294967294. Defaults to unset and kernel's default is used.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>[StochasticFairBlue] Section Options</title>
- <para>The <literal>[StochasticFairBlue]</literal> section manages the queueing discipline
- (qdisc) of stochastic fair blue (sfb).</para>
+ <para>The [StochasticFairBlue] section manages the queueing discipline (qdisc) of stochastic fair blue
+ (sfb).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<varlistentry>
<term><varname>PacketLimit=</varname></term>
<listitem>
- <para>Specifies the hard limit on the queue size in number of packets. When this limit is reached, incoming packets are
- dropped. An unsigned integer ranges 0 to 4294967294. Defaults to unset and kernel's default is used.</para>
+ <para>Specifies the hard limit on the queue size in number of packets. When this limit is reached,
+ incoming packets are dropped. An unsigned integer in the range 0–4294967294. Defaults to unset and
+ kernel's default is used.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>[StochasticFairnessQueueing] Section Options</title>
- <para>The <literal>[StochasticFairnessQueueing]</literal> section manages the queueing discipline
- (qdisc) of stochastic fairness queueing (sfq).</para>
+ <para>The [StochasticFairnessQueueing] section manages the queueing discipline (qdisc) of stochastic
+ fairness queueing (sfq).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<refsect1>
<title>[BFIFO] Section Options</title>
- <para>The <literal>[BFIFO]</literal> section manages the queueing discipline (qdisc) of
- Byte limited Packet First In First Out (bfifo).</para>
+ <para>The [BFIFO] section manages the queueing discipline (qdisc) of Byte limited Packet First In First
+ Out (bfifo).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<xi:include href="tc.xml" xpointer="qdisc-handle" />
<varlistentry>
- <term><varname>LimitSize=</varname></term>
+ <term><varname>LimitBytes=</varname></term>
<listitem>
- <para>Specifies the hard limit on the FIFO size in bytes. The size limit (a buffer size) to prevent it
- from overflowing in case it is unable to dequeue packets as quickly as it receives them. When this limit
- is reached, incoming packets are dropped. When suffixed with K, M, or G, the specified size is parsed as
- Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1024. Defaults to unset and kernel's default is used.</para>
+ <para>Specifies the hard limit on the FIFO size in bytes. The size limit (a buffer size) to prevent
+ it from overflowing in case it is unable to dequeue packets as quickly as it receives them. When
+ this limit is reached, incoming packets are dropped. When suffixed with K, M, or G, the specified
+ size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1024. Defaults
+ to unset and kernel's default is used.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>[PFIFO] Section Options</title>
- <para>The <literal>[PFIFO]</literal> section manages the queueing discipline (qdisc) of
- Packet First In First Out (pfifo).</para>
+ <para>The [PFIFO] section manages the queueing discipline (qdisc) of Packet First In First Out
+ (pfifo).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<varlistentry>
<term><varname>PacketLimit=</varname></term>
<listitem>
- <para>Specifies the hard limit on the FIFO size in number of packets. The size limit (a buffer size) to prevent it
- from overflowing in case it is unable to dequeue packets as quickly as it receives them. When this limit is reached,
- incoming packets are dropped. An unsigned integer ranges 0 to 4294967294. Defaults to unset and kernel's default is used.</para>
+ <para>Specifies the hard limit on the FIFO size in number of packets. The size limit (a buffer
+ size) to prevent it from overflowing in case it is unable to dequeue packets as quickly as it
+ receives them. When this limit is reached, incoming packets are dropped. An unsigned integer in the
+ range 0–4294967294. Defaults to unset and kernel's default is used.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>[PFIFOHeadDrop] Section Options</title>
- <para>The <literal>[PFIFOHeadDrop]</literal> section manages the queueing discipline (qdisc) of
- Packet First In First Out Head Drop (pfifo_head_drop).</para>
+ <para>The [PFIFOHeadDrop] section manages the queueing discipline (qdisc) of Packet First In First Out
+ Head Drop (pfifo_head_drop).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<varlistentry>
<term><varname>PacketLimit=</varname></term>
<listitem>
- <para>As in <literal>[PFIFO]</literal> section.</para></listitem>
+ <para>As in [PFIFO] section.</para></listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>[PFIFOFast] Section Options</title>
- <para>The <literal>[PFIFOFast]</literal> section manages the queueing discipline (qdisc) of
- Packet First In First Out Fast (pfifo_fast).</para>
+ <para>The [PFIFOFast] section manages the queueing discipline (qdisc) of Packet First In First Out Fast
+ (pfifo_fast).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<refsect1>
<title>[CAKE] Section Options</title>
- <para>The <literal>[CAKE]</literal> section manages the queueing discipline (qdisc) of
- Common Applications Kept Enhanced (CAKE).</para>
+ <para>The [CAKE] section manages the queueing discipline (qdisc) of Common Applications Kept Enhanced
+ (CAKE).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<xi:include href="tc.xml" xpointer="qdisc-handle" />
<varlistentry>
- <term><varname>Overhead=</varname></term>
+ <term><varname>OverheadBytes=</varname></term>
<listitem>
- <para>Specifies that bytes to be addeded to the size of each packet. Bytes may be negative.
- Takes an integer ranges -64 to 256. Defaults to unset and kernel's default is used.</para>
+ <para>Specifies that bytes to be addeded to the size of each packet. Bytes may be negative. Takes
+ an integer in the range from -64 to 256. Defaults to unset and kernel's default is used.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[ControlledDelay] Section Options</title>
- <para>The <literal>[ControlledDelay]</literal> section manages the queueing discipline (qdisc) of
+ <para>The [ControlledDelay] section manages the queueing discipline (qdisc) of
controlled delay (CoDel).</para>
<variablelist class='network-directives'>
<varlistentry>
<term><varname>PacketLimit=</varname></term>
<listitem>
- <para>Specifies the hard limit on the queue size in number of packets. When this limit is reached, incoming packets are
- dropped. An unsigned integer ranges 0 to 4294967294. Defaults to unset and kernel's default is used.</para>
+ <para>Specifies the hard limit on the queue size in number of packets. When this limit is reached,
+ incoming packets are dropped. An unsigned integer in the range 0–4294967294. Defaults to unset and
+ kernel's default is used.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[DeficitRoundRobinScheduler] Section Options</title>
- <para>The <literal>[DeficitRoundRobinScheduler]</literal> section manages the queueing discipline (qdisc) of
- Deficit Round Robin Scheduler (DRR).</para>
+ <para>The [DeficitRoundRobinScheduler] section manages the queueing discipline (qdisc) of Deficit Round
+ Robin Scheduler (DRR).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<refsect1>
<title>[DeficitRoundRobinSchedulerClass] Section Options</title>
- <para>The <literal>[DeficitRoundRobinSchedulerClass]</literal> section manages the traffic control class of
- Deficit Round Robin Scheduler (DRR).</para>
+ <para>The [DeficitRoundRobinSchedulerClass] section manages the traffic control class of Deficit Round
+ Robin Scheduler (DRR).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="tclass-parent" />
<xi:include href="tc.xml" xpointer="tclass-classid" />
<varlistentry>
- <term><varname>Quantum=</varname></term>
+ <term><varname>QuantumBytes=</varname></term>
+ <listitem>
+ <para>Specifies the amount of bytes a flow is allowed to dequeue before the scheduler moves
+ to the next class. When suffixed with K, M, or G, the specified size is parsed as Kilobytes,
+ Megabytes, or Gigabytes, respectively, to the base of 1024. Defaults to the MTU of the
+ interface.</para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+ </refsect1>
+
+ <refsect1>
+ <title>[EnhancedTransmissionSelection] Section Options</title>
+ <para>The [EnhancedTransmissionSelection] section manages the queueing discipline (qdisc) of Enhanced
+ Transmission Selection (ETS).</para>
+
+ <variablelist class='network-directives'>
+ <xi:include href="tc.xml" xpointer="qdisc-parent" />
+ <xi:include href="tc.xml" xpointer="qdisc-handle" />
+
+ <varlistentry>
+ <term><varname>Bands=</varname></term>
+ <listitem>
+ <para>Specifies the number of bands. An unsigned integer in the range 1–16. This value has to be at
+ least large enough to cover the strict bands specified through the <varname>StrictBands=</varname>
+ and bandwidth-sharing bands specified in <varname>QuantumBytes=</varname>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>StrictBands=</varname></term>
<listitem>
- <para>Specifies the amount of bytes a flow is allowed to dequeue before the
- scheduler moves to the next class. An unsigned integer ranges 1 to 4294967294.
- Defaults to the MTU of the interface.</para>
+ <para>Specifies the number of bands that should be created in strict mode. An unsigned integer in
+ the range 1–16.</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><varname>QuantumBytes=</varname></term>
+ <listitem>
+ <para>Specifies the white-space separated list of quantum used in band-sharing bands. When
+ suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes,
+ respectively, to the base of 1024. This setting can be specified multiple times. If an empty
+ string is assigned, then the all previous assignments are cleared.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>PriorityMap=</varname></term>
+ <listitem>
+ <para>The priority map maps the priority of a packet to a band. The argument is a white-space
+ separated list of numbers. The first number indicates which band the packets with priority
+ 0 should be put to, the second is for priority 1, and so on. There can be up to 16 numbers in
+ the list. If there are fewer, the default band that traffic with one of the unmentioned
+ priorities goes to is the last one. Each band number must be 0..255. This setting can be
+ specified multiple times. If an empty string is assigned, then the all previous assignments
+ are cleared.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>[GenericRandomEarlyDetection] Section Options</title>
- <para>The <literal>[GenericRandomEarlyDetection]</literal> section manages the queueing discipline
- (qdisc) of Generic Random Early Detection (GRED).</para>
+ <para>The [GenericRandomEarlyDetection] section manages the queueing discipline (qdisc) of Generic Random
+ Early Detection (GRED).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<refsect1>
<title>[FairQueueingControlledDelay] Section Options</title>
- <para>The <literal>[FairQueueingControlledDelay]</literal> section manages the queueing discipline
- (qdisc) of fair queuing controlled delay (FQ-CoDel).</para>
+ <para>The [FairQueueingControlledDelay] section manages the queueing discipline (qdisc) of fair queuing
+ controlled delay (FQ-CoDel).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
</varlistentry>
<varlistentry>
- <term><varname>MemoryLimit=</varname></term>
+ <term><varname>MemoryLimitBytes=</varname></term>
<listitem>
<para>Specifies the limit on the total number of bytes that can be queued in this FQ-CoDel instance.
When suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes,
</varlistentry>
<varlistentry>
- <term><varname>Quantum=</varname></term>
+ <term><varname>QuantumBytes=</varname></term>
<listitem>
- <para>Specifies the number of bytes used as 'deficit' in the fair queuing algorithmtimespan.
+ <para>Specifies the number of bytes used as the "deficit" in the fair queuing algorithm timespan.
When suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes,
respectively, to the base of 1024. Defaults to unset and kernel's default is used.</para>
</listitem>
<refsect1>
<title>[FairQueueing] Section Options</title>
- <para>The <literal>[FairQueueing]</literal> section manages the queueing discipline
- (qdisc) of fair queue traffic policing (FQ).</para>
+ <para>The [FairQueueing] section manages the queueing discipline (qdisc) of fair queue traffic policing
+ (FQ).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
</varlistentry>
<varlistentry>
- <term><varname>Quantum=</varname></term>
+ <term><varname>QuantumBytes=</varname></term>
<listitem>
<para>Specifies the credit per dequeue RR round, i.e. the amount of bytes a flow is allowed
to dequeue at once. When suffixed with K, M, or G, the specified size is parsed as Kilobytes,
</varlistentry>
<varlistentry>
- <term><varname>InitialQuantum=</varname></term>
+ <term><varname>InitialQuantumBytes=</varname></term>
<listitem>
<para>Specifies the initial sending rate credit, i.e. the amount of bytes a new flow is
allowed to dequeue initially. When suffixed with K, M, or G, the specified size is parsed as
<refsect1>
<title>[TrivialLinkEqualizer] Section Options</title>
- <para>The <literal>[TrivialLinkEqualizer]</literal> section manages the queueing discipline (qdisc) of
- trivial link equalizer (teql).</para>
+ <para>The [TrivialLinkEqualizer] section manages the queueing discipline (qdisc) of trivial link
+ equalizer (teql).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<refsect1>
<title>[HierarchyTokenBucket] Section Options</title>
- <para>The <literal>[HierarchyTokenBucket]</literal> section manages the queueing discipline (qdisc) of
- hierarchy token bucket (htb).</para>
+ <para>The [HierarchyTokenBucket] section manages the queueing discipline (qdisc) of hierarchy token
+ bucket (htb).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
to the class. Defaults to unset.</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><varname>RateToQuantum=</varname></term>
+ <listitem>
+ <para>Takes an unsigned integer. The DRR quantums are calculated by dividing the value
+ configured in <varname>Rate=</varname> by <varname>RateToQuantum=</varname>.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>[HierarchyTokenBucketClass] Section Options</title>
- <para>The <literal>[HierarchyTokenBucketClass]</literal> section manages the traffic control class of
- hierarchy token bucket (htb).</para>
+ <para>The [HierarchyTokenBucketClass] section manages the traffic control class of hierarchy token bucket
+ (htb).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="tclass-parent" />
<term><varname>Priority=</varname></term>
<listitem>
<para>Specifies the priority of the class. In the round-robin process, classes with the lowest
- priority field are tried for packets first. This setting is mandatory.</para>
+ priority field are tried for packets first.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>QuantumBytes=</varname></term>
+ <listitem>
+ <para>Specifies how many bytes to serve from leaf at once. When suffixed with K, M, or G, the
+ specified size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of
+ 1024.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>MTUBytes=</varname></term>
+ <listitem>
+ <para>Specifies the maximum packet size we create. When suffixed with K, M, or G, the specified
+ size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1024.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>OverheadBytes=</varname></term>
+ <listitem>
+ <para>Takes an unsigned integer which specifies per-packet size overhead used in rate
+ computations. When suffixed with K, M, or G, the specified size is parsed as Kilobytes,
+ Megabytes, or Gigabytes, respectively, to the base of 1024.</para>
</listitem>
</varlistentry>
is used.</para>
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term><varname>BufferBytes=</varname></term>
+ <listitem>
+ <para>Specifies the maximum bytes burst which can be accumulated during idle period. When suffixed
+ with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively,
+ to the base of 1024.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>CeilBufferBytes=</varname></term>
+ <listitem>
+ <para>Specifies the maximum bytes burst for ceil which can be accumulated during idle period.
+ When suffixed with K, M, or G, the specified size is parsed as Kilobytes, Megabytes, or Gigabytes,
+ respectively, to the base of 1024.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsect1>
<refsect1>
<title>[HeavyHitterFilter] Section Options</title>
- <para>The <literal>[HeavyHitterFilter]</literal> section manages the queueing discipline
- (qdisc) of Heavy Hitter Filter (hhf).</para>
+ <para>The [HeavyHitterFilter] section manages the queueing discipline (qdisc) of Heavy Hitter Filter
+ (hhf).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<varlistentry>
<term><varname>PacketLimit=</varname></term>
<listitem>
- <para>Specifies the hard limit on the queue size in number of packets. When this limit is reached, incoming packets are
- dropped. An unsigned integer ranges 0 to 4294967294. Defaults to unset and kernel's default is used.</para>
+ <para>Specifies the hard limit on the queue size in number of packets. When this limit is reached,
+ incoming packets are dropped. An unsigned integer in the range 0–4294967294. Defaults to unset and
+ kernel's default is used.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>[QuickFairQueueing] Section Options</title>
- <para>The <literal>[QuickFairQueueing]</literal> section manages the queueing discipline
- (qdisc) of Quick Fair Queueing (QFQ).</para>
+ <para>The [QuickFairQueueing] section manages the queueing discipline (qdisc) of Quick Fair Queueing
+ (QFQ).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="qdisc-parent" />
<refsect1>
<title>[QuickFairQueueingClass] Section Options</title>
- <para>The <literal>[QuickFairQueueingClass]</literal> section manages the traffic control class of
- Quick Fair Queueing (qfq).</para>
+ <para>The [QuickFairQueueingClass] section manages the traffic control class of Quick Fair Queueing
+ (qfq).</para>
<variablelist class='network-directives'>
<xi:include href="tc.xml" xpointer="tclass-parent" />
</varlistentry>
<varlistentry>
- <term><varname>MaxPacketSize=</varname></term>
+ <term><varname>MaxPacketBytes=</varname></term>
<listitem>
<para>Specifies the maximum packet size in bytes for the class. When suffixed with K, M, or G, the specified
- size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1000. When unset,
+ size is parsed as Kilobytes, Megabytes, or Gigabytes, respectively, to the base of 1024. When unset,
the kernel default is used.</para>
</listitem>
</varlistentry>
<refsect1>
<title>[BridgeVLAN] Section Options</title>
- <para>The <literal>[BridgeVLAN]</literal> section manages the VLAN ID configuration of a bridge port and accepts
- the following keys. Specify several <literal>[BridgeVLAN]</literal> sections to configure several VLAN entries.
- The <varname>VLANFiltering=</varname> option has to be enabled, see <literal>[Bridge]</literal> section in
+ <para>The [BridgeVLAN] section manages the VLAN ID configuration of a bridge port and accepts the
+ following keys. Specify several [BridgeVLAN] sections to configure several VLAN entries. The
+ <varname>VLANFiltering=</varname> option has to be enabled, see the [Bridge] section in
<citerefentry><refentrytitle>systemd.netdev</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
<variablelist class='network-directives'>
<refsect1>
<title>[Exec] Section Options</title>
- <para>Settings files may include an <literal>[Exec]</literal>
+ <para>Settings files may include an [Exec]
section, which carries various execution parameters:</para>
<variablelist class='nspawn-directives'>
<refsect1>
<title>[Files] Section Options</title>
- <para>Settings files may include a <literal>[Files]</literal>
+ <para>Settings files may include a [Files]
section, which carries various parameters configuring the file
system of the container:</para>
<varlistentry>
<term><varname>Inaccessible=</varname></term>
- <listitem><para>Masks the specified file or directly in the container, by over-mounting it with an empty file
+ <listitem><para>Masks the specified file or directory in the container, by over-mounting it with an empty file
node of the same type with the most restrictive access mode. Takes a file system path as argument. This option
may be used multiple times to mask multiple files or directories. This option is equivalent to the command line
switch <option>--inaccessible=</option>, see
<refsect1>
<title>[Network] Section Options</title>
- <para>Settings files may include a <literal>[Network]</literal>
+ <para>Settings files may include a [Network]
section, which carries various parameters configuring the network
connectivity of the container:</para>
<orderedlist>
<listitem>
- <para>The package manager prepares system updates by downloading all (RPM or DEB or
+ <para>The package manager prepares system updates by downloading all (.rpm or .deb or
whatever) packages to update off-line in a special directory
<filename index="false">/var/lib/system-update</filename> (or
another directory of the package/upgrade manager's choice).</para>
</listitem>
<listitem>
- <para>The upgrade scripts should exit only after the update is finished. It is expected
- that the service which performs the upgrade will cause the machine to reboot after it
+ <para>The update scripts should exit only after the update is finished. It is expected
+ that the service which performs the update will cause the machine to reboot after it
is done. If the <filename>system-update.target</filename> is successfully reached, i.e.
all update services have run, and the <filename>/system-update</filename> symlink still
exists, it will be removed and the machine rebooted as a safety measure.</para>
this unit type. See
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the common options of all unit configuration files. The common
- configuration items are configured in the generic <literal>[Unit]</literal> and
- <literal>[Install]</literal> sections. The path specific configuration options are
- configured in the <literal>[Path]</literal> section.</para>
+ configuration items are configured in the generic [Unit] and
+ [Install] sections. The path specific configuration options are
+ configured in the [Path] section.</para>
<para>For each path file, a matching unit file must exist,
describing the unit to activate when the path changes. By default,
<listitem><para>Otherwise, access is granted.</para></listitem>
</itemizedlist>
- <para>In order to implement a whitelisting IP firewall, it is recommended to use a
- <varname>IPAddressDeny=</varname><constant>any</constant> setting on an upper-level slice unit (such as the
- root slice <filename>-.slice</filename> or the slice containing all system services
+ <para>In order to implement an allow-listing IP firewall, it is recommended to use a
+ <varname>IPAddressDeny=</varname><constant>any</constant> setting on an upper-level slice unit
+ (such as the root slice <filename>-.slice</filename> or the slice containing all system services
<filename>system.slice</filename> – see
- <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
- details on these slice units), plus individual per-service <varname>IPAddressAllow=</varname> lines
- permitting network access to relevant services, and only them.</para>
+ <citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ for details on these slice units), plus individual per-service <varname>IPAddressAllow=</varname>
+ lines permitting network access to relevant services, and only them.</para>
<para>Note that for socket-activated services, the IP access list configured on the socket unit
applies to all sockets associated with it directly, but not to any sockets created by the
</varlistentry>
<varlistentry>
- <term><varname>IPIngressFilterPath=<replaceable>BPF_FS_PROGRAMM_PATH</replaceable></varname></term>
- <term><varname>IPEgressFilterPath=<replaceable>BPF_FS_PROGRAMM_PATH</replaceable></varname></term>
+ <term><varname>IPIngressFilterPath=<replaceable>BPF_FS_PROGRAM_PATH</replaceable></varname></term>
+ <term><varname>IPEgressFilterPath=<replaceable>BPF_FS_PROGRAM_PATH</replaceable></varname></term>
<listitem>
<para>Add custom network traffic filters implemented as BPF programs, applying to all IP packets
<para>The device node specifier is either a path to a device node in the file system, starting with
<filename>/dev/</filename>, or a string starting with either <literal>char-</literal> or
<literal>block-</literal> followed by a device group name, as listed in
- <filename>/proc/devices</filename>. The latter is useful to whitelist all current and future
+ <filename>/proc/devices</filename>. The latter is useful to allow-list all current and future
devices belonging to a specific device group at once. The device group is matched according to
filename globbing rules, you may hence use the <literal>*</literal> and <literal>?</literal>
wildcards. (Note that such globbing wildcards are not available for device node path
all pseudo TTYs and all ALSA sound devices, respectively. <literal>char-cpu/*</literal> is a
specifier matching all CPU related device groups.</para>
- <para>Note that whitelists defined this way should only reference device groups which are
+ <para>Note that allow lists defined this way should only reference device groups which are
resolvable at the time the unit is started. Any device groups not resolvable then are not added to
- the device whitelist. In order to work around this limitation, consider extending service units
+ the device allow list. In order to work around this limitation, consider extending service units
with a pair of <command>After=modprobe@xyz.service</command> and
<command>Wants=modprobe@xyz.service</command> lines that load the necessary kernel module
implementing the device group if missing.
<refsect1>
<title>Options</title>
- <para>Scope files may include a <literal>[Scope]</literal>
+ <para>Scope files may include a [Scope]
section, which carries information about the scope and the
units it contains. A number of options that may be used in
this section are shared with other unit types. These options are
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
and
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
- The options specific to the <literal>[Scope]</literal> section
+ The options specific to the [Scope] section
of scope units are the following:</para>
<variablelist class='unit-directives'>
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the common options of all unit configuration files. The common
configuration items are configured in the generic
- <literal>[Unit]</literal> and <literal>[Install]</literal>
+ [Unit] and [Install]
sections. The service specific configuration options are
- configured in the <literal>[Service]</literal> section.</para>
+ configured in the [Service] section.</para>
<para>Additional options are listed in
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<refsect1>
<title>Options</title>
- <para>Service files must include a <literal>[Service]</literal>
+ <para>Service files must include a [Service]
section, which carries information about the service and the
process it supervises. A number of options that may be used in
this section are shared with other unit types. These options are
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
and
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
- The options specific to the <literal>[Service]</literal> section
+ The options specific to the [Service] section
of service units are the following:</para>
<variablelist class='unit-directives'>
project='man-pages'><refentrytitle>signal</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
a list of signal names.</para>
- <para>Note that this setting does not change the the mapping between numeric exit statuses and their
+ <para>Note that this setting does not change the mapping between numeric exit statuses and their
names, i.e. regardless how this setting is used 0 will still be mapped to <literal>SUCCESS</literal>
(and thus typically shown as <literal>0/SUCCESS</literal> in tool outputs) and 1 to
<literal>FAILURE</literal> (and thus typically shown as <literal>1/FAILURE</literal>), and so on. It
this option will have no effect.</para>
<example>
- <title>A service with with the <varname>SuccessExitStatus=</varname> setting</title>
+ <title>A service with the <varname>SuccessExitStatus=</varname> setting</title>
<programlisting>SuccessExitStatus=TEMPFAIL 250 SIGUSR1</programlisting>
manager. If set to <constant>kill</constant> and one of the service's processes is killed by the OOM
killer the kernel is instructed to kill all remaining processes of the service, too. Defaults to the
setting <varname>DefaultOOMPolicy=</varname> in
- <citerefentry><refentrytitle>system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> is
- set to, except for services where <varname>Delegate=</varname> is turned on, where it defaults to
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ is set to, except for services where <varname>Delegate=</varname> is turned on, where it defaults to
<constant>continue</constant>.</para>
<para>Use the <varname>OOMScoreAdjust=</varname> setting to configure whether processes of the unit
WantedBy=multi-user.target</programlisting>
<para>For <emphasis>bus-activatable</emphasis> services, do not
- include a <literal>[Install]</literal> section in the systemd
+ include a [Install] section in the systemd
service file, but use the <varname>SystemdService=</varname>
option in the corresponding DBus service file, for example
(<filename>/usr/share/dbus-1/system-services/org.example.simple-dbus-service.service</filename>):</para>
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the common options of all unit configuration
files. The common configuration items are configured
- in the generic <literal>[Unit]</literal> and <literal>[Install]</literal> sections. The
+ in the generic [Unit] and [Install] sections. The
slice specific configuration options are configured in
- the <literal>[Slice]</literal> section. Currently, only generic resource control settings
+ the [Slice] section. Currently, only generic resource control settings
as described in
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry> are allowed.
</para>
this unit type. See
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the common options of all unit configuration files. The common
- configuration items are configured in the generic <literal>[Unit]</literal> and
- <literal>[Install]</literal> sections. The socket specific configuration options are
- configured in the <literal>[Socket]</literal> section.</para>
+ configuration items are configured in the generic [Unit] and
+ [Install] sections. The socket specific configuration options are
+ configured in the [Socket] section.</para>
<para>Additional options are listed in
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<listitem><para>Socket units automatically gain a <varname>Before=</varname>
dependency on the service units they activate.</para></listitem>
- <listitem><para>Socket units referring to file system paths (such as AF_UNIX
- sockets or FIFOs) implicitly gain <varname>Requires=</varname> and
- <varname>After=</varname> dependencies on all mount units
- necessary to access those paths.</para></listitem>
+ <listitem><para>Socket units referring to file system paths (such as <constant>AF_UNIX</constant>
+ sockets or FIFOs) implicitly gain <varname>Requires=</varname> and <varname>After=</varname>
+ dependencies on all mount units necessary to access those paths.</para></listitem>
<listitem><para>Socket units using the <varname>BindToDevice=</varname>
setting automatically gain a <varname>BindsTo=</varname> and
url="https://www.kernel.org/doc/Documentation/usb/functionfs.txt">USB
FunctionFS</ulink> endpoints location to listen on, for
implementation of USB gadget functions. This expects an
- absolute file system path of functionfs mount point as the argument.
+ absolute file system path of FunctionFS mount point as the argument.
Behavior otherwise is very similar to the <varname>ListenFIFO=</varname>
directive above. Use this to open the FunctionFS endpoint
<filename>ep0</filename>. When using this option, the
<varlistentry>
<term><varname>SocketProtocol=</varname></term>
<listitem><para>Takes one of <option>udplite</option>
- or <option>sctp</option>. Specifies a socket protocol
- (<constant>IPPROTO_UDPLITE</constant>) UDP-Lite
- (<constant>IPPROTO_SCTP</constant>) SCTP socket respectively. </para>
+ or <option>sctp</option>. The socket will use the UDP-Lite
+ (<constant>IPPROTO_UDPLITE</constant>) or SCTP
+ (<constant>IPPROTO_SCTP</constant>) protocol, respectively.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>BindToDevice=</varname></term>
- <listitem><para>Specifies a network interface name to bind
- this socket to. If set, traffic will only be accepted from the
- specified network interfaces. This controls the
- SO_BINDTODEVICE socket option (see <citerefentry
- project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- for details). If this option is used, an implicit dependency
- from this socket unit on the network interface device unit
- (<citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- is created. Note that setting this parameter might result in
- additional dependencies to be added to the unit (see
+ <listitem><para>Specifies a network interface name to bind this socket to. If set, traffic will only
+ be accepted from the specified network interfaces. This controls the
+ <constant>SO_BINDTODEVICE</constant> socket option (see <citerefentry
+ project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
+ details). If this option is used, an implicit dependency from this socket unit on the network
+ interface device unit is created
+ (see <citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
+ Note that setting this parameter might result in additional dependencies to be added to the unit (see
above).</para></listitem>
</varlistentry>
<term><varname>SocketUser=</varname></term>
<term><varname>SocketGroup=</varname></term>
- <listitem><para>Takes a UNIX user/group name. When specified,
- all AF_UNIX sockets and FIFO nodes in the file system are
- owned by the specified user and group. If unset (the default),
- the nodes are owned by the root user/group (if run in system
- context) or the invoking user/group (if run in user context).
- If only a user is specified but no group, then the group is
+ <listitem><para>Takes a UNIX user/group name. When specified, all <constant>AF_UNIX</constant>
+ sockets and FIFO nodes in the file system are owned by the specified user and group. If unset (the
+ default), the nodes are owned by the root user/group (if run in system context) or the invoking
+ user/group (if run in user context). If only a user is specified but no group, then the group is
derived from the user's default group.</para></listitem>
</varlistentry>
to work unmodified with systemd socket
activation.</para>
- <para>For IPv4 and IPv6 connections, the <varname>REMOTE_ADDR</varname>
- environment variable will contain the remote IP address, and <varname>REMOTE_PORT</varname>
- will contain the remote port. This is the same as the format used by CGI.
- For SOCK_RAW, the port is the IP protocol.</para></listitem>
+ <para>For IPv4 and IPv6 connections, the <varname>REMOTE_ADDR</varname> environment variable will
+ contain the remote IP address, and <varname>REMOTE_PORT</varname> will contain the remote port. This
+ is the same as the format used by CGI. For <constant>SOCK_RAW</constant>, the port is the IP
+ protocol.</para></listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>KeepAlive=</varname></term>
- <listitem><para>Takes a boolean argument. If true, the TCP/IP
- stack will send a keep alive message after 2h (depending on
- the configuration of
- <filename>/proc/sys/net/ipv4/tcp_keepalive_time</filename>)
- for all TCP streams accepted on this socket. This controls the
- SO_KEEPALIVE socket option (see
- <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- and the <ulink
- url="http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/">TCP
- Keepalive HOWTO</ulink> for details.) Defaults to
- <option>false</option>.</para></listitem>
+ <listitem><para>Takes a boolean argument. If true, the TCP/IP stack will send a keep alive message
+ after 2h (depending on the configuration of
+ <filename>/proc/sys/net/ipv4/tcp_keepalive_time</filename>) for all TCP streams accepted on this
+ socket. This controls the <constant>SO_KEEPALIVE</constant> socket option (see <citerefentry
+ project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry> and
+ the <ulink url="http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/">TCP Keepalive
+ HOWTO</ulink> for details.) Defaults to <option>false</option>.</para></listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>KeepAliveIntervalSec=</varname></term>
- <listitem><para>Takes time (in seconds) as argument between
- individual keepalive probes, if the socket option SO_KEEPALIVE
- has been set on this socket. This controls
- the TCP_KEEPINTVL socket option (see
- <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- and the <ulink
- url="http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/">TCP
- Keepalive HOWTO</ulink> for details.) Defaults value is 75
- seconds.</para></listitem>
+ <listitem><para>Takes time (in seconds) as argument between individual keepalive probes, if the
+ socket option <constant>SO_KEEPALIVE</constant> has been set on this socket. This controls the
+ <constant>TCP_KEEPINTVL</constant> socket option (see <citerefentry
+ project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry> and
+ the <ulink url="http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/">TCP Keepalive
+ HOWTO</ulink> for details.) Defaults value is 75 seconds.</para></listitem>
</varlistentry>
<varlistentry>
algorithm works by combining a number of small outgoing
messages, and sending them all at once. This controls the
TCP_NODELAY socket option (see
- <citerefentry project='die-net'><refentrytitle>tcp</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ <citerefentry project='die-net'><refentrytitle>tcp</refentrytitle><manvolnum>7</manvolnum></citerefentry>).
Defaults to <option>false</option>.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>Priority=</varname></term>
- <listitem><para>Takes an integer argument controlling the
- priority for all traffic sent from this socket. This controls
- the SO_PRIORITY socket option (see
- <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- for details.).</para></listitem>
+ <listitem><para>Takes an integer argument controlling the priority for all traffic sent from this
+ socket. This controls the <constant>SO_PRIORITY</constant> socket option (see <citerefentry
+ project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
+ details.).</para></listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>ReceiveBuffer=</varname></term>
<term><varname>SendBuffer=</varname></term>
- <listitem><para>Takes an integer argument controlling the
- receive or send buffer sizes of this socket, respectively.
- This controls the SO_RCVBUF and SO_SNDBUF socket options (see
- <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- for details.). The usual suffixes K, M, G are supported and
- are understood to the base of 1024.</para></listitem>
+ <listitem><para>Takes an integer argument controlling the receive or send buffer sizes of this
+ socket, respectively. This controls the <constant>SO_RCVBUF</constant> and
+ <constant>SO_SNDBUF</constant> socket options (see <citerefentry
+ project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
+ details.). The usual suffixes K, M, G are supported and are understood to the base of
+ 1024.</para></listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>Mark=</varname></term>
- <listitem><para>Takes an integer value. Controls the firewall
- mark of packets generated by this socket. This can be used in
- the firewall logic to filter packets from this socket. This
- sets the SO_MARK socket option. See
- <citerefentry project='die-net'><refentrytitle>iptables</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- for details.</para></listitem>
+ <listitem><para>Takes an integer value. Controls the firewall mark of packets generated by this
+ socket. This can be used in the firewall logic to filter packets from this socket. This sets the
+ <constant>SO_MARK</constant> socket option. See <citerefentry
+ project='die-net'><refentrytitle>iptables</refentrytitle><manvolnum>8</manvolnum></citerefentry> for
+ details.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>ReusePort=</varname></term>
- <listitem><para>Takes a boolean value. If true, allows
- multiple
- <citerefentry><refentrytitle>bind</refentrytitle><manvolnum>2</manvolnum></citerefentry>s
- to this TCP or UDP port. This controls the SO_REUSEPORT socket
- option. See
- <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
- for details.</para></listitem>
+ <listitem><para>Takes a boolean value. If true, allows multiple
+ <citerefentry><refentrytitle>bind</refentrytitle><manvolnum>2</manvolnum></citerefentry>s to this TCP
+ or UDP port. This controls the <constant>SO_REUSEPORT</constant> socket option. See <citerefentry
+ project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry> for
+ details.</para></listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>Broadcast=</varname></term>
- <listitem><para>Takes a boolean value. This controls the
- SO_BROADCAST socket option, which allows broadcast datagrams
- to be sent from this socket. Defaults to
+ <listitem><para>Takes a boolean value. This controls the <constant>SO_BROADCAST</constant> socket
+ option, which allows broadcast datagrams to be sent from this socket. Defaults to
<option>false</option>.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>PassCredentials=</varname></term>
- <listitem><para>Takes a boolean value. This controls the
- SO_PASSCRED socket option, which allows
- <constant>AF_UNIX</constant> sockets to receive the
- credentials of the sending process in an ancillary message.
- Defaults to <option>false</option>.</para></listitem>
+ <listitem><para>Takes a boolean value. This controls the <constant>SO_PASSCRED</constant> socket
+ option, which allows <constant>AF_UNIX</constant> sockets to receive the credentials of the sending
+ process in an ancillary message. Defaults to <option>false</option>.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>PassSecurity=</varname></term>
- <listitem><para>Takes a boolean value. This controls the
- SO_PASSSEC socket option, which allows
- <constant>AF_UNIX</constant> sockets to receive the security
- context of the sending process in an ancillary message.
- Defaults to <option>false</option>.</para></listitem>
+ <listitem><para>Takes a boolean value. This controls the <constant>SO_PASSSEC</constant> socket
+ option, which allows <constant>AF_UNIX</constant> sockets to receive the security context of the
+ sending process in an ancillary message. Defaults to <option>false</option>.</para></listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>TCPCongestion=</varname></term>
- <listitem><para>Takes a string value. Controls the TCP
- congestion algorithm used by this socket. Should be one of
- "westwood", "veno", "cubic", "lp" or any other available
- algorithm supported by the IP stack. This setting applies only
- to stream sockets.</para></listitem>
+ <listitem><para>Takes a string value. Controls the TCP congestion algorithm used by this
+ socket. Should be one of <literal>westwood</literal>, <literal>veno</literal>,
+ <literal>cubic</literal>, <literal>lp</literal> or any other available algorithm supported by the IP
+ stack. This setting applies only to stream sockets.</para></listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term><varname>RemoveOnStop=</varname></term>
- <listitem><para>Takes a boolean argument. If enabled, any file
- nodes created by this socket unit are removed when it is
- stopped. This applies to AF_UNIX sockets in the file system,
- POSIX message queues, FIFOs, as well as any symlinks to them
- configured with <varname>Symlinks=</varname>. Normally, it
- should not be necessary to use this option, and is not
- recommended as services might continue to run after the socket
- unit has been terminated and it should still be possible to
- communicate with them via their file system node. Defaults to
+ <listitem><para>Takes a boolean argument. If enabled, any file nodes created by this socket unit are
+ removed when it is stopped. This applies to <constant>AF_UNIX</constant> sockets in the file system,
+ POSIX message queues, FIFOs, as well as any symlinks to them configured with
+ <varname>Symlinks=</varname>. Normally, it should not be necessary to use this option, and is not
+ recommended as services might continue to run after the socket unit has been terminated and it should
+ still be possible to communicate with them via their file system node. Defaults to
off.</para></listitem>
</varlistentry>
this unit (or <filename>multi-user.target</filename>) during
installation. This is best configured via
<varname>WantedBy=graphical.target</varname> in the unit's
- <literal>[Install]</literal> section.</para>
+ [Install] section.</para>
</listitem>
</varlistentry>
<varlistentry>
add <varname>Wants=</varname> dependencies for their unit to
this unit during installation. This is best configured via
<varname>WantedBy=multi-user.target</varname> in the unit's
- <literal>[Install]</literal> section.</para>
+ [Install] section.</para>
</listitem>
</varlistentry>
<varlistentry>
applications get pulled in via <varname>Wants=</varname>
dependencies from this unit. This is best configured via a
<varname>WantedBy=paths.target</varname> in the path unit's
- <literal>[Install]</literal> section.</para>
+ [Install] section.</para>
</listitem>
</varlistentry>
<varlistentry>
<para>Adding slice units to <filename>slices.target</filename> is generally not
necessary. Instead, when some unit that uses <varname>Slice=</varname> is started, the
specified slice will be started automatically. Adding
- <varname>WantedBy=slices.target</varname> lines to the <literal>[Install]</literal>
+ <varname>WantedBy=slices.target</varname> lines to the [Install]
section should only be done for units that need to be always active. In that case care
needs to be taken to avoid creating a loop through the automatic dependencies on
"parent" slices.</para>
<varname>Wants=</varname> dependencies to this unit for
their socket unit during installation. This is best
configured via a <varname>WantedBy=sockets.target</varname>
- in the socket unit's <literal>[Install]</literal>
+ in the socket unit's [Install]
section.</para>
</listitem>
</varlistentry>
applications get pulled in via <varname>Wants=</varname>
dependencies from this unit. This is best configured via
<varname>WantedBy=timers.target</varname> in the timer
- unit's <literal>[Install]</literal> section.</para>
+ unit's [Install] section.</para>
</listitem>
</varlistentry>
<varlistentry>
<para>By default, all user processes and services started on
behalf of the user, including the per-user systemd instance
are found in this slice. This is pulled in by
- <filename>systemd-logind.service</filename></para>
+ <filename>systemd-logind.service</filename>.</para>
</listitem>
</varlistentry>
<listitem>
<para>By default, all virtual machines and containers
registered with <command>systemd-machined</command> are
- found in this slice. This is pulled in by
- <filename>systemd-machined.service</filename></para>
+ found in this slice. This is pulled in by
+ <filename>systemd-machined.service</filename>.</para>
</listitem>
</varlistentry>
</variablelist>
<para>This target is active whenever any graphical session is running. It is used to
stop user services which only apply to a graphical (X, Wayland, etc.) session when the
session is terminated. Such services should have
- <literal>PartOf=graphical-session.target</literal> in their <literal>[Unit]</literal>
+ <literal>PartOf=graphical-session.target</literal> in their [Unit]
section. A target for a particular session (e. g.
<filename>gnome-session.target</filename>) starts and stops
<literal>graphical-session.target</literal> with
this unit type. See
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the common options of all unit configuration files. The common
- configuration items are configured in the generic <literal>[Unit]</literal> and
- <literal>[Install]</literal> sections. The swap specific configuration options are
- configured in the <literal>[Swap]</literal> section.</para>
+ configuration items are configured in the generic [Unit] and
+ [Install] sections. The swap specific configuration options are
+ configured in the [Swap] section.</para>
<para>Additional options are listed in
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<refsect1>
<title>Options</title>
- <para>Swap files must include a [Swap] section, which carries
+ <para>Swap unit files must include a [Swap] section, which carries
information about the swap device it supervises. A number of
options that may be used in this section are shared with other
unit types. These options are documented in
value 2 continued
[Section C]
-KeyThree=value 2\
+KeyThree=value 3\
# this line is ignored
; this line is ignored too
- value 2 continued
+ value 3 continued
</programlisting></example>
<para>Boolean arguments used in configuration files can be written in
<para>This unit type has no specific options. See
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the common options of all unit configuration files. The common
- configuration items are configured in the generic <literal>[Unit]</literal> and
- <literal>[Install]</literal> sections. A separate <literal>[Target]</literal> section does not exist,
+ configuration items are configured in the generic [Unit] and
+ [Install] sections. A separate [Target] section does not exist,
since no target-specific options may be configured.</para>
<para>Target units do not offer any additional functionality on
<refsect1>
<title>Parsing Timestamps</title>
- <para>When parsing, systemd will accept a similar syntax, but expects no timezone specification, unless it is given
- as the literal string <literal>UTC</literal> (for the UTC timezone), or is specified to be the locally configured
- timezone, or the timezone name in the IANA timezone database format. The complete list of timezones
- supported on your system can be obtained using the <literal>timedatectl list-timezones</literal>
- (see <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>).
- Using IANA format is recommended over local timezone names, as less prone to errors (eg: with local timezone it's possible to
- specify daylight saving time in winter, while it's incorrect). The weekday specification is optional, but when
- the weekday is specified, it must either be in the abbreviated (<literal>Wed</literal>) or non-abbreviated
- (<literal>Wednesday</literal>) English language form (case does not matter), and is not subject to the locale
- choice of the user. Either the date, or the time part may be omitted, in which case the current date or 00:00:00,
- respectively, is assumed. The seconds component of the time may also be omitted, in which case ":00" is
- assumed. Year numbers may be specified in full or may be abbreviated (omitting the century).</para>
+ <para>When parsing, systemd will accept a similar syntax, but expects no timezone specification, unless
+ it is given as the literal string <literal>UTC</literal> (for the UTC timezone), or is specified to be
+ the locally configured timezone, or the timezone name in the IANA timezone database format. The complete
+ list of timezones supported on your system can be obtained using the <literal>timedatectl
+ list-timezones</literal> (see
+ <citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>). Using
+ IANA format is recommended over local timezone names, as less prone to errors (e.g. with local timezone
+ it's possible to specify daylight saving time in winter, even though that is not correct). The weekday
+ specification is optional, but when the weekday is specified, it must either be in the abbreviated
+ (<literal>Wed</literal>) or non-abbreviated (<literal>Wednesday</literal>) English language form (case
+ does not matter), and is not subject to the locale choice of the user. Either the date, or the time part
+ may be omitted, in which case the current date or 00:00:00, respectively, is assumed. The seconds
+ component of the time may also be omitted, in which case ":00" is assumed. Year numbers may be specified
+ in full or may be abbreviated (omitting the century).</para>
<para>A timestamp is considered invalid if a weekday is specified and the date does not match the specified day of
the week.</para>
<para>Use the <command>calendar</command> command of
<citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry> to validate
and normalize calendar time specifications for testing purposes. The tool also calculates when a specified
- calendar event would elapse next.</para>
+ calendar event would occur next.</para>
</refsect1>
<refsect1>
this unit type. See
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for the common options of all unit configuration files. The common
- configuration items are configured in the generic <literal>[Unit]</literal> and
- <literal>[Install]</literal> sections. The timer specific configuration options are
- configured in the <literal>[Timer]</literal> section.</para>
+ configuration items are configured in the generic [Unit] and
+ [Install] sections. The timer specific configuration options are
+ configured in the [Timer] section.</para>
<para>For each timer file, a matching unit file must exist,
describing the unit to activate when the timer elapses. By
that the listed unit is fully started up before the configured unit is started.</para>
<para>When two units with an ordering dependency between them are shut down, the inverse of the
- start-up order is applied. i.e. if a unit is configured with <varname>After=</varname> on another
+ start-up order is applied. I.e. if a unit is configured with <varname>After=</varname> on another
unit, the former is stopped before the latter if both are shut down. Given two units with any
ordering dependency between them, if one unit is shut down and the other is started up, the shutdown
is ordered before the start-up. It doesn't matter if the ordering dependency is
<option>--job-mode=</option> option for details on the
possible values. If this is set to <literal>isolate</literal>,
only a single unit may be listed in
- <varname>OnFailure=</varname>..</para></listitem>
+ <varname>OnFailure=</varname>.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>StartLimitAction=</varname></term>
<listitem><para>Configure an additional action to take if the rate limit configured with
- <varname>StartLimitIntervalSec=</varname> and <varname>StartLimitBurst=</varname> is hit. Takes the same
- values as the setting <varname>FailureAction=</varname>/<varname>SuccessAction=</varname> settings and executes
- the same actions. If <option>none</option> is set, hitting the rate limit will trigger no action besides that
+ <varname>StartLimitIntervalSec=</varname> and <varname>StartLimitBurst=</varname> is hit. Takes the same
+ values as the <varname>FailureAction=</varname>/<varname>SuccessAction=</varname> settings. If
+ <option>none</option> is set, hitting the rate limit will trigger no action except that
the start will not be permitted. Defaults to <option>none</option>.</para></listitem>
</varlistentry>
<refsect1>
<title>[Install] Section Options</title>
- <para>Unit files may include an <literal>[Install]</literal> section, which carries installation information for
+ <para>Unit files may include an [Install] section, which carries installation information for
the unit. This section is not interpreted by
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry> during runtime; it is
used by the <command>enable</command> and <command>disable</command> commands of the
<varlistentry>
<term><varname>systemd.crash_chvt</varname></term>
- <listitem><para>Takes a positive integer, or a boolean argument. Can be also
- specified without an argument, with the same effect as a positive boolean. If
- a positive integer (in the range 1–63) is specified, the system manager (PID
- 1) will activate the specified virtual terminal (VT) when it
- crashes. Defaults to disabled, meaning that no such switch is attempted. If
- set to enabled, the VT the kernel messages are written to is selected.
- </para></listitem>
+ <listitem><para>Takes a positive integer, or a boolean argument. Can be also specified without an
+ argument, with the same effect as a positive boolean. If a positive integer (in the range 1–63) is
+ specified, the system manager (PID 1) will activate the specified virtual terminal when it crashes.
+ Defaults to disabled, meaning that no such switch is attempted. If set to enabled, the virtual
+ terminal the kernel messages are written to is used instead.</para></listitem>
</varlistentry>
<varlistentry>
this context, because they are properly namespaced. When an option is specified both on the kernel
command line, and as a normal command line argument, the latter has higher precedence.</para>
- <para>When <command>systemd</command> is used a user manager, the kernel command line is ignored and
+ <para>When <command>systemd</command> is used as a user manager, the kernel command line is ignored and
the options described are understood. Nevertheless, <command>systemd</command> is usually started in
this mode through the
<citerefentry><refentrytitle>user@.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
service, which is shared between all users, and it may be more convenient to use configuration files to
modify settings, see
<citerefentry><refentrytitle>systemd-user.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
- or a drop-in that specifies one of the environment variables listed above in "Environment, see
+ or a drop-in that specifies one of the environment variables listed above in the Environment section,
+ see
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
<variablelist>
<varlistentry>
<term><option>--show-status</option></term>
- <listitem><para>Show terse unit status information is shown on the console during boot-up and
- shutdown. See <varname>systemd.show_status</varname> above.</para></listitem>
+ <listitem><para>Show terse unit status information on the console during boot-up and shutdown. See
+ <varname>systemd.show_status</varname> above.</para></listitem>
</varlistentry>
<varlistentry>
<varlistentry id='qdisc-parent'>
<term><varname>Parent=</varname></term>
<listitem>
- <para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>,
- <literal>clsact</literal>, <literal>ingress</literal> or a class id. The class id takes the
- major and minor number in hexadecimal ranges 1 to ffff separated with a colon
- (<literal>major:minor</literal>). Defaults to <literal>root</literal>.</para>
+ <para>Configures the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>,
+ <literal>clsact</literal>, <literal>ingress</literal> or a class identifier. The class identifier is
+ specified as the major and minor numbers in hexadecimal in the range 0x1–Oxffff separated with a
+ colon (<literal>major:minor</literal>). Defaults to <literal>root</literal>.</para>
</listitem>
</varlistentry>
<varlistentry id='qdisc-handle'>
<term><varname>Handle=</varname></term>
<listitem>
- <para>Specifies the major number of unique identifier of the qdisc, known as the handle.
- Takes a number in hexadecimal ranges 1 to ffff. Defaults to unset.</para>
+ <para>Configures the major number of unique identifier of the qdisc, known as the handle.
+ Takes a hexadecimal number in the range 0x1–0xffff. Defaults to unset.</para>
</listitem>
</varlistentry>
<varlistentry id='tclass-parent'>
<term><varname>Parent=</varname></term>
<listitem>
- <para>Specifies the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>,
- or a qdisc id. The qdisc id takes the major and minor number in hexadecimal ranges 1 to ffff
- separated with a colon (<literal>major:minor</literal>). Defaults to <literal>root</literal>.
+ <para>Configures the parent Queueing Discipline (qdisc). Takes one of <literal>root</literal>, or a
+ qdisc identifier. The qdisc identifier is specified as the major and minor numbers in hexadecimal in
+ the range 0x1–Oxffff separated with a colon (<literal>major:minor</literal>). Defaults to
+ <literal>root</literal>.
</para>
</listitem>
</varlistentry>
<varlistentry id='tclass-classid'>
<term><varname>ClassId=</varname></term>
<listitem>
- <para>Specifies the major and minur number of unique identifier of the class, known as the
- class ID. Each number is in hexadecimal ranges 1 to ffff. Defaults to unset.</para>
+ <para>Configues the unique identifier of the class. It is specified as the major and minor numbers in
+ hexadecimal in the range 0x1–Oxffff separated with a colon (<literal>major:minor</literal>).
+ Defaults to unset.</para>
</listitem>
</varlistentry>
</variablelist>
<refsect1>
<title>Options</title>
- <para>The following settings are configured in the <literal>[Time]</literal> section:</para>
+ <para>The following settings are configured in the [Time] section:</para>
<variablelist class='network-directives'>
<title>Well-Known Services</title>
<para>The <command>userdbctl services</command> command will list all currently running services that
- provide user or group definitions to the system. The following are well-known services are shown among
- this list.</para>
+ provide user or group definitions to the system. The following well-known services are shown among
+ this list:</para>
<variablelist>
-
<varlistentry>
<term><constant>io.systemd.DynamicUser</constant></term>
<para>Note that <command>userdbctl</command> has internal support for NSS-based lookups too. This means
that if neither <constant>io.systemd.Multiplexer</constant> nor
- <constant>io.systemd.NameSeviceSwitch</constant> are running look-ups into the the basic user/group
+ <constant>io.systemd.NameSeviceSwitch</constant> are running look-ups into the basic user/group
databases will still work.</para>
</refsect1>
# SPDX-License-Identifier: LGPL-2.1+
project('systemd', 'c',
- version : '245',
+ version : '246',
license : 'LGPLv2+',
default_options: [
'c_std=gnu99',
meson_version : '>= 0.46',
)
-libsystemd_version = '0.28.0'
-libudev_version = '1.6.17'
+libsystemd_version = '0.29.0'
+libudev_version = '1.6.18'
# We need the same data in two different formats, ugh!
# Also, for hysterical reasons, we use different variable
conf.set10('HAVE_CRYPT_SET_METADATA_SIZE',
have and cc.has_function('crypt_set_metadata_size', dependencies : libcryptsetup))
+ conf.set10('HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY',
+ have and cc.has_function('crypt_activate_by_signed_key', dependencies : libcryptsetup))
else
have = false
libcryptsetup = []
endif
conf.set10('HAVE_P11KIT', have)
+want_libfido2 = get_option('libfido2')
+if want_libfido2 != 'false' and not skip_deps
+ libfido2 = dependency('libfido2',
+ required : want_libfido2 == 'true')
+ have = libfido2.found()
+else
+ have = false
+ libfido2 = []
+endif
+conf.set10('HAVE_LIBFIDO2', have)
+
want_elfutils = get_option('elfutils')
if want_elfutils != 'false' and not skip_deps
libdw = dependency('libdw',
if want_xz != 'false' and not skip_deps
libxz = dependency('liblzma',
required : want_xz == 'true')
- have = libxz.found()
+ have_xz = libxz.found()
else
- have = false
+ have_xz = false
libxz = []
endif
-conf.set10('HAVE_XZ', have)
+conf.set10('HAVE_XZ', have_xz)
want_lz4 = get_option('lz4')
if want_lz4 != 'false' and not skip_deps
liblz4 = dependency('liblz4',
version : '>= 1.3.0',
required : want_lz4 == 'true')
- have = liblz4.found()
+ have_lz4 = liblz4.found()
else
- have = false
+ have_lz4 = false
liblz4 = []
endif
-conf.set10('HAVE_LZ4', have)
+conf.set10('HAVE_LZ4', have_lz4)
want_zstd = get_option('zstd')
if want_zstd != 'false' and not skip_deps
libzstd = dependency('libzstd',
required : want_zstd == 'true',
version : '>= 1.4.0')
- have = libzstd.found()
+ have_zstd = libzstd.found()
else
- have = false
+ have_zstd = false
libzstd = []
endif
-conf.set10('HAVE_ZSTD', have)
+conf.set10('HAVE_ZSTD', have_zstd)
+
+conf.set10('HAVE_COMPRESSION', have_xz or have_lz4 or have_zstd)
want_xkbcommon = get_option('xkbcommon')
if want_xkbcommon != 'false' and not skip_deps
build_by_default : want_tests != 'false')
foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
- ['systemd', 'ENABLE_NSS_SYSTEMD', 'src/nss-systemd/userdb-glue.c src/nss-systemd/userdb-glue.h'],
+ ['systemd', 'ENABLE_NSS_SYSTEMD', 'src/nss-systemd/userdb-glue.c src/nss-systemd/userdb-glue.h src/nss-systemd/nss-systemd.h'],
['mymachines', 'ENABLE_NSS_MYMACHINES'],
['resolve', 'ENABLE_NSS_RESOLVE']]
libcrypt,
libopenssl,
libfdisk,
- libp11kit],
+ libp11kit,
+ libfido2],
install_rpath : rootlibexecdir,
install : true,
install_dir : rootlibexecdir)
libcrypt,
libopenssl,
libp11kit,
+ libfido2,
libpwquality],
install_rpath : rootlibexecdir,
install : true,
['pwquality'],
['libfdisk'],
['p11kit'],
+ ['libfido2'],
['AUDIT'],
['IMA'],
['AppArmor'],
description : 'openssl support')
option('p11kit', type : 'combo', choices : ['auto', 'true', 'false'],
description : 'p11kit support')
+option('libfido2', type : 'combo', choices : ['auto', 'true', 'false'],
+ description : 'FIDO2 support')
option('elfutils', type : 'combo', choices : ['auto', 'true', 'false'],
description : 'elfutils support')
option('zlib', type : 'combo', choices : ['auto', 'true', 'false'],
msgstr ""
"Project-Id-Version: systemd master\n"
"Report-Msgid-Bugs-To: https://github.com/systemd/systemd/issues\n"
-"POT-Creation-Date: 2020-02-29 15:12+0000\n"
-"PO-Revision-Date: 2020-03-01 13:58+0100\n"
+"POT-Creation-Date: 2020-05-30 13:27+0000\n"
+"PO-Revision-Date: 2020-07-01 16:40+0200\n"
"Last-Translator: Daniel Rusek <mail@asciiwolf.com>\n"
"Language-Team: Czech\n"
"Language: cs\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 2.3\n"
+"X-Generator: Poedit 2.3.1\n"
#: src/core/org.freedesktop.systemd1.policy.in:22
msgid "Send passphrase back to system"
msgstr "Pro resetování nastavení DNS je vyžadováno ověření."
#: src/network/org.freedesktop.network1.policy:143
+msgid "DHCP server sends force renew message"
+msgstr "DHCP server posílá zprávu vynuceného obnovení"
+
+#: src/network/org.freedesktop.network1.policy:144
+msgid "Authentication is required to send force renew message."
+msgstr "Pro poslání zprávy vynuceného obnovení je vyžadováno ověření."
+
+#: src/network/org.freedesktop.network1.policy:154
msgid "Renew dynamic addresses"
msgstr "Obnovit dynamické adresy"
-#: src/network/org.freedesktop.network1.policy:144
+#: src/network/org.freedesktop.network1.policy:155
msgid "Authentication is required to renew dynamic addresses."
msgstr "Pro obnovení dynamických adres je vyžadováno ověření."
-#: src/network/org.freedesktop.network1.policy:154
+#: src/network/org.freedesktop.network1.policy:165
msgid "Reload network settings"
msgstr "Znovu načíst nastavení sítě"
-#: src/network/org.freedesktop.network1.policy:155
+#: src/network/org.freedesktop.network1.policy:166
msgid "Authentication is required to reload network settings."
msgstr "Pro opětovné načtení nastavení sítě je vyžadováno ověření."
-#: src/network/org.freedesktop.network1.policy:165
+#: src/network/org.freedesktop.network1.policy:176
msgid "Reconfigure network interface"
msgstr "Přenastavit síťové rozhraní"
-#: src/network/org.freedesktop.network1.policy:166
+#: src/network/org.freedesktop.network1.policy:177
msgid "Authentication is required to reconfigure network interface."
msgstr "Pro přenastavení síťového rozhraní je vyžadováno ověření."
"shall be enabled."
msgstr "Pro kontrolu synchronizace času ze sítě je vyžadováno ověření."
-#: src/core/dbus-unit.c:356
+#: src/core/dbus-unit.c:358
msgid "Authentication is required to start '$(unit)'."
msgstr "Pro spuštění „$(unit)” je vyžadováno ověření."
-#: src/core/dbus-unit.c:357
+#: src/core/dbus-unit.c:359
msgid "Authentication is required to stop '$(unit)'."
msgstr "Pro vypnutí „$(unit)” je vyžadováno ověření."
-#: src/core/dbus-unit.c:358
+#: src/core/dbus-unit.c:360
msgid "Authentication is required to reload '$(unit)'."
msgstr "Pro opětovné načtení „$(unit)” je vyžadováno ověření."
-#: src/core/dbus-unit.c:359 src/core/dbus-unit.c:360
+#: src/core/dbus-unit.c:361 src/core/dbus-unit.c:362
msgid "Authentication is required to restart '$(unit)'."
msgstr "Pro restart „$(unit)” je vyžadováno ověření."
-#: src/core/dbus-unit.c:532
+#: src/core/dbus-unit.c:534
msgid ""
"Authentication is required to send a UNIX signal to the processes of "
"'$(unit)'."
msgstr "Pro odeslání UNIX signálu procesům „$(unit)” je vyžadováno ověření."
-#: src/core/dbus-unit.c:563
+#: src/core/dbus-unit.c:565
msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
msgstr "Pro resetování chybného stavu „$(unit)” je vyžadováno ověření."
-#: src/core/dbus-unit.c:596
+#: src/core/dbus-unit.c:598
msgid "Authentication is required to set properties on '$(unit)'."
msgstr "Pro nastavení vlastností na „$(unit)” je vyžadováno ověření."
-#: src/core/dbus-unit.c:705
+#: src/core/dbus-unit.c:707
msgid ""
"Authentication is required to delete files and directories associated with "
"'$(unit)'."
msgstr ""
"Pro odstranění souborů nebo adresářů souvisejících s „$(unit)” je vyžadováno "
"ověření."
+
+#: src/core/dbus-unit.c:756
+msgid ""
+"Authentication is required to freeze or thaw the processes of '$(unit)' unit."
+msgstr ""
+"Pro zmrazení nebo rozmrazení procesů jednotky „$(unit)” je vyžadováno "
+"ověření."
KERNEL=="sd*[0-9]", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}-part%n"
# MMC
-KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", \
- ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}"
+KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}"
+KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ENV{ID_NAME}="$attr{name}"
+KERNEL=="mmcblk[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}"
KERNEL=="mmcblk[0-9]p[0-9]*", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}-part%n"
# UBI-MTD
# semaphore cannot expose these, but useful for interactive/local runs
ARTIFACTS_DIR=/tmp/artifacts
PHASES=(${@:-SETUP RUN})
+UBUNTU_RELEASE="$(lsb_release -cs)"
create_container() {
# create autopkgtest LXC image; this sometimes fails with "Unable to fetch
sudo rm -f /etc/apt/sources.list.d/*
# enable backports for latest LXC
- echo 'deb http://archive.ubuntu.com/ubuntu xenial-backports main restricted universe multiverse' | sudo tee -a /etc/apt/sources.list.d/backports.list
+ echo "deb http://archive.ubuntu.com/ubuntu $UBUNTU_RELEASE-backports main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list.d/backports.list
sudo apt-get -q update
- sudo apt-get install -y -t xenial-backports lxc
+ sudo apt-get install -y -t "$UBUNTU_RELEASE-backports" lxc
sudo apt-get install -y python3-debian git dpkg-dev fakeroot
[ -d $AUTOPKGTEST_DIR ] || git clone --quiet --depth=1 https://salsa.debian.org/ci-team/autopkgtest.git "$AUTOPKGTEST_DIR"
)
local -A VERBS=(
- [STANDALONE]='label'
- [LINKS]='status list lldp delete renew'
+ [STANDALONE]='label reload'
+ [LINKS]='status list lldp delete renew up down forcerenew reconfigure'
)
_init_completion || return
--pivot-root --property --private-users --network-namespace-path --network-ipvlan
--network-veth-extra --network-zone -p --port --system-call-filter --overlay --overlay-ro
--settings --rlimit --hostname --no-new-privileges --oom-score-adjust --cpu-affinity
- --resolv-conf --timezone'
+ --resolv-conf --timezone --root-hash-sig'
)
_init_completion || return
--timezone)
comps=$( systemd-nspawn --timezone=help 2>/dev/null )
;;
+ --root-hash-sig)
+ compopt -o nospace
+ comps=$( compgen -A file -- "$cur" )
+ ;;
esac
COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
return 0
#include "analyze-security.h"
#include "bus-error.h"
+#include "bus-map-properties.h"
#include "bus-unit-util.h"
#include "bus-util.h"
#include "env-util.h"
char **system_call_architectures;
- bool system_call_filter_whitelist;
+ bool system_call_filter_allow_list;
Set *system_call_filter;
uint32_t _umask;
#if HAVE_SECCOMP
-static bool syscall_names_in_filter(Set *s, bool whitelist, const SyscallFilterSet *f) {
+static bool syscall_names_in_filter(Set *s, bool allow_list, const SyscallFilterSet *f) {
const char *syscall;
NULSTR_FOREACH(syscall, f->value) {
const SyscallFilterSet *g;
assert_se(g = syscall_filter_set_find(syscall));
- if (syscall_names_in_filter(s, whitelist, g))
+ if (syscall_names_in_filter(s, allow_list, g))
return true; /* bad! */
continue;
if (id < 0)
continue;
- if (set_contains(s, syscall) == whitelist) {
+ if (set_contains(s, syscall) == allow_list) {
log_debug("Offending syscall filter item: %s", syscall);
return true; /* bad! */
}
assert(a->parameter < _SYSCALL_FILTER_SET_MAX);
f = syscall_filter_sets + a->parameter;
- if (!info->system_call_filter_whitelist && set_isempty(info->system_call_filter)) {
+ if (!info->system_call_filter_allow_list && set_isempty(info->system_call_filter)) {
d = strdup("Service does not filter system calls");
b = 10;
} else {
bool bad;
log_debug("Analyzing system call filter, checking against: %s", f->name);
- bad = syscall_names_in_filter(info->system_call_filter, info->system_call_filter_whitelist, f);
+ bad = syscall_names_in_filter(info->system_call_filter, info->system_call_filter_allow_list, f);
log_debug("Result: %s", bad ? "bad" : "good");
- if (info->system_call_filter_whitelist) {
+ if (info->system_call_filter_allow_list) {
if (bad) {
- (void) asprintf(&d, "System call whitelist defined for service, and %s is included", f->name);
+ (void) asprintf(&d, "System call allow list defined for service, and %s is included", f->name);
b = 9;
} else {
- (void) asprintf(&d, "System call whitelist defined for service, and %s is not included", f->name);
+ (void) asprintf(&d, "System call allow list defined for service, and %s is not included", f->name);
b = 0;
}
} else {
if (bad) {
- (void) asprintf(&d, "System call blacklist defined for service, and %s is not included", f->name);
+ (void) asprintf(&d, "System call deny list defined for service, and %s is not included", f->name);
b = 10;
} else {
- (void) asprintf(&d, "System call blacklist defined for service, and %s is included", f->name);
+ (void) asprintf(&d, "System call deny list defined for service, and %s is included", f->name);
b = 5;
}
}
d = strdup("Service defines custom ingress/egress IP filters with BPF programs");
b = 0;
} else if (!info->ip_address_deny_all) {
- d = strdup("Service does not define an IP address whitelist");
+ d = strdup("Service does not define an IP address allow list");
b = 10;
} else if (info->ip_address_allow_other) {
- d = strdup("Service defines IP address whitelist with non-localhost entries");
+ d = strdup("Service defines IP address allow list with non-localhost entries");
b = 5;
} else if (info->ip_address_allow_localhost) {
- d = strdup("Service defines IP address whitelist with only localhost entries");
+ d = strdup("Service defines IP address allow list with only localhost entries");
b = 2;
} else {
d = strdup("Service blocks all IP address ranges");
void *userdata) {
struct security_info *info = userdata;
- int whitelist, r;
+ int allow_list, r;
assert(bus);
assert(member);
if (r < 0)
return r;
- r = sd_bus_message_read(m, "b", &whitelist);
+ r = sd_bus_message_read(m, "b", &allow_list);
if (r < 0)
return r;
info->restrict_address_family_unix =
info->restrict_address_family_netlink =
info->restrict_address_family_packet =
- info->restrict_address_family_other = whitelist;
+ info->restrict_address_family_other = allow_list;
r = sd_bus_message_enter_container(m, 'a', "s");
if (r < 0)
break;
if (STR_IN_SET(name, "AF_INET", "AF_INET6"))
- info->restrict_address_family_inet = !whitelist;
+ info->restrict_address_family_inet = !allow_list;
else if (streq(name, "AF_UNIX"))
- info->restrict_address_family_unix = !whitelist;
+ info->restrict_address_family_unix = !allow_list;
else if (streq(name, "AF_NETLINK"))
- info->restrict_address_family_netlink = !whitelist;
+ info->restrict_address_family_netlink = !allow_list;
else if (streq(name, "AF_PACKET"))
- info->restrict_address_family_packet = !whitelist;
+ info->restrict_address_family_packet = !allow_list;
else
- info->restrict_address_family_other = !whitelist;
+ info->restrict_address_family_other = !allow_list;
}
r = sd_bus_message_exit_container(m);
void *userdata) {
struct security_info *info = userdata;
- int whitelist, r;
+ int allow_list, r;
assert(bus);
assert(member);
if (r < 0)
return r;
- r = sd_bus_message_read(m, "b", &whitelist);
+ r = sd_bus_message_read(m, "b", &allow_list);
if (r < 0)
return r;
- info->system_call_filter_whitelist = whitelist;
+ info->system_call_filter_allow_list = allow_list;
r = sd_bus_message_enter_container(m, 'a', "s");
if (r < 0)
#include "analyze-verify.h"
#include "build.h"
#include "bus-error.h"
+#include "bus-locator.h"
+#include "bus-map-properties.h"
#include "bus-unit-util.h"
-#include "bus-util.h"
#include "calendarspec.h"
#include "conf-files.h"
#include "copy.h"
setlocale(LC_ALL, "");
setlocale(LC_NUMERIC, "C"); /* we want to format/parse floats in C style */
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
if (r < 0)
return log_device_warning_errno(device, r, "Failed to parse 'max_brightness' \"%s\": %m", max_brightness_str);
- if (max_brightness <= 0) {
- log_device_warning(device, "Maximum brightness is 0, ignoring device.");
- return -EINVAL;
- }
+ if (max_brightness <= 0)
+ return log_device_warning_errno(device, SYNTHETIC_ERRNO(EINVAL), "Maximum brightness is 0, ignoring device.");
*ret = max_brightness;
return 0;
return r;
}
+static int read_brightness(sd_device *device, const char **ret) {
+ const char *subsystem;
+ int r;
+
+ assert(device);
+ assert(ret);
+
+ r = sd_device_get_subsystem(device, &subsystem);
+ if (r < 0)
+ return log_device_debug_errno(device, r, "Failed to get subsystem: %m");
+
+ if (streq(subsystem, "backlight")) {
+ r = sd_device_get_sysattr_value(device, "actual_brightness", ret);
+ if (r >= 0)
+ return 0;
+ if (r != -ENOENT)
+ return log_device_debug_errno(device, r, "Failed to read 'actual_brightness' attribute: %m");
+
+ log_device_debug_errno(device, r, "Failed to read 'actual_brightness' attribute, fall back to use 'brightness' attribute: %m");
+ }
+
+ r = sd_device_get_sysattr_value(device, "brightness", ret);
+ if (r < 0)
+ return log_device_debug_errno(device, r, "Failed to read 'brightness' attribute: %m");
+
+ return 0;
+}
+
static int run(int argc, char *argv[]) {
_cleanup_(sd_device_unrefp) sd_device *device = NULL;
_cleanup_free_ char *escaped_ss = NULL, *escaped_sysname = NULL, *escaped_path_id = NULL;
unsigned max_brightness;
int r;
- if (argc != 3) {
- log_error("This program requires two arguments.");
- return -EINVAL;
- }
-
log_setup_service();
+ if (argc != 3)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "This program requires two arguments.");
+
umask(0022);
r = mkdir_p("/var/lib/systemd/backlight", 0755);
return log_error_errno(r, "Failed to create backlight directory /var/lib/systemd/backlight: %m");
sysname = strchr(argv[2], ':');
- if (!sysname) {
- log_error("Requires a subsystem and sysname pair specifying a backlight device.");
- return -EINVAL;
- }
+ if (!sysname)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Requires a subsystem and sysname pair specifying a backlight device.");
ss = strndupa(argv[2], sysname - argv[2]);
sysname++;
- if (!STR_IN_SET(ss, "backlight", "leds")) {
- log_error("Not a backlight or LED device: '%s:%s'", ss, sysname);
- return -EINVAL;
- }
+ if (!STR_IN_SET(ss, "backlight", "leds"))
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Not a backlight or LED device: '%s:%s'", ss, sysname);
r = sd_device_new_from_subsystem_sysname(&device, ss, sysname);
if (r < 0)
if (!clamp)
return 0;
- r = sd_device_get_sysattr_value(device, "brightness", &curval);
+ r = read_brightness(device, &curval);
if (r < 0)
- return log_device_warning_errno(device, r, "Failed to read 'brightness' attribute: %m");
+ return log_device_error_errno(device, r, "Failed to read current brightness: %m");
value = strdup(curval);
if (!value)
return 0;
}
- r = sd_device_get_sysattr_value(device, "brightness", &value);
+ r = read_brightness(device, &value);
if (r < 0)
- return log_device_error_errno(device, r, "Failed to read system 'brightness' attribute: %m");
+ return log_device_error_errno(device, r, "Failed to read current brightness: %m");
r = write_string_file(saved, value, WRITE_STRING_FILE_CREATE);
if (r < 0)
return log_device_error_errno(device, r, "Failed to write %s: %m", saved);
- } else {
- log_error("Unknown verb %s.", argv[1]);
- return -EINVAL;
- }
+ } else
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown verb %s.", argv[1]);
return 0;
}
#include "device-nodes.h"
#include "utf8.h"
-int whitelisted_char_for_devnode(char c, const char *white) {
+int allow_listed_char_for_devnode(char c, const char *white) {
if ((c >= '0' && c <= '9') ||
(c >= 'A' && c <= 'Z') ||
j += seqlen;
i += (seqlen-1);
- } else if (str[i] == '\\' || !whitelisted_char_for_devnode(str[i], NULL)) {
+ } else if (str[i] == '\\' || !allow_listed_char_for_devnode(str[i], NULL)) {
if (len-j < 4)
return -EINVAL;
#include "stdio-util.h"
int encode_devnode_name(const char *str, char *str_enc, size_t len);
-int whitelisted_char_for_devnode(char c, const char *additional);
+int allow_listed_char_for_devnode(char c, const char *additional);
#define DEV_NUM_PATH_MAX \
(STRLEN("/dev/block/") + DECIMAL_STR_MAX(dev_t) + 1 + DECIMAL_STR_MAX(dev_t))
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include <dlfcn.h>
+
+#include "macro.h"
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(void*, dlclose);
if (!p)
return -ENOMEM;
- /* Newer efivarfs protects variables that are not in a whitelist with FS_IMMUTABLE_FL by default, to protect
- * them for accidental removal and modification. We are not changing these variables accidentally however,
- * hence let's unset the bit first. */
+ /* Newer efivarfs protects variables that are not in an allow list with FS_IMMUTABLE_FL by default,
+ * to protect them for accidental removal and modification. We are not changing these variables
+ * accidentally however, hence let's unset the bit first. */
r = chattr_path(p, 0, FS_IMMUTABLE_FL, &saved_flags);
if (r < 0 && r != -ENOENT)
d = opendir(p);
if (!d) {
- if (errno == ENOENT) /* Doesn't have slaves */
+ if (errno == ENOENT) /* Doesn't have underlying devices */
return false;
return -errno;
if (errno != 0)
return -errno;
- break; /* No more slaves */
+ break; /* No more underlying devices */
}
q = path_join(p, de->d_name);
memset(p, DIB_RAW_INIT, sizeof(dib_raw_t) * hi->n_direct_buckets);
}
-static struct HashmapBase *hashmap_base_new(const struct hash_ops *hash_ops, enum HashmapType type HASHMAP_DEBUG_PARAMS) {
+static struct HashmapBase *hashmap_base_new(const struct hash_ops *hash_ops, enum HashmapType type HASHMAP_DEBUG_PARAMS) {
HashmapBase *h;
const struct hashmap_type_info *hi = &hashmap_type_info[type];
bool up;
}
Hashmap *_hashmap_new(const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS) {
- return (Hashmap*) hashmap_base_new(hash_ops, HASHMAP_TYPE_PLAIN HASHMAP_DEBUG_PASS_ARGS);
+ return (Hashmap*) hashmap_base_new(hash_ops, HASHMAP_TYPE_PLAIN HASHMAP_DEBUG_PASS_ARGS);
}
OrderedHashmap *_ordered_hashmap_new(const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS) {
- return (OrderedHashmap*) hashmap_base_new(hash_ops, HASHMAP_TYPE_ORDERED HASHMAP_DEBUG_PASS_ARGS);
+ return (OrderedHashmap*) hashmap_base_new(hash_ops, HASHMAP_TYPE_ORDERED HASHMAP_DEBUG_PASS_ARGS);
}
Set *_set_new(const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS) {
- return (Set*) hashmap_base_new(hash_ops, HASHMAP_TYPE_SET HASHMAP_DEBUG_PASS_ARGS);
+ return (Set*) hashmap_base_new(hash_ops, HASHMAP_TYPE_SET HASHMAP_DEBUG_PASS_ARGS);
}
static int hashmap_base_ensure_allocated(HashmapBase **h, const struct hash_ops *hash_ops,
- enum HashmapType type HASHMAP_DEBUG_PARAMS) {
+ enum HashmapType type HASHMAP_DEBUG_PARAMS) {
HashmapBase *q;
assert(h);
if (*h)
return 0;
- q = hashmap_base_new(hash_ops, type HASHMAP_DEBUG_PASS_ARGS);
+ q = hashmap_base_new(hash_ops, type HASHMAP_DEBUG_PASS_ARGS);
if (!q)
return -ENOMEM;
}
int _hashmap_ensure_allocated(Hashmap **h, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS) {
- return hashmap_base_ensure_allocated((HashmapBase**)h, hash_ops, HASHMAP_TYPE_PLAIN HASHMAP_DEBUG_PASS_ARGS);
+ return hashmap_base_ensure_allocated((HashmapBase**)h, hash_ops, HASHMAP_TYPE_PLAIN HASHMAP_DEBUG_PASS_ARGS);
}
int _ordered_hashmap_ensure_allocated(OrderedHashmap **h, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS) {
- return hashmap_base_ensure_allocated((HashmapBase**)h, hash_ops, HASHMAP_TYPE_ORDERED HASHMAP_DEBUG_PASS_ARGS);
+ return hashmap_base_ensure_allocated((HashmapBase**)h, hash_ops, HASHMAP_TYPE_ORDERED HASHMAP_DEBUG_PASS_ARGS);
}
int _set_ensure_allocated(Set **s, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS) {
- return hashmap_base_ensure_allocated((HashmapBase**)s, hash_ops, HASHMAP_TYPE_SET HASHMAP_DEBUG_PASS_ARGS);
+ return hashmap_base_ensure_allocated((HashmapBase**)s, hash_ops, HASHMAP_TYPE_SET HASHMAP_DEBUG_PASS_ARGS);
}
static void hashmap_free_no_clear(HashmapBase *h) {
return hashmap_put_boldly(s, hash, &swap, true);
}
+int _set_ensure_put(Set **s, const struct hash_ops *hash_ops, const void *key HASHMAP_DEBUG_PARAMS) {
+ int r;
+
+ r = _set_ensure_allocated(s, hash_ops HASHMAP_DEBUG_PASS_ARGS);
+ if (r < 0)
+ return r;
+
+ return set_put(*s, key);
+}
+
+int _set_ensure_consume(Set **s, const struct hash_ops *hash_ops, void *key HASHMAP_DEBUG_PARAMS) {
+ int r;
+
+ r = _set_ensure_put(s, hash_ops, key HASHMAP_DEBUG_PASS_ARGS);
+ if (r <= 0) {
+ if (hash_ops && hash_ops->free_key)
+ hash_ops->free_key(key);
+ else
+ free(key);
+ }
+
+ return r;
+}
+
int hashmap_replace(Hashmap *h, const void *key, void *value) {
struct swap_entries swap;
struct plain_hashmap_entry *e;
return 0;
}
-HashmapBase *_hashmap_copy(HashmapBase *h) {
+HashmapBase *_hashmap_copy(HashmapBase *h HASHMAP_DEBUG_PARAMS) {
HashmapBase *copy;
int r;
assert(h);
- copy = hashmap_base_new(h->hash_ops, h->type HASHMAP_DEBUG_SRC_ARGS);
+ copy = hashmap_base_new(h->hash_ops, h->type HASHMAP_DEBUG_PASS_ARGS);
if (!copy)
return NULL;
assert_not_reached("Unknown hashmap type");
}
- if (r < 0) {
- _hashmap_free(copy, false, false);
- return NULL;
- }
+ if (r < 0)
+ return _hashmap_free(copy, false, false);
return copy;
}
return r;
}
-int hashmap_put_strdup(Hashmap **h, const char *k, const char *v) {
+int _hashmap_put_strdup(Hashmap **h, const char *k, const char *v HASHMAP_DEBUG_PARAMS) {
int r;
- r = hashmap_ensure_allocated(h, &string_hash_ops_free_free);
+ r = _hashmap_ensure_allocated(h, &string_hash_ops_free_free HASHMAP_DEBUG_PASS_ARGS);
if (r < 0)
return r;
return r;
}
-int set_put_strdup(Set **s, const char *p) {
+int _set_put_strdup(Set **s, const char *p HASHMAP_DEBUG_PARAMS) {
char *c;
int r;
assert(s);
assert(p);
- r = set_ensure_allocated(s, &string_hash_ops_free);
+ r = _set_ensure_allocated(s, &string_hash_ops_free HASHMAP_DEBUG_PASS_ARGS);
if (r < 0)
return r;
return set_consume(*s, c);
}
-int set_put_strdupv(Set **s, char **l) {
+int _set_put_strdupv(Set **s, char **l HASHMAP_DEBUG_PARAMS) {
int n = 0, r;
char **i;
assert(s);
STRV_FOREACH(i, l) {
- r = set_put_strdup(s, *i);
+ r = _set_put_strdup(s, *i HASHMAP_DEBUG_PASS_ARGS);
if (r < 0)
return r;
IteratedCache *iterated_cache_free(IteratedCache *cache);
int iterated_cache_get(IteratedCache *cache, const void ***res_keys, const void ***res_values, unsigned *res_n_entries);
-HashmapBase *_hashmap_copy(HashmapBase *h);
-static inline Hashmap *hashmap_copy(Hashmap *h) {
- return (Hashmap*) _hashmap_copy(HASHMAP_BASE(h));
-}
-static inline OrderedHashmap *ordered_hashmap_copy(OrderedHashmap *h) {
- return (OrderedHashmap*) _hashmap_copy(HASHMAP_BASE(h));
-}
+HashmapBase *_hashmap_copy(HashmapBase *h HASHMAP_DEBUG_PARAMS);
+#define hashmap_copy(h) ((Hashmap*) _hashmap_copy(HASHMAP_BASE(h) HASHMAP_DEBUG_SRC_ARGS))
+#define ordered_hashmap_copy(h) ((OrderedHashmap*) _hashmap_copy(HASHMAP_BASE(h) HASHMAP_DEBUG_SRC_ARGS))
int _hashmap_ensure_allocated(Hashmap **h, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS);
int _ordered_hashmap_ensure_allocated(OrderedHashmap **h, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS);
return hashmap_put(PLAIN_HASHMAP(h), key, value);
}
-int hashmap_put_strdup(Hashmap **h, const char *k, const char *v);
+int _hashmap_put_strdup(Hashmap **h, const char *k, const char *v HASHMAP_DEBUG_PARAMS);
+#define hashmap_put_strdup(h, k, v) _hashmap_put_strdup(h, k, v HASHMAP_DEBUG_SRC_ARGS)
int hashmap_update(Hashmap *h, const void *key, void *value);
static inline int ordered_hashmap_update(OrderedHashmap *h, const void *key, void *value) {
[SPECIAL_GLYPH_SLIGHTLY_UNHAPPY_SMILEY] = ":-(",
[SPECIAL_GLYPH_UNHAPPY_SMILEY] = ":-{",
[SPECIAL_GLYPH_DEPRESSED_SMILEY] = ":-[",
- [SPECIAL_GLYPH_LOCK_AND_KEY] = "o-,"
+ [SPECIAL_GLYPH_LOCK_AND_KEY] = "o-,",
+ [SPECIAL_GLYPH_TOUCH] = "O=", /* Yeah, not very convincing, can you do it better? */
},
/* UTF-8 */
/* This emoji is a single character cell glyph in Unicode, and three in ASCII */
[SPECIAL_GLYPH_LOCK_AND_KEY] = "\360\237\224\220", /* 🔐 (actually called: CLOSED LOCK WITH KEY) */
+
+ /* This emoji is a single character cell glyph in Unicode, and two in ASCII */
+ [SPECIAL_GLYPH_TOUCH] = "\360\237\221\206", /* 👆 (actually called: BACKHAND INDEX POINTING UP */
},
};
SPECIAL_GLYPH_UNHAPPY_SMILEY,
SPECIAL_GLYPH_DEPRESSED_SMILEY,
SPECIAL_GLYPH_LOCK_AND_KEY,
- _SPECIAL_GLYPH_MAX
+ SPECIAL_GLYPH_TOUCH,
+ _SPECIAL_GLYPH_MAX,
} SpecialGlyph;
const char *special_glyph(SpecialGlyph code) _const_;
}
void log_parse_environment_realm(LogRealm realm) {
- /* Do not call from library code. */
-
- const char *e;
-
if (getpid_cached() == 1 || get_ctty_devnr(0, NULL) < 0)
/* Only try to read the command line in daemons. We assume that anything that has a
* controlling tty is user stuff. For PID1 we do a special check in case it hasn't
* closed the console yet. */
(void) proc_cmdline_parse(parse_proc_cmdline_item, NULL, PROC_CMDLINE_STRIP_RD_PREFIX);
+ log_parse_environment_cli_realm(realm);
+}
+
+void log_parse_environment_cli_realm(LogRealm realm) {
+ /* Do not call from library code. */
+
+ const char *e;
+
e = getenv("SYSTEMD_LOG_TARGET");
if (e && log_set_target_from_string(e) < 0)
log_warning("Failed to parse log target '%s'. Ignoring.", e);
log_parse_environment();
(void) log_open();
}
+
+void log_setup_cli(void) {
+ /* Sets up logging the way it is most appropriate for running a program as a CLI utility. */
+
+ log_show_color(true);
+ log_parse_environment_cli();
+ (void) log_open();
+}
void log_forget_fds(void);
void log_parse_environment_realm(LogRealm realm);
+void log_parse_environment_cli_realm(LogRealm realm);
#define log_parse_environment() \
log_parse_environment_realm(LOG_REALM)
+#define log_parse_environment_cli() \
+ log_parse_environment_cli_realm(LOG_REALM)
int log_dispatch_internal(
int level,
#define DEBUG_LOGGING _unlikely_(log_get_max_level() >= LOG_DEBUG)
void log_setup_service(void);
+void log_setup_cli(void);
UNIQ_T(A, aq) < UNIQ_T(B, bq) ? UNIQ_T(A, aq) : UNIQ_T(B, bq); \
})
+/* evaluates to (void) if _A or _B are not constant or of different types */
+#define CONST_MIN(_A, _B) \
+ (__builtin_choose_expr( \
+ __builtin_constant_p(_A) && \
+ __builtin_constant_p(_B) && \
+ __builtin_types_compatible_p(typeof(_A), typeof(_B)), \
+ ((_A) < (_B)) ? (_A) : (_B), \
+ VOID_0))
+
#define MIN3(x, y, z) \
({ \
const typeof(x) _c = MIN(x, y); \
(y) = (_t); \
} while (false)
+/* Iterates through a specified list of pointers. Accepts NULL pointers, but uses (void*) -1 as internal marker for EOL. */
+#define FOREACH_POINTER(p, x, ...) \
+ for (typeof(p) *_l = (typeof(p)[]) { ({ p = x; }), ##__VA_ARGS__, (void*) -1 }; \
+ p != (typeof(p)) (void*) -1; \
+ p = *(++_l))
+
/* Define C11 thread_local attribute even on older gcc compiler
* version */
#ifndef thread_local
device-nodes.h
dirent-util.c
dirent-util.h
+ dlfcn-util.h
efivars.c
efivars.h
env-file.c
threads,
libcap,
libselinux,
- libm],
+ libm,
+ libdl],
c_args : ['-fvisibility=default'],
install : false)
#undef CAP_LAST_CAP
#define CAP_LAST_CAP CAP_AUDIT_READ
#endif
+
+/* 980737282232b752bb14dab96d77665c15889c36 (5.8) */
+#ifndef CAP_PERFMON
+#define CAP_PERFMON 38
+
+#undef CAP_LAST_CAP
+#define CAP_LAST_CAP CAP_PERFMON
+#endif
+
+/* a17b53c4a4b55ec322c132b6670743612229ee9c (5.8) */
+#ifndef CAP_BPF
+#define CAP_BPF 39
+
+#undef CAP_LAST_CAP
+#define CAP_LAST_CAP CAP_BPF
+#endif
#include <fcntl.h>
#include <sys/ioctl.h>
+#include <sys/mount.h>
#include "fd-util.h"
#include "missing_fs.h"
return r == CLONE_NEWNET;
}
+
+int detach_mount_namespace(void) {
+
+ /* Detaches the mount namespace, disabling propagation from our namespace to the host */
+
+ if (unshare(CLONE_NEWNS) < 0)
+ return -errno;
+
+ if (mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL) < 0)
+ return -errno;
+
+ return 0;
+}
int namespace_enter(int pidns_fd, int mntns_fd, int netns_fd, int userns_fd, int root_fd);
int fd_is_network_ns(int fd);
+
+int detach_mount_namespace(void);
ppid = getppid();
if (ppid == 0)
- /* Parent is in a differn't PID namespace. */;
+ /* Parent is in a different PID namespace. */;
else if (ppid != original_pid) {
log_debug("Parent died early, raising SIGTERM.");
(void) raise(SIGTERM);
#include <elf.h>
#include <errno.h>
#include <fcntl.h>
+#include <linux/random.h>
#include <pthread.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
+#include <sys/ioctl.h>
#include <sys/time.h>
#if HAVE_SYS_AUXV_H
* hash functions for its hash tables, with a seed generated randomly. The hash tables
* systemd employs watch the fill level closely and reseed if necessary. This allows use of
* a low quality RNG initially, as long as it improves should a hash table be under attack:
- * the attacker after all needs to to trigger many collisions to exploit it for the purpose
+ * the attacker after all needs to trigger many collisions to exploit it for the purpose
* of DoS, but if doing so improves the seed the attack surface is reduced as the attack
* takes place.
*
/* Use the minimum as default, if we can't retrieve the correct value */
return RANDOM_POOL_SIZE_MIN;
}
+
+int random_write_entropy(int fd, const void *seed, size_t size, bool credit) {
+ int r;
+
+ assert(fd >= 0);
+ assert(seed && size > 0);
+
+ if (credit) {
+ _cleanup_free_ struct rand_pool_info *info = NULL;
+
+ /* The kernel API only accepts "int" as entropy count (which is in bits), let's avoid any
+ * chance for confusion here. */
+ if (size > INT_MAX / 8)
+ return -EOVERFLOW;
+
+ info = malloc(offsetof(struct rand_pool_info, buf) + size);
+ if (!info)
+ return -ENOMEM;
+
+ info->entropy_count = size * 8;
+ info->buf_size = size;
+ memcpy(info->buf, seed, size);
+
+ if (ioctl(fd, RNDADDENTROPY, info) < 0)
+ return -errno;
+ } else {
+ r = loop_write(fd, seed, size, false);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
+}
#define RANDOM_POOL_SIZE_MAX (10U*1024U*1024U)
size_t random_pool_size(void);
+
+int random_write_entropy(int fd, const void *seed, size_t size, bool credit);
label_hnd = selabel_open(SELABEL_CTX_FILE, NULL, 0);
if (!label_hnd)
- return log_enforcing_errno(errno, "Failed to initialize SELinux context: %m");
+ return log_enforcing_errno(errno, "Failed to initialize SELinux labeling handle: %m");
after_timestamp = now(CLOCK_MONOTONIC);
after_mallinfo = mallinfo();
char* mac_selinux_free(char *label) {
#if HAVE_SELINUX
- if (!label)
- return NULL;
-
- if (!mac_selinux_use())
- return NULL;
-
freecon(label);
+#else
+ assert(!label);
#endif
return NULL;
/* no set_free_free_free */
-static inline Set *set_copy(Set *s) {
- return (Set*) _hashmap_copy(HASHMAP_BASE(s));
-}
+#define set_copy(s) ((Set*) _hashmap_copy(HASHMAP_BASE(h) HASHMAP_DEBUG_SRC_ARGS))
int _set_ensure_allocated(Set **s, const struct hash_ops *hash_ops HASHMAP_DEBUG_PARAMS);
#define set_ensure_allocated(h, ops) _set_ensure_allocated(h, ops HASHMAP_DEBUG_SRC_ARGS)
return _hashmap_get_strv(HASHMAP_BASE(s));
}
+int _set_ensure_put(Set **s, const struct hash_ops *hash_ops, const void *key HASHMAP_DEBUG_PARAMS);
+#define set_ensure_put(s, hash_ops, key) _set_ensure_put(s, hash_ops, key HASHMAP_DEBUG_SRC_ARGS)
+
+int _set_ensure_consume(Set **s, const struct hash_ops *hash_ops, void *key HASHMAP_DEBUG_PARAMS);
+#define set_ensure_consume(s, hash_ops, key) _set_ensure_consume(s, hash_ops, key HASHMAP_DEBUG_SRC_ARGS)
+
int set_consume(Set *s, void *value);
-int set_put_strdup(Set **s, const char *p);
-int set_put_strdupv(Set **s, char **l);
+
+int _set_put_strdup(Set **s, const char *p HASHMAP_DEBUG_PARAMS);
+#define set_put_strdup(s, p) _set_put_strdup(s, p HASHMAP_DEBUG_SRC_ARGS)
+int _set_put_strdupv(Set **s, char **l HASHMAP_DEBUG_PARAMS);
+#define set_put_strdupv(s, l) _set_put_strdupv(s, l HASHMAP_DEBUG_SRC_ARGS)
+
int set_put_strsplit(Set *s, const char *v, const char *separators, ExtractFlags flags);
#define SET_FOREACH(e, s, i) \
if (a->size != offsetof(struct sockaddr_un, sun_path) + (e - a->sockaddr.un.sun_path) + 1)
return -EINVAL;
} else {
- /* If there's no embedded NUL byte, then then the size needs to match the whole
+ /* If there's no embedded NUL byte, then the size needs to match the whole
* structure or the structure with one extra NUL byte suffixed. (Yeah, Linux is awful,
* and considers both equivalent: getsockname() even extends sockaddr_un beyond its
* size if the path is non NUL terminated.)*/
int socket_bind_to_ifindex(int fd, int ifindex) {
char ifname[IF_NAMESIZE + 1];
+ int r;
assert(fd >= 0);
return 0;
}
- if (setsockopt(fd, SOL_SOCKET, SO_BINDTOIFINDEX, &ifindex, sizeof(ifindex)) >= 0)
- return 0;
- if (errno != ENOPROTOOPT)
- return -errno;
+ r = setsockopt_int(fd, SOL_SOCKET, SO_BINDTOIFINDEX, ifindex);
+ if (r != -ENOPROTOOPT)
+ return r;
/* Fall back to SO_BINDTODEVICE on kernels < 5.0 which didn't have SO_BINDTOIFINDEX */
if (!format_ifname(ifindex, ifname))
assert((flags & O_EXCL) == 0);
/* Creates a temporary file, that shall be renamed to "target" later. If possible, this uses O_TMPFILE – in
- * which case "ret_path" will be returned as NULL. If not possible a the tempoary path name used is returned in
+ * which case "ret_path" will be returned as NULL. If not possible the temporary path name used is returned in
* "ret_path". Use link_tmpfile() below to rename the result after writing the file in full. */
fd = open_parent(target, O_TMPFILE|flags, 0640);
}
int unit_name_from_path_instance(const char *prefix, const char *path, const char *suffix, char **ret) {
- _cleanup_free_ char *p = NULL;
- char *s;
+ _cleanup_free_ char *p = NULL, *s = NULL;
int r;
assert(prefix);
if (!unit_name_is_valid(s, UNIT_NAME_INSTANCE))
return -EINVAL;
- *ret = s;
+ *ret = TAKE_PTR(s);
return 0;
}
return false;
if (in_charset(u, "0123456789")) /* Don't allow fully numeric strings, they might be confused
- * with with UIDs (note that this test is more broad than
+ * with UIDs (note that this test is more broad than
* the parse_uid() test above, as it will cover more than
* the 32bit range, and it will detect 65535 (which is in
* invalid UID, even though in the unsigned 32 bit range) */
else
r = table_print(table, stdout);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
return 0;
}
static int run(int argc, char *argv[]) {
int r;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
static int run(int argc, char *argv[]) {
int r, output_flags;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
CGroupMask mask;
int r;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
if (safe_atou(value, &token) < 0)
log_unit_debug(u, "Failed to parse token value: %s", value);
else {
- r = set_ensure_allocated(&a->tokens, NULL);
- if (r < 0) {
- log_oom();
- return 0;
- }
-
- r = set_put(a->tokens, UINT_TO_PTR(token));
+ r = set_ensure_put(&a->tokens, NULL, UINT_TO_PTR(token));
if (r < 0)
log_unit_error_errno(u, r, "Failed to add token to set: %m");
}
if (safe_atou(value, &token) < 0)
log_unit_debug(u, "Failed to parse token value: %s", value);
else {
- r = set_ensure_allocated(&a->expire_tokens, NULL);
- if (r < 0) {
- log_oom();
- return 0;
- }
-
- r = set_put(a->expire_tokens, UINT_TO_PTR(token));
+ r = set_ensure_put(&a->expire_tokens, NULL, UINT_TO_PTR(token));
if (r < 0)
log_unit_error_errno(u, r, "Failed to add expire token to set: %m");
}
} else
log_unit_debug(UNIT(a), "Got direct mount request on %s", a->where);
- r = set_ensure_allocated(&a->tokens, NULL);
- if (r < 0) {
- log_unit_error(UNIT(a), "Failed to allocate token set.");
- goto fail;
- }
-
- r = set_put(a->tokens, UINT_TO_PTR(packet.v5_packet.wait_queue_token));
+ r = set_ensure_put(&a->tokens, NULL, UINT_TO_PTR(packet.v5_packet.wait_queue_token));
if (r < 0) {
log_unit_error_errno(UNIT(a), r, "Failed to remember token: %m");
goto fail;
automount_stop_expire(a);
- r = set_ensure_allocated(&a->expire_tokens, NULL);
- if (r < 0) {
- log_unit_error(UNIT(a), "Failed to allocate token set.");
- goto fail;
- }
-
- r = set_put(a->expire_tokens, UINT_TO_PTR(packet.v5_packet.wait_queue_token));
+ r = set_ensure_put(&a->expire_tokens, NULL, UINT_TO_PTR(packet.v5_packet.wait_queue_token));
if (r < 0) {
log_unit_error_errno(UNIT(a), r, "Failed to remember token: %m");
goto fail;
"Unit\0"
"Automount\0"
"Install\0",
+ .private_section = "Automount",
.can_transient = true,
.can_fail = true,
return r;
}
-static int bpf_prog_whitelist_device(
+static int bpf_prog_allow_list_device(
BPFProgram *prog,
char type,
int major,
return r;
}
-static int bpf_prog_whitelist_major(
+static int bpf_prog_allow_list_major(
BPFProgram *prog,
char type,
int major,
return r;
}
-static int bpf_prog_whitelist_class(
+static int bpf_prog_allow_list_class(
BPFProgram *prog,
char type,
const char *acc) {
int bpf_devices_cgroup_init(
BPFProgram **ret,
CGroupDevicePolicy policy,
- bool whitelist) {
+ bool allow_list) {
const struct bpf_insn pre_insn[] = {
/* load device type to r2 */
assert(ret);
- if (policy == CGROUP_DEVICE_POLICY_AUTO && !whitelist)
+ if (policy == CGROUP_DEVICE_POLICY_AUTO && !allow_list)
return 0;
r = bpf_program_new(BPF_PROG_TYPE_CGROUP_DEVICE, &prog);
if (r < 0)
return log_error_errno(r, "Loading device control BPF program failed: %m");
- if (policy == CGROUP_DEVICE_POLICY_CLOSED || whitelist) {
+ if (policy == CGROUP_DEVICE_POLICY_CLOSED || allow_list) {
r = bpf_program_add_instructions(prog, pre_insn, ELEMENTSOF(pre_insn));
if (r < 0)
return log_error_errno(r, "Extending device control BPF program failed: %m");
int bpf_devices_apply_policy(
BPFProgram *prog,
CGroupDevicePolicy policy,
- bool whitelist,
+ bool allow_list,
const char *cgroup_path,
BPFProgram **prog_installed) {
if (!prog)
goto finish;
- const bool deny_everything = policy == CGROUP_DEVICE_POLICY_STRICT && !whitelist;
+ const bool deny_everything = policy == CGROUP_DEVICE_POLICY_STRICT && !allow_list;
const struct bpf_insn post_insn[] = {
/* return DENY */
return supported = 1;
}
-static int whitelist_device_pattern(
+static int allow_list_device_pattern(
BPFProgram *prog,
const char *path,
char type,
return 0;
if (maj && min)
- return bpf_prog_whitelist_device(prog, type, *maj, *min, acc);
+ return bpf_prog_allow_list_device(prog, type, *maj, *min, acc);
else if (maj)
- return bpf_prog_whitelist_major(prog, type, *maj, acc);
+ return bpf_prog_allow_list_major(prog, type, *maj, acc);
else
- return bpf_prog_whitelist_class(prog, type, acc);
+ return bpf_prog_allow_list_class(prog, type, acc);
} else {
char buf[2+DECIMAL_STR_MAX(unsigned)*2+2+4];
}
}
-int bpf_devices_whitelist_device(
+int bpf_devices_allow_list_device(
BPFProgram *prog,
const char *path,
const char *node,
}
unsigned maj = major(rdev), min = minor(rdev);
- return whitelist_device_pattern(prog, path, S_ISCHR(mode) ? 'c' : 'b', &maj, &min, acc);
+ return allow_list_device_pattern(prog, path, S_ISCHR(mode) ? 'c' : 'b', &maj, &min, acc);
}
-int bpf_devices_whitelist_major(
+int bpf_devices_allow_list_major(
BPFProgram *prog,
const char *path,
const char *name,
if (streq(name, "*"))
/* If the name is a wildcard, then apply this list to all devices of this type */
- return whitelist_device_pattern(prog, path, type, NULL, NULL, acc);
+ return allow_list_device_pattern(prog, path, type, NULL, NULL, acc);
if (safe_atou(name, &maj) >= 0 && DEVICE_MAJOR_VALID(maj))
/* The name is numeric and suitable as major. In that case, let's take its major, and create
* the entry directly. */
- return whitelist_device_pattern(prog, path, type, &maj, NULL, acc);
+ return allow_list_device_pattern(prog, path, type, &maj, NULL, acc);
_cleanup_fclose_ FILE *f = NULL;
bool good = false, any = false;
continue;
any = true;
- (void) whitelist_device_pattern(prog, path, type, &maj, NULL, acc);
+ (void) allow_list_device_pattern(prog, path, type, &maj, NULL, acc);
}
if (!any)
return log_debug_errno(SYNTHETIC_ERRNO(ENOENT),
- "Device whitelist pattern \"%s\" did not match anything.", name);
+ "Device allow list pattern \"%s\" did not match anything.", name);
return 0;
}
-int bpf_devices_whitelist_static(
+int bpf_devices_allow_list_static(
BPFProgram *prog,
const char *path) {
const char *node, *acc;
NULSTR_FOREACH_PAIR(node, acc, auto_devices) {
- k = bpf_devices_whitelist_device(prog, path, node, acc);
+ k = bpf_devices_allow_list_device(prog, path, node, acc);
if (r >= 0 && k < 0)
r = k;
}
/* PTS (/dev/pts) devices may not be duplicated, but accessed */
- k = bpf_devices_whitelist_major(prog, path, "pts", 'c', "rw");
+ k = bpf_devices_allow_list_major(prog, path, "pts", 'c', "rw");
if (r >= 0 && k < 0)
r = k;
typedef struct BPFProgram BPFProgram;
-int bpf_devices_cgroup_init(BPFProgram **ret, CGroupDevicePolicy policy, bool whitelist);
+int bpf_devices_cgroup_init(BPFProgram **ret, CGroupDevicePolicy policy, bool allow_list);
int bpf_devices_apply_policy(
BPFProgram *prog,
CGroupDevicePolicy policy,
- bool whitelist,
+ bool allow_list,
const char *cgroup_path,
BPFProgram **prog_installed);
int bpf_devices_supported(void);
-int bpf_devices_whitelist_device(BPFProgram *prog, const char *path, const char *node, const char *acc);
-int bpf_devices_whitelist_major(BPFProgram *prog, const char *path, const char *name, char type, const char *acc);
-int bpf_devices_whitelist_static(BPFProgram *prog, const char *path);
+int bpf_devices_allow_list_device(BPFProgram *prog, const char *path, const char *node, const char *acc);
+int bpf_devices_allow_list_major(BPFProgram *prog, const char *path, const char *name, char type, const char *acc);
+int bpf_devices_allow_list_static(BPFProgram *prog, const char *path);
"BPF_F_ALLOW_MULTI is not supported on this manager, not doing BPF firewall on slice units.");
/* Note that when we compile a new firewall we first flush out the access maps and the BPF programs themselves,
- * but we reuse the the accounting maps. That way the firewall in effect always maps to the actual
+ * but we reuse the accounting maps. That way the firewall in effect always maps to the actual
* configuration, but we don't flush out the accounting unnecessarily */
u->ip_bpf_ingress = bpf_program_unref(u->ip_bpf_ingress);
set_clear(*set);
STRV_FOREACH(bpf_fs_path, filter_paths) {
- _cleanup_free_ BPFProgram *prog = NULL;
+ _cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
int r;
r = bpf_program_new(BPF_PROG_TYPE_CGROUP_SKB, &prog);
if (r < 0)
return log_unit_error_errno(u, r, "Loading of ingress BPF program %s failed: %m", *bpf_fs_path);
- r = set_ensure_allocated(set, &filter_prog_hash_ops);
- if (r < 0)
- return log_unit_error_errno(u, r, "Can't allocate BPF program set: %m");
-
- r = set_put(*set, prog);
+ r = set_ensure_consume(set, &filter_prog_hash_ops, TAKE_PTR(prog));
if (r < 0)
return log_unit_error_errno(u, r, "Can't add program to BPF program set: %m");
- TAKE_PTR(prog);
}
return 0;
r = bpf_program_cgroup_attach(prog, attach_type, path, BPF_F_ALLOW_MULTI);
if (r < 0)
return log_unit_error_errno(u, r, "Attaching custom egress BPF program to cgroup %s failed: %m", path);
- /* Remember that these BPF programs are installed now. */
- r = set_ensure_allocated(set_installed, &filter_prog_hash_ops);
- if (r < 0)
- return log_unit_error_errno(u, r, "Can't allocate BPF program set: %m");
- r = set_put(*set_installed, prog);
+ /* Remember that these BPF programs are installed now. */
+ r = set_ensure_put(set_installed, &filter_prog_hash_ops, prog);
if (r < 0)
return log_unit_error_errno(u, r, "Can't add program to BPF program set: %m");
bpf_program_ref(prog);
"Failed to reset devices.allow/devices.deny: %m");
}
- bool whitelist_static = policy == CGROUP_DEVICE_POLICY_CLOSED ||
+ bool allow_list_static = policy == CGROUP_DEVICE_POLICY_CLOSED ||
(policy == CGROUP_DEVICE_POLICY_AUTO && c->device_allow);
- if (whitelist_static)
- (void) bpf_devices_whitelist_static(prog, path);
+ if (allow_list_static)
+ (void) bpf_devices_allow_list_static(prog, path);
- bool any = whitelist_static;
+ bool any = allow_list_static;
LIST_FOREACH(device_allow, a, c->device_allow) {
char acc[4], *val;
unsigned k = 0;
acc[k++] = 0;
if (path_startswith(a->path, "/dev/"))
- r = bpf_devices_whitelist_device(prog, path, a->path, acc);
+ r = bpf_devices_allow_list_device(prog, path, a->path, acc);
else if ((val = startswith(a->path, "block-")))
- r = bpf_devices_whitelist_major(prog, path, val, 'b', acc);
+ r = bpf_devices_allow_list_major(prog, path, val, 'b', acc);
else if ((val = startswith(a->path, "char-")))
- r = bpf_devices_whitelist_major(prog, path, val, 'c', acc);
+ r = bpf_devices_allow_list_major(prog, path, val, 'c', acc);
else {
log_unit_debug(u, "Ignoring device '%s' while writing cgroup attribute.", a->path);
continue;
log_unit_warning_errno(u, SYNTHETIC_ERRNO(ENODEV), "No devices matched by device filter.");
/* The kernel verifier would reject a program we would build with the normal intro and outro
- but no whitelisting rules (outro would contain an unreachable instruction for successful
+ but no allow-listing rules (outro would contain an unreachable instruction for successful
return). */
policy = CGROUP_DEVICE_POLICY_STRICT;
}
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "automount.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-automount.h"
#include "dbus-util.h"
#include "string-util.h"
#include "af-list.h"
#include "alloc-util.h"
#include "bpf-firewall.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "cgroup-util.h"
#include "cgroup.h"
#include "dbus-cgroup.h"
return 1; \
}
-#define BUS_DEFINE_SET_CGROUP_PROTECTION(function, mask, scale) \
- static int bus_cgroup_set_##function( \
- Unit *u, \
- const char *name, \
- uint64_t *p, \
- bool *s, \
- sd_bus_message *message, \
- UnitWriteFlags flags, \
- sd_bus_error *error) { \
- \
- uint64_t v = CGROUP_LIMIT_MIN; \
- bool nonempty = true; \
- char type; \
- int r; \
- \
- assert(p); \
- assert(s); \
- \
- r = sd_bus_message_peek_type(message, &type, NULL); \
- if (r < 0) \
- return r; \
- if (type == SD_BUS_TYPE_BOOLEAN) { \
- r = sd_bus_message_read(message, "b", &nonempty); \
- if (r < 0) \
- return r; \
- /* Bool is used to denote empty value only */ \
- if (nonempty) \
- return -EINVAL; \
- } else if (type != SD_BUS_TYPE_UINT64) { \
- return -EINVAL; \
- } else { \
- r = sd_bus_message_read(message, "t", &v); \
- if (r < 0) \
- return r; \
- } \
- \
- if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
- *p = v; \
- unit_invalidate_cgroup(u, mask); \
- if (!nonempty) { \
- *s = false; \
- unit_write_settingf(u, flags, name, \
- "%s=", name); \
- } else if (v == CGROUP_LIMIT_MAX) { \
- *s = true; \
- unit_write_settingf(u, flags, name, \
- "%s=infinity", name); \
- } else { \
- *s = true; \
- unit_write_settingf(u, flags, name, \
- "%s=%" PRIu64, name, v); \
- } \
- } \
- \
- return 1; \
- } \
- static int bus_cgroup_set_##function##_scale( \
- Unit *u, \
- const char *name, \
- uint64_t *p, \
- bool *s, \
- sd_bus_message *message, \
- UnitWriteFlags flags, \
- sd_bus_error *error) { \
- \
- uint64_t v; \
- uint32_t raw; \
- int r; \
- \
- assert(p); \
- assert(s); \
- \
- r = sd_bus_message_read(message, "u", &raw); \
- if (r < 0) \
- return r; \
- \
- v = scale(raw, UINT32_MAX); \
- if (v >= UINT64_MAX) \
- return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, \
- "Value specified in %s is out of range", name); \
- \
- if (!UNIT_WRITE_FLAGS_NOOP(flags)) { \
- *p = v; \
- unit_invalidate_cgroup(u, mask); \
- \
- /* Prepare to chop off suffix */ \
- assert_se(endswith(name, "Scale")); \
- \
- uint32_t scaled = DIV_ROUND_UP((uint64_t) raw * 1000, (uint64_t) UINT32_MAX); \
- unit_write_settingf(u, flags, name, "%.*s=%" PRIu32 ".%" PRIu32 "%%", \
- (int)(strlen(name) - strlen("Scale")), name, \
- scaled / 10, scaled % 10); \
- } \
- \
- *s = true; \
- return 1; \
- }
-
DISABLE_WARNING_TYPE_LIMITS;
BUS_DEFINE_SET_CGROUP_WEIGHT(cpu_weight, CGROUP_MASK_CPU, CGROUP_WEIGHT_IS_OK, CGROUP_WEIGHT_INVALID);
BUS_DEFINE_SET_CGROUP_WEIGHT(cpu_shares, CGROUP_MASK_CPU, CGROUP_CPU_SHARES_IS_OK, CGROUP_CPU_SHARES_INVALID);
BUS_DEFINE_SET_CGROUP_WEIGHT(io_weight, CGROUP_MASK_IO, CGROUP_WEIGHT_IS_OK, CGROUP_WEIGHT_INVALID);
BUS_DEFINE_SET_CGROUP_WEIGHT(blockio_weight, CGROUP_MASK_BLKIO, CGROUP_BLKIO_WEIGHT_IS_OK, CGROUP_BLKIO_WEIGHT_INVALID);
BUS_DEFINE_SET_CGROUP_LIMIT(memory, CGROUP_MASK_MEMORY, physical_memory_scale, 1);
+BUS_DEFINE_SET_CGROUP_LIMIT(memory_protection, CGROUP_MASK_MEMORY, physical_memory_scale, 0);
BUS_DEFINE_SET_CGROUP_LIMIT(swap, CGROUP_MASK_MEMORY, physical_memory_scale, 0);
-BUS_DEFINE_SET_CGROUP_PROTECTION(memory_protection, CGROUP_MASK_MEMORY, physical_memory_scale);
REENABLE_WARNING;
static int bus_cgroup_set_tasks_max(
if (streq(name, "MemoryAccounting"))
return bus_cgroup_set_boolean(u, name, &c->memory_accounting, CGROUP_MASK_MEMORY, message, flags, error);
- if (streq(name, "MemoryMin"))
- return bus_cgroup_set_memory_protection(u, name, &c->memory_min, &c->memory_min_set, message, flags, error);
+ if (streq(name, "MemoryMin")) {
+ r = bus_cgroup_set_memory_protection(u, name, &c->memory_min, message, flags, error);
+ if (r > 0)
+ c->memory_min_set = true;
+ return r;
+ }
- if (streq(name, "MemoryLow"))
- return bus_cgroup_set_memory_protection(u, name, &c->memory_low, &c->memory_low_set, message, flags, error);
+ if (streq(name, "MemoryLow")) {
+ r = bus_cgroup_set_memory_protection(u, name, &c->memory_low, message, flags, error);
+ if (r > 0)
+ c->memory_low_set = true;
+ return r;
+ }
- if (streq(name, "DefaultMemoryMin"))
- return bus_cgroup_set_memory_protection(u, name, &c->default_memory_min, &c->default_memory_min_set, message, flags, error);
+ if (streq(name, "DefaultMemoryMin")) {
+ r = bus_cgroup_set_memory_protection(u, name, &c->default_memory_min, message, flags, error);
+ if (r > 0)
+ c->default_memory_min_set = true;
+ return r;
+ }
- if (streq(name, "DefaultMemoryLow"))
- return bus_cgroup_set_memory_protection(u, name, &c->default_memory_low, &c->default_memory_low_set, message, flags, error);
+ if (streq(name, "DefaultMemoryLow")) {
+ r = bus_cgroup_set_memory_protection(u, name, &c->default_memory_low, message, flags, error);
+ if (r > 0)
+ c->default_memory_low_set = true;
+ return r;
+ }
if (streq(name, "MemoryHigh"))
return bus_cgroup_set_memory(u, name, &c->memory_high, message, flags, error);
if (streq(name, "MemoryLimit"))
return bus_cgroup_set_memory(u, name, &c->memory_limit, message, flags, error);
- if (streq(name, "MemoryMinScale"))
- return bus_cgroup_set_memory_protection_scale(u, name, &c->memory_min, &c->memory_min_set, message, flags, error);
+ if (streq(name, "MemoryMinScale")) {
+ r = bus_cgroup_set_memory_protection_scale(u, name, &c->memory_min, message, flags, error);
+ if (r > 0)
+ c->memory_min_set = true;
+ return r;
+ }
- if (streq(name, "MemoryLowScale"))
- return bus_cgroup_set_memory_protection_scale(u, name, &c->memory_low, &c->memory_low_set, message, flags, error);
+ if (streq(name, "MemoryLowScale")) {
+ r = bus_cgroup_set_memory_protection_scale(u, name, &c->memory_low, message, flags, error);
+ if (r > 0)
+ c->memory_low_set = true;
+ return r;
+ }
- if (streq(name, "DefaultMemoryMinScale"))
- return bus_cgroup_set_memory_protection_scale(u, name, &c->default_memory_min, &c->default_memory_min_set, message, flags, error);
+ if (streq(name, "DefaultMemoryMinScale")) {
+ r = bus_cgroup_set_memory_protection_scale(u, name, &c->default_memory_min, message, flags, error);
+ if (r > 0)
+ c->default_memory_min_set = true;
+ return r;
+ }
- if (streq(name, "DefaultMemoryLowScale"))
- return bus_cgroup_set_memory_protection_scale(u, name, &c->default_memory_low, &c->default_memory_low_set, message, flags, error);
+ if (streq(name, "DefaultMemoryLowScale")) {
+ r = bus_cgroup_set_memory_protection_scale(u, name, &c->default_memory_low, message, flags, error);
+ if (r > 0)
+ c->default_memory_low_set = true;
+ return r;
+ }
if (streq(name, "MemoryHighScale"))
return bus_cgroup_set_memory_scale(u, name, &c->memory_high, message, flags, error);
#include "af-list.h"
#include "alloc-util.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "cap-list.h"
#include "capability-util.h"
#include "cpu-set-util.h"
if (r < 0)
return r;
- r = sd_bus_message_append(reply, "b", c->syscall_whitelist);
+ r = sd_bus_message_append(reply, "b", c->syscall_allow_list);
if (r < 0)
return r;
if (r < 0)
return r;
- r = sd_bus_message_append(reply, "b", c->address_families_whitelist);
+ r = sd_bus_message_append(reply, "b", c->address_families_allow_list);
if (r < 0)
return r;
return sd_bus_message_append_array(reply, 'y', c->root_hash, c->root_hash_size);
}
+static int property_get_root_hash_sig(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ ExecContext *c = userdata;
+
+ assert(bus);
+ assert(c);
+ assert(property);
+ assert(reply);
+
+ return sd_bus_message_append_array(reply, 'y', c->root_hash_sig, c->root_hash_sig_size);
+}
+
const sd_bus_vtable bus_exec_vtable[] = {
SD_BUS_VTABLE_START(0),
SD_BUS_PROPERTY("Environment", "as", NULL, offsetof(ExecContext, environment), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("RootImage", "s", NULL, offsetof(ExecContext, root_image), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("RootHash", "ay", property_get_root_hash, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("RootHashPath", "s", NULL, offsetof(ExecContext, root_hash_path), SD_BUS_VTABLE_PROPERTY_CONST),
+ SD_BUS_PROPERTY("RootHashSignature", "ay", property_get_root_hash_sig, 0, SD_BUS_VTABLE_PROPERTY_CONST),
+ SD_BUS_PROPERTY("RootHashSignaturePath", "s", NULL, offsetof(ExecContext, root_hash_sig_path), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("RootVerity", "s", NULL, offsetof(ExecContext, root_verity), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("OOMScoreAdjust", "i", property_get_oom_score_adjust, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("CoredumpFilter", "t", property_get_coredump_filter, 0, SD_BUS_VTABLE_PROPERTY_CONST),
return bus_set_transient_path(u, "RootHash", &c->root_hash_path, message, flags, error);
}
+ if (streq(name, "RootHashSignature")) {
+ const void *roothash_sig_decoded;
+ size_t roothash_sig_decoded_size;
+
+ r = sd_bus_message_read_array(message, 'y', &roothash_sig_decoded, &roothash_sig_decoded_size);
+ if (r < 0)
+ return r;
+
+ if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+ _cleanup_free_ char *encoded = NULL;
+
+ if (roothash_sig_decoded_size == 0) {
+ c->root_hash_sig_path = mfree(c->root_hash_sig_path);
+ c->root_hash_sig = mfree(c->root_hash_sig);
+ c->root_hash_sig_size = 0;
+
+ unit_write_settingf(u, flags, name, "RootHashSignature=");
+ } else {
+ _cleanup_free_ void *p;
+ ssize_t len;
+
+ len = base64mem(roothash_sig_decoded, roothash_sig_decoded_size, &encoded);
+ if (len < 0)
+ return -ENOMEM;
+
+ p = memdup(roothash_sig_decoded, roothash_sig_decoded_size);
+ if (!p)
+ return -ENOMEM;
+
+ free_and_replace(c->root_hash_sig, p);
+ c->root_hash_sig_size = roothash_sig_decoded_size;
+ c->root_hash_sig_path = mfree(c->root_hash_sig_path);
+
+ unit_write_settingf(u, flags, name, "RootHashSignature=base64:%s", encoded);
+ }
+ }
+
+ return 1;
+ }
+
+ if (streq(name, "RootHashSignaturePath")) {
+ c->root_hash_sig_size = 0;
+ c->root_hash_sig = mfree(c->root_hash_sig);
+
+ return bus_set_transient_path(u, "RootHashSignature", &c->root_hash_sig_path, message, flags, error);
+ }
+
if (streq(name, "RootVerity"))
return bus_set_transient_path(u, name, &c->root_verity, message, flags, error);
return bus_set_transient_errno(u, name, &c->syscall_errno, message, flags, error);
if (streq(name, "SystemCallFilter")) {
- int whitelist;
+ int allow_list;
_cleanup_strv_free_ char **l = NULL;
r = sd_bus_message_enter_container(message, 'r', "bas");
if (r < 0)
return r;
- r = sd_bus_message_read(message, "b", &whitelist);
+ r = sd_bus_message_read(message, "b", &allow_list);
if (r < 0)
return r;
if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
_cleanup_free_ char *joined = NULL;
- SeccompParseFlags invert_flag = whitelist ? 0 : SECCOMP_PARSE_INVERT;
+ SeccompParseFlags invert_flag = allow_list ? 0 : SECCOMP_PARSE_INVERT;
char **s;
if (strv_isempty(l)) {
- c->syscall_whitelist = false;
+ c->syscall_allow_list = false;
c->syscall_filter = hashmap_free(c->syscall_filter);
unit_write_settingf(u, flags, name, "SystemCallFilter=");
if (!c->syscall_filter)
return log_oom();
- c->syscall_whitelist = whitelist;
+ c->syscall_allow_list = allow_list;
- if (c->syscall_whitelist) {
+ if (c->syscall_allow_list) {
r = seccomp_parse_syscall_filter("@default",
-1,
c->syscall_filter,
SECCOMP_PARSE_PERMISSIVE |
- SECCOMP_PARSE_WHITELIST | invert_flag,
+ SECCOMP_PARSE_ALLOW_LIST | invert_flag,
u->id,
NULL, 0);
if (r < 0)
c->syscall_filter,
SECCOMP_PARSE_LOG | SECCOMP_PARSE_PERMISSIVE |
invert_flag |
- (c->syscall_whitelist ? SECCOMP_PARSE_WHITELIST : 0),
+ (c->syscall_allow_list ? SECCOMP_PARSE_ALLOW_LIST : 0),
u->id,
NULL, 0);
if (r < 0)
if (!joined)
return -ENOMEM;
- unit_write_settingf(u, flags, name, "SystemCallFilter=%s%s", whitelist ? "" : "~", joined);
+ unit_write_settingf(u, flags, name, "SystemCallFilter=%s%s", allow_list ? "" : "~", joined);
}
return 1;
else {
char **s;
- r = set_ensure_allocated(&c->syscall_archs, NULL);
- if (r < 0)
- return r;
-
STRV_FOREACH(s, l) {
uint32_t a;
if (r < 0)
return r;
- r = set_put(c->syscall_archs, UINT32_TO_PTR(a + 1));
+ r = set_ensure_put(&c->syscall_archs, NULL, UINT32_TO_PTR(a + 1));
if (r < 0)
return r;
}
return 1;
} else if (streq(name, "RestrictAddressFamilies")) {
- int whitelist;
+ int allow_list;
_cleanup_strv_free_ char **l = NULL;
r = sd_bus_message_enter_container(message, 'r', "bas");
if (r < 0)
return r;
- r = sd_bus_message_read(message, "b", &whitelist);
+ r = sd_bus_message_read(message, "b", &allow_list);
if (r < 0)
return r;
char **s;
if (strv_isempty(l)) {
- c->address_families_whitelist = false;
+ c->address_families_allow_list = false;
c->address_families = set_free(c->address_families);
unit_write_settingf(u, flags, name, "RestrictAddressFamilies=");
if (!c->address_families)
return log_oom();
- c->address_families_whitelist = whitelist;
+ c->address_families_allow_list = allow_list;
}
STRV_FOREACH(s, l) {
if (af < 0)
return af;
- if (whitelist == c->address_families_whitelist) {
+ if (allow_list == c->address_families_allow_list) {
r = set_put(c->address_families, INT_TO_PTR(af));
if (r < 0)
return r;
if (!joined)
return -ENOMEM;
- unit_write_settingf(u, flags, name, "RestrictAddressFamilies=%s%s", whitelist ? "" : "~", joined);
+ unit_write_settingf(u, flags, name, "RestrictAddressFamilies=%s%s", allow_list ? "" : "~", joined);
}
return 1;
#include "sd-bus.h"
#include "alloc-util.h"
+#include "bus-get-properties.h"
#include "bus-util.h"
#include "dbus-job.h"
#include "dbus-unit.h"
#include "sd-bus.h"
#include "unit.h"
-#include "bus-util.h"
+#include "bus-object.h"
extern const sd_bus_vtable bus_job_vtable[];
extern const BusObjectImplementation job_object;
/* SPDX-License-Identifier: LGPL-2.1+ */
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-kill.h"
#include "dbus-util.h"
#include "kill.h"
#include "architecture.h"
#include "build.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-log-control-api.h"
-#include "bus-util.h"
#include "dbus-cgroup.h"
#include "dbus-execute.h"
#include "dbus-job.h"
/* SPDX-License-Identifier: LGPL-2.1+ */
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-cgroup.h"
#include "dbus-execute.h"
#include "dbus-kill.h"
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "alloc-util.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-path.h"
#include "dbus-util.h"
#include "list.h"
#include "alloc-util.h"
#include "bus-common-errors.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-cgroup.h"
#include "dbus-kill.h"
#include "dbus-scope.h"
#include "alloc-util.h"
#include "async.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-cgroup.h"
#include "dbus-execute.h"
#include "dbus-kill.h"
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "alloc-util.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-cgroup.h"
#include "dbus-execute.h"
#include "dbus-kill.h"
Copyright © 2010 Maarten Lankhorst
***/
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-cgroup.h"
#include "dbus-execute.h"
#include "dbus-swap.h"
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "alloc-util.h"
-#include "bus-util.h"
+#include "bus-get-properties.h"
#include "dbus-timer.h"
#include "dbus-util.h"
#include "strv.h"
#include "alloc-util.h"
#include "bpf-firewall.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "cgroup-util.h"
#include "condition.h"
#include "dbus-job.h"
/* SPDX-License-Identifier: LGPL-2.1+ */
#include <fcntl.h>
-#include <linux/random.h>
-#include <sys/ioctl.h>
#include <unistd.h>
#include "alloc-util.h"
#include "efivars.h"
#include "fd-util.h"
#include "fs-util.h"
+#include "random-util.h"
#include "strv.h"
/* If a random seed was passed by the boot loader in the LoaderRandomSeed EFI variable, let's credit it to
}
int efi_take_random_seed(void) {
- _cleanup_free_ struct rand_pool_info *info = NULL;
_cleanup_free_ void *value = NULL;
_cleanup_close_ int random_fd = -1;
size_t size;
if (size == 0)
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Random seed passed from boot loader has zero size? Ignoring.");
- /* The kernel API only accepts "int" as entropy count (which is in bits), let's avoid any chance for
- * confusion here. */
- if (size > INT_MAX / 8)
- size = INT_MAX / 8;
-
random_fd = open("/dev/urandom", O_WRONLY|O_CLOEXEC|O_NOCTTY);
if (random_fd < 0)
return log_warning_errno(errno, "Failed to open /dev/urandom for writing, ignoring: %m");
if (r < 0)
return log_warning_errno(r, "Unable to mark EFI random seed as used, not using it: %m");
- info = malloc(offsetof(struct rand_pool_info, buf) + size);
- if (!info)
- return log_oom();
-
- info->entropy_count = size * 8;
- info->buf_size = size;
- memcpy(info->buf, value, size);
-
- if (ioctl(random_fd, RNDADDENTROPY, info) < 0)
+ r = random_write_entropy(random_fd, value, size, true);
+ if (r < 0)
return log_warning_errno(errno, "Failed to credit entropy, ignoring: %m");
log_info("Successfully credited entropy passed from boot loader.");
#include "terminal-util.h"
#include "virt.h"
+static const char* const emergency_action_table[_EMERGENCY_ACTION_MAX] = {
+ [EMERGENCY_ACTION_NONE] = "none",
+ [EMERGENCY_ACTION_REBOOT] = "reboot",
+ [EMERGENCY_ACTION_REBOOT_FORCE] = "reboot-force",
+ [EMERGENCY_ACTION_REBOOT_IMMEDIATE] = "reboot-immediate",
+ [EMERGENCY_ACTION_POWEROFF] = "poweroff",
+ [EMERGENCY_ACTION_POWEROFF_FORCE] = "poweroff-force",
+ [EMERGENCY_ACTION_POWEROFF_IMMEDIATE] = "poweroff-immediate",
+ [EMERGENCY_ACTION_EXIT] = "exit",
+ [EMERGENCY_ACTION_EXIT_FORCE] = "exit-force",
+};
+
static void log_and_status(Manager *m, bool warn, const char *message, const char *reason) {
log_full(warn ? LOG_WARNING : LOG_DEBUG, "%s: %s", message, reason);
if (warn)
int exit_status,
const char *reason) {
+ Unit *u;
+
assert(m);
assert(action >= 0);
assert(action < _EMERGENCY_ACTION_MAX);
+ /* Is the special shutdown target active or queued? If so, we are in shutdown state */
+ if (IN_SET(action, EMERGENCY_ACTION_REBOOT, EMERGENCY_ACTION_POWEROFF, EMERGENCY_ACTION_EXIT)) {
+ u = manager_get_unit(m, SPECIAL_SHUTDOWN_TARGET);
+ if (u && unit_active_or_pending(u)) {
+ log_notice("Shutdown is already active. Skipping emergency action request %s.",
+ emergency_action_table[action]);
+ return;
+ }
+ }
+
if (action == EMERGENCY_ACTION_NONE)
return;
}
}
-static const char* const emergency_action_table[_EMERGENCY_ACTION_MAX] = {
- [EMERGENCY_ACTION_NONE] = "none",
- [EMERGENCY_ACTION_REBOOT] = "reboot",
- [EMERGENCY_ACTION_REBOOT_FORCE] = "reboot-force",
- [EMERGENCY_ACTION_REBOOT_IMMEDIATE] = "reboot-immediate",
- [EMERGENCY_ACTION_POWEROFF] = "poweroff",
- [EMERGENCY_ACTION_POWEROFF_FORCE] = "poweroff-force",
- [EMERGENCY_ACTION_POWEROFF_IMMEDIATE] = "poweroff-immediate",
- [EMERGENCY_ACTION_EXIT] = "exit",
- [EMERGENCY_ACTION_EXIT_FORCE] = "exit-force",
-};
DEFINE_STRING_TABLE_LOOKUP(emergency_action, EmergencyAction);
int parse_emergency_action(
static bool context_has_address_families(const ExecContext *c) {
assert(c);
- return c->address_families_whitelist ||
+ return c->address_families_allow_list ||
!set_isempty(c->address_families);
}
static bool context_has_syscall_filters(const ExecContext *c) {
assert(c);
- return c->syscall_whitelist ||
+ return c->syscall_allow_list ||
!hashmap_isempty(c->syscall_filter);
}
negative_action = c->syscall_errno == 0 ? scmp_act_kill_process() : SCMP_ACT_ERRNO(c->syscall_errno);
- if (c->syscall_whitelist) {
+ if (c->syscall_allow_list) {
default_action = negative_action;
action = SCMP_ACT_ALLOW;
} else {
}
if (needs_ambient_hack) {
- r = seccomp_filter_set_add(c->syscall_filter, c->syscall_whitelist, syscall_filter_sets + SYSCALL_FILTER_SET_SETUID);
+ r = seccomp_filter_set_add(c->syscall_filter, c->syscall_allow_list, syscall_filter_sets + SYSCALL_FILTER_SET_SETUID);
if (r < 0)
return r;
}
if (skip_seccomp_unavailable(u, "RestrictAddressFamilies="))
return 0;
- return seccomp_restrict_address_families(c->address_families, c->address_families_whitelist);
+ return seccomp_restrict_address_families(c->address_families, c->address_families_allow_list);
}
static int apply_memory_deny_write_execute(const Unit* u, const ExecContext *c) {
needs_sandboxing ? context->protect_home : PROTECT_HOME_NO,
needs_sandboxing ? context->protect_system : PROTECT_SYSTEM_NO,
context->mount_flags,
- context->root_hash, context->root_hash_size, context->root_hash_path, context->root_verity,
+ context->root_hash, context->root_hash_size, context->root_hash_path,
+ context->root_hash_sig, context->root_hash_sig_size, context->root_hash_sig_path,
+ context->root_verity,
DISSECT_IMAGE_DISCARD_ON_LOOP|DISSECT_IMAGE_RELAX_VAR_CHECK|DISSECT_IMAGE_FSCK,
error_path);
}
out:
- /* Revert back uid & gid for the the last time, and exit */
+ /* Revert back uid & gid for the last time, and exit */
/* no extra logging, as only the first already reported error matters */
if (getuid() != saved_uid)
(void) setreuid(saved_uid, -1);
c->root_hash = mfree(c->root_hash);
c->root_hash_size = 0;
c->root_hash_path = mfree(c->root_hash_path);
+ c->root_hash_sig = mfree(c->root_hash_sig);
+ c->root_hash_sig_size = 0;
+ c->root_hash_sig_path = mfree(c->root_hash_sig_path);
c->root_verity = mfree(c->root_verity);
c->tty_path = mfree(c->tty_path);
c->syslog_identifier = mfree(c->syslog_identifier);
if (c->root_hash_path)
fprintf(f, "%sRootHash: %s\n", prefix, c->root_hash_path);
+ if (c->root_hash_sig) {
+ _cleanup_free_ char *encoded = NULL;
+ ssize_t len;
+ len = base64mem(c->root_hash_sig, c->root_hash_sig_size, &encoded);
+ if (len)
+ fprintf(f, "%sRootHashSignature: base64:%s\n", prefix, encoded);
+ }
+
+ if (c->root_hash_sig_path)
+ fprintf(f, "%sRootHashSignature: %s\n", prefix, c->root_hash_sig_path);
+
if (c->root_verity)
fprintf(f, "%sRootVerity: %s\n", prefix, c->root_verity);
"%sSystemCallFilter: ",
prefix);
- if (!c->syscall_whitelist)
+ if (!c->syscall_allow_list)
fputc('~', f);
#if HAVE_SECCOMP
char **unset_environment;
struct rlimit *rlimit[_RLIMIT_MAX];
- char *working_directory, *root_directory, *root_image, *root_verity, *root_hash_path;
- void *root_hash;
- size_t root_hash_size;
+ char *working_directory, *root_directory, *root_image, *root_verity, *root_hash_path, *root_hash_sig_path;
+ void *root_hash, *root_hash_sig;
+ size_t root_hash_size, root_hash_sig_size;
bool working_directory_missing_ok:1;
bool working_directory_home:1;
Hashmap *syscall_filter;
Set *syscall_archs;
int syscall_errno;
- bool syscall_whitelist:1;
+ bool syscall_allow_list:1;
- bool address_families_whitelist:1;
+ bool address_families_allow_list:1;
Set *address_families;
char *network_namespace_path;
$1.RootDirectory, config_parse_unit_path_printf, true, offsetof($1, exec_context.root_directory)
$1.RootImage, config_parse_unit_path_printf, true, offsetof($1, exec_context.root_image)
$1.RootHash, config_parse_exec_root_hash, 0, offsetof($1, exec_context)
+$1.RootHashSignature, config_parse_exec_root_hash_sig, 0, offsetof($1, exec_context)
$1.RootVerity, config_parse_unit_path_printf, true, offsetof($1, exec_context.root_verity)
$1.User, config_parse_user_group_compat, 0, offsetof($1, exec_context.user)
$1.Group, config_parse_user_group_compat, 0, offsetof($1, exec_context.group)
#include <sched.h>
#include <sys/resource.h>
+#include "sd-messages.h"
+
#include "af-list.h"
#include "alloc-util.h"
#include "all-units.h"
if (m == KILL_NONE)
log_syntax(unit, LOG_WARNING, filename, line, 0,
"Unit configured to use KillMode=none. "
- "This is unsafe, as it disables systemd's process life-cycle management for the service. "
+ "This is unsafe, as it disables systemd's process lifecycle management for the service. "
"Please update your service to use a safer KillMode=, such as 'mixed' or 'control-group'. "
"Support for KillMode=none is deprecated and will eventually be removed.");
return 0;
}
+int config_parse_exec_root_hash_sig(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_free_ void *roothash_sig_decoded = NULL;
+ char *value;
+ ExecContext *c = data;
+ size_t roothash_sig_decoded_size = 0;
+ int r;
+
+ assert(data);
+ assert(filename);
+ assert(line);
+ assert(rvalue);
+
+ if (isempty(rvalue)) {
+ /* Reset if the empty string is assigned */
+ c->root_hash_sig_path = mfree(c->root_hash_sig_path);
+ c->root_hash_sig = mfree(c->root_hash_sig);
+ c->root_hash_sig_size = 0;
+ return 0;
+ }
+
+ if (path_is_absolute(rvalue)) {
+ /* We have the path to a roothash signature to load and decode, eg: RootHashSignature=/foo/bar.roothash.p7s */
+ _cleanup_free_ char *p = NULL;
+
+ p = strdup(rvalue);
+ if (!p)
+ return -ENOMEM;
+
+ free_and_replace(c->root_hash_sig_path, p);
+ c->root_hash_sig = mfree(c->root_hash_sig);
+ c->root_hash_sig_size = 0;
+ return 0;
+ }
+
+ if (!(value = startswith(rvalue, "base64:")))
+ return log_syntax(unit, LOG_ERR, filename, line, SYNTHETIC_ERRNO(EINVAL), "Failed to decode RootHashSignature=, not a path but doesn't start with 'base64:', ignoring: %s", rvalue);
+
+ /* We have a roothash signature to decode, eg: RootHashSignature=base64:012345789abcdef */
+ r = unbase64mem(value, strlen(value), &roothash_sig_decoded, &roothash_sig_decoded_size);
+ if (r < 0)
+ return log_syntax(unit, LOG_ERR, filename, line, r, "Failed to decode RootHashSignature=, ignoring: %s", rvalue);
+
+ free_and_replace(c->root_hash_sig, roothash_sig_decoded);
+ c->root_hash_sig_size = roothash_sig_decoded_size;
+ c->root_hash_sig_path = mfree(c->root_hash_sig_path);
+
+ return 0;
+}
+
int config_parse_exec_cpu_affinity(const char *unit,
const char *filename,
unsigned line,
return -ENOEXEC;
}
+ if (strstr(lvalue, "User") && streq(k, NOBODY_USER_NAME))
+ log_struct(LOG_NOTICE,
+ "MESSAGE=%s:%u: Special user %s configured, this is not safe!", filename, line, k,
+ "UNIT=%s", unit,
+ "MESSAGE_ID=" SD_MESSAGE_NOBODY_USER_UNSUITABLE_STR,
+ "OFFENDING_USER=%s", k,
+ "CONFIG_FILE=%s", filename,
+ "CONFIG_LINE=%u", line);
+
return free_and_replace(*user, k);
}
if (isempty(rvalue)) {
/* Empty assignment resets the list */
c->syscall_filter = hashmap_free(c->syscall_filter);
- c->syscall_whitelist = false;
+ c->syscall_allow_list = false;
return 0;
}
if (invert)
/* Allow everything but the ones listed */
- c->syscall_whitelist = false;
+ c->syscall_allow_list = false;
else {
/* Allow nothing but the ones listed */
- c->syscall_whitelist = true;
+ c->syscall_allow_list = true;
- /* Accept default syscalls if we are on a whitelist */
+ /* Accept default syscalls if we are on a allow_list */
r = seccomp_parse_syscall_filter(
"@default", -1, c->syscall_filter,
- SECCOMP_PARSE_PERMISSIVE|SECCOMP_PARSE_WHITELIST,
+ SECCOMP_PARSE_PERMISSIVE|SECCOMP_PARSE_ALLOW_LIST,
unit,
NULL, 0);
if (r < 0)
name, num, c->syscall_filter,
SECCOMP_PARSE_LOG|SECCOMP_PARSE_PERMISSIVE|
(invert ? SECCOMP_PARSE_INVERT : 0)|
- (c->syscall_whitelist ? SECCOMP_PARSE_WHITELIST : 0),
+ (c->syscall_allow_list ? SECCOMP_PARSE_ALLOW_LIST : 0),
unit, filename, line);
if (r < 0)
return r;
return 0;
}
- r = set_ensure_allocated(archs, NULL);
- if (r < 0)
- return log_oom();
-
for (;;) {
_cleanup_free_ char *word = NULL;
uint32_t a;
continue;
}
- r = set_put(*archs, UINT32_TO_PTR(a + 1));
+ r = set_ensure_put(archs, NULL, UINT32_TO_PTR(a + 1));
if (r < 0)
return log_oom();
}
if (isempty(rvalue)) {
/* Empty assignment resets the list */
c->address_families = set_free(c->address_families);
- c->address_families_whitelist = false;
+ c->address_families_allow_list = false;
return 0;
}
if (!c->address_families)
return log_oom();
- c->address_families_whitelist = !invert;
+ c->address_families_allow_list = !invert;
}
for (p = rvalue;;) {
/* If we previously wanted to forbid an address family and now
* we want to allow it, then just remove it from the list.
*/
- if (!invert == c->address_families_whitelist) {
+ if (!invert == c->address_families_allow_list) {
r = set_put(c->address_families, INT_TO_PTR(af));
if (r < 0)
return log_oom();
uint64_t bytes = CGROUP_LIMIT_MAX;
int r;
- if (STR_IN_SET(lvalue, "DefaultMemoryLow",
- "DefaultMemoryMin",
- "MemoryLow",
- "MemoryMin"))
+ if (isempty(rvalue) && STR_IN_SET(lvalue, "DefaultMemoryLow",
+ "DefaultMemoryMin",
+ "MemoryLow",
+ "MemoryMin"))
bytes = CGROUP_LIMIT_MIN;
-
- if (!isempty(rvalue) && !streq(rvalue, "infinity")) {
+ else if (!isempty(rvalue) && !streq(rvalue, "infinity")) {
r = parse_permille(rvalue);
if (r < 0) {
}
}
- /* Keep Memory{Low,Min} unset with empty assignment so that we fall back to DefaultMemory* which in
- * contrast means zeroing the property. */
if (streq(lvalue, "DefaultMemoryLow")) {
c->default_memory_low = bytes;
c->default_memory_low_set = true;
c->default_memory_min_set = true;
} else if (streq(lvalue, "MemoryMin")) {
c->memory_min = bytes;
- c->memory_min_set = !isempty(rvalue);
+ c->memory_min_set = true;
} else if (streq(lvalue, "MemoryLow")) {
c->memory_low = bytes;
- c->memory_low_set = !isempty(rvalue);
+ c->memory_low_set = true;
} else if (streq(lvalue, "MemoryHigh"))
c->memory_high = bytes;
else if (streq(lvalue, "MemoryMax"))
CONFIG_PARSER_PROTOTYPE(config_parse_exec_cpu_affinity);
CONFIG_PARSER_PROTOTYPE(config_parse_exec_secure_bits);
CONFIG_PARSER_PROTOTYPE(config_parse_exec_root_hash);
+CONFIG_PARSER_PROTOTYPE(config_parse_exec_root_hash_sig);
CONFIG_PARSER_PROTOTYPE(config_parse_capability_set);
CONFIG_PARSER_PROTOTYPE(config_parse_exec_mount_flags);
CONFIG_PARSER_PROTOTYPE(config_parse_timer);
return log_error_errno(r, "Can't fetch current mount namespace: %m");
/* Switch to a new mount namespace, isolate ourself and unmount etc_machine_id in our new namespace */
- if (unshare(CLONE_NEWNS) < 0)
- return log_error_errno(errno, "Failed to enter new namespace: %m");
-
- if (mount(NULL, "/", NULL, MS_SLAVE | MS_REC, NULL) < 0)
- return log_error_errno(errno, "Couldn't make-rslave / mountpoint in our private namespace: %m");
+ r = detach_mount_namespace();
+ if (r < 0)
+ return log_error_errno(r, "Failed to set up new mount namespace: %m");
if (umount(etc_machine_id) < 0)
return log_error_errno(errno, "Failed to unmount transient %s file in our private namespace: %m", etc_machine_id);
#include "fileio.h"
#include "format-util.h"
#include "fs-util.h"
+#include "hexdecoct.h"
#include "hostname-setup.h"
#include "ima-setup.h"
#include "killall.h"
#include "pretty-print.h"
#include "proc-cmdline.h"
#include "process-util.h"
+#include "random-util.h"
#include "raw-clone.h"
#include "rlimit-util.h"
#if HAVE_SECCOMP
static const char *arg_bus_introspect = NULL;
-/* Those variables are initialized to 0 automatically, so we avoid uninitialized memory access.
- * Real defaults are assigned in reset_arguments() below. */
+/* Those variables are initialized to 0 automatically, so we avoid uninitialized memory access. Real
+ * defaults are assigned in reset_arguments() below. */
static char *arg_default_unit;
static bool arg_system;
static bool arg_dump_core;
static CPUSet arg_cpu_affinity;
static NUMAPolicy arg_numa_policy;
static usec_t arg_clock_usec;
+static void *arg_random_seed;
+static size_t arg_random_seed_size;
/* A copy of the original environment block */
static char **saved_env = NULL;
if (r < 0)
log_warning_errno(r, "Failed to parse systemd.clock_usec= argument, ignoring: %s", value);
+ } else if (proc_cmdline_key_streq(key, "systemd.random_seed")) {
+ void *p;
+ size_t sz;
+
+ if (proc_cmdline_value_missing(key, value))
+ return 0;
+
+ r = unbase64mem(value, (size_t) -1, &p, &sz);
+ if (r < 0)
+ log_warning_errno(r, "Failed to parse systemd.random_seed= argument, ignoring: %s", value);
+
+ free(arg_random_seed);
+ arg_random_seed = sz > 0 ? p : mfree(p);
+ arg_random_seed_size = sz;
+
} else if (streq(key, "quiet") && !value) {
if (arg_show_status == _SHOW_STATUS_INVALID)
if (arg_clock_usec == 0)
return;
+ if (getpid_cached() != 1)
+ return;
+
if (clock_settime(CLOCK_REALTIME, timespec_store(&ts, arg_clock_usec)) < 0)
log_error_errno(errno, "Failed to set system clock to time specified on kernel command line: %m");
else {
}
}
+static void cmdline_take_random_seed(void) {
+ _cleanup_close_ int random_fd = -1;
+ size_t suggested;
+ int r;
+
+ if (arg_random_seed_size == 0)
+ return;
+
+ if (getpid_cached() != 1)
+ return;
+
+ assert(arg_random_seed);
+ suggested = random_pool_size();
+
+ if (arg_random_seed_size < suggested)
+ log_warning("Random seed specified on kernel command line has size %zu, but %zu bytes required to fill entropy pool.",
+ arg_random_seed_size, suggested);
+
+ random_fd = open("/dev/urandom", O_WRONLY|O_CLOEXEC|O_NOCTTY);
+ if (random_fd < 0) {
+ log_warning_errno(errno, "Failed to open /dev/urandom for writing, ignoring: %m");
+ return;
+ }
+
+ r = random_write_entropy(random_fd, arg_random_seed, arg_random_seed_size, true);
+ if (r < 0) {
+ log_warning_errno(r, "Failed to credit entropy specified on kernel command line, ignoring: %m");
+ return;
+ }
+
+ log_notice("Successfully credited entropy passed on kernel command line.\n"
+ "Note that the seed provided this way is accessible to unprivileged programs. This functionality should not be used outside of testing environments.");
+}
+
static void initialize_coredump(bool skip_setup) {
#if ENABLE_COREDUMP
if (getpid_cached() != 1)
cpu_set_reset(&arg_cpu_affinity);
numa_policy_reset(&arg_numa_policy);
+
+ arg_random_seed = mfree(arg_random_seed);
+ arg_random_seed_size = 0;
+ arg_clock_usec = 0;
}
static int parse_configuration(const struct rlimit *saved_rlimit_nofile,
}
if (mac_selinux_init() < 0) {
- error_message = "Failed to initialize SELinux policy";
+ error_message = "Failed to initialize SELinux support";
goto finish;
}
/* For later on, see above... */
log_set_target(LOG_TARGET_JOURNAL);
- /* clear the kernel timestamp,
- * because we are in a container */
+ /* clear the kernel timestamp, because we are in a container */
kernel_timestamp = DUAL_TIMESTAMP_NULL;
}
log_set_target(LOG_TARGET_AUTO);
log_open();
- /* clear the kernel timestamp,
- * because we are not PID 1 */
+ /* clear the kernel timestamp, because we are not PID 1 */
kernel_timestamp = DUAL_TIMESTAMP_NULL;
+
+ if (mac_selinux_init() < 0) {
+ error_message = "Failed to initialize SELinux support";
+ goto finish;
+ }
}
if (arg_system) {
log_warning_errno(r, "Failed to redirect standard streams to /dev/null, ignoring: %m");
}
- /* Mount /proc, /sys and friends, so that /proc/cmdline and
- * /proc/$PID/fd is available. */
+ /* Mount /proc, /sys and friends, so that /proc/cmdline and /proc/$PID/fd is available. */
if (getpid_cached() == 1) {
/* Load the kernel modules early. */
assert_se(chdir("/") == 0);
if (arg_action == ACTION_RUN) {
- /* Apply the systemd.clock_usec= kernel command line switch */
- apply_clock_update();
+ if (!skip_setup) {
+ /* Apply the systemd.clock_usec= kernel command line switch */
+ apply_clock_update();
+
+ /* Apply random seed from kernel command line */
+ cmdline_take_random_seed();
+ }
/* A core pattern might have been specified via the cmdline. */
initialize_core_pattern(skip_setup);
return n;
}
-static bool manager_unit_cache_needs_refresh(Manager *m) {
- assert(m);
+bool manager_unit_file_maybe_loadable_from_cache(Unit *u) {
+ assert(u);
+
+ if (u->load_state != UNIT_NOT_FOUND)
+ return false;
+
+ if (u->manager->unit_cache_mtime == 0)
+ return false;
+
+ if (u->manager->unit_cache_mtime > u->fragment_loadtime)
+ return true;
- return m->unit_cache_mtime > 0 && !lookup_paths_mtime_good(&m->lookup_paths, m->unit_cache_mtime);
+ return !lookup_paths_mtime_good(&u->manager->lookup_paths, u->manager->unit_cache_mtime);
}
int manager_load_unit_prepare(
* but if they are already referenced (because of dependencies or ordering)
* then we have to force a load of the fragment. As an optimization, check
* first if anything in the usual paths was modified since the last time
- * the cache was loaded. */
- if (ret->load_state == UNIT_NOT_FOUND && manager_unit_cache_needs_refresh(m))
+ * the cache was loaded. Also check if the last time an attempt to load the
+ * unit was made was before the most recent cache refresh, so that we know
+ * we need to try again - even if the cache is current, it might have been
+ * updated in a different context before we had a chance to retry loading
+ * this particular unit. */
+ if (manager_unit_file_maybe_loadable_from_cache(ret))
ret->load_state = UNIT_STUB;
else {
*_ret = ret;
size = set_size(m->failed_units);
if (failed) {
- r = set_ensure_allocated(&m->failed_units, NULL);
+ r = set_ensure_put(&m->failed_units, NULL, u);
if (r < 0)
return log_oom();
-
- if (set_put(m->failed_units, u) < 0)
- return log_oom();
} else
(void) set_remove(m->failed_units, u);
int manager_get_job_from_dbus_path(Manager *m, const char *s, Job **_j);
+bool manager_unit_file_maybe_loadable_from_cache(Unit *u);
int manager_load_unit_prepare(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret);
int manager_load_unit(Manager *m, const char *name, const char *path, sd_bus_error *e, Unit **_ret);
int manager_load_startable_unit_or_warn(Manager *m, const char *name, const char *path, Unit **ret);
/* Create the source directory for bind-mounts if needed */
p = get_mount_parameters_fragment(m);
- if (p && mount_is_bind(p))
- (void) mkdir_p_label(p->what, m->directory_mode);
+ if (p && mount_is_bind(p)) {
+ r = mkdir_p_label(p->what, m->directory_mode);
+ if (r < 0)
+ log_unit_error_errno(UNIT(m), r, "Failed to make bind mount source '%s': %m", p->what);
+ }
if (p) {
_cleanup_free_ char *opts = NULL;
NULSTR_FOREACH(d, devnodes) {
r = clone_device_node(d, temporary_mount, &can_mknod);
- /* ENXIO means the the *source* is not a device file, skip creation in that case */
+ /* ENXIO means the *source* is not a device file, skip creation in that case */
if (r < 0 && r != -ENXIO)
goto fail;
}
/* Hmm, either the source or the destination are missing. Let's see if we can create the destination, then try again */
if (stat(what, &st) < 0)
- log_debug_errno(errno, "Mount point source '%s' is not accessible: %m", what);
+ log_error_errno(errno, "Mount point source '%s' is not accessible: %m", what);
else {
int q;
q = touch(mount_entry_path(m));
if (q < 0)
- log_debug_errno(q, "Failed to create destination mount point node '%s': %m", mount_entry_path(m));
+ log_error_errno(q, "Failed to create destination mount point node '%s': %m", mount_entry_path(m));
else
try_again = true;
}
}
if (r < 0)
- return log_debug_errno(r, "Failed to mount %s to %s: %m", what, mount_entry_path(m));
+ return log_error_errno(r, "Failed to mount %s to %s: %m", what, mount_entry_path(m));
}
log_debug("Successfully mounted %s to %s", what, mount_entry_path(m));
return 0;
}
-static int make_read_only(const MountEntry *m, char **blacklist, FILE *proc_self_mountinfo) {
+static int make_read_only(const MountEntry *m, char **deny_list, FILE *proc_self_mountinfo) {
unsigned long new_flags = 0, flags_mask = 0;
bool submounts = false;
int r = 0;
mount_entry_read_only(m) &&
!IN_SET(m->mode, EMPTY_DIR, TMPFS);
if (submounts)
- r = bind_remount_recursive_with_mountinfo(mount_entry_path(m), new_flags, flags_mask, blacklist, proc_self_mountinfo);
+ r = bind_remount_recursive_with_mountinfo(mount_entry_path(m), new_flags, flags_mask, deny_list, proc_self_mountinfo);
else
r = bind_remount_one_with_mountinfo(mount_entry_path(m), new_flags, flags_mask, proc_self_mountinfo);
const void *root_hash,
size_t root_hash_size,
const char *root_hash_path,
+ const void *root_hash_sig,
+ size_t root_hash_sig_size,
+ const char *root_hash_sig_path,
const char *root_verity,
DissectImageFlags dissect_image_flags,
char **error_path) {
_cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
_cleanup_(dissected_image_unrefp) DissectedImage *dissected_image = NULL;
_cleanup_free_ void *root_hash_decoded = NULL;
- _cleanup_free_ char *verity_data = NULL;
+ _cleanup_free_ char *verity_data = NULL, *hash_sig_path = NULL;
MountEntry *m = NULL, *mounts = NULL;
size_t n_mounts;
bool require_prefix = false;
if (r < 0)
return log_debug_errno(r, "Failed to create loop device for root image: %m");
- r = verity_metadata_load(root_image, root_hash_path, root_hash ? NULL : &root_hash_decoded, root_hash ? NULL : &root_hash_size, root_verity ? NULL : &verity_data);
+ r = verity_metadata_load(root_image, root_hash_path, root_hash ? NULL : &root_hash_decoded, root_hash ? NULL : &root_hash_size, root_verity ? NULL : &verity_data, root_hash_sig || root_hash_sig_path ? NULL : &hash_sig_path);
if (r < 0)
return log_debug_errno(r, "Failed to load root hash: %m");
dissect_image_flags |= root_verity || verity_data ? DISSECT_IMAGE_NO_PARTITION_TABLE : 0;
if (r < 0)
return log_debug_errno(r, "Failed to dissect image: %m");
- r = dissected_image_decrypt(dissected_image, NULL, root_hash ?: root_hash_decoded, root_hash_size, root_verity ?: verity_data, dissect_image_flags, &decrypted_image);
+ r = dissected_image_decrypt(dissected_image, NULL, root_hash ?: root_hash_decoded, root_hash_size, root_verity ?: verity_data, root_hash_sig_path ?: hash_sig_path, root_hash_sig, root_hash_sig_size, dissect_image_flags, &decrypted_image);
if (r < 0)
return log_debug_errno(r, "Failed to decrypt dissected image: %m");
}
if (n_mounts > 0) {
_cleanup_fclose_ FILE *proc_self_mountinfo = NULL;
- _cleanup_free_ char **blacklist = NULL;
+ _cleanup_free_ char **deny_list = NULL;
size_t j;
/* Open /proc/self/mountinfo now as it may become unavailable if we mount anything on top of /proc.
normalize_mounts(root, mounts, &n_mounts);
}
- /* Create a blacklist we can pass to bind_mount_recursive() */
- blacklist = new(char*, n_mounts+1);
- if (!blacklist) {
+ /* Create a deny list we can pass to bind_mount_recursive() */
+ deny_list = new(char*, n_mounts+1);
+ if (!deny_list) {
r = -ENOMEM;
goto finish;
}
for (j = 0; j < n_mounts; j++)
- blacklist[j] = (char*) mount_entry_path(mounts+j);
- blacklist[j] = NULL;
+ deny_list[j] = (char*) mount_entry_path(mounts+j);
+ deny_list[j] = NULL;
/* Second round, flip the ro bits if necessary. */
for (m = mounts; m < mounts + n_mounts; ++m) {
- r = make_read_only(m, blacklist, proc_self_mountinfo);
+ r = make_read_only(m, deny_list, proc_self_mountinfo);
if (r < 0) {
if (error_path && mount_entry_path(m))
*error_path = strdup(mount_entry_path(m));
const void *root_hash,
size_t root_hash_size,
const char *root_hash_path,
+ const void *root_hash_sig,
+ size_t root_hash_sig_size,
+ const char *root_hash_sig_path,
const char *root_verity,
DissectImageFlags dissected_image_flags,
char **error_path);
return r;
}
-static bool path_spec_check_good(PathSpec *s, bool initial) {
+static bool path_spec_check_good(PathSpec *s, bool initial, bool from_trigger_notify) {
bool b, good = false;
switch (s->type) {
case PATH_EXISTS:
- b = access(s->path, F_OK) >= 0;
- good = b && !s->previous_exists;
- s->previous_exists = b;
+ good = access(s->path, F_OK) >= 0;
break;
case PATH_EXISTS_GLOB:
case PATH_CHANGED:
case PATH_MODIFIED:
b = access(s->path, F_OK) >= 0;
- good = !initial && b != s->previous_exists;
+ good = !initial && !from_trigger_notify && b != s->previous_exists;
s->previous_exists = b;
break;
old_state = p->state;
p->state = state;
- if (state != PATH_WAITING &&
- (state != PATH_RUNNING || p->inotify_triggered))
+ if (!IN_SET(state, PATH_WAITING, PATH_RUNNING))
path_unwatch(p);
if (state != old_state)
unit_notify(UNIT(p), state_translation_table[old_state], state_translation_table[state], 0);
}
-static void path_enter_waiting(Path *p, bool initial, bool recheck);
+static void path_enter_waiting(Path *p, bool initial, bool from_trigger_notify);
static int path_coldplug(Unit *u) {
Path *p = PATH(u);
if (p->deserialized_state != p->state) {
if (IN_SET(p->deserialized_state, PATH_WAITING, PATH_RUNNING))
- path_enter_waiting(p, true, true);
+ path_enter_waiting(p, true, false);
else
path_set_state(p, p->deserialized_state);
}
if (r < 0)
goto fail;
- p->inotify_triggered = false;
-
path_set_state(p, PATH_RUNNING);
path_unwatch(p);
path_enter_dead(p, PATH_FAILURE_RESOURCES);
}
-static bool path_check_good(Path *p, bool initial) {
+static bool path_check_good(Path *p, bool initial, bool from_trigger_notify) {
PathSpec *s;
assert(p);
LIST_FOREACH(spec, s, p->specs)
- if (path_spec_check_good(s, initial))
+ if (path_spec_check_good(s, initial, from_trigger_notify))
return true;
return false;
}
-static void path_enter_waiting(Path *p, bool initial, bool recheck) {
+static void path_enter_waiting(Path *p, bool initial, bool from_trigger_notify) {
+ Unit *trigger;
int r;
- if (recheck)
- if (path_check_good(p, initial)) {
- log_unit_debug(UNIT(p), "Got triggered.");
- path_enter_running(p);
- return;
- }
+ /* If the triggered unit is already running, so are we */
+ trigger = UNIT_TRIGGER(UNIT(p));
+ if (trigger && !UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(trigger))) {
+ path_set_state(p, PATH_RUNNING);
+ path_unwatch(p);
+ return;
+ }
+
+ if (path_check_good(p, initial, from_trigger_notify)) {
+ log_unit_debug(UNIT(p), "Got triggered.");
+ path_enter_running(p);
+ return;
+ }
r = path_watch(p);
if (r < 0)
* might have appeared/been removed by now, so we must
* recheck */
- if (recheck)
- if (path_check_good(p, false)) {
- log_unit_debug(UNIT(p), "Got triggered.");
- path_enter_running(p);
- return;
- }
+ if (path_check_good(p, false, from_trigger_notify)) {
+ log_unit_debug(UNIT(p), "Got triggered.");
+ path_enter_running(p);
+ return;
+ }
path_set_state(p, PATH_WAITING);
return;
path_mkdir(p);
p->result = PATH_SUCCESS;
- path_enter_waiting(p, true, true);
+ path_enter_waiting(p, true, false);
return 1;
}
(void) serialize_item_format(f, "path-spec", "%s %i %s",
type,
s->previous_exists,
- s->path);
+ escaped);
}
return 0;
if (changed < 0)
goto fail;
- /* If we are already running, then remember that one event was
- * dispatched so that we restart the service only if something
- * actually changed on disk */
- p->inotify_triggered = true;
-
if (changed)
path_enter_running(p);
else
- path_enter_waiting(p, false, true);
+ path_enter_waiting(p, false, false);
return 0;
if (p->state == PATH_RUNNING &&
UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(other))) {
log_unit_debug(UNIT(p), "Got notified about unit deactivation.");
-
- /* Hmm, so inotify was triggered since the
- * last activation, so I guess we need to
- * recheck what is going on. */
- path_enter_waiting(p, false, p->inotify_triggered);
+ path_enter_waiting(p, false, true);
+ } else if (p->state == PATH_WAITING &&
+ !UNIT_IS_INACTIVE_OR_FAILED(unit_active_state(other))) {
+ log_unit_debug(UNIT(p), "Got notified about unit activation.");
+ path_enter_waiting(p, false, true);
}
}
PathState state, deserialized_state;
- bool inotify_triggered;
-
bool make_directory;
mode_t directory_mode;
if (type != JOB_STOP) {
r = bus_unit_validate_load_state(unit, e);
+ /* The time-based cache allows to start new units without daemon-reload,
+ * but if they are already referenced (because of dependencies or ordering)
+ * then we have to force a load of the fragment. As an optimization, check
+ * first if anything in the usual paths was modified since the last time
+ * the cache was loaded. Also check if the last time an attempt to load the
+ * unit was made was before the most recent cache refresh, so that we know
+ * we need to try again - even if the cache is current, it might have been
+ * updated in a different context before we had a chance to retry loading
+ * this particular unit.
+ * Given building up the transaction is a synchronous operation, attempt
+ * to load the unit immediately. */
+ if (r < 0 && manager_unit_file_maybe_loadable_from_cache(unit)) {
+ unit->load_state = UNIT_STUB;
+ r = unit_load(unit);
+ if (r < 0 || unit->load_state == UNIT_STUB)
+ unit->load_state = UNIT_NOT_FOUND;
+ r = bus_unit_validate_load_state(unit, e);
+ }
if (r < 0)
return r;
}
t = unit_name_to_type(name);
if (t < 0)
return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EINVAL),
- "failed to to derive unit type from name '%s': %m", name);
+ "failed to derive unit type from name '%s': %m", name);
if (u->type != _UNIT_TYPE_INVALID && t != u->type)
return log_unit_debug_errno(u, SYNTHETIC_ERRNO(EINVAL),
static int unit_add_startup_units(Unit *u) {
CGroupContext *c;
- int r;
c = unit_get_cgroup_context(u);
if (!c)
c->startup_blockio_weight == CGROUP_BLKIO_WEIGHT_INVALID)
return 0;
- r = set_ensure_allocated(&u->manager->startup_units, NULL);
- if (r < 0)
- return r;
-
- return set_put(u->manager->startup_units, u);
+ return set_ensure_put(&u->manager->startup_units, NULL, u);
}
int unit_load(Unit *u) {
UNIT_ERROR;
u->load_error = r;
+ /* Record the last time we tried to load the unit, so that if the cache gets updated between now
+ * and the next time an attempt is made to load this unit, we know we need to check again */
+ if (u->load_state == UNIT_NOT_FOUND)
+ u->fragment_loadtime = now(CLOCK_REALTIME);
+
unit_add_to_dbus_queue(u);
unit_add_to_gc_queue(u);
if (ec->root_image &&
(cc->device_policy != CGROUP_DEVICE_POLICY_AUTO || cc->device_allow)) {
+ const char *p;
/* When RootImage= is specified, the following devices are touched. */
- r = cgroup_add_device_allow(cc, "/dev/loop-control", "rw");
- if (r < 0)
- return r;
-
- r = cgroup_add_device_allow(cc, "block-loop", "rwm");
- if (r < 0)
- return r;
-
- r = cgroup_add_device_allow(cc, "block-blkext", "rwm");
- if (r < 0)
- return r;
+ FOREACH_STRING(p, "/dev/loop-control", "/dev/mapper/control") {
+ r = cgroup_add_device_allow(cc, p, "rw");
+ if (r < 0)
+ return r;
+ }
+ FOREACH_STRING(p, "block-loop", "block-blkext", "block-device-mapper") {
+ r = cgroup_add_device_allow(cc, p, "rwm");
+ if (r < 0)
+ return r;
+ }
- /* Make sure "block-loop" can be resolved, i.e. make sure "loop" shows up in /proc/devices */
- r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, "modprobe@loop.service", true, UNIT_DEPENDENCY_FILE);
- if (r < 0)
- return r;
+ /* Make sure "block-loop" can be resolved, i.e. make sure "loop" shows up in /proc/devices.
+ * Same for mapper and verity. */
+ FOREACH_STRING(p, "modprobe@loop.service", "modprobe@dm_mod.service", "modprobe@dm_verity.service") {
+ r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, p, true, UNIT_DEPENDENCY_FILE);
+ if (r < 0)
+ return r;
+ }
}
if (ec->protect_clock) {
return NULL;
/* If a unit is masked, then don't read the SELinux label of /dev/null, as that really makes no sense */
- if (path_equal(p, "/dev/null"))
+ if (null_or_empty_path(p) > 0)
return NULL;
return p;
char *source_path; /* if converted, the source file */
char **dropin_paths;
+ usec_t fragment_loadtime;
usec_t fragment_mtime;
usec_t source_mtime;
usec_t dropin_mtime;
goto fail;
}
-#if HAVE_XZ || HAVE_LZ4 || HAVE_ZSTD
+#if HAVE_COMPRESSION
/* If we will remove the coredump anyway, do not compress. */
if (arg_compress && !maybe_remove_external_coredump(NULL, st.st_size)) {
}
if (filename) {
-#if HAVE_XZ || HAVE_LZ4 || HAVE_ZSTD
+#if HAVE_COMPRESSION
_cleanup_close_ int fdf;
fdf = open(filename, O_RDONLY | O_CLOEXEC);
goto error;
}
#else
- log_error("Cannot decompress file. Compiled without compression support.");
- r = -EOPNOTSUPP;
+ r = log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
+ "Cannot decompress file. Compiled without compression support.");
goto error;
#endif
} else {
int r, units_active;
setlocale(LC_ALL, "");
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
/* The journal merging logic potentially needs a lot of fds. */
(void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
static bool arg_read_crypttab = true;
static const char *arg_crypttab = NULL;
static const char *arg_runtime_directory = NULL;
-static bool arg_whitelist = false;
+static bool arg_allow_list = false;
static Hashmap *arg_disks = NULL;
static char *arg_default_options = NULL;
static char *arg_default_keyfile = NULL;
if (!d)
return log_oom();
- d->create = arg_whitelist = true;
+ d->create = arg_allow_list = true;
} else if (streq(key, "luks.options")) {
if (!d)
return log_oom();
- d->create = arg_whitelist = true;
+ d->create = arg_allow_list = true;
free_and_replace(d->name, uuid_value);
} else
if (uuid)
d = hashmap_get(arg_disks, uuid);
- if (arg_whitelist && !d) {
+ if (arg_allow_list && !d) {
log_info("Not creating device '%s' because it was not specified on the kernel command line.", name);
continue;
}
static int run(int argc, char *argv[]) {
int r, k, n_found = 0;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
* to detect whether we are being run in a virtualized
* environment or not */
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
static void *arg_root_hash = NULL;
static char *arg_verity_data = NULL;
static size_t arg_root_hash_size = 0;
+static char *arg_root_hash_sig_path = NULL;
+static void *arg_root_hash_sig = NULL;
+static size_t arg_root_hash_sig_size = 0;
STATIC_DESTRUCTOR_REGISTER(arg_root_hash, freep);
STATIC_DESTRUCTOR_REGISTER(arg_verity_data, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root_hash_sig_path, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root_hash_sig, freep);
static void help(void) {
printf("%s [OPTIONS...] IMAGE\n"
" --fsck=BOOL Run fsck before mounting\n"
" --discard=MODE Choose 'discard' mode (disabled, loop, all, crypto)\n"
" --root-hash=HASH Specify root hash for verity\n"
+ " --root-hash-sig=SIG Specify pkcs7 signature of root hash for verity\n"
+ " as a DER encoded PKCS7, either as a path to a file\n"
+ " or as an ASCII base64 encoded string prefixed by\n"
+ " 'base64:'\n"
" --verity-data=PATH Specify data file with hash tree for verity if it is\n"
" not embedded in IMAGE\n",
program_invocation_short_name,
ARG_ROOT_HASH,
ARG_FSCK,
ARG_VERITY_DATA,
+ ARG_ROOT_HASH_SIG,
};
static const struct option options[] = {
- { "help", no_argument, NULL, 'h' },
- { "version", no_argument, NULL, ARG_VERSION },
- { "mount", no_argument, NULL, 'm' },
- { "read-only", no_argument, NULL, 'r' },
- { "discard", required_argument, NULL, ARG_DISCARD },
- { "root-hash", required_argument, NULL, ARG_ROOT_HASH },
- { "fsck", required_argument, NULL, ARG_FSCK },
- { "verity-data", required_argument, NULL, ARG_VERITY_DATA },
+ { "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, ARG_VERSION },
+ { "mount", no_argument, NULL, 'm' },
+ { "read-only", no_argument, NULL, 'r' },
+ { "discard", required_argument, NULL, ARG_DISCARD },
+ { "root-hash", required_argument, NULL, ARG_ROOT_HASH },
+ { "fsck", required_argument, NULL, ARG_FSCK },
+ { "verity-data", required_argument, NULL, ARG_VERITY_DATA },
+ { "root-hash-sig", required_argument, NULL, ARG_ROOT_HASH_SIG },
{}
};
return r;
break;
+ case ARG_ROOT_HASH_SIG: {
+ char *value;
+
+ if ((value = startswith(optarg, "base64:"))) {
+ void *p;
+ size_t l;
+
+ r = unbase64mem(value, strlen(value), &p, &l);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse root hash signature '%s': %m", optarg);
+
+ free_and_replace(arg_root_hash_sig, p);
+ arg_root_hash_sig_size = l;
+ arg_root_hash_sig_path = mfree(arg_root_hash_sig_path);
+ } else {
+ r = parse_path_argument_and_warn(optarg, false, &arg_root_hash_sig_path);
+ if (r < 0)
+ return r;
+ arg_root_hash_sig = mfree(arg_root_hash_sig);
+ arg_root_hash_sig_size = 0;
+ }
+
+ break;
+ }
+
case ARG_FSCK:
r = parse_boolean(optarg);
if (r < 0)
return log_error_errno(r, "Failed to set up loopback device: %m");
r = verity_metadata_load(arg_image, NULL, arg_root_hash ? NULL : &arg_root_hash, &arg_root_hash_size,
- arg_verity_data ? NULL : &arg_verity_data);
+ arg_verity_data ? NULL : &arg_verity_data,
+ arg_root_hash_sig_path || arg_root_hash_sig ? NULL : &arg_root_hash_sig_path);
if (r < 0)
return log_error_errno(r, "Failed to read verity artefacts for %s: %m", arg_image);
arg_flags |= arg_verity_data ? DISSECT_IMAGE_NO_PARTITION_TABLE : 0;
}
case ACTION_MOUNT:
- r = dissected_image_decrypt_interactively(m, NULL, arg_root_hash, arg_root_hash_size, arg_verity_data, arg_flags, &di);
+ r = dissected_image_decrypt_interactively(m, NULL, arg_root_hash, arg_root_hash_size, arg_verity_data, arg_root_hash_sig_path, arg_root_hash_sig, arg_root_hash_sig_size, arg_flags, &di);
if (r < 0)
return r;
char **i;
int r;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
#include <fcntl.h>
#include <getopt.h>
+#include <linux/loop.h>
#include <unistd.h>
#include "sd-id128.h"
#include "alloc-util.h"
#include "ask-password-api.h"
#include "copy.h"
+#include "dissect-image.h"
#include "env-file.h"
#include "fd-util.h"
#include "fileio.h"
#include "kbd-util.h"
#include "libcrypt-util.h"
#include "locale-util.h"
+#include "loop-util.h"
#include "main-func.h"
#include "memory-util.h"
#include "mkdir.h"
+#include "mount-util.h"
+#include "namespace-util.h"
#include "os-util.h"
#include "parse-util.h"
#include "path-util.h"
#include "terminal-util.h"
#include "time-util.h"
#include "tmpfile-util-label.h"
+#include "tmpfile-util.h"
#include "umask-util.h"
#include "user-util.h"
static char *arg_root = NULL;
+static char *arg_image = NULL;
static char *arg_locale = NULL; /* $LANG */
static char *arg_keymap = NULL;
static char *arg_locale_messages = NULL; /* $LC_MESSAGES */
static bool arg_force = false;
static bool arg_delete_root_password = false;
static bool arg_root_password_is_hashed = false;
+static bool arg_welcome = true;
STATIC_DESTRUCTOR_REGISTER(arg_root, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_image, freep);
STATIC_DESTRUCTOR_REGISTER(arg_locale, freep);
STATIC_DESTRUCTOR_REGISTER(arg_locale_messages, freep);
STATIC_DESTRUCTOR_REGISTER(arg_keymap, freep);
const char *pn;
int r;
+ if (!arg_welcome)
+ return;
+
if (done)
return;
return 0;
}
+static int setup_image(char **ret_mount_dir, LoopDevice **ret_loop_device, DecryptedImage **ret_decrypted_image) {
+ DissectImageFlags f = DISSECT_IMAGE_REQUIRE_ROOT|DISSECT_IMAGE_VALIDATE_OS|DISSECT_IMAGE_RELAX_VAR_CHECK|DISSECT_IMAGE_FSCK;
+ _cleanup_(loop_device_unrefp) LoopDevice *d = NULL;
+ _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
+ _cleanup_(dissected_image_unrefp) DissectedImage *dissected_image = NULL;
+ _cleanup_(rmdir_and_freep) char *mount_dir = NULL;
+ _cleanup_free_ char *temp = NULL;
+ int r;
+
+ if (!arg_image) {
+ *ret_mount_dir = NULL;
+ *ret_decrypted_image = NULL;
+ *ret_loop_device = NULL;
+ return 0;
+ }
+
+ assert(!arg_root);
+
+ r = tempfn_random_child(NULL, "firstboot", &temp);
+ if (r < 0)
+ return log_error_errno(r, "Failed to generate temporary mount directory: %m");
+
+ r = loop_device_make_by_path(arg_image, O_RDWR, LO_FLAGS_PARTSCAN, &d);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set up loopback device: %m");
+
+ r = dissect_image_and_warn(d->fd, arg_image, NULL, 0, NULL, f, &dissected_image);
+ if (r < 0)
+ return r;
+
+ r = dissected_image_decrypt_interactively(dissected_image, NULL, NULL, 0, NULL, NULL, NULL, 0, f, &decrypted_image);
+ if (r < 0)
+ return r;
+
+ r = detach_mount_namespace();
+ if (r < 0)
+ return log_error_errno(r, "Failed to detach mount namespace: %m");
+
+ mount_dir = strdup(temp);
+ if (!mount_dir)
+ return log_oom();
+
+ r = mkdir_p(mount_dir, 0700);
+ if (r < 0) {
+ mount_dir = mfree(mount_dir);
+ return log_error_errno(r, "Failed to create mount point: %m");
+ }
+
+ r = dissected_image_mount(dissected_image, mount_dir, UID_INVALID, f);
+ if (r < 0)
+ return log_error_errno(r, "Failed to mount image: %m");
+
+ if (decrypted_image) {
+ r = decrypted_image_relinquish(decrypted_image);
+ if (r < 0)
+ return log_error_errno(r, "Failed to relinquish DM devices: %m");
+ }
+
+ loop_device_relinquish(d);
+
+ arg_root = TAKE_PTR(temp);
+
+ *ret_mount_dir = TAKE_PTR(mount_dir);
+ *ret_decrypted_image = TAKE_PTR(decrypted_image);
+ *ret_loop_device = TAKE_PTR(d);
+
+ return 1;
+}
+
static int help(void) {
_cleanup_free_ char *link = NULL;
int r;
" -h --help Show this help\n"
" --version Show package version\n"
" --root=PATH Operate on an alternate filesystem root\n"
+ " --image=PATH Operate on an alternate filesystem image\n"
" --locale=LOCALE Set primary locale (LANG=)\n"
" --locale-messages=LOCALE Set message locale (LC_MESSAGES=)\n"
" --keymap=KEYMAP Set keymap\n"
" --setup-machine-id Generate a new random machine ID\n"
" --force Overwrite existing files\n"
" --delete-root-password Delete root password\n"
+ " --welcome=no Disable the welcome text\n"
"\nSee the %s for details.\n"
, program_invocation_short_name
, link
enum {
ARG_VERSION = 0x100,
ARG_ROOT,
+ ARG_IMAGE,
ARG_LOCALE,
ARG_LOCALE_MESSAGES,
ARG_KEYMAP,
ARG_SETUP_MACHINE_ID,
ARG_FORCE,
ARG_DELETE_ROOT_PASSWORD,
+ ARG_WELCOME,
};
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, ARG_VERSION },
{ "root", required_argument, NULL, ARG_ROOT },
+ { "image", required_argument, NULL, ARG_IMAGE },
{ "locale", required_argument, NULL, ARG_LOCALE },
{ "locale-messages", required_argument, NULL, ARG_LOCALE_MESSAGES },
{ "keymap", required_argument, NULL, ARG_KEYMAP },
{ "setup-machine-id", no_argument, NULL, ARG_SETUP_MACHINE_ID },
{ "force", no_argument, NULL, ARG_FORCE },
{ "delete-root-password", no_argument, NULL, ARG_DELETE_ROOT_PASSWORD },
+ { "welcome", required_argument, NULL, ARG_WELCOME },
{}
};
return r;
break;
+ case ARG_IMAGE:
+ r = parse_path_argument_and_warn(optarg, false, &arg_image);
+ if (r < 0)
+ return r;
+ break;
+
case ARG_LOCALE:
r = free_and_strdup(&arg_locale, optarg);
if (r < 0)
break;
case ARG_SETUP_MACHINE_ID:
-
r = sd_id128_randomize(&arg_machine_id);
if (r < 0)
return log_error_errno(r, "Failed to generate randomized machine ID: %m");
arg_delete_root_password = true;
break;
+ case ARG_WELCOME:
+ r = parse_boolean(optarg);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse --welcome= argument: %s", optarg);
+
+ arg_welcome = r;
+ break;
+
case '?':
return -EINVAL;
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"--delete-root-password cannot be combined with other root password options");
+ if (arg_image && arg_root)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Please specify either --root= or --image=, the combination of both is not supported.");
+
return 1;
}
static int run(int argc, char *argv[]) {
- bool enabled;
+ _cleanup_(loop_device_unrefp) LoopDevice *loop_device = NULL;
+ _cleanup_(decrypted_image_unrefp) DecryptedImage *decrypted_image = NULL;
+ _cleanup_(umount_and_rmdir_and_freep) char *unlink_dir = NULL;
int r;
r = parse_argv(argc, argv);
umask(0022);
- r = proc_cmdline_get_bool("systemd.firstboot", &enabled);
+ if (!arg_root && !arg_image) {
+ bool enabled;
+
+ /* If we are called without --root=/--image= let's honour the systemd.firstboot kernel
+ * command line option, because we are called to provision the host with basic settings (as
+ * opposed to some other file system tree/image) */
+
+ r = proc_cmdline_get_bool("systemd.firstboot", &enabled);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse systemd.firstboot= kernel command line argument, ignoring: %m");
+ if (r > 0 && !enabled)
+ return 0; /* disabled */
+ }
+
+ r = setup_image(&unlink_dir, &loop_device, &decrypted_image);
if (r < 0)
- return log_error_errno(r, "Failed to parse systemd.firstboot= kernel command line argument, ignoring: %m");
- if (r > 0 && !enabled)
- return 0; /* disabled */
+ return r;
r = process_locale();
if (r < 0)
return 0;
}
+static int write_extra_dependencies(FILE *f, const char *opts) {
+ int r;
+
+ assert(f);
+
+ if (opts) {
+ r = write_after(f, opts);
+ if (r < 0)
+ return r;
+ r = write_requires_after(f, opts);
+ if (r < 0)
+ return r;
+ r = write_before(f, opts);
+ if (r < 0)
+ return r;
+ r = write_requires_mounts_for(f, opts);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
+}
+
static int add_mount(
const char *dest,
const char *what,
SET_FLAG(flags, NOFAIL, true);
}
- if (!(flags & AUTOMOUNT) && opts) {
- r = write_after(f, opts);
- if (r < 0)
- return r;
- r = write_requires_after(f, opts);
- if (r < 0)
- return r;
- r = write_before(f, opts);
- if (r < 0)
- return r;
- r = write_requires_mounts_for(f, opts);
- if (r < 0)
- return r;
- }
+ r = write_extra_dependencies(f, opts);
+ if (r < 0)
+ return r;
if (passno != 0) {
r = generator_write_fsck_deps(f, dest, what, where, fstype);
"Documentation=man:fstab(5) man:systemd-fstab-generator(8)\n",
source);
- if (opts) {
- r = write_after(f, opts);
- if (r < 0)
- return r;
- r = write_requires_after(f, opts);
- if (r < 0)
- return r;
- r = write_before(f, opts);
- if (r < 0)
- return r;
- r = write_requires_mounts_for(f, opts);
- if (r < 0)
- return r;
- }
-
fprintf(f,
"\n"
"[Automount]\n"
/* SPDX-License-Identifier: LGPL-2.1+ */
-#include <errno.h>
-#include <sched.h>
-#include <sys/mount.h>
-#include <unistd.h>
+#include <stdio.h>
#include "fd-util.h"
#include "fs-util.h"
#include "fuzz.h"
-#include "log.h"
-#include "mkdir.h"
-#include "rm-rf.h"
-#include "string-util.h"
#include "tests.h"
+#include "tmpfile-util.h"
#include "udev-rules.h"
-static struct fakefs {
- const char *target;
- bool ignore_mount_error;
- bool is_mounted;
-} fakefss[] = {
- { "/sys", false, false },
- { "/dev", false, false },
- { "/run", false, false },
- { "/etc", false, false },
- { UDEVLIBEXECDIR "/rules.d", true, false },
-};
-
-static int setup_mount_namespace(void) {
- static thread_local bool is_namespaced = false;
-
- if (is_namespaced)
- return 1;
-
- if (unshare(CLONE_NEWNS) < 0)
- return log_error_errno(errno, "Failed to call unshare(): %m");
-
- if (mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL) < 0)
- return log_error_errno(errno, "Failed to mount / as private: %m");
-
- is_namespaced = true;
-
- return 1;
-}
-
-static int setup_fake_filesystems(const char *runtime_dir) {
- for (unsigned i = 0; i < ELEMENTSOF(fakefss); i++) {
- if (mount(runtime_dir, fakefss[i].target, NULL, MS_BIND, NULL) < 0) {
- log_full_errno(fakefss[i].ignore_mount_error ? LOG_DEBUG : LOG_ERR, errno, "Failed to mount %s: %m", fakefss[i].target);
- if (!fakefss[i].ignore_mount_error)
- return -errno;
- } else
- fakefss[i].is_mounted = true;
- }
-
- return 0;
-}
-
-static int cleanup_fake_filesystems(const char *runtime_dir) {
- for (unsigned i = 0; i < ELEMENTSOF(fakefss); i++) {
- if (!fakefss[i].is_mounted)
- continue;
-
- if (umount(fakefss[i].target) < 0) {
- log_full_errno(fakefss[i].ignore_mount_error ? LOG_DEBUG : LOG_ERR, errno, "Failed to umount %s: %m", fakefss[i].target);
- if (!fakefss[i].ignore_mount_error)
- return -errno;
- } else
- fakefss[i].is_mounted = false;
- }
- return 0;
-}
-
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
_cleanup_(udev_rules_freep) UdevRules *rules = NULL;
- _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
- FILE *f = NULL;
-
- (void) setup_mount_namespace();
-
- assert_se(runtime_dir = setup_fake_runtime_dir());
-
- if (setup_fake_filesystems(runtime_dir) < 0) {
-#ifndef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
- return EXIT_TEST_SKIP;
-#endif
- }
+ _cleanup_fclose_ FILE *f = NULL;
+ _cleanup_(unlink_tempfilep) char filename[] = "/tmp/fuzz-udev-rules.XXXXXX";
+ int r;
if (!getenv("SYSTEMD_LOG_LEVEL")) {
log_set_max_level_realm(LOG_REALM_UDEV, LOG_CRIT);
log_set_max_level_realm(LOG_REALM_SYSTEMD, LOG_CRIT);
}
- assert_se(mkdir_p("/etc/udev/rules.d", 0755) >= 0);
- f = fopen("/etc/udev/rules.d/fuzz.rules", "we");
- assert_se(f);
+ assert_se(fmkostemp_safe(filename, "r+", &f) == 0);
if (size != 0)
assert_se(fwrite(data, size, 1, f) == 1);
- assert_se(fclose(f) == 0);
+ fflush(f);
- assert_se(udev_rules_new(&rules, RESOLVE_NAME_EARLY) == 0);
+ assert_se(rules = udev_rules_new(RESOLVE_NAME_EARLY));
+ r = udev_rules_parse_file(rules, filename);
+ log_info_errno(r, "Parsing %s: %m", filename);
+ assert_se(IN_SET(r,
+ 0, /* OK */
+ -ENOBUFS /* line length exceeded */));
- assert_se(cleanup_fake_filesystems(runtime_dir) >= 0);
return 0;
}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#if HAVE_LIBFIDO2
+#include <fido.h>
+#endif
+
+#include "ask-password-api.h"
+#include "errno-util.h"
+#include "format-table.h"
+#include "hexdecoct.h"
+#include "homectl-fido2.h"
+#include "homectl-pkcs11.h"
+#include "libcrypt-util.h"
+#include "locale-util.h"
+#include "memory-util.h"
+#include "random-util.h"
+#include "strv.h"
+
+#if HAVE_LIBFIDO2
+static int add_fido2_credential_id(
+ JsonVariant **v,
+ const void *cid,
+ size_t cid_size) {
+
+ _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+ _cleanup_strv_free_ char **l = NULL;
+ _cleanup_free_ char *escaped = NULL;
+ int r;
+
+ assert(v);
+ assert(cid);
+
+ r = base64mem(cid, cid_size, &escaped);
+ if (r < 0)
+ return log_error_errno(r, "Failed to base64 encode FIDO2 credential ID: %m");
+
+ w = json_variant_ref(json_variant_by_key(*v, "fido2HmacCredential"));
+ if (w) {
+ r = json_variant_strv(w, &l);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse FIDO2 credential ID list: %m");
+
+ if (strv_contains(l, escaped))
+ return 0;
+ }
+
+ r = strv_extend(&l, escaped);
+ if (r < 0)
+ return log_oom();
+
+ w = json_variant_unref(w);
+ r = json_variant_new_array_strv(&w, l);
+ if (r < 0)
+ return log_error_errno(r, "Failed to create FIDO2 credential ID JSON: %m");
+
+ r = json_variant_set_field(v, "fido2HmacCredential", w);
+ if (r < 0)
+ return log_error_errno(r, "Failed to update FIDO2 credential ID: %m");
+
+ return 0;
+}
+
+static int add_fido2_salt(
+ JsonVariant **v,
+ const void *cid,
+ size_t cid_size,
+ const void *fido2_salt,
+ size_t fido2_salt_size,
+ const void *secret,
+ size_t secret_size) {
+
+ _cleanup_(json_variant_unrefp) JsonVariant *l = NULL, *w = NULL, *e = NULL;
+ _cleanup_(erase_and_freep) char *base64_encoded = NULL;
+ _cleanup_free_ char *unix_salt = NULL;
+ struct crypt_data cd = {};
+ char *k;
+ int r;
+
+ r = make_salt(&unix_salt);
+ if (r < 0)
+ return log_error_errno(r, "Failed to generate salt: %m");
+
+ /* Before using UNIX hashing on the supplied key we base64 encode it, since crypt_r() and friends
+ * expect a NUL terminated string, and we use a binary key */
+ r = base64mem(secret, secret_size, &base64_encoded);
+ if (r < 0)
+ return log_error_errno(r, "Failed to base64 encode secret key: %m");
+
+ errno = 0;
+ k = crypt_r(base64_encoded, unix_salt, &cd);
+ if (!k)
+ return log_error_errno(errno_or_else(EINVAL), "Failed to UNIX hash secret key: %m");
+
+ r = json_build(&e, JSON_BUILD_OBJECT(
+ JSON_BUILD_PAIR("credential", JSON_BUILD_BASE64(cid, cid_size)),
+ JSON_BUILD_PAIR("salt", JSON_BUILD_BASE64(fido2_salt, fido2_salt_size)),
+ JSON_BUILD_PAIR("hashedPassword", JSON_BUILD_STRING(k))));
+ if (r < 0)
+ return log_error_errno(r, "Failed to build FIDO2 salt JSON key object: %m");
+
+ w = json_variant_ref(json_variant_by_key(*v, "privileged"));
+ l = json_variant_ref(json_variant_by_key(w, "fido2HmacSalt"));
+
+ r = json_variant_append_array(&l, e);
+ if (r < 0)
+ return log_error_errno(r, "Failed append FIDO2 salt: %m");
+
+ r = json_variant_set_field(&w, "fido2HmacSalt", l);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set FDO2 salt: %m");
+
+ r = json_variant_set_field(v, "privileged", w);
+ if (r < 0)
+ return log_error_errno(r, "Failed to update privileged field: %m");
+
+ return 0;
+}
+#endif
+
+#define FIDO2_SALT_SIZE 32
+
+int identity_add_fido2_parameters(
+ JsonVariant **v,
+ const char *device) {
+
+#if HAVE_LIBFIDO2
+ _cleanup_(fido_cbor_info_free) fido_cbor_info_t *di = NULL;
+ _cleanup_(fido_assert_free) fido_assert_t *a = NULL;
+ _cleanup_(erase_and_freep) char *used_pin = NULL;
+ _cleanup_(fido_cred_free) fido_cred_t *c = NULL;
+ _cleanup_(fido_dev_free) fido_dev_t *d = NULL;
+ _cleanup_(erase_and_freep) void *salt = NULL;
+ JsonVariant *un, *realm, *rn;
+ bool found_extension = false;
+ const void *cid, *secret;
+ const char *fido_un;
+ size_t n, cid_size, secret_size;
+ char **e;
+ int r;
+
+ /* Construction is like this: we generate a salt of 32 bytes. We then ask the FIDO2 device to
+ * HMAC-SHA256 it for us with its internal key. The result is the key used by LUKS and account
+ * authentication. LUKS and UNIX password auth all do their own salting before hashing, so that FIDO2
+ * device never sees the volume key.
+ *
+ * S = HMAC-SHA256(I, D)
+ *
+ * with: S → LUKS/account authentication key (never stored)
+ * I → internal key on FIDO2 device (stored in the FIDO2 device)
+ * D → salt we generate here (stored in the privileged part of the JSON record)
+ *
+ */
+
+ assert(v);
+ assert(device);
+
+ salt = malloc(FIDO2_SALT_SIZE);
+ if (!salt)
+ return log_oom();
+
+ r = genuine_random_bytes(salt, FIDO2_SALT_SIZE, RANDOM_BLOCK);
+ if (r < 0)
+ return log_error_errno(r, "Failed to generate salt: %m");
+
+ d = fido_dev_new();
+ if (!d)
+ return log_oom();
+
+ r = fido_dev_open(d, device);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to open FIDO2 device %s: %s", device, fido_strerr(r));
+
+ if (!fido_dev_is_fido2(d))
+ return log_error_errno(SYNTHETIC_ERRNO(ENODEV),
+ "Specified device %s is not a FIDO2 device.", device);
+
+ di = fido_cbor_info_new();
+ if (!di)
+ return log_oom();
+
+ r = fido_dev_get_cbor_info(d, di);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to get CBOR device info for %s: %s", device, fido_strerr(r));
+
+ e = fido_cbor_info_extensions_ptr(di);
+ n = fido_cbor_info_extensions_len(di);
+
+ for (size_t i = 0; i < n; i++)
+ if (streq(e[i], "hmac-secret")) {
+ found_extension = true;
+ break;
+ }
+
+ if (!found_extension)
+ return log_error_errno(SYNTHETIC_ERRNO(ENODEV),
+ "Specified device %s is a FIDO2 device, but does not support the required HMAC-SECRET extension.", device);
+
+ c = fido_cred_new();
+ if (!c)
+ return log_oom();
+
+ r = fido_cred_set_extensions(c, FIDO_EXT_HMAC_SECRET);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to enable HMAC-SECRET extension on FIDO2 credential: %s", fido_strerr(r));
+
+ r = fido_cred_set_rp(c, "io.systemd.home", "Home Directory");
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set FIDO2 credential relying party ID/name: %s", fido_strerr(r));
+
+ r = fido_cred_set_type(c, COSE_ES256);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set FIDO2 credential type to ES256: %s", fido_strerr(r));
+
+ un = json_variant_by_key(*v, "userName");
+ if (!un)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "userName field of user record is missing");
+ if (!json_variant_is_string(un))
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "userName field of user record is not a string");
+
+ realm = json_variant_by_key(*v, "realm");
+ if (realm) {
+ if (!json_variant_is_string(realm))
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "realm field of user record is not a string");
+
+ fido_un = strjoina(json_variant_string(un), json_variant_string(realm));
+ } else
+ fido_un = json_variant_string(un);
+
+ rn = json_variant_by_key(*v, "realName");
+ if (rn && !json_variant_is_string(rn))
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "realName field of user record is not a string");
+
+ r = fido_cred_set_user(c,
+ (const unsigned char*) fido_un, strlen(fido_un), /* We pass the user ID and name as the same */
+ fido_un,
+ rn ? json_variant_string(rn) : NULL,
+ NULL /* icon URL */);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set FIDO2 credential user data: %s", fido_strerr(r));
+
+ r = fido_cred_set_clientdata_hash(c, (const unsigned char[32]) {}, 32);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set FIDO2 client data hash: %s", fido_strerr(r));
+
+ r = fido_cred_set_rk(c, FIDO_OPT_FALSE);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to turn off FIDO2 resident key option of credential: %s", fido_strerr(r));
+
+ r = fido_cred_set_uv(c, FIDO_OPT_FALSE);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to turn off FIDO2 user verification option of credential: %s", fido_strerr(r));
+
+ log_info("Initializing FIDO2 credential on security token.");
+
+ log_notice("%s%s(Hint: This might require verification of user presence on security token.)",
+ emoji_enabled() ? special_glyph(SPECIAL_GLYPH_TOUCH) : "",
+ emoji_enabled() ? " " : "");
+
+ r = fido_dev_make_cred(d, c, NULL);
+ if (r == FIDO_ERR_PIN_REQUIRED) {
+ _cleanup_free_ char *text = NULL;
+
+ if (asprintf(&text, "Please enter security token PIN:") < 0)
+ return log_oom();
+
+ for (;;) {
+ _cleanup_(strv_free_erasep) char **pin = NULL;
+ char **i;
+
+ r = ask_password_auto(text, "user-home", NULL, "fido2-pin", USEC_INFINITY, 0, &pin);
+ if (r < 0)
+ return log_error_errno(r, "Failed to acquire user PIN: %m");
+
+ r = FIDO_ERR_PIN_INVALID;
+ STRV_FOREACH(i, pin) {
+ if (isempty(*i)) {
+ log_info("PIN may not be empty.");
+ continue;
+ }
+
+ r = fido_dev_make_cred(d, c, *i);
+ if (r == FIDO_OK) {
+ used_pin = strdup(*i);
+ if (!used_pin)
+ return log_oom();
+ break;
+ }
+ if (r != FIDO_ERR_PIN_INVALID)
+ break;
+ }
+
+ if (r != FIDO_ERR_PIN_INVALID)
+ break;
+
+ log_notice("PIN incorrect, please try again.");
+ }
+ }
+ if (r == FIDO_ERR_PIN_AUTH_BLOCKED)
+ return log_notice_errno(SYNTHETIC_ERRNO(EPERM),
+ "Token PIN is currently blocked, please remove and reinsert token.");
+ if (r == FIDO_ERR_ACTION_TIMEOUT)
+ return log_error_errno(SYNTHETIC_ERRNO(ENOSTR),
+ "Token action timeout. (User didn't interact with token quickly enough.)");
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to generate FIDO2 credential: %s", fido_strerr(r));
+
+ cid = fido_cred_id_ptr(c);
+ if (!cid)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to get FIDO2 credential ID.");
+
+ cid_size = fido_cred_id_len(c);
+
+ a = fido_assert_new();
+ if (!a)
+ return log_oom();
+
+ r = fido_assert_set_extensions(a, FIDO_EXT_HMAC_SECRET);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to enable HMAC-SECRET extension on FIDO2 assertion: %s", fido_strerr(r));
+
+ r = fido_assert_set_hmac_salt(a, salt, FIDO2_SALT_SIZE);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set salt on FIDO2 assertion: %s", fido_strerr(r));
+
+ r = fido_assert_set_rp(a, "io.systemd.home");
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set FIDO2 assertion ID: %s", fido_strerr(r));
+
+ r = fido_assert_set_clientdata_hash(a, (const unsigned char[32]) {}, 32);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set FIDO2 assertion client data hash: %s", fido_strerr(r));
+
+ r = fido_assert_allow_cred(a, cid, cid_size);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to add FIDO2 assertion credential ID: %s", fido_strerr(r));
+
+ r = fido_assert_set_up(a, FIDO_OPT_FALSE);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to turn off FIDO2 assertion user presence: %s", fido_strerr(r));
+
+ log_info("Generating secret key on FIDO2 security token.");
+
+ r = fido_dev_get_assert(d, a, used_pin);
+ if (r == FIDO_ERR_UP_REQUIRED) {
+ r = fido_assert_set_up(a, FIDO_OPT_TRUE);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to turn on FIDO2 assertion user presence: %s", fido_strerr(r));
+
+ log_notice("%s%sIn order to allow secret key generation, please verify presence on security token.",
+ emoji_enabled() ? special_glyph(SPECIAL_GLYPH_TOUCH) : "",
+ emoji_enabled() ? " " : "");
+
+ r = fido_dev_get_assert(d, a, used_pin);
+ }
+ if (r == FIDO_ERR_ACTION_TIMEOUT)
+ return log_error_errno(SYNTHETIC_ERRNO(ENOSTR),
+ "Token action timeout. (User didn't interact with token quickly enough.)");
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to ask token for assertion: %s", fido_strerr(r));
+
+ secret = fido_assert_hmac_secret_ptr(a, 0);
+ if (!secret)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to retrieve HMAC secret.");
+
+ secret_size = fido_assert_hmac_secret_len(a, 0);
+
+ r = add_fido2_credential_id(v, cid, cid_size);
+ if (r < 0)
+ return r;
+
+ r = add_fido2_salt(v,
+ cid,
+ cid_size,
+ salt,
+ FIDO2_SALT_SIZE,
+ secret,
+ secret_size);
+ if (r < 0)
+ return r;
+
+ /* If we acquired the PIN also include it in the secret section of the record, so that systemd-homed
+ * can use it if it needs to, given that it likely needs to decrypt the key again to pass to LUKS or
+ * fscrypt. */
+ r = identity_add_token_pin(v, used_pin);
+ if (r < 0)
+ return r;
+
+ return 0;
+#else
+ return log_error_errno(EOPNOTSUPP, "FIDO2 tokens not supported on this build.");
+#endif
+}
+
+int list_fido2_devices(void) {
+#if HAVE_LIBFIDO2
+ _cleanup_(table_unrefp) Table *t = NULL;
+ size_t allocated = 64, found = 0;
+ fido_dev_info_t *di = NULL;
+ int r;
+
+ di = fido_dev_info_new(allocated);
+ if (!di)
+ return log_oom();
+
+ r = fido_dev_info_manifest(di, allocated, &found);
+ if (r == FIDO_ERR_INTERNAL || (r == FIDO_OK && found == 0)) {
+ /* The library returns FIDO_ERR_INTERNAL when no devices are found. I wish it wouldn't. */
+ log_info("No FIDO2 devices found.");
+ r = 0;
+ goto finish;
+ }
+ if (r != FIDO_OK) {
+ r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to enumerate FIDO2 devices: %s", fido_strerr(r));
+ goto finish;
+ }
+
+ t = table_new("path", "manufacturer", "product");
+ if (!t) {
+ r = log_oom();
+ goto finish;
+ }
+
+ for (size_t i = 0; i < found; i++) {
+ const fido_dev_info_t *entry;
+
+ entry = fido_dev_info_ptr(di, i);
+ if (!entry) {
+ r = log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to get device information for FIDO device %zu.", i);
+ goto finish;
+ }
+
+ r = table_add_many(
+ t,
+ TABLE_PATH, fido_dev_info_path(entry),
+ TABLE_STRING, fido_dev_info_manufacturer_string(entry),
+ TABLE_STRING, fido_dev_info_product_string(entry));
+ if (r < 0) {
+ table_log_add_error(r);
+ goto finish;
+ }
+ }
+
+ r = table_print(t, stdout);
+ if (r < 0) {
+ log_error_errno(r, "Failed to show device table: %m");
+ goto finish;
+ }
+
+ r = 0;
+
+finish:
+ fido_dev_info_free(&di, allocated);
+ return r;
+#else
+ return log_error_errno(EOPNOTSUPP, "FIDO2 tokens not supported on this build.");
+#endif
+}
+
+int find_fido2_auto(char **ret) {
+#if HAVE_LIBFIDO2
+ _cleanup_free_ char *copy = NULL;
+ size_t di_size = 64, found = 0;
+ const fido_dev_info_t *entry;
+ fido_dev_info_t *di = NULL;
+ const char *path;
+ int r;
+
+ di = fido_dev_info_new(di_size);
+ if (!di)
+ return log_oom();
+
+ r = fido_dev_info_manifest(di, di_size, &found);
+ if (r == FIDO_ERR_INTERNAL || (r == FIDO_OK && found == 0)) {
+ /* The library returns FIDO_ERR_INTERNAL when no devices are found. I wish it wouldn't. */
+ r = log_error_errno(SYNTHETIC_ERRNO(ENODEV), "No FIDO2 devices found.");
+ goto finish;
+ }
+ if (r != FIDO_OK) {
+ r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to enumerate FIDO2 devices: %s", fido_strerr(r));
+ goto finish;
+ }
+ if (found > 1) {
+ r = log_error_errno(SYNTHETIC_ERRNO(ENOTUNIQ), "More than one FIDO2 device found.");
+ goto finish;
+ }
+
+ entry = fido_dev_info_ptr(di, 0);
+ if (!entry) {
+ r = log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to get device information for FIDO device 0.");
+ goto finish;
+ }
+
+ path = fido_dev_info_path(entry);
+ if (!path) {
+ r = log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to query FIDO device path.");
+ goto finish;
+ }
+
+ copy = strdup(path);
+ if (!copy) {
+ r = log_oom();
+ goto finish;
+ }
+
+ *ret = TAKE_PTR(copy);
+ r = 0;
+
+finish:
+ fido_dev_info_free(&di, di_size);
+ return r;
+#else
+ return log_error_errno(EOPNOTSUPP, "FIDO2 tokens not supported on this build.");
+#endif
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include "json.h"
+
+int identity_add_fido2_parameters(JsonVariant **v, const char *device);
+
+int list_fido2_devices(void);
+
+int find_fido2_auto(char **ret);
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include "errno-util.h"
+#include "format-table.h"
+#include "hexdecoct.h"
+#include "homectl-pkcs11.h"
+#include "libcrypt-util.h"
+#include "memory-util.h"
+#include "openssl-util.h"
+#include "pkcs11-util.h"
+#include "random-util.h"
+#include "strv.h"
+
+struct pkcs11_callback_data {
+ char *pin_used;
+ X509 *cert;
+};
+
+static void pkcs11_callback_data_release(struct pkcs11_callback_data *data) {
+ erase_and_free(data->pin_used);
+ X509_free(data->cert);
+}
+
+#if HAVE_P11KIT
+static int pkcs11_callback(
+ CK_FUNCTION_LIST *m,
+ CK_SESSION_HANDLE session,
+ CK_SLOT_ID slot_id,
+ const CK_SLOT_INFO *slot_info,
+ const CK_TOKEN_INFO *token_info,
+ P11KitUri *uri,
+ void *userdata) {
+
+ _cleanup_(erase_and_freep) char *pin_used = NULL;
+ struct pkcs11_callback_data *data = userdata;
+ CK_OBJECT_HANDLE object;
+ int r;
+
+ assert(m);
+ assert(slot_info);
+ assert(token_info);
+ assert(uri);
+ assert(data);
+
+ /* Called for every token matching our URI */
+
+ r = pkcs11_token_login(m, session, slot_id, token_info, "home directory operation", "user-home", "pkcs11-pin", UINT64_MAX, &pin_used);
+ if (r < 0)
+ return r;
+
+ r = pkcs11_token_find_x509_certificate(m, session, uri, &object);
+ if (r < 0)
+ return r;
+
+ r = pkcs11_token_read_x509_certificate(m, session, object, &data->cert);
+ if (r < 0)
+ return r;
+
+ /* Let's read some random data off the token and write it to the kernel pool before we generate our
+ * random key from it. This way we can claim the quality of the RNG is at least as good as the
+ * kernel's and the token's pool */
+ (void) pkcs11_token_acquire_rng(m, session);
+
+ data->pin_used = TAKE_PTR(pin_used);
+ return 1;
+}
+#endif
+
+static int acquire_pkcs11_certificate(
+ const char *uri,
+ X509 **ret_cert,
+ char **ret_pin_used) {
+
+#if HAVE_P11KIT
+ _cleanup_(pkcs11_callback_data_release) struct pkcs11_callback_data data = {};
+ int r;
+
+ r = pkcs11_find_token(uri, pkcs11_callback, &data);
+ if (r == -EAGAIN) /* pkcs11_find_token() doesn't log about this error, but all others */
+ return log_error_errno(ENXIO, "Specified PKCS#11 token with URI '%s' not found.", uri);
+ if (r < 0)
+ return r;
+
+ *ret_cert = TAKE_PTR(data.cert);
+ *ret_pin_used = TAKE_PTR(data.pin_used);
+
+ return 0;
+#else
+ return log_error_errno(EOPNOTSUPP, "PKCS#11 tokens not supported on this build.");
+#endif
+}
+
+static int encrypt_bytes(
+ EVP_PKEY *pkey,
+ const void *decrypted_key,
+ size_t decrypted_key_size,
+ void **ret_encrypt_key,
+ size_t *ret_encrypt_key_size) {
+
+ _cleanup_(EVP_PKEY_CTX_freep) EVP_PKEY_CTX *ctx = NULL;
+ _cleanup_free_ void *b = NULL;
+ size_t l;
+
+ ctx = EVP_PKEY_CTX_new(pkey, NULL);
+ if (!ctx)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to allocate public key context");
+
+ if (EVP_PKEY_encrypt_init(ctx) <= 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to initialize public key context");
+
+ if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to configure PKCS#1 padding");
+
+ if (EVP_PKEY_encrypt(ctx, NULL, &l, decrypted_key, decrypted_key_size) <= 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to determine encrypted key size");
+
+ b = malloc(l);
+ if (!b)
+ return log_oom();
+
+ if (EVP_PKEY_encrypt(ctx, b, &l, decrypted_key, decrypted_key_size) <= 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to determine encrypted key size");
+
+ *ret_encrypt_key = TAKE_PTR(b);
+ *ret_encrypt_key_size = l;
+
+ return 0;
+}
+
+static int add_pkcs11_encrypted_key(
+ JsonVariant **v,
+ const char *uri,
+ const void *encrypted_key, size_t encrypted_key_size,
+ const void *decrypted_key, size_t decrypted_key_size) {
+
+ _cleanup_(json_variant_unrefp) JsonVariant *l = NULL, *w = NULL, *e = NULL;
+ _cleanup_(erase_and_freep) char *base64_encoded = NULL;
+ _cleanup_free_ char *salt = NULL;
+ struct crypt_data cd = {};
+ char *k;
+ int r;
+
+ assert(v);
+ assert(uri);
+ assert(encrypted_key);
+ assert(encrypted_key_size > 0);
+ assert(decrypted_key);
+ assert(decrypted_key_size > 0);
+
+ r = make_salt(&salt);
+ if (r < 0)
+ return log_error_errno(r, "Failed to generate salt: %m");
+
+ /* Before using UNIX hashing on the supplied key we base64 encode it, since crypt_r() and friends
+ * expect a NUL terminated string, and we use a binary key */
+ r = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
+ if (r < 0)
+ return log_error_errno(r, "Failed to base64 encode secret key: %m");
+
+ errno = 0;
+ k = crypt_r(base64_encoded, salt, &cd);
+ if (!k)
+ return log_error_errno(errno_or_else(EINVAL), "Failed to UNIX hash secret key: %m");
+
+ r = json_build(&e, JSON_BUILD_OBJECT(
+ JSON_BUILD_PAIR("uri", JSON_BUILD_STRING(uri)),
+ JSON_BUILD_PAIR("data", JSON_BUILD_BASE64(encrypted_key, encrypted_key_size)),
+ JSON_BUILD_PAIR("hashedPassword", JSON_BUILD_STRING(k))));
+ if (r < 0)
+ return log_error_errno(r, "Failed to build encrypted JSON key object: %m");
+
+ w = json_variant_ref(json_variant_by_key(*v, "privileged"));
+ l = json_variant_ref(json_variant_by_key(w, "pkcs11EncryptedKey"));
+
+ r = json_variant_append_array(&l, e);
+ if (r < 0)
+ return log_error_errno(r, "Failed append PKCS#11 encrypted key: %m");
+
+ r = json_variant_set_field(&w, "pkcs11EncryptedKey", l);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set PKCS#11 encrypted key: %m");
+
+ r = json_variant_set_field(v, "privileged", w);
+ if (r < 0)
+ return log_error_errno(r, "Failed to update privileged field: %m");
+
+ return 0;
+}
+
+static int add_pkcs11_token_uri(JsonVariant **v, const char *uri) {
+ _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+ _cleanup_strv_free_ char **l = NULL;
+ int r;
+
+ assert(v);
+ assert(uri);
+
+ w = json_variant_ref(json_variant_by_key(*v, "pkcs11TokenUri"));
+ if (w) {
+ r = json_variant_strv(w, &l);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse PKCS#11 token list: %m");
+
+ if (strv_contains(l, uri))
+ return 0;
+ }
+
+ r = strv_extend(&l, uri);
+ if (r < 0)
+ return log_oom();
+
+ w = json_variant_unref(w);
+ r = json_variant_new_array_strv(&w, l);
+ if (r < 0)
+ return log_error_errno(r, "Failed to create PKCS#11 token URI JSON: %m");
+
+ r = json_variant_set_field(v, "pkcs11TokenUri", w);
+ if (r < 0)
+ return log_error_errno(r, "Failed to update PKCS#11 token URI list: %m");
+
+ return 0;
+}
+
+int identity_add_token_pin(JsonVariant **v, const char *pin) {
+ _cleanup_(json_variant_unrefp) JsonVariant *w = NULL, *l = NULL;
+ _cleanup_(strv_free_erasep) char **pins = NULL;
+ int r;
+
+ assert(v);
+
+ if (isempty(pin))
+ return 0;
+
+ w = json_variant_ref(json_variant_by_key(*v, "secret"));
+ l = json_variant_ref(json_variant_by_key(w, "tokenPin"));
+
+ r = json_variant_strv(l, &pins);
+ if (r < 0)
+ return log_error_errno(r, "Failed to convert PIN array: %m");
+
+ if (strv_find(pins, pin))
+ return 0;
+
+ r = strv_extend(&pins, pin);
+ if (r < 0)
+ return log_oom();
+
+ strv_uniq(pins);
+
+ l = json_variant_unref(l);
+
+ r = json_variant_new_array_strv(&l, pins);
+ if (r < 0)
+ return log_error_errno(r, "Failed to allocate new PIN array JSON: %m");
+
+ json_variant_sensitive(l);
+
+ r = json_variant_set_field(&w, "tokenPin", l);
+ if (r < 0)
+ return log_error_errno(r, "Failed to update PIN field: %m");
+
+ r = json_variant_set_field(v, "secret", w);
+ if (r < 0)
+ return log_error_errno(r, "Failed to update secret object: %m");
+
+ return 1;
+}
+
+int identity_add_pkcs11_key_data(JsonVariant **v, const char *uri) {
+ _cleanup_(erase_and_freep) void *decrypted_key = NULL, *encrypted_key = NULL;
+ _cleanup_(erase_and_freep) char *pin = NULL;
+ size_t decrypted_key_size, encrypted_key_size;
+ _cleanup_(X509_freep) X509 *cert = NULL;
+ EVP_PKEY *pkey;
+ RSA *rsa;
+ int bits;
+ int r;
+
+ assert(v);
+
+ r = acquire_pkcs11_certificate(uri, &cert, &pin);
+ if (r < 0)
+ return r;
+
+ pkey = X509_get0_pubkey(cert);
+ if (!pkey)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to extract public key from X.509 certificate.");
+
+ if (EVP_PKEY_base_id(pkey) != EVP_PKEY_RSA)
+ return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "X.509 certificate does not refer to RSA key.");
+
+ rsa = EVP_PKEY_get0_RSA(pkey);
+ if (!rsa)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to acquire RSA public key from X.509 certificate.");
+
+ bits = RSA_bits(rsa);
+ log_debug("Bits in RSA key: %i", bits);
+
+ /* We use PKCS#1 padding for the RSA cleartext, hence let's leave some extra space for it, hence only
+ * generate a random key half the size of the RSA length */
+ decrypted_key_size = bits / 8 / 2;
+
+ if (decrypted_key_size < 1)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Uh, RSA key size too short?");
+
+ log_debug("Generating %zu bytes random key.", decrypted_key_size);
+
+ decrypted_key = malloc(decrypted_key_size);
+ if (!decrypted_key)
+ return log_oom();
+
+ r = genuine_random_bytes(decrypted_key, decrypted_key_size, RANDOM_BLOCK);
+ if (r < 0)
+ return log_error_errno(r, "Failed to generate random key: %m");
+
+ r = encrypt_bytes(pkey, decrypted_key, decrypted_key_size, &encrypted_key, &encrypted_key_size);
+ if (r < 0)
+ return log_error_errno(r, "Failed to encrypt key: %m");
+
+ /* Add the token URI to the public part of the record. */
+ r = add_pkcs11_token_uri(v, uri);
+ if (r < 0)
+ return r;
+
+ /* Include the encrypted version of the random key we just generated in the privileged part of the record */
+ r = add_pkcs11_encrypted_key(
+ v,
+ uri,
+ encrypted_key, encrypted_key_size,
+ decrypted_key, decrypted_key_size);
+ if (r < 0)
+ return r;
+
+ /* If we acquired the PIN also include it in the secret section of the record, so that systemd-homed
+ * can use it if it needs to, given that it likely needs to decrypt the key again to pass to LUKS or
+ * fscrypt. */
+ r = identity_add_token_pin(v, pin);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+#if HAVE_P11KIT
+static int list_callback(
+ CK_FUNCTION_LIST *m,
+ CK_SESSION_HANDLE session,
+ CK_SLOT_ID slot_id,
+ const CK_SLOT_INFO *slot_info,
+ const CK_TOKEN_INFO *token_info,
+ P11KitUri *uri,
+ void *userdata) {
+
+ _cleanup_free_ char *token_uri_string = NULL, *token_label = NULL, *token_manufacturer_id = NULL, *token_model = NULL;
+ _cleanup_(p11_kit_uri_freep) P11KitUri *token_uri = NULL;
+ Table *t = userdata;
+ int uri_result, r;
+
+ assert(slot_info);
+ assert(token_info);
+
+ /* We only care about hardware devices here with a token inserted. Let's filter everything else
+ * out. (Note that the user can explicitly specify non-hardware tokens if they like, but during
+ * enumeration we'll filter those, since software tokens are typically the system certificate store
+ * and such, and it's typically not what people want to bind their home directories to.) */
+ if (!FLAGS_SET(token_info->flags, CKF_HW_SLOT|CKF_TOKEN_PRESENT))
+ return -EAGAIN;
+
+ token_label = pkcs11_token_label(token_info);
+ if (!token_label)
+ return log_oom();
+
+ token_manufacturer_id = pkcs11_token_manufacturer_id(token_info);
+ if (!token_manufacturer_id)
+ return log_oom();
+
+ token_model = pkcs11_token_model(token_info);
+ if (!token_model)
+ return log_oom();
+
+ token_uri = uri_from_token_info(token_info);
+ if (!token_uri)
+ return log_oom();
+
+ uri_result = p11_kit_uri_format(token_uri, P11_KIT_URI_FOR_ANY, &token_uri_string);
+ if (uri_result != P11_KIT_URI_OK)
+ return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN), "Failed to format slot URI: %s", p11_kit_uri_message(uri_result));
+
+ r = table_add_many(
+ t,
+ TABLE_STRING, token_uri_string,
+ TABLE_STRING, token_label,
+ TABLE_STRING, token_manufacturer_id,
+ TABLE_STRING, token_model);
+ if (r < 0)
+ return table_log_add_error(r);
+
+ return -EAGAIN; /* keep scanning */
+}
+#endif
+
+int list_pkcs11_tokens(void) {
+#if HAVE_P11KIT
+ _cleanup_(table_unrefp) Table *t = NULL;
+ int r;
+
+ t = table_new("uri", "label", "manufacturer", "model");
+ if (!t)
+ return log_oom();
+
+ r = pkcs11_find_token(NULL, list_callback, t);
+ if (r < 0 && r != -EAGAIN)
+ return r;
+
+ if (table_get_rows(t) <= 1) {
+ log_info("No suitable PKCS#11 tokens found.");
+ return 0;
+ }
+
+ r = table_print(t, stdout);
+ if (r < 0)
+ return log_error_errno(r, "Failed to show device table: %m");
+
+ return 0;
+#else
+ return log_error_errno(EOPNOTSUPP, "PKCS#11 tokens not supported on this build.");
+#endif
+}
+
+#if HAVE_P11KIT
+static int auto_callback(
+ CK_FUNCTION_LIST *m,
+ CK_SESSION_HANDLE session,
+ CK_SLOT_ID slot_id,
+ const CK_SLOT_INFO *slot_info,
+ const CK_TOKEN_INFO *token_info,
+ P11KitUri *uri,
+ void *userdata) {
+
+ _cleanup_(p11_kit_uri_freep) P11KitUri *token_uri = NULL;
+ char **t = userdata;
+ int uri_result;
+
+ assert(slot_info);
+ assert(token_info);
+
+ if (!FLAGS_SET(token_info->flags, CKF_HW_SLOT|CKF_TOKEN_PRESENT))
+ return -EAGAIN;
+
+ if (*t)
+ return log_error_errno(SYNTHETIC_ERRNO(ENOTUNIQ),
+ "More than one suitable PKCS#11 token found.");
+
+ token_uri = uri_from_token_info(token_info);
+ if (!token_uri)
+ return log_oom();
+
+ uri_result = p11_kit_uri_format(token_uri, P11_KIT_URI_FOR_ANY, t);
+ if (uri_result != P11_KIT_URI_OK)
+ return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN), "Failed to format slot URI: %s", p11_kit_uri_message(uri_result));
+
+ return 0;
+}
+#endif
+
+int find_pkcs11_token_auto(char **ret) {
+#if HAVE_P11KIT
+ int r;
+
+ r = pkcs11_find_token(NULL, auto_callback, ret);
+ if (r == -EAGAIN)
+ return log_error_errno(SYNTHETIC_ERRNO(ENODEV), "No suitable PKCS#11 tokens found.");
+ if (r < 0)
+ return r;
+
+ return 0;
+#else
+ return log_error_errno(EOPNOTSUPP, "PKCS#11 tokens not supported on this build.");
+#endif
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include "json.h"
+
+int identity_add_token_pin(JsonVariant **v, const char *pin);
+
+int identity_add_pkcs11_key_data(JsonVariant **v, const char *token_uri);
+
+int list_pkcs11_tokens(void);
+int find_pkcs11_token_auto(char **ret);
#include "sd-bus.h"
-#include "alloc-util.h"
#include "ask-password-api.h"
#include "bus-common-errors.h"
#include "bus-error.h"
-#include "bus-util.h"
+#include "bus-locator.h"
#include "cgroup-util.h"
#include "dns-domain.h"
#include "env-util.h"
#include "fd-util.h"
#include "fileio.h"
#include "format-table.h"
-#include "format-util.h"
-#include "fs-util.h"
-#include "hexdecoct.h"
#include "home-util.h"
-#include "libcrypt-util.h"
+#include "homectl-fido2.h"
+#include "homectl-pkcs11.h"
#include "locale-util.h"
#include "main-func.h"
#include "memory-util.h"
-#include "openssl-util.h"
#include "pager.h"
#include "parse-util.h"
#include "path-util.h"
#include "pretty-print.h"
#include "process-util.h"
#include "pwquality-util.h"
-#include "random-util.h"
#include "rlimit-util.h"
#include "spawn-polkit-agent.h"
#include "terminal-util.h"
static uint64_t arg_disk_size = UINT64_MAX;
static uint64_t arg_disk_size_relative = UINT64_MAX;
static char **arg_pkcs11_token_uri = NULL;
+static char **arg_fido2_device = NULL;
static bool arg_json = false;
static JsonFormatFlags arg_json_format_flags = 0;
static bool arg_and_resize = false;
STATIC_DESTRUCTOR_REGISTER(arg_identity_filter, strv_freep);
STATIC_DESTRUCTOR_REGISTER(arg_identity_filter_rlimits, strv_freep);
STATIC_DESTRUCTOR_REGISTER(arg_pkcs11_token_uri, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_fido2_device, strv_freep);
static bool identity_properties_specified(void) {
return
!json_variant_is_blank_object(arg_identity_extra_rlimits) ||
!strv_isempty(arg_identity_filter) ||
!strv_isempty(arg_identity_filter_rlimits) ||
- !strv_isempty(arg_pkcs11_token_uri);
+ !strv_isempty(arg_pkcs11_token_uri) ||
+ !strv_isempty(arg_fido2_device);
}
static int acquire_bus(sd_bus **bus) {
TABLE_UID, uid,
TABLE_GID, gid);
if (r < 0)
- return log_error_errno(r, "Failed to add row to table: %m");
+ return table_log_add_error(r);
r = table_add_cell(table, &cell, TABLE_STRING, state);
if (r < 0)
- return log_error_errno(r, "Failed to add field to table: %m");
+ return table_log_add_error(r);
color = user_record_state_color(state);
if (color)
TABLE_STRING, home,
TABLE_STRING, strna(empty_to_null(shell)));
if (r < 0)
- return log_error_errno(r, "Failed to add row to table: %m");
+ return table_log_add_error(r);
}
r = sd_bus_message_exit_container(reply);
if (table_get_rows(table) > 1 || arg_json) {
r = table_set_sort(table, (size_t) 0, (size_t) -1);
if (r < 0)
- return log_error_errno(r, "Failed to sort table: %m");
+ return table_log_sort_error(r);
table_set_header(table, arg_legend);
else
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
}
if (arg_legend && !arg_json) {
return 0;
}
-static int acquire_pkcs11_pin(const char *user_name, UserRecord *hr) {
+static int acquire_token_pin(const char *user_name, UserRecord *hr) {
_cleanup_(strv_free_erasep) char **pin = NULL;
_cleanup_free_ char *question = NULL;
char *e;
e = getenv("PIN");
if (e) {
- r = user_record_set_pkcs11_pin(hr, STRV_MAKE(e), false);
+ r = user_record_set_token_pin(hr, STRV_MAKE(e), false);
if (r < 0)
- return log_error_errno(r, "Failed to store PKCS#11 PIN: %m");
+ return log_error_errno(r, "Failed to store token PIN: %m");
string_erase(e);
return log_oom();
/* We never cache or use cached PINs, since usually there are only very few attempts allowed before the PIN is blocked */
- r = ask_password_auto(question, "user-home", NULL, "pkcs11-pin", USEC_INFINITY, 0, &pin);
+ r = ask_password_auto(question, "user-home", NULL, "token-pin", USEC_INFINITY, 0, &pin);
if (r < 0)
return log_error_errno(r, "Failed to acquire security token PIN: %m");
- r = user_record_set_pkcs11_pin(hr, pin, false);
+ r = user_record_set_token_pin(hr, pin, false);
if (r < 0)
return log_error_errno(r, "Failed to store security token PIN: %m");
} else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_PIN_NEEDED)) {
- r = acquire_pkcs11_pin(user_name, hr);
+ r = acquire_token_pin(user_name, hr);
if (r < 0)
return r;
} else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_PROTECTED_AUTHENTICATION_PATH_NEEDED)) {
- log_notice("Please authenticate physically on security token.");
+ log_notice("%s%sPlease authenticate physically on security token.",
+ emoji_enabled() ? special_glyph(SPECIAL_GLYPH_TOUCH) : "",
+ emoji_enabled() ? " " : "");
r = user_record_set_pkcs11_protected_authentication_path_permitted(hr, true);
if (r < 0)
return log_error_errno(r, "Failed to set PKCS#11 protected authentication path permitted flag: %m");
+ } else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_USER_PRESENCE_NEEDED)) {
+
+ log_notice("%s%sAuthentication requires presence verification on security token.",
+ emoji_enabled() ? special_glyph(SPECIAL_GLYPH_TOUCH) : "",
+ emoji_enabled() ? " " : "");
+
+ r = user_record_set_fido2_user_presence_permitted(hr, true);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set FIDO2 user presence permitted flag: %m");
+
} else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_PIN_LOCKED))
- return log_error_errno(SYNTHETIC_ERRNO(EPERM), "Security token PIN is locked, please unlock security token PIN first.");
+ return log_error_errno(SYNTHETIC_ERRNO(EPERM), "Security token PIN is locked, please unlock it first. (Hint: Removal and re-insertion might suffice.)");
else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_BAD_PIN)) {
log_notice("Security token PIN incorrect, please try again.");
- r = acquire_pkcs11_pin(user_name, hr);
+ r = acquire_token_pin(user_name, hr);
if (r < 0)
return r;
log_notice("Security token PIN incorrect, please try again (only a few tries left!).");
- r = acquire_pkcs11_pin(user_name, hr);
+ r = acquire_token_pin(user_name, hr);
if (r < 0)
return r;
log_notice("Security token PIN incorrect, please try again (only one try left!).");
- r = acquire_pkcs11_pin(user_name, hr);
+ r = acquire_token_pin(user_name, hr);
if (r < 0)
return r;
} else
return 1;
}
-struct pkcs11_callback_data {
- char *pin_used;
- X509 *cert;
-};
-
-static void pkcs11_callback_data_release(struct pkcs11_callback_data *data) {
- erase_and_free(data->pin_used);
- X509_free(data->cert);
-}
-
-#if HAVE_P11KIT
-static int pkcs11_callback(
- CK_FUNCTION_LIST *m,
- CK_SESSION_HANDLE session,
- CK_SLOT_ID slot_id,
- const CK_SLOT_INFO *slot_info,
- const CK_TOKEN_INFO *token_info,
- P11KitUri *uri,
- void *userdata) {
-
- _cleanup_(erase_and_freep) char *pin_used = NULL;
- struct pkcs11_callback_data *data = userdata;
- CK_OBJECT_HANDLE object;
- int r;
-
- assert(m);
- assert(slot_info);
- assert(token_info);
- assert(uri);
- assert(data);
-
- /* Called for every token matching our URI */
-
- r = pkcs11_token_login(m, session, slot_id, token_info, "home directory operation", "user-home", "pkcs11-pin", UINT64_MAX, &pin_used);
- if (r < 0)
- return r;
-
- r = pkcs11_token_find_x509_certificate(m, session, uri, &object);
- if (r < 0)
- return r;
-
- r = pkcs11_token_read_x509_certificate(m, session, object, &data->cert);
- if (r < 0)
- return r;
-
- /* Let's read some random data off the token and write it to the kernel pool before we generate our
- * random key from it. This way we can claim the quality of the RNG is at least as good as the
- * kernel's and the token's pool */
- (void) pkcs11_token_acquire_rng(m, session);
-
- data->pin_used = TAKE_PTR(pin_used);
- return 1;
-}
-#endif
-
-static int acquire_pkcs11_certificate(
- const char *uri,
- X509 **ret_cert,
- char **ret_pin_used) {
-
-#if HAVE_P11KIT
- _cleanup_(pkcs11_callback_data_release) struct pkcs11_callback_data data = {};
- int r;
-
- r = pkcs11_find_token(uri, pkcs11_callback, &data);
- if (r == -EAGAIN) /* pkcs11_find_token() doesn't log about this error, but all others */
- return log_error_errno(ENXIO, "Specified PKCS#11 token with URI '%s' not found.", uri);
- if (r < 0)
- return r;
-
- *ret_cert = TAKE_PTR(data.cert);
- *ret_pin_used = TAKE_PTR(data.pin_used);
-
- return 0;
-#else
- return log_error_errno(EOPNOTSUPP, "PKCS#11 tokens not supported on this build.");
-#endif
-}
-
-static int encrypt_bytes(
- EVP_PKEY *pkey,
- const void *decrypted_key,
- size_t decrypted_key_size,
- void **ret_encrypt_key,
- size_t *ret_encrypt_key_size) {
-
- _cleanup_(EVP_PKEY_CTX_freep) EVP_PKEY_CTX *ctx = NULL;
- _cleanup_free_ void *b = NULL;
- size_t l;
-
- ctx = EVP_PKEY_CTX_new(pkey, NULL);
- if (!ctx)
- return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to allocate public key context");
-
- if (EVP_PKEY_encrypt_init(ctx) <= 0)
- return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to initialize public key context");
-
- if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0)
- return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to configure PKCS#1 padding");
-
- if (EVP_PKEY_encrypt(ctx, NULL, &l, decrypted_key, decrypted_key_size) <= 0)
- return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to determine encrypted key size");
-
- b = malloc(l);
- if (!b)
- return log_oom();
-
- if (EVP_PKEY_encrypt(ctx, b, &l, decrypted_key, decrypted_key_size) <= 0)
- return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to determine encrypted key size");
-
- *ret_encrypt_key = TAKE_PTR(b);
- *ret_encrypt_key_size = l;
-
- return 0;
-}
-
-static int add_pkcs11_pin(JsonVariant **v, const char *pin) {
- _cleanup_(json_variant_unrefp) JsonVariant *w = NULL, *l = NULL;
- _cleanup_(strv_free_erasep) char **pins = NULL;
- int r;
-
- assert(v);
-
- if (isempty(pin))
- return 0;
-
- w = json_variant_ref(json_variant_by_key(*v, "secret"));
- l = json_variant_ref(json_variant_by_key(w, "pkcs11Pin"));
-
- r = json_variant_strv(l, &pins);
- if (r < 0)
- return log_error_errno(r, "Failed to convert PIN array: %m");
-
- if (strv_find(pins, pin))
- return 0;
-
- r = strv_extend(&pins, pin);
- if (r < 0)
- return log_oom();
-
- strv_uniq(pins);
-
- l = json_variant_unref(l);
-
- r = json_variant_new_array_strv(&l, pins);
- if (r < 0)
- return log_error_errno(r, "Failed to allocate new PIN array JSON: %m");
-
- json_variant_sensitive(l);
-
- r = json_variant_set_field(&w, "pkcs11Pin", l);
- if (r < 0)
- return log_error_errno(r, "Failed to update PIN field: %m");
-
- r = json_variant_set_field(v, "secret", w);
- if (r < 0)
- return log_error_errno(r, "Failed to update secret object: %m");
-
- return 1;
-}
-
-static int add_pkcs11_encrypted_key(
- JsonVariant **v,
- const char *uri,
- const void *encrypted_key, size_t encrypted_key_size,
- const void *decrypted_key, size_t decrypted_key_size) {
-
- _cleanup_(json_variant_unrefp) JsonVariant *l = NULL, *w = NULL, *e = NULL;
- _cleanup_(erase_and_freep) char *base64_encoded = NULL;
- _cleanup_free_ char *salt = NULL;
- struct crypt_data cd = {};
- char *k;
- int r;
-
- assert(v);
- assert(uri);
- assert(encrypted_key);
- assert(encrypted_key_size > 0);
- assert(decrypted_key);
- assert(decrypted_key_size > 0);
-
- r = make_salt(&salt);
- if (r < 0)
- return log_error_errno(r, "Failed to generate salt: %m");
-
- /* Before using UNIX hashing on the supplied key we base64 encode it, since crypt_r() and friends
- * expect a NUL terminated string, and we use a binary key */
- r = base64mem(decrypted_key, decrypted_key_size, &base64_encoded);
- if (r < 0)
- return log_error_errno(r, "Failed to base64 encode secret key: %m");
-
- errno = 0;
- k = crypt_r(base64_encoded, salt, &cd);
- if (!k)
- return log_error_errno(errno_or_else(EINVAL), "Failed to UNIX hash secret key: %m");
-
- r = json_build(&e, JSON_BUILD_OBJECT(
- JSON_BUILD_PAIR("uri", JSON_BUILD_STRING(uri)),
- JSON_BUILD_PAIR("data", JSON_BUILD_BASE64(encrypted_key, encrypted_key_size)),
- JSON_BUILD_PAIR("hashedPassword", JSON_BUILD_STRING(k))));
- if (r < 0)
- return log_error_errno(r, "Failed to build encrypted JSON key object: %m");
-
- w = json_variant_ref(json_variant_by_key(*v, "privileged"));
- l = json_variant_ref(json_variant_by_key(w, "pkcs11EncryptedKey"));
-
- r = json_variant_append_array(&l, e);
- if (r < 0)
- return log_error_errno(r, "Failed append PKCS#11 encrypted key: %m");
-
- r = json_variant_set_field(&w, "pkcs11EncryptedKey", l);
- if (r < 0)
- return log_error_errno(r, "Failed to set PKCS#11 encrypted key: %m");
-
- r = json_variant_set_field(v, "privileged", w);
- if (r < 0)
- return log_error_errno(r, "Failed to update privileged field: %m");
-
- return 0;
-}
-
-static int add_pkcs11_token_uri(JsonVariant **v, const char *uri) {
- _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
- _cleanup_strv_free_ char **l = NULL;
- int r;
-
- assert(v);
- assert(uri);
-
- w = json_variant_ref(json_variant_by_key(*v, "pkcs11TokenUri"));
- if (w) {
- r = json_variant_strv(w, &l);
- if (r < 0)
- return log_error_errno(r, "Failed to parse PKCS#11 token list: %m");
-
- if (strv_contains(l, uri))
- return 0;
- }
-
- r = strv_extend(&l, uri);
- if (r < 0)
- return log_oom();
-
- w = json_variant_unref(w);
- r = json_variant_new_array_strv(&w, l);
- if (r < 0)
- return log_error_errno(r, "Failed to create PKCS#11 token URI JSON: %m");
-
- r = json_variant_set_field(v, "pkcs11TokenUri", w);
- if (r < 0)
- return log_error_errno(r, "Failed to update PKCS#11 token URI list: %m");
-
- return 0;
-}
-
-static int add_pkcs11_key_data(JsonVariant **v, const char *uri) {
- _cleanup_(erase_and_freep) void *decrypted_key = NULL, *encrypted_key = NULL;
- _cleanup_(erase_and_freep) char *pin = NULL;
- size_t decrypted_key_size, encrypted_key_size;
- _cleanup_(X509_freep) X509 *cert = NULL;
- EVP_PKEY *pkey;
- RSA *rsa;
- int bits;
- int r;
-
- assert(v);
-
- r = acquire_pkcs11_certificate(uri, &cert, &pin);
- if (r < 0)
- return r;
-
- pkey = X509_get0_pubkey(cert);
- if (!pkey)
- return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to extract public key from X.509 certificate.");
-
- if (EVP_PKEY_base_id(pkey) != EVP_PKEY_RSA)
- return log_error_errno(SYNTHETIC_ERRNO(EBADMSG), "X.509 certificate does not refer to RSA key.");
-
- rsa = EVP_PKEY_get0_RSA(pkey);
- if (!rsa)
- return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to acquire RSA public key from X.509 certificate.");
-
- bits = RSA_bits(rsa);
- log_debug("Bits in RSA key: %i", bits);
-
- /* We use PKCS#1 padding for the RSA cleartext, hence let's leave some extra space for it, hence only
- * generate a random key half the size of the RSA length */
- decrypted_key_size = bits / 8 / 2;
-
- if (decrypted_key_size < 1)
- return log_error_errno(SYNTHETIC_ERRNO(EIO), "Uh, RSA key size too short?");
-
- log_debug("Generating %zu bytes random key.", decrypted_key_size);
-
- decrypted_key = malloc(decrypted_key_size);
- if (!decrypted_key)
- return log_oom();
-
- r = genuine_random_bytes(decrypted_key, decrypted_key_size, RANDOM_BLOCK);
- if (r < 0)
- return log_error_errno(r, "Failed to generate random key: %m");
-
- r = encrypt_bytes(pkey, decrypted_key, decrypted_key_size, &encrypted_key, &encrypted_key_size);
- if (r < 0)
- return log_error_errno(r, "Failed to encrypt key: %m");
-
- /* Add the token URI to the public part of the record. */
- r = add_pkcs11_token_uri(v, uri);
- if (r < 0)
- return r;
-
- /* Include the encrypted version of the random key we just generated in the privileged part of the record */
- r = add_pkcs11_encrypted_key(
- v,
- uri,
- encrypted_key, encrypted_key_size,
- decrypted_key, decrypted_key_size);
- if (r < 0)
- return r;
-
- /* If we acquired the PIN also include it in the secret section of the record, so that systemd-homed
- * can use it if it needs to, given that it likely needs to decrypt the key again to pass to LUKS or
- * fscrypt. */
- r = add_pkcs11_pin(v, pin);
- if (r < 0)
- return r;
-
- return 0;
-}
-
static int acquire_new_home_record(UserRecord **ret) {
_cleanup_(json_variant_unrefp) JsonVariant *v = NULL;
_cleanup_(user_record_unrefp) UserRecord *hr = NULL;
return r;
STRV_FOREACH(i, arg_pkcs11_token_uri) {
- r = add_pkcs11_key_data(&v, *i);
+ r = identity_add_pkcs11_key_data(&v, *i);
+ if (r < 0)
+ return r;
+ }
+
+ STRV_FOREACH(i, arg_fido2_device) {
+ r = identity_add_fido2_parameters(&v, *i);
if (r < 0)
return r;
}
if (r < 0)
return r;
- /* Remember the original hashed paswords before we add our own, so that we can return to them later,
+ /* Remember the original hashed passwords before we add our own, so that we can return to them later,
* should the entered password turn out not to be acceptable. */
original_hashed_passwords = strv_copy(hr->hashed_password);
if (!original_hashed_passwords)
r = json_variant_format(hr->json, 0, &formatted);
if (r < 0)
- return r;
+ return log_error_errno(r, "Failed to format user record: %m");
r = bus_message_new_method_call(bus, &m, bus_home_mgr, "CreateHome");
if (r < 0)
r = sd_bus_call(bus, m, HOME_SLOW_BUS_CALL_TIMEOUT_USEC, &error, NULL);
if (r < 0) {
- if (!sd_bus_error_has_name(&error, BUS_ERROR_LOW_PASSWORD_QUALITY))
- return log_error_errno(r, "Failed to create user home: %s", bus_error_message(&error, r));
-
- log_error_errno(r, "%s", bus_error_message(&error, r));
- log_info("(Use --enforce-password-policy=no to turn off password quality checks for this account.)");
- } else
- break; /* done */
+ if (sd_bus_error_has_name(&error, BUS_ERROR_LOW_PASSWORD_QUALITY)) {
+ log_error_errno(r, "%s", bus_error_message(&error, r));
+ log_info("(Use --enforce-password-policy=no to turn off password quality checks for this account.)");
- r = user_record_set_hashed_password(hr, original_hashed_passwords);
- if (r < 0)
- return r;
+ r = user_record_set_hashed_password(hr, original_hashed_passwords);
+ if (r < 0)
+ return r;
- r = acquire_new_password(hr->user_name, hr, /* suggest = */ false);
- if (r < 0)
- return r;
+ r = acquire_new_password(hr->user_name, hr, /* suggest = */ false);
+ if (r < 0)
+ return r;
- r = user_record_make_hashed_password(hr, hr->password, /* extend = */ true);
- if (r < 0)
- return log_error_errno(r, "Failed to hash passwords: %m");
+ r = user_record_make_hashed_password(hr, hr->password, /* extend = */ true);
+ if (r < 0)
+ return log_error_errno(r, "Failed to hash passwords: %m");
+ } else {
+ r = handle_generic_user_record_error(hr->user_name, hr, &error, r, false);
+ if (r < 0)
+ return r;
+ }
+ } else
+ break; /* done */
}
return 0;
return r;
STRV_FOREACH(i, arg_pkcs11_token_uri) {
- r = add_pkcs11_key_data(&json, *i);
+ r = identity_add_pkcs11_key_data(&json, *i);
+ if (r < 0)
+ return r;
+ }
+
+ STRV_FOREACH(i, arg_fido2_device) {
+ r = identity_add_fido2_parameters(&json, *i);
if (r < 0)
return r;
}
/* If the user supplied a full record, then add in lastChange, but do not override. Otherwise always
* override. */
- r = update_last_change(&json, !!arg_pkcs11_token_uri, !arg_identity);
+ r = update_last_change(&json, arg_pkcs11_token_uri || arg_fido2_device, !arg_identity);
if (r < 0)
return r;
return 0;
}
+static int home_record_reset_human_interaction_permission(UserRecord *hr) {
+ int r;
+
+ assert(hr);
+
+ /* When we execute multiple operations one after the other, let's reset the permission to ask the
+ * user each time, so that if interaction is necessary we will be told so again and thus can print a
+ * nice message to the user, telling the user so. */
+
+ r = user_record_set_pkcs11_protected_authentication_path_permitted(hr, -1);
+ if (r < 0)
+ return log_error_errno(r, "Failed to reset PKCS#11 protected authentication path permission flag: %m");
+
+ r = user_record_set_fido2_user_presence_permitted(hr, -1);
+ if (r < 0)
+ return log_error_errno(r, "Failed to reset FIDO2 user presence permission flag: %m");
+
+ return 0;
+}
+
static int update_home(int argc, char *argv[], void *userdata) {
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
_cleanup_(user_record_unrefp) UserRecord *hr = NULL;
if (r < 0)
return r;
+ /* If we do multiple operations, let's output things more verbosely, since otherwise the repeated
+ * authentication might be confusing. */
+
+ if (arg_and_resize || arg_and_change_password)
+ log_info("Updating home directory.");
+
for (;;) {
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
r = json_variant_format(hr->json, 0, &formatted);
if (r < 0)
- return r;
+ return log_error_errno(r, "Failed to format user record: %m");
(void) sd_bus_message_sensitive(m);
break;
}
+ if (arg_and_resize)
+ log_info("Resizing home.");
+
+ (void) home_record_reset_human_interaction_permission(hr);
+
/* Also sync down disk size to underlying LUKS/fscrypt/quota */
while (arg_and_resize) {
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
- log_debug("Resizing");
-
r = bus_message_new_method_call(bus, &m, bus_home_mgr, "ResizeHome");
if (r < 0)
return bus_log_create_error(r);
break;
}
+ if (arg_and_change_password)
+ log_info("Synchronizing passwords and encryption keys.");
+
+ (void) home_record_reset_human_interaction_permission(hr);
+
/* Also sync down passwords to underlying LUKS/fscrypt */
while (arg_and_change_password) {
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
- log_debug("Propagating password");
-
r = bus_message_new_method_call(bus, &m, bus_home_mgr, "ChangePasswordHome");
if (r < 0)
return bus_log_create_error(r);
if (arg_pkcs11_token_uri)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "To change the PKCS#11 security token use 'homectl update --pkcs11-token-uri=…'.");
+ if (arg_fido2_device)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "To change the FIDO2 security token use 'homectl update --fido2-device=…'.");
if (identity_properties_specified())
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "The 'passwd' verb does not permit changing other record properties at the same time.");
" Specify SSH public keys\n"
" --pkcs11-token-uri=URI URI to PKCS#11 security token containing\n"
" private key and matching X.509 certificate\n"
+ " --fido2-device=PATH Path to FIDO2 hidraw device with hmac-secret\n"
+ " extension\n"
"\n%4$sAccount Management User Record Properties:%5$s\n"
" --locked=BOOL Set locked account state\n"
" --not-before=TIMESTAMP Do not allow logins before\n"
ARG_EXPORT_FORMAT,
ARG_AUTO_LOGIN,
ARG_PKCS11_TOKEN_URI,
+ ARG_FIDO2_DEVICE,
ARG_AND_RESIZE,
ARG_AND_CHANGE_PASSWORD,
};
{ "json", required_argument, NULL, ARG_JSON },
{ "export-format", required_argument, NULL, ARG_EXPORT_FORMAT },
{ "pkcs11-token-uri", required_argument, NULL, ARG_PKCS11_TOKEN_URI },
+ { "fido2-device", required_argument, NULL, ARG_FIDO2_DEVICE },
{ "and-resize", required_argument, NULL, ARG_AND_RESIZE },
{ "and-change-password", required_argument, NULL, ARG_AND_CHANGE_PASSWORD },
{}
case ARG_PKCS11_TOKEN_URI: {
const char *p;
+ if (streq(optarg, "list"))
+ return list_pkcs11_tokens();
+
/* If --pkcs11-token-uri= is specified we always drop everything old */
FOREACH_STRING(p, "pkcs11TokenUri", "pkcs11EncryptedKey") {
r = drop_from_identity(p);
break;
}
- if (!pkcs11_uri_valid(optarg))
- return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Not a valid PKCS#11 URI: %s", optarg);
+ if (streq(optarg, "auto")) {
+ _cleanup_free_ char *found = NULL;
+
+ r = find_pkcs11_token_auto(&found);
+ if (r < 0)
+ return r;
+ r = strv_consume(&arg_pkcs11_token_uri, TAKE_PTR(found));
+ } else {
+ if (!pkcs11_uri_valid(optarg))
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Not a valid PKCS#11 URI: %s", optarg);
- r = strv_extend(&arg_pkcs11_token_uri, optarg);
+ r = strv_extend(&arg_pkcs11_token_uri, optarg);
+ }
if (r < 0)
return r;
break;
}
+ case ARG_FIDO2_DEVICE: {
+ const char *p;
+
+ if (streq(optarg, "list"))
+ return list_fido2_devices();
+
+ FOREACH_STRING(p, "fido2HmacCredential", "fido2HmacSalt") {
+ r = drop_from_identity(p);
+ if (r < 0)
+ return r;
+ }
+
+ if (isempty(optarg)) {
+ arg_fido2_device = strv_free(arg_fido2_device);
+ break;
+ }
+
+ if (streq(optarg, "auto")) {
+ _cleanup_free_ char *found = NULL;
+
+ r = find_fido2_auto(&found);
+ if (r < 0)
+ return r;
+
+ r = strv_consume(&arg_fido2_device, TAKE_PTR(found));
+ } else
+ r = strv_extend(&arg_fido2_device, optarg);
+
+ if (r < 0)
+ return r;
+
+ strv_uniq(arg_fido2_device);
+ break;
+ }
+
case 'j':
arg_json = true;
arg_json_format_flags = JSON_FORMAT_PRETTY_AUTO|JSON_FORMAT_COLOR_AUTO;
}
}
- if (!strv_isempty(arg_pkcs11_token_uri))
+ if (!strv_isempty(arg_pkcs11_token_uri) || !strv_isempty(arg_fido2_device))
arg_and_change_password = true;
if (arg_disk_size != UINT64_MAX || arg_disk_size_relative != UINT64_MAX)
int r;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
#include "sd-bus.h"
-#include "bus-util.h"
+#include "bus-object.h"
#include "homed-home.h"
int bus_home_client_is_trusted(Home *h, sd_bus_message *message);
return sd_bus_error_setf(error, BUS_ERROR_TOKEN_PIN_NEEDED, "PIN for security token required.");
case -ERFKILL:
return sd_bus_error_setf(error, BUS_ERROR_TOKEN_PROTECTED_AUTHENTICATION_PATH_NEEDED, "Security token requires protected authentication path.");
+ case -EMEDIUMTYPE:
+ return sd_bus_error_setf(error, BUS_ERROR_TOKEN_USER_PRESENCE_NEEDED, "Security token requires user presence.");
+ case -ENOSTR:
+ return sd_bus_error_setf(error, BUS_ERROR_TOKEN_ACTION_TIMEOUT, "Token action timeout. (User was supposed to verify presence or similar, by interacting with the token, and didn't do that in time.)");
case -EOWNERDEAD:
return sd_bus_error_setf(error, BUS_ERROR_TOKEN_PIN_LOCKED, "PIN of security token locked.");
case -ENOLCK:
return 0;
}
-static int home_update_internal(Home *h, const char *verb, UserRecord *hr, UserRecord *secret, sd_bus_error *error) {
+static int home_update_internal(
+ Home *h,
+ const char *verb,
+ UserRecord *hr,
+ UserRecord *secret,
+ sd_bus_error *error) {
+
_cleanup_(user_record_unrefp) UserRecord *new_hr = NULL, *saved_secret = NULL, *signed_hr = NULL;
int r, c;
#include "signal-util.h"
static int run(int argc, char *argv[]) {
- _cleanup_(notify_on_cleanup) const char *notify_stop = NULL;
_cleanup_(manager_freep) Manager *m = NULL;
+ _cleanup_(notify_on_cleanup) const char *notify_stop = NULL;
int r;
log_setup_service();
int home_activate_cifs(
UserRecord *h,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
UserRecord **ret_home) {
_cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
if (r < 0)
return r;
- r = home_refresh(h, &setup, NULL, pkcs11_decrypted_passwords, NULL, &new_home);
+ r = home_refresh(h, &setup, NULL, cache, NULL, &new_home);
if (r < 0)
return r;
int home_prepare_cifs(UserRecord *h, bool already_activated, HomeSetup *setup);
-int home_activate_cifs(UserRecord *h, char ***pkcs11_decrypted_passwords, UserRecord **ret_home);
+int home_activate_cifs(UserRecord *h, PasswordCache *cache, UserRecord **ret_home);
int home_create_cifs(UserRecord *h, UserRecord **ret_home);
int home_activate_directory(
UserRecord *h,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
UserRecord **ret_home) {
_cleanup_(user_record_unrefp) UserRecord *new_home = NULL, *header_home = NULL;
assert_se(hdo = user_record_home_directory(h));
hd = strdupa(hdo);
- r = home_prepare(h, false, pkcs11_decrypted_passwords, &setup, &header_home);
+ r = home_prepare(h, false, cache, &setup, &header_home);
if (r < 0)
return r;
- r = home_refresh(h, &setup, header_home, pkcs11_decrypted_passwords, NULL, &new_home);
+ r = home_refresh(h, &setup, header_home, cache, NULL, &new_home);
if (r < 0)
return r;
int home_resize_directory(
UserRecord *h,
bool already_activated,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
HomeSetup *setup,
UserRecord **ret_home) {
assert(ret_home);
assert(IN_SET(user_record_storage(h), USER_DIRECTORY, USER_SUBVOLUME, USER_FSCRYPT));
- r = home_prepare(h, already_activated, pkcs11_decrypted_passwords, setup, NULL);
+ r = home_prepare(h, already_activated, cache, setup, NULL);
if (r < 0)
return r;
- r = home_load_embedded_identity(h, setup->root_fd, NULL, USER_RECONCILE_REQUIRE_NEWER_OR_EQUAL, pkcs11_decrypted_passwords, &embedded_home, &new_home);
+ r = home_load_embedded_identity(h, setup->root_fd, NULL, USER_RECONCILE_REQUIRE_NEWER_OR_EQUAL, cache, &embedded_home, &new_home);
if (r < 0)
return r;
#include "user-record.h"
int home_prepare_directory(UserRecord *h, bool already_activated, HomeSetup *setup);
-int home_activate_directory(UserRecord *h, char ***pkcs11_decrypted_passwords, UserRecord **ret_home);
+int home_activate_directory(UserRecord *h, PasswordCache *cache, UserRecord **ret_home);
int home_create_directory_or_subvolume(UserRecord *h, UserRecord **ret_home);
-int home_resize_directory(UserRecord *h, bool already_activated, char ***pkcs11_decrypted_passwords, HomeSetup *setup, UserRecord **ret_home);
+int home_resize_directory(UserRecord *h, bool already_activated, PasswordCache *cache, HomeSetup *setup, UserRecord **ret_home);
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include <fido.h>
+
+#include "hexdecoct.h"
+#include "homework-fido2.h"
+#include "strv.h"
+
+static int fido2_use_specific_token(
+ const char *path,
+ UserRecord *h,
+ UserRecord *secret,
+ const Fido2HmacSalt *salt,
+ char **ret) {
+
+ _cleanup_(fido_cbor_info_free) fido_cbor_info_t *di = NULL;
+ _cleanup_(fido_assert_free) fido_assert_t *a = NULL;
+ _cleanup_(fido_dev_free) fido_dev_t *d = NULL;
+ bool found_extension = false;
+ size_t n, hmac_size;
+ const void *hmac;
+ char **e;
+ int r;
+
+ d = fido_dev_new();
+ if (!d)
+ return log_oom();
+
+ r = fido_dev_open(d, path);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to open FIDO2 device %s: %s", path, fido_strerr(r));
+
+ if (!fido_dev_is_fido2(d))
+ return log_error_errno(SYNTHETIC_ERRNO(ENODEV),
+ "Specified device %s is not a FIDO2 device.", path);
+
+ di = fido_cbor_info_new();
+ if (!di)
+ return log_oom();
+
+ r = fido_dev_get_cbor_info(d, di);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to get CBOR device info for %s: %s", path, fido_strerr(r));
+
+ e = fido_cbor_info_extensions_ptr(di);
+ n = fido_cbor_info_extensions_len(di);
+
+ for (size_t i = 0; i < n; i++)
+ if (streq(e[i], "hmac-secret")) {
+ found_extension = true;
+ break;
+ }
+
+ if (!found_extension)
+ return log_error_errno(SYNTHETIC_ERRNO(ENODEV),
+ "Specified device %s is a FIDO2 device, but does not support the required HMAC-SECRET extension.", path);
+
+ a = fido_assert_new();
+ if (!a)
+ return log_oom();
+
+ r = fido_assert_set_extensions(a, FIDO_EXT_HMAC_SECRET);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to enable HMAC-SECRET extension on FIDO2 assertion: %s", fido_strerr(r));
+
+ r = fido_assert_set_hmac_salt(a, salt->salt, salt->salt_size);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set salt on FIDO2 assertion: %s", fido_strerr(r));
+
+ r = fido_assert_set_rp(a, "io.systemd.home");
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set FIDO2 assertion ID: %s", fido_strerr(r));
+
+ r = fido_assert_set_clientdata_hash(a, (const unsigned char[32]) {}, 32);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set FIDO2 assertion client data hash: %s", fido_strerr(r));
+
+ r = fido_assert_allow_cred(a, salt->credential.id, salt->credential.size);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to add FIDO2 assertion credential ID: %s", fido_strerr(r));
+
+ r = fido_assert_set_up(a, h->fido2_user_presence_permitted <= 0 ? FIDO_OPT_FALSE : FIDO_OPT_TRUE);
+ if (r != FIDO_OK)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to set FIDO2 assertion user presence: %s", fido_strerr(r));
+
+ log_info("Asking FIDO2 token for authentication.");
+
+ r = fido_dev_get_assert(d, a, NULL); /* try without pin first */
+ if (r == FIDO_ERR_PIN_REQUIRED) {
+ char **i;
+
+ /* OK, we needed a pin, try with all pins in turn */
+ STRV_FOREACH(i, secret->token_pin) {
+ r = fido_dev_get_assert(d, a, *i);
+ if (r != FIDO_ERR_PIN_INVALID)
+ break;
+ }
+ }
+
+ switch (r) {
+ case FIDO_OK:
+ break;
+ case FIDO_ERR_NO_CREDENTIALS:
+ return log_error_errno(SYNTHETIC_ERRNO(EBADSLT),
+ "Wrong security token; needed credentials not present on token.");
+ case FIDO_ERR_PIN_REQUIRED:
+ return log_error_errno(SYNTHETIC_ERRNO(ENOANO),
+ "Security token requires PIN.");
+ case FIDO_ERR_PIN_AUTH_BLOCKED:
+ return log_error_errno(SYNTHETIC_ERRNO(EOWNERDEAD),
+ "PIN of security token is blocked, please remove/reinsert token.");
+ case FIDO_ERR_PIN_INVALID:
+ return log_error_errno(SYNTHETIC_ERRNO(ENOLCK),
+ "PIN of security token incorrect.");
+ case FIDO_ERR_UP_REQUIRED:
+ return log_error_errno(SYNTHETIC_ERRNO(EMEDIUMTYPE),
+ "User presence required.");
+ case FIDO_ERR_ACTION_TIMEOUT:
+ return log_error_errno(SYNTHETIC_ERRNO(ENOSTR),
+ "Token action timeout. (User didn't interact with token quickly enough.)");
+ default:
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to ask token for assertion: %s", fido_strerr(r));
+ }
+
+ hmac = fido_assert_hmac_secret_ptr(a, 0);
+ if (!hmac)
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to retrieve HMAC secret.");
+
+ hmac_size = fido_assert_hmac_secret_len(a, 0);
+
+ r = base64mem(hmac, hmac_size, ret);
+ if (r < 0)
+ return log_error_errno(r, "Failed to base64 encode HMAC secret: %m");
+
+ return 0;
+}
+
+int fido2_use_token(UserRecord *h, UserRecord *secret, const Fido2HmacSalt *salt, char **ret) {
+ size_t allocated = 64, found = 0;
+ fido_dev_info_t *di = NULL;
+ int r;
+
+ di = fido_dev_info_new(allocated);
+ if (!di)
+ return log_oom();
+
+ r = fido_dev_info_manifest(di, allocated, &found);
+ if (r == FIDO_ERR_INTERNAL) {
+ /* The library returns FIDO_ERR_INTERNAL when no devices are found. I wish it wouldn't. */
+ r = log_debug_errno(SYNTHETIC_ERRNO(EAGAIN), "Got FIDO_ERR_INTERNAL, assuming no devices.");
+ goto finish;
+ }
+ if (r != FIDO_OK) {
+ r = log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to enumerate FIDO2 devices: %s", fido_strerr(r));
+ goto finish;
+ }
+
+ for (size_t i = 0; i < found; i++) {
+ const fido_dev_info_t *entry;
+ const char *path;
+
+ entry = fido_dev_info_ptr(di, i);
+ if (!entry) {
+ r = log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to get device information for FIDO device %zu.", i);
+ goto finish;
+ }
+
+ path = fido_dev_info_path(entry);
+ if (!path) {
+ r = log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to query FIDO device path.");
+ goto finish;
+ }
+
+ r = fido2_use_specific_token(path, h, secret, salt, ret);
+ if (!IN_SET(r,
+ -EBADSLT, /* device doesn't understand our credential hash */
+ -ENODEV /* device is not a FIDO2 device with HMAC-SECRET */))
+ goto finish;
+ }
+
+ r = -EAGAIN;
+
+finish:
+ fido_dev_info_free(&di, allocated);
+ return r;
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include "user-record.h"
+
+int fido2_use_token(UserRecord *h, UserRecord *secret, const Fido2HmacSalt *salt, char **ret);
}
static int fscrypt_setup(
- char **pkcs11_decrypted_passwords,
+ const PasswordCache *cache,
char **password,
HomeSetup *setup,
void **ret_volume_key,
_cleanup_free_ char *value = NULL;
size_t salt_size, encrypted_size;
const char *nr, *e;
+ char **list;
int n;
/* Check if this xattr has the format 'trusted.fscrypt_slot<nr>' where '<nr>' is a 32bit unsigned integer */
if (r < 0)
return log_error_errno(r, "Failed to decode encrypted key of %s: %m", xa);
- r = fscrypt_slot_try_many(
- pkcs11_decrypted_passwords,
- salt, salt_size,
- encrypted, encrypted_size,
- setup->fscrypt_key_descriptor,
- ret_volume_key, ret_volume_key_size);
- if (r == -ENOANO)
+ r = -ENOANO;
+ FOREACH_POINTER(list, cache->pkcs11_passwords, cache->fido2_passwords, password) {
r = fscrypt_slot_try_many(
- password,
+ list,
salt, salt_size,
encrypted, encrypted_size,
setup->fscrypt_key_descriptor,
ret_volume_key, ret_volume_key_size);
+ if (r != -ENOANO)
+ break;
+ }
if (r < 0) {
if (r != -ENOANO)
return r;
int home_prepare_fscrypt(
UserRecord *h,
bool already_activated,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
HomeSetup *setup) {
_cleanup_(erase_and_freep) void *volume_key = NULL;
memcpy(setup->fscrypt_key_descriptor, policy.master_key_descriptor, FS_KEY_DESCRIPTOR_SIZE);
r = fscrypt_setup(
- pkcs11_decrypted_passwords ? *pkcs11_decrypted_passwords : NULL,
+ cache,
h->password,
setup,
&volume_key,
int home_passwd_fscrypt(
UserRecord *h,
HomeSetup *setup,
- char **pkcs11_decrypted_passwords, /* the passwords acquired via PKCS#11 security tokens */
+ PasswordCache *cache, /* the passwords acquired via PKCS#11/FIDO2 security tokens */
char **effective_passwords /* new passwords */) {
_cleanup_(erase_and_freep) void *volume_key = NULL;
assert(setup);
r = fscrypt_setup(
- pkcs11_decrypted_passwords,
+ cache,
h->password,
setup,
&volume_key,
#include "homework.h"
#include "user-record.h"
-int home_prepare_fscrypt(UserRecord *h, bool already_activated, char ***pkcs11_decrypted_passwords, HomeSetup *setup);
+int home_prepare_fscrypt(UserRecord *h, bool already_activated, PasswordCache *cache, HomeSetup *setup);
int home_create_fscrypt(UserRecord *h, char **effective_passwords, UserRecord **ret_home);
-int home_passwd_fscrypt(UserRecord *h, HomeSetup *setup, char **pkcs11_decrypted_passwords, char **effective_passwords);
+int home_passwd_fscrypt(UserRecord *h, HomeSetup *setup, PasswordCache *cache, char **effective_passwords);
const char *cipher_mode,
uint64_t volume_key_size,
char **passwords,
- char **pkcs11_decrypted_passwords,
+ const PasswordCache *cache,
bool discard,
struct crypt_device **ret,
sd_id128_t *ret_found_uuid,
_cleanup_(erase_and_freep) void *vk = NULL;
sd_id128_t p;
size_t vks;
+ char **list;
int r;
assert(node);
if (!vk)
return log_oom();
- r = luks_try_passwords(cd, pkcs11_decrypted_passwords, vk, &vks);
- if (r == -ENOKEY) {
- r = luks_try_passwords(cd, passwords, vk, &vks);
- if (r == -ENOKEY)
- return log_error_errno(r, "No valid password for LUKS superblock.");
+ r = -ENOKEY;
+ FOREACH_POINTER(list, cache->pkcs11_passwords, cache->fido2_passwords, passwords) {
+ r = luks_try_passwords(cd, list, vk, &vks);
+ if (r != -ENOKEY)
+ break;
}
+ if (r == -ENOKEY)
+ return log_error_errno(r, "No valid password for LUKS superblock.");
if (r < 0)
return log_error_errno(r, "Failed to unlocks LUKS superblock: %m");
static int luks_open(
const char *dm_name,
char **passwords,
- char **pkcs11_decrypted_passwords,
+ PasswordCache *cache,
struct crypt_device **ret,
sd_id128_t *ret_found_uuid,
void **ret_volume_key,
_cleanup_(crypt_freep) struct crypt_device *cd = NULL;
_cleanup_(erase_and_freep) void *vk = NULL;
sd_id128_t p;
+ char **list;
size_t vks;
int r;
if (!vk)
return log_oom();
- r = luks_try_passwords(cd, pkcs11_decrypted_passwords, vk, &vks);
- if (r == -ENOKEY) {
- r = luks_try_passwords(cd, passwords, vk, &vks);
- if (r == -ENOKEY)
- return log_error_errno(r, "No valid password for LUKS superblock.");
+ r = -ENOKEY;
+ FOREACH_POINTER(list, cache->pkcs11_passwords, cache->fido2_passwords, passwords) {
+ r = luks_try_passwords(cd, list, vk, &vks);
+ if (r != -ENOKEY)
+ break;
}
+ if (r == -ENOKEY)
+ return log_error_errno(r, "No valid password for LUKS superblock.");
if (r < 0)
return log_error_errno(r, "Failed to unlocks LUKS superblock: %m");
struct crypt_device *cd,
UserRecord *h,
const void *volume_key,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
UserRecord **ret_luks_home_record) {
int r, token;
if (!user_record_compatible(h, lhr))
return log_error_errno(SYNTHETIC_ERRNO(EREMCHG), "LUKS home record not compatible with host record, refusing.");
- r = user_record_authenticate(lhr, h, pkcs11_decrypted_passwords, /* strict_verify= */ true);
+ r = user_record_authenticate(lhr, h, cache, /* strict_verify= */ true);
if (r < 0)
return r;
assert(r > 0); /* Insist that a password was verified */
UserRecord *h,
bool already_activated,
const char *force_image_path,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
HomeSetup *setup,
UserRecord **ret_luks_home) {
r = luks_open(setup->dm_name,
h->password,
- pkcs11_decrypted_passwords ? *pkcs11_decrypted_passwords : NULL,
+ cache,
&cd,
&found_luks_uuid,
&volume_key,
if (r < 0)
return r;
- r = luks_validate_home_record(cd, h, volume_key, pkcs11_decrypted_passwords, &luks_home);
+ r = luks_validate_home_record(cd, h, volume_key, cache, &luks_home);
if (r < 0)
return r;
h->luks_cipher_mode,
h->luks_volume_key_size,
h->password,
- pkcs11_decrypted_passwords ? *pkcs11_decrypted_passwords : NULL,
+ cache,
user_record_luks_discard(h) || user_record_luks_offline_discard(h),
&cd,
&found_luks_uuid,
dm_activated = true;
- r = luks_validate_home_record(cd, h, volume_key, pkcs11_decrypted_passwords, &luks_home);
+ r = luks_validate_home_record(cd, h, volume_key, cache, &luks_home);
if (r < 0)
goto fail;
int home_activate_luks(
UserRecord *h,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
UserRecord **ret_home) {
_cleanup_(user_record_unrefp) UserRecord *new_home = NULL, *luks_home_record = NULL;
h,
false,
NULL,
- pkcs11_decrypted_passwords,
+ cache,
&setup,
&luks_home_record);
if (r < 0)
h,
&setup,
luks_home_record,
- pkcs11_decrypted_passwords,
+ cache,
&sfs,
&new_home);
if (r < 0)
const char *dm_name,
sd_id128_t uuid,
const char *label,
- char **pkcs11_decrypted_passwords,
+ const PasswordCache *cache,
char **effective_passwords,
bool discard,
UserRecord *hr,
STRV_FOREACH(pp, effective_passwords) {
- if (strv_contains(pkcs11_decrypted_passwords, *pp)) {
+ if (strv_contains(cache->pkcs11_passwords, *pp) ||
+ strv_contains(cache->fido2_passwords, *pp)) {
log_debug("Using minimal PBKDF for slot %i", slot);
r = crypt_set_pbkdf_type(cd, &minimal_pbkdf);
} else {
int home_create_luks(
UserRecord *h,
- char **pkcs11_decrypted_passwords,
+ PasswordCache *cache,
char **effective_passwords,
UserRecord **ret_home) {
dm_name,
luks_uuid,
user_record_user_name_and_realm(h),
- pkcs11_decrypted_passwords,
+ cache,
effective_passwords,
user_record_luks_discard(h) || user_record_luks_offline_discard(h),
h,
int home_resize_luks(
UserRecord *h,
bool already_activated,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
HomeSetup *setup,
UserRecord **ret_home) {
}
}
- r = home_prepare_luks(h, already_activated, whole_disk, pkcs11_decrypted_passwords, setup, &header_home);
+ r = home_prepare_luks(h, already_activated, whole_disk, cache, setup, &header_home);
if (r < 0)
return r;
- r = home_load_embedded_identity(h, setup->root_fd, header_home, USER_RECONCILE_REQUIRE_NEWER_OR_EQUAL, pkcs11_decrypted_passwords, &embedded_home, &new_home);
+ r = home_load_embedded_identity(h, setup->root_fd, header_home, USER_RECONCILE_REQUIRE_NEWER_OR_EQUAL, cache, &embedded_home, &new_home);
if (r < 0)
return r;
int home_passwd_luks(
UserRecord *h,
HomeSetup *setup,
- char **pkcs11_decrypted_passwords, /* the passwords acquired via PKCS#11 security tokens */
- char **effective_passwords /* new passwords */) {
+ 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;
_cleanup_(erase_and_freep) void *volume_key = NULL;
struct crypt_pbkdf_type good_pbkdf, minimal_pbkdf;
const char *type;
+ char **list;
int r;
assert(h);
if (!volume_key)
return log_oom();
- r = luks_try_passwords(setup->crypt_device, pkcs11_decrypted_passwords, volume_key, &volume_key_size);
- if (r == -ENOKEY) {
- r = luks_try_passwords(setup->crypt_device, h->password, volume_key, &volume_key_size);
- if (r == -ENOKEY)
- return log_error_errno(SYNTHETIC_ERRNO(ENOKEY), "Failed to unlock LUKS superblock with supplied passwords.");
+ r = -ENOKEY;
+ FOREACH_POINTER(list, cache->pkcs11_passwords, cache->fido2_passwords, h->password) {
+ r = luks_try_passwords(setup->crypt_device, list, volume_key, &volume_key_size);
+ if (r != -ENOKEY)
+ break;
}
+ if (r == -ENOKEY)
+ return log_error_errno(SYNTHETIC_ERRNO(ENOKEY), "Failed to unlock LUKS superblock with supplied passwords.");
if (r < 0)
return log_error_errno(r, "Failed to unlocks LUKS superblock: %m");
continue;
}
- if (strv_find(pkcs11_decrypted_passwords, effective_passwords[i])) {
+ if (strv_contains(cache->pkcs11_passwords, effective_passwords[i]) ||
+ strv_contains(cache->fido2_passwords, effective_passwords[i])) {
log_debug("Using minimal PBKDF for slot %zu", i);
r = crypt_set_pbkdf_type(setup->crypt_device, &minimal_pbkdf);
} else {
return -ENOKEY;
}
-int home_unlock_luks(UserRecord *h, char ***pkcs11_decrypted_passwords) {
+int home_unlock_luks(UserRecord *h, PasswordCache *cache) {
_cleanup_free_ char *dm_name = NULL, *dm_node = NULL;
_cleanup_(crypt_freep) struct crypt_device *cd = NULL;
+ char **list;
int r;
assert(h);
log_info("Discovered used LUKS device %s.", dm_node);
crypt_set_log_callback(cd, cryptsetup_log_glue, NULL);
- r = luks_try_resume(cd, dm_name, pkcs11_decrypted_passwords ? *pkcs11_decrypted_passwords : NULL);
- if (r == -ENOKEY) {
- r = luks_try_resume(cd, dm_name, h->password);
- if (r == -ENOKEY)
- return log_error_errno(r, "No valid password for LUKS superblock.");
+ r = -ENOKEY;
+ FOREACH_POINTER(list, cache->pkcs11_passwords, cache->fido2_passwords, h->password) {
+ r = luks_try_resume(cd, dm_name, list);
+ if (r != -ENOKEY)
+ break;
}
+ if (r == -ENOKEY)
+ return log_error_errno(r, "No valid password for LUKS superblock.");
if (r < 0)
return log_error_errno(r, "Failed to resume LUKS superblock: %m");
#include "homework.h"
#include "user-record.h"
-int home_prepare_luks(UserRecord *h, bool already_activated, const char *force_image_path, char ***pkcs11_decrypted_passwords, HomeSetup *setup, UserRecord **ret_luks_home);
+int home_prepare_luks(UserRecord *h, bool already_activated, const char *force_image_path, PasswordCache *cache, HomeSetup *setup, UserRecord **ret_luks_home);
-int home_activate_luks(UserRecord *h, char ***pkcs11_decrypted_passwords, UserRecord **ret_home);
+int home_activate_luks(UserRecord *h, PasswordCache *cache, UserRecord **ret_home);
int home_deactivate_luks(UserRecord *h);
int home_trim_luks(UserRecord *h);
int home_store_header_identity_luks(UserRecord *h, HomeSetup *setup, UserRecord *old_home);
-int home_create_luks(UserRecord *h, char **pkcs11_decrypted_passwords, char **effective_passwords, UserRecord **ret_home);
+int home_create_luks(UserRecord *h, PasswordCache *cache, char **effective_passwords, UserRecord **ret_home);
int home_validate_update_luks(UserRecord *h, HomeSetup *setup);
-int home_resize_luks(UserRecord *h, bool already_activated, char ***pkcs11_decrypted_passwords, HomeSetup *setup, UserRecord **ret_home);
+int home_resize_luks(UserRecord *h, bool already_activated, PasswordCache *cache, HomeSetup *setup, UserRecord **ret_home);
-int home_passwd_luks(UserRecord *h, HomeSetup *setup, char **pkcs11_decrypted_passwords, char **effective_passwords);
+int home_passwd_luks(UserRecord *h, HomeSetup *setup, PasswordCache *cache, char **effective_passwords);
int home_lock_luks(UserRecord *h);
-int home_unlock_luks(UserRecord *h, char ***pkcs11_decrypted_passwords);
+int home_unlock_luks(UserRecord *h, PasswordCache *cache);
static inline uint64_t luks_volume_key_size_convert(struct crypt_device *cd) {
int k;
goto decrypt;
}
- if (strv_isempty(data->secret->pkcs11_pin))
- return log_error_errno(SYNTHETIC_ERRNO(ENOANO), "Security Token requires PIN.");
+ if (strv_isempty(data->secret->token_pin))
+ return log_error_errno(SYNTHETIC_ERRNO(ENOANO), "Security token requires PIN.");
- STRV_FOREACH(i, data->secret->pkcs11_pin) {
+ STRV_FOREACH(i, data->secret->token_pin) {
rv = m->C_Login(session, CKU_USER, (CK_UTF8CHAR*) *i, strlen(*i));
if (rv == CKR_OK) {
log_info("Successfully logged into security token '%s' with PIN.", token_label);
#include "home-util.h"
#include "homework-cifs.h"
#include "homework-directory.h"
+#include "homework-fido2.h"
#include "homework-fscrypt.h"
#include "homework-luks.h"
#include "homework-mount.h"
#include "missing_magic.h"
#include "mount-util.h"
#include "path-util.h"
-#include "pkcs11-util.h"
#include "rm-rf.h"
#include "stat-util.h"
#include "strv.h"
/* Make sure a bad password always results in a 3s delay, no matter what */
#define BAD_PASSWORD_DELAY_USEC (3 * USEC_PER_SEC)
+void password_cache_free(PasswordCache *cache) {
+ if (!cache)
+ return;
+
+ cache->pkcs11_passwords = strv_free_erase(cache->pkcs11_passwords);
+ cache->fido2_passwords = strv_free_erase(cache->fido2_passwords);
+}
+
int user_record_authenticate(
UserRecord *h,
UserRecord *secret,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
bool strict_verify) {
- bool need_password = false, need_token = false, need_pin = false, need_protected_authentication_path_permitted = false,
- pin_locked = false, pin_incorrect = false, pin_incorrect_few_tries_left = false, pin_incorrect_one_try_left = false;
+ bool need_password = false, need_token = false, need_pin = false, need_protected_authentication_path_permitted = false, need_user_presence_permitted = false,
+ pin_locked = false, pin_incorrect = false, pin_incorrect_few_tries_left = false, pin_incorrect_one_try_left = false, token_action_timeout = false;
int r;
assert(h);
/* Tries to authenticate a user record with the supplied secrets. i.e. checks whether at least one
* supplied plaintext passwords matches a hashed password field of the user record. Or if a
- * configured PKCS#11 token is around and can unlock the record.
+ * configured PKCS#11 or FIDO2 token is around and can unlock the record.
*
- * Note that the pkcs11_decrypted_passwords parameter is both an input and and output parameter: it
- * is a list of configured, decrypted PKCS#11 passwords. We typically have to call this function
- * multiple times over the course of an operation (think: on login we authenticate the host user
- * record, the record embedded in the LUKS record and the one embedded in $HOME). Hence we keep a
- * list of passwords we already decrypted, so that we don't have to do the (slow an potentially
- * interactive) PKCS#11 dance for the relevant token again and again. */
+ * Note that the 'cache' parameter is both an input and output parameter: it contains lists of
+ * configured, decrypted PKCS#11/FIDO2 passwords. We typically have to call this function multiple
+ * times over the course of an operation (think: on login we authenticate the host user record, the
+ * record embedded in the LUKS record and the one embedded in $HOME). Hence we keep a list of
+ * passwords we already decrypted, so that we don't have to do the (slow and potentially interactive)
+ * PKCS#11/FIDO2 dance for the relevant token again and again. */
/* First, let's see if the supplied plain-text passwords work? */
r = user_record_test_secret(h, secret);
return 1;
}
- /* Second, let's see if any of the PKCS#11 security tokens are plugged in and help us */
+ /* Second, test cached PKCS#11 passwords */
for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) {
-#if HAVE_P11KIT
- _cleanup_(pkcs11_callback_data_release) struct pkcs11_callback_data data = {
- .user_record = h,
- .secret = secret,
- .encrypted_key = h->pkcs11_encrypted_key + n,
- };
char **pp;
- /* See if any of the previously calculated passwords work */
- STRV_FOREACH(pp, *pkcs11_decrypted_passwords) {
- r = test_password_one(data.encrypted_key->hashed_password, *pp);
+ STRV_FOREACH(pp, cache->pkcs11_passwords) {
+ r = test_password_one(h->pkcs11_encrypted_key[n].hashed_password, *pp);
if (r < 0)
return log_error_errno(r, "Failed to check supplied PKCS#11 password: %m");
if (r > 0) {
return 1;
}
}
+ }
+
+ /* Third, test cached FIDO2 passwords */
+ for (size_t n = 0; n < h->n_fido2_hmac_salt; n++) {
+ char **pp;
+
+ /* See if any of the previously calculated passwords work */
+ STRV_FOREACH(pp, cache->fido2_passwords) {
+ r = test_password_one(h->fido2_hmac_salt[n].hashed_password, *pp);
+ if (r < 0)
+ return log_error_errno(r, "Failed to check supplied FIDO2 password: %m");
+ if (r > 0) {
+ log_info("Previously acquired FIDO2 password unlocks user record.");
+ return 0;
+ }
+ }
+ }
+
+ /* Fourth, let's see if any of the PKCS#11 security tokens are plugged in and help us */
+ for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) {
+#if HAVE_P11KIT
+ _cleanup_(pkcs11_callback_data_release) struct pkcs11_callback_data data = {
+ .user_record = h,
+ .secret = secret,
+ .encrypted_key = h->pkcs11_encrypted_key + n,
+ };
r = pkcs11_find_token(data.encrypted_key->uri, pkcs11_callback, &data);
switch (r) {
log_info("Decrypted password from PKCS#11 security token %s unlocks user record.", data.encrypted_key->uri);
- r = strv_extend(pkcs11_decrypted_passwords, data.decrypted_password);
+ r = strv_extend(&cache->pkcs11_passwords, data.decrypted_password);
+ if (r < 0)
+ return log_oom();
+
+ return 0;
+ }
+#else
+ need_token = true;
+ break;
+#endif
+ }
+
+ /* Fifth, let's see if any of the FIDO2 security tokens are plugged in and help us */
+ for (size_t n = 0; n < h->n_fido2_hmac_salt; n++) {
+#if HAVE_LIBFIDO2
+ _cleanup_(erase_and_freep) char *decrypted_password = NULL;
+
+ r = fido2_use_token(h, secret, h->fido2_hmac_salt + n, &decrypted_password);
+ switch (r) {
+ case -EAGAIN:
+ need_token = true;
+ break;
+ case -ENOANO:
+ need_pin = true;
+ break;
+ case -EOWNERDEAD:
+ pin_locked = true;
+ break;
+ case -ENOLCK:
+ pin_incorrect = true;
+ break;
+ case -EMEDIUMTYPE:
+ need_user_presence_permitted = true;
+ break;
+ case -ENOSTR:
+ token_action_timeout = true;
+ break;
+ default:
+ if (r < 0)
+ return r;
+
+ r = test_password_one(h->fido2_hmac_salt[n].hashed_password, decrypted_password);
+ if (r < 0)
+ return log_error_errno(r, "Failed to test FIDO2 password: %m");
+ if (r == 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EPERM), "Configured FIDO2 security token does not decrypt encrypted key correctly.");
+
+ log_info("Decrypted password from FIDO2 security token unlocks user record.");
+
+ r = strv_extend(&cache->fido2_passwords, decrypted_password);
if (r < 0)
return log_oom();
return -ENOLCK;
if (pin_locked)
return -EOWNERDEAD;
+ if (token_action_timeout)
+ return -ENOSTR;
if (need_protected_authentication_path_permitted)
return -ERFKILL;
+ if (need_user_presence_permitted)
+ return -EMEDIUMTYPE;
if (need_pin)
return -ENOANO;
if (need_token)
if (need_password)
return -ENOKEY;
- /* Hmm, this means neither PCKS#11 nor classic hashed passwords were supplied, we cannot authenticate this reasonably */
+ /* Hmm, this means neither PCKS#11/FIDO2 nor classic hashed passwords were supplied, we cannot
+ * authenticate this reasonably */
if (strict_verify)
return log_debug_errno(SYNTHETIC_ERRNO(EKEYREVOKED),
- "No hashed passwords and no PKCS#11 tokens defined, cannot authenticate user record, refusing.");
+ "No hashed passwords and no PKCS#11/FIDO2 tokens defined, cannot authenticate user record, refusing.");
/* If strict verification is off this means we are possibly in the case where we encountered an
* unfixated record, i.e. a synthetic one that accordingly lacks any authentication data. In this
int home_prepare(
UserRecord *h,
bool already_activated,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
HomeSetup *setup,
UserRecord **ret_header_home) {
switch (user_record_storage(h)) {
case USER_LUKS:
- return home_prepare_luks(h, already_activated, NULL, pkcs11_decrypted_passwords, setup, ret_header_home);
+ return home_prepare_luks(h, already_activated, NULL, cache, setup, ret_header_home);
case USER_SUBVOLUME:
case USER_DIRECTORY:
break;
case USER_FSCRYPT:
- r = home_prepare_fscrypt(h, already_activated, pkcs11_decrypted_passwords, setup);
+ r = home_prepare_fscrypt(h, already_activated, cache, setup);
break;
case USER_CIFS:
int root_fd,
UserRecord *header_home,
UserReconcileMode mode,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
UserRecord **ret_embedded_home,
UserRecord **ret_new_home) {
return log_error_errno(SYNTHETIC_ERRNO(EREMCHG), "Embedded home record not compatible with host record, refusing.");
/* Insist that credentials the user supplies also unlocks any embedded records. */
- r = user_record_authenticate(embedded_home, h, pkcs11_decrypted_passwords, /* strict_verify= */ true);
+ r = user_record_authenticate(embedded_home, h, cache, /* strict_verify= */ true);
if (r < 0)
return r;
assert(r > 0); /* Insist that a password was verified */
UserRecord *h,
HomeSetup *setup,
UserRecord *header_home,
- char ***pkcs11_decrypted_passwords,
+ PasswordCache *cache,
struct statfs *ret_statfs,
UserRecord **ret_new_home) {
/* When activating a home directory, does the identity work: loads the identity from the $HOME
* directory, reconciles it with our idea, chown()s everything. */
- r = home_load_embedded_identity(h, setup->root_fd, header_home, USER_RECONCILE_ANY, pkcs11_decrypted_passwords, &embedded_home, &new_home);
+ r = home_load_embedded_identity(h, setup->root_fd, header_home, USER_RECONCILE_ANY, cache, &embedded_home, &new_home);
if (r < 0)
return r;
}
static int home_activate(UserRecord *h, UserRecord **ret_home) {
- _cleanup_(strv_free_erasep) char **pkcs11_decrypted_passwords = NULL;
+ _cleanup_(password_cache_free) PasswordCache cache = {};
_cleanup_(user_record_unrefp) UserRecord *new_home = NULL;
int r;
if (!IN_SET(user_record_storage(h), USER_LUKS, USER_DIRECTORY, USER_SUBVOLUME, USER_FSCRYPT, USER_CIFS))
return log_error_errno(SYNTHETIC_ERRNO(ENOTTY), "Activating home directories of type '%s' currently not supported.", user_storage_to_string(user_record_storage(h)));
- r = user_record_authenticate(h, h, &pkcs11_decrypted_passwords, /* strict_verify= */ false);
+ r = user_record_authenticate(h, h, &cache, /* strict_verify= */ false);
if (r < 0)
return r;
switch (user_record_storage(h)) {
case USER_LUKS:
- r = home_activate_luks(h, &pkcs11_decrypted_passwords, &new_home);
+ r = home_activate_luks(h, &cache, &new_home);
if (r < 0)
return r;
case USER_SUBVOLUME:
case USER_DIRECTORY:
case USER_FSCRYPT:
- r = home_activate_directory(h, &pkcs11_decrypted_passwords, &new_home);
+ r = home_activate_directory(h, &cache, &new_home);
if (r < 0)
return r;
break;
case USER_CIFS:
- r = home_activate_cifs(h, &pkcs11_decrypted_passwords, &new_home);
+ r = home_activate_cifs(h, &cache, &new_home);
if (r < 0)
return r;
static int user_record_compile_effective_passwords(
UserRecord *h,
- char ***ret_effective_passwords,
- char ***ret_pkcs11_decrypted_passwords) {
+ PasswordCache *cache,
+ char ***ret_effective_passwords) {
- _cleanup_(strv_free_erasep) char **effective = NULL, **pkcs11_passwords = NULL;
+ _cleanup_(strv_free_erasep) char **effective = NULL;
size_t n;
char **i;
int r;
assert(h);
+ assert(cache);
/* We insist on at least one classic hashed password to be defined in addition to any PKCS#11 one, as
* a safe fallback, but also to simplify the password changing algorithm: there we require providing
return log_oom();
}
- if (ret_pkcs11_decrypted_passwords) {
- r = strv_extend(&pkcs11_passwords, data.decrypted_password);
+ r = strv_extend(&cache->pkcs11_passwords, data.decrypted_password);
+ if (r < 0)
+ return log_oom();
+#else
+ return -EBADSLT;
+#endif
+ }
+
+ for (n = 0; n < h->n_fido2_hmac_salt; n++) {
+#if HAVE_LIBFIDO2
+ _cleanup_(erase_and_freep) char *decrypted_password = NULL;
+
+ r = fido2_use_token(h, h, h->fido2_hmac_salt + n, &decrypted_password);
+ if (r < 0)
+ return r;
+
+ r = test_password_one(h->fido2_hmac_salt[n].hashed_password, decrypted_password);
+ if (r < 0)
+ return log_error_errno(r, "Failed to test FIDO2 password: %m");
+ if (r == 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EPERM), "Decrypted password from token is not correct, refusing.");
+
+ if (ret_effective_passwords) {
+ r = strv_extend(&effective, decrypted_password);
if (r < 0)
return log_oom();
}
+
+ r = strv_extend(&cache->fido2_passwords, decrypted_password);
+ if (r < 0)
+ return log_oom();
#else
return -EBADSLT;
#endif
if (ret_effective_passwords)
*ret_effective_passwords = TAKE_PTR(effective);
- if (ret_pkcs11_decrypted_passwords)
- *ret_pkcs11_decrypted_passwords = TAKE_PTR(pkcs11_passwords);
return 0;
}
}
static int home_create(UserRecord *h, UserRecord **ret_home) {
- _cleanup_(strv_free_erasep) char **effective_passwords = NULL, **pkcs11_decrypted_passwords = NULL;
+ _cleanup_(strv_free_erasep) char **effective_passwords = NULL;
_cleanup_(user_record_unrefp) UserRecord *new_home = NULL;
+ _cleanup_(password_cache_free) PasswordCache cache = {};
UserStorage new_storage = _USER_STORAGE_INVALID;
const char *new_fs = NULL;
int r;
if (!uid_is_valid(h->uid))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "User record lacks UID, refusing.");
- r = user_record_compile_effective_passwords(h, &effective_passwords, &pkcs11_decrypted_passwords);
+ r = user_record_compile_effective_passwords(h, &cache, &effective_passwords);
if (r < 0)
return r;
switch (user_record_storage(h)) {
case USER_LUKS:
- r = home_create_luks(h, pkcs11_decrypted_passwords, effective_passwords, &new_home);
+ r = home_create_luks(h, &cache, effective_passwords, &new_home);
break;
case USER_DIRECTORY:
static int home_update(UserRecord *h, UserRecord **ret) {
_cleanup_(user_record_unrefp) UserRecord *new_home = NULL, *header_home = NULL, *embedded_home = NULL;
- _cleanup_(strv_free_erasep) char **pkcs11_decrypted_passwords = NULL;
_cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
+ _cleanup_(password_cache_free) PasswordCache cache = {};
bool already_activated = false;
int r;
assert(h);
assert(ret);
- r = user_record_authenticate(h, h, &pkcs11_decrypted_passwords, /* strict_verify= */ true);
+ r = user_record_authenticate(h, h, &cache, /* strict_verify= */ true);
if (r < 0)
return r;
assert(r > 0); /* Insist that a password was verified */
already_activated = r > 0;
- r = home_prepare(h, already_activated, &pkcs11_decrypted_passwords, &setup, &header_home);
+ r = home_prepare(h, already_activated, &cache, &setup, &header_home);
if (r < 0)
return r;
- r = home_load_embedded_identity(h, setup.root_fd, header_home, USER_RECONCILE_REQUIRE_NEWER, &pkcs11_decrypted_passwords, &embedded_home, &new_home);
+ r = home_load_embedded_identity(h, setup.root_fd, header_home, USER_RECONCILE_REQUIRE_NEWER, &cache, &embedded_home, &new_home);
if (r < 0)
return r;
static int home_resize(UserRecord *h, UserRecord **ret) {
_cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
- _cleanup_(strv_free_erasep) char **pkcs11_decrypted_passwords = NULL;
+ _cleanup_(password_cache_free) PasswordCache cache = {};
bool already_activated = false;
int r;
if (h->disk_size == UINT64_MAX)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "No target size specified, refusing.");
- r = user_record_authenticate(h, h, &pkcs11_decrypted_passwords, /* strict_verify= */ true);
+ r = user_record_authenticate(h, h, &cache, /* strict_verify= */ true);
if (r < 0)
return r;
assert(r > 0); /* Insist that a password was verified */
switch (user_record_storage(h)) {
case USER_LUKS:
- return home_resize_luks(h, already_activated, &pkcs11_decrypted_passwords, &setup, ret);
+ return home_resize_luks(h, already_activated, &cache, &setup, ret);
case USER_DIRECTORY:
case USER_SUBVOLUME:
case USER_FSCRYPT:
- return home_resize_directory(h, already_activated, &pkcs11_decrypted_passwords, &setup, ret);
+ return home_resize_directory(h, already_activated, &cache, &setup, ret);
default:
return log_error_errno(SYNTHETIC_ERRNO(ENOTTY), "Resizing home directories of type '%s' currently not supported.", user_storage_to_string(user_record_storage(h)));
static int home_passwd(UserRecord *h, UserRecord **ret_home) {
_cleanup_(user_record_unrefp) UserRecord *header_home = NULL, *embedded_home = NULL, *new_home = NULL;
- _cleanup_(strv_free_erasep) char **effective_passwords = NULL, **pkcs11_decrypted_passwords = NULL;
+ _cleanup_(strv_free_erasep) char **effective_passwords = NULL;
_cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
+ _cleanup_(password_cache_free) PasswordCache cache = {};
bool already_activated = false;
int r;
if (!IN_SET(user_record_storage(h), USER_LUKS, USER_DIRECTORY, USER_SUBVOLUME, USER_FSCRYPT))
return log_error_errno(SYNTHETIC_ERRNO(ENOTTY), "Changing password of home directories of type '%s' currently not supported.", user_storage_to_string(user_record_storage(h)));
- r = user_record_compile_effective_passwords(h, &effective_passwords, &pkcs11_decrypted_passwords);
+ r = user_record_compile_effective_passwords(h, &cache, &effective_passwords);
if (r < 0)
return r;
already_activated = r > 0;
- r = home_prepare(h, already_activated, &pkcs11_decrypted_passwords, &setup, &header_home);
+ r = home_prepare(h, already_activated, &cache, &setup, &header_home);
if (r < 0)
return r;
- r = home_load_embedded_identity(h, setup.root_fd, header_home, USER_RECONCILE_REQUIRE_NEWER_OR_EQUAL, &pkcs11_decrypted_passwords, &embedded_home, &new_home);
+ r = home_load_embedded_identity(h, setup.root_fd, header_home, USER_RECONCILE_REQUIRE_NEWER_OR_EQUAL, &cache, &embedded_home, &new_home);
if (r < 0)
return r;
switch (user_record_storage(h)) {
case USER_LUKS:
- r = home_passwd_luks(h, &setup, pkcs11_decrypted_passwords, effective_passwords);
+ r = home_passwd_luks(h, &setup, &cache, effective_passwords);
if (r < 0)
return r;
break;
case USER_FSCRYPT:
- r = home_passwd_fscrypt(h, &setup, pkcs11_decrypted_passwords, effective_passwords);
+ r = home_passwd_fscrypt(h, &setup, &cache, effective_passwords);
if (r < 0)
return r;
break;
static int home_inspect(UserRecord *h, UserRecord **ret_home) {
_cleanup_(user_record_unrefp) UserRecord *header_home = NULL, *new_home = NULL;
_cleanup_(home_setup_undo) HomeSetup setup = HOME_SETUP_INIT;
- _cleanup_(strv_free_erasep) char **pkcs11_decrypted_passwords = NULL;
+ _cleanup_(password_cache_free) PasswordCache cache = {};
bool already_activated = false;
int r;
assert(h);
assert(ret_home);
- r = user_record_authenticate(h, h, &pkcs11_decrypted_passwords, /* strict_verify= */ false);
+ r = user_record_authenticate(h, h, &cache, /* strict_verify= */ false);
if (r < 0)
return r;
already_activated = r > 0;
- r = home_prepare(h, already_activated, &pkcs11_decrypted_passwords, &setup, &header_home);
+ r = home_prepare(h, already_activated, &cache, &setup, &header_home);
if (r < 0)
return r;
- r = home_load_embedded_identity(h, setup.root_fd, header_home, USER_RECONCILE_ANY, &pkcs11_decrypted_passwords, NULL, &new_home);
+ r = home_load_embedded_identity(h, setup.root_fd, header_home, USER_RECONCILE_ANY, &cache, NULL, &new_home);
if (r < 0)
return r;
}
static int home_unlock(UserRecord *h) {
- _cleanup_(strv_free_erasep) char **pkcs11_decrypted_passwords = NULL;
+ _cleanup_(password_cache_free) PasswordCache cache = {};
int r;
assert(h);
/* Note that we don't check if $HOME is actually mounted, since we want to avoid disk accesses on
* that mount until we have resumed the device. */
- r = user_record_authenticate(h, h, &pkcs11_decrypted_passwords, /* strict_verify= */ false);
+ r = user_record_authenticate(h, h, &cache, /* strict_verify= */ false);
if (r < 0)
return r;
- r = home_unlock_luks(h, &pkcs11_decrypted_passwords);
+ r = home_unlock_luks(h, &cache);
if (r < 0)
return r;
* ESOCKTNOSUPPORT → operation not support on this file system
* ENOKEY → password incorrect (or not sufficient, or not supplied)
* EBADSLT → similar, but PKCS#11 device is defined and might be able to provide password, if it was plugged in which it is not
- * ENOANO → suitable PKCS#11 device found, but PIN is missing to unlock it
+ * ENOANO → suitable PKCS#11/FIDO2 device found, but PIN is missing to unlock it
* ERFKILL → suitable PKCS#11 device found, but OK to ask for on-device interactive authentication not given
- * EOWNERDEAD → suitable PKCS#11 device found, but its PIN is locked
- * ENOLCK → suitable PKCS#11 device found, but PIN incorrect
+ * EMEDIUMTYPE → suitable FIDO2 device found, but OK to ask for user presence not given
+ * ENOSTR → suitable FIDO2 device found, but user didn't react to action request on token quickly enough
+ * EOWNERDEAD → suitable PKCS#11/FIDO2 device found, but its PIN is locked
+ * ENOLCK → suitable PKCS#11/FIDO2 device found, but PIN incorrect
* ETOOMANYREFS → suitable PKCS#11 device found, but PIN incorrect, and only few tries left
* EUCLEAN → suitable PKCS#11 device found, but PIN incorrect, and only one try left
* EBUSY → file system is currently active
uint64_t partition_size;
} HomeSetup;
+typedef struct PasswordCache {
+ /* Decoding passwords from security tokens is expensive and typically requires user interaction, hence cache any we already figured out. */
+ char **pkcs11_passwords;
+ char **fido2_passwords;
+} PasswordCache;
+
+void password_cache_free(PasswordCache *cache);
+
#define HOME_SETUP_INIT \
{ \
.root_fd = -1, \
int home_setup_undo(HomeSetup *setup);
-int home_prepare(UserRecord *h, bool already_activated, char ***pkcs11_decrypted_passwords, HomeSetup *setup, UserRecord **ret_header_home);
+int home_prepare(UserRecord *h, bool already_activated, PasswordCache *cache, HomeSetup *setup, UserRecord **ret_header_home);
-int home_refresh(UserRecord *h, HomeSetup *setup, UserRecord *header_home, char ***pkcs11_decrypted_passwords, struct statfs *ret_statfs, UserRecord **ret_new_home);
+int home_refresh(UserRecord *h, HomeSetup *setup, UserRecord *header_home, PasswordCache *cache, struct statfs *ret_statfs, UserRecord **ret_new_home);
int home_populate(UserRecord *h, int dir_fd);
-int home_load_embedded_identity(UserRecord *h, int root_fd, UserRecord *header_home, UserReconcileMode mode, char ***pkcs11_decrypted_passwords, UserRecord **ret_embedded_home, UserRecord **ret_new_home);
+int home_load_embedded_identity(UserRecord *h, int root_fd, UserRecord *header_home, UserReconcileMode mode, PasswordCache *cache, UserRecord **ret_embedded_home, UserRecord **ret_new_home);
int home_store_embedded_identity(UserRecord *h, int root_fd, uid_t uid, UserRecord *old_home);
int home_extend_embedded_identity(UserRecord *h, UserRecord *used, HomeSetup *setup);
-int user_record_authenticate(UserRecord *h, UserRecord *secret, char ***pkcs11_decrypted_passwords, bool strict_verify);
+int user_record_authenticate(UserRecord *h, UserRecord *secret, PasswordCache *cache, bool strict_verify);
int home_sync_and_statfs(int root_fd, struct statfs *ret);
homework-mount.c
homework-mount.h
homework-pkcs11.h
+ homework-fido2.h
homework-quota.c
homework-quota.h
homework.c
if conf.get('HAVE_P11KIT') == 1
systemd_homework_sources += files('homework-pkcs11.c')
endif
+if conf.get('HAVE_LIBFIDO2') == 1
+ systemd_homework_sources += files('homework-fido2.c')
+endif
systemd_homed_sources = files('''
home-util.c
homectl_sources = files('''
home-util.c
home-util.h
+ homectl-fido2.c
+ homectl-fido2.h
+ homectl-pkcs11.c
+ homectl-pkcs11.h
homectl.c
pwquality-util.c
pwquality-util.h
#include "sd-bus.h"
#include "bus-common-errors.h"
-#include "bus-util.h"
+#include "bus-locator.h"
#include "errno-util.h"
#include "fd-util.h"
#include "home-util.h"
return PAM_AUTHTOK_ERR;
}
- r = user_record_set_pkcs11_pin(secret, STRV_MAKE(newp), false);
+ r = user_record_set_token_pin(secret, STRV_MAKE(newp), false);
if (r < 0) {
pam_syslog(handle, LOG_ERR, "Failed to store PIN: %s", strerror_safe(r));
return PAM_SERVICE_ERR;
return PAM_SERVICE_ERR;
}
+ } else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_USER_PRESENCE_NEEDED)) {
+
+ (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Please verify presence on security token of user %s.", user_name);
+
+ r = user_record_set_fido2_user_presence_permitted(secret, true);
+ if (r < 0) {
+ pam_syslog(handle, LOG_ERR, "Failed to set FIDO2 user presence permitted flag: %s", strerror_safe(r));
+ return PAM_SERVICE_ERR;
+ }
+
+ } else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_PIN_LOCKED)) {
+
+ (void) pam_prompt(handle, PAM_ERROR_MSG, NULL, "Security token PIN is locked, please unlock it first. (Hint: Removal and re-insertion might suffice.)");
+ return PAM_SERVICE_ERR;
+
} else if (sd_bus_error_has_name(error, BUS_ERROR_TOKEN_BAD_PIN)) {
_cleanup_(erase_and_freep) char *newp = NULL;
return PAM_AUTHTOK_ERR;
}
- r = user_record_set_pkcs11_pin(secret, STRV_MAKE(newp), false);
+ r = user_record_set_token_pin(secret, STRV_MAKE(newp), false);
if (r < 0) {
pam_syslog(handle, LOG_ERR, "Failed to store PIN: %s", strerror_safe(r));
return PAM_SERVICE_ERR;
return PAM_AUTHTOK_ERR;
}
- r = user_record_set_pkcs11_pin(secret, STRV_MAKE(newp), false);
+ r = user_record_set_token_pin(secret, STRV_MAKE(newp), false);
if (r < 0) {
pam_syslog(handle, LOG_ERR, "Failed to store PIN: %s", strerror_safe(r));
return PAM_SERVICE_ERR;
return PAM_AUTHTOK_ERR;
}
- r = user_record_set_pkcs11_pin(secret, STRV_MAKE(newp), false);
+ r = user_record_set_token_pin(secret, STRV_MAKE(newp), false);
if (r < 0) {
pam_syslog(handle, LOG_ERR, "Failed to store PIN: %s", strerror_safe(r));
return PAM_SERVICE_ERR;
return r;
/* Implement our own retry loop here instead of relying on the PAM client's one. That's because it
- * might happen that the the record we stored on the host does not match the encryption password of
+ * might happen that the record we stored on the host does not match the encryption password of
* the LUKS image in case the image was used in a different system where the password was
* changed. In that case it will happen that the LUKS password and the host password are
* different, and we handle that by collecting and passing multiple passwords in that case. Hence we
* -REMCHG: identity records are not about the same user
* -ESTALE: embedded identity record is equally new or newer than supplied record
*
- * Return the new record to use, which is either the the embedded record updated with the host
+ * Return the new record to use, which is either the embedded record updated with the host
* binding or the host record. In both cases the secret data is stripped. */
assert(host);
return 0;
}
-int user_record_set_pkcs11_pin(UserRecord *h, char **pin, bool prepend) {
+int user_record_set_token_pin(UserRecord *h, char **pin, bool prepend) {
_cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
_cleanup_(strv_free_erasep) char **e = NULL;
int r;
if (!e)
return -ENOMEM;
- r = strv_extend_strv(&e, h->pkcs11_pin, true);
+ r = strv_extend_strv(&e, h->token_pin, true);
if (r < 0)
return r;
strv_uniq(e);
- if (strv_equal(h->pkcs11_pin, e))
+ if (strv_equal(h->token_pin, e))
return 0;
} else {
- if (strv_equal(h->pkcs11_pin, pin))
+ if (strv_equal(h->token_pin, pin))
return 0;
e = strv_copy(pin);
w = json_variant_ref(json_variant_by_key(h->json, "secret"));
if (strv_isempty(e))
- r = json_variant_filter(&w, STRV_MAKE("pkcs11Pin"));
+ r = json_variant_filter(&w, STRV_MAKE("tokenPin"));
else {
_cleanup_(json_variant_unrefp) JsonVariant *l = NULL;
json_variant_sensitive(l);
- r = json_variant_set_field(&w, "pkcs11Pin", l);
+ r = json_variant_set_field(&w, "tokenPin", l);
}
if (r < 0)
return r;
if (r < 0)
return r;
- strv_free_and_replace(h->pkcs11_pin, e);
+ strv_free_and_replace(h->token_pin, e);
SET_FLAG(h->mask, USER_RECORD_SECRET, !json_variant_is_blank_object(w));
return 0;
return 0;
}
+int user_record_set_fido2_user_presence_permitted(UserRecord *h, int b) {
+ _cleanup_(json_variant_unrefp) JsonVariant *w = NULL;
+ int r;
+
+ assert(h);
+
+ w = json_variant_ref(json_variant_by_key(h->json, "secret"));
+
+ if (b < 0)
+ r = json_variant_filter(&w, STRV_MAKE("fido2UserPresencePermitted"));
+ else
+ r = json_variant_set_field_boolean(&w, "fido2UserPresencePermitted", b);
+ if (r < 0)
+ return r;
+
+ if (json_variant_is_blank_object(w))
+ r = json_variant_filter(&h->json, STRV_MAKE("secret"));
+ else
+ r = json_variant_set_field(&h->json, "secret", w);
+ if (r < 0)
+ return r;
+
+ h->fido2_user_presence_permitted = b;
+
+ SET_FLAG(h->mask, USER_RECORD_SECRET, !json_variant_is_blank_object(w));
+ return 0;
+}
+
static bool per_machine_entry_empty(JsonVariant *v) {
const char *k;
_unused_ JsonVariant *e;
if (r < 0)
return r;
- r = user_record_set_pkcs11_pin(h, secret->pkcs11_pin, true);
+ r = user_record_set_token_pin(h, secret->token_pin, true);
if (r < 0)
return r;
if (secret->pkcs11_protected_authentication_path_permitted >= 0) {
- r = user_record_set_pkcs11_protected_authentication_path_permitted(h, secret->pkcs11_protected_authentication_path_permitted);
+ r = user_record_set_pkcs11_protected_authentication_path_permitted(
+ h,
+ secret->pkcs11_protected_authentication_path_permitted);
+ if (r < 0)
+ return r;
+ }
+
+ if (secret->fido2_user_presence_permitted >= 0) {
+ r = user_record_set_fido2_user_presence_permitted(
+ h,
+ secret->fido2_user_presence_permitted);
if (r < 0)
return r;
}
int user_record_set_password(UserRecord *h, char **password, bool prepend);
int user_record_make_hashed_password(UserRecord *h, char **password, bool extend);
int user_record_set_hashed_password(UserRecord *h, char **hashed_password);
-int user_record_set_pkcs11_pin(UserRecord *h, char **pin, bool prepend);
+int user_record_set_token_pin(UserRecord *h, char **pin, bool prepend);
int user_record_set_pkcs11_protected_authentication_path_permitted(UserRecord *h, int b);
+int user_record_set_fido2_user_presence_permitted(UserRecord *h, int b);
int user_record_set_password_change_now(UserRecord *h, int b);
int user_record_merge_secret(UserRecord *h, UserRecord *secret);
int user_record_good_authentication(UserRecord *h);
#include "alloc-util.h"
#include "architecture.h"
#include "bus-error.h"
-#include "bus-util.h"
+#include "bus-map-properties.h"
#include "hostname-util.h"
#include "main-func.h"
#include "pretty-print.h"
int r;
setlocale(LC_ALL, "");
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
#include "selinux-util.h"
#include "service-util.h"
#include "signal-util.h"
+#include "stat-util.h"
#include "strv.h"
#include "user-util.h"
#include "util.h"
#define VALID_DEPLOYMENT_CHARS (DIGITS LETTERS "-.:")
enum {
- PROP_HOSTNAME,
+ /* Read from /etc/hostname */
PROP_STATIC_HOSTNAME,
+
+ /* Read from /etc/machine-info */
PROP_PRETTY_HOSTNAME,
PROP_ICON_NAME,
PROP_CHASSIS,
PROP_DEPLOYMENT,
PROP_LOCATION,
+
+ /* Read from /etc/os-release (or /usr/lib/os-release) */
PROP_OS_PRETTY_NAME,
PROP_OS_CPE_NAME,
- PROP_HOME_URL,
- _PROP_MAX
+ PROP_OS_HOME_URL,
+ _PROP_MAX,
+ _PROP_INVALID = -1,
};
typedef struct Context {
char *data[_PROP_MAX];
+
+ struct stat etc_hostname_stat;
+ struct stat etc_os_release_stat;
+ struct stat etc_machine_info_stat;
+
Hashmap *polkit_registry;
} Context;
-static void context_reset(Context *c) {
+static void context_reset(Context *c, uint64_t mask) {
int p;
assert(c);
- for (p = 0; p < _PROP_MAX; p++)
+ for (p = 0; p < _PROP_MAX; p++) {
+ if (!FLAGS_SET(mask, UINT64_C(1) << p))
+ continue;
+
c->data[p] = mfree(c->data[p]);
+ }
}
static void context_destroy(Context *c) {
assert(c);
- context_reset(c);
+ context_reset(c, UINT64_MAX);
bus_verify_polkit_async_registry_free(c->polkit_registry);
}
-static int context_read_data(Context *c) {
+static void context_read_etc_hostname(Context *c) {
+ struct stat current_stat = {};
int r;
assert(c);
- context_reset(c);
+ if (stat("/etc/hostname", ¤t_stat) >= 0 &&
+ stat_inode_unmodified(&c->etc_hostname_stat, ¤t_stat))
+ return;
- c->data[PROP_HOSTNAME] = gethostname_malloc();
- if (!c->data[PROP_HOSTNAME])
- return -ENOMEM;
+ context_reset(c, UINT64_C(1) << PROP_STATIC_HOSTNAME);
r = read_etc_hostname(NULL, &c->data[PROP_STATIC_HOSTNAME]);
if (r < 0 && r != -ENOENT)
- return r;
+ log_warning_errno(r, "Failed to read /etc/hostname, ignoring: %m");
+
+ c->etc_hostname_stat = current_stat;
+}
+
+static void context_read_machine_info(Context *c) {
+ struct stat current_stat = {};
+ int r;
+
+ assert(c);
+
+ if (stat("/etc/machine-info", ¤t_stat) >= 0 &&
+ stat_inode_unmodified(&c->etc_machine_info_stat, ¤t_stat))
+ return;
+
+ context_reset(c,
+ (UINT64_C(1) << PROP_PRETTY_HOSTNAME) |
+ (UINT64_C(1) << PROP_ICON_NAME) |
+ (UINT64_C(1) << PROP_CHASSIS) |
+ (UINT64_C(1) << PROP_DEPLOYMENT) |
+ (UINT64_C(1) << PROP_LOCATION));
r = parse_env_file(NULL, "/etc/machine-info",
"PRETTY_HOSTNAME", &c->data[PROP_PRETTY_HOSTNAME],
"DEPLOYMENT", &c->data[PROP_DEPLOYMENT],
"LOCATION", &c->data[PROP_LOCATION]);
if (r < 0 && r != -ENOENT)
- return r;
+ log_warning_errno(r, "Failed to read /etc/machine-info, ignoring: %m");
+
+ c->etc_machine_info_stat = current_stat;
+}
+
+static void context_read_os_release(Context *c) {
+ struct stat current_stat = {};
+ int r;
+
+ assert(c);
+
+ if ((stat("/etc/os-release", ¤t_stat) >= 0 ||
+ stat("/usr/lib/os-release", ¤t_stat) >= 0) &&
+ stat_inode_unmodified(&c->etc_os_release_stat, ¤t_stat))
+ return;
+
+ context_reset(c,
+ (UINT64_C(1) << PROP_OS_PRETTY_NAME) |
+ (UINT64_C(1) << PROP_OS_CPE_NAME) |
+ (UINT64_C(1) << PROP_OS_HOME_URL));
r = parse_os_release(NULL,
"PRETTY_NAME", &c->data[PROP_OS_PRETTY_NAME],
"CPE_NAME", &c->data[PROP_OS_CPE_NAME],
- "HOME_URL", &c->data[PROP_HOME_URL],
+ "HOME_URL", &c->data[PROP_OS_HOME_URL],
NULL);
if (r < 0 && r != -ENOENT)
- return r;
+ log_warning_errno(r, "Failed to read os-release file, ignoring: %m");
- return 0;
+ c->etc_os_release_stat = current_stat;
}
static bool valid_chassis(const char *chassis) {
return !isempty(hn) && !is_localhost(hn);
}
-static int context_update_kernel_hostname(Context *c) {
- const char *static_hn;
- const char *hn;
+static int context_update_kernel_hostname(
+ Context *c,
+ const char *transient_hn) {
+
+ const char *static_hn, *hn;
+ struct utsname u;
assert(c);
+ if (!transient_hn) {
+ /* If no transient hostname is passed in, then let's check what is currently set. */
+ assert_se(uname(&u) >= 0);
+ transient_hn =
+ isempty(u.nodename) || streq(u.nodename, "(none)") ? NULL : u.nodename;
+ }
+
static_hn = c->data[PROP_STATIC_HOSTNAME];
/* /etc/hostname with something other than "localhost"
hn = static_hn;
/* ... the transient hostname, (ie: DHCP) comes next ... */
- else if (!isempty(c->data[PROP_HOSTNAME]))
- hn = c->data[PROP_HOSTNAME];
+ else if (!isempty(transient_hn))
+ hn = transient_hn;
/* ... fallback to static "localhost.*" ignored above ... */
else if (!isempty(static_hn))
}
static int context_write_data_static_hostname(Context *c) {
-
assert(c);
if (isempty(c->data[PROP_STATIC_HOSTNAME])) {
return write_env_file_label("/etc/machine-info", l);
}
+static int property_get_hostname(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ _cleanup_free_ char *current = NULL;
+ int r;
+
+ r = gethostname_strict(¤t);
+ if (r == -ENXIO)
+ return sd_bus_message_append(reply, "s", FALLBACK_HOSTNAME);
+ if (r < 0)
+ return r;
+
+ return sd_bus_message_append(reply, "s", current);
+}
+
+static int property_get_static_hostname(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ Context *c = userdata;
+ assert(c);
+
+ context_read_etc_hostname(c);
+
+ return sd_bus_message_append(reply, "s", c->data[PROP_STATIC_HOSTNAME]);
+}
+
+static int property_get_machine_info_field(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ sd_bus_slot *slot;
+ Context *c;
+
+ /* Acquire the context object without this property's userdata offset added. Explanation: we want
+ * access to two pointers here: a) the main context object we cache all properties in, and b) the
+ * pointer to the property field inside the context object that we are supposed to update and
+ * use. The latter (b) we get in the 'userdata' function parameter, and sd-bus calculates that for us
+ * from the 'userdata' pointer we supplied when the vtable was registered, with the offset we
+ * specified in the vtable added on top. To get the former (a) we need the 'userdata' pointer from
+ * the vtable registration directly, without the offset added. Hence we ask sd-bus what the slot
+ * object is (which encapsulates the vtable registration), and then query the 'userdata' field
+ * directly off it. */
+ assert_se(slot = sd_bus_get_current_slot(bus));
+ assert_se(c = sd_bus_slot_get_userdata(slot));
+
+ context_read_machine_info(c);
+
+ return sd_bus_message_append(reply, "s", *(char**) userdata);
+}
+
+static int property_get_os_release_field(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ sd_bus_slot *slot;
+ Context *c;
+
+ /* As above, acquire the current context without this property's userdata offset added. */
+ assert_se(slot = sd_bus_get_current_slot(bus));
+ assert_se(c = sd_bus_slot_get_userdata(slot));
+
+ context_read_os_release(c);
+
+ return sd_bus_message_append(reply, "s", *(char**) userdata);
+}
+
static int property_get_icon_name(
sd_bus *bus,
const char *path,
Context *c = userdata;
const char *name;
+ context_read_machine_info(c);
+
if (isempty(c->data[PROP_ICON_NAME]))
name = n = context_fallback_icon_name(c);
else
Context *c = userdata;
const char *name;
+ context_read_machine_info(c);
+
if (isempty(c->data[PROP_CHASSIS]))
name = fallback_chassis();
else
static int method_set_hostname(sd_bus_message *m, void *userdata, sd_bus_error *error) {
Context *c = userdata;
const char *name;
- int interactive;
- int r;
+ int interactive, r;
+ struct utsname u;
assert(m);
assert(c);
if (r < 0)
return r;
+ context_read_etc_hostname(c);
+
if (isempty(name))
name = c->data[PROP_STATIC_HOSTNAME];
if (!hostname_is_valid(name, false))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid hostname '%s'", name);
- if (streq_ptr(name, c->data[PROP_HOSTNAME]))
+ assert_se(uname(&u) >= 0);
+ if (streq_ptr(name, u.nodename))
return sd_bus_reply_method_return(m, NULL);
r = bus_verify_polkit_async(
if (r == 0)
return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
- r = free_and_strdup(&c->data[PROP_HOSTNAME], name);
- if (r < 0)
- return r;
-
- r = context_update_kernel_hostname(c);
+ r = context_update_kernel_hostname(c, name);
if (r < 0) {
log_error_errno(r, "Failed to set hostname: %m");
return sd_bus_error_set_errnof(error, r, "Failed to set hostname: %m");
}
- log_info("Changed hostname to '%s'", strna(c->data[PROP_HOSTNAME]));
+ log_info("Changed hostname to '%s'", name);
(void) sd_bus_emit_properties_changed(sd_bus_message_get_bus(m), "/org/freedesktop/hostname1", "org.freedesktop.hostname1", "Hostname", NULL);
name = empty_to_null(name);
+ context_read_etc_hostname(c);
+
if (streq_ptr(name, c->data[PROP_STATIC_HOSTNAME]))
return sd_bus_reply_method_return(m, NULL);
if (r < 0)
return r;
- r = context_update_kernel_hostname(c);
+ r = context_update_kernel_hostname(c, NULL);
if (r < 0) {
log_error_errno(r, "Failed to set hostname: %m");
return sd_bus_error_set_errnof(error, r, "Failed to set hostname: %m");
name = empty_to_null(name);
+ context_read_machine_info(c);
+
if (streq_ptr(name, c->data[prop]))
return sd_bus_reply_method_return(m, NULL);
static const sd_bus_vtable hostname_vtable[] = {
SD_BUS_VTABLE_START(0),
- SD_BUS_PROPERTY("Hostname", "s", NULL, offsetof(Context, data) + sizeof(char*) * PROP_HOSTNAME, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
- SD_BUS_PROPERTY("StaticHostname", "s", NULL, offsetof(Context, data) + sizeof(char*) * PROP_STATIC_HOSTNAME, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
- SD_BUS_PROPERTY("PrettyHostname", "s", NULL, offsetof(Context, data) + sizeof(char*) * PROP_PRETTY_HOSTNAME, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
+ SD_BUS_PROPERTY("Hostname", "s", property_get_hostname, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
+ SD_BUS_PROPERTY("StaticHostname", "s", property_get_static_hostname, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
+ SD_BUS_PROPERTY("PrettyHostname", "s", property_get_machine_info_field, offsetof(Context, data) + sizeof(char*) * PROP_PRETTY_HOSTNAME, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("IconName", "s", property_get_icon_name, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("Chassis", "s", property_get_chassis, 0, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
- SD_BUS_PROPERTY("Deployment", "s", NULL, offsetof(Context, data) + sizeof(char*) * PROP_DEPLOYMENT, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
- SD_BUS_PROPERTY("Location", "s", NULL, offsetof(Context, data) + sizeof(char*) * PROP_LOCATION, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
+ SD_BUS_PROPERTY("Deployment", "s", property_get_machine_info_field, offsetof(Context, data) + sizeof(char*) * PROP_DEPLOYMENT, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
+ SD_BUS_PROPERTY("Location", "s", property_get_machine_info_field, offsetof(Context, data) + sizeof(char*) * PROP_LOCATION, SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
SD_BUS_PROPERTY("KernelName", "s", property_get_uname_field, offsetof(struct utsname, sysname), SD_BUS_VTABLE_ABSOLUTE_OFFSET|SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("KernelRelease", "s", property_get_uname_field, offsetof(struct utsname, release), SD_BUS_VTABLE_ABSOLUTE_OFFSET|SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("KernelVersion", "s", property_get_uname_field, offsetof(struct utsname, version), SD_BUS_VTABLE_ABSOLUTE_OFFSET|SD_BUS_VTABLE_PROPERTY_CONST),
- SD_BUS_PROPERTY("OperatingSystemPrettyName", "s", NULL, offsetof(Context, data) + sizeof(char*) * PROP_OS_PRETTY_NAME, SD_BUS_VTABLE_PROPERTY_CONST),
- SD_BUS_PROPERTY("OperatingSystemCPEName", "s", NULL, offsetof(Context, data) + sizeof(char*) * PROP_OS_CPE_NAME, SD_BUS_VTABLE_PROPERTY_CONST),
- SD_BUS_PROPERTY("HomeURL", "s", NULL, offsetof(Context, data) + sizeof(char*) * PROP_HOME_URL, SD_BUS_VTABLE_PROPERTY_CONST),
+ SD_BUS_PROPERTY("OperatingSystemPrettyName", "s", property_get_os_release_field, offsetof(Context, data) + sizeof(char*) * PROP_OS_PRETTY_NAME, SD_BUS_VTABLE_PROPERTY_CONST),
+ SD_BUS_PROPERTY("OperatingSystemCPEName", "s", property_get_os_release_field, offsetof(Context, data) + sizeof(char*) * PROP_OS_CPE_NAME, SD_BUS_VTABLE_PROPERTY_CONST),
+ SD_BUS_PROPERTY("HomeURL", "s", property_get_os_release_field, offsetof(Context, data) + sizeof(char*) * PROP_OS_HOME_URL, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_METHOD_WITH_NAMES("SetHostname",
"sb",
return r;
umask(0022);
- mac_selinux_init();
+
+ r = mac_selinux_init();
+ if (r < 0)
+ return r;
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
if (r < 0)
return r;
- r = context_read_data(&context);
- if (r < 0)
- return log_error_errno(r, "Failed to read hostname and machine information: %m");
-
r = bus_event_loop_with_idle(event, bus, "org.freedesktop.hostname1", DEFAULT_EXIT_USEC, NULL, NULL);
if (r < 0)
return log_error_errno(r, "Failed to run event loop: %m");
if (r <= 0)
return r;
- mac_selinux_init();
+ r = mac_selinux_init();
+ if (r < 0)
+ return r;
return hwdb_main(argc, argv);
}
if (table) {
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to print table: %m");
+ return table_log_print_error(r);
}
return 0;
static int run(int argc, char *argv[]) {
int r;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-log-control-api.h"
-#include "bus-util.h"
#include "bus-polkit.h"
#include "def.h"
#include "fd-util.h"
#include "parse-util.h"
#include "path-util.h"
#include "process-util.h"
-#include "signal-util.h"
#include "service-util.h"
+#include "signal-util.h"
#include "socket-util.h"
#include "stat-util.h"
#include "string-table.h"
#include "alloc-util.h"
#include "bus-error.h"
#include "bus-util.h"
+#include "daemon-util.h"
#include "def.h"
#include "fd-util.h"
#include "format-util.h"
#include "initreq.h"
#include "list.h"
#include "log.h"
+#include "main-func.h"
#include "memory-util.h"
#include "process-util.h"
#include "special.h"
{ '6', SPECIAL_REBOOT_TARGET, false },
};
- unsigned i;
-
assert(isolate);
- for (i = 0; i < ELEMENTSOF(table); i++)
+ for (size_t i = 0; i < ELEMENTSOF(table); i++)
if (table[i].runlevel == runlevel) {
*isolate = table[i].isolate;
if (runlevel == '6' && kexec_loaded())
free(f);
}
+DEFINE_TRIVIAL_CLEANUP_FUNC(Fifo*, fifo_free);
static void server_done(Server *s) {
assert(s);
static int server_init(Server *s, unsigned n_sockets) {
int r;
- unsigned i;
+
+ /* This function will leave s partially initialized on failure. Caller needs to clean up. */
assert(s);
assert(n_sockets > 0);
- *s = (struct Server) {
- .epoll_fd = epoll_create1(EPOLL_CLOEXEC),
- };
-
- if (s->epoll_fd < 0) {
- r = log_error_errno(errno,
- "Failed to create epoll object: %m");
- goto fail;
- }
-
- for (i = 0; i < n_sockets; i++) {
- Fifo *f;
- int fd;
+ s->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
+ if (s->epoll_fd < 0)
+ return log_error_errno(errno, "Failed to create epoll object: %m");
- fd = SD_LISTEN_FDS_START+i;
+ for (unsigned i = 0; i < n_sockets; i++) {
+ _cleanup_(fifo_freep) Fifo *f = NULL;
+ int fd = SD_LISTEN_FDS_START + i;
r = sd_is_fifo(fd, NULL);
- if (r < 0) {
- log_error_errno(r, "Failed to determine file descriptor type: %m");
- goto fail;
- }
-
- if (!r) {
- log_error("Wrong file descriptor type.");
- r = -EINVAL;
- goto fail;
- }
+ if (r < 0)
+ return log_error_errno(r, "Failed to determine file descriptor type: %m");
+ if (!r)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Wrong file descriptor type.");
f = new0(Fifo, 1);
- if (!f) {
- r = -ENOMEM;
- log_error_errno(errno, "Failed to create fifo object: %m");
- goto fail;
- }
-
- f->fd = -1;
+ if (!f)
+ return log_oom();
struct epoll_event ev = {
.events = EPOLLIN,
.data.ptr = f,
};
- if (epoll_ctl(s->epoll_fd, EPOLL_CTL_ADD, fd, &ev) < 0) {
- r = -errno;
- fifo_free(f);
- log_error_errno(errno, "Failed to add fifo fd to epoll object: %m");
- goto fail;
- }
+ if (epoll_ctl(s->epoll_fd, EPOLL_CTL_ADD, fd, &ev) < 0)
+ return log_error_errno(errno, "Failed to add fifo fd to epoll object: %m");
f->fd = fd;
- LIST_PREPEND(fifo, s->fifos, f);
f->server = s;
+ LIST_PREPEND(fifo, s->fifos, TAKE_PTR(f));
s->n_fifos++;
}
r = bus_connect_system_systemd(&s->bus);
- if (r < 0) {
- log_error_errno(r, "Failed to get D-Bus connection: %m");
- r = -EIO;
- goto fail;
- }
+ if (r < 0)
+ return log_error_errno(r, "Failed to get D-Bus connection: %m");
return 0;
-
-fail:
- server_done(s);
-
- return r;
}
static int process_event(Server *s, struct epoll_event *ev) {
return 0;
}
-int main(int argc, char *argv[]) {
- Server server;
- int r = EXIT_FAILURE, n;
-
- if (getppid() != 1) {
- log_error("This program should be invoked by init only.");
- return EXIT_FAILURE;
- }
+static int run(int argc, char *argv[]) {
+ _cleanup_(server_done) Server server = { .epoll_fd = -1 };
+ _cleanup_(notify_on_cleanup) const char *notify_stop = NULL;
+ int r, n;
- if (argc > 1) {
- log_error("This program does not take arguments.");
- return EXIT_FAILURE;
- }
+ if (argc > 1)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "This program does not take arguments.");
log_setup_service();
umask(0022);
n = sd_listen_fds(true);
- if (n < 0) {
- log_error_errno(r, "Failed to read listening file descriptors from environment: %m");
- return EXIT_FAILURE;
- }
-
- if (n <= 0 || n > SERVER_FD_MAX) {
- log_error("No or too many file descriptors passed.");
- return EXIT_FAILURE;
- }
+ if (n < 0)
+ return log_error_errno(errno,
+ "Failed to read listening file descriptors from environment: %m");
- if (server_init(&server, (unsigned) n) < 0)
- return EXIT_FAILURE;
+ if (n <= 0 || n > SERVER_FD_MAX)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "No or too many file descriptors passed.");
- log_debug("systemd-initctl running as pid "PID_FMT, getpid_cached());
+ r = server_init(&server, (unsigned) n);
+ if (r < 0)
+ return r;
- sd_notify(false,
- "READY=1\n"
- "STATUS=Processing requests...");
+ notify_stop = notify_start(NOTIFY_READY, NOTIFY_STOPPING);
while (!server.quit) {
struct epoll_event event;
if (k < 0) {
if (errno == EINTR)
continue;
- log_error_errno(errno, "epoll_wait() failed: %m");
- goto fail;
+ return log_error_errno(errno, "epoll_wait() failed: %m");
}
-
- if (k <= 0)
+ if (k == 0)
break;
- if (process_event(&server, &event) < 0)
- goto fail;
+ r = process_event(&server, &event);
+ if (r < 0)
+ return r;
}
- r = EXIT_SUCCESS;
-
- log_debug("systemd-initctl stopped as pid "PID_FMT, getpid_cached());
-
-fail:
- sd_notify(false,
- "STOPPING=1\n"
- "STATUS=Shutting down...");
-
- server_done(&server);
-
- return r;
+ return 0;
}
+
+DEFINE_MAIN_FUNCTION(run);
return 0;
}
-static int request_parse_arguments_iterator(
+static mhd_result request_parse_arguments_iterator(
void *cls,
enum MHD_ValueKind kind,
const char *key,
return MHD_queue_response(connection, MHD_HTTP_OK, response);
}
-static int request_handler(
+static mhd_result request_handler(
void *cls,
struct MHD_Connection *connection,
const char *url,
return mhd_respond(connection, MHD_HTTP_ACCEPTED, "OK.");
};
-static int request_handler(
+static mhd_result request_handler(
void *cls,
struct MHD_Connection *connection,
const char *url,
}
static int run(int argc, char **argv) {
- _cleanup_(notify_on_cleanup) const char *notify_message = NULL;
_cleanup_(journal_remote_server_destroy) RemoteServer s = {};
+ _cleanup_(notify_on_cleanup) const char *notify_message = NULL;
_cleanup_free_ char *key = NULL, *cert = NULL, *trust = NULL;
int r;
log_show_color(true);
- log_parse_environment();
+ log_parse_environment_cli();
/* The journal merging logic potentially needs a lot of fds. */
(void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
}
static int run(int argc, char **argv) {
- _cleanup_(notify_on_cleanup) const char *notify_message = NULL;
_cleanup_(destroy_uploader) Uploader u = {};
+ _cleanup_(notify_on_cleanup) const char *notify_message = NULL;
bool use_journal;
int r;
log_show_color(true);
- log_parse_environment();
+ log_parse_environment_cli();
/* The journal merging logic potentially needs a lot of fds. */
(void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
# define MHD_create_response_from_fd_at_offset64 MHD_create_response_from_fd_at_offset
#endif
+#if MHD_VERSION >= 0x00097002
+# define mhd_result enum MHD_Result
+#else
+# define mhd_result int
+#endif
+
void microhttpd_logger(void *arg, const char *fmt, va_list ap) _printf_(2, 0);
/* respond_oom() must be usable with return, hence this form. */
_cleanup_close_ int outfd = -1, errfd = -1, saved_stderr = -1;
int r;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
#define ALIGN_8(l) ALIGN_TO(l, sizeof(size_t))
static const char* const object_compressed_table[_OBJECT_COMPRESSED_MAX] = {
- [OBJECT_COMPRESSED_XZ] = "XZ",
- [OBJECT_COMPRESSED_LZ4] = "LZ4",
+ [OBJECT_COMPRESSED_XZ] = "XZ",
+ [OBJECT_COMPRESSED_LZ4] = "LZ4",
+ [OBJECT_COMPRESSED_ZSTD] = "ZSTD",
+ /* If we add too many more entries here, it's going to grow quite large (and be mostly sparse), since
+ * the array key is actually a bitmask, not a plain enum */
};
DEFINE_STRING_TABLE_LOOKUP(object_compressed, int);
#endif
}
+int compress_blob_zstd(
+ const void *src, uint64_t src_size,
+ void *dst, size_t dst_alloc_size, size_t *dst_size) {
+#if HAVE_ZSTD
+ size_t k;
+
+ assert(src);
+ assert(src_size > 0);
+ assert(dst);
+ assert(dst_alloc_size > 0);
+ assert(dst_size);
+
+ k = ZSTD_compress(dst, dst_alloc_size, src, src_size, 0);
+ if (ZSTD_isError(k))
+ return zstd_ret_to_errno(k);
+
+ *dst_size = k;
+ return 0;
+#else
+ return -EPROTONOSUPPORT;
+#endif
+}
+
int decompress_blob_xz(const void *src, uint64_t src_size,
void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max) {
#endif
}
-int decompress_blob(int compression,
- const void *src, uint64_t src_size,
- void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max) {
+int decompress_blob_zstd(
+ const void *src, uint64_t src_size,
+ void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max) {
+
+#if HAVE_ZSTD
+ size_t space;
+
+ assert(src);
+ assert(src_size > 0);
+ assert(dst);
+ assert(dst_alloc_size);
+ assert(dst_size);
+ assert(*dst_alloc_size == 0 || *dst);
+
+ if (src_size > SIZE_MAX/2) /* Overflow? */
+ return -ENOBUFS;
+ space = src_size * 2;
+ if (dst_max > 0 && space > dst_max)
+ space = dst_max;
+
+ if (!greedy_realloc(dst, dst_alloc_size, space, 1))
+ return -ENOMEM;
+
+ for (;;) {
+ size_t k;
+
+ k = ZSTD_decompress(*dst, *dst_alloc_size, src, src_size);
+ if (!ZSTD_isError(k)) {
+ *dst_size = k;
+ return 0;
+ }
+ if (ZSTD_getErrorCode(k) != ZSTD_error_dstSize_tooSmall)
+ return zstd_ret_to_errno(k);
+
+ if (dst_max > 0 && space >= dst_max) /* Already at max? */
+ return -ENOBUFS;
+ if (space > SIZE_MAX / 2) /* Overflow? */
+ return -ENOBUFS;
+
+ space *= 2;
+ if (dst_max > 0 && space > dst_max)
+ space = dst_max;
+
+ if (!greedy_realloc(dst, dst_alloc_size, space, 1))
+ return -ENOMEM;
+ }
+#else
+ return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_blob(
+ int compression,
+ const void *src, uint64_t src_size,
+ void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max) {
+
if (compression == OBJECT_COMPRESSED_XZ)
- return decompress_blob_xz(src, src_size,
- dst, dst_alloc_size, dst_size, dst_max);
+ return decompress_blob_xz(
+ src, src_size,
+ dst, dst_alloc_size, dst_size, dst_max);
else if (compression == OBJECT_COMPRESSED_LZ4)
- return decompress_blob_lz4(src, src_size,
- dst, dst_alloc_size, dst_size, dst_max);
+ return decompress_blob_lz4(
+ src, src_size,
+ dst, dst_alloc_size, dst_size, dst_max);
+ else if (compression == OBJECT_COMPRESSED_ZSTD)
+ return decompress_blob_zstd(
+ src, src_size,
+ dst, dst_alloc_size, dst_size, dst_max);
else
return -EBADMSG;
}
#endif
}
-int decompress_startswith(int compression,
- const void *src, uint64_t src_size,
- void **buffer, size_t *buffer_size,
- const void *prefix, size_t prefix_len,
- uint8_t extra) {
+int decompress_startswith_zstd(
+ const void *src, uint64_t src_size,
+ void **buffer, size_t *buffer_size,
+ const void *prefix, size_t prefix_len,
+ uint8_t extra) {
+#if HAVE_ZSTD
+ _cleanup_(ZSTD_freeDCtxp) ZSTD_DCtx *dctx = NULL;
+ size_t k;
+
+ assert(src);
+ assert(src_size > 0);
+ assert(buffer);
+ assert(buffer_size);
+ assert(prefix);
+ assert(*buffer_size == 0 || *buffer);
+
+ dctx = ZSTD_createDCtx();
+ if (!dctx)
+ return -ENOMEM;
+
+ if (!(greedy_realloc(buffer, buffer_size, MAX(ZSTD_DStreamOutSize(), prefix_len + 1), 1)))
+ return -ENOMEM;
+
+ ZSTD_inBuffer input = {
+ .src = src,
+ .size = src_size,
+ };
+ ZSTD_outBuffer output = {
+ .dst = *buffer,
+ .size = *buffer_size,
+ };
+
+ for (;;) {
+ k = ZSTD_decompressStream(dctx, &output, &input);
+ if (ZSTD_isError(k)) {
+ log_debug("ZSTD decoder failed: %s", ZSTD_getErrorName(k));
+ return zstd_ret_to_errno(k);
+ }
+
+ if (output.pos >= prefix_len + 1)
+ return memcmp(*buffer, prefix, prefix_len) == 0 &&
+ ((const uint8_t*) *buffer)[prefix_len] == extra;
+
+ if (input.pos >= input.size)
+ return 0;
+
+ if (*buffer_size > SIZE_MAX/2)
+ return -ENOBUFS;
+
+ if (!(greedy_realloc(buffer, buffer_size, *buffer_size * 2, 1)))
+ return -ENOMEM;
+
+ output.dst = *buffer;
+ output.size = *buffer_size;
+ }
+#else
+ return -EPROTONOSUPPORT;
+#endif
+}
+
+int decompress_startswith(
+ int compression,
+ const void *src, uint64_t src_size,
+ void **buffer, size_t *buffer_size,
+ const void *prefix, size_t prefix_len,
+ uint8_t extra) {
+
if (compression == OBJECT_COMPRESSED_XZ)
- return decompress_startswith_xz(src, src_size,
- buffer, buffer_size,
- prefix, prefix_len,
- extra);
+ return decompress_startswith_xz(
+ src, src_size,
+ buffer, buffer_size,
+ prefix, prefix_len,
+ extra);
+
else if (compression == OBJECT_COMPRESSED_LZ4)
- return decompress_startswith_lz4(src, src_size,
- buffer, buffer_size,
- prefix, prefix_len,
- extra);
+ return decompress_startswith_lz4(
+ src, src_size,
+ buffer, buffer_size,
+ prefix, prefix_len,
+ extra);
+ else if (compression == OBJECT_COMPRESSED_ZSTD)
+ return decompress_startswith_zstd(
+ src, src_size,
+ buffer, buffer_size,
+ prefix, prefix_len,
+ extra);
else
return -EBADMSG;
}
size_t in_allocsize, out_allocsize;
size_t z;
uint64_t left = max_bytes, in_bytes = 0;
- /* This can be used in the future to add uncompressed size to the header */
- uint64_t in_totalsize = 0;
assert(fdf >= 0);
assert(fdt >= 0);
if (!cctx || !out_buff || !in_buff)
return -ENOMEM;
- if (in_totalsize) {
- z = ZSTD_CCtx_setPledgedSrcSize(cctx, in_totalsize);
- if (z)
- log_debug("Failed to enable ZSTD input size, ignoring: %s", ZSTD_getErrorName(z));
- }
z = ZSTD_CCtx_setParameter(cctx, ZSTD_c_checksumFlag, 1);
if (ZSTD_isError(z))
log_debug("Failed to enable ZSTD checksum, ignoring: %s", ZSTD_getErrorName(z));
void *dst, size_t dst_alloc_size, size_t *dst_size);
int compress_blob_lz4(const void *src, uint64_t src_size,
void *dst, size_t dst_alloc_size, size_t *dst_size);
+int compress_blob_zstd(const void *src, uint64_t src_size,
+ void *dst, size_t dst_alloc_size, size_t *dst_size);
static inline int compress_blob(const void *src, uint64_t src_size,
void *dst, size_t dst_alloc_size, size_t *dst_size) {
int r;
-#if HAVE_LZ4
+#if HAVE_ZSTD
+ r = compress_blob_zstd(src, src_size, dst, dst_alloc_size, dst_size);
+ if (r == 0)
+ return OBJECT_COMPRESSED_ZSTD;
+#elif HAVE_LZ4
r = compress_blob_lz4(src, src_size, dst, dst_alloc_size, dst_size);
if (r == 0)
return OBJECT_COMPRESSED_LZ4;
-#else
+#elif HAVE_XZ
r = compress_blob_xz(src, src_size, dst, dst_alloc_size, dst_size);
if (r == 0)
return OBJECT_COMPRESSED_XZ;
+#else
+ r = -EOPNOTSUPP;
#endif
return r;
}
void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
int decompress_blob_lz4(const void *src, uint64_t src_size,
void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
+int decompress_blob_zstd(const void *src, uint64_t src_size,
+ void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
int decompress_blob(int compression,
const void *src, uint64_t src_size,
void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
void **buffer, size_t *buffer_size,
const void *prefix, size_t prefix_len,
uint8_t extra);
+int decompress_startswith_zstd(const void *src, uint64_t src_size,
+ void **buffer, size_t *buffer_size,
+ const void *prefix, size_t prefix_len,
+ uint8_t extra);
int decompress_startswith(int compression,
const void *src, uint64_t src_size,
void **buffer, size_t *buffer_size,
#elif HAVE_LZ4
# define compress_stream compress_stream_lz4
# define COMPRESSED_EXT ".lz4"
-#else
+#elif HAVE_XZ
# define compress_stream compress_stream_xz
# define COMPRESSED_EXT ".xz"
+#else
+static inline int compress_stream(int fdf, int fdt, uint64_t max_size) {
+ return -EOPNOTSUPP;
+}
+# define COMPRESSED_EXT ""
#endif
int decompress_stream(const char *filename, int fdf, int fdt, uint64_t max_bytes);
/*
* If you change this file you probably should also change its documentation:
*
- * http://www.freedesktop.org/wiki/Software/systemd/journal-files
+ * https://systemd.io/JOURNAL_FILE_FORMAT
*/
typedef struct Header Header;
/* Object flags */
enum {
- OBJECT_COMPRESSED_XZ = 1 << 0,
- OBJECT_COMPRESSED_LZ4 = 1 << 1,
- _OBJECT_COMPRESSED_MAX
+ OBJECT_COMPRESSED_XZ = 1 << 0,
+ OBJECT_COMPRESSED_LZ4 = 1 << 1,
+ OBJECT_COMPRESSED_ZSTD = 1 << 2,
+ OBJECT_COMPRESSION_MASK = (OBJECT_COMPRESSED_XZ | OBJECT_COMPRESSED_LZ4 | OBJECT_COMPRESSED_ZSTD),
+ _OBJECT_COMPRESSED_MAX = OBJECT_COMPRESSION_MASK,
};
-#define OBJECT_COMPRESSION_MASK (OBJECT_COMPRESSED_XZ | OBJECT_COMPRESSED_LZ4)
-
struct ObjectHeader {
uint8_t type;
uint8_t flags;
struct DataObject__packed DataObject__contents _packed_;
assert_cc(sizeof(struct DataObject) == sizeof(struct DataObject__packed));
-struct FieldObject {
- ObjectHeader object;
- le64_t hash;
- le64_t next_hash_offset;
- le64_t head_data_offset;
- uint8_t payload[];
-} _packed_;
+#define FieldObject__contents { \
+ ObjectHeader object; \
+ le64_t hash; \
+ le64_t next_hash_offset; \
+ le64_t head_data_offset; \
+ uint8_t payload[]; \
+}
+
+struct FieldObject FieldObject__contents;
+struct FieldObject__packed FieldObject__contents _packed_;
+assert_cc(sizeof(struct FieldObject) == sizeof(struct FieldObject__packed));
struct EntryItem {
le64_t object_offset;
/* Header flags */
enum {
- HEADER_INCOMPATIBLE_COMPRESSED_XZ = 1 << 0,
- HEADER_INCOMPATIBLE_COMPRESSED_LZ4 = 1 << 1,
+ HEADER_INCOMPATIBLE_COMPRESSED_XZ = 1 << 0,
+ HEADER_INCOMPATIBLE_COMPRESSED_LZ4 = 1 << 1,
+ HEADER_INCOMPATIBLE_KEYED_HASH = 1 << 2,
+ HEADER_INCOMPATIBLE_COMPRESSED_ZSTD = 1 << 3,
};
-#define HEADER_INCOMPATIBLE_ANY (HEADER_INCOMPATIBLE_COMPRESSED_XZ|HEADER_INCOMPATIBLE_COMPRESSED_LZ4)
+#define HEADER_INCOMPATIBLE_ANY \
+ (HEADER_INCOMPATIBLE_COMPRESSED_XZ | \
+ HEADER_INCOMPATIBLE_COMPRESSED_LZ4 | \
+ HEADER_INCOMPATIBLE_KEYED_HASH | \
+ HEADER_INCOMPATIBLE_COMPRESSED_ZSTD)
-#if HAVE_XZ && HAVE_LZ4
+#if HAVE_XZ && HAVE_LZ4 && HAVE_ZSTD
# define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_ANY
+#elif HAVE_XZ && HAVE_LZ4
+# define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_XZ|HEADER_INCOMPATIBLE_COMPRESSED_LZ4|HEADER_INCOMPATIBLE_KEYED_HASH)
+#elif HAVE_XZ && HAVE_ZSTD
+# define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_XZ|HEADER_INCOMPATIBLE_COMPRESSED_ZSTD|HEADER_INCOMPATIBLE_KEYED_HASH)
+#elif HAVE_LZ4 && HAVE_ZSTD
+# define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_LZ4|HEADER_INCOMPATIBLE_COMPRESSED_ZSTD|HEADER_INCOMPATIBLE_KEYED_HASH)
#elif HAVE_XZ
-# define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_COMPRESSED_XZ
+# define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_XZ|HEADER_INCOMPATIBLE_KEYED_HASH)
#elif HAVE_LZ4
-# define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_COMPRESSED_LZ4
+# define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_LZ4|HEADER_INCOMPATIBLE_KEYED_HASH)
+#elif HAVE_ZSTD
+# define HEADER_INCOMPATIBLE_SUPPORTED (HEADER_INCOMPATIBLE_COMPRESSED_ZSTD|HEADER_INCOMPATIBLE_KEYED_HASH)
#else
-# define HEADER_INCOMPATIBLE_SUPPORTED 0
+# define HEADER_INCOMPATIBLE_SUPPORTED HEADER_INCOMPATIBLE_KEYED_HASH
#endif
enum {
- HEADER_COMPATIBLE_SEALED = 1
+ HEADER_COMPATIBLE_SEALED = 1 << 0,
};
#define HEADER_COMPATIBLE_ANY HEADER_COMPATIBLE_SEALED
# define HEADER_COMPATIBLE_SUPPORTED 0
#endif
-#define HEADER_SIGNATURE ((char[]) { 'L', 'P', 'K', 'S', 'H', 'H', 'R', 'H' })
+#define HEADER_SIGNATURE \
+ ((const char[]) { 'L', 'P', 'K', 'S', 'H', 'H', 'R', 'H' })
#define struct_Header__contents { \
uint8_t signature[8]; /* "LPKSHHRH" */ \
/* Added in 189 */ \
le64_t n_tags; \
le64_t n_entry_arrays; \
+ /* Added in 246 */ \
+ le64_t data_hash_chain_depth; \
+ le64_t field_hash_chain_depth; \
}
struct Header struct_Header__contents;
struct Header__packed struct_Header__contents _packed_;
assert_cc(sizeof(struct Header) == sizeof(struct Header__packed));
-assert_cc(sizeof(struct Header) == 240);
+assert_cc(sizeof(struct Header) == 256);
-#define FSS_HEADER_SIGNATURE ((char[]) { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' })
+#define FSS_HEADER_SIGNATURE \
+ ((const char[]) { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' })
struct FSSHeader {
uint8_t signature[8]; /* "KSHHRHLP" */
#include "btrfs-util.h"
#include "chattr-util.h"
#include "compress.h"
+#include "env-util.h"
#include "fd-util.h"
#include "format-util.h"
#include "fs-util.h"
/* The mmap context to use for the header we pick as one above the last defined typed */
#define CONTEXT_HEADER _OBJECT_TYPE_MAX
+/* Longest hash chain to rotate after */
+#define HASH_CHAIN_DEPTH_MAX 100
+
#ifdef __clang__
# pragma GCC diagnostic ignored "-Waddress-of-packed-member"
#endif
ordered_hashmap_free_free(f->chain_cache);
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
free(f->compress_buffer);
#endif
h.incompatible_flags |= htole32(
f->compress_xz * HEADER_INCOMPATIBLE_COMPRESSED_XZ |
- f->compress_lz4 * HEADER_INCOMPATIBLE_COMPRESSED_LZ4);
+ f->compress_lz4 * HEADER_INCOMPATIBLE_COMPRESSED_LZ4 |
+ f->compress_zstd * HEADER_INCOMPATIBLE_COMPRESSED_ZSTD |
+ f->keyed_hash * HEADER_INCOMPATIBLE_KEYED_HASH);
h.compatible_flags = htole32(
f->seal * HEADER_COMPATIBLE_SEALED);
}
static int journal_file_refresh_header(JournalFile *f) {
- sd_id128_t boot_id;
int r;
assert(f);
else if (r < 0)
return r;
- r = sd_id128_get_boot(&boot_id);
+ r = sd_id128_get_boot(&f->header->boot_id);
if (r < 0)
return r;
- f->header->boot_id = boot_id;
-
r = journal_file_set_online(f);
/* Sync the online state to disk */
f->path, type, flags & ~any);
flags = (flags & any) & ~supported;
if (flags) {
- const char* strv[3];
+ const char* strv[5];
unsigned n = 0;
_cleanup_free_ char *t = NULL;
- if (compatible && (flags & HEADER_COMPATIBLE_SEALED))
- strv[n++] = "sealed";
- if (!compatible && (flags & HEADER_INCOMPATIBLE_COMPRESSED_XZ))
- strv[n++] = "xz-compressed";
- if (!compatible && (flags & HEADER_INCOMPATIBLE_COMPRESSED_LZ4))
- strv[n++] = "lz4-compressed";
+ if (compatible) {
+ if (flags & HEADER_COMPATIBLE_SEALED)
+ strv[n++] = "sealed";
+ } else {
+ if (flags & HEADER_INCOMPATIBLE_COMPRESSED_XZ)
+ strv[n++] = "xz-compressed";
+ if (flags & HEADER_INCOMPATIBLE_COMPRESSED_LZ4)
+ strv[n++] = "lz4-compressed";
+ if (flags & HEADER_INCOMPATIBLE_COMPRESSED_ZSTD)
+ strv[n++] = "zstd-compressed";
+ if (flags & HEADER_INCOMPATIBLE_KEYED_HASH)
+ strv[n++] = "keyed-hash";
+ }
strv[n] = NULL;
assert(n < ELEMENTSOF(strv));
f->compress_xz = JOURNAL_HEADER_COMPRESSED_XZ(f->header);
f->compress_lz4 = JOURNAL_HEADER_COMPRESSED_LZ4(f->header);
+ f->compress_zstd = JOURNAL_HEADER_COMPRESSED_ZSTD(f->header);
f->seal = JOURNAL_HEADER_SEALED(f->header);
+ f->keyed_hash = JOURNAL_HEADER_KEYED_HASH(f->header);
+
return 0;
}
f->last_stat_usec = now(CLOCK_MONOTONIC);
- /* Refuse dealing with with files that aren't regular */
+ /* Refuse dealing with files that aren't regular */
r = stat_verify_regular(&f->last_stat);
if (r < 0)
return r;
return r;
}
-int journal_file_append_object(JournalFile *f, ObjectType type, uint64_t size, Object **ret, uint64_t *offset) {
+int journal_file_append_object(
+ JournalFile *f,
+ ObjectType type,
+ uint64_t size,
+ Object **ret,
+ uint64_t *ret_offset) {
+
int r;
uint64_t p;
Object *tail, *o;
assert(f->header);
assert(type > OBJECT_UNUSED && type < _OBJECT_TYPE_MAX);
assert(size >= sizeof(ObjectHeader));
- assert(offset);
- assert(ret);
r = journal_file_set_online(f);
if (r < 0)
f->header->tail_object_offset = htole64(p);
f->header->n_objects = htole64(le64toh(f->header->n_objects) + 1);
- *ret = o;
- *offset = p;
+ if (ret)
+ *ret = o;
+
+ if (ret_offset)
+ *ret_offset = p;
return 0;
}
if (s < DEFAULT_DATA_HASH_TABLE_SIZE)
s = DEFAULT_DATA_HASH_TABLE_SIZE;
- log_debug("Reserving %"PRIu64" entries in hash table.", s / sizeof(HashItem));
+ log_debug("Reserving %"PRIu64" entries in data hash table.", s / sizeof(HashItem));
r = journal_file_append_object(f,
OBJECT_DATA_HASH_TABLE,
* number should grow very slowly only */
s = DEFAULT_FIELD_HASH_TABLE_SIZE;
+ log_debug("Reserving %"PRIu64" entries in field hash table.", s / sizeof(HashItem));
+
r = journal_file_append_object(f,
OBJECT_FIELD_HASH_TABLE,
offsetof(Object, hash_table.items) + s,
return 0;
}
+static int next_hash_offset(
+ JournalFile *f,
+ uint64_t *p,
+ le64_t *next_hash_offset,
+ uint64_t *depth,
+ le64_t *header_max_depth) {
+
+ uint64_t nextp;
+
+ nextp = le64toh(READ_NOW(*next_hash_offset));
+ if (nextp > 0) {
+ if (nextp <= *p) /* Refuse going in loops */
+ return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
+ "Detected hash item loop in %s, refusing.", f->path);
+
+ (*depth)++;
+
+ /* If the depth of this hash chain is larger than all others we have seen so far, record it */
+ if (header_max_depth && f->writable)
+ *header_max_depth = htole64(MAX(*depth, le64toh(*header_max_depth)));
+ }
+
+ *p = nextp;
+ return 0;
+}
+
int journal_file_find_field_object_with_hash(
JournalFile *f,
const void *field, uint64_t size, uint64_t hash,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
- uint64_t p, osize, h, m;
+ uint64_t p, osize, h, m, depth = 0;
int r;
assert(f);
h = hash % m;
p = le64toh(f->field_hash_table[h].head_hash_offset);
-
while (p > 0) {
Object *o;
if (ret)
*ret = o;
- if (offset)
- *offset = p;
+ if (ret_offset)
+ *ret_offset = p;
return 1;
}
- p = le64toh(o->field.next_hash_offset);
+ r = next_hash_offset(
+ f,
+ &p,
+ &o->field.next_hash_offset,
+ &depth,
+ JOURNAL_HEADER_CONTAINS(f->header, field_hash_chain_depth) ? &f->header->field_hash_chain_depth : NULL);
+ if (r < 0)
+ return r;
}
return 0;
}
+uint64_t journal_file_hash_data(
+ JournalFile *f,
+ const void *data,
+ size_t sz) {
+
+ assert(f);
+ assert(data || sz == 0);
+
+ /* We try to unify our codebase on siphash, hence new-styled journal files utilizing the keyed hash
+ * function use siphash. Old journal files use the Jenkins hash. */
+
+ if (JOURNAL_HEADER_KEYED_HASH(f->header))
+ return siphash24(data, sz, f->header->file_id.bytes);
+
+ return jenkins_hash64(data, sz);
+}
+
int journal_file_find_field_object(
JournalFile *f,
const void *field, uint64_t size,
- Object **ret, uint64_t *offset) {
-
- uint64_t hash;
+ Object **ret, uint64_t *ret_offset) {
assert(f);
assert(field && size > 0);
- hash = hash64(field, size);
-
- return journal_file_find_field_object_with_hash(f,
- field, size, hash,
- ret, offset);
+ return journal_file_find_field_object_with_hash(
+ f,
+ field, size,
+ journal_file_hash_data(f, field, size),
+ ret, ret_offset);
}
int journal_file_find_data_object_with_hash(
JournalFile *f,
const void *data, uint64_t size, uint64_t hash,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
- uint64_t p, osize, h, m;
+ uint64_t p, osize, h, m, depth = 0;
int r;
assert(f);
goto next;
if (o->object.flags & OBJECT_COMPRESSION_MASK) {
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
uint64_t l;
size_t rsize = 0;
if (ret)
*ret = o;
- if (offset)
- *offset = p;
+ if (ret_offset)
+ *ret_offset = p;
return 1;
}
if (ret)
*ret = o;
- if (offset)
- *offset = p;
+ if (ret_offset)
+ *ret_offset = p;
return 1;
}
next:
- p = le64toh(o->data.next_hash_offset);
+ r = next_hash_offset(
+ f,
+ &p,
+ &o->data.next_hash_offset,
+ &depth,
+ JOURNAL_HEADER_CONTAINS(f->header, data_hash_chain_depth) ? &f->header->data_hash_chain_depth : NULL);
+ if (r < 0)
+ return r;
}
return 0;
int journal_file_find_data_object(
JournalFile *f,
const void *data, uint64_t size,
- Object **ret, uint64_t *offset) {
-
- uint64_t hash;
+ Object **ret, uint64_t *ret_offset) {
assert(f);
assert(data || size == 0);
- hash = hash64(data, size);
-
- return journal_file_find_data_object_with_hash(f,
- data, size, hash,
- ret, offset);
+ return journal_file_find_data_object_with_hash(
+ f,
+ data, size,
+ journal_file_hash_data(f, data, size),
+ ret, ret_offset);
}
static int journal_file_append_field(
JournalFile *f,
const void *field, uint64_t size,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
uint64_t hash, p;
uint64_t osize;
assert(f);
assert(field && size > 0);
- hash = hash64(field, size);
+ hash = journal_file_hash_data(f, field, size);
r = journal_file_find_field_object_with_hash(f, field, size, hash, &o, &p);
if (r < 0)
if (ret)
*ret = o;
- if (offset)
- *offset = p;
+ if (ret_offset)
+ *ret_offset = p;
return 0;
}
if (ret)
*ret = o;
- if (offset)
- *offset = p;
+ if (ret_offset)
+ *ret_offset = p;
return 0;
}
static int journal_file_append_data(
JournalFile *f,
const void *data, uint64_t size,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
uint64_t hash, p;
uint64_t osize;
assert(f);
assert(data || size == 0);
- hash = hash64(data, size);
+ hash = journal_file_hash_data(f, data, size);
r = journal_file_find_data_object_with_hash(f, data, size, hash, &o, &p);
if (r < 0)
if (ret)
*ret = o;
- if (offset)
- *offset = p;
+ if (ret_offset)
+ *ret_offset = p;
return 0;
}
o->data.hash = htole64(hash);
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
if (JOURNAL_FILE_COMPRESS(f) && size >= f->compress_threshold_bytes) {
size_t rsize = 0;
if (ret)
*ret = o;
- if (offset)
- *offset = p;
+ if (ret_offset)
+ *ret_offset = p;
return 0;
}
uint64_t xor_hash,
const EntryItem items[], unsigned n_items,
uint64_t *seqnum,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
uint64_t np;
uint64_t osize;
Object *o;
if (ret)
*ret = o;
- if (offset)
- *offset = np;
+ if (ret_offset)
+ *ret_offset = np;
return 0;
}
const sd_id128_t *boot_id,
const struct iovec iovec[], unsigned n_iovec,
uint64_t *seqnum,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
unsigned i;
EntryItem *items;
if (r < 0)
return r;
- xor_hash ^= le64toh(o->data.hash);
+ /* When calculating the XOR hash field, we need to take special care if the "keyed-hash"
+ * journal file flag is on. We use the XOR hash field to quickly determine the identity of a
+ * specific record, and give records with otherwise identical position (i.e. match in seqno,
+ * timestamp, …) a stable ordering. But for that we can't have it that the hash of the
+ * objects in each file is different since they are keyed. Hence let's calculate the Jenkins
+ * hash here for that. This also has the benefit that cursors for old and new journal files
+ * are completely identical (they include the XOR hash after all). For classic Jenkins-hash
+ * files things are easier, we can just take the value from the stored record directly. */
+
+ if (JOURNAL_HEADER_KEYED_HASH(f->header))
+ xor_hash ^= jenkins_hash64(iovec[i].iov_base, iovec[i].iov_len);
+ else
+ xor_hash ^= le64toh(o->data.hash);
+
items[i].object_offset = htole64(p);
items[i].hash = o->data.hash;
}
* times for rotating media. */
typesafe_qsort(items, n_iovec, entry_item_cmp);
- r = journal_file_append_entry_internal(f, ts, boot_id, xor_hash, items, n_iovec, seqnum, ret, offset);
+ r = journal_file_append_entry_internal(f, ts, boot_id, xor_hash, items, n_iovec, seqnum, ret, ret_offset);
/* If the memory mapping triggered a SIGBUS then we return an
* IO error and ignore the error code passed down to us, since
JournalFile *f,
uint64_t first,
uint64_t i,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
Object *o;
uint64_t p = 0, a, t = 0;
if (ret)
*ret = o;
- if (offset)
- *offset = p;
+ if (ret_offset)
+ *ret_offset = p;
return 1;
}
uint64_t extra,
uint64_t first,
uint64_t i,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
Object *o;
if (ret)
*ret = o;
- if (offset)
- *offset = extra;
+ if (ret_offset)
+ *ret_offset = extra;
return 1;
}
- return generic_array_get(f, first, i-1, ret, offset);
+ return generic_array_get(f, first, i-1, ret, ret_offset);
}
enum {
int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
direction_t direction,
Object **ret,
- uint64_t *offset,
- uint64_t *idx) {
+ uint64_t *ret_offset,
+ uint64_t *ret_idx) {
uint64_t a, p, t = 0, i = 0, last_p = 0, last_index = (uint64_t) -1;
bool subtract_one = false;
if (ret)
*ret = o;
- if (offset)
- *offset = p;
+ if (ret_offset)
+ *ret_offset = p;
- if (idx)
- *idx = t + i + (subtract_one ? -1 : 0);
+ if (ret_idx)
+ *ret_idx = t + i + (subtract_one ? -1 : 0);
return 1;
}
int (*test_object)(JournalFile *f, uint64_t p, uint64_t needle),
direction_t direction,
Object **ret,
- uint64_t *offset,
- uint64_t *idx) {
+ uint64_t *ret_offset,
+ uint64_t *ret_idx) {
int r;
bool step_back = false;
return 0;
}
- r = generic_array_bisect(f, first, n-1, needle, test_object, direction, ret, offset, idx);
+ r = generic_array_bisect(f, first, n-1, needle, test_object, direction, ret, ret_offset, ret_idx);
if (r == 0 && step_back)
goto found;
- if (r > 0 && idx)
- (*idx)++;
+ if (r > 0 && ret_idx)
+ (*ret_idx)++;
return r;
if (ret)
*ret = o;
- if (offset)
- *offset = extra;
+ if (ret_offset)
+ *ret_offset = extra;
- if (idx)
- *idx = 0;
+ if (ret_idx)
+ *ret_idx = 0;
return 1;
}
uint64_t seqnum,
direction_t direction,
Object **ret,
- uint64_t *offset) {
+ uint64_t *ret_offset) {
assert(f);
assert(f->header);
- return generic_array_bisect(f,
- le64toh(f->header->entry_array_offset),
- le64toh(f->header->n_entries),
- seqnum,
- test_object_seqnum,
- direction,
- ret, offset, NULL);
+ return generic_array_bisect(
+ f,
+ le64toh(f->header->entry_array_offset),
+ le64toh(f->header->n_entries),
+ seqnum,
+ test_object_seqnum,
+ direction,
+ ret, ret_offset, NULL);
}
static int test_object_realtime(JournalFile *f, uint64_t p, uint64_t needle) {
uint64_t realtime,
direction_t direction,
Object **ret,
- uint64_t *offset) {
+ uint64_t *ret_offset) {
assert(f);
assert(f->header);
- return generic_array_bisect(f,
- le64toh(f->header->entry_array_offset),
- le64toh(f->header->n_entries),
- realtime,
- test_object_realtime,
- direction,
- ret, offset, NULL);
+ return generic_array_bisect(
+ f,
+ le64toh(f->header->entry_array_offset),
+ le64toh(f->header->n_entries),
+ realtime,
+ test_object_realtime,
+ direction,
+ ret, ret_offset, NULL);
}
static int test_object_monotonic(JournalFile *f, uint64_t p, uint64_t needle) {
uint64_t monotonic,
direction_t direction,
Object **ret,
- uint64_t *offset) {
+ uint64_t *ret_offset) {
Object *o;
int r;
if (r == 0)
return -ENOENT;
- return generic_array_bisect_plus_one(f,
- le64toh(o->data.entry_offset),
- le64toh(o->data.entry_array_offset),
- le64toh(o->data.n_entries),
- monotonic,
- test_object_monotonic,
- direction,
- ret, offset, NULL);
+ return generic_array_bisect_plus_one(
+ f,
+ le64toh(o->data.entry_offset),
+ le64toh(o->data.entry_array_offset),
+ le64toh(o->data.n_entries),
+ monotonic,
+ test_object_monotonic,
+ direction,
+ ret, ret_offset, NULL);
}
void journal_file_reset_location(JournalFile *f) {
JournalFile *f,
uint64_t p,
direction_t direction,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
uint64_t i, n, ofs;
int r;
"%s: entry array not properly ordered at entry %" PRIu64,
f->path, i);
- if (offset)
- *offset = ofs;
+ if (ret_offset)
+ *ret_offset = ofs;
return 1;
}
Object *o, uint64_t p,
uint64_t data_offset,
direction_t direction,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
uint64_t i, n, ofs;
Object *d;
"%s data entry array not properly ordered at entry %" PRIu64,
f->path, i);
- if (offset)
- *offset = ofs;
+ if (ret_offset)
+ *ret_offset = ofs;
return 1;
}
uint64_t data_offset,
uint64_t p,
direction_t direction,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
int r;
Object *d;
if (r < 0)
return r;
- return generic_array_bisect_plus_one(f,
- le64toh(d->data.entry_offset),
- le64toh(d->data.entry_array_offset),
- le64toh(d->data.n_entries),
- p,
- test_object_offset,
- direction,
- ret, offset, NULL);
+ return generic_array_bisect_plus_one(
+ f,
+ le64toh(d->data.entry_offset),
+ le64toh(d->data.entry_array_offset),
+ le64toh(d->data.n_entries),
+ p,
+ test_object_offset,
+ direction,
+ ret, ret_offset, NULL);
}
int journal_file_move_to_entry_by_monotonic_for_data(
sd_id128_t boot_id,
uint64_t monotonic,
direction_t direction,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
Object *o, *d;
int r;
if (p == q) {
if (ret)
*ret = qo;
- if (offset)
- *offset = q;
+ if (ret_offset)
+ *ret_offset = q;
return 1;
}
uint64_t data_offset,
uint64_t seqnum,
direction_t direction,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
Object *d;
int r;
if (r < 0)
return r;
- return generic_array_bisect_plus_one(f,
- le64toh(d->data.entry_offset),
- le64toh(d->data.entry_array_offset),
- le64toh(d->data.n_entries),
- seqnum,
- test_object_seqnum,
- direction,
- ret, offset, NULL);
+ return generic_array_bisect_plus_one(
+ f,
+ le64toh(d->data.entry_offset),
+ le64toh(d->data.entry_array_offset),
+ le64toh(d->data.n_entries),
+ seqnum,
+ test_object_seqnum,
+ direction,
+ ret, ret_offset, NULL);
}
int journal_file_move_to_entry_by_realtime_for_data(
uint64_t data_offset,
uint64_t realtime,
direction_t direction,
- Object **ret, uint64_t *offset) {
+ Object **ret, uint64_t *ret_offset) {
Object *d;
int r;
if (r < 0)
return r;
- return generic_array_bisect_plus_one(f,
- le64toh(d->data.entry_offset),
- le64toh(d->data.entry_array_offset),
- le64toh(d->data.n_entries),
- realtime,
- test_object_realtime,
- direction,
- ret, offset, NULL);
+ return generic_array_bisect_plus_one(
+ f,
+ le64toh(d->data.entry_offset),
+ le64toh(d->data.entry_array_offset),
+ le64toh(d->data.n_entries),
+ realtime,
+ test_object_realtime,
+ direction,
+ ret, ret_offset, NULL);
}
void journal_file_dump(JournalFile *f) {
"Sequential number ID: %s\n"
"State: %s\n"
"Compatible flags:%s%s\n"
- "Incompatible flags:%s%s%s\n"
+ "Incompatible flags:%s%s%s%s%s\n"
"Header size: %"PRIu64"\n"
"Arena size: %"PRIu64"\n"
"Data hash table size: %"PRIu64"\n"
(le32toh(f->header->compatible_flags) & ~HEADER_COMPATIBLE_ANY) ? " ???" : "",
JOURNAL_HEADER_COMPRESSED_XZ(f->header) ? " COMPRESSED-XZ" : "",
JOURNAL_HEADER_COMPRESSED_LZ4(f->header) ? " COMPRESSED-LZ4" : "",
+ JOURNAL_HEADER_COMPRESSED_ZSTD(f->header) ? " COMPRESSED-ZSTD" : "",
+ JOURNAL_HEADER_KEYED_HASH(f->header) ? " KEYED-HASH" : "",
(le32toh(f->header->incompatible_flags) & ~HEADER_INCOMPATIBLE_ANY) ? " ???" : "",
le64toh(f->header->header_size),
le64toh(f->header->arena_size),
printf("Entry array objects: %"PRIu64"\n",
le64toh(f->header->n_entry_arrays));
+ if (JOURNAL_HEADER_CONTAINS(f->header, field_hash_chain_depth))
+ printf("Deepest field hash chain: %" PRIu64"\n",
+ f->header->field_hash_chain_depth);
+
+ if (JOURNAL_HEADER_CONTAINS(f->header, data_hash_chain_depth))
+ printf("Deepest data hash chain: %" PRIu64"\n",
+ f->header->data_hash_chain_depth);
+
if (fstat(f->fd, &st) >= 0)
printf("Disk usage: %s\n", format_bytes(bytes, sizeof(bytes), (uint64_t) st.st_blocks * 512ULL));
}
.prot = prot_from_flags(flags),
.writable = (flags & O_ACCMODE) != O_RDONLY,
-#if HAVE_LZ4
+#if HAVE_ZSTD
+ .compress_zstd = compress,
+#elif HAVE_LZ4
.compress_lz4 = compress,
#elif HAVE_XZ
.compress_xz = compress,
#endif
};
+ /* We turn on keyed hashes by default, but provide an environment variable to turn them off, if
+ * people really want that */
+ r = getenv_bool("SYSTEMD_JOURNAL_KEYED_HASH");
+ if (r < 0) {
+ if (r != -ENXIO)
+ log_debug_errno(r, "Failed to parse $SYSTEMD_JOURNAL_KEYED_HASH environment variable, ignoring.");
+ f->keyed_hash = true;
+ } else
+ f->keyed_hash = r;
+
if (DEBUG_LOGGING) {
- static int last_seal = -1, last_compress = -1;
+ static int last_seal = -1, last_compress = -1, last_keyed_hash = -1;
static uint64_t last_bytes = UINT64_MAX;
char bytes[FORMAT_BYTES_MAX];
if (last_seal != f->seal ||
+ last_keyed_hash != f->keyed_hash ||
last_compress != JOURNAL_FILE_COMPRESS(f) ||
last_bytes != f->compress_threshold_bytes) {
- log_debug("Journal effective settings seal=%s compress=%s compress_threshold_bytes=%s",
- yes_no(f->seal), yes_no(JOURNAL_FILE_COMPRESS(f)),
+ log_debug("Journal effective settings seal=%s keyed_hash=%s compress=%s compress_threshold_bytes=%s",
+ yes_no(f->seal), yes_no(f->keyed_hash), yes_no(JOURNAL_FILE_COMPRESS(f)),
format_bytes(bytes, sizeof bytes, f->compress_threshold_bytes));
last_seal = f->seal;
+ last_keyed_hash = f->keyed_hash;
last_compress = JOURNAL_FILE_COMPRESS(f);
last_bytes = f->compress_threshold_bytes;
}
return -E2BIG;
if (o->object.flags & OBJECT_COMPRESSION_MASK) {
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
size_t rsize = 0;
r = decompress_blob(o->object.flags & OBJECT_COMPRESSION_MASK,
if (r < 0)
return r;
- xor_hash ^= le64toh(u->data.hash);
+ if (JOURNAL_HEADER_KEYED_HASH(to->header))
+ xor_hash ^= jenkins_hash64(data, l);
+ else
+ xor_hash ^= le64toh(u->data.hash);
+
items[i].object_offset = htole64(h);
items[i].hash = u->data.hash;
return true;
}
- /* Let's check if the hash tables grew over a certain fill
- * level (75%, borrowing this value from Java's hash table
- * implementation), and if so suggest a rotation. To calculate
- * the fill level we need the n_data field, which only exists
- * in newer versions. */
+ /* Let's check if the hash tables grew over a certain fill level (75%, borrowing this value from
+ * Java's hash table implementation), and if so suggest a rotation. To calculate the fill level we
+ * need the n_data field, which only exists in newer versions. */
if (JOURNAL_HEADER_CONTAINS(f->header, n_data))
if (le64toh(f->header->n_data) * 4ULL > (le64toh(f->header->data_hash_table_size) / sizeof(HashItem)) * 3ULL) {
return true;
}
+ /* If there are too many hash collisions somebody is most likely playing games with us. Hence, if our
+ * longest chain is longer than some threshold, let's suggest rotation. */
+ if (JOURNAL_HEADER_CONTAINS(f->header, data_hash_chain_depth) &&
+ le64toh(f->header->data_hash_chain_depth) > HASH_CHAIN_DEPTH_MAX) {
+ log_debug("Data hash table of %s has deepest hash chain of length %" PRIu64 ", suggesting rotation.",
+ f->path, le64toh(f->header->data_hash_chain_depth));
+ return true;
+ }
+
+ if (JOURNAL_HEADER_CONTAINS(f->header, field_hash_chain_depth) &&
+ le64toh(f->header->field_hash_chain_depth) > HASH_CHAIN_DEPTH_MAX) {
+ log_debug("Field hash table of %s has deepest hash chain of length at %" PRIu64 ", suggesting rotation.",
+ f->path, le64toh(f->header->field_hash_chain_depth));
+ return true;
+ }
+
/* Are the data objects properly indexed by field objects? */
if (JOURNAL_HEADER_CONTAINS(f->header, n_data) &&
JOURNAL_HEADER_CONTAINS(f->header, n_fields) &&
bool writable:1;
bool compress_xz:1;
bool compress_lz4:1;
+ bool compress_zstd:1;
bool seal:1;
bool defrag_on_close:1;
bool close_fd:1;
bool archive:1;
+ bool keyed_hash:1;
direction_t last_direction;
LocationType location_type;
unsigned last_seen_generation;
uint64_t compress_threshold_bytes;
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
void *compress_buffer;
size_t compress_buffer_size;
#endif
(le64toh((h)->header_size) >= offsetof(Header, field) + sizeof((h)->field))
#define JOURNAL_HEADER_SEALED(h) \
- (!!(le32toh((h)->compatible_flags) & HEADER_COMPATIBLE_SEALED))
+ FLAGS_SET(le32toh((h)->compatible_flags), HEADER_COMPATIBLE_SEALED)
#define JOURNAL_HEADER_COMPRESSED_XZ(h) \
- (!!(le32toh((h)->incompatible_flags) & HEADER_INCOMPATIBLE_COMPRESSED_XZ))
+ FLAGS_SET(le32toh((h)->incompatible_flags), HEADER_INCOMPATIBLE_COMPRESSED_XZ)
#define JOURNAL_HEADER_COMPRESSED_LZ4(h) \
- (!!(le32toh((h)->incompatible_flags) & HEADER_INCOMPATIBLE_COMPRESSED_LZ4))
+ FLAGS_SET(le32toh((h)->incompatible_flags), HEADER_INCOMPATIBLE_COMPRESSED_LZ4)
+
+#define JOURNAL_HEADER_COMPRESSED_ZSTD(h) \
+ FLAGS_SET(le32toh((h)->incompatible_flags), HEADER_INCOMPATIBLE_COMPRESSED_ZSTD)
+
+#define JOURNAL_HEADER_KEYED_HASH(h) \
+ FLAGS_SET(le32toh((h)->incompatible_flags), HEADER_INCOMPATIBLE_KEYED_HASH)
int journal_file_move_to_object(JournalFile *f, ObjectType type, uint64_t offset, Object **ret);
static inline bool JOURNAL_FILE_COMPRESS(JournalFile *f) {
assert(f);
- return f->compress_xz || f->compress_lz4;
+ return f->compress_xz || f->compress_lz4 || f->compress_zstd;
}
+
+uint64_t journal_file_hash_data(JournalFile *f, const void *data, size_t sz);
/* For concrete matches */
char *data;
size_t size;
- le64_t le_hash;
+ uint64_t hash; /* old-style jenkins hash. New-style siphash is different per file, hence won't be cached here */
/* For terms */
LIST_HEAD(Match, matches);
return r;
}
- h2 = hash64(b, b_size);
+ h2 = journal_file_hash_data(f, b, b_size);
} else
- h2 = hash64(o->data.payload, le64toh(o->object.size) - offsetof(Object, data.payload));
+ h2 = journal_file_hash_data(f, o->data.payload, le64toh(o->object.size) - offsetof(Object, data.payload));
if (h1 != h2) {
error(offset, "Invalid hash (%08"PRIx64" vs. %08"PRIx64, h1, h2);
goto fail;
}
- if ((o->object.flags & OBJECT_COMPRESSED_XZ) &&
- (o->object.flags & OBJECT_COMPRESSED_LZ4)) {
- error(p, "Objected with double compression");
+ if (!!(o->object.flags & OBJECT_COMPRESSED_XZ) +
+ !!(o->object.flags & OBJECT_COMPRESSED_LZ4) +
+ !!(o->object.flags & OBJECT_COMPRESSED_ZSTD) > 1) {
+ error(p, "Object has multiple compression flags set");
r = -EINVAL;
goto fail;
}
goto fail;
}
+ if ((o->object.flags & OBJECT_COMPRESSED_ZSTD) && !JOURNAL_HEADER_COMPRESSED_ZSTD(f->header)) {
+ error(p, "ZSTD compressed object in file without ZSTD compression");
+ r = -EBADMSG;
+ goto fail;
+ }
+
switch (o->object.type) {
case OBJECT_DATA:
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Bad --facility= argument \"%s\".", fac);
- r = set_ensure_allocated(&arg_facilities, NULL);
- if (r < 0)
- return log_oom();
-
- r = set_put(arg_facilities, INT_TO_PTR(num));
- if (r < 0)
+ if (set_ensure_put(&arg_facilities, NULL, INT_TO_PTR(num)) < 0)
return log_oom();
}
int n_shown = 0, r, poll_fd = -1;
setlocale(LC_ALL, "");
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
/* Increase max number of open files if we can, we might needs this when browsing journal files, which might be
* split up into many files. */
if (IN_SET(errno, EAGAIN, EINTR, EPIPE))
return 0;
- return log_error_errno(errno, "Failed to read from kernel: %m");
+ return log_error_errno(errno, "Failed to read from /dev/kmsg: %m");
}
dev_kmsg_record(s, buffer, l);
uint32_t jenkins_hashbig(const void *key, size_t length, uint32_t initval) _pure_;
-static inline uint64_t hash64(const void *data, size_t length) {
+static inline uint64_t jenkins_hash64(const void *data, size_t length) {
uint32_t a = 0, b = 0;
jenkins_hashlittle2(data, length, &a, &b);
_public_ int sd_journal_add_match(sd_journal *j, const void *data, size_t size) {
Match *l3, *l4, *add_here = NULL, *m;
- le64_t le_hash;
+ uint64_t hash;
assert_return(j, -EINVAL);
assert_return(!journal_pid_changed(j), -ECHILD);
assert(j->level1->type == MATCH_OR_TERM);
assert(j->level2->type == MATCH_AND_TERM);
- le_hash = htole64(hash64(data, size));
+ /* Old-style Jenkins (unkeyed) hashing only here. We do not cover new-style siphash (keyed) hashing
+ * here, since it's different for each file, and thus can't be pre-calculated in the Match object. */
+ hash = jenkins_hash64(data, size);
LIST_FOREACH(matches, l3, j->level2->matches) {
assert(l3->type == MATCH_OR_TERM);
/* Exactly the same match already? Then ignore
* this addition */
- if (l4->le_hash == le_hash &&
+ if (l4->hash == hash &&
l4->size == size &&
memcmp(l4->data, data, size) == 0)
return 0;
if (!m)
goto fail;
- m->le_hash = le_hash;
+ m->hash = hash;
m->size = size;
m->data = memdup(data, size);
if (!m->data)
assert(f);
if (m->type == MATCH_DISCRETE) {
- uint64_t dp;
+ uint64_t dp, hash;
+
+ /* If the keyed hash logic is used, we need to calculate the hash fresh per file. Otherwise
+ * we can use what we pre-calculated. */
+ if (JOURNAL_HEADER_KEYED_HASH(f->header))
+ hash = journal_file_hash_data(f, m->data, m->size);
+ else
+ hash = m->hash;
- r = journal_file_find_data_object_with_hash(f, m->data, m->size, le64toh(m->le_hash), NULL, &dp);
+ r = journal_file_find_data_object_with_hash(f, m->data, m->size, hash, NULL, &dp);
if (r <= 0)
return r;
assert(f);
if (m->type == MATCH_DISCRETE) {
- uint64_t dp;
+ uint64_t dp, hash;
+
+ if (JOURNAL_HEADER_KEYED_HASH(f->header))
+ hash = journal_file_hash_data(f, m->data, m->size);
+ else
+ hash = m->hash;
- r = journal_file_find_data_object_with_hash(f, m->data, m->size, le64toh(m->le_hash), NULL, &dp);
+ r = journal_file_find_data_object_with_hash(f, m->data, m->size, hash, NULL, &dp);
if (r <= 0)
return r;
compression = o->object.flags & OBJECT_COMPRESSION_MASK;
if (compression) {
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
r = decompress_startswith(compression,
o->data.payload, l,
&f->compress_buffer, &f->compress_buffer_size,
compression = o->object.flags & OBJECT_COMPRESSION_MASK;
if (compression) {
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
size_t rsize;
int r;
typedef int (decompress_t)(const void *src, uint64_t src_size,
void **dst, size_t *dst_alloc_size, size_t* dst_size, size_t dst_max);
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
static usec_t arg_duration;
static size_t arg_start;
#endif
int main(int argc, char *argv[]) {
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
test_setup_logging(LOG_INFO);
if (argc >= 2) {
#endif
#if HAVE_LZ4
test_compress_decompress("LZ4", i, compress_blob_lz4, decompress_blob_lz4);
+#endif
+#if HAVE_ZSTD
+ test_compress_decompress("ZSTD", i, compress_blob_zstd, decompress_blob_zstd);
#endif
}
return 0;
typedef int (compress_stream_t)(int fdf, int fdt, uint64_t max_bytes);
typedef int (decompress_stream_t)(int fdf, int fdt, uint64_t max_size);
-#if HAVE_XZ || HAVE_LZ4 || HAVE_ZSTD
+#if HAVE_COMPRESSION
_unused_ static void test_compress_decompress(const char *compression,
compress_blob_t compress,
decompress_blob_t decompress,
#endif
int main(int argc, char *argv[]) {
-#if HAVE_XZ || HAVE_LZ4 || HAVE_ZSTD
+#if HAVE_COMPRESSION
_unused_ const char text[] =
"text\0foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF"
"foofoofoofoo AAAA aaaaaaaaa ghost busters barbarbar FFF";
#endif
#if HAVE_ZSTD
+ test_compress_decompress("ZSTD", compress_blob_zstd, decompress_blob_zstd,
+ text, sizeof(text), false);
+ test_compress_decompress("ZSTD", compress_blob_zstd, decompress_blob_zstd,
+ data, sizeof(data), true);
+
+ test_decompress_startswith("ZSTD",
+ compress_blob_zstd, decompress_startswith_zstd,
+ text, sizeof(text), false);
+ test_decompress_startswith("ZSTD",
+ compress_blob_zstd, decompress_startswith_zstd,
+ data, sizeof(data), true);
+ test_decompress_startswith("ZSTD",
+ compress_blob_zstd, decompress_startswith_zstd,
+ huge, HUGE_SIZE, true);
+
test_compress_stream("ZSTD", "zstdcat",
compress_stream_zstd, decompress_stream_zstd, srcfile);
+
+ test_decompress_startswith_short("ZSTD", compress_blob_zstd, decompress_startswith_zstd);
#else
log_info("/* ZSTD test skipped */");
#endif
assert_se(i == N_ENTRIES);
}
-int main(int argc, char *argv[]) {
+static void run_test(void) {
JournalFile *one, *two, *three;
char t[] = "/var/tmp/journal-stream-XXXXXX";
unsigned i;
size_t l;
dual_timestamp previous_ts = DUAL_TIMESTAMP_NULL;
- /* journal_file_open requires a valid machine id */
- if (access("/etc/machine-id", F_OK) != 0)
- return log_tests_skipped("/etc/machine-id not found");
-
- test_setup_logging(LOG_DEBUG);
-
assert_se(mkdtemp(t));
assert_se(chdir(t) >= 0);
(void) chattr_path(t, FS_NOCOW_FL, FS_NOCOW_FL, NULL);
printf("%.*s\n", (int) l, (const char*) data);
assert_se(rm_rf(t, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0);
+}
+
+int main(int argc, char *argv[]) {
+
+ /* journal_file_open requires a valid machine id */
+ if (access("/etc/machine-id", F_OK) != 0)
+ return log_tests_skipped("/etc/machine-id not found");
+
+ test_setup_logging(LOG_DEBUG);
+
+ /* Run this test twice. Once with old hashing and once with new hashing */
+ assert_se(setenv("SYSTEMD_JOURNAL_KEYED_HASH", "1", 1) >= 0);
+ run_test();
+
+ assert_se(setenv("SYSTEMD_JOURNAL_KEYED_HASH", "0", 1) >= 0);
+ run_test();
return 0;
}
(void) journal_file_close(f4);
}
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
static bool check_compressed(uint64_t compress_threshold, uint64_t data_size) {
dual_timestamp ts;
JournalFile *f;
test_non_empty();
test_empty();
-#if HAVE_XZ || HAVE_LZ4
+#if HAVE_COMPRESSION
test_min_compress_size();
#endif
int dhcp_lease_set_default_subnet_mask(sd_dhcp_lease *lease);
int dhcp_lease_set_client_id(sd_dhcp_lease *lease, const void *client_id, size_t client_id_len);
-
-int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file);
-int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file);
int dhcp6_option_parse_domainname(const uint8_t *optval, uint16_t optlen,
char ***str_arr);
-int dhcp6_network_bind_udp_socket(int index, struct in6_addr *address);
+int dhcp6_network_bind_udp_socket(int ifindex, struct in6_addr *address);
int dhcp6_network_send_udp_socket(int s, struct in6_addr *address,
const void *packet, size_t len);
#include "fd-util.h"
#include "socket-util.h"
-int dhcp6_network_bind_udp_socket(int index, struct in6_addr *local_address) {
+int dhcp6_network_bind_udp_socket(int ifindex, struct in6_addr *local_address) {
union sockaddr_union src = {
.in6.sin6_family = AF_INET6,
.in6.sin6_port = htobe16(DHCP6_PORT_CLIENT),
- .in6.sin6_scope_id = index,
+ .in6.sin6_scope_id = ifindex,
};
_cleanup_close_ int s = -1;
int r;
- assert(index > 0);
+ assert(ifindex > 0);
assert(local_address);
src.in6.sin6_addr = *local_address;
return TAKE_FD(s);
}
-int icmp6_bind_router_solicitation(int index) {
+int icmp6_bind_router_solicitation(int ifindex) {
struct icmp6_filter filter = {};
struct ipv6_mreq mreq = {
.ipv6mr_multiaddr = IN6ADDR_ALL_NODES_MULTICAST_INIT,
- .ipv6mr_interface = index,
+ .ipv6mr_interface = ifindex,
};
ICMP6_FILTER_SETBLOCKALL(&filter);
return icmp6_bind_router_message(&filter, &mreq);
}
-int icmp6_bind_router_advertisement(int index) {
+int icmp6_bind_router_advertisement(int ifindex) {
struct icmp6_filter filter = {};
struct ipv6_mreq mreq = {
.ipv6mr_multiaddr = IN6ADDR_ALL_ROUTERS_MULTICAST_INIT,
- .ipv6mr_interface = index,
+ .ipv6mr_interface = ifindex,
};
ICMP6_FILTER_SETBLOCKALL(&filter);
{ { { 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } } }
-int icmp6_bind_router_solicitation(int index);
-int icmp6_bind_router_advertisement(int index);
+int icmp6_bind_router_solicitation(int ifindex);
+int icmp6_bind_router_advertisement(int ifindex);
int icmp6_send_router_solicitation(int s, const struct ether_addr *ether_addr);
int icmp6_receive(int fd, void *buffer, size_t size, struct in6_addr *dst,
triple_timestamp *timestamp);
/* don't include "dhcp-lease-internal.h" as it causes conflicts between netinet/ip.h and linux/ip.h */
struct sd_dhcp_route;
+struct sd_dhcp_lease;
void serialize_dhcp_routes(FILE *f, const char *key, sd_dhcp_route **routes, size_t size);
int deserialize_dhcp_routes(struct sd_dhcp_route **ret, size_t *ret_size, size_t *ret_allocated, const char *string);
/* It is not necessary to add deserialize_dhcp_option(). Use unhexmem() instead. */
int serialize_dhcp_option(FILE *f, const char *key, const void *data, size_t size);
+
+int dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file);
+int dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file);
/* For hardware types, log debug message about unexpected data length.
*
* Note that infiniband's INFINIBAND_ALEN is 20 bytes long, but only
- * last last 8 bytes of the address are stable and suitable to put into
+ * the last 8 bytes of the address are stable and suitable to put into
* the client-id. The caller is advised to account for that. */
if ((type == ARPHRD_ETHER && data_len != ETH_ALEN) ||
(type == ARPHRD_INFINIBAND && data_len != 8))
sd_dhcp_client *client = userdata;
DHCP_CLIENT_DONT_DESTROY(client);
- client->state = DHCP_STATE_RENEWING;
+ if (client->lease)
+ client->state = DHCP_STATE_RENEWING;
+ else if (client->state != DHCP_STATE_INIT)
+ client->state = DHCP_STATE_INIT_REBOOT;
client->attempt = 0;
return client_initialize_time_events(client);
assert_return(client, -EINVAL);
assert_return(client->fd >= 0, -EINVAL);
+ if (IN_SET(client->state, DHCP_STATE_INIT, DHCP_STATE_INIT_REBOOT, DHCP_STATE_STOPPED))
+ return 0;
+
client->start_delay = 0;
client->attempt = 1;
client->state = DHCP_STATE_RENEWING;
"ADDRESS", &address,
"ROUTER", &router,
"NETMASK", &netmask,
- "SERVER_IDENTIFIER", &server_address,
+ "SERVER_ADDRESS", &server_address,
"NEXT_SERVER", &next_server,
"BROADCAST", &broadcast,
"DNS", &dns,
int sd_dhcp6_client_set_ifindex(sd_dhcp6_client *client, int ifindex) {
assert_return(client, -EINVAL);
- assert_return(ifindex >= -1, -EINVAL);
+ assert_return(ifindex > 0, -EINVAL);
assert_return(IN_SET(client->state, DHCP6_STATE_STOPPED), -EBUSY);
client->ifindex = ifindex;
break;
}
- _fallthrough_; /* for Soliciation Rapid Commit option check */
+ _fallthrough_; /* for Solicitation Rapid Commit option check */
case DHCP6_STATE_REQUEST:
case DHCP6_STATE_RENEW:
case DHCP6_STATE_REBIND:
_public_ int sd_radv_set_ifindex(sd_radv *ra, int ifindex) {
assert_return(ra, -EINVAL);
- assert_return(ifindex >= -1, -EINVAL);
+ assert_return(ifindex > 0, -EINVAL);
if (ra->state != SD_RADV_STATE_IDLE)
return -EBUSY;
}
int dhcp_network_bind_raw_socket(
- int index,
+ int ifindex,
union sockaddr_union *link,
uint32_t id,
const uint8_t *addr, size_t addr_len,
static sd_event_source *hangcheck;
static int test_dhcp_fd[2];
-static int test_index = 42;
+static int test_ifindex = 42;
static int test_client_message_num;
static be32_t test_iaid = 0;
static uint8_t test_duid[14] = { };
assert_se(sd_dhcp6_client_set_ifindex(client, 15) == 0);
assert_se(sd_dhcp6_client_set_ifindex(client, -42) == -EINVAL);
- assert_se(sd_dhcp6_client_set_ifindex(client, -1) == 0);
+ assert_se(sd_dhcp6_client_set_ifindex(client, -1) == -EINVAL);
assert_se(sd_dhcp6_client_set_ifindex(client, 42) >= 0);
assert_se(sd_dhcp6_client_set_mac(client, (const uint8_t *) &mac_addr,
return len;
}
-int dhcp6_network_bind_udp_socket(int index, struct in6_addr *local_address) {
- assert_se(index == test_index);
+int dhcp6_network_bind_udp_socket(int ifindex, struct in6_addr *local_address) {
+ assert_se(ifindex == test_ifindex);
if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_dhcp_fd) < 0)
return -errno;
assert_se(sd_dhcp6_client_attach_event(client, e, 0) >= 0);
- assert_se(sd_dhcp6_client_set_ifindex(client, test_index) == 0);
+ assert_se(sd_dhcp6_client_set_ifindex(client, test_ifindex) == 0);
assert_se(sd_dhcp6_client_set_mac(client, (const uint8_t *) &mac_addr,
sizeof (mac_addr),
ARPHRD_ETHER) >= 0);
return arp_network_send_raw_socket(fd, ifindex, &ea);
}
-int arp_network_bind_raw_socket(int index, be32_t address, const struct ether_addr *eth_mac) {
+int arp_network_bind_raw_socket(int ifindex, be32_t address, const struct ether_addr *eth_mac) {
if (socketpair(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) < 0)
return -errno;
assert_se(ra);
assert_se(sd_radv_set_ifindex(NULL, 0) < 0);
- assert_se(sd_radv_set_ifindex(ra, 0) >= 0);
- assert_se(sd_radv_set_ifindex(ra, -1) >= 0);
+ assert_se(sd_radv_set_ifindex(ra, 0) < 0);
+ assert_se(sd_radv_set_ifindex(ra, -1) < 0);
assert_se(sd_radv_set_ifindex(ra, -2) < 0);
assert_se(sd_radv_set_ifindex(ra, 42) >= 0);
assert_se(!ra);
}
-int icmp6_bind_router_solicitation(int index) {
+int icmp6_bind_router_solicitation(int ifindex) {
return -ENOSYS;
}
-int icmp6_bind_router_advertisement(int index) {
- assert_se(index == 42);
+int icmp6_bind_router_advertisement(int ifindex) {
+ assert_se(ifindex == 42);
return test_fd[1];
}
return 0;
}
-int icmp6_bind_router_solicitation(int index) {
- assert_se(index == 42);
+int icmp6_bind_router_solicitation(int ifindex) {
+ assert_se(ifindex == 42);
if (socketpair(AF_UNIX, SOCK_DGRAM | SOCK_CLOEXEC | SOCK_NONBLOCK, 0, test_fd) < 0)
return -errno;
return test_fd[0];
}
-int icmp6_bind_router_advertisement(int index) {
-
+int icmp6_bind_router_advertisement(int ifindex) {
return -ENOSYS;
}
SD_BUS_ERROR_MAP(BUS_ERROR_BAD_PASSWORD_AND_NO_TOKEN, EBADSLT),
SD_BUS_ERROR_MAP(BUS_ERROR_TOKEN_PIN_NEEDED, ENOANO),
SD_BUS_ERROR_MAP(BUS_ERROR_TOKEN_PROTECTED_AUTHENTICATION_PATH_NEEDED, ERFKILL),
+ SD_BUS_ERROR_MAP(BUS_ERROR_TOKEN_USER_PRESENCE_NEEDED, EMEDIUMTYPE),
+ SD_BUS_ERROR_MAP(BUS_ERROR_TOKEN_ACTION_TIMEOUT, ENOSTR),
SD_BUS_ERROR_MAP(BUS_ERROR_TOKEN_PIN_LOCKED, EOWNERDEAD),
SD_BUS_ERROR_MAP(BUS_ERROR_TOKEN_BAD_PIN, ENOLCK),
SD_BUS_ERROR_MAP(BUS_ERROR_TOKEN_BAD_PIN_FEW_TRIES_LEFT, ETOOMANYREFS),
#define BUS_ERROR_BAD_PASSWORD_AND_NO_TOKEN "org.freedesktop.home1.BadPasswordAndNoToken"
#define BUS_ERROR_TOKEN_PIN_NEEDED "org.freedesktop.home1.TokenPinNeeded"
#define BUS_ERROR_TOKEN_PROTECTED_AUTHENTICATION_PATH_NEEDED "org.freedesktop.home1.TokenProtectedAuthenticationPathNeeded"
+#define BUS_ERROR_TOKEN_USER_PRESENCE_NEEDED "org.freedesktop.home1.TokenUserPresenceNeeded"
+#define BUS_ERROR_TOKEN_ACTION_TIMEOUT "org.freedesktop.home1.TokenActionTimeout"
#define BUS_ERROR_TOKEN_PIN_LOCKED "org.freedesktop.home1.TokenPinLocked"
#define BUS_ERROR_TOKEN_BAD_PIN "org.freedesktop.home1.BadPin"
#define BUS_ERROR_TOKEN_BAD_PIN_FEW_TRIES_LEFT "org.freedesktop.home1.BadPinFewTriesLeft"
unsigned last_iteration;
- /* Don't dispatch this slot with with messages that arrived in any iteration before or at the this
+ /* Don't dispatch this slot with messages that arrived in any iteration before or at the this
* one. We use this to ensure that matches don't apply "retroactively" and thus can confuse the
* caller: matches will only match incoming messages from the moment on the match was installed. */
uint64_t after;
#include "bus-internal.h"
#include "bus-track.h"
#include "bus-util.h"
+#include "string-util.h"
struct track_item {
unsigned n_ref;
}
_public_ int sd_device_monitor_filter_add_match_tag(sd_device_monitor *m, const char *tag) {
- _cleanup_free_ char *t = NULL;
- int r;
-
assert_return(m, -EINVAL);
assert_return(tag, -EINVAL);
- t = strdup(tag);
- if (!t)
- return -ENOMEM;
-
- r = set_ensure_allocated(&m->tag_filter, &string_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(m->tag_filter, t);
- if (r == -EEXIST)
- return 0;
- if (r < 0)
- return r;
-
- TAKE_PTR(t);
- m->filter_uptodate = false;
-
- return 0;
+ int r = set_put_strdup(&m->tag_filter, tag);
+ if (r > 0)
+ m->filter_uptodate = false;
+ return r;
}
_public_ int sd_device_monitor_filter_remove(sd_device_monitor *m) {
return key;
}
-static int device_sysattrs_read_all(sd_device *device) {
+static int device_sysattrs_read_all_internal(sd_device *device, const char *subdir) {
+ _cleanup_free_ char *path_dir = NULL;
_cleanup_closedir_ DIR *dir = NULL;
- const char *syspath;
struct dirent *dent;
+ const char *syspath;
int r;
- assert(device);
-
- if (device->sysattrs_read)
- return 0;
-
r = sd_device_get_syspath(device, &syspath);
if (r < 0)
return r;
- dir = opendir(syspath);
+ if (subdir) {
+ _cleanup_free_ char *p = NULL;
+
+ p = path_join(syspath, subdir, "uevent");
+ if (!p)
+ return -ENOMEM;
+
+ if (access(p, F_OK) >= 0)
+ /* this is a child device, skipping */
+ return 0;
+ if (errno != ENOENT) {
+ log_device_debug_errno(device, errno, "sd-device: Failed to stat %s, ignoring subdir: %m", p);
+ return 0;
+ }
+
+ path_dir = path_join(syspath, subdir);
+ if (!path_dir)
+ return -ENOMEM;
+ }
+
+ dir = opendir(path_dir ?: syspath);
if (!dir)
return -errno;
FOREACH_DIRENT_ALL(dent, dir, return -errno) {
- _cleanup_free_ char *path = NULL;
+ _cleanup_free_ char *path = NULL, *p = NULL;
struct stat statbuf;
- /* only handle symlinks and regular files */
- if (!IN_SET(dent->d_type, DT_LNK, DT_REG))
+ if (dot_or_dot_dot(dent->d_name))
+ continue;
+
+ /* only handle symlinks, regular files, and directories */
+ if (!IN_SET(dent->d_type, DT_LNK, DT_REG, DT_DIR))
+ continue;
+
+ if (subdir) {
+ p = path_join(subdir, dent->d_name);
+ if (!p)
+ return -ENOMEM;
+ }
+
+ if (dent->d_type == DT_DIR) {
+ /* read subdirectory */
+ r = device_sysattrs_read_all_internal(device, p ?: dent->d_name);
+ if (r < 0)
+ return r;
+
continue;
+ }
- path = path_join(syspath, dent->d_name);
+ path = path_join(syspath, p ?: dent->d_name);
if (!path)
return -ENOMEM;
if (!(statbuf.st_mode & S_IRUSR))
continue;
- r = set_put_strdup(&device->sysattrs, dent->d_name);
+ r = set_put_strdup(&device->sysattrs, p ?: dent->d_name);
if (r < 0)
return r;
}
+ return 0;
+}
+
+static int device_sysattrs_read_all(sd_device *device) {
+ int r;
+
+ assert(device);
+
+ if (device->sysattrs_read)
+ return 0;
+
+ r = device_sysattrs_read_all_internal(device, NULL);
+ if (r < 0)
+ return r;
+
device->sysattrs_read = true;
return 0;
assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
assert_return(!event_pid_changed(e), -ECHILD);
- r = set_ensure_allocated(&e->post_sources, NULL);
- if (r < 0)
- return r;
-
s = source_new(e, !ret, SOURCE_POST);
if (!s)
return -ENOMEM;
s->userdata = userdata;
s->enabled = SD_EVENT_ON;
- r = set_put(e->post_sources, s);
+ r = set_ensure_put(&e->post_sources, NULL, s);
if (r < 0)
return r;
+ assert(r > 0);
if (ret)
*ret = s;
[IFLA_IPVLAN_FLAGS] = { .type = NETLINK_TYPE_U16 },
};
+static const NLType rtnl_macvlan_macaddr_types[] = {
+ [IFLA_MACVLAN_MACADDR] = { .type = NETLINK_TYPE_ETHER_ADDR },
+};
+
+static const NLTypeSystem rtnl_macvlan_macaddr_type_system = {
+ .count = ELEMENTSOF(rtnl_macvlan_macaddr_types),
+ .types = rtnl_macvlan_macaddr_types,
+};
+
static const NLType rtnl_link_info_data_macvlan_types[] = {
[IFLA_MACVLAN_MODE] = { .type = NETLINK_TYPE_U32 },
[IFLA_MACVLAN_FLAGS] = { .type = NETLINK_TYPE_U16 },
+ [IFLA_MACVLAN_MACADDR_MODE] = { .type = NETLINK_TYPE_U32 },
+ [IFLA_MACVLAN_MACADDR_DATA] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_macvlan_macaddr_type_system },
};
static const NLType rtnl_link_info_data_bridge_types[] = {
.types = rtnl_prop_list_types,
};
+static const NLType rtnl_vf_vlan_list_types[] = {
+ [IFLA_VF_VLAN_INFO] = { .size = sizeof(struct ifla_vf_vlan_info) },
+};
+
+static const NLTypeSystem rtnl_vf_vlan_type_system = {
+ .count = ELEMENTSOF(rtnl_vf_vlan_list_types),
+ .types = rtnl_vf_vlan_list_types,
+};
+
+static const NLType rtnl_vf_vlan_info_types[] = {
+ [IFLA_VF_MAC] = { .size = sizeof(struct ifla_vf_mac) },
+ [IFLA_VF_VLAN] = { .size = sizeof(struct ifla_vf_vlan) },
+ [IFLA_VF_VLAN_LIST] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_vf_vlan_type_system},
+ [IFLA_VF_TX_RATE] = { .size = sizeof(struct ifla_vf_tx_rate) },
+ [IFLA_VF_SPOOFCHK] = { .size = sizeof(struct ifla_vf_spoofchk) },
+ [IFLA_VF_RATE] = { .size = sizeof(struct ifla_vf_rate) },
+ [IFLA_VF_LINK_STATE] = { .size = sizeof(struct ifla_vf_link_state) },
+ [IFLA_VF_RSS_QUERY_EN] = { .size = sizeof(struct ifla_vf_rss_query_en) },
+ [IFLA_VF_TRUST] = { .size = sizeof(struct ifla_vf_trust) },
+ [IFLA_VF_IB_NODE_GUID] = { .size = sizeof(struct ifla_vf_guid) },
+ [IFLA_VF_IB_PORT_GUID] = { .size = sizeof(struct ifla_vf_guid) },
+};
+
+static const NLTypeSystem rtnl_vf_vlan_info_type_system = {
+ .count = ELEMENTSOF(rtnl_vf_vlan_info_types),
+ .types = rtnl_vf_vlan_info_types,
+};
+
+static const NLType rtnl_link_io_srv_types[] = {
+ [IFLA_VF_INFO] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_vf_vlan_info_type_system },
+};
+
+static const NLTypeSystem rtnl_io_srv_type_system = {
+ .count = ELEMENTSOF(rtnl_link_io_srv_types),
+ .types = rtnl_link_io_srv_types,
+};
+
static const NLType rtnl_link_types[] = {
[IFLA_ADDRESS] = { .type = NETLINK_TYPE_ETHER_ADDR },
[IFLA_BROADCAST] = { .type = NETLINK_TYPE_ETHER_ADDR },
[IFLA_LINKINFO] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_link_info_type_system },
[IFLA_NET_NS_PID] = { .type = NETLINK_TYPE_U32 },
[IFLA_IFALIAS] = { .type = NETLINK_TYPE_STRING, .size = IFALIASZ - 1 },
-/*
- [IFLA_NUM_VF],
- [IFLA_VFINFO_LIST] = {. type = NETLINK_TYPE_NESTED, },
-*/
+ [IFLA_NUM_VF] = { .type = NETLINK_TYPE_U32 },
+ [IFLA_VFINFO_LIST] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_io_srv_type_system },
[IFLA_STATS64] = { .size = sizeof(struct rtnl_link_stats64) },
/*
[IFLA_VF_PORTS] = { .type = NETLINK_TYPE_NESTED },
[TCA_DRR_QUANTUM] = { .type = NETLINK_TYPE_U32 },
};
+static const NLType rtnl_tca_option_data_ets_quanta_types[] = {
+ [TCA_ETS_QUANTA_BAND] = { .type = NETLINK_TYPE_U32, },
+};
+
+static const NLTypeSystem rtnl_tca_option_data_ets_quanta_type_system = {
+ .count = ELEMENTSOF(rtnl_tca_option_data_ets_quanta_types),
+ .types = rtnl_tca_option_data_ets_quanta_types,
+};
+
+static const NLType rtnl_tca_option_data_ets_prio_types[] = {
+ [TCA_ETS_PRIOMAP_BAND] = { .type = NETLINK_TYPE_U8, },
+};
+
+static const NLTypeSystem rtnl_tca_option_data_ets_prio_type_system = {
+ .count = ELEMENTSOF(rtnl_tca_option_data_ets_prio_types),
+ .types = rtnl_tca_option_data_ets_prio_types,
+};
+
+static const NLType rtnl_tca_option_data_ets_types[] = {
+ [TCA_ETS_NBANDS] = { .type = NETLINK_TYPE_U8 },
+ [TCA_ETS_NSTRICT] = { .type = NETLINK_TYPE_U8 },
+ [TCA_ETS_QUANTA] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_tca_option_data_ets_quanta_type_system },
+ [TCA_ETS_PRIOMAP] = { .type = NETLINK_TYPE_NESTED, .type_system = &rtnl_tca_option_data_ets_prio_type_system },
+ [TCA_ETS_QUANTA_BAND] = { .type = NETLINK_TYPE_U32 },
+};
+
static const NLType rtnl_tca_option_data_fq_types[] = {
[TCA_FQ_PLIMIT] = { .type = NETLINK_TYPE_U32 },
[TCA_FQ_FLOW_PLIMIT] = { .type = NETLINK_TYPE_U32 },
[NL_UNION_TCA_OPTION_DATA_CAKE] = "cake",
[NL_UNION_TCA_OPTION_DATA_CODEL] = "codel",
[NL_UNION_TCA_OPTION_DATA_DRR] = "drr",
+ [NL_UNION_TCA_OPTION_DATA_ETS] = "ets",
[NL_UNION_TCA_OPTION_DATA_FQ] = "fq",
[NL_UNION_TCA_OPTION_DATA_FQ_CODEL] = "fq_codel",
[NL_UNION_TCA_OPTION_DATA_GRED] = "gred",
.types = rtnl_tca_option_data_codel_types },
[NL_UNION_TCA_OPTION_DATA_DRR] = { .count = ELEMENTSOF(rtnl_tca_option_data_drr_types),
.types = rtnl_tca_option_data_drr_types },
+ [NL_UNION_TCA_OPTION_DATA_ETS] = { .count = ELEMENTSOF(rtnl_tca_option_data_ets_types),
+ .types = rtnl_tca_option_data_ets_types },
[NL_UNION_TCA_OPTION_DATA_FQ] = { .count = ELEMENTSOF(rtnl_tca_option_data_fq_types),
.types = rtnl_tca_option_data_fq_types },
[NL_UNION_TCA_OPTION_DATA_FQ_CODEL] = { .count = ELEMENTSOF(rtnl_tca_option_data_fq_codel_types),
NL_UNION_TCA_OPTION_DATA_CAKE,
NL_UNION_TCA_OPTION_DATA_CODEL,
NL_UNION_TCA_OPTION_DATA_DRR,
+ NL_UNION_TCA_OPTION_DATA_ETS,
NL_UNION_TCA_OPTION_DATA_FQ,
NL_UNION_TCA_OPTION_DATA_FQ_CODEL,
NL_UNION_TCA_OPTION_DATA_GRED,
return network_link_get_string(ifindex, "ADDRESS_STATE", state);
}
-_public_ int sd_network_link_get_dhcp4_client_id_string(int ifindex, char **client_id) {
- return network_link_get_string(ifindex, "DHCP4_CLIENT_ID", client_id);
-}
-
_public_ int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **iaid) {
return network_link_get_string(ifindex, "DHCP6_CLIENT_IAID", iaid);
}
return network_link_get_strv(ifindex, "DNSSEC_NTA", nta);
}
-_public_ int sd_network_link_get_timezone(int ifindex, char **ret) {
- return network_link_get_string(ifindex, "TIMEZONE", ret);
-}
-
-_public_ int sd_network_link_get_dhcp4_address(int ifindex, char **ret) {
- return network_link_get_string(ifindex, "DHCP4_ADDRESS", ret);
-}
-
_public_ int sd_network_link_get_dns(int ifindex, char ***ret) {
return network_link_get_strv(ifindex, "DNS", ret);
}
return j;
}
-/* allow chars in whitelist, plain ascii, hex-escaping and valid utf8 */
-size_t util_replace_chars(char *str, const char *white) {
+/* allow chars in allow list, plain ascii, hex-escaping and valid utf8 */
+size_t util_replace_chars(char *str, const char *allow) {
size_t i = 0, replaced = 0;
assert(str);
while (str[i] != '\0') {
int len;
- if (whitelisted_char_for_devnode(str[i], white)) {
+ if (allow_listed_char_for_devnode(str[i], allow)) {
i++;
continue;
}
}
/* if space is allowed, replace whitespace with ordinary space */
- if (isspace(str[i]) && white && strchr(white, ' ')) {
+ if (isspace(str[i]) && allow && strchr(allow, ' ')) {
str[i] = ' ';
i++;
replaced++;
#include "sd-bus.h"
#include "bus-error.h"
-#include "bus-util.h"
+#include "bus-locator.h"
+#include "bus-map-properties.h"
#include "fd-util.h"
#include "fileio.h"
#include "kbd-util.h"
int r;
setlocale(LC_ALL, "");
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
#include "bus-message.h"
#include "bus-polkit.h"
#include "def.h"
+#include "dlfcn-util.h"
#include "keymap-util.h"
#include "locale-util.h"
#include "macro.h"
};
struct xkb_context *ctx = NULL;
struct xkb_keymap *km = NULL;
- void *dl;
+ _cleanup_(dlclosep) void *dl = NULL;
int r;
/* Compile keymap from RMLVO information to check out its validity */
if (symbol_xkb_context_unref && ctx)
symbol_xkb_context_unref(ctx);
- (void) dlclose(dl);
return r;
}
return r;
umask(0022);
- mac_selinux_init();
+
+ r = mac_selinux_init();
+ if (r < 0)
+ return r;
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
'src/locale/keymap-util.c',
'src/locale/keymap-util.h'],
[libshared],
- [libdl]],
+ []],
]
if (table_get_rows(table) > 1) {
r = table_set_sort(table, (size_t) 1, (size_t) 0, (size_t) 5, (size_t) 6, (size_t) -1);
if (r < 0)
- return log_error_errno(r, "Failed to sort table: %m");
+ return table_log_sort_error(r);
table_set_header(table, arg_legend);
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
}
if (arg_legend) {
#include "alloc-util.h"
#include "bus-error.h"
+#include "bus-locator.h"
+#include "bus-map-properties.h"
+#include "bus-print-properties.h"
#include "bus-unit-procs.h"
-#include "bus-util.h"
#include "cgroup-show.h"
#include "cgroup-util.h"
#include "format-table.h"
if (table_get_rows(table) > 1 || OUTPUT_MODE_IS_JSON(arg_output)) {
r = table_set_sort(table, (size_t) 0, (size_t) -1);
if (r < 0)
- return log_error_errno(r, "Failed to sort table: %m");
+ return table_log_sort_error(r);
table_set_header(table, arg_legend);
else
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
}
if (arg_legend) {
int r;
setlocale(LC_ALL, "");
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
/* The journal merging logic potentially needs a lot of fds. */
(void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
if (r <= 0)
return r;
- r = set_ensure_allocated(set, &bus_message_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(*set, message);
- if (r < 0)
+ r = set_ensure_put(set, &bus_message_hash_ops, message);
+ if (r <= 0)
return r;
-
sd_bus_message_ref(message);
+
return 1;
}
#include <sys/ioctl.h>
#include <sys/types.h>
#include <linux/vt.h>
-#if ENABLE_UTMP
-#include <utmpx.h>
-#endif
#include "sd-device.h"
#include "udev-util.h"
#include "user-util.h"
#include "userdb.h"
+#include "utmp-wtmp.h"
void manager_reset_config(Manager *m) {
assert(m);
if (sd_device_get_sysname(d, &nn) < 0)
continue;
- /* Ignore internal displays: the type is encoded in the sysfs name, as the second dash separated item
- * (the first is the card name, the last the connector number). We implement a blacklist of external
- * displays here, rather than a whitelist of internal ones, to ensure we don't block suspends too
- * eagerly. */
+ /* Ignore internal displays: the type is encoded in the sysfs name, as the second dash
+ * separated item (the first is the card name, the last the connector number). We implement a
+ * deny list of external displays here, rather than an allow list of internal ones, to ensure
+ * we don't block suspends too eagerly. */
dash = strchr(nn, '-');
if (!dash)
continue;
int manager_read_utmp(Manager *m) {
#if ENABLE_UTMP
int r;
+ _cleanup_(utxent_cleanup) bool utmpx = false;
assert(m);
if (utmpxname(_PATH_UTMPX) < 0)
return log_error_errno(errno, "Failed to set utmp path to " _PATH_UTMPX ": %m");
- setutxent();
+ utmpx = utxent_start();
for (;;) {
_cleanup_free_ char *t = NULL;
if (!u) {
if (errno != 0)
log_warning_errno(errno, "Failed to read " _PATH_UTMPX ", ignoring: %m");
- r = 0;
- break;
+ return 0;
}
if (u->ut_type != USER_PROCESS)
continue;
t = strndup(u->ut_line, sizeof(u->ut_line));
- if (!t) {
- r = log_oom();
- break;
- }
+ if (!t)
+ return log_oom();
c = path_startswith(t, "/dev/");
if (c) {
r = free_and_strdup(&t, c);
- if (r < 0) {
- log_oom();
- break;
- }
+ if (r < 0)
+ return log_oom();
}
if (isempty(t))
log_debug("Acquired TTY information '%s' from utmp for session '%s'.", s->tty, s->id);
}
- endutxent();
- return r;
#else
return 0;
#endif
#include "bootspec.h"
#include "bus-common-errors.h"
#include "bus-error.h"
+#include "bus-get-properties.h"
+#include "bus-locator.h"
#include "bus-polkit.h"
#include "bus-unit-util.h"
#include "bus-util.h"
r = getenv_bool("SYSTEMD_REBOOT_TO_BOOT_LOADER_MENU");
if (r == -ENXIO) {
- _cleanup_free_ char *v = NULL;
-
/* EFI case: returns the current value of LoaderConfigTimeoutOneShot. Three cases are distuingished:
*
* 1. Variable not set, boot into boot loader menu is not enabled (we return UINT64_MAX to the user)
* 3. Variable set to numeric value formatted in ASCII, boot into boot loader menu with the specified timeout in seconds
*/
- r = efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderConfigTimeoutOneShot", &v);
+ r = efi_loader_get_config_timeout_one_shot(&x);
if (r < 0) {
if (r != -ENOENT)
- log_warning_errno(r, "Failed to read LoaderConfigTimeoutOneShot variable: %m");
- } else {
- uint64_t sec;
-
- r = safe_atou64(v, &sec);
- if (r < 0)
- log_warning_errno(r, "Failed to parse LoaderConfigTimeoutOneShot value '%s': %m", v);
- else if (sec > (USEC_INFINITY / USEC_PER_SEC))
- log_warning("LoaderConfigTimeoutOneShot too large, ignoring: %m");
- else
- x = sec * USEC_PER_SEC; /* return in µs */
+ log_warning_errno(r, "Failed to read LoaderConfigTimeoutOneShot variable, ignoring: %m");
}
} else if (r < 0)
sd_bus_error *error) {
_cleanup_free_ char *v = NULL;
+ Manager *m = userdata;
+ const char *x = NULL;
int r;
assert(bus);
assert(reply);
- assert(userdata);
+ assert(m);
r = getenv_bool("SYSTEMD_REBOOT_TO_BOOT_LOADER_ENTRY");
if (r == -ENXIO) {
/* EFI case: let's read the LoaderEntryOneShot variable */
- r = efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderEntryOneShot", &v);
+ r = efi_loader_update_entry_one_shot_cache(&m->efi_loader_entry_one_shot, &m->efi_loader_entry_one_shot_stat);
if (r < 0) {
if (r != -ENOENT)
- log_warning_errno(r, "Failed to read LoaderEntryOneShot variable: %m");
- } else if (!efi_loader_entry_name_valid(v)) {
- log_warning("LoaderEntryOneShot contains invalid entry name '%s', ignoring.", v);
- v = mfree(v);
- }
+ log_warning_errno(r, "Failed to read LoaderEntryOneShot variable, ignoring: %m");
+ } else
+ x = m->efi_loader_entry_one_shot;
+
} else if (r < 0)
log_warning_errno(r, "Failed to parse $SYSTEMD_REBOOT_TO_BOOT_LOADER_ENTRY: %m");
else if (r > 0) {
r = read_one_line_file("/run/systemd/reboot-to-boot-loader-entry", &v);
if (r < 0) {
if (r != -ENOENT)
- log_warning_errno(r, "Failed to read /run/systemd/reboot-to-boot-loader-entry: %m");
- } else if (!efi_loader_entry_name_valid(v)) {
+ log_warning_errno(r, "Failed to read /run/systemd/reboot-to-boot-loader-entry, ignoring: %m");
+ } else if (!efi_loader_entry_name_valid(v))
log_warning("/run/systemd/reboot-to-boot-loader-entry is not valid, ignoring.");
- v = mfree(v);
- }
+ else
+ x = v;
}
- return sd_bus_message_append(reply, "s", v);
+ return sd_bus_message_append(reply, "s", x);
}
static int boot_loader_entry_exists(Manager *m, const char *id) {
#include "sd-bus.h"
-#include "bus-util.h"
-#include "logind.h"
+#include "bus-object.h"
#include "logind-session.h"
#include "logind-user.h"
+#include "logind.h"
int manager_get_session_from_creds(Manager *m, sd_bus_message *message, const char *name, sd_bus_error *error, Session **ret);
int manager_get_user_from_creds(Manager *m, sd_bus_message *message, uid_t uid, sd_bus_error *error, User **ret);
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-label.h"
#include "bus-polkit.h"
#include "bus-util.h"
#include "sd-bus.h"
+#include "bus-object.h"
#include "logind-seat.h"
-#include "bus-util.h"
extern const BusObjectImplementation seat_object;
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-label.h"
#include "bus-polkit.h"
#include "bus-util.h"
#include "sd-bus.h"
+#include "bus-object.h"
#include "logind-session.h"
extern const BusObjectImplementation session_object;
#include <errno.h>
#include "alloc-util.h"
+#include "bus-get-properties.h"
#include "bus-polkit.h"
#include "bus-util.h"
#include "format-util.h"
#include "alloc-util.h"
#include "bus-error.h"
+#include "bus-locator.h"
#include "bus-log-control-api.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "cgroup-util.h"
#include "def.h"
#include "device-util.h"
free(m->action_job);
strv_free(m->efi_boot_loader_entries);
+ free(m->efi_loader_entry_one_shot);
return mfree(m);
}
r = mac_selinux_init();
if (r < 0)
- return log_error_errno(r, "Could not initialize labelling: %m");
+ return r;
/* Always create the directories people can create inotify watches in. Note that some applications might check
* for the existence of /run/systemd/seats/ to determine whether logind is available, so please always make
char **efi_boot_loader_entries;
bool efi_boot_loader_entries_set;
+
+ char *efi_loader_entry_one_shot;
+ struct stat efi_loader_entry_one_shot_stat;
};
void manager_reset_config(Manager *m);
#include "bus-common-errors.h"
#include "bus-error.h"
#include "bus-internal.h"
-#include "bus-util.h"
+#include "bus-locator.h"
#include "cgroup-setup.h"
#include "errno-util.h"
#include "fd-util.h"
/* Some extra paranoia: let's not set $XDG_RUNTIME_DIR if the directory we'd set it to isn't actually
* set up properly for us. This is supposed to provide a careful safety net for supporting su/sudo
* type transitions: in that case the UID changes, but the session and thus the user owning it
- * doesn't change. Since the $XDG_RUNTIME_DIR life-cycle is bound to the session's user being logged
+ * doesn't change. Since the $XDG_RUNTIME_DIR lifecycle is bound to the session's user being logged
* in at least once we should be particularly careful when setting the environment variable, since
* otherwise we might end up setting $XDG_RUNTIME_DIR to some directory owned by the wrong user. */
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"First argument must be either \"start\" or \"stop\".");
+ umask(0022);
+
r = mac_selinux_init();
if (r < 0)
- return log_error_errno(r, "Could not initialize labelling: %m\n");
-
- umask(0022);
+ return r;
if (streq(argv[1], "start"))
return do_mount(argv[2]);
#include <sys/mount.h>
#include "alloc-util.h"
+#include "bus-get-properties.h"
#include "bus-label.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "copy.h"
#include "dissect-image.h"
#include "fd-util.h"
/* SPDX-License-Identifier: LGPL-2.1+ */
#pragma once
-#include "bus-util.h"
+#include "bus-object.h"
#include "machined.h"
extern const BusObjectImplementation image_object;
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-internal.h"
#include "bus-label.h"
+#include "bus-locator.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "copy.h"
#include "env-file.h"
#include "env-util.h"
#include "alloc-util.h"
#include "bus-common-errors.h"
#include "bus-error.h"
+#include "bus-locator.h"
+#include "bus-map-properties.h"
+#include "bus-print-properties.h"
#include "bus-unit-procs.h"
#include "bus-unit-util.h"
-#include "bus-util.h"
#include "bus-wait-for-jobs.h"
#include "cgroup-show.h"
#include "cgroup-util.h"
if (table_get_rows(table) > 1 || OUTPUT_MODE_IS_JSON(arg_output)) {
r = table_set_sort(table, (size_t) 0, (size_t) -1);
if (r < 0)
- return log_error_errno(r, "Failed to sort table: %m");
+ return table_log_sort_error(r);
table_set_header(table, arg_legend);
else
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
}
if (arg_legend) {
int r;
setlocale(LC_ALL, "");
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
/* The journal merging logic potentially needs a lot of fds. */
(void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
#include "alloc-util.h"
#include "btrfs-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
+#include "bus-locator.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "cgroup-util.h"
#include "errno-util.h"
#include "fd-util.h"
#include "alloc-util.h"
#include "bus-error.h"
+#include "bus-locator.h"
#include "bus-log-control-api.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "cgroup-util.h"
#include "dirent-util.h"
#include "fd-util.h"
#include "sd-device.h"
#include "bus-error.h"
+#include "bus-locator.h"
#include "bus-unit-util.h"
-#include "bus-util.h"
#include "bus-wait-for-jobs.h"
#include "device-util.h"
#include "dirent-util.h"
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to print table: %m");
+ return table_log_print_error(r);
return 0;
}
networkd-routing-policy-rule.h
networkd-speed-meter.c
networkd-speed-meter.h
+ networkd-sriov.c
+ networkd-sriov.h
networkd-util.c
networkd-util.h
networkd-wifi.c
tc/codel.h
tc/drr.c
tc/drr.h
+ tc/ets.c
+ tc/ets.h
tc/fifo.c
tc/fifo.h
tc/fq.c
r = extract_first_word(&rvalue, &n, NULL, 0);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
- "Failed to parse Bond ARP ip target address, ignoring assignment: %s",
+ "Failed to parse Bond ARP IP target address, ignoring assignment: %s",
rvalue);
return 0;
}
r = in_addr_from_string(AF_INET, n, &ip);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
- "Bond ARP ip target address is invalid, ignoring assignment: %s", n);
+ "Bond ARP IP target address is invalid, ignoring assignment: %s", n);
continue;
}
if (ordered_set_size(b->arp_ip_targets) >= NETDEV_BOND_ARP_TARGETS_MAX) {
log_syntax(unit, LOG_WARNING, filename, line, 0,
- "Too many ARP ip targets are specified. The maximum number is %d. Ignoring assignment: %s",
+ "Too many ARP IP targets are specified. The maximum number is %d. Ignoring assignment: %s",
NETDEV_BOND_ARP_TARGETS_MAX, n);
continue;
}
r = ordered_set_put(b->arp_ip_targets, UINT32_TO_PTR(ip.in.s_addr));
if (r == -EEXIST)
log_syntax(unit, LOG_WARNING, filename, line, r,
- "Bond ARP ip target address is duplicated, ignoring assignment: %s", n);
+ "Bond ARP IP target address is duplicated, ignoring assignment: %s", n);
if (r < 0)
log_syntax(unit, LOG_ERR, filename, line, r,
- "Failed to store bond ARP ip target address '%s', ignoring assignment: %m", n);
+ "Failed to store bond ARP IP target address '%s', ignoring assignment: %m", n);
}
}
assert(m);
+ if (m->mode == NETDEV_MACVLAN_MODE_SOURCE && !set_isempty(m->match_source_mac)) {
+ Iterator i;
+ const struct ether_addr *mac_addr;
+
+ r = sd_netlink_message_append_u32(req, IFLA_MACVLAN_MACADDR_MODE, MACVLAN_MACADDR_SET);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACVLAN_MACADDR_MODE attribute: %m");
+
+ r = sd_netlink_message_open_container(req, IFLA_MACVLAN_MACADDR_DATA);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not open IFLA_MACVLAN_MACADDR_DATA container: %m");
+
+ SET_FOREACH(mac_addr, m->match_source_mac, i) {
+ r = sd_netlink_message_append_ether_addr(req, IFLA_MACVLAN_MACADDR, mac_addr);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not append IFLA_MACVLAN_MACADDR attribute: %m");
+ }
+
+ r = sd_netlink_message_close_container(req);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not close IFLA_MACVLAN_MACADDR_DATA container: %m");
+ }
+
if (m->mode != _NETDEV_MACVLAN_MODE_INVALID) {
r = sd_netlink_message_append_u32(req, IFLA_MACVLAN_MODE, m->mode);
if (r < 0)
return 0;
}
+static void macvlan_done(NetDev *n) {
+ MacVlan *m;
+
+ assert(n);
+
+ if (n->kind == NETDEV_KIND_MACVLAN)
+ m = MACVLAN(n);
+ else
+ m = MACVTAP(n);
+
+ assert(m);
+
+ set_free_free(m->match_source_mac);
+}
+
static void macvlan_init(NetDev *n) {
MacVlan *m;
const NetDevVTable macvtap_vtable = {
.object_size = sizeof(MacVlan),
.init = macvlan_init,
+ .done = macvlan_done,
.sections = NETDEV_COMMON_SECTIONS "MACVTAP\0",
.fill_message_create = netdev_macvlan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
const NetDevVTable macvlan_vtable = {
.object_size = sizeof(MacVlan),
.init = macvlan_init,
+ .done = macvlan_done,
.sections = NETDEV_COMMON_SECTIONS "MACVLAN\0",
.fill_message_create = netdev_macvlan_fill_message_create,
.create_type = NETDEV_CREATE_STACKED,
#include "macvlan-util.h"
#include "netdev.h"
+#include "set.h"
struct MacVlan {
NetDev meta;
MacVlanMode mode;
+ Set *match_source_mac;
};
DEFINE_NETDEV_CAST(MACVLAN, MacVlan);
VLAN.LooseBinding, config_parse_tristate, 0, offsetof(VLan, loose_binding)
VLAN.ReorderHeader, config_parse_tristate, 0, offsetof(VLan, reorder_hdr)
MACVLAN.Mode, config_parse_macvlan_mode, 0, offsetof(MacVlan, mode)
+MACVLAN.SourceMACAddress, config_parse_hwaddrs, 0, offsetof(MacVlan, match_source_mac)
MACVTAP.Mode, config_parse_macvlan_mode, 0, offsetof(MacVlan, mode)
+MACVTAP.SourceMACAddress, config_parse_hwaddrs, 0, offsetof(MacVlan, match_source_mac)
IPVLAN.Mode, config_parse_ipvlan_mode, 0, offsetof(IPVlan, mode)
IPVLAN.Flags, config_parse_ipvlan_flags, 0, offsetof(IPVlan, flags)
IPVTAP.Mode, config_parse_ipvlan_mode, 0, offsetof(IPVlan, mode)
if (r >= 0)
callback(netdev->manager->rtnl, m, link);
} else {
- /* the netdev is not yet read, save this request for when it is */
+ /* the netdev is not yet ready, save this request for when it is */
netdev_join_callback *cb;
cb = new(netdev_join_callback, 1);
if (ret != 0) {
log_netdev_error(netdev, "Failed to resolve host '%s:%s': %s", peer->endpoint_host, peer->endpoint_port, gai_strerror(ret));
- r = set_ensure_allocated(&w->peers_with_failed_endpoint, NULL);
- if (r < 0) {
- log_oom();
- peer->section->invalid = true;
- goto resolve_next;
- }
-
- r = set_put(w->peers_with_failed_endpoint, peer);
+ r = set_ensure_put(&w->peers_with_failed_endpoint, NULL, peer);
if (r < 0) {
log_netdev_error(netdev, "Failed to save a peer, dropping the peer: %m");
peer->section->invalid = true;
void *data,
void *userdata) {
- _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
+ WireguardPeer *peer;
Wireguard *w;
int r;
if (r < 0)
return r;
- r = wireguard_decode_key_and_warn(rvalue, peer->preshared_key, unit, filename, line, lvalue);
- if (r < 0)
- return r;
-
- TAKE_PTR(peer);
- return 0;
+ return wireguard_decode_key_and_warn(rvalue, peer->preshared_key, unit, filename, line, lvalue);
}
int config_parse_wireguard_preshared_key_file(
w = WIREGUARD(data);
assert(w);
- r = wireguard_peer_new_static(w, filename, section_line, &peer);
- if (r < 0)
- return r;
-
if (rvalue[0] == '[') {
begin = &rvalue[1];
end = strchr(rvalue, ']');
++end;
}
+ r = wireguard_peer_new_static(w, filename, section_line, &peer);
+ if (r < 0)
+ return r;
+
r = free_and_strndup(&peer->endpoint_host, begin, len);
if (r < 0)
return log_oom();
if (r < 0)
return log_oom();
- r = set_ensure_allocated(&w->peers_with_unresolved_endpoint, NULL);
+ r = set_ensure_put(&w->peers_with_unresolved_endpoint, NULL, peer);
if (r < 0)
return log_oom();
+ TAKE_PTR(peer); /* The peer may already have been in the hash map, that is fine too. */
- r = set_put(w->peers_with_unresolved_endpoint, peer);
- if (r < 0)
- return r;
-
- TAKE_PTR(peer);
return 0;
}
void *data,
void *userdata) {
- _cleanup_(wireguard_peer_free_or_set_invalidp) WireguardPeer *peer = NULL;
+ WireguardPeer *peer;
uint16_t keepalive = 0;
Wireguard *w;
int r;
r = safe_atou16(rvalue, &keepalive);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
- "The persistent keepalive interval must be 0-65535. Ignore assignment: %s",
+ "Failed to parse \"%s\" as keepalive interval (range 0–65535), ignoring assignment: %m",
rvalue);
return 0;
}
}
peer->persistent_keepalive_interval = keepalive;
-
- TAKE_PTR(peer);
return 0;
}
/* SPDX-License-Identifier: LGPL-2.1+ */
+#include <arpa/inet.h>
#include <getopt.h>
#include <linux/if_addrlabel.h>
#include <net/if.h>
#include "alloc-util.h"
#include "bond-util.h"
+#include "bridge-util.h"
#include "bus-common-errors.h"
#include "bus-error.h"
-#include "bus-util.h"
-#include "bridge-util.h"
+#include "bus-locator.h"
#include "device-util.h"
#include "escape.h"
#include "ether-addr-util.h"
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to print table: %m");
+ return table_log_print_error(r);
if (arg_legend)
printf("\n%i links listed.\n", c);
static int dump_addresses(
sd_netlink *rtnl,
+ sd_dhcp_lease *lease,
Table *table,
int ifindex) {
_cleanup_free_ struct local_address *local = NULL;
- _cleanup_free_ char *dhcp4_address = NULL;
_cleanup_strv_free_ char **buf = NULL;
+ struct in_addr dhcp4_address = {};
int r, n, i;
assert(rtnl);
if (n <= 0)
return n;
- (void) sd_network_link_get_dhcp4_address(ifindex, &dhcp4_address);
+ if (lease)
+ (void) sd_dhcp_lease_get_address(lease, &dhcp4_address);
for (i = 0; i < n; i++) {
_cleanup_free_ char *pretty = NULL;
if (r < 0)
return r;
- if (dhcp4_address && streq(pretty, dhcp4_address)) {
- _cleanup_free_ char *p = NULL;
+ if (local[i].family == AF_INET && in4_addr_equal(&local[i].address.in, &dhcp4_address)) {
+ struct in_addr server_address;
+ char *p, s[INET_ADDRSTRLEN];
- p = pretty;
- pretty = strjoin(pretty , " (DHCP4)");
- if (!pretty)
+ r = sd_dhcp_lease_get_server_identifier(lease, &server_address);
+ if (r >= 0 && inet_ntop(AF_INET, &server_address, s, sizeof(s)))
+ p = strjoin(pretty, " (DHCP4 via ", s, ")");
+ else
+ p = strjoin(pretty, " (DHCP4)");
+ if (!p)
return log_oom();
+
+ free_and_replace(pretty, p);
}
r = strv_extendf(&buf, "%s%s%s",
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to print table: %m");
+ return table_log_print_error(r);
return 0;
}
const LinkInfo *info) {
_cleanup_strv_free_ char **dns = NULL, **ntp = NULL, **sip = NULL, **search_domains = NULL, **route_domains = NULL;
- _cleanup_free_ char *t = NULL, *network = NULL, *client_id = NULL, *iaid = NULL, *duid = NULL;
- const char *driver = NULL, *path = NULL, *vendor = NULL, *model = NULL, *link = NULL;
- _cleanup_free_ char *setup_state = NULL, *operational_state = NULL, *tz = NULL;
- const char *on_color_operational, *off_color_operational,
- *on_color_setup, *off_color_setup;
+ _cleanup_free_ char *t = NULL, *network = NULL, *iaid = NULL, *duid = NULL,
+ *setup_state = NULL, *operational_state = NULL, *lease_file = NULL;
+ const char *driver = NULL, *path = NULL, *vendor = NULL, *model = NULL, *link = NULL,
+ *on_color_operational, *off_color_operational, *on_color_setup, *off_color_setup;
_cleanup_free_ int *carrier_bound_to = NULL, *carrier_bound_by = NULL;
+ _cleanup_(sd_dhcp_lease_unrefp) sd_dhcp_lease *lease = NULL;
_cleanup_(table_unrefp) Table *table = NULL;
TableCell *cell;
int r;
(void) sd_network_link_get_carrier_bound_to(info->ifindex, &carrier_bound_to);
(void) sd_network_link_get_carrier_bound_by(info->ifindex, &carrier_bound_by);
+ if (asprintf(&lease_file, "/run/systemd/netif/leases/%d", info->ifindex) < 0)
+ return log_oom();
+
+ (void) dhcp_lease_load(&lease, lease_file);
+
table = table_new("dot", "key", "value");
if (!table)
return log_oom();
}
}
- r = dump_addresses(rtnl, table, info->ifindex);
+ r = dump_addresses(rtnl, lease, table, info->ifindex);
if (r < 0)
return r;
r = dump_gateways(rtnl, hwdb, table, info->ifindex);
if (r < 0)
return r;
- (void) sd_network_link_get_timezone(info->ifindex, &tz);
- if (tz) {
- r = table_add_many(table,
- TABLE_EMPTY,
- TABLE_STRING, "Time Zone:",
- TABLE_STRING, tz);
- if (r < 0)
- return table_log_add_error(r);
- }
+ if (lease) {
+ const void *client_id;
+ size_t client_id_len;
+ const char *tz;
- r = sd_network_link_get_dhcp4_client_id_string(info->ifindex, &client_id);
- if (r >= 0) {
- r = table_add_many(table,
- TABLE_EMPTY,
- TABLE_STRING, "DHCP4 Client ID:",
- TABLE_STRING, client_id);
- if (r < 0)
- return table_log_add_error(r);
+ r = sd_dhcp_lease_get_timezone(lease, &tz);
+ if (r >= 0) {
+ r = table_add_many(table,
+ TABLE_EMPTY,
+ TABLE_STRING, "Time Zone:",
+ TABLE_STRING, tz);
+ if (r < 0)
+ return table_log_add_error(r);
+ }
+
+ r = sd_dhcp_lease_get_client_id(lease, &client_id, &client_id_len);
+ if (r >= 0) {
+ _cleanup_free_ char *id = NULL;
+
+ r = sd_dhcp_client_id_to_string(client_id, client_id_len, &id);
+ if (r >= 0) {
+ r = table_add_many(table,
+ TABLE_EMPTY,
+ TABLE_STRING, "DHCP4 Client ID:",
+ TABLE_STRING, id);
+ if (r < 0)
+ return table_log_add_error(r);
+ }
+ }
}
r = sd_network_link_get_dhcp6_client_iaid_string(info->ifindex, &iaid);
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to print table: %m");
+ return table_log_print_error(r);
return show_logs(info);
}
if (r < 0)
return table_log_add_error(r);
- r = dump_addresses(rtnl, table, 0);
+ r = dump_addresses(rtnl, NULL, table, 0);
if (r < 0)
return r;
r = dump_gateways(rtnl, hwdb, table, 0);
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to print table: %m");
+ return table_log_print_error(r);
return show_logs(NULL);
}
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to print table: %m");
+ return table_log_print_error(r);
if (arg_legend) {
lldp_capabilities_legend(all);
static int run(int argc, char* argv[]) {
int r;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
/* Consider address tentative until we get the real flags from the kernel */
address->flags = IFA_F_TENTATIVE;
- r = set_ensure_allocated(addresses, &address_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(*addresses, address);
+ r = set_ensure_put(addresses, &address_hash_ops, address);
if (r < 0)
return r;
if (r == 0)
if (ret)
*ret = address;
-
- address = NULL;
-
+ TAKE_PTR(address);
return 0;
}
return r;
} else if (r == 0) {
/* Take over a foreign address */
- r = set_ensure_allocated(&link->addresses, &address_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(link->addresses, address);
+ r = set_ensure_put(&link->addresses, &address_hash_ops, address);
if (r < 0)
return r;
continue;
}
- if (ltype == AF_INET)
- r = set_ensure_allocated(&network->dhcp_request_options, NULL);
- else
- r = set_ensure_allocated(&network->dhcp6_request_options, NULL);
- if (r < 0)
- return log_oom();
-
- if (ltype == AF_INET)
- r = set_put(network->dhcp_request_options, UINT32_TO_PTR(i));
- else
- r = set_put(network->dhcp6_request_options, UINT32_TO_PTR(i));
+ r = set_ensure_put(ltype == AF_INET ? &network->dhcp_request_options : &network->dhcp6_request_options,
+ NULL, UINT32_TO_PTR(i));
if (r < 0)
log_syntax(unit, LOG_ERR, filename, line, r,
"Failed to store DHCP request option '%s', ignoring assignment: %m", n);
link->dhcp_lease_old = TAKE_PTR(link->dhcp_lease);
- /* On ip address change, to keep the connectability, we would like to assign new address and
+ /* On IP address change, to keep the connectability, we would like to assign new address and
* routes, and then release old lease. There are two possible success paths:
*
* 1. new address and routes are configured.
return 0;
}
-static int dhcp_server_is_black_listed(Link *link, sd_dhcp_client *client) {
+static int dhcp_server_is_deny_listed(Link *link, sd_dhcp_client *client) {
sd_dhcp_lease *lease;
struct in_addr addr;
int r;
r = sd_dhcp_lease_get_server_identifier(lease, &addr);
if (r < 0)
- return log_link_debug_errno(link, r, "Failed to get DHCP server ip address: %m");
+ return log_link_debug_errno(link, r, "Failed to get DHCP server IP address: %m");
- if (set_contains(link->network->dhcp_black_listed_ip, UINT32_TO_PTR(addr.s_addr))) {
+ if (set_contains(link->network->dhcp_deny_listed_ip, UINT32_TO_PTR(addr.s_addr))) {
log_struct(LOG_DEBUG,
LOG_LINK_INTERFACE(link),
- LOG_LINK_MESSAGE(link, "DHCPv4 ip '%u.%u.%u.%u' found in black listed ip addresses, ignoring offer",
+ LOG_LINK_MESSAGE(link, "DHCPv4 IP '%u.%u.%u.%u' found in deny-listed IP addresses, ignoring offer",
+ ADDRESS_FMT_VAL(addr)));
+ return true;
+ }
+
+ return false;
+}
+
+static int dhcp_server_is_allow_listed(Link *link, sd_dhcp_client *client) {
+ sd_dhcp_lease *lease;
+ struct in_addr addr;
+ int r;
+
+ assert(link);
+ assert(link->network);
+ assert(client);
+
+ r = sd_dhcp_client_get_lease(client, &lease);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Failed to get DHCP lease: %m");
+
+ r = sd_dhcp_lease_get_server_identifier(lease, &addr);
+ if (r < 0)
+ return log_link_debug_errno(link, r, "Failed to get DHCP server IP address: %m");
+
+ if (set_contains(link->network->dhcp_allow_listed_ip, UINT32_TO_PTR(addr.s_addr))) {
+ log_struct(LOG_DEBUG,
+ LOG_LINK_INTERFACE(link),
+ LOG_LINK_MESSAGE(link, "DHCPv4 IP '%u.%u.%u.%u' found in allow-listed IP addresses, accepting offer",
ADDRESS_FMT_VAL(addr)));
return true;
}
}
break;
case SD_DHCP_CLIENT_EVENT_SELECTING:
- r = dhcp_server_is_black_listed(link, client);
- if (r < 0)
- return r;
- if (r != 0)
- return -ENOMSG;
-
+ if (!set_isempty(link->network->dhcp_allow_listed_ip)) {
+ r = dhcp_server_is_allow_listed(link, client);
+ if (r < 0)
+ return r;
+ if (r == 0)
+ return -ENOMSG;
+ } else {
+ r = dhcp_server_is_deny_listed(link, client);
+ if (r < 0)
+ return r;
+ if (r != 0)
+ return -ENOMSG;
+ }
break;
default:
if (event < 0)
if (link->network->ip_service_type > 0) {
r = sd_dhcp_client_set_service_type(link->dhcp_client, link->network->ip_service_type);
if (r < 0)
- return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set ip service type: %m");
+ return log_link_error_errno(link, r, "DHCP4 CLIENT: Failed to set IP service type: %m");
}
if (link->network->dhcp_fallback_lease_lifetime > 0) {
return 0;
}
-int config_parse_dhcp_black_listed_ip_address(
+int config_parse_dhcp_acl_ip_address(
const char *unit,
const char *filename,
unsigned line,
void *userdata) {
Network *network = data;
- const char *p;
+ Set **acl;
int r;
assert(filename);
assert(rvalue);
assert(data);
+ acl = STR_IN_SET(lvalue, "DenyList", "BlackList") ? &network->dhcp_deny_listed_ip : &network->dhcp_allow_listed_ip;
+
if (isempty(rvalue)) {
- network->dhcp_black_listed_ip = set_free(network->dhcp_black_listed_ip);
+ *acl = set_free(*acl);
return 0;
}
- for (p = rvalue;;) {
+ for (const char *p = rvalue;;) {
_cleanup_free_ char *n = NULL;
union in_addr_union ip;
r = extract_first_word(&p, &n, NULL, 0);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
- "Failed to parse DHCP black listed ip address, ignoring assignment: %s",
- rvalue);
+ "Failed to parse DHCP '%s=' IP address, ignoring assignment: %s",
+ lvalue, rvalue);
return 0;
}
if (r == 0)
r = in_addr_from_string(AF_INET, n, &ip);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
- "DHCP black listed ip address is invalid, ignoring assignment: %s", n);
+ "DHCP '%s=' IP address is invalid, ignoring assignment: %s", lvalue, n);
continue;
}
- r = set_ensure_allocated(&network->dhcp_black_listed_ip, NULL);
- if (r < 0)
- return log_oom();
-
- r = set_put(network->dhcp_black_listed_ip, UINT32_TO_PTR(ip.in.s_addr));
+ r = set_ensure_put(acl, NULL, UINT32_TO_PTR(ip.in.s_addr));
if (r < 0)
log_syntax(unit, LOG_ERR, filename, line, r,
- "Failed to store DHCP black listed ip address '%s', ignoring assignment: %m", n);
+ "Failed to store DHCP '%s=' IP address '%s', ignoring assignment: %m", lvalue, n);
}
return 0;
int dhcp4_set_promote_secondaries(Link *link);
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_client_identifier);
-CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_black_listed_ip_address);
+CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_acl_ip_address);
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_max_attempts);
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_ip_service_type);
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp_mud_url);
#include <netinet/in.h>
#include <linux/if.h>
#include <linux/if_arp.h>
-#include "sd-radv.h"
#include "sd-dhcp6-client.h"
#include "networkd-dhcp6.h"
#include "networkd-link.h"
#include "networkd-manager.h"
+#include "networkd-radv.h"
#include "siphash24.h"
+#include "string-table.h"
#include "string-util.h"
#include "radv-internal.h"
#include "web-util.h"
static Link *dhcp6_prefix_get(Manager *m, struct in6_addr *addr);
static int dhcp6_prefix_add(Manager *m, struct in6_addr *addr, Link *link);
static int dhcp6_prefix_remove_all(Manager *m, Link *link);
-static bool dhcp6_link_has_dhcpv6_prefix(Link *link);
static int dhcp6_assign_delegated_prefix(Link *link, const struct in6_addr *prefix,
uint8_t prefix_len,
uint32_t lifetime_preferred,
if (subnet_id >= 0) {
/* If the link has a preference for a particular subnet id try to allocate that */
- if ((uint64_t)subnet_id >= n_prefixes)
+ if ((uint64_t) subnet_id >= n_prefixes)
return log_link_debug_errno(link,
SYNTHETIC_ERRNO(ERANGE),
"subnet id %" PRIi64 " is out of range. Only have %" PRIu64 " subnets.",
log_link_debug(link, "The requested prefix %s is available. Using it.",
strnull(assigned_buf));
return 0;
- } else {
- for (uint64_t n = 0; n < n_prefixes; n++) {
- /* if we do not have an allocation preference just iterate
- * through the address space and return the first free prefix. */
- Link* assigned_link = dhcp6_prefix_get(manager, &prefix.in6);
-
- if (!assigned_link || assigned_link == link) {
- *ret_addr = prefix.in6;
- return 0;
- }
+ }
- r = in_addr_prefix_next(AF_INET6, &prefix, 64);
- if (r < 0)
- return log_link_error_errno(link,
- r,
- "Can't allocate another prefix. Out of address space?");
+ for (uint64_t n = 0; n < n_prefixes; n++) {
+ /* if we do not have an allocation preference just iterate
+ * through the address space and return the first free prefix. */
+ Link* assigned_link = dhcp6_prefix_get(manager, &prefix.in6);
+
+ if (!assigned_link || assigned_link == link) {
+ *ret_addr = prefix.in6;
+ return 0;
}
- log_link_warning(link, "Couldn't find a suitable prefix. Ran out of address space.");
+ r = in_addr_prefix_next(AF_INET6, &prefix, 64);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Can't allocate another prefix. Out of address space?");
}
- return -ERANGE;
+ return log_link_warning_errno(link, SYNTHETIC_ERRNO(ERANGE), "Couldn't find a suitable prefix. Ran out of address space.");
}
static bool dhcp6_enable_prefix_delegation(Link *dhcp6_link) {
return false;
}
-static int dhcp6_lease_information_acquired(sd_dhcp6_client *client,
- Link *link) {
+static int dhcp6_lease_information_acquired(sd_dhcp6_client *client, Link *link) {
return 0;
}
uint8_t prefix_len,
uint32_t lifetime_preferred,
uint32_t lifetime_valid) {
- sd_radv *radv = link->radv;
int r;
- _cleanup_(sd_radv_prefix_unrefp) sd_radv_prefix *p = NULL;
-
- r = sd_radv_prefix_new(&p);
- if (r < 0)
- return r;
- r = sd_radv_prefix_set_prefix(p, prefix, prefix_len);
+ r = radv_add_prefix(link, prefix, prefix_len, lifetime_preferred, lifetime_valid);
if (r < 0)
return r;
- r = sd_radv_prefix_set_preferred_lifetime(p, lifetime_preferred);
- if (r < 0)
- return r;
-
- r = sd_radv_prefix_set_valid_lifetime(p, lifetime_valid);
- if (r < 0)
- return r;
-
- r = sd_radv_stop(radv);
- if (r < 0)
- return r;
-
- r = sd_radv_add_prefix(radv, p, true);
- if (r < 0 && r != -EEXIST)
- return r;
-
r = dhcp6_prefix_add(link->manager, prefix, link);
if (r < 0)
return r;
return r;
}
- return sd_radv_start(radv);
+ return 0;
}
static int dhcp6_route_remove_handler(sd_netlink *nl, sd_netlink_message *m, Link *link) {
if (!dhcp6_get_prefix_delegation(link))
continue;
- if (dhcp6_link_has_dhcpv6_prefix(link))
- continue;
-
if (assign_preferred_subnet_id != dhcp6_has_preferred_subnet_id(link))
continue;
r = dhcp6_get_preferred_delegated_prefix(manager, link, &prefix.in6, pd_prefix_len,
- &assigned_prefix.in6);
+ &assigned_prefix.in6);
if (assign_preferred_subnet_id && r == -EAGAIN) {
/* A link has a preferred subnet_id but that one is
return 0;
}
-static bool dhcp6_link_has_dhcpv6_prefix(Link *link) {
- Iterator i;
- Link *l;
+static int dhcp6_assign_delegeted_prefix_address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+ int r;
assert(link);
- assert(link->manager);
- HASHMAP_FOREACH(l, link->manager->dhcp6_prefixes, i)
- if (link == l)
- return true;
+ if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+ return 1;
- return false;
+ r = sd_netlink_message_get_errno(m);
+ if (r < 0 && r != -EEXIST) {
+ log_link_message_warning_errno(link, m, r, "Could not set DHCPv6 delegated prefix address ");
+ link_enter_failed(link);
+ return 1;
+ } else if (r >= 0)
+ (void) manager_rtnl_process_address(rtnl, m, link->manager);
+
+ r = link_request_set_routes(link);
+ if (r < 0) {
+ link_enter_failed(link);
+ return 1;
+ }
+
+ return 1;
}
static int dhcp6_assign_delegated_prefix(Link *link,
link_set_state(link, LINK_STATE_CONFIGURING);
- r = address_configure(address, link, address_handler, true);
+ r = address_configure(address, link, dhcp6_assign_delegeted_prefix_address_handler, true);
if (r < 0)
return log_link_warning_errno(link, r, "Failed to set acquired DHCPv6 delegated prefix address: %m");
- if (r > 0)
- link->address_messages++;
return 0;
}
return 0;
}
+
+DEFINE_CONFIG_PARSE_ENUM(config_parse_dhcp6_client_start_mode, dhcp6_client_start_mode, DHCP6ClientStartMode,
+ "Failed to parse WithoutRA= setting");
+
+static const char* const dhcp6_client_start_mode_table[_DHCP6_CLIENT_START_MODE_MAX] = {
+ [DHCP6_CLIENT_START_MODE_NO] = "no",
+ [DHCP6_CLIENT_START_MODE_INFORMATION_REQUEST] = "information-request",
+ [DHCP6_CLIENT_START_MODE_SOLICIT] = "solicit",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(dhcp6_client_start_mode, DHCP6ClientStartMode);
#include "sd-dhcp6-client.h"
#include "conf-parser.h"
+#include "macro.h"
+
+typedef enum DHCP6ClientStartMode {
+ DHCP6_CLIENT_START_MODE_NO,
+ DHCP6_CLIENT_START_MODE_INFORMATION_REQUEST,
+ DHCP6_CLIENT_START_MODE_SOLICIT,
+ _DHCP6_CLIENT_START_MODE_MAX,
+ _DHCP6_CLIENT_START_MODE_INVALID = -1,
+} DHCP6ClientStartMode;
typedef struct Link Link;
typedef struct Manager Manager;
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp6_pd_hint);
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp6_mud_url);
CONFIG_PARSER_PROTOTYPE(config_parse_dhcp6_delegated_prefix_token);
+CONFIG_PARSER_PROTOTYPE(config_parse_dhcp6_client_start_mode);
+
+const char* dhcp6_client_start_mode_to_string(DHCP6ClientStartMode i) _const_;
+DHCP6ClientStartMode dhcp6_client_start_mode_from_string(const char *s) _pure_;
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "dns-domain.h"
#include "networkd-link-bus.h"
#include "networkd-link.h"
#include <netinet/in.h>
#include <linux/if.h>
#include <linux/if_arp.h>
+#include <linux/if_link.h>
#include <unistd.h>
#include "alloc-util.h"
#include "networkd-manager.h"
#include "networkd-ndisc.h"
#include "networkd-neighbor.h"
+#include "networkd-sriov.h"
#include "networkd-radv.h"
#include "networkd-routing-policy-rule.h"
#include "networkd-wifi.h"
if (!netdev)
return;
+ if (netdev->ifindex <= 0)
+ return;
+
if (link_get(link->manager, netdev->ifindex, &master) < 0)
return;
Link *link;
assert(m);
- assert(ifindex);
+ assert(ifindex > 0);
assert(ret);
link = hashmap_get(m->links, INT_TO_PTR(ifindex));
if (!link->tc_configured)
return;
+ if (!link->sr_iov_configured)
+ return;
+
if (link_has_carrier(link) || !link->network->configure_without_carrier) {
if (link_ipv4ll_enabled(link, ADDRESS_FAMILY_IPV4) && !link->ipv4ll_address)
return 0;
}
-int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
int r;
assert(rtnl);
return log_link_warning_errno(link, r, "Could not start IPv6 Router Advertisement: %m");
}
- if (link_dhcp6_enabled(link) && link->network->dhcp6_without_ra) {
+ if (link_dhcp6_enabled(link) && IN_SET(link->network->dhcp6_without_ra,
+ DHCP6_CLIENT_START_MODE_INFORMATION_REQUEST,
+ DHCP6_CLIENT_START_MODE_SOLICIT)) {
assert(link->dhcp6_client);
assert(in_addr_is_link_local(AF_INET6, (const union in_addr_union*)&link->ipv6ll_address) > 0);
- r = dhcp6_request_address(link, true);
+ r = dhcp6_request_address(link, link->network->dhcp6_without_ra == DHCP6_CLIENT_START_MODE_INFORMATION_REQUEST);
if (r < 0 && r != -EBUSY)
return log_link_warning_errno(link, r, "Could not acquire DHCPv6 lease: %m");
else
if (!link_ipv6ll_enabled(link))
ipv6ll_mode = IN6_ADDR_GEN_MODE_NONE;
- else if (link->network->ipv6_address_gen_mode < 0) {
+ else if (link->network->ipv6ll_address_gen_mode < 0) {
r = sysctl_read_ip_property(AF_INET6, link->ifname, "stable_secret", NULL);
if (r < 0) {
/* The file may not exist. And even if it exists, when stable_secret is unset,
} else
ipv6ll_mode = IN6_ADDR_GEN_MODE_STABLE_PRIVACY;
} else
- ipv6ll_mode = link->network->ipv6_address_gen_mode;
+ ipv6ll_mode = link->network->ipv6ll_address_gen_mode;
r = sd_netlink_message_append_u8(req, IFLA_INET6_ADDR_GEN_MODE, ipv6ll_mode);
if (r < 0)
if (r < 0)
return r;
- r = set_ensure_allocated(&master->slaves, NULL);
- if (r < 0)
- return r;
-
- r = set_put(master->slaves, link);
+ r = set_ensure_put(&master->slaves, NULL, link);
if (r <= 0)
return r;
return 0;
}
+static int link_configure_sr_iov(Link *link) {
+ SRIOV *sr_iov;
+ Iterator i;
+ int r;
+
+ link->sr_iov_configured = false;
+ link->sr_iov_messages = 0;
+
+ ORDERED_HASHMAP_FOREACH(sr_iov, link->network->sr_iov_by_section, i) {
+ r = sr_iov_configure(link, sr_iov);
+ if (r < 0)
+ return r;
+ }
+
+ if (link->sr_iov_messages == 0)
+ link->sr_iov_configured = true;
+ else
+ log_link_debug(link, "Configuring SR-IOV");
+
+ return 0;
+}
+
static int link_configure(Link *link) {
int r;
if (r < 0)
return r;
+ r = link_configure_sr_iov(link);
+ if (r < 0)
+ return r;
+
if (link->iftype == ARPHRD_CAN)
return link_configure_can(link);
r = set_put(m->links_requesting_uuid, link);
if (r < 0)
return log_oom();
+ if (r > 0)
+ link_ref(link);
r = set_put(m->duids_requesting_uuid, duid);
if (r < 0)
return log_oom();
-
- link_ref(link);
}
return 0;
*dhcp4_address = NULL,
*ipv4ll_address = NULL;
union in_addr_union address;
- const char *p;
int r;
assert(link);
network_file_fail:
- if (addresses) {
- p = addresses;
+ for (const char *p = addresses; p; ) {
+ _cleanup_free_ char *address_str = NULL;
+ char *prefixlen_str;
+ int family;
+ unsigned char prefixlen;
- for (;;) {
- _cleanup_free_ char *address_str = NULL;
- char *prefixlen_str;
- int family;
- unsigned char prefixlen;
-
- r = extract_first_word(&p, &address_str, NULL, 0);
- if (r < 0) {
- log_link_debug_errno(link, r, "Failed to extract next address string: %m");
- continue;
- }
- if (r == 0)
- break;
-
- prefixlen_str = strchr(address_str, '/');
- if (!prefixlen_str) {
- log_link_debug(link, "Failed to parse address and prefix length %s", address_str);
- continue;
- }
-
- *prefixlen_str++ = '\0';
+ r = extract_first_word(&p, &address_str, NULL, 0);
+ if (r < 0)
+ log_link_warning_errno(link, r, "failed to parse ADDRESSES: %m");
+ if (r <= 0)
+ break;
- r = sscanf(prefixlen_str, "%hhu", &prefixlen);
- if (r != 1) {
- log_link_error(link, "Failed to parse prefixlen %s", prefixlen_str);
- continue;
- }
+ prefixlen_str = strchr(address_str, '/');
+ if (!prefixlen_str) {
+ log_link_debug(link, "Failed to parse address and prefix length %s", address_str);
+ continue;
+ }
+ *prefixlen_str++ = '\0';
- r = in_addr_from_string_auto(address_str, &family, &address);
- if (r < 0) {
- log_link_debug_errno(link, r, "Failed to parse address %s: %m", address_str);
- continue;
- }
+ r = sscanf(prefixlen_str, "%hhu", &prefixlen);
+ if (r != 1) {
+ log_link_error(link, "Failed to parse prefixlen %s", prefixlen_str);
+ continue;
+ }
- r = address_add(link, family, &address, prefixlen, NULL);
- if (r < 0)
- return log_link_error_errno(link, r, "Failed to add address: %m");
+ r = in_addr_from_string_auto(address_str, &family, &address);
+ if (r < 0) {
+ log_link_debug_errno(link, r, "Failed to parse address %s: %m", address_str);
+ continue;
}
- }
- if (routes) {
- p = routes;
+ r = address_add(link, family, &address, prefixlen, NULL);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Failed to add address: %m");
+ }
- for (;;) {
- _cleanup_(sd_event_source_unrefp) sd_event_source *expire = NULL;
- _cleanup_(route_freep) Route *tmp = NULL;
- _cleanup_free_ char *route_str = NULL;
- char *prefixlen_str;
- Route *route;
+ for (const char *p = routes; p; ) {
+ _cleanup_(sd_event_source_unrefp) sd_event_source *expire = NULL;
+ _cleanup_(route_freep) Route *tmp = NULL;
+ _cleanup_free_ char *route_str = NULL;
+ char *prefixlen_str;
+ Route *route;
- r = extract_first_word(&p, &route_str, NULL, 0);
- if (r < 0) {
- log_link_debug_errno(link, r, "Failed to extract next route string: %m");
- continue;
- }
- if (r == 0)
- break;
+ r = extract_first_word(&p, &route_str, NULL, 0);
+ if (r < 0)
+ log_link_debug_errno(link, r, "failed to parse ROUTES: %m");
+ if (r <= 0)
+ break;
- prefixlen_str = strchr(route_str, '/');
- if (!prefixlen_str) {
- log_link_debug(link, "Failed to parse route %s", route_str);
- continue;
- }
+ prefixlen_str = strchr(route_str, '/');
+ if (!prefixlen_str) {
+ log_link_debug(link, "Failed to parse route %s", route_str);
+ continue;
+ }
+ *prefixlen_str++ = '\0';
- *prefixlen_str++ = '\0';
+ r = route_new(&tmp);
+ if (r < 0)
+ return log_oom();
- r = route_new(&tmp);
- if (r < 0)
- return log_oom();
+ r = sscanf(prefixlen_str,
+ "%hhu/%hhu/%"SCNu32"/%"PRIu32"/"USEC_FMT,
+ &tmp->dst_prefixlen,
+ &tmp->tos,
+ &tmp->priority,
+ &tmp->table,
+ &tmp->lifetime);
+ if (r != 5) {
+ log_link_debug(link,
+ "Failed to parse destination prefix length, tos, priority, table or expiration %s",
+ prefixlen_str);
+ continue;
+ }
- r = sscanf(prefixlen_str, "%hhu/%hhu/%"SCNu32"/%"PRIu32"/"USEC_FMT, &tmp->dst_prefixlen, &tmp->tos, &tmp->priority, &tmp->table, &tmp->lifetime);
- if (r != 5) {
- log_link_debug(link,
- "Failed to parse destination prefix length, tos, priority, table or expiration %s",
- prefixlen_str);
- continue;
- }
+ r = in_addr_from_string_auto(route_str, &tmp->family, &tmp->dst);
+ if (r < 0) {
+ log_link_debug_errno(link, r, "Failed to parse route destination %s: %m", route_str);
+ continue;
+ }
- r = in_addr_from_string_auto(route_str, &tmp->family, &tmp->dst);
- if (r < 0) {
- log_link_debug_errno(link, r, "Failed to parse route destination %s: %m", route_str);
- continue;
- }
+ r = route_add(link, tmp, &route);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Failed to add route: %m");
- r = route_add(link, tmp, &route);
+ if (route->lifetime != USEC_INFINITY && !kernel_route_expiration_supported()) {
+ r = sd_event_add_time(link->manager->event, &expire,
+ clock_boottime_or_monotonic(),
+ route->lifetime, 0, route_expire_handler, route);
if (r < 0)
- return log_link_error_errno(link, r, "Failed to add route: %m");
-
- if (route->lifetime != USEC_INFINITY && !kernel_route_expiration_supported()) {
- r = sd_event_add_time(link->manager->event, &expire, clock_boottime_or_monotonic(), route->lifetime,
- 0, route_expire_handler, route);
- if (r < 0)
- log_link_warning_errno(link, r, "Could not arm route expiration handler: %m");
- }
-
- sd_event_source_unref(route->expire);
- route->expire = TAKE_PTR(expire);
+ log_link_warning_errno(link, r, "Could not arm route expiration handler: %m");
}
+
+ sd_event_source_unref(route->expire);
+ route->expire = TAKE_PTR(expire);
}
if (dhcp4_address) {
print_link_hashmap(f, "CARRIER_BOUND_BY=", link->bound_by_links);
if (link->dhcp_lease) {
- struct in_addr address;
- const char *tz = NULL;
- size_t client_id_len;
- const void *client_id;
-
- assert(link->network);
-
- r = sd_dhcp_lease_get_timezone(link->dhcp_lease, &tz);
- if (r >= 0)
- fprintf(f, "TIMEZONE=%s\n", tz);
-
- r = sd_dhcp_lease_get_address(link->dhcp_lease, &address);
- if (r >= 0) {
- fputs("DHCP4_ADDRESS=", f);
- serialize_in_addrs(f, &address, 1, NULL, NULL);
- fputc('\n', f);
- }
-
- r = sd_dhcp_lease_get_client_id(link->dhcp_lease, &client_id, &client_id_len);
- if (r >= 0) {
- _cleanup_free_ char *id = NULL;
-
- r = sd_dhcp_client_id_to_string(client_id, client_id_len, &id);
- if (r >= 0)
- fprintf(f, "DHCP4_CLIENT_ID=%s\n", id);
- }
-
r = dhcp_lease_save(link->dhcp_lease, link->lease_file);
if (r < 0)
goto fail;
/* mark manager dirty as link is dirty */
manager_dirty(link->manager);
- r = set_ensure_allocated(&link->manager->dirty_links, NULL);
- if (r < 0)
- /* allocation errors are ignored */
- return;
-
- r = set_put(link->manager->dirty_links, link);
+ r = set_ensure_put(&link->manager->dirty_links, NULL, link);
if (r <= 0)
- /* don't take another ref if the link was already dirty */
+ /* Ignore allocation errors and don't take another ref if the link was already dirty */
return;
-
link_ref(link);
}
link_unref(set_remove(link->manager->dirty_links, link));
}
-static const char* const link_ipv6_address_gen_mode_table[_LINK_IPV6_ADDRESS_GEN_MODE_MAX] = {
- [LINK_IPV6_ADDRESSS_GEN_MODE_EUI64] = "eui64",
- [LINK_IPV6_ADDRESSS_GEN_MODE_NONE] = "none",
- [LINK_IPV6_ADDRESSS_GEN_MODE_STABLE_PRIVACY] = "stable-privacy",
- [LINK_IPV6_ADDRESSS_GEN_MODE_RANDOM] = "random",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(link_ipv6_address_gen_mode, LinkIPv6AddressGenMode);
-DEFINE_CONFIG_PARSE_ENUM(config_parse_link_ipv6_address_gen_mode, link_ipv6_address_gen_mode, LinkIPv6AddressGenMode, "Failed to parse link IPv6 address generation mode");
-
static const char* const link_state_table[_LINK_STATE_MAX] = {
[LINK_STATE_PENDING] = "pending",
[LINK_STATE_INITIALIZED] = "initialized",
_LINK_STATE_INVALID = -1
} LinkState;
-typedef enum LinkIPv6AddressGenMode {
- LINK_IPV6_ADDRESSS_GEN_MODE_EUI64 = IN6_ADDR_GEN_MODE_EUI64,
- LINK_IPV6_ADDRESSS_GEN_MODE_NONE = IN6_ADDR_GEN_MODE_NONE,
- LINK_IPV6_ADDRESSS_GEN_MODE_STABLE_PRIVACY = IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
- LINK_IPV6_ADDRESSS_GEN_MODE_RANDOM = IN6_ADDR_GEN_MODE_RANDOM,
- _LINK_IPV6_ADDRESS_GEN_MODE_MAX,
- _LINK_IPV6_ADDRESS_GEN_MODE_INVALID = -1
-} LinkIPv6AddressGenMode;
-
typedef struct Manager Manager;
typedef struct Network Network;
typedef struct Address Address;
unsigned routing_policy_rule_messages;
unsigned routing_policy_rule_remove_messages;
unsigned tc_messages;
+ unsigned sr_iov_messages;
unsigned enslaving;
Set *addresses;
bool static_nexthops_configured:1;
bool routing_policy_rules_configured:1;
bool tc_configured:1;
+ bool sr_iov_configured:1;
bool setting_mtu:1;
bool setting_genmode:1;
bool ipv6_mtu_set:1;
const char* link_state_to_string(LinkState s) _const_;
LinkState link_state_from_string(const char *s) _pure_;
-const char* link_ipv6_address_gen_mode_to_string(LinkIPv6AddressGenMode s) _const_;
-LinkIPv6AddressGenMode link_ipv6_address_gen_mode_from_string(const char *s) _pure_;
-
uint32_t link_get_vrf_table(Link *link);
uint32_t link_get_dhcp_route_table(Link *link);
uint32_t link_get_ipv6_accept_ra_route_table(Link *link);
int link_request_set_nexthop(Link *link);
int link_reconfigure(Link *link, bool force);
-int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link);
-
-CONFIG_PARSER_PROTOTYPE(config_parse_link_ipv6_address_gen_mode);
int log_link_message_full_errno(Link *link, sd_netlink_message *m, int level, int err, const char *msg);
#define log_link_message_error_errno(link, m, err, msg) log_link_message_full_errno(link, m, LOG_ERR, err, msg)
if (r < 0 && r != -ENODATA) {
log_warning_errno(r, "rtnl: could not get NHA_OIF attribute, ignoring: %m");
return 0;
+ } else if (tmp->oif <= 0) {
+ log_warning("rtnl: received nexthop message with invalid ifindex %d, ignoring.", tmp->oif);
+ return 0;
}
r = link_get(m, tmp->oif, &link);
assert_se(duid = link_get_duid(link));
- r = set_ensure_allocated(&m->links_requesting_uuid, NULL);
- if (r < 0)
- return log_oom();
-
- r = set_ensure_allocated(&m->duids_requesting_uuid, NULL);
+ r = set_ensure_put(&m->links_requesting_uuid, NULL, link);
if (r < 0)
return log_oom();
+ if (r > 0)
+ link_ref(link);
- r = set_put(m->links_requesting_uuid, link);
+ r = set_ensure_put(&m->duids_requesting_uuid, NULL, duid);
if (r < 0)
return log_oom();
-
- r = set_put(m->duids_requesting_uuid, duid);
- if (r < 0)
- return log_oom();
-
- link_ref(link);
}
if (!m->bus || sd_bus_is_ready(m->bus) <= 0) {
continue;
}
- r = set_ensure_allocated(&link->ndisc_rdnss, &ndisc_rdnss_hash_ops);
- if (r < 0)
- return log_oom();
-
x = new(NDiscRDNSS, 1);
if (!x)
return log_oom();
.valid_until = time_now + lifetime * USEC_PER_SEC,
};
- r = set_put(link->ndisc_rdnss, x);
+ r = set_ensure_consume(&link->ndisc_rdnss, &ndisc_rdnss_hash_ops, TAKE_PTR(x));
if (r < 0)
return log_oom();
-
- TAKE_PTR(x);
-
assert(r > 0);
+
link_dirty(link);
}
continue;
}
- r = set_ensure_allocated(&link->ndisc_dnssl, &ndisc_dnssl_hash_ops);
- if (r < 0) {
- log_oom();
- return;
- }
-
s->valid_until = time_now + lifetime * USEC_PER_SEC;
- r = set_put(link->ndisc_dnssl, s);
+ r = set_ensure_consume(&link->ndisc_dnssl, &ndisc_dnssl_hash_ops, TAKE_PTR(s));
if (r < 0) {
log_oom();
return;
}
-
- s = NULL;
assert(r > 0);
+
link_dirty(link);
}
}
if (r < 0)
return log_link_error_errno(link, r, "Failed to get prefix address: %m");
- if (set_contains(link->network->ndisc_black_listed_prefix, &a.in6)) {
+ if (set_contains(link->network->ndisc_deny_listed_prefix, &a.in6)) {
if (DEBUG_LOGGING) {
_cleanup_free_ char *b = NULL;
(void) in_addr_to_string(AF_INET6, &a, &b);
- log_link_debug(link, "Prefix '%s' is black listed, ignoring", strna(b));
+ log_link_debug(link, "Prefix '%s' is deny-listed, ignoring", strna(b));
}
break;
IPv6Token,
free);
-int config_parse_ndisc_black_listed_prefix(
+int config_parse_ndisc_deny_listed_prefix(
const char *unit,
const char *filename,
unsigned line,
assert(data);
if (isempty(rvalue)) {
- network->ndisc_black_listed_prefix = set_free_free(network->ndisc_black_listed_prefix);
+ network->ndisc_deny_listed_prefix = set_free_free(network->ndisc_deny_listed_prefix);
return 0;
}
r = extract_first_word(&p, &n, NULL, 0);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
- "Failed to parse NDISC black listed prefix, ignoring assignment: %s",
+ "Failed to parse NDISC deny-listed prefix, ignoring assignment: %s",
rvalue);
return 0;
}
r = in_addr_from_string(AF_INET6, n, &ip);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
- "NDISC black listed prefix is invalid, ignoring assignment: %s", n);
+ "NDISC deny-listed prefix is invalid, ignoring assignment: %s", n);
continue;
}
- if (set_contains(network->ndisc_black_listed_prefix, &ip.in6))
+ if (set_contains(network->ndisc_deny_listed_prefix, &ip.in6))
continue;
- r = set_ensure_allocated(&network->ndisc_black_listed_prefix, &in6_addr_hash_ops);
- if (r < 0)
- return log_oom();
-
a = newdup(struct in6_addr, &ip.in6, 1);
if (!a)
return log_oom();
- r = set_put(network->ndisc_black_listed_prefix, a);
- if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, r,
- "Failed to store NDISC black listed prefix '%s', ignoring assignment: %m", n);
- continue;
- }
-
- TAKE_PTR(a);
+ r = set_ensure_consume(&network->ndisc_deny_listed_prefix, &in6_addr_hash_ops, TAKE_PTR(a));
+ if (r < 0)
+ return log_oom();
}
return 0;
void ndisc_vacuum(Link *link);
void ndisc_flush(Link *link);
-CONFIG_PARSER_PROTOTYPE(config_parse_ndisc_black_listed_prefix);
+CONFIG_PARSER_PROTOTYPE(config_parse_ndisc_deny_listed_prefix);
CONFIG_PARSER_PROTOTYPE(config_parse_address_generation_type);
CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_accept_ra_start_dhcp6_client);
.lladdr_size = lladdr_size,
};
- r = set_ensure_allocated(neighbors, &neighbor_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(*neighbors, neighbor);
+ r = set_ensure_put(neighbors, &neighbor_hash_ops, neighbor);
if (r < 0)
return r;
if (r == 0)
if (ret)
*ret = neighbor;
-
- neighbor = NULL;
+ TAKE_PTR(neighbor);
return 0;
}
return r;
} else if (r == 0) {
/* Neighbor is foreign, claim it as recognized */
- r = set_ensure_allocated(&link->neighbors, &neighbor_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(link->neighbors, neighbor);
+ r = set_ensure_put(&link->neighbors, &neighbor_hash_ops, neighbor);
if (r < 0)
return r;
#include "networkd-ipv4ll.h"
#include "networkd-ndisc.h"
#include "networkd-network.h"
+#include "networkd-sriov.h"
#include "qdisc.h"
#include "tclass.h"
#include "vlan-util.h"
Link.Multicast, config_parse_tristate, 0, offsetof(Network, multicast)
Link.AllMulticast, config_parse_tristate, 0, offsetof(Network, allmulticast)
Link.Unmanaged, config_parse_bool, 0, offsetof(Network, unmanaged)
-Link.IPv6LinkLocalAddressGenerationMode, config_parse_link_ipv6_address_gen_mode, 0, offsetof(Network, ipv6_address_gen_mode)
Link.RequiredForOnline, config_parse_required_for_online, 0, 0
+SR-IOV.VirtualFunction, config_parse_sr_iov_uint32, 0, 0
+SR-IOV.VLANId, config_parse_sr_iov_uint32, 0, 0
+SR-IOV.QualityOfService, config_parse_sr_iov_uint32, 0, 0
+SR-IOV.VLANProtocol, config_parse_sr_iov_vlan_proto, 0, 0
+SR-IOV.MACSpoofCheck, config_parse_sr_iov_boolean, 0, 0
+SR-IOV.QueryReceiveSideScaling, config_parse_sr_iov_boolean, 0, 0
+SR-IOV.Trust, config_parse_sr_iov_boolean, 0, 0
+SR-IOV.LinkState, config_parse_sr_iov_link_state, 0, 0
+SR-IOV.MACAddress, config_parse_sr_iov_mac, 0, 0
Network.Description, config_parse_string, 0, offsetof(Network, description)
Network.Bridge, config_parse_ifname, 0, offsetof(Network, bridge_name)
Network.Bond, config_parse_ifname, 0, offsetof(Network, bond_name)
Network.DHCP, config_parse_dhcp, 0, offsetof(Network, dhcp)
Network.DHCPServer, config_parse_bool, 0, offsetof(Network, dhcp_server)
Network.LinkLocalAddressing, config_parse_link_local_address_family, 0, offsetof(Network, link_local)
+Network.IPv6LinkLocalAddressGenerationMode, config_parse_ipv6_link_local_address_gen_mode, 0, offsetof(Network, ipv6ll_address_gen_mode)
Network.IPv4LLRoute, config_parse_bool, 0, offsetof(Network, ipv4ll_route)
Network.DefaultRouteOnDevice, config_parse_bool, 0, offsetof(Network, default_route_on_device)
Network.IPv6Token, config_parse_address_generation_type, 0, 0
DHCPv4.ListenPort, config_parse_uint16, 0, offsetof(Network, dhcp_client_port)
DHCPv4.SendRelease, config_parse_bool, 0, offsetof(Network, dhcp_send_release)
DHCPv4.SendDecline, config_parse_bool, 0, offsetof(Network, dhcp_send_decline)
-DHCPv4.BlackList, config_parse_dhcp_black_listed_ip_address, 0, 0
+DHCPv4.DenyList, config_parse_dhcp_acl_ip_address, 0, 0
+DHCPv4.AllowList, config_parse_dhcp_acl_ip_address, 0, 0
DHCPv4.IPServiceType, config_parse_dhcp_ip_service_type, 0, offsetof(Network, ip_service_type)
DHCPv4.SendOption, config_parse_dhcp_send_option, AF_INET, offsetof(Network, dhcp_client_send_options)
DHCPv4.SendVendorOption, config_parse_dhcp_send_option, 0, offsetof(Network, dhcp_client_send_vendor_options)
DHCPv6.AssignAcquiredDelegatedPrefixAddress, config_parse_bool, 0, offsetof(Network, dhcp6_pd_assign_prefix)
DHCPv6.AssignAcquiredDelegatedPrefixToken, config_parse_dhcp6_delegated_prefix_token, 0, 0
DHCPv6.PrefixDelegationHint, config_parse_dhcp6_pd_hint, 0, 0
-DHCPv6.WithoutRA, config_parse_bool, 0, offsetof(Network, dhcp6_without_ra)
+DHCPv6.WithoutRA, config_parse_dhcp6_client_start_mode, 0, offsetof(Network, dhcp6_without_ra)
DHCPv6.SendOption, config_parse_dhcp_send_option, AF_INET6, offsetof(Network, dhcp6_client_send_options)
DHCPv6.RouteMetric, config_parse_dhcp_route_metric, 0, 0
IPv6AcceptRA.UseAutonomousPrefix, config_parse_bool, 0, offsetof(Network, ipv6_accept_ra_use_autonomous_prefix)
IPv6AcceptRA.UseDomains, config_parse_dhcp_use_domains, 0, offsetof(Network, ipv6_accept_ra_use_domains)
IPv6AcceptRA.DHCPv6Client, config_parse_ipv6_accept_ra_start_dhcp6_client, 0, offsetof(Network, ipv6_accept_ra_start_dhcp6_client)
IPv6AcceptRA.RouteTable, config_parse_section_route_table, 0, 0
-IPv6AcceptRA.BlackList, config_parse_ndisc_black_listed_prefix, 0, 0
+IPv6AcceptRA.DenyList, config_parse_ndisc_deny_listed_prefix, 0, 0
+IPv6AcceptRA.BlackList, config_parse_ndisc_deny_listed_prefix, 0, 0
DHCPServer.MaxLeaseTimeSec, config_parse_sec, 0, offsetof(Network, dhcp_server_max_lease_time_usec)
DHCPServer.DefaultLeaseTimeSec, config_parse_sec, 0, offsetof(Network, dhcp_server_default_lease_time_usec)
DHCPServer.EmitDNS, config_parse_bool, 0, offsetof(Network, dhcp_server_emit[SD_DHCP_LEASE_DNS].emit)
QDisc.Handle, config_parse_qdisc_handle, _QDISC_KIND_INVALID, 0
BFIFO.Parent, config_parse_qdisc_parent, QDISC_KIND_BFIFO, 0
BFIFO.Handle, config_parse_qdisc_handle, QDISC_KIND_BFIFO, 0
-BFIFO.LimitSize, config_parse_bfifo_size, QDISC_KIND_BFIFO, 0
+BFIFO.LimitBytes, config_parse_bfifo_size, QDISC_KIND_BFIFO, 0
CAKE.Parent, config_parse_qdisc_parent, QDISC_KIND_CAKE, 0
CAKE.Handle, config_parse_qdisc_handle, QDISC_KIND_CAKE, 0
CAKE.Bandwidth, config_parse_cake_bandwidth, QDISC_KIND_CAKE, 0
-CAKE.Overhead, config_parse_cake_overhead, QDISC_KIND_CAKE, 0
+CAKE.OverheadBytes, config_parse_cake_overhead, QDISC_KIND_CAKE, 0
ControlledDelay.Parent, config_parse_qdisc_parent, QDISC_KIND_CODEL, 0
ControlledDelay.Handle, config_parse_qdisc_handle, QDISC_KIND_CODEL, 0
ControlledDelay.PacketLimit, config_parse_controlled_delay_u32, QDISC_KIND_CODEL, 0
DeficitRoundRobinScheduler.Handle, config_parse_qdisc_handle, QDISC_KIND_DRR, 0
DeficitRoundRobinSchedulerClass.Parent, config_parse_tclass_parent, TCLASS_KIND_DRR, 0
DeficitRoundRobinSchedulerClass.ClassId, config_parse_tclass_classid, TCLASS_KIND_DRR, 0
-DeficitRoundRobinSchedulerClass.Quantum, config_parse_drr_size, TCLASS_KIND_DRR, 0
+DeficitRoundRobinSchedulerClass.QuantumBytes, config_parse_drr_size, TCLASS_KIND_DRR, 0
+EnhancedTransmissionSelection.Parent, config_parse_qdisc_parent, QDISC_KIND_ETS, 0
+EnhancedTransmissionSelection.Handle, config_parse_qdisc_handle, QDISC_KIND_ETS, 0
+EnhancedTransmissionSelection.Bands, config_parse_ets_u8, QDISC_KIND_ETS, 0
+EnhancedTransmissionSelection.StrictBands, config_parse_ets_u8, QDISC_KIND_ETS, 0
+EnhancedTransmissionSelection.QuantumBytes, config_parse_ets_quanta, QDISC_KIND_ETS, 0
+EnhancedTransmissionSelection.PriorityMap, config_parse_ets_prio, QDISC_KIND_ETS, 0
PFIFO.Parent, config_parse_qdisc_parent, QDISC_KIND_PFIFO, 0
PFIFO.Handle, config_parse_qdisc_handle, QDISC_KIND_PFIFO, 0
PFIFO.PacketLimit, config_parse_pfifo_size, QDISC_KIND_PFIFO, 0
QuickFairQueueingClass.Parent, config_parse_tclass_parent, TCLASS_KIND_QFQ, 0
QuickFairQueueingClass.ClassId, config_parse_tclass_classid, TCLASS_KIND_QFQ, 0
QuickFairQueueingClass.Weight, config_parse_quick_fair_queueing_weight, TCLASS_KIND_QFQ, 0
-QuickFairQueueingClass.MaxPacketSize, config_parse_quick_fair_queueing_max_packet, TCLASS_KIND_QFQ, 0
+QuickFairQueueingClass.MaxPacketBytes, config_parse_quick_fair_queueing_max_packet, TCLASS_KIND_QFQ, 0
FairQueueing.Parent, config_parse_qdisc_parent, QDISC_KIND_FQ, 0
FairQueueing.Handle, config_parse_qdisc_handle, QDISC_KIND_FQ, 0
FairQueueing.PacketLimit, config_parse_fair_queueing_u32, QDISC_KIND_FQ, 0
FairQueueing.FlowLimit, config_parse_fair_queueing_u32, QDISC_KIND_FQ, 0
-FairQueueing.Quantum, config_parse_fair_queueing_size, QDISC_KIND_FQ, 0
-FairQueueing.InitialQuantum, config_parse_fair_queueing_size, QDISC_KIND_FQ, 0
+FairQueueing.QuantumBytes, config_parse_fair_queueing_size, QDISC_KIND_FQ, 0
+FairQueueing.InitialQuantumBytes, config_parse_fair_queueing_size, QDISC_KIND_FQ, 0
FairQueueing.MaximumRate, config_parse_fair_queueing_max_rate, QDISC_KIND_FQ, 0
FairQueueing.Buckets, config_parse_fair_queueing_u32, QDISC_KIND_FQ, 0
FairQueueing.OrphanMask, config_parse_fair_queueing_u32, QDISC_KIND_FQ, 0
FairQueueingControlledDelay.Parent, config_parse_qdisc_parent, QDISC_KIND_FQ_CODEL, 0
FairQueueingControlledDelay.Handle, config_parse_qdisc_handle, QDISC_KIND_FQ_CODEL, 0
FairQueueingControlledDelay.PacketLimit, config_parse_fair_queueing_controlled_delay_u32, QDISC_KIND_FQ_CODEL, 0
-FairQueueingControlledDelay.MemoryLimit, config_parse_fair_queueing_controlled_delay_size, QDISC_KIND_FQ_CODEL, 0
+FairQueueingControlledDelay.MemoryLimitBytes, config_parse_fair_queueing_controlled_delay_size, QDISC_KIND_FQ_CODEL, 0
FairQueueingControlledDelay.Flows, config_parse_fair_queueing_controlled_delay_u32, QDISC_KIND_FQ_CODEL, 0
-FairQueueingControlledDelay.Quantum, config_parse_fair_queueing_controlled_delay_size, QDISC_KIND_FQ_CODEL, 0
+FairQueueingControlledDelay.QuantumBytes, config_parse_fair_queueing_controlled_delay_size, QDISC_KIND_FQ_CODEL, 0
FairQueueingControlledDelay.TargetSec, config_parse_fair_queueing_controlled_delay_usec, QDISC_KIND_FQ_CODEL, 0
FairQueueingControlledDelay.IntervalSec, config_parse_fair_queueing_controlled_delay_usec, QDISC_KIND_FQ_CODEL, 0
FairQueueingControlledDelay.CEThresholdSec, config_parse_fair_queueing_controlled_delay_usec, QDISC_KIND_FQ_CODEL, 0
HierarchyTokenBucket.Parent, config_parse_qdisc_parent, QDISC_KIND_HTB, 0
HierarchyTokenBucket.Handle, config_parse_qdisc_handle, QDISC_KIND_HTB, 0
HierarchyTokenBucket.DefaultClass, config_parse_hierarchy_token_bucket_default_class, QDISC_KIND_HTB, 0
+HierarchyTokenBucket.RateToQuantum, config_parse_hierarchy_token_bucket_u32, QDISC_KIND_HTB, 0
HierarchyTokenBucketClass.Parent, config_parse_tclass_parent, TCLASS_KIND_HTB, 0
HierarchyTokenBucketClass.ClassId, config_parse_tclass_classid, TCLASS_KIND_HTB, 0
-HierarchyTokenBucketClass.Priority, config_parse_hierarchy_token_bucket_u32, TCLASS_KIND_HTB, 0
-HierarchyTokenBucketClass.Rate, config_parse_hierarchy_token_bucket_rate, TCLASS_KIND_HTB, 0
-HierarchyTokenBucketClass.CeilRate, config_parse_hierarchy_token_bucket_rate, TCLASS_KIND_HTB, 0
+HierarchyTokenBucketClass.Priority, config_parse_hierarchy_token_bucket_class_u32, TCLASS_KIND_HTB, 0
+HierarchyTokenBucketClass.QuantumBytes, config_parse_hierarchy_token_bucket_class_size, TCLASS_KIND_HTB, 0
+HierarchyTokenBucketClass.MTUBytes, config_parse_hierarchy_token_bucket_class_size, TCLASS_KIND_HTB, 0
+HierarchyTokenBucketClass.OverheadBytes, config_parse_hierarchy_token_bucket_class_size, TCLASS_KIND_HTB, 0
+HierarchyTokenBucketClass.Rate, config_parse_hierarchy_token_bucket_class_rate, TCLASS_KIND_HTB, 0
+HierarchyTokenBucketClass.CeilRate, config_parse_hierarchy_token_bucket_class_rate, TCLASS_KIND_HTB, 0
+HierarchyTokenBucketClass.BufferBytes, config_parse_hierarchy_token_bucket_class_size, TCLASS_KIND_HTB, 0
+HierarchyTokenBucketClass.CeilBufferBytes, config_parse_hierarchy_token_bucket_class_size, TCLASS_KIND_HTB, 0
NetworkEmulator.Parent, config_parse_qdisc_parent, QDISC_KIND_NETEM, 0
NetworkEmulator.Handle, config_parse_qdisc_handle, QDISC_KIND_NETEM, 0
NetworkEmulator.DelaySec, config_parse_network_emulator_delay, QDISC_KIND_NETEM, 0
StochasticFairnessQueueing.PerturbPeriodSec, config_parse_stochastic_fairness_queueing_perturb_period, QDISC_KIND_SFQ, 0
TokenBucketFilter.Parent, config_parse_qdisc_parent, QDISC_KIND_TBF, 0
TokenBucketFilter.Handle, config_parse_qdisc_handle, QDISC_KIND_TBF, 0
-TokenBucketFilter.Rate, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
-TokenBucketFilter.Burst, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
-TokenBucketFilter.LimitSize, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
+TokenBucketFilter.Rate, config_parse_token_bucket_filter_rate, QDISC_KIND_TBF, 0
+TokenBucketFilter.BurstBytes, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
+TokenBucketFilter.LimitBytes, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
TokenBucketFilter.MTUBytes, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
TokenBucketFilter.MPUBytes, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
-TokenBucketFilter.PeakRate, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
+TokenBucketFilter.PeakRate, config_parse_token_bucket_filter_rate, QDISC_KIND_TBF, 0
TokenBucketFilter.LatencySec, config_parse_token_bucket_filter_latency, QDISC_KIND_TBF, 0
TrivialLinkEqualizer.Parent, config_parse_qdisc_parent, QDISC_KIND_TEQL, 0
TrivialLinkEqualizer.Handle, config_parse_qdisc_handle, QDISC_KIND_TEQL, 0
TrivialLinkEqualizer.Id, config_parse_trivial_link_equalizer_id, QDISC_KIND_TEQL, 0
/* backwards compatibility: do not add new entries to this section */
Network.IPv4LL, config_parse_ipv4ll, 0, offsetof(Network, link_local)
+DHCPv4.BlackList, config_parse_dhcp_acl_ip_address, 0, 0
DHCP.ClientIdentifier, config_parse_dhcp_client_identifier, 0, offsetof(Network, dhcp_client_identifier)
DHCP.UseDNS, config_parse_dhcp_use_dns, 0, 0
DHCP.UseNTP, config_parse_dhcp_use_ntp, 0, 0
TrafficControlQueueingDiscipline.NetworkEmulatorLossRate, config_parse_network_emulator_rate, 0, 0
TrafficControlQueueingDiscipline.NetworkEmulatorDuplicateRate, config_parse_network_emulator_rate, 0, 0
TrafficControlQueueingDiscipline.NetworkEmulatorPacketLimit, config_parse_network_emulator_packet_limit, 0, 0
+FairQueueing.Quantum, config_parse_fair_queueing_size, QDISC_KIND_FQ, 0
+FairQueueing.InitialQuantum, config_parse_fair_queueing_size, QDISC_KIND_FQ, 0
+FairQueueingControlledDelay.MemoryLimit, config_parse_fair_queueing_controlled_delay_size, QDISC_KIND_FQ_CODEL, 0
+FairQueueingControlledDelay.Quantum, config_parse_fair_queueing_controlled_delay_size, QDISC_KIND_FQ_CODEL, 0
+TokenBucketFilter.Burst, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
+TokenBucketFilter.LimitSize, config_parse_token_bucket_filter_size, QDISC_KIND_TBF, 0
#include "network-internal.h"
#include "networkd-manager.h"
#include "networkd-network.h"
+#include "networkd-sriov.h"
#include "parse-util.h"
#include "path-lookup.h"
#include "set.h"
Route *route, *route_next;
FdbEntry *fdb, *fdb_next;
TrafficControl *tc;
+ SRIOV *sr_iov;
Iterator i;
assert(network);
if (traffic_control_section_verify(tc, &has_root, &has_clsact) < 0)
traffic_control_free(tc);
+ ORDERED_HASHMAP_FOREACH(sr_iov, network->sr_iov_by_section, i)
+ if (sr_iov_section_verify(sr_iov) < 0)
+ sr_iov_free(sr_iov);
+
return 0;
}
/* If LinkLocalAddressing= is not set, then set to ADDRESS_FAMILY_IPV6 later. */
.link_local = _ADDRESS_FAMILY_INVALID,
+ .ipv6ll_address_gen_mode = _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_INVALID,
.ipv4_accept_local = -1,
.configure_without_carrier = false,
.ignore_carrier_loss = -1,
.keep_configuration = _KEEP_CONFIGURATION_INVALID,
- .ipv6_address_gen_mode = _LINK_IPV6_ADDRESS_GEN_MODE_INVALID,
.can_triple_sampling = -1,
.can_termination = -1,
.ip_service_type = -1,
filename, NETWORK_DIRS, dropin_dirname,
"Match\0"
"Link\0"
+ "SR-IOV\0"
"Network\0"
"Address\0"
"Neighbor\0"
"ControlledDelay\0"
"DeficitRoundRobinScheduler\0"
"DeficitRoundRobinSchedulerClass\0"
+ "EnhancedTransmissionSelection\0"
"FairQueueing\0"
"FairQueueingControlledDelay\0"
"GenericRandomEarlyDetection\0"
free(network->dhcp_mudurl);
strv_free(network->dhcp_user_class);
free(network->dhcp_hostname);
- set_free(network->dhcp_black_listed_ip);
+ set_free(network->dhcp_deny_listed_ip);
+ set_free(network->dhcp_allow_listed_ip);
set_free(network->dhcp_request_options);
set_free(network->dhcp6_request_options);
free(network->mac);
ordered_set_free_free(network->router_search_domains);
free(network->router_dns);
- set_free_free(network->ndisc_black_listed_prefix);
+ set_free_free(network->ndisc_deny_listed_prefix);
free(network->bridge_name);
free(network->bond_name);
hashmap_free(network->prefixes_by_section);
hashmap_free(network->route_prefixes_by_section);
hashmap_free(network->rules_by_section);
+ ordered_hashmap_free_with_destructor(network->sr_iov_by_section, sr_iov_free);
ordered_hashmap_free_with_destructor(network->tc_by_section, traffic_control_free);
if (network->manager &&
continue;
}
- r = set_ensure_allocated(&n->dnssec_negative_trust_anchors, &dns_name_hash_ops);
- if (r < 0)
- return log_oom();
-
- r = set_put(n->dnssec_negative_trust_anchors, w);
+ r = set_ensure_consume(&n->dnssec_negative_trust_anchors, &dns_name_hash_ops, TAKE_PTR(w));
if (r < 0)
return log_oom();
- if (r > 0)
- w = NULL;
}
return 0;
};
DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(keep_configuration, KeepConfiguration, KEEP_CONFIGURATION_YES);
+
+static const char* const ipv6_link_local_address_gen_mode_table[_IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX] = {
+ [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64] = "eui64",
+ [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE] = "none",
+ [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY] = "stable-privacy",
+ [IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_RANDOM] = "random",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(ipv6_link_local_address_gen_mode, IPv6LinkLocalAddressGenMode);
+DEFINE_CONFIG_PARSE_ENUM(config_parse_ipv6_link_local_address_gen_mode, ipv6_link_local_address_gen_mode, IPv6LinkLocalAddressGenMode, "Failed to parse IPv6 link local address generation mode");
#include "networkd-brvlan.h"
#include "networkd-dhcp-common.h"
#include "networkd-dhcp4.h"
+#include "networkd-dhcp6.h"
#include "networkd-dhcp-server.h"
#include "networkd-fdb.h"
#include "networkd-ipv6-proxy-ndp.h"
_KEEP_CONFIGURATION_INVALID = -1,
} KeepConfiguration;
+typedef enum IPv6LinkLocalAddressGenMode {
+ IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_EUI64 = IN6_ADDR_GEN_MODE_EUI64,
+ IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_NONE = IN6_ADDR_GEN_MODE_NONE,
+ IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_STABLE_PRIVACY = IN6_ADDR_GEN_MODE_STABLE_PRIVACY,
+ IPV6_LINK_LOCAL_ADDRESSS_GEN_MODE_RANDOM = IN6_ADDR_GEN_MODE_RANDOM,
+ _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_MAX,
+ _IPV6_LINK_LOCAL_ADDRESS_GEN_MODE_INVALID = -1
+} IPv6LinkLocalAddressGenMode;
+
typedef struct Manager Manager;
typedef struct NetworkDHCPServerEmitAddress {
bool dhcp_send_decline;
DHCPUseDomains dhcp_use_domains;
sd_ipv4acd *dhcp_acd;
- Set *dhcp_black_listed_ip;
+ Set *dhcp_deny_listed_ip;
+ Set *dhcp_allow_listed_ip;
Set *dhcp_request_options;
OrderedHashmap *dhcp_client_send_options;
OrderedHashmap *dhcp_client_send_vendor_options;
bool dhcp6_use_dns_set;
bool dhcp6_use_ntp;
bool dhcp6_use_ntp_set;
- bool dhcp6_without_ra;
uint8_t dhcp6_pd_length;
uint32_t dhcp6_route_metric;
bool dhcp6_route_metric_set;
char **dhcp6_user_class;
char **dhcp6_vendor_class;
struct in6_addr dhcp6_pd_address;
+ DHCP6ClientStartMode dhcp6_without_ra;
OrderedHashmap *dhcp6_client_send_options;
OrderedHashmap *dhcp6_client_send_vendor_options;
Set *dhcp6_request_options;
uint32_t dhcp_server_pool_offset;
uint32_t dhcp_server_pool_size;
- /* IPV4LL Support */
+ /* link local addressing support */
AddressFamily link_local;
+ IPv6LinkLocalAddressGenMode ipv6ll_address_gen_mode;
bool ipv4ll_route;
bool default_route_on_device;
DHCPUseDomains ipv6_accept_ra_use_domains;
IPv6AcceptRAStartDHCP6Client ipv6_accept_ra_start_dhcp6_client;
uint32_t ipv6_accept_ra_route_table;
- Set *ndisc_black_listed_prefix;
+ Set *ndisc_deny_listed_prefix;
OrderedHashmap *ipv6_tokens;
IPv6PrivacyExtensions ipv6_privacy_extensions;
bool configure_without_carrier;
int ignore_carrier_loss;
KeepConfiguration keep_configuration;
- LinkIPv6AddressGenMode ipv6_address_gen_mode;
uint32_t iaid;
DUID duid;
Hashmap *route_prefixes_by_section;
Hashmap *rules_by_section;
OrderedHashmap *tc_by_section;
+ OrderedHashmap *sr_iov_by_section;
/* All kinds of DNS configuration */
struct in_addr_data *dns;
CONFIG_PARSER_PROTOTYPE(config_parse_ntp);
CONFIG_PARSER_PROTOTYPE(config_parse_required_for_online);
CONFIG_PARSER_PROTOTYPE(config_parse_keep_configuration);
+CONFIG_PARSER_PROTOTYPE(config_parse_ipv6_link_local_address_gen_mode);
const struct ConfigPerfItem* network_network_gperf_lookup(const char *key, GPERF_LEN_TYPE length);
const char* keep_configuration_to_string(KeepConfiguration i) _const_;
KeepConfiguration keep_configuration_from_string(const char *s) _pure_;
+
+const char* ipv6_link_local_address_gen_mode_to_string(IPv6LinkLocalAddressGenMode s) _const_;
+IPv6LinkLocalAddressGenMode ipv6_link_local_address_gen_mode_from_string(const char *s) _pure_;
nexthop->family = in->family;
nexthop->gw = in->gw;
- r = set_ensure_allocated(nexthops, &nexthop_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(*nexthops, nexthop);
+ r = set_ensure_put(nexthops, &nexthop_hash_ops, nexthop);
if (r < 0)
return r;
if (r == 0)
return r;
} else if (r == 0) {
/* Take over a foreign nexthop */
- r = set_ensure_allocated(&link->nexthops, &nexthop_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(link->nexthops, nexthop);
+ r = set_ensure_put(&link->nexthops, &nexthop_hash_ops, nexthop);
if (r < 0)
return r;
return 0;
}
+int radv_add_prefix(Link *link, struct in6_addr *prefix, uint8_t prefix_len,
+ uint32_t lifetime_preferred, uint32_t lifetime_valid) {
+ _cleanup_(sd_radv_prefix_unrefp) sd_radv_prefix *p = NULL;
+ int r;
+
+ assert(link);
+ assert(link->radv);
+
+ r = sd_radv_prefix_new(&p);
+ if (r < 0)
+ return r;
+
+ r = sd_radv_prefix_set_prefix(p, prefix, prefix_len);
+ if (r < 0)
+ return r;
+
+ r = sd_radv_prefix_set_preferred_lifetime(p, lifetime_preferred);
+ if (r < 0)
+ return r;
+
+ r = sd_radv_prefix_set_valid_lifetime(p, lifetime_valid);
+ if (r < 0)
+ return r;
+
+ r = sd_radv_add_prefix(link->radv, p, true);
+ if (r < 0 && r != -EEXIST)
+ return r;
+
+ return 0;
+}
+
int config_parse_radv_dns(
const char *unit,
const char *filename,
int radv_emit_dns(Link *link);
int radv_configure(Link *link);
+int radv_add_prefix(Link *link, struct in6_addr *prefix, uint8_t prefix_len,
+ uint32_t lifetime_preferred, uint32_t lifetime_valid);
const char* radv_prefix_delegation_to_string(RADVPrefixDelegation i) _const_;
RADVPrefixDelegation radv_prefix_delegation_from_string(const char *s) _pure_;
route->initrwnd = in->initrwnd;
route->lifetime = in->lifetime;
- r = set_ensure_allocated(routes, &route_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(*routes, route);
+ r = set_ensure_put(routes, &route_hash_ops, route);
if (r < 0)
return r;
if (r == 0)
return r;
} else if (r == 0) {
/* Take over a foreign route */
- r = set_ensure_allocated(&link->routes, &route_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(link->routes, route);
+ r = set_ensure_put(&link->routes, &route_hash_ops, route);
if (r < 0)
return r;
if (set_contains(m->rules_foreign, rule)) {
set_remove(m->rules_foreign, rule);
- r = set_ensure_allocated(&m->rules, &routing_policy_rule_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(m->rules, rule);
+ r = set_ensure_put(&m->rules, &routing_policy_rule_hash_ops, rule);
if (r < 0)
return r;
if (r == 0)
if (r < 0)
return r;
- r = set_ensure_allocated(rules, &routing_policy_rule_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(*rules, rule);
+ r = set_ensure_put(rules, &routing_policy_rule_hash_ops, rule);
if (r < 0)
return r;
if (r == 0)
if (rule->tos > 0) {
r = sd_rtnl_message_routing_policy_rule_set_tos(m, rule->tos);
if (r < 0)
- return log_link_error_errno(link, r, "Could not set ip rule tos: %m");
+ return log_link_error_errno(link, r, "Could not set IP rule TOS: %m");
}
if (rule->table < 256) {
r = sd_rtnl_message_routing_policy_rule_set_table(m, rule->table);
if (r < 0)
- return log_link_error_errno(link, r, "Could not set ip rule table: %m");
+ return log_link_error_errno(link, r, "Could not set IP rule table: %m");
} else {
r = sd_rtnl_message_routing_policy_rule_set_table(m, RT_TABLE_UNSPEC);
if (r < 0)
- return log_link_error_errno(link, r, "Could not set ip rule table: %m");
+ return log_link_error_errno(link, r, "Could not set IP rule table: %m");
r = sd_netlink_message_append_u32(m, FRA_TABLE, rule->table);
if (r < 0)
r = safe_atou8(rvalue, &n->tos);
if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse RPDB rule tos, ignoring: %s", rvalue);
+ log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse RPDB rule TOS, ignoring: %s", rvalue);
return 0;
}
if (!l)
return -ENOMEM;
- r = set_ensure_allocated(rules, &routing_policy_rule_hash_ops);
- if (r < 0)
- return r;
-
STRV_FOREACH(i, l) {
_cleanup_(routing_policy_rule_freep) RoutingPolicyRule *rule = NULL;
} else if (streq(a, "tos")) {
r = safe_atou8(b, &rule->tos);
if (r < 0) {
- log_error_errno(r, "Failed to parse RPDB rule tos, ignoring: %s", b);
+ log_error_errno(r, "Failed to parse RPDB rule TOS, ignoring: %s", b);
continue;
}
} else if (streq(a, "table")) {
}
}
- r = set_put(*rules, rule);
+ r = set_ensure_put(rules, &routing_policy_rule_hash_ops, rule);
if (r < 0) {
log_warning_errno(r, "Failed to add RPDB rule to saved DB, ignoring: %s", p);
continue;
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+
+ * Copyright © 2020 VMware, Inc. */
+
+#include "alloc-util.h"
+#include "netlink-util.h"
+#include "networkd-manager.h"
+#include "networkd-sriov.h"
+#include "parse-util.h"
+#include "set.h"
+#include "string-util.h"
+
+static int sr_iov_new(SRIOV **ret) {
+ SRIOV *sr_iov;
+
+ sr_iov = new(SRIOV, 1);
+ if (!sr_iov)
+ return -ENOMEM;
+
+ *sr_iov = (SRIOV) {
+ .vf = (uint32_t) -1,
+ .vlan_proto = ETH_P_8021Q,
+ .vf_spoof_check_setting = -1,
+ .trust = -1,
+ .query_rss = -1,
+ .link_state = _SR_IOV_LINK_STATE_INVALID,
+ };
+
+ *ret = TAKE_PTR(sr_iov);
+
+ return 0;
+}
+
+static int sr_iov_new_static(Network *network, const char *filename, unsigned section_line, SRIOV **ret) {
+ _cleanup_(network_config_section_freep) NetworkConfigSection *n = NULL;
+ _cleanup_(sr_iov_freep) SRIOV *sr_iov = NULL;
+ SRIOV *existing = NULL;
+ int r;
+
+ assert(network);
+ assert(ret);
+ assert(filename);
+ assert(section_line > 0);
+
+ r = network_config_section_new(filename, section_line, &n);
+ if (r < 0)
+ return r;
+
+ existing = ordered_hashmap_get(network->sr_iov_by_section, n);
+ if (existing) {
+ *ret = existing;
+ return 0;
+ }
+
+ r = sr_iov_new(&sr_iov);
+ if (r < 0)
+ return r;
+
+ sr_iov->network = network;
+ sr_iov->section = TAKE_PTR(n);
+
+ r = ordered_hashmap_ensure_allocated(&network->sr_iov_by_section, &network_config_hash_ops);
+ if (r < 0)
+ return r;
+
+ r = ordered_hashmap_put(network->sr_iov_by_section, sr_iov->section, sr_iov);
+ if (r < 0)
+ return r;
+
+ *ret = TAKE_PTR(sr_iov);
+ return 0;
+}
+
+SRIOV *sr_iov_free(SRIOV *sr_iov) {
+ if (!sr_iov)
+ return NULL;
+
+ if (sr_iov->network && sr_iov->section)
+ ordered_hashmap_remove(sr_iov->network->sr_iov_by_section, sr_iov->section);
+
+ network_config_section_free(sr_iov->section);
+
+ return mfree(sr_iov);
+}
+
+static int sr_iov_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+ int r;
+
+ assert(link);
+ assert(link->sr_iov_messages > 0);
+ link->sr_iov_messages--;
+
+ if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+ return 1;
+
+ r = sd_netlink_message_get_errno(m);
+ if (r < 0 && r != -EEXIST) {
+ log_link_message_error_errno(link, m, r, "Could not set up SR-IOV");
+ link_enter_failed(link);
+ return 1;
+ }
+
+ if (link->sr_iov_messages == 0) {
+ log_link_debug(link, "SR-IOV configured");
+ link->sr_iov_configured = true;
+ link_check_ready(link);
+ }
+
+ return 1;
+}
+
+int sr_iov_configure(Link *link, SRIOV *sr_iov) {
+ _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+ int r;
+
+ assert(link);
+ assert(link->manager);
+ assert(link->manager->rtnl);
+ assert(link->ifindex > 0);
+
+ log_link_debug(link, "Setting SR-IOV virtual function %"PRIu32, sr_iov->vf);
+
+ r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not allocate RTM_SETLINK message: %m");
+
+ r = sd_netlink_message_open_container(req, IFLA_VFINFO_LIST);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not open IFLA_VFINFO_LIST container: %m");
+
+ r = sd_netlink_message_open_container(req, IFLA_VF_INFO);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not open IFLA_VF_INFO container: %m");
+
+ if (!ether_addr_is_null(&sr_iov->mac)) {
+ struct ifla_vf_mac ivm = {
+ .vf = sr_iov->vf,
+ };
+
+ memcpy(ivm.mac, &sr_iov->mac, ETH_ALEN);
+ r = sd_netlink_message_append_data(req, IFLA_VF_MAC, &ivm, sizeof(struct ifla_vf_mac));
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append IFLA_VF_MAC: %m");
+ }
+
+ if (sr_iov->vf_spoof_check_setting >= 0) {
+ struct ifla_vf_spoofchk ivs = {
+ .vf = sr_iov->vf,
+ .setting = sr_iov->vf_spoof_check_setting,
+ };
+
+ r = sd_netlink_message_append_data(req, IFLA_VF_SPOOFCHK, &ivs, sizeof(struct ifla_vf_spoofchk));
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append IFLA_VF_SPOOFCHK: %m");
+ }
+
+ if (sr_iov->query_rss >= 0) {
+ struct ifla_vf_rss_query_en ivs = {
+ .vf = sr_iov->vf,
+ .setting = sr_iov->query_rss,
+ };
+
+ r = sd_netlink_message_append_data(req, IFLA_VF_RSS_QUERY_EN, &ivs, sizeof(struct ifla_vf_rss_query_en));
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append IFLA_VF_RSS_QUERY_EN: %m");
+ }
+
+ if (sr_iov->trust >= 0) {
+ struct ifla_vf_trust ivt = {
+ .vf = sr_iov->vf,
+ .setting = sr_iov->trust,
+ };
+
+ r = sd_netlink_message_append_data(req, IFLA_VF_TRUST, &ivt, sizeof(struct ifla_vf_trust));
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append IFLA_VF_TRUST: %m");
+ }
+
+ if (sr_iov->link_state >= 0) {
+ struct ifla_vf_link_state ivl = {
+ .vf = sr_iov->vf,
+ .link_state = sr_iov->link_state,
+ };
+
+ r = sd_netlink_message_append_data(req, IFLA_VF_LINK_STATE, &ivl, sizeof(struct ifla_vf_link_state));
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append IFLA_VF_LINK_STATE: %m");
+ }
+
+ if (sr_iov->vlan > 0) {
+ /* Because of padding, first the buffer must be initialized with 0. */
+ struct ifla_vf_vlan_info ivvi = {};
+ ivvi.vf = sr_iov->vf;
+ ivvi.vlan = sr_iov->vlan;
+ ivvi.qos = sr_iov->qos;
+ ivvi.vlan_proto = htobe16(sr_iov->vlan_proto);
+
+ r = sd_netlink_message_open_container(req, IFLA_VF_VLAN_LIST);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not open IFLA_VF_VLAN_LIST container: %m");
+
+ r = sd_netlink_message_append_data(req, IFLA_VF_VLAN_INFO, &ivvi, sizeof(struct ifla_vf_vlan_info));
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append IFLA_VF_VLAN_INFO: %m");
+
+ r = sd_netlink_message_close_container(req);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not close IFLA_VF_VLAN_LIST container: %m");
+ }
+
+ r = sd_netlink_message_close_container(req);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not close IFLA_VF_INFO container: %m");
+
+ r = sd_netlink_message_close_container(req);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not close IFLA_VFINFO_LIST container: %m");
+
+ r = netlink_call_async(link->manager->rtnl, NULL, req, sr_iov_handler,
+ link_netlink_destroy_callback, link);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
+
+ link_ref(link);
+ link->sr_iov_messages++;
+
+ return 0;
+}
+
+int sr_iov_section_verify(SRIOV *sr_iov) {
+ assert(sr_iov);
+
+ if (section_is_invalid(sr_iov->section))
+ return -EINVAL;
+
+ if (sr_iov->vf == (uint32_t) -1)
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+ "%s: [SRIOV] section without VirtualFunction= field configured. "
+ "Ignoring [SRIOV] section from line %u.",
+ sr_iov->section->filename, sr_iov->section->line);
+
+ return 0;
+}
+
+int config_parse_sr_iov_uint32(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
+ Network *network = data;
+ uint32_t k;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = sr_iov_new_static(network, filename, section_line, &sr_iov);
+ if (r < 0)
+ return r;
+
+ if (isempty(rvalue)) {
+ if (streq(lvalue, "VirtualFunction"))
+ sr_iov->vf = (uint32_t) -1;
+ else if (streq(lvalue, "VLANId"))
+ sr_iov->vlan = 0;
+ else if (streq(lvalue, "QualityOfService"))
+ sr_iov->qos = 0;
+ else
+ assert_not_reached("Invalid lvalue");
+
+ TAKE_PTR(sr_iov);
+ return 0;
+ }
+
+ r = safe_atou32(rvalue, &k);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to parse SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
+ return 0;
+ }
+
+ if (streq(lvalue, "VLANId")) {
+ if (k == 0 || k > 4095) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid SR-IOV VLANId: %d", k);
+ return 0;
+ }
+ sr_iov->vlan = k;
+ } else if (streq(lvalue, "VirtualFunction")) {
+ if (k >= INT_MAX) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid SR-IOV virtual function: %d", k);
+ return 0;
+ }
+ sr_iov->vf = k;
+ } else if (streq(lvalue, "QualityOfService"))
+ sr_iov->qos = k;
+ else
+ assert_not_reached("Invalid lvalue");
+
+ TAKE_PTR(sr_iov);
+ return 0;
+}
+
+int config_parse_sr_iov_vlan_proto(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
+ Network *network = data;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = sr_iov_new_static(network, filename, section_line, &sr_iov);
+ if (r < 0)
+ return r;
+
+ if (isempty(rvalue) || streq(rvalue, "802.1Q"))
+ sr_iov->vlan_proto = ETH_P_8021Q;
+ else if (streq(rvalue, "802.1ad"))
+ sr_iov->vlan_proto = ETH_P_8021AD;
+ else {
+ log_syntax(unit, LOG_ERR, filename, line, 0,
+ "Invalid SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
+ return 0;
+ }
+
+ TAKE_PTR(sr_iov);
+ return 0;
+}
+
+int config_parse_sr_iov_link_state(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
+ Network *network = data;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = sr_iov_new_static(network, filename, section_line, &sr_iov);
+ if (r < 0)
+ return r;
+
+ /* Unfortunately, SR_IOV_LINK_STATE_DISABLE is 2, not 0. So, we cannot use
+ * DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN() macro. */
+
+ if (isempty(rvalue)) {
+ sr_iov->link_state = _SR_IOV_LINK_STATE_INVALID;
+ TAKE_PTR(sr_iov);
+ return 0;
+ }
+
+ if (streq(rvalue, "auto")) {
+ sr_iov->link_state = SR_IOV_LINK_STATE_AUTO;
+ TAKE_PTR(sr_iov);
+ return 0;
+ }
+
+ r = parse_boolean(rvalue);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to parse SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
+ return 0;
+ }
+
+ sr_iov->link_state = r ? SR_IOV_LINK_STATE_ENABLE : SR_IOV_LINK_STATE_DISABLE;
+ TAKE_PTR(sr_iov);
+ return 0;
+}
+
+int config_parse_sr_iov_boolean(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
+ Network *network = data;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = sr_iov_new_static(network, filename, section_line, &sr_iov);
+ if (r < 0)
+ return r;
+
+ if (isempty(rvalue)) {
+ if (streq(lvalue, "MACSpoofCheck"))
+ sr_iov->vf_spoof_check_setting = -1;
+ else if (streq(lvalue, "QueryReceiveSideScaling"))
+ sr_iov->query_rss = -1;
+ else if (streq(lvalue, "Trust"))
+ sr_iov->trust = -1;
+ else
+ assert_not_reached("Invalid lvalue");
+
+ TAKE_PTR(sr_iov);
+ return 0;
+ }
+
+ r = parse_boolean(rvalue);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse '%s=', ignoring: %s", lvalue, rvalue);
+ return 0;
+ }
+
+ if (streq(lvalue, "MACSpoofCheck"))
+ sr_iov->vf_spoof_check_setting = r;
+ else if (streq(lvalue, "QueryReceiveSideScaling"))
+ sr_iov->query_rss = r;
+ else if (streq(lvalue, "Trust"))
+ sr_iov->trust = r;
+ else
+ assert_not_reached("Invalid lvalue");
+
+ TAKE_PTR(sr_iov);
+ return 0;
+}
+
+int config_parse_sr_iov_mac(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(sr_iov_free_or_set_invalidp) SRIOV *sr_iov = NULL;
+ Network *network = data;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = sr_iov_new_static(network, filename, section_line, &sr_iov);
+ if (r < 0)
+ return r;
+
+ if (isempty(rvalue)) {
+ sr_iov->mac = ETHER_ADDR_NULL;
+ TAKE_PTR(sr_iov);
+ return 0;
+ }
+
+ r = ether_addr_from_string(rvalue, &sr_iov->mac);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, 0,
+ "Failed to parse SR-IOV '%s=', ignoring assignment: %s", lvalue, rvalue);
+ return 0;
+ }
+
+ TAKE_PTR(sr_iov);
+ return 0;
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+
+ * Copyright © 2020 VMware, Inc. */
+#pragma once
+
+#include <linux/if_link.h>
+
+#include "conf-parser.h"
+#include "networkd-link.h"
+#include "networkd-network.h"
+#include "networkd-util.h"
+
+typedef enum SRIOVLinkState {
+ SR_IOV_LINK_STATE_AUTO = IFLA_VF_LINK_STATE_AUTO,
+ SR_IOV_LINK_STATE_ENABLE = IFLA_VF_LINK_STATE_ENABLE,
+ SR_IOV_LINK_STATE_DISABLE = IFLA_VF_LINK_STATE_DISABLE,
+ _SR_IOV_LINK_STATE_MAX,
+ _SR_IOV_LINK_STATE_INVALID = -1,
+} SRIOVLinkState;
+
+typedef struct SRIOV {
+ NetworkConfigSection *section;
+ Network *network;
+
+ uint32_t vf; /* 0 - 2147483646 */
+ uint32_t vlan; /* 0 - 4095, 0 disables VLAN filter */
+ uint32_t qos;
+ uint16_t vlan_proto; /* ETH_P_8021Q or ETH_P_8021AD */
+ int vf_spoof_check_setting;
+ int query_rss;
+ int trust;
+ SRIOVLinkState link_state;
+ struct ether_addr mac;
+} SRIOV;
+
+SRIOV *sr_iov_free(SRIOV *sr_iov);
+
+int sr_iov_configure(Link *link, SRIOV *sr_iov);
+int sr_iov_section_verify(SRIOV *sr_iov);
+
+DEFINE_NETWORK_SECTION_FUNCTIONS(SRIOV, sr_iov_free);
+
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_uint32);
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_boolean);
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_link_state);
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_vlan_proto);
+CONFIG_PARSER_PROTOTYPE(config_parse_sr_iov_mac);
#include "user-util.h"
static int run(int argc, char *argv[]) {
- _cleanup_(notify_on_cleanup) const char *notify_message = NULL;
_cleanup_(manager_freep) Manager *m = NULL;
+ _cleanup_(notify_on_cleanup) const char *notify_message = NULL;
int r;
log_setup_service();
r = safe_atoi32(rvalue, &v);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
- "Failed to parse 'Overhead=', ignoring assignment: %s",
- rvalue);
+ "Failed to parse '%s=', ignoring assignment: %s",
+ lvalue, rvalue);
return 0;
}
if (v < -64 || v > 256) {
log_syntax(unit, LOG_ERR, filename, line, 0,
- "Invalid 'Overhead=', ignoring assignment: %s",
- rvalue);
+ "Invalid '%s=', ignoring assignment: %s",
+ lvalue, rvalue);
return 0;
}
return 0;
}
- r = parse_size(rvalue, 1000, &u);
+ r = parse_size(rvalue, 1024, &u);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
"Failed to parse '%s=', ignoring assignment: %s",
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include <linux/pkt_sched.h>
+
+#include "alloc-util.h"
+#include "conf-parser.h"
+#include "ets.h"
+#include "memory-util.h"
+#include "netlink-util.h"
+#include "parse-util.h"
+#include "qdisc.h"
+#include "string-util.h"
+#include "tc-util.h"
+
+static int enhanced_transmission_selection_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
+ EnhancedTransmissionSelection *ets;
+ int r;
+
+ assert(link);
+ assert(qdisc);
+ assert(req);
+
+ ets = ETS(qdisc);
+
+ r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "ets");
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not open container TCA_OPTIONS: %m");
+
+ r = sd_netlink_message_append_u8(req, TCA_ETS_NBANDS, ets->n_bands);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append TCA_ETS_NBANDS attribute: %m");
+
+ if (ets->n_strict > 0) {
+ r = sd_netlink_message_append_u8(req, TCA_ETS_NSTRICT, ets->n_strict);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append TCA_ETS_NSTRICT attribute: %m");
+ }
+
+ if (ets->n_quanta > 0) {
+ r = sd_netlink_message_open_container(req, TCA_ETS_QUANTA);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not open container TCA_ETS_QUANTA: %m");
+
+ for (unsigned i = 0; i < ets->n_quanta; i++) {
+ r = sd_netlink_message_append_u32(req, TCA_ETS_QUANTA_BAND, ets->quanta[i]);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append TCA_ETS_QUANTA_BAND attribute: %m");
+ }
+
+ r = sd_netlink_message_close_container(req);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not close container TCA_ETS_QUANTA: %m");
+ }
+
+ if (ets->n_prio > 0) {
+ r = sd_netlink_message_open_container(req, TCA_ETS_PRIOMAP);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not open container TCA_ETS_PRIOMAP: %m");
+
+ for (unsigned i = 0; i < ets->n_prio; i++) {
+ r = sd_netlink_message_append_u8(req, TCA_ETS_PRIOMAP_BAND, ets->prio[i]);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append TCA_ETS_PRIOMAP_BAND attribute: %m");
+ }
+
+ r = sd_netlink_message_close_container(req);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not close container TCA_ETS_PRIOMAP: %m");
+ }
+
+ r = sd_netlink_message_close_container(req);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not close container TCA_OPTIONS: %m");
+
+ return 0;
+}
+
+int config_parse_ets_u8(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+ EnhancedTransmissionSelection *ets;
+ Network *network = data;
+ uint8_t v, *p;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = qdisc_new_static(QDISC_KIND_ETS, network, filename, section_line, &qdisc);
+ if (r == -ENOMEM)
+ return log_oom();
+ if (r < 0)
+ return log_syntax(unit, LOG_ERR, filename, line, r,
+ "More than one kind of queueing discipline, ignoring assignment: %m");
+
+ ets = ETS(qdisc);
+ if (streq(lvalue, "Bands"))
+ p = &ets->n_bands;
+ else if (streq(lvalue, "StrictBands"))
+ p = &ets->n_strict;
+ else
+ assert_not_reached("Invalid lvalue.");
+
+ if (isempty(rvalue)) {
+ *p = 0;
+
+ qdisc = NULL;
+ return 0;
+ }
+
+ r = safe_atou8(rvalue, &v);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to parse '%s=', ignoring assignment: %s",
+ lvalue, rvalue);
+ return 0;
+ }
+ if (v > TCQ_ETS_MAX_BANDS) {
+ log_syntax(unit, LOG_ERR, filename, line, 0,
+ "Invalid '%s='. The value must be <= %d, ignoring assignment: %s",
+ lvalue, TCQ_ETS_MAX_BANDS, rvalue);
+ return 0;
+ }
+
+ *p = v;
+ qdisc = NULL;
+
+ return 0;
+}
+
+int config_parse_ets_quanta(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+ EnhancedTransmissionSelection *ets;
+ Network *network = data;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = qdisc_new_static(QDISC_KIND_ETS, network, filename, section_line, &qdisc);
+ if (r == -ENOMEM)
+ return log_oom();
+ if (r < 0)
+ return log_syntax(unit, LOG_ERR, filename, line, r,
+ "More than one kind of queueing discipline, ignoring assignment: %m");
+
+ ets = ETS(qdisc);
+
+ if (isempty(rvalue)) {
+ memzero(ets->quanta, sizeof(uint32_t) * TCQ_ETS_MAX_BANDS);
+ ets->n_quanta = 0;
+
+ qdisc = NULL;
+ return 0;
+ }
+
+ for (const char *p = rvalue;;) {
+ _cleanup_free_ char *word = NULL;
+ uint64_t v;
+
+ r = extract_first_word(&p, &word, NULL, 0);
+ if (r == -ENOMEM)
+ return log_oom();
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to extract next value, ignoring: %m");
+ continue;
+ }
+ if (r == 0)
+ break;
+
+ r = parse_size(word, 1024, &v);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to parse '%s=', ignoring assignment: %s",
+ lvalue, word);
+ continue;
+ }
+ if (v == 0 || v > UINT32_MAX) {
+ log_syntax(unit, LOG_ERR, filename, line, 0,
+ "Invalid '%s=', ignoring assignment: %s",
+ lvalue, word);
+ continue;
+ }
+ if (ets->n_quanta >= TCQ_ETS_MAX_BANDS) {
+ log_syntax(unit, LOG_ERR, filename, line, 0,
+ "Too many quanta in '%s=', ignoring assignment: %s",
+ lvalue, word);
+ continue;
+ }
+
+ ets->quanta[ets->n_quanta++] = v;
+ }
+
+ qdisc = NULL;
+
+ return 0;
+}
+
+int config_parse_ets_prio(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+ EnhancedTransmissionSelection *ets;
+ Network *network = data;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = qdisc_new_static(QDISC_KIND_ETS, network, filename, section_line, &qdisc);
+ if (r == -ENOMEM)
+ return log_oom();
+ if (r < 0)
+ return log_syntax(unit, LOG_ERR, filename, line, r,
+ "More than one kind of queueing discipline, ignoring assignment: %m");
+
+ ets = ETS(qdisc);
+
+ if (isempty(rvalue)) {
+ memzero(ets->prio, sizeof(uint8_t) * (TC_PRIO_MAX + 1));
+ ets->n_prio = 0;
+
+ qdisc = NULL;
+ return 0;
+ }
+
+ for (const char *p = rvalue;;) {
+ _cleanup_free_ char *word = NULL;
+ uint8_t v;
+
+ r = extract_first_word(&p, &word, NULL, 0);
+ if (r == -ENOMEM)
+ return log_oom();
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to extract next value, ignoring: %m");
+ continue;
+ }
+ if (r == 0)
+ break;
+
+ r = safe_atou8(word, &v);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to parse '%s=', ignoring assignment: %s",
+ lvalue, word);
+ continue;
+ }
+ if (ets->n_prio > TC_PRIO_MAX) {
+ log_syntax(unit, LOG_ERR, filename, line, 0,
+ "Too many priomap in '%s=', ignoring assignment: %s",
+ lvalue, word);
+ continue;
+ }
+
+ ets->prio[ets->n_prio++] = v;
+ }
+
+ qdisc = NULL;
+
+ return 0;
+}
+
+static int enhanced_transmission_selection_verify(QDisc *qdisc) {
+ EnhancedTransmissionSelection *ets;
+
+ assert(qdisc);
+
+ ets = ETS(qdisc);
+
+ if (ets->n_bands == 0)
+ ets->n_bands = ets->n_strict + ets->n_quanta;
+
+ if (ets->n_bands == 0)
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+ "%s: At least one of Band=, Strict=, or Quanta= must be specified. "
+ "Ignoring [EnhancedTransmissionSelection] section from line %u.",
+ qdisc->section->filename, qdisc->section->line);
+
+ if (ets->n_bands < ets->n_strict + ets->n_quanta)
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+ "%s: Not enough total bands to cover all the strict bands and quanta. "
+ "Ignoring [EnhancedTransmissionSelection] section from line %u.",
+ qdisc->section->filename, qdisc->section->line);
+
+ for (unsigned i = 0; i < ets->n_prio; i++)
+ if (ets->prio[i] >= ets->n_bands)
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+ "%s: PriorityMap= element is out of bands. "
+ "Ignoring [EnhancedTransmissionSelection] section from line %u.",
+ qdisc->section->filename, qdisc->section->line);
+
+ return 0;
+}
+
+const QDiscVTable ets_vtable = {
+ .object_size = sizeof(EnhancedTransmissionSelection),
+ .tca_kind = "ets",
+ .fill_message = enhanced_transmission_selection_fill_message,
+ .verify = enhanced_transmission_selection_verify,
+};
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include <linux/pkt_sched.h>
+
+#include "conf-parser.h"
+#include "qdisc.h"
+
+typedef struct EnhancedTransmissionSelection {
+ QDisc meta;
+
+ uint8_t n_bands;
+ uint8_t n_strict;
+ unsigned n_quanta;
+ uint32_t quanta[TCQ_ETS_MAX_BANDS];
+ unsigned n_prio;
+ uint8_t prio[TC_PRIO_MAX + 1];
+} EnhancedTransmissionSelection;
+
+DEFINE_QDISC_CAST(ETS, EnhancedTransmissionSelection);
+extern const QDiscVTable ets_vtable;
+
+CONFIG_PARSER_PROTOTYPE(config_parse_ets_u8);
+CONFIG_PARSER_PROTOTYPE(config_parse_ets_quanta);
+CONFIG_PARSER_PROTOTYPE(config_parse_ets_prio);
return 0;
}
- r = parse_size(rvalue, 1000, &u);
+ r = parse_size(rvalue, 1024, &u);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
"Failed to parse '%s=', ignoring assignment: %s",
#include "parse-util.h"
#include "qdisc.h"
#include "string-util.h"
+#include "strv.h"
static int fair_queueing_controlled_delay_init(QDisc *qdisc) {
FairQueueingControlledDelay *fqcd;
fqcd = FQ_CODEL(qdisc);
- if (streq(lvalue, "MemoryLimit"))
+ if (STR_IN_SET(lvalue, "MemoryLimitBytes", "MemoryLimit"))
p = &fqcd->memory_limit;
- else if (streq(lvalue, "Quantum"))
+ else if (STR_IN_SET(lvalue, "QuantumBytes", "Quantum"))
p = &fqcd->quantum;
else
assert_not_reached("Invalid lvalue.");
if (isempty(rvalue)) {
- if (streq(lvalue, "MemoryLimit"))
+ if (STR_IN_SET(lvalue, "MemoryLimitBytes", "MemoryLimit"))
*p = UINT32_MAX;
else
*p = 0;
#include "netlink-util.h"
#include "parse-util.h"
#include "string-util.h"
-#include "util.h"
+#include "strv.h"
static int fair_queueing_init(QDisc *qdisc) {
FairQueueing *fq;
fq = FQ(qdisc);
- if (streq(lvalue, "Quantum"))
+ if (STR_IN_SET(lvalue, "QuantumBytes", "Quantum"))
p = &fq->quantum;
- else if (streq(lvalue, "InitialQuantum"))
+ else if (STR_IN_SET(lvalue, "InitialQuantumBytes", "InitialQuantum"))
p = &fq->initial_quantum;
else
assert_not_reached("Invalid lvalue");
#include "string-util.h"
#include "tc-util.h"
+#define HTB_DEFAULT_RATE_TO_QUANTUM 10
+#define HTB_DEFAULT_MTU 1600 /* Ethernet packet length */
+
static int hierarchy_token_bucket_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
HierarchyTokenBucket *htb;
struct tc_htb_glob opt = {
- .rate2quantum = 10,
.version = 3,
};
int r;
htb = HTB(qdisc);
+ opt.rate2quantum = htb->rate_to_quantum;
opt.defcls = htb->default_class;
r = sd_netlink_message_open_container_union(req, TCA_OPTIONS, "htb");
return 0;
}
+int config_parse_hierarchy_token_bucket_u32(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+ HierarchyTokenBucket *htb;
+ Network *network = data;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = qdisc_new_static(QDISC_KIND_HTB, network, filename, section_line, &qdisc);
+ if (r == -ENOMEM)
+ return log_oom();
+ if (r < 0)
+ return log_syntax(unit, LOG_ERR, filename, line, r,
+ "More than one kind of queueing discipline, ignoring assignment: %m");
+
+ htb = HTB(qdisc);
+
+ if (isempty(rvalue)) {
+ htb->rate_to_quantum = HTB_DEFAULT_RATE_TO_QUANTUM;
+
+ qdisc = NULL;
+ return 0;
+ }
+
+ r = safe_atou32(rvalue, &htb->rate_to_quantum);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to parse '%s=', ignoring assignment: %s",
+ lvalue, rvalue);
+ return 0;
+ }
+
+ qdisc = NULL;
+
+ return 0;
+}
+
+static int hierarchy_token_bucket_init(QDisc *qdisc) {
+ HierarchyTokenBucket *htb;
+
+ assert(qdisc);
+
+ htb = HTB(qdisc);
+
+ htb->rate_to_quantum = HTB_DEFAULT_RATE_TO_QUANTUM;
+
+ return 0;
+}
+
const QDiscVTable htb_vtable = {
.object_size = sizeof(HierarchyTokenBucket),
.tca_kind = "htb",
.fill_message = hierarchy_token_bucket_fill_message,
+ .init = hierarchy_token_bucket_init,
};
static int hierarchy_token_bucket_class_fill_message(Link *link, TClass *tclass, sd_netlink_message *req) {
HierarchyTokenBucketClass *htb;
struct tc_htb_opt opt = {};
- uint32_t rtab[256], ctab[256], mtu = 1600; /* Ethernet packet length */
+ uint32_t rtab[256], ctab[256];
int r;
assert(link);
htb = TCLASS_TO_HTB(tclass);
- if (htb->ceil_rate == 0)
- htb->ceil_rate = htb->rate;
-
opt.prio = htb->priority;
+ opt.quantum = htb->quantum;
opt.rate.rate = (htb->rate >= (1ULL << 32)) ? ~0U : htb->rate;
opt.ceil.rate = (htb->ceil_rate >= (1ULL << 32)) ? ~0U : htb->ceil_rate;
- r = tc_transmit_time(htb->rate, mtu, &opt.buffer);
+ opt.rate.overhead = htb->overhead;
+ opt.ceil.overhead = htb->overhead;
+
+ r = tc_transmit_time(htb->rate, htb->buffer, &opt.buffer);
if (r < 0)
return log_link_error_errno(link, r, "Failed to calculate buffer size: %m");
- r = tc_transmit_time(htb->ceil_rate, mtu, &opt.cbuffer);
+ r = tc_transmit_time(htb->ceil_rate, htb->ceil_buffer, &opt.cbuffer);
if (r < 0)
return log_link_error_errno(link, r, "Failed to calculate ceil buffer size: %m");
- r = tc_fill_ratespec_and_table(&opt.rate, rtab, mtu);
+ r = tc_fill_ratespec_and_table(&opt.rate, rtab, htb->mtu);
if (r < 0)
return log_link_error_errno(link, r, "Failed to calculate rate table: %m");
- r = tc_fill_ratespec_and_table(&opt.ceil, ctab, mtu);
+ r = tc_fill_ratespec_and_table(&opt.ceil, ctab, htb->mtu);
if (r < 0)
return log_link_error_errno(link, r, "Failed to calculate ceil rate table: %m");
return 0;
}
-int config_parse_hierarchy_token_bucket_u32(
+int config_parse_hierarchy_token_bucket_class_u32(
const char *unit,
const char *filename,
unsigned line,
_cleanup_(tclass_free_or_set_invalidp) TClass *tclass = NULL;
HierarchyTokenBucketClass *htb;
Network *network = data;
+ uint32_t v;
int r;
assert(filename);
if (isempty(rvalue)) {
htb->priority = 0;
+ tclass = NULL;
+ return 0;
+ }
+
+ r = safe_atou32(rvalue, &v);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to parse '%s=', ignoring assignment: %s",
+ lvalue, rvalue);
+ return 0;
+ }
+
+ htb->priority = v;
+ tclass = NULL;
+
+ return 0;
+}
+
+int config_parse_hierarchy_token_bucket_class_size(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(tclass_free_or_set_invalidp) TClass *tclass = NULL;
+ HierarchyTokenBucketClass *htb;
+ Network *network = data;
+ uint64_t v;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = tclass_new_static(TCLASS_KIND_HTB, network, filename, section_line, &tclass);
+ if (r < 0)
+ return log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to create traffic control class, ignoring assignment: %m");
+
+ htb = TCLASS_TO_HTB(tclass);
+
+ if (isempty(rvalue)) {
+ if (streq(lvalue, "QuantumBytes"))
+ htb->quantum = 0;
+ else if (streq(lvalue, "MTUBytes"))
+ htb->mtu = HTB_DEFAULT_MTU;
+ else if (streq(lvalue, "OverheadBytes"))
+ htb->overhead = 0;
+ else if (streq(lvalue, "BufferBytes"))
+ htb->buffer = 0;
+ else if (streq(lvalue, "CeilBufferBytes"))
+ htb->ceil_buffer = 0;
+ else
+ assert_not_reached("Invalid lvalue");
tclass = NULL;
return 0;
}
- r = safe_atou32(rvalue, &htb->priority);
+ r = parse_size(rvalue, 1024, &v);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
"Failed to parse '%s=', ignoring assignment: %s",
lvalue, rvalue);
return 0;
}
+ if ((streq(lvalue, "OverheadBytes") && v > UINT16_MAX) || v > UINT32_MAX) {
+ log_syntax(unit, LOG_ERR, filename, line, 0,
+ "Invalid '%s=', ignoring assignment: %s",
+ lvalue, rvalue);
+ return 0;
+ }
+
+ if (streq(lvalue, "QuantumBytes"))
+ htb->quantum = v;
+ else if (streq(lvalue, "OverheadBytes"))
+ htb->overhead = v;
+ else if (streq(lvalue, "MTUBytes"))
+ htb->mtu = v;
+ else if (streq(lvalue, "BufferBytes"))
+ htb->buffer = v;
+ else if (streq(lvalue, "CeilBufferBytes"))
+ htb->ceil_buffer = v;
+ else
+ assert_not_reached("Invalid lvalue");
tclass = NULL;
return 0;
}
-int config_parse_hierarchy_token_bucket_rate(
+int config_parse_hierarchy_token_bucket_class_rate(
const char *unit,
const char *filename,
unsigned line,
return 0;
}
+static int hierarchy_token_bucket_class_init(TClass *tclass) {
+ HierarchyTokenBucketClass *htb;
+
+ assert(tclass);
+
+ htb = TCLASS_TO_HTB(tclass);
+
+ htb->mtu = HTB_DEFAULT_MTU;
+
+ return 0;
+}
+
+static int hierarchy_token_bucket_class_verify(TClass *tclass) {
+ HierarchyTokenBucketClass *htb;
+ uint32_t hz;
+ int r;
+
+ assert(tclass);
+
+ htb = TCLASS_TO_HTB(tclass);
+
+ if (htb->rate == 0)
+ return log_warning_errno(SYNTHETIC_ERRNO(EINVAL),
+ "%s: Rate= is mandatory. "
+ "Ignoring [HierarchyTokenBucketClass] section from line %u.",
+ tclass->section->filename, tclass->section->line);
+
+ /* if CeilRate= setting is missing, use the same as Rate= */
+ if (htb->ceil_rate == 0)
+ htb->ceil_rate = htb->rate;
+
+ r = tc_init(NULL, &hz);
+ if (r < 0)
+ return log_error_errno(r, "Failed to read /proc/net/psched: %m");
+
+ if (htb->buffer == 0)
+ htb->buffer = htb->rate / hz + htb->mtu;
+ if (htb->ceil_buffer == 0)
+ htb->ceil_buffer = htb->ceil_rate / hz + htb->mtu;
+
+ return 0;
+}
+
const TClassVTable htb_tclass_vtable = {
.object_size = sizeof(HierarchyTokenBucketClass),
.tca_kind = "htb",
.fill_message = hierarchy_token_bucket_class_fill_message,
+ .init = hierarchy_token_bucket_class_init,
+ .verify = hierarchy_token_bucket_class_verify,
};
QDisc meta;
uint32_t default_class;
+ uint32_t rate_to_quantum;
} HierarchyTokenBucket;
DEFINE_QDISC_CAST(HTB, HierarchyTokenBucket);
extern const QDiscVTable htb_vtable;
CONFIG_PARSER_PROTOTYPE(config_parse_hierarchy_token_bucket_default_class);
+CONFIG_PARSER_PROTOTYPE(config_parse_hierarchy_token_bucket_u32);
typedef struct HierarchyTokenBucketClass {
TClass meta;
uint32_t priority;
+ uint32_t quantum;
+ uint32_t mtu;
+ uint16_t overhead;
uint64_t rate;
+ uint32_t buffer;
uint64_t ceil_rate;
+ uint32_t ceil_buffer;
} HierarchyTokenBucketClass;
DEFINE_TCLASS_CAST(HTB, HierarchyTokenBucketClass);
extern const TClassVTable htb_tclass_vtable;
-CONFIG_PARSER_PROTOTYPE(config_parse_hierarchy_token_bucket_u32);
-CONFIG_PARSER_PROTOTYPE(config_parse_hierarchy_token_bucket_rate);
+CONFIG_PARSER_PROTOTYPE(config_parse_hierarchy_token_bucket_class_u32);
+CONFIG_PARSER_PROTOTYPE(config_parse_hierarchy_token_bucket_class_size);
+CONFIG_PARSER_PROTOTYPE(config_parse_hierarchy_token_bucket_class_rate);
[QDISC_KIND_CAKE] = &cake_vtable,
[QDISC_KIND_CODEL] = &codel_vtable,
[QDISC_KIND_DRR] = &drr_vtable,
+ [QDISC_KIND_ETS] = &ets_vtable,
[QDISC_KIND_FQ] = &fq_vtable,
[QDISC_KIND_FQ_CODEL] = &fq_codel_vtable,
[QDISC_KIND_GRED] = &gred_vtable,
};
static int qdisc_new(QDiscKind kind, QDisc **ret) {
- QDisc *qdisc;
+ _cleanup_(qdisc_freep) QDisc *qdisc = NULL;
int r;
if (kind == _QDISC_KIND_INVALID) {
QDISC_KIND_CAKE,
QDISC_KIND_CODEL,
QDISC_KIND_DRR,
+ QDISC_KIND_ETS,
QDISC_KIND_FQ,
QDISC_KIND_FQ_CODEL,
QDISC_KIND_GRED,
#include "cake.h"
#include "codel.h"
+#include "ets.h"
#include "fifo.h"
#include "fq-codel.h"
#include "fq.h"
return 0;
}
- r = parse_size(rvalue, 1000, &v);
+ r = parse_size(rvalue, 1024, &v);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
"Failed to parse '%s=', ignoring assignment: %s",
#include "parse-util.h"
#include "qdisc.h"
#include "string-util.h"
+#include "strv.h"
#include "tc-util.h"
-#include "util.h"
static int token_bucket_filter_fill_message(Link *link, QDisc *qdisc, sd_netlink_message *req) {
uint32_t rtab[256], ptab[256];
tbf = TBF(qdisc);
if (isempty(rvalue)) {
- if (streq(lvalue, "Rate"))
- tbf->rate = 0;
- else if (streq(lvalue, "Burst"))
+ if (STR_IN_SET(lvalue, "BurstBytes", "Burst"))
tbf->burst = 0;
- else if (streq(lvalue, "LimitSize"))
+ else if (STR_IN_SET(lvalue, "LimitBytes", "LimitSize"))
tbf->limit = 0;
else if (streq(lvalue, "MTUBytes"))
tbf->mtu = 0;
else if (streq(lvalue, "MPUBytes"))
tbf->mpu = 0;
- else if (streq(lvalue, "PeakRate"))
- tbf->peak_rate = 0;
+ else
+ assert_not_reached("unknown lvalue");
qdisc = NULL;
return 0;
}
- r = parse_size(rvalue, 1000, &k);
+ r = parse_size(rvalue, 1024, &k);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r,
"Failed to parse '%s=', ignoring assignment: %s",
return 0;
}
- if (streq(lvalue, "Rate"))
- tbf->rate = k / 8;
- else if (streq(lvalue, "Burst"))
+ if (STR_IN_SET(lvalue, "BurstBytes", "Burst"))
tbf->burst = k;
- else if (streq(lvalue, "LimitSize"))
+ else if (STR_IN_SET(lvalue, "LimitBytes", "LimitSize"))
tbf->limit = k;
else if (streq(lvalue, "MPUBytes"))
tbf->mpu = k;
else if (streq(lvalue, "MTUBytes"))
tbf->mtu = k;
+ else
+ assert_not_reached("unknown lvalue");
+
+ qdisc = NULL;
+
+ return 0;
+}
+
+int config_parse_token_bucket_filter_rate(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
+
+ _cleanup_(qdisc_free_or_set_invalidp) QDisc *qdisc = NULL;
+ Network *network = data;
+ TokenBucketFilter *tbf;
+ uint64_t k, *p;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ r = qdisc_new_static(QDISC_KIND_TBF, network, filename, section_line, &qdisc);
+ if (r == -ENOMEM)
+ return log_oom();
+ if (r < 0)
+ return log_syntax(unit, LOG_ERR, filename, line, r,
+ "More than one kind of queueing discipline, ignoring assignment: %m");
+
+ tbf = TBF(qdisc);
+ if (streq(lvalue, "Rate"))
+ p = &tbf->rate;
else if (streq(lvalue, "PeakRate"))
- tbf->peak_rate = k / 8;
+ p = &tbf->peak_rate;
+ else
+ assert_not_reached("unknown lvalue");
+
+ if (isempty(rvalue)) {
+ *p = 0;
+
+ qdisc = NULL;
+ return 0;
+ }
+
+ r = parse_size(rvalue, 1000, &k);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "Failed to parse '%s=', ignoring assignment: %s",
+ lvalue, rvalue);
+ return 0;
+ }
+
+ *p = k / 8;
qdisc = NULL;
CONFIG_PARSER_PROTOTYPE(config_parse_token_bucket_filter_latency);
CONFIG_PARSER_PROTOTYPE(config_parse_token_bucket_filter_size);
+CONFIG_PARSER_PROTOTYPE(config_parse_token_bucket_filter_rate);
#include "tc-util.h"
#include "time-util.h"
-static int tc_init(double *ticks_in_usec) {
- uint32_t clock_resolution, ticks_to_usec, usec_to_ticks;
- _cleanup_free_ char *line = NULL;
- double clock_factor;
- int r;
+int tc_init(double *ret_ticks_in_usec, uint32_t *ret_hz) {
+ static double ticks_in_usec = -1;
+ static uint32_t hz;
- r = read_one_line_file("/proc/net/psched", &line);
- if (r < 0)
- return r;
+ if (ticks_in_usec < 0) {
+ uint32_t clock_resolution, ticks_to_usec, usec_to_ticks;
+ _cleanup_free_ char *line = NULL;
+ double clock_factor;
+ int r;
- r = sscanf(line, "%08x%08x%08x", &ticks_to_usec, &usec_to_ticks, &clock_resolution);
- if (r < 3)
- return -EIO;
+ r = read_one_line_file("/proc/net/psched", &line);
+ if (r < 0)
+ return r;
- clock_factor = (double) clock_resolution / USEC_PER_SEC;
- *ticks_in_usec = (double) ticks_to_usec / usec_to_ticks * clock_factor;
+ r = sscanf(line, "%08x%08x%08x%08x", &ticks_to_usec, &usec_to_ticks, &clock_resolution, &hz);
+ if (r < 4)
+ return -EIO;
+
+ clock_factor = (double) clock_resolution / USEC_PER_SEC;
+ ticks_in_usec = (double) ticks_to_usec / usec_to_ticks * clock_factor;
+ }
+
+ if (ret_ticks_in_usec)
+ *ret_ticks_in_usec = ticks_in_usec;
+ if (ret_hz)
+ *ret_hz = hz;
return 0;
}
int tc_time_to_tick(usec_t t, uint32_t *ret) {
- static double ticks_in_usec = -1;
+ double ticks_in_usec;
usec_t a;
int r;
assert(ret);
- if (ticks_in_usec < 0) {
- r = tc_init(&ticks_in_usec);
- if (r < 0)
- return r;
- }
+ r = tc_init(&ticks_in_usec, NULL);
+ if (r < 0)
+ return r;
a = t * ticks_in_usec;
if (a > UINT32_MAX)
#include "time-util.h"
+int tc_init(double *ret_ticks_in_usec, uint32_t *ret_hz);
int tc_time_to_tick(usec_t t, uint32_t *ret);
int parse_tc_percent(const char *s, uint32_t *percent);
int tc_transmit_time(uint64_t rate, uint32_t size, uint32_t *ret);
};
static int tclass_new(TClassKind kind, TClass **ret) {
- TClass *tclass;
+ _cleanup_(tclass_freep) TClass *tclass = NULL;
int r;
tclass = malloc0(tclass_vtable[kind]->object_size);
}
static int run(int argc, char *argv[]) {
- _cleanup_(notify_on_cleanup) const char *notify_message = NULL;
_cleanup_(manager_freep) Manager *m = NULL;
+ _cleanup_(notify_on_cleanup) const char *notify_message = NULL;
int r;
log_setup_service();
* spec should say what to do with unknown props
* /bin/mount regarding NFS and FUSE required?
* what does terminal=false mean?
- * sysctl inside or outside? whitelisting?
+ * sysctl inside or outside? allow-listing?
* swapiness typo -> swappiness
*
* Unsupported:
return r;
if (!data.allow) {
- /* The fact that OCI allows 'deny' entries makes really no sense, as 'allow' vs. 'deny' for the
- * devices cgroup controller is really not about whitelisting and blacklisting but about adding
- * and removing entries from the whitelist. Since we always start out with an empty whitelist
- * we hence ignore the whole thing, as removing entries which don't exist make no sense. We'll
- * log about this, since this is really borked in the spec, with one exception: the entry
- * that's supposed to drop the kernel's default we ignore silently */
+ /* The fact that OCI allows 'deny' entries makes really no sense, as 'allow'
+ * vs. 'deny' for the devices cgroup controller is really not about allow-listing and
+ * deny-listing but about adding and removing entries from the allow list. Since we
+ * always start out with an empty allow list we hence ignore the whole thing, as
+ * removing entries which don't exist make no sense. We'll log about this, since this
+ * is really borked in the spec, with one exception: the entry that's supposed to
+ * drop the kernel's default we ignore silently */
if (!data.r || !data.w || !data.m || data.type != 0 || data.major != (unsigned) -1 || data.minor != (unsigned) -1)
- json_log(v, flags|JSON_WARNING, 0, "Devices cgroup whitelist with arbitrary 'allow' entries not supported, ignoring.");
+ json_log(v, flags|JSON_WARNING, 0, "Devices cgroup allow list with arbitrary 'allow' entries not supported, ignoring.");
/* We ignore the 'deny' entry as for us that's implied */
continue;
}
if (!data.r && !data.w && !data.m) {
- json_log(v, flags|LOG_WARNING, 0, "Device cgroup whitelist entry with no effect found, ignoring.");
+ json_log(v, flags|LOG_WARNING, 0, "Device cgroup allow list entry with no effect found, ignoring.");
continue;
}
if (data.minor != (unsigned) -1 && data.major == (unsigned) -1)
return json_log(v, flags, SYNTHETIC_ERRNO(EOPNOTSUPP),
- "Device cgroup whitelist entries with minors but no majors not supported.");
+ "Device cgroup allow list entries with minors but no majors not supported.");
if (data.major != (unsigned) -1 && data.type == 0)
return json_log(v, flags, SYNTHETIC_ERRNO(EOPNOTSUPP),
- "Device cgroup whitelist entries with majors but no device node type not supported.");
+ "Device cgroup allow list entries with majors but no device node type not supported.");
if (data.type == 0) {
- if (data.r && data.w && data.m) /* a catchall whitelist entry means we are looking at a noop */
+ if (data.r && data.w && data.m) /* a catchall allow list entry means we are looking at a noop */
noop = true;
else
return json_log(v, flags, SYNTHETIC_ERRNO(EOPNOTSUPP),
- "Device cgroup whitelist entries with no type not supported.");
+ "Device cgroup allow list entries with no type not supported.");
}
a = reallocarray(list, n_list + 1, sizeof(struct device_data));
#include "sd-bus.h"
#include "bus-error.h"
+#include "bus-locator.h"
#include "bus-unit-util.h"
#include "bus-util.h"
#include "bus-wait-for-jobs.h"
scmp_filter_ctx ctx,
uint32_t arch,
uint64_t cap_list_retain,
- char **syscall_whitelist,
- char **syscall_blacklist) {
+ char **syscall_allow_list,
+ char **syscall_deny_list) {
static const struct {
uint64_t capability;
const char* name;
- } whitelist[] = {
+ } allow_list[] = {
/* Let's use set names where we can */
{ 0, "@aio" },
{ 0, "@basic-io" },
char **p;
int r;
- for (size_t i = 0; i < ELEMENTSOF(whitelist); i++) {
- if (whitelist[i].capability != 0 && (cap_list_retain & (1ULL << whitelist[i].capability)) == 0)
+ for (size_t i = 0; i < ELEMENTSOF(allow_list); i++) {
+ if (allow_list[i].capability != 0 && (cap_list_retain & (1ULL << allow_list[i].capability)) == 0)
continue;
- r = seccomp_add_syscall_filter_item(ctx, whitelist[i].name, SCMP_ACT_ALLOW, syscall_blacklist, false);
+ r = seccomp_add_syscall_filter_item(ctx, allow_list[i].name, SCMP_ACT_ALLOW, syscall_deny_list, false);
if (r < 0)
- return log_error_errno(r, "Failed to add syscall filter item %s: %m", whitelist[i].name);
+ return log_error_errno(r, "Failed to add syscall filter item %s: %m", allow_list[i].name);
}
- STRV_FOREACH(p, syscall_whitelist) {
- r = seccomp_add_syscall_filter_item(ctx, *p, SCMP_ACT_ALLOW, syscall_blacklist, true);
+ STRV_FOREACH(p, syscall_allow_list) {
+ r = seccomp_add_syscall_filter_item(ctx, *p, SCMP_ACT_ALLOW, syscall_deny_list, true);
if (r < 0)
log_warning_errno(r, "Failed to add rule for system call %s on %s, ignoring: %m",
*p, seccomp_arch_to_string(arch));
return 0;
}
-int setup_seccomp(uint64_t cap_list_retain, char **syscall_whitelist, char **syscall_blacklist) {
+int setup_seccomp(uint64_t cap_list_retain, char **syscall_allow_list, char **syscall_deny_list) {
uint32_t arch;
int r;
SECCOMP_FOREACH_LOCAL_ARCH(arch) {
_cleanup_(seccomp_releasep) scmp_filter_ctx seccomp = NULL;
- log_debug("Applying whitelist on architecture: %s", seccomp_arch_to_string(arch));
+ log_debug("Applying allow list on architecture: %s", seccomp_arch_to_string(arch));
r = seccomp_init_for_arch(&seccomp, arch, SCMP_ACT_ERRNO(EPERM));
if (r < 0)
return log_error_errno(r, "Failed to allocate seccomp object: %m");
- r = seccomp_add_default_syscall_filter(seccomp, arch, cap_list_retain, syscall_whitelist, syscall_blacklist);
+ r = seccomp_add_default_syscall_filter(seccomp, arch, cap_list_retain, syscall_allow_list, syscall_deny_list);
if (r < 0)
return r;
#else
-int setup_seccomp(uint64_t cap_list_retain, char **syscall_whitelist, char **syscall_blacklist) {
+int setup_seccomp(uint64_t cap_list_retain, char **syscall_allow_list, char **syscall_deny_list) {
return 0;
}
#include <sys/types.h>
-int setup_seccomp(uint64_t cap_list_retain, char **syscall_whitelist, char **syscall_blacklist);
+int setup_seccomp(uint64_t cap_list_retain, char **syscall_allow_ist, char **syscall_deny_list);
free(s->pivot_root_new);
free(s->pivot_root_old);
free(s->working_directory);
- strv_free(s->syscall_whitelist);
- strv_free(s->syscall_blacklist);
+ strv_free(s->syscall_allow_list);
+ strv_free(s->syscall_deny_list);
rlimit_free_all(s->rlimit);
free(s->hostname);
cpu_set_reset(&s->cpu_set);
}
if (negative)
- r = strv_extend(&settings->syscall_blacklist, word);
+ r = strv_extend(&settings->syscall_deny_list, word);
else
- r = strv_extend(&settings->syscall_whitelist, word);
+ r = strv_extend(&settings->syscall_allow_list, word);
if (r < 0)
return log_oom();
}
UserNamespaceMode userns_mode;
uid_t uid_shift, uid_range;
bool notify_ready;
- char **syscall_whitelist;
- char **syscall_blacklist;
+ char **syscall_allow_list;
+ char **syscall_deny_list;
struct rlimit *rlimit[_RLIMIT_MAX];
char *hostname;
int no_new_privileges;
static MountSettingsMask arg_mount_settings = MOUNT_APPLY_APIVFS_RO|MOUNT_APPLY_TMPFS_TMP;
static void *arg_root_hash = NULL;
static char *arg_verity_data = NULL;
+static char *arg_root_hash_sig_path = NULL;
+static void *arg_root_hash_sig = NULL;
+static size_t arg_root_hash_sig_size = 0;
static size_t arg_root_hash_size = 0;
-static char **arg_syscall_whitelist = NULL;
-static char **arg_syscall_blacklist = NULL;
+static char **arg_syscall_allow_list = NULL;
+static char **arg_syscall_deny_list = NULL;
#if HAVE_SECCOMP
static scmp_filter_ctx arg_seccomp = NULL;
#endif
STATIC_DESTRUCTOR_REGISTER(arg_parameters, strv_freep);
STATIC_DESTRUCTOR_REGISTER(arg_root_hash, freep);
STATIC_DESTRUCTOR_REGISTER(arg_verity_data, freep);
-STATIC_DESTRUCTOR_REGISTER(arg_syscall_whitelist, strv_freep);
-STATIC_DESTRUCTOR_REGISTER(arg_syscall_blacklist, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root_hash_sig_path, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_root_hash_sig, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_syscall_allow_list, strv_freep);
+STATIC_DESTRUCTOR_REGISTER(arg_syscall_deny_list, strv_freep);
#if HAVE_SECCOMP
STATIC_DESTRUCTOR_REGISTER(arg_seccomp, seccomp_releasep);
#endif
" --read-only Mount the root directory read-only\n"
" --volatile[=MODE] Run the system in volatile mode\n"
" --root-hash=HASH Specify verity root hash for root disk image\n"
+ " --root-hash-sig=SIG Specify pkcs7 signature of root hash for verity\n"
+ " as a DER encoded PKCS7, either as a path to a file\n"
+ " or as an ASCII base64 encoded string prefixed by\n"
+ " 'base64:'\n"
" --verity-data=PATH Specify hash device for verity\n"
" --pivot-root=PATH[:PATH]\n"
" Pivot root to given directory in the container\n\n"
ARG_OCI_BUNDLE,
ARG_NO_PAGER,
ARG_VERITY_DATA,
+ ARG_ROOT_HASH_SIG,
};
static const struct option options[] = {
{ "oci-bundle", required_argument, NULL, ARG_OCI_BUNDLE },
{ "no-pager", no_argument, NULL, ARG_NO_PAGER },
{ "verity-data", required_argument, NULL, ARG_VERITY_DATA },
+ { "root-hash-sig", required_argument, NULL, ARG_ROOT_HASH_SIG },
{}
};
return r;
break;
+ case ARG_ROOT_HASH_SIG: {
+ char *value;
+
+ if ((value = startswith(optarg, "base64:"))) {
+ void *p;
+ size_t l;
+
+ r = unbase64mem(value, strlen(value), &p, &l);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse root hash signature '%s': %m", optarg);
+
+ free_and_replace(arg_root_hash_sig, p);
+ arg_root_hash_sig_size = l;
+ arg_root_hash_sig_path = mfree(arg_root_hash_sig_path);
+ } else {
+ r = parse_path_argument_and_warn(optarg, false, &arg_root_hash_sig_path);
+ if (r < 0)
+ return r;
+ arg_root_hash_sig = mfree(arg_root_hash_sig);
+ arg_root_hash_sig_size = 0;
+ }
+
+ break;
+ }
+
case ARG_SYSTEM_CALL_FILTER: {
bool negative;
const char *items;
return log_error_errno(r, "Failed to parse system call filter: %m");
if (negative)
- r = strv_extend(&arg_syscall_blacklist, word);
+ r = strv_extend(&arg_syscall_deny_list, word);
else
- r = strv_extend(&arg_syscall_whitelist, word);
+ r = strv_extend(&arg_syscall_allow_list, word);
if (r < 0)
return log_oom();
}
static int setup_keyring(void) {
key_serial_t keyring;
- /* Allocate a new session keyring for the container. This makes sure the keyring of the session systemd-nspawn
- * was invoked from doesn't leak into the container. Note that by default we block keyctl() and request_key()
- * anyway via seccomp so doing this operation isn't strictly necessary, but in case people explicitly whitelist
- * these system calls let's make sure we don't leak anything into the container. */
+ /* Allocate a new session keyring for the container. This makes sure the keyring of the session
+ * systemd-nspawn was invoked from doesn't leak into the container. Note that by default we block
+ * keyctl() and request_key() anyway via seccomp so doing this operation isn't strictly necessary,
+ * but in case people explicitly allow-list these system calls let's make sure we don't leak anything
+ * into the container. */
keyring = keyctl(KEYCTL_JOIN_SESSION_KEYRING, 0, 0, 0, 0);
if (keyring == -1) {
} else
#endif
{
- r = setup_seccomp(arg_caps_retain, arg_syscall_whitelist, arg_syscall_blacklist);
+ r = setup_seccomp(arg_caps_retain, arg_syscall_allow_list, arg_syscall_deny_list);
if (r < 0)
return r;
}
if ((arg_settings_mask & SETTING_SYSCALL_FILTER) == 0) {
- if (!arg_settings_trusted && !strv_isempty(settings->syscall_whitelist))
+ if (!arg_settings_trusted && !strv_isempty(settings->syscall_allow_list))
log_warning("Ignoring SystemCallFilter= settings, file %s is not trusted.", path);
else {
- strv_free_and_replace(arg_syscall_whitelist, settings->syscall_whitelist);
- strv_free_and_replace(arg_syscall_blacklist, settings->syscall_blacklist);
+ strv_free_and_replace(arg_syscall_allow_list, settings->syscall_allow_list);
+ strv_free_and_replace(arg_syscall_deny_list, settings->syscall_deny_list);
}
#if HAVE_SECCOMP
}
r = verity_metadata_load(arg_image, NULL, arg_root_hash ? NULL : &arg_root_hash, &arg_root_hash_size,
- arg_verity_data ? NULL : &arg_verity_data);
+ arg_verity_data ? NULL : &arg_verity_data,
+ arg_root_hash_sig_path || arg_root_hash_sig ? NULL : &arg_root_hash_sig_path);
if (r < 0) {
log_error_errno(r, "Failed to read verity artefacts for %s: %m", arg_image);
goto finish;
if (!arg_root_hash && dissected_image->can_verity)
log_notice("Note: image %s contains verity information, but no root hash specified! Proceeding without integrity checking.", arg_image);
- r = dissected_image_decrypt_interactively(dissected_image, NULL, arg_root_hash, arg_root_hash_size, arg_verity_data, 0, &decrypted_image);
+ r = dissected_image_decrypt_interactively(dissected_image, NULL, arg_root_hash, arg_root_hash_size, arg_verity_data, arg_root_hash_sig_path, arg_root_hash_sig, arg_root_hash_sig_size, 0, &decrypted_image);
if (r < 0)
goto finish;
#include "alloc-util.h"
#include "bus-common-errors.h"
-#include "bus-util.h"
+#include "bus-locator.h"
#include "env-util.h"
#include "errno-util.h"
#include "format-util.h"
#include "sd-bus.h"
#include "bus-common-errors.h"
-#include "bus-util.h"
+#include "bus-locator.h"
#include "errno-util.h"
#include "in-addr-util.h"
#include "macro.h"
#include "fd-util.h"
#include "group-record-nss.h"
#include "macro.h"
+#include "nss-systemd.h"
#include "nss-util.h"
#include "pthread-util.h"
#include "signal-util.h"
PROTECT_ERRNO;
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
- if (userdb_nss_compat_is_enabled() <= 0)
+ if (_nss_systemd_is_blocked())
return NSS_STATUS_NOTFOUND;
_cleanup_(pthread_mutex_unlock_assertp) pthread_mutex_t *_l = NULL;
PROTECT_ERRNO;
BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
- if (userdb_nss_compat_is_enabled() <= 0)
+ if (_nss_systemd_is_blocked())
return NSS_STATUS_NOTFOUND;
_cleanup_(pthread_mutex_unlock_assertp) pthread_mutex_t *_l = NULL;
assert(result);
assert(errnop);
- r = userdb_nss_compat_is_enabled();
- if (r < 0) {
- UNPROTECT_ERRNO;
- *errnop = -r;
- return NSS_STATUS_UNAVAIL;
- }
- if (!r)
+ if (_nss_systemd_is_blocked())
return NSS_STATUS_NOTFOUND;
_cleanup_(pthread_mutex_unlock_assertp) pthread_mutex_t *_l = NULL;
assert(result);
assert(errnop);
- r = userdb_nss_compat_is_enabled();
- if (r < 0) {
- UNPROTECT_ERRNO;
- *errnop = -r;
- return NSS_STATUS_UNAVAIL;
- }
- if (!r)
- return NSS_STATUS_UNAVAIL;
+ if (_nss_systemd_is_blocked())
+ return NSS_STATUS_NOTFOUND;
_cleanup_(pthread_mutex_unlock_assertp) pthread_mutex_t *_l = NULL;
}
if (getgrent_data.by_membership) {
- _cleanup_close_ int lock_fd = -1;
+ _cleanup_(_nss_systemd_unblockp) bool blocked = false;
for (;;) {
_cleanup_free_ char *user_name = NULL, *group_name = NULL;
continue;
/* We are about to recursively call into NSS, let's make sure we disable recursion into our own code. */
- if (lock_fd < 0) {
- lock_fd = userdb_nss_compat_disable();
- if (lock_fd < 0 && lock_fd != -EBUSY) {
+ if (!blocked) {
+ r = _nss_systemd_block(true);
+ if (r < 0) {
UNPROTECT_ERRNO;
- *errnop = -lock_fd;
+ *errnop = -r;
return NSS_STATUS_UNAVAIL;
}
+
+ blocked = true;
}
r = nss_group_record_by_name(group_name, false, &gr);
if (STR_IN_SET(user_name, root_passwd.pw_name, nobody_passwd.pw_name))
return NSS_STATUS_NOTFOUND;
- r = userdb_nss_compat_is_enabled();
- if (r < 0) {
- UNPROTECT_ERRNO;
- *errnop = -r;
- return NSS_STATUS_UNAVAIL;
- }
- if (!r)
+ if (_nss_systemd_is_blocked())
return NSS_STATUS_NOTFOUND;
r = membershipdb_by_user(user_name, nss_glue_userdb_flags(), &iterator);
/* The group might be defined via traditional NSS only, hence let's do a full look-up without
* disabling NSS. This means we are operating recursively here. */
- r = groupdb_by_name(group_name, nss_glue_userdb_flags() & ~USERDB_AVOID_NSS, &g);
+ r = groupdb_by_name(group_name, (nss_glue_userdb_flags() & ~USERDB_AVOID_NSS) | USERDB_AVOID_SHADOW, &g);
if (r == -ESRCH)
continue;
if (r < 0) {
return any ? NSS_STATUS_SUCCESS : NSS_STATUS_NOTFOUND;
}
+
+static thread_local unsigned _blocked = 0;
+
+_public_ int _nss_systemd_block(bool b) {
+
+ /* This blocks recursively: it's blocked for as many times this function is called with `true` until
+ * it is called an equal time with `false`. */
+
+ if (b) {
+ if (_blocked >= UINT_MAX)
+ return -EOVERFLOW;
+
+ _blocked++;
+ } else {
+ if (_blocked <= 0)
+ return -EOVERFLOW;
+
+ _blocked--;
+ }
+
+ return b; /* Return what is passed in, i.e. the new state from the PoV of the caller */
+}
+
+_public_ bool _nss_systemd_is_blocked(void) {
+ return _blocked > 0;
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include <stdbool.h>
+
+int _nss_systemd_block(bool b);
+bool _nss_systemd_is_blocked(void);
+
+/* For use with the _cleanup_() macro */
+static inline void _nss_systemd_unblockp(bool *b) {
+ if (*b)
+ assert_se(_nss_systemd_block(false) >= 0);
+}
_nss_systemd_setgrent;
_nss_systemd_getgrent_r;
_nss_systemd_initgroups_dyn;
+
+ /* These two are not used by glibc, but can be used by apps to explicitly disable nss-systemd for the calling thread. */
+ _nss_systemd_block;
+ _nss_systemd_is_blocked;
local: *;
};
#include "env-util.h"
#include "fd-util.h"
#include "group-record-nss.h"
+#include "nss-systemd.h"
#include "strv.h"
#include "user-record.h"
#include "userdb-glue.h"
assert(pwd);
assert(errnop);
- r = userdb_nss_compat_is_enabled();
- if (r < 0) {
- *errnop = -r;
- return NSS_STATUS_UNAVAIL;
- }
- if (!r)
+ if (_nss_systemd_is_blocked())
return NSS_STATUS_NOTFOUND;
r = userdb_by_name(name, nss_glue_userdb_flags(), &hr);
assert(pwd);
assert(errnop);
- r = userdb_nss_compat_is_enabled();
- if (r < 0) {
- *errnop = -r;
- return NSS_STATUS_UNAVAIL;
- }
- if (!r)
+ if (_nss_systemd_is_blocked())
return NSS_STATUS_NOTFOUND;
r = userdb_by_uid(uid, nss_glue_userdb_flags(), &hr);
assert(gr);
assert(errnop);
- r = userdb_nss_compat_is_enabled();
- if (r < 0) {
- *errnop = -r;
- return NSS_STATUS_UNAVAIL;
- }
- if (!r)
+ if (_nss_systemd_is_blocked())
return NSS_STATUS_NOTFOUND;
r = groupdb_by_name(name, nss_glue_userdb_flags(), &g);
}
if (!g) {
- _cleanup_close_ int lock_fd = -1;
+ _cleanup_(_nss_systemd_unblockp) bool blocked = false;
if (strv_isempty(members))
return NSS_STATUS_NOTFOUND;
* acquire it, so that we can extend it (that's because glibc's group merging feature will
* merge groups only if both GID and name match and thus we need to have both first). It
* sucks behaving recursively likely this, but it's apparently what everybody does. We break
- * the recursion for ourselves via the userdb_nss_compat_disable() lock. */
+ * the recursion for ourselves via the _nss_systemd_block_nss() lock. */
+
+ r = _nss_systemd_block(true);
+ if (r < 0)
+ return r;
- lock_fd = userdb_nss_compat_disable();
- if (lock_fd < 0 && lock_fd != -EBUSY)
- return lock_fd;
+ blocked = true;
r = nss_group_record_by_name(name, false, &g);
if (r == -ESRCH)
assert(gr);
assert(errnop);
- r = userdb_nss_compat_is_enabled();
- if (r < 0) {
- *errnop = -r;
- return NSS_STATUS_UNAVAIL;
- }
- if (!r)
+ if (_nss_systemd_is_blocked())
return NSS_STATUS_NOTFOUND;
r = groupdb_by_gid(gid, nss_glue_userdb_flags(), &g);
}
if (!g) {
- _cleanup_close_ int lock_fd = -1;
+ _cleanup_(_nss_systemd_unblockp) bool blocked = false;
/* So, quite possibly we have to extend an existing group record with additional members. But
* to do this we need to know the group name first. The group didn't exist via non-NSS
* queries though, hence let's try to acquire it here recursively via NSS. */
- lock_fd = userdb_nss_compat_disable();
- if (lock_fd < 0 && lock_fd != -EBUSY)
- return lock_fd;
+ r = _nss_systemd_block(true);
+ if (r < 0)
+ return r;
+
+ blocked = true;
r = nss_group_record_by_gid(gid, false, &g);
if (r == -ESRCH)
return NSS_STATUS_NOTFOUND;
-
if (r < 0) {
*errnop = -r;
return NSS_STATUS_UNAVAIL;
}
#endif
-static int maybe_resize_slave_device(const char *mountpath, dev_t main_devno) {
+static int maybe_resize_underlying_device(const char *mountpath, dev_t main_devno) {
_cleanup_free_ char *fstype = NULL, *devpath = NULL;
dev_t devno;
int r;
if (r < 0)
return log_error_errno(r, "Failed to determine block device of \"%s\": %m", arg_target);
- r = maybe_resize_slave_device(arg_target, devno);
+ r = maybe_resize_underlying_device(arg_target, devno);
if (r < 0)
return r;
FreeArea *padding_area;
FreeArea *allocated_to_area;
+ char *copy_blocks_path;
+ int copy_blocks_fd;
+ uint64_t copy_blocks_size;
+
LIST_FIELDS(Partition, partitions);
};
.padding_max = UINT64_MAX,
.partno = UINT64_MAX,
.offset = UINT64_MAX,
+ .copy_blocks_fd = -1,
+ .copy_blocks_size = UINT64_MAX,
};
return p;
if (p->new_partition)
fdisk_unref_partition(p->new_partition);
+ free(p->copy_blocks_path);
+ safe_close(p->copy_blocks_fd);
+
return mfree(p);
}
}
sz = p->current_size != UINT64_MAX ? p->current_size : HARD_MIN_SIZE;
- return MAX(p->size_min == UINT64_MAX ? DEFAULT_MIN_SIZE : p->size_min, sz);
+
+ if (p->copy_blocks_size != UINT64_MAX)
+ sz = MAX(p->copy_blocks_size, sz);
+
+ return MAX(p->size_min != UINT64_MAX ? p->size_min : DEFAULT_MIN_SIZE, sz);
}
static uint64_t partition_max_size(const Partition *p) {
static int partition_read_definition(Partition *p, const char *path) {
ConfigTableItem table[] = {
- { "Partition", "Type", config_parse_type, 0, &p->type_uuid },
- { "Partition", "Label", config_parse_label, 0, &p->new_label },
- { "Partition", "UUID", config_parse_id128, 0, &p->new_uuid },
- { "Partition", "Priority", config_parse_int32, 0, &p->priority },
- { "Partition", "Weight", config_parse_weight, 0, &p->weight },
- { "Partition", "PaddingWeight", config_parse_weight, 0, &p->padding_weight },
- { "Partition", "SizeMinBytes", config_parse_size4096, 1, &p->size_min },
- { "Partition", "SizeMaxBytes", config_parse_size4096, -1, &p->size_max },
- { "Partition", "PaddingMinBytes", config_parse_size4096, 1, &p->padding_min },
- { "Partition", "PaddingMaxBytes", config_parse_size4096, -1, &p->padding_max },
- { "Partition", "FactoryReset", config_parse_bool, 0, &p->factory_reset },
+ { "Partition", "Type", config_parse_type, 0, &p->type_uuid },
+ { "Partition", "Label", config_parse_label, 0, &p->new_label },
+ { "Partition", "UUID", config_parse_id128, 0, &p->new_uuid },
+ { "Partition", "Priority", config_parse_int32, 0, &p->priority },
+ { "Partition", "Weight", config_parse_weight, 0, &p->weight },
+ { "Partition", "PaddingWeight", config_parse_weight, 0, &p->padding_weight },
+ { "Partition", "SizeMinBytes", config_parse_size4096, 1, &p->size_min },
+ { "Partition", "SizeMaxBytes", config_parse_size4096, -1, &p->size_max },
+ { "Partition", "PaddingMinBytes", config_parse_size4096, 1, &p->padding_min },
+ { "Partition", "PaddingMaxBytes", config_parse_size4096, -1, &p->padding_max },
+ { "Partition", "FactoryReset", config_parse_bool, 0, &p->factory_reset },
+ { "Partition", "CopyBlocks", config_parse_path, 0, &p->copy_blocks_path },
{}
};
int r;
TABLE_UINT64, p->new_padding,
TABLE_STRING, padding_change, TABLE_SET_COLOR, !p->partitions_next && sum_padding > 0 ? ansi_underline() : NULL);
if (r < 0)
- return log_error_errno(r, "Failed to add row to table: %m");
+ return table_log_add_error(r);
}
if (sum_padding > 0 || sum_size > 0) {
TABLE_EMPTY,
TABLE_STRING, b);
if (r < 0)
- return log_error_errno(r, "Failed to add row to table: %m");
+ return table_log_add_error(r);
}
r = table_print(t, stdout);
return 0;
}
+static int context_copy_blocks(Context *context) {
+ Partition *p;
+ int fd = -1, r;
+
+ assert(context);
+
+ /* Copy in file systems on the block level */
+
+ LIST_FOREACH(partitions, p, context->partitions) {
+ char buf[FORMAT_BYTES_MAX];
+
+ if (p->copy_blocks_fd < 0)
+ continue;
+
+ if (p->dropped)
+ continue;
+
+ if (PARTITION_EXISTS(p)) /* Never copy over existing partitions */
+ continue;
+
+ assert(p->new_size != UINT64_MAX);
+ assert(p->copy_blocks_size != UINT64_MAX);
+ assert(p->new_size >= p->copy_blocks_size);
+
+ if (fd < 0)
+ assert_se((fd = fdisk_get_devfd(context->fdisk_context)) >= 0);
+
+ if (lseek(fd, p->offset, SEEK_SET) == (off_t) -1)
+ return log_error_errno(errno, "Failed to seek to partition offset: %m");
+
+ log_info("Copying in '%s' (%s) on block level into partition %" PRIu64 ".", p->copy_blocks_path, format_bytes(buf, sizeof(buf), p->copy_blocks_size), p->partno);
+
+ r = copy_bytes_full(p->copy_blocks_fd, fd, p->copy_blocks_size, 0, NULL, NULL, NULL, NULL);
+ if (r < 0)
+ return log_error_errno(r, "Failed to copy in data from '%s': %m", p->copy_blocks_path);
+
+ log_info("Copying in of '%s' on block level completed.", p->copy_blocks_path);
+ }
+
+ return 0;
+}
+
static int partition_acquire_uuid(Context *context, Partition *p, sd_id128_t *ret) {
struct {
sd_id128_t type_uuid;
if (r < 0)
return r;
+ r = context_copy_blocks(context);
+ if (r < 0)
+ return r;
+
LIST_FOREACH(partitions, p, context->partitions) {
if (p->dropped)
continue;
return false;
}
+static int context_open_copy_block_paths(Context *context) {
+ Partition *p;
+ int r;
+
+ assert(context);
+
+ LIST_FOREACH(partitions, p, context->partitions) {
+ _cleanup_close_ int source_fd = -1;
+ uint64_t size;
+ struct stat st;
+
+ assert(p->copy_blocks_fd < 0);
+ assert(p->copy_blocks_size == UINT64_MAX);
+
+ if (PARTITION_EXISTS(p)) /* Never copy over partitions that already exist! */
+ continue;
+
+ if (!p->copy_blocks_path)
+ continue;
+
+ source_fd = open(p->copy_blocks_path, O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (source_fd < 0)
+ return log_error_errno(errno, "Failed to open block copy file '%s': %m", p->copy_blocks_path);
+
+ if (fstat(source_fd, &st) < 0)
+ return log_error_errno(errno, "Failed to stat block copy file '%s': %m", p->copy_blocks_path);
+
+ if (S_ISDIR(st.st_mode)) {
+ _cleanup_free_ char *bdev = NULL;
+
+ /* If the file is a directory, automatically find the backing block device */
+
+ if (major(st.st_dev) != 0)
+ r = device_path_make_major_minor(S_IFBLK, st.st_dev, &bdev);
+ else {
+ dev_t devt;
+
+ /* Special support for btrfs */
+
+ r = btrfs_get_block_device_fd(source_fd, &devt);
+ if (r < 0)
+ return log_error_errno(r, "Unable to determine backing block device of '%s': %m", p->copy_blocks_path);
+
+ r = device_path_make_major_minor(S_IFBLK, devt, &bdev);
+ }
+ if (r < 0)
+ return log_error_errno(r, "Failed to determine block device path for block device backing '%s': %m", p->copy_blocks_path);
+
+ safe_close(source_fd);
+
+ source_fd = open(bdev, O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (source_fd < 0)
+ return log_error_errno(errno, "Failed to open block device '%s': %m", bdev);
+
+ if (fstat(source_fd, &st) < 0)
+ return log_error_errno(errno, "Failed to stat block device '%s': %m", bdev);
+
+ if (!S_ISBLK(st.st_mode))
+ return log_error_errno(SYNTHETIC_ERRNO(ENOTBLK), "Block device '%s' is not actually a block device, refusing.", bdev);
+ }
+
+ if (S_ISREG(st.st_mode))
+ size = st.st_size;
+ else if (S_ISBLK(st.st_mode)) {
+ if (ioctl(source_fd, BLKGETSIZE64, &size) != 0)
+ return log_error_errno(errno, "Failed to determine size of block device to copy from: %m");
+ } else
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Specified path to copy blocks from '%s' is not a regular file, block device or directory, refusing: %m", p->copy_blocks_path);
+
+ if (size <= 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "File to copy bytes from '%s' has zero size, refusing.", p->copy_blocks_path);
+ if (size % 512 != 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "File to copy bytes from '%s' has size that is not multiple of 512, refusing.", p->copy_blocks_path);
+
+ p->copy_blocks_fd = TAKE_FD(source_fd);
+ p->copy_blocks_size = size;
+ }
+
+ return 0;
+}
+
static int help(void) {
_cleanup_free_ char *link = NULL;
int r;
if (r < 0)
return r;
+ /* Open all files to copy blocks from now, since we want to take their size into consideration */
+ r = context_open_copy_block_paths(context);
+ if (r < 0)
+ return r;
+
/* First try to fit new partitions in, dropping by priority until it fits */
for (;;) {
if (context_allocate_partitions(context))
cat >$D/definitions/root.conf <<EOF
[Partition]
-Type=root
+Type=root-x86-64
EOF
ln -s root.conf $D/definitions/root2.conf
$D/zzz4 : start= 1777624, size= 131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
$D/zzz5 : start= 1908696, size= 2285568, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A0A1A2A3-A4A5-A6A7-A8A9-AAABACADAEAF, name="custom_label"
EOF
+
+dd if=/dev/urandom of=$D/block-copy bs=4096 count=10240
+
+cat >$D/definitions/extra2.conf <<EOF
+[Partition]
+Type=linux-generic
+Label=block-copy
+UUID=2a1d97e1d0a346cca26eadc643926617
+CopyBlocks=$D/block-copy
+EOF
+
+$repart $D/zzz --size=3G --dry-run=no --seed=$SEED --definitions=$D/definitions
+
+sfdisk -d $D/zzz | grep -v -e 'sector-size' -e '^$' >$D/populated4
+
+cmp $D/populated4 - <<EOF
+label: gpt
+label-id: EF7F7EE2-47B3-4251-B1A1-09EA8BF12D5D
+device: $D/zzz
+unit: sectors
+first-lba: 2048
+last-lba: 6291422
+$D/zzz1 : start= 2048, size= 591856, type=933AC7E1-2EB4-4F13-B844-0E14E2AEF915, uuid=A6005774-F558-4330-A8E5-D6D2C01C01D6, name="home-$UNAME"
+$D/zzz2 : start= 593904, size= 591856, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=CE9C76EB-A8F1-40FF-813C-11DCA6C0A55B, name="root-x86-64"
+$D/zzz3 : start= 1185760, size= 591864, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=AC60A837-550C-43BD-B5C4-9CB73B884E79, name="root-x86-64-2"
+$D/zzz4 : start= 1777624, size= 131072, type=0657FD6D-A4AB-43C4-84E5-0933C84B4F4F, uuid=2AA78CDB-59C7-4173-AF11-C7453737A5D1, name="swap"
+$D/zzz5 : start= 1908696, size= 2285568, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=A0A1A2A3-A4A5-A6A7-A8A9-AAABACADAEAF, name="custom_label"
+$D/zzz6 : start= 4194264, size= 2097152, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=2A1D97E1-D0A3-46CC-A26E-ADC643926617, name="block-copy"
+EOF
+
+cmp --bytes=41943040 --ignore-initial=0:$((512*4194264)) $D/block-copy $D/zzz
_cleanup_(unlink_and_freep) char *tmp = NULL;
_cleanup_close_ int fd = -1;
- fd = open_tmpfile_linkable(where, O_WRONLY|O_CLOEXEC, &tmp);
+ fd = open_tmpfile_linkable(path, O_WRONLY|O_CLOEXEC, &tmp);
if (fd < 0)
return log_debug_errno(fd, "Failed to create unit file '%s': %m", path);
sd_bus_error *error) {
_cleanup_(lookup_paths_free) LookupPaths paths = {};
- _cleanup_set_free_free_ Set *unit_files = NULL, *markers = NULL;
+ _cleanup_set_free_ Set *unit_files = NULL, *markers = NULL;
_cleanup_closedir_ DIR *d = NULL;
const char *where, *item;
Iterator iterator;
return log_debug_errno(errno, "Failed to open '%s' directory: %m", where);
}
- markers = set_new(&path_hash_ops);
- if (!markers)
- return -ENOMEM;
-
FOREACH_DIRENT(de, d, return log_debug_errno(errno, "Failed to enumerate '%s' directory: %m", where)) {
_cleanup_free_ char *marker = NULL;
UnitFileState state;
if (path_is_absolute(marker) &&
!image_in_search_path(IMAGE_PORTABLE, marker)) {
- r = set_ensure_allocated(&markers, &path_hash_ops);
+ r = set_ensure_consume(&markers, &path_hash_ops_free, TAKE_PTR(marker));
if (r < 0)
return r;
-
- r = set_put(markers, marker);
- if (r >= 0)
- marker = NULL;
- else if (r != -EEXIST)
- return r;
}
}
#include "alloc-util.h"
#include "bus-error.h"
+#include "bus-locator.h"
#include "bus-unit-util.h"
-#include "bus-util.h"
#include "bus-wait-for-jobs.h"
#include "def.h"
#include "dirent-util.h"
if (table_get_rows(table) > 1) {
r = table_set_sort(table, (size_t) 0, (size_t) -1);
if (r < 0)
- return log_error_errno(r, "Failed to sort table: %m");
+ return table_log_sort_error(r);
table_set_header(table, arg_legend);
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
}
if (arg_legend) {
int r;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-label.h"
#include "bus-polkit.h"
#include "bus-util.h"
}
}
- if (IN_SET(lets_credit, CREDIT_ENTROPY_YES_PLEASE, CREDIT_ENTROPY_YES_FORCED)) {
- _cleanup_free_ struct rand_pool_info *info = NULL;
-
- info = malloc(offsetof(struct rand_pool_info, buf) + k);
- if (!info)
- return log_oom();
-
- info->entropy_count = k * 8;
- info->buf_size = k;
- memcpy(info->buf, buf, k);
-
- if (ioctl(random_fd, RNDADDENTROPY, info) < 0)
- return log_warning_errno(errno, "Failed to credit entropy, ignoring: %m");
- } else {
- r = loop_write(random_fd, buf, (size_t) k, false);
- if (r < 0)
- log_error_errno(r, "Failed to write seed to /dev/urandom: %m");
- }
+ r = random_write_entropy(random_fd, buf, k,
+ IN_SET(lets_credit, CREDIT_ENTROPY_YES_PLEASE, CREDIT_ENTROPY_YES_FORCED));
+ if (r < 0)
+ log_error_errno(r, "Failed to write seed to /dev/urandom: %m");
}
}
* entropy later on. Let's keep that in mind by setting an extended attribute. on the file */
if (getrandom_worked)
if (fsetxattr(seed_fd, "user.random-seed-creditable", "1", 1, 0) < 0)
- log_full_errno(IN_SET(errno, ENOSYS, EOPNOTSUPP) ? LOG_DEBUG : LOG_WARNING, errno,
+ log_full_errno(ERRNO_IS_NOT_SUPPORTED(errno) ? LOG_DEBUG : LOG_WARNING, errno,
"Failed to mark seed file as creditable, ignoring: %m");
}
#include "alloc-util.h"
#include "bus-common-errors.h"
#include "bus-error.h"
-#include "bus-util.h"
+#include "bus-locator.h"
+#include "bus-map-properties.h"
#include "dns-domain.h"
#include "escape.h"
#include "format-table.h"
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to print table: %m");
+ return table_log_print_error(r);
return 0;
}
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to print table: %m");
+ return table_log_print_error(r);
if (empty_line)
*empty_line = true;
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to print table: %m");
+ return table_log_print_error(r);
*empty_line = true;
int r;
setlocale(LC_ALL, "");
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
if (streq(program_invocation_short_name, "resolvconf"))
r = resolvconf_parse_argv(argc, argv);
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-log-control-api.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "dns-domain.h"
#include "memory-util.h"
#include "missing_capability.h"
/* SPDX-License-Identifier: LGPL-2.1+ */
#pragma once
-#include "bus-util.h"
+#include "bus-object.h"
#include "resolved-manager.h"
extern const BusObjectImplementation manager_object;
rds = p->size - saved_size;
- switch (rr->unparseable ? _DNS_TYPE_INVALID : rr->key->type) {
+ switch (rr->unparsable ? _DNS_TYPE_INVALID : rr->key->type) {
case DNS_TYPE_SRV:
r = dns_packet_append_uint16(p, rr->srv.priority, NULL);
case DNS_TYPE_OPT:
case DNS_TYPE_OPENPGPKEY:
- case _DNS_TYPE_INVALID: /* unparseable */
+ case _DNS_TYPE_INVALID: /* unparsable */
default:
r = dns_packet_append_blob(p, rr->generic.data, rr->generic.data_size, NULL);
break;
} else {
dns_packet_rewind(p, pos);
- rr->unparseable = true;
- goto unparseable;
+ rr->unparsable = true;
+ goto unparsable;
}
}
case DNS_TYPE_OPT: /* we only care about the header of OPT for now. */
case DNS_TYPE_OPENPGPKEY:
default:
- unparseable:
+ unparsable:
r = dns_packet_read_memdup(p, rdlength, &rr->generic.data, &rr->generic.data_size, NULL);
break;
}
static int dns_query_candidate_add_transaction(DnsQueryCandidate *c, DnsResourceKey *key) {
- DnsTransaction *t;
+ _cleanup_(dns_transaction_gcp) DnsTransaction *t = NULL;
int r;
assert(c);
r = dns_transaction_new(&t, c->scope, key);
if (r < 0)
return r;
- } else {
- if (set_contains(c->transactions, t))
- return 0;
- }
-
- r = set_ensure_allocated(&c->transactions, NULL);
- if (r < 0)
- goto gc;
-
- r = set_ensure_allocated(&t->notify_query_candidates, NULL);
- if (r < 0)
- goto gc;
+ } else if (set_contains(c->transactions, t))
+ return 0;
r = set_ensure_allocated(&t->notify_query_candidates_done, NULL);
if (r < 0)
- goto gc;
+ return r;
- r = set_put(t->notify_query_candidates, c);
+ r = set_ensure_put(&t->notify_query_candidates, NULL, c);
if (r < 0)
- goto gc;
+ return r;
- r = set_put(c->transactions, t);
+ r = set_ensure_put(&c->transactions, NULL, t);
if (r < 0) {
(void) set_remove(t->notify_query_candidates, c);
- goto gc;
+ return r;
}
t->clamp_ttl = c->query->clamp_ttl;
+ TAKE_PTR(t);
return 1;
-
-gc:
- dns_transaction_gc(t);
- return r;
}
static int dns_query_candidate_go(DnsQueryCandidate *c) {
case DNS_TYPE_OPENPGPKEY:
default:
- if (!rr->unparseable)
+ if (!rr->unparsable)
free(rr->generic.data);
}
- if (rr->unparseable)
+ if (rr->unparsable)
free(rr->generic.data);
free(rr->wire_format);
/* Check if a and b are the same, but don't look at their keys */
- if (a->unparseable != b->unparseable)
+ if (a->unparsable != b->unparsable)
return 0;
- switch (a->unparseable ? _DNS_TYPE_INVALID : a->key->type) {
+ switch (a->unparsable ? _DNS_TYPE_INVALID : a->key->type) {
case DNS_TYPE_SRV:
r = dns_name_equal(a->srv.name, b->srv.name);
dns_resource_key_to_string(rr->key, k, sizeof(k));
- switch (rr->unparseable ? _DNS_TYPE_INVALID : rr->key->type) {
+ switch (rr->unparsable ? _DNS_TYPE_INVALID : rr->key->type) {
case DNS_TYPE_SRV:
r = asprintf(&s, "%s %u %u %u %s",
assert(rr);
assert(out);
- switch(rr->unparseable ? _DNS_TYPE_INVALID : rr->key->type) {
+ switch(rr->unparsable ? _DNS_TYPE_INVALID : rr->key->type) {
case DNS_TYPE_SRV:
case DNS_TYPE_PTR:
case DNS_TYPE_NS:
dns_resource_key_hash_func(rr->key, state);
- switch (rr->unparseable ? _DNS_TYPE_INVALID : rr->key->type) {
+ switch (rr->unparsable ? _DNS_TYPE_INVALID : rr->key->type) {
case DNS_TYPE_SRV:
siphash24_compress(&rr->srv.priority, sizeof(rr->srv.priority), state);
copy->expiry = rr->expiry;
copy->n_skip_labels_signer = rr->n_skip_labels_signer;
copy->n_skip_labels_source = rr->n_skip_labels_source;
- copy->unparseable = rr->unparseable;
+ copy->unparsable = rr->unparsable;
- switch (rr->unparseable ? _DNS_TYPE_INVALID : rr->key->type) {
+ switch (rr->unparsable ? _DNS_TYPE_INVALID : rr->key->type) {
case DNS_TYPE_SRV:
copy->srv.priority = rr->srv.priority;
/* How many labels to strip to determine "synthesizing source" of this RR, i.e. the wildcard's immediate parent. -1 if not signed. */
unsigned n_skip_labels_source;
- bool unparseable:1;
+ bool unparsable:1;
bool wire_format_canonical:1;
void *wire_format;
if (!scope->announced &&
dns_resource_key_is_dnssd_ptr(z->rr->key)) {
if (!set_contains(types, dns_resource_key_name(z->rr->key))) {
- r = set_ensure_allocated(&types, &dns_name_hash_ops);
- if (r < 0)
- return log_debug_errno(r, "Failed to allocate set: %m");
-
- r = set_put(types, dns_resource_key_name(z->rr->key));
+ r = set_ensure_put(&types, &dns_name_hash_ops, dns_resource_key_name(z->rr->key));
if (r < 0)
return log_debug_errno(r, "Failed to add item to set: %m");
}
s->ifindex = manager_find_ifindex(s->manager, s->local.sa.sa_family, s->local.sa.sa_family == AF_INET ? (union in_addr_union*) &s->local.in.sin_addr : (union in_addr_union*) &s->local.in6.sin6_addr);
if (s->protocol == DNS_PROTOCOL_LLMNR && s->ifindex > 0) {
- uint32_t ifindex = htobe32(s->ifindex);
+ be32_t ifindex = htobe32(s->ifindex);
/* Make sure all packets for this connection are sent on the same interface */
if (s->local.sa.sa_family == AF_INET) {
}
static void dns_stub_process_query(Manager *m, DnsStream *s, DnsPacket *p) {
- DnsQuery *q = NULL;
+ _cleanup_(dns_query_freep) DnsQuery *q = NULL;
int r;
assert(m);
in_addr_is_localhost(p->family, &p->destination) <= 0) {
log_error("Got packet on unexpected IP range, refusing.");
dns_stub_send_failure(m, s, p, DNS_RCODE_SERVFAIL, false);
- goto fail;
+ return;
}
r = dns_packet_extract(p);
if (r < 0) {
log_debug_errno(r, "Failed to extract resources from incoming packet, ignoring packet: %m");
dns_stub_send_failure(m, s, p, DNS_RCODE_FORMERR, false);
- goto fail;
+ return;
}
if (!DNS_PACKET_VERSION_SUPPORTED(p)) {
log_debug("Got EDNS OPT field with unsupported version number.");
dns_stub_send_failure(m, s, p, DNS_RCODE_BADVERS, false);
- goto fail;
+ return;
}
if (dns_type_is_obsolete(p->question->keys[0]->type)) {
log_debug("Got message with obsolete key type, refusing.");
dns_stub_send_failure(m, s, p, DNS_RCODE_NOTIMP, false);
- goto fail;
+ 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, s, p, DNS_RCODE_NOTIMP, false);
- goto fail;
+ return;
}
if (!DNS_PACKET_RD(p)) {
/* If the "rd" bit is off (i.e. recursion was not requested), then refuse operation */
log_debug("Got request with recursion disabled, refusing.");
dns_stub_send_failure(m, s, p, DNS_RCODE_REFUSED, false);
- goto fail;
+ 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, s, p, DNS_RCODE_NOTIMP, false);
- goto fail;
+ return;
}
r = dns_query_new(m, &q, p->question, p->question, 0, SD_RESOLVED_PROTOCOLS_ALL|SD_RESOLVED_NO_SEARCH);
if (r < 0) {
log_error_errno(r, "Failed to generate query object: %m");
dns_stub_send_failure(m, s, p, DNS_RCODE_SERVFAIL, false);
- goto fail;
+ return;
}
/* Request that the TTL is corrected by the cached time for this lookup, so that we return vaguely useful TTLs */
/* Remember which queries belong to this stream, so that we can cancel them when the stream
* is disconnected early */
- r = set_ensure_allocated(&s->queries, &trivial_hash_ops);
+ r = set_ensure_put(&s->queries, NULL, q);
if (r < 0) {
log_oom();
- goto fail;
- }
-
- if (set_put(s->queries, q) < 0) {
- log_oom();
- goto fail;
+ return;
}
+ assert(r > 0);
}
r = dns_query_go(q);
if (r < 0) {
log_error_errno(r, "Failed to start query: %m");
dns_stub_send_failure(m, s, p, DNS_RCODE_SERVFAIL, false);
- goto fail;
+ return;
}
log_debug("Processing query...");
- return;
-
-fail:
- dns_query_free(q);
+ TAKE_PTR(q);
}
static int on_dns_stub_packet(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
add_known_answers = true;
if (t->key->type == DNS_TYPE_ANY) {
- r = set_ensure_allocated(&keys, &dns_resource_key_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(keys, t->key);
+ r = set_ensure_put(&keys, &dns_resource_key_hash_ops, t->key);
if (r < 0)
return r;
}
add_known_answers = true;
if (other->key->type == DNS_TYPE_ANY) {
- r = set_ensure_allocated(&keys, &dns_resource_key_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(keys, other->key);
+ r = set_ensure_put(&keys, &dns_resource_key_hash_ops, other->key);
if (r < 0)
return r;
}
}
static int dns_transaction_add_dnssec_transaction(DnsTransaction *t, DnsResourceKey *key, DnsTransaction **ret) {
- DnsTransaction *aux;
+ _cleanup_(dns_transaction_gcp) DnsTransaction *aux = NULL;
int r;
assert(t);
}
}
- r = set_ensure_allocated(&t->dnssec_transactions, NULL);
- if (r < 0)
- goto gc;
-
- r = set_ensure_allocated(&aux->notify_transactions, NULL);
- if (r < 0)
- goto gc;
-
r = set_ensure_allocated(&aux->notify_transactions_done, NULL);
if (r < 0)
- goto gc;
+ return r;
- r = set_put(t->dnssec_transactions, aux);
+ r = set_ensure_put(&t->dnssec_transactions, NULL, aux);
if (r < 0)
- goto gc;
+ return r;;
- r = set_put(aux->notify_transactions, t);
+ r = set_ensure_put(&aux->notify_transactions, NULL, t);
if (r < 0) {
(void) set_remove(t->dnssec_transactions, aux);
- goto gc;
+ return r;
}
- *ret = aux;
+ *ret = TAKE_PTR(aux);
return 1;
-
-gc:
- dns_transaction_gc(aux);
- return r;
}
static int dns_transaction_request_dnssec_rr(DnsTransaction *t, DnsResourceKey *key) {
DnsTransaction* dns_transaction_free(DnsTransaction *t);
bool dns_transaction_gc(DnsTransaction *t);
+DEFINE_TRIVIAL_CLEANUP_FUNC(DnsTransaction*, dns_transaction_gc);
+
int dns_transaction_go(DnsTransaction *t);
void dns_transaction_process_reply(DnsTransaction *t, DnsPacket *p);
return -EINVAL;
}
- r = set_ensure_allocated(&d->negative_by_name, &dns_name_hash_ops);
- if (r < 0)
- return log_oom();
-
- r = set_put(d->negative_by_name, domain);
+ r = set_ensure_consume(&d->negative_by_name, &dns_name_hash_ops, TAKE_PTR(domain));
if (r < 0)
return log_oom();
- if (r > 0)
- domain = NULL;
return 0;
}
assert(d);
- r = set_ensure_allocated(&d->revoked_by_rr, &dns_resource_record_hash_ops);
- if (r < 0)
- return r;
-
- r = set_put(d->revoked_by_rr, rr);
+ r = set_ensure_put(&d->revoked_by_rr, &dns_resource_record_hash_ops, rr);
if (r < 0)
return r;
if (r > 0)
}
static int dns_zone_item_probe_start(DnsZoneItem *i) {
- DnsTransaction *t;
+ _cleanup_(dns_transaction_gcp) DnsTransaction *t = NULL;
int r;
assert(i);
return r;
}
- r = set_ensure_allocated(&t->notify_zone_items, NULL);
- if (r < 0)
- goto gc;
-
r = set_ensure_allocated(&t->notify_zone_items_done, NULL);
if (r < 0)
- goto gc;
+ return r;
- r = set_put(t->notify_zone_items, i);
+ r = set_ensure_put(&t->notify_zone_items, NULL, i);
if (r < 0)
- goto gc;
+ return r;
- i->probe_transaction = t;
t->probing = true;
+ i->probe_transaction = TAKE_PTR(t);
- if (t->state == DNS_TRANSACTION_NULL) {
-
+ if (i->probe_transaction->state == DNS_TRANSACTION_NULL) {
i->block_ready++;
- r = dns_transaction_go(t);
+ r = dns_transaction_go(i->probe_transaction);
i->block_ready--;
if (r < 0) {
dns_zone_item_notify(i);
return 0;
-
-gc:
- dns_transaction_gc(t);
- return r;
}
int dns_zone_put(DnsZone *z, DnsScope *s, DnsResourceRecord *rr, bool probe) {
#include "sd-bus.h"
-#include "bus-util.h"
+#include "bus-object.h"
extern const BusObjectImplementation dnssd_object;
/* Optimize the case where we don't need to store any addresses, by storing
* only the name in a dedicated Set instead of the hashmap */
- r = set_ensure_allocated(&hosts->no_address, &dns_name_hash_ops);
- if (r < 0)
- return log_oom();
-
- r = set_put(hosts->no_address, name);
+ r = set_ensure_consume(&hosts->no_address, &dns_name_hash_ops, TAKE_PTR(name));
if (r < 0)
return r;
- TAKE_PTR(name);
continue;
}
#include "alloc-util.h"
#include "bus-common-errors.h"
+#include "bus-get-properties.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "parse-util.h"
#include "resolve-util.h"
#include "resolved-bus.h"
#include "user-util.h"
static int run(int argc, char *argv[]) {
- _cleanup_(notify_on_cleanup) const char *notify_stop = NULL;
_cleanup_(manager_freep) Manager *m = NULL;
+ _cleanup_(notify_on_cleanup) const char *notify_stop = NULL;
int r;
log_setup_service();
r = mac_selinux_init();
if (r < 0)
- return log_error_errno(r, "SELinux setup failed: %m");
+ return r;
/* Drop privileges, but only if we have been started as root. If we are not running as root we assume most
* privileges are already dropped and we can't create our directory. */
"1::2::3 multi.colon\n"
"::0 some.where some.other\n"
- "0.0.0.0 black.listed\n"
+ "0.0.0.0 deny.listed\n"
"::5\t\t\t \tsome.where\tsome.other foobar.foo.foo\t\t\t\n"
" \n", f);
assert_se(fflush_and_check(f) >= 0);
assert_se( set_contains(hosts.no_address, "some.where"));
assert_se( set_contains(hosts.no_address, "some.other"));
- assert_se( set_contains(hosts.no_address, "black.listed"));
+ assert_se( set_contains(hosts.no_address, "deny.listed"));
assert_se(!set_contains(hosts.no_address, "foobar.foo.foo"));
}
#include "alloc-util.h"
#include "bus-error.h"
+#include "bus-locator.h"
+#include "bus-map-properties.h"
#include "bus-unit-util.h"
-#include "bus-util.h"
#include "bus-wait-for-jobs.h"
#include "calendarspec.h"
#include "env-util.h"
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include "bus-get-properties.h"
+#include "rlimit-util.h"
+#include "string-util.h"
+
+int bus_property_get_bool(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ int b = *(bool*) userdata;
+
+ return sd_bus_message_append_basic(reply, 'b', &b);
+}
+
+int bus_property_set_bool(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *value,
+ void *userdata,
+ sd_bus_error *error) {
+
+ int b, r;
+
+ r = sd_bus_message_read(value, "b", &b);
+ if (r < 0)
+ return r;
+
+ *(bool*) userdata = b;
+ return 0;
+}
+
+int bus_property_get_id128(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ sd_id128_t *id = userdata;
+
+ if (sd_id128_is_null(*id)) /* Add an empty array if the ID is zero */
+ return sd_bus_message_append(reply, "ay", 0);
+ else
+ return sd_bus_message_append_array(reply, 'y', id->bytes, 16);
+}
+
+#if __SIZEOF_SIZE_T__ != 8
+int bus_property_get_size(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ uint64_t sz = *(size_t*) userdata;
+
+ return sd_bus_message_append_basic(reply, 't', &sz);
+}
+#endif
+
+#if __SIZEOF_LONG__ != 8
+int bus_property_get_long(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ int64_t l = *(long*) userdata;
+
+ return sd_bus_message_append_basic(reply, 'x', &l);
+}
+
+int bus_property_get_ulong(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ uint64_t ul = *(unsigned long*) userdata;
+
+ return sd_bus_message_append_basic(reply, 't', &ul);
+}
+#endif
+
+int bus_property_get_rlimit(
+ sd_bus *bus,
+ const char *path,
+ const char *interface,
+ const char *property,
+ sd_bus_message *reply,
+ void *userdata,
+ sd_bus_error *error) {
+
+ const char *is_soft;
+ struct rlimit *rl;
+ uint64_t u;
+ rlim_t x;
+
+ assert(bus);
+ assert(reply);
+ assert(userdata);
+
+ is_soft = endswith(property, "Soft");
+
+ rl = *(struct rlimit**) userdata;
+ if (rl)
+ x = is_soft ? rl->rlim_cur : rl->rlim_max;
+ else {
+ struct rlimit buf = {};
+ const char *s, *p;
+ int z;
+
+ /* Chop off "Soft" suffix */
+ s = is_soft ? strndupa(property, is_soft - property) : property;
+
+ /* Skip over any prefix, such as "Default" */
+ assert_se(p = strstr(s, "Limit"));
+
+ z = rlimit_from_string(p + 5);
+ assert(z >= 0);
+
+ (void) getrlimit(z, &buf);
+ x = is_soft ? buf.rlim_cur : buf.rlim_max;
+ }
+
+ /* rlim_t might have different sizes, let's map RLIMIT_INFINITY to (uint64_t) -1, so that it is the same on all
+ * archs */
+ u = x == RLIM_INFINITY ? (uint64_t) -1 : (uint64_t) x;
+
+ return sd_bus_message_append(reply, "t", u);
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include "sd-bus.h"
+
+#include "sd-bus.h"
+
+#include "macro.h"
+
+int bus_property_get_bool(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+int bus_property_set_bool(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *value, void *userdata, sd_bus_error *error);
+int bus_property_get_id128(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+
+#define bus_property_get_usec ((sd_bus_property_get_t) NULL)
+#define bus_property_set_usec ((sd_bus_property_set_t) NULL)
+
+assert_cc(sizeof(int) == sizeof(int32_t));
+#define bus_property_get_int ((sd_bus_property_get_t) NULL)
+
+assert_cc(sizeof(unsigned) == sizeof(uint32_t));
+#define bus_property_get_unsigned ((sd_bus_property_get_t) NULL)
+
+/* On 64bit machines we can use the default serializer for size_t and
+ * friends, otherwise we need to cast this manually */
+#if __SIZEOF_SIZE_T__ == 8
+#define bus_property_get_size ((sd_bus_property_get_t) NULL)
+#else
+int bus_property_get_size(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+#endif
+
+#if __SIZEOF_LONG__ == 8
+#define bus_property_get_long ((sd_bus_property_get_t) NULL)
+#define bus_property_get_ulong ((sd_bus_property_get_t) NULL)
+#else
+int bus_property_get_long(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+int bus_property_get_ulong(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+#endif
+
+/* uid_t and friends on Linux 32 bit. This means we can just use the
+ * default serializer for 32bit unsigned, for serializing it, and map
+ * it to NULL here */
+assert_cc(sizeof(uid_t) == sizeof(uint32_t));
+#define bus_property_get_uid ((sd_bus_property_get_t) NULL)
+
+assert_cc(sizeof(gid_t) == sizeof(uint32_t));
+#define bus_property_get_gid ((sd_bus_property_get_t) NULL)
+
+assert_cc(sizeof(pid_t) == sizeof(uint32_t));
+#define bus_property_get_pid ((sd_bus_property_get_t) NULL)
+
+assert_cc(sizeof(mode_t) == sizeof(uint32_t));
+#define bus_property_get_mode ((sd_bus_property_get_t) NULL)
+
+int bus_property_get_rlimit(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
+
+#define BUS_DEFINE_PROPERTY_GET_GLOBAL(function, bus_type, val) \
+ int function(sd_bus *bus, \
+ const char *path, \
+ const char *interface, \
+ const char *property, \
+ sd_bus_message *reply, \
+ void *userdata, \
+ sd_bus_error *error) { \
+ \
+ assert(bus); \
+ assert(reply); \
+ \
+ return sd_bus_message_append(reply, bus_type, val); \
+ }
+
+#define BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, get1, get2) \
+ int function(sd_bus *bus, \
+ const char *path, \
+ const char *interface, \
+ const char *property, \
+ sd_bus_message *reply, \
+ void *userdata, \
+ sd_bus_error *error) { \
+ \
+ data_type *data = userdata; \
+ \
+ assert(bus); \
+ assert(reply); \
+ assert(data); \
+ \
+ return sd_bus_message_append(reply, bus_type, \
+ get2(get1(data))); \
+ }
+
+#define ident(x) (x)
+#define BUS_DEFINE_PROPERTY_GET(function, bus_type, data_type, get1) \
+ BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, get1, ident)
+
+#define ref(x) (*(x))
+#define BUS_DEFINE_PROPERTY_GET_REF(function, bus_type, data_type, get) \
+ BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, ref, get)
+
+#define BUS_DEFINE_PROPERTY_GET_ENUM(function, name, type) \
+ BUS_DEFINE_PROPERTY_GET_REF(function, "s", type, name##_to_string)
+
+#define BUS_PROPERTY_DUAL_TIMESTAMP(name, offset, flags) \
+ SD_BUS_PROPERTY(name, "t", bus_property_get_usec, (offset) + offsetof(struct dual_timestamp, realtime), (flags)), \
+ SD_BUS_PROPERTY(name "Monotonic", "t", bus_property_get_usec, (offset) + offsetof(struct dual_timestamp, monotonic), (flags))
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "bus-locator.h"
+#include "macro.h"
const BusLocator* const bus_home_mgr = &(BusLocator){
.destination = "org.freedesktop.home1",
.path = "/org/freedesktop/timedate1",
.interface = "org.freedesktop.timedate1"
};
+
+/* Shorthand flavors of the sd-bus convenience helpers with destination,path,interface strings encapsulated
+ * within a single struct. */
+int bus_call_method_async(
+ sd_bus *bus,
+ sd_bus_slot **slot,
+ const BusLocator *locator,
+ const char *member,
+ sd_bus_message_handler_t callback,
+ void *userdata,
+ const char *types, ...) {
+
+ va_list ap;
+ int r;
+
+ assert(locator);
+
+ va_start(ap, types);
+ r = sd_bus_call_method_asyncv(bus, slot, locator->destination, locator->path, locator->interface, member, callback, userdata, types, ap);
+ va_end(ap);
+
+ return r;
+}
+
+int bus_call_method(
+ sd_bus *bus,
+ const BusLocator *locator,
+ const char *member,
+ sd_bus_error *error,
+ sd_bus_message **reply,
+ const char *types, ...) {
+
+ va_list ap;
+ int r;
+
+ assert(locator);
+
+ va_start(ap, types);
+ r = sd_bus_call_methodv(bus, locator->destination, locator->path, locator->interface, member, error, reply, types, ap);
+ va_end(ap);
+
+ return r;
+}
+
+int bus_get_property(
+ sd_bus *bus,
+ const BusLocator *locator,
+ const char *member,
+ sd_bus_error *error,
+ sd_bus_message **reply,
+ const char *type) {
+
+ assert(locator);
+
+ return sd_bus_get_property(bus, locator->destination, locator->path, locator->interface, member, error, reply, type);
+}
+
+int bus_get_property_trivial(
+ sd_bus *bus,
+ const BusLocator *locator,
+ const char *member,
+ sd_bus_error *error,
+ char type, void *ptr) {
+
+ assert(locator);
+
+ return sd_bus_get_property_trivial(bus, locator->destination, locator->path, locator->interface, member, error, type, ptr);
+}
+
+int bus_get_property_string(
+ sd_bus *bus,
+ const BusLocator *locator,
+ const char *member,
+ sd_bus_error *error,
+ char **ret) {
+
+ assert(locator);
+
+ return sd_bus_get_property_string(bus, locator->destination, locator->path, locator->interface, member, error, ret);
+}
+
+int bus_get_property_strv(
+ sd_bus *bus,
+ const BusLocator *locator,
+ const char *member,
+ sd_bus_error *error,
+ char ***ret) {
+
+ assert(locator);
+
+ return sd_bus_get_property_strv(bus, locator->destination, locator->path, locator->interface, member, error, ret);
+}
+
+int bus_set_property(
+ sd_bus *bus,
+ const BusLocator *locator,
+ const char *member,
+ sd_bus_error *error,
+ const char *type, ...) {
+
+ va_list ap;
+ int r;
+
+ assert(locator);
+
+ va_start(ap, type);
+ r = sd_bus_set_propertyv(bus, locator->destination, locator->path, locator->interface, member, error, type, ap);
+ va_end(ap);
+
+ return r;
+}
+
+int bus_match_signal(
+ sd_bus *bus,
+ sd_bus_slot **ret,
+ const BusLocator *locator,
+ const char *member,
+ sd_bus_message_handler_t callback,
+ void *userdata) {
+
+ assert(locator);
+
+ return sd_bus_match_signal(bus, ret, locator->destination, locator->path, locator->interface, member, callback, userdata);
+}
+
+int bus_match_signal_async(
+ sd_bus *bus,
+ sd_bus_slot **ret,
+ const BusLocator *locator,
+ const char *member,
+ sd_bus_message_handler_t callback,
+ sd_bus_message_handler_t install_callback,
+ void *userdata) {
+
+ assert(locator);
+
+ return sd_bus_match_signal_async(bus, ret, locator->destination, locator->path, locator->interface, member, callback, install_callback, userdata);
+}
+
+int bus_message_new_method_call(
+ sd_bus *bus,
+ sd_bus_message **m,
+ const BusLocator *locator,
+ const char *member) {
+
+ assert(locator);
+
+ return sd_bus_message_new_method_call(bus, m, locator->destination, locator->path, locator->interface, member);
+}
/* SPDX-License-Identifier: LGPL-2.1+ */
#pragma once
+#include "sd-bus.h"
+
typedef struct BusLocator {
- const char *destination;
- const char *path;
- const char *interface;
+ const char *destination;
+ const char *path;
+ const char *interface;
} BusLocator;
extern const BusLocator* const bus_home_mgr;
extern const BusLocator* const bus_resolve_mgr;
extern const BusLocator* const bus_systemd_mgr;
extern const BusLocator* const bus_timedate;
+
+/* Shorthand flavors of the sd-bus convenience helpers with destination,path,interface strings encapsulated
+ * within a single struct. */
+int bus_call_method_async(sd_bus *bus, sd_bus_slot **slot, const BusLocator *locator, const char *member, sd_bus_message_handler_t callback, void *userdata, const char *types, ...);
+int bus_call_method(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, sd_bus_message **reply, const char *types, ...);
+int bus_get_property(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, sd_bus_message **reply, const char *type);
+int bus_get_property_trivial(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, char type, void *ptr);
+int bus_get_property_string(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, char **ret);
+int bus_get_property_strv(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, char ***ret);
+int bus_set_property(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, const char *type, ...);
+int bus_match_signal(sd_bus *bus, sd_bus_slot **ret, const BusLocator *locator, const char *member, sd_bus_message_handler_t callback, void *userdata);
+int bus_match_signal_async(sd_bus *bus, sd_bus_slot **ret, const BusLocator *locator, const char *member, sd_bus_message_handler_t callback, sd_bus_message_handler_t install_callback, void *userdata);
+int bus_message_new_method_call(sd_bus *bus, sd_bus_message **m, const BusLocator *locator, const char *member);
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "alloc-util.h"
+#include "bus-get-properties.h"
#include "bus-log-control-api.h"
#include "bus-util.h"
#include "log.h"
/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
#include "sd-bus.h"
-#include "bus-util.h"
+#include "bus-object.h"
extern const BusObjectImplementation log_control_object;
static inline int bus_log_control_api_register(sd_bus *bus) {
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include "bus-map-properties.h"
+#include "alloc-util.h"
+#include "strv.h"
+#include "bus-message.h"
+
+int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
+ sd_id128_t *p = userdata;
+ const void *v;
+ size_t n;
+ int r;
+
+ r = sd_bus_message_read_array(m, SD_BUS_TYPE_BYTE, &v, &n);
+ if (r < 0)
+ return r;
+
+ if (n == 0)
+ *p = SD_ID128_NULL;
+ else if (n == 16)
+ memcpy((*p).bytes, v, n);
+ else
+ return -EINVAL;
+
+ return 0;
+}
+
+static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, unsigned flags, sd_bus_error *error, void *userdata) {
+ char type;
+ int r;
+
+ r = sd_bus_message_peek_type(m, &type, NULL);
+ if (r < 0)
+ return r;
+
+ switch (type) {
+
+ case SD_BUS_TYPE_STRING:
+ case SD_BUS_TYPE_OBJECT_PATH: {
+ const char **p = userdata;
+ const char *s;
+
+ r = sd_bus_message_read_basic(m, type, &s);
+ if (r < 0)
+ return r;
+
+ if (isempty(s))
+ s = NULL;
+
+ if (flags & BUS_MAP_STRDUP)
+ return free_and_strdup((char **) userdata, s);
+
+ *p = s;
+ return 0;
+ }
+
+ case SD_BUS_TYPE_ARRAY: {
+ _cleanup_strv_free_ char **l = NULL;
+ char ***p = userdata;
+
+ r = bus_message_read_strv_extend(m, &l);
+ if (r < 0)
+ return r;
+
+ return strv_extend_strv(p, l, false);
+ }
+
+ case SD_BUS_TYPE_BOOLEAN: {
+ int b;
+
+ r = sd_bus_message_read_basic(m, type, &b);
+ if (r < 0)
+ return r;
+
+ if (flags & BUS_MAP_BOOLEAN_AS_BOOL)
+ *(bool*) userdata = b;
+ else
+ *(int*) userdata = b;
+
+ return 0;
+ }
+
+ case SD_BUS_TYPE_INT32:
+ case SD_BUS_TYPE_UINT32: {
+ uint32_t u, *p = userdata;
+
+ r = sd_bus_message_read_basic(m, type, &u);
+ if (r < 0)
+ return r;
+
+ *p = u;
+ return 0;
+ }
+
+ case SD_BUS_TYPE_INT64:
+ case SD_BUS_TYPE_UINT64: {
+ uint64_t t, *p = userdata;
+
+ r = sd_bus_message_read_basic(m, type, &t);
+ if (r < 0)
+ return r;
+
+ *p = t;
+ return 0;
+ }
+
+ case SD_BUS_TYPE_DOUBLE: {
+ double d, *p = userdata;
+
+ r = sd_bus_message_read_basic(m, type, &d);
+ if (r < 0)
+ return r;
+
+ *p = d;
+ return 0;
+ }}
+
+ return -EOPNOTSUPP;
+}
+
+int bus_message_map_all_properties(
+ sd_bus_message *m,
+ const struct bus_properties_map *map,
+ unsigned flags,
+ sd_bus_error *error,
+ void *userdata) {
+
+ int r;
+
+ assert(m);
+ assert(map);
+
+ r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "{sv}");
+ if (r < 0)
+ return r;
+
+ while ((r = sd_bus_message_enter_container(m, SD_BUS_TYPE_DICT_ENTRY, "sv")) > 0) {
+ const struct bus_properties_map *prop;
+ const char *member;
+ const char *contents;
+ void *v;
+ unsigned i;
+
+ r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &member);
+ if (r < 0)
+ return r;
+
+ for (i = 0, prop = NULL; map[i].member; i++)
+ if (streq(map[i].member, member)) {
+ prop = &map[i];
+ break;
+ }
+
+ if (prop) {
+ r = sd_bus_message_peek_type(m, NULL, &contents);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_enter_container(m, SD_BUS_TYPE_VARIANT, contents);
+ if (r < 0)
+ return r;
+
+ v = (uint8_t *)userdata + prop->offset;
+ if (map[i].set)
+ r = prop->set(sd_bus_message_get_bus(m), member, m, error, v);
+ else
+ r = map_basic(sd_bus_message_get_bus(m), member, m, flags, error, v);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_exit_container(m);
+ if (r < 0)
+ return r;
+ } else {
+ r = sd_bus_message_skip(m, "v");
+ if (r < 0)
+ return r;
+ }
+
+ r = sd_bus_message_exit_container(m);
+ if (r < 0)
+ return r;
+ }
+ if (r < 0)
+ return r;
+
+ return sd_bus_message_exit_container(m);
+}
+
+int bus_map_all_properties(
+ sd_bus *bus,
+ const char *destination,
+ const char *path,
+ const struct bus_properties_map *map,
+ unsigned flags,
+ sd_bus_error *error,
+ sd_bus_message **reply,
+ void *userdata) {
+
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
+ int r;
+
+ assert(bus);
+ assert(destination);
+ assert(path);
+ assert(map);
+ assert(reply || (flags & BUS_MAP_STRDUP));
+
+ r = sd_bus_call_method(
+ bus,
+ destination,
+ path,
+ "org.freedesktop.DBus.Properties",
+ "GetAll",
+ error,
+ &m,
+ "s", "");
+ if (r < 0)
+ return r;
+
+ r = bus_message_map_all_properties(m, map, flags, error, userdata);
+ if (r < 0)
+ return r;
+
+ if (reply)
+ *reply = sd_bus_message_ref(m);
+
+ return r;
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include "sd-bus.h"
+
+typedef int (*bus_property_set_t) (sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
+
+struct bus_properties_map {
+ const char *member;
+ const char *signature;
+ bus_property_set_t set;
+ size_t offset;
+};
+
+enum {
+ BUS_MAP_STRDUP = 1 << 0, /* If set, each "s" message is duplicated. Thus, each pointer needs to be freed. */
+ BUS_MAP_BOOLEAN_AS_BOOL = 1 << 1, /* If set, each "b" message is written to a bool pointer. If not set, "b" is written to a int pointer. */
+};
+
+int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
+
+int bus_message_map_all_properties(sd_bus_message *m, const struct bus_properties_map *map, unsigned flags, sd_bus_error *error, void *userdata);
+int bus_map_all_properties(sd_bus *bus, const char *destination, const char *path, const struct bus_properties_map *map,
+ unsigned flags, sd_bus_error *error, sd_bus_message **reply, void *userdata);
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include "bus-introspect.h"
+#include "bus-object.h"
+#include "macro.h"
+#include "string-util.h"
+#include "strv.h"
+
+int bus_add_implementation(sd_bus *bus, const BusObjectImplementation *impl, void *userdata) {
+ int r;
+
+ log_debug("Registering bus object implementation for path=%s iface=%s", impl->path, impl->interface);
+
+ for (const sd_bus_vtable **p = impl->vtables; p && *p; p++) {
+ r = sd_bus_add_object_vtable(bus, NULL,
+ impl->path,
+ impl->interface,
+ *p,
+ userdata);
+ if (r < 0)
+ return log_error_errno(r, "Failed to register bus path %s with interface %s: %m",
+ impl->path,
+ impl->interface);
+ }
+
+ for (const BusObjectVtablePair *p = impl->fallback_vtables; p && p->vtable; p++) {
+ r = sd_bus_add_fallback_vtable(bus, NULL,
+ impl->path,
+ impl->interface,
+ p->vtable,
+ p->object_find,
+ userdata);
+ if (r < 0)
+ return log_error_errno(r, "Failed to register bus path %s with interface %s: %m",
+ impl->path,
+ impl->interface);
+ }
+
+ if (impl->node_enumerator) {
+ r = sd_bus_add_node_enumerator(bus, NULL,
+ impl->path,
+ impl->node_enumerator,
+ userdata);
+ if (r < 0)
+ return log_error_errno(r, "Failed to add node enumerator for %s: %m",
+ impl->path);
+ }
+
+ if (impl->manager) {
+ r = sd_bus_add_object_manager(bus, NULL, impl->path);
+ if (r < 0)
+ return log_error_errno(r, "Failed to add object manager for %s: %m", impl->path);
+ }
+
+ for (size_t i = 0; impl->children && impl->children[i]; i++) {
+ r = bus_add_implementation(bus, impl->children[i], userdata);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
+}
+
+static const BusObjectImplementation* find_implementation(
+ const char *pattern,
+ const BusObjectImplementation* const* bus_objects) {
+
+ for (size_t i = 0; bus_objects && bus_objects[i]; i++) {
+ const BusObjectImplementation *impl = bus_objects[i];
+
+ if (STR_IN_SET(pattern, impl->path, impl->interface))
+ return impl;
+
+ impl = find_implementation(pattern, impl->children);
+ if (impl)
+ return impl;
+ }
+
+ return NULL;
+}
+
+static int bus_introspect_implementation(
+ struct introspect *intro,
+ const BusObjectImplementation *impl) {
+ int r;
+
+ for (const sd_bus_vtable **p = impl->vtables; p && *p; p++) {
+ r = introspect_write_interface(intro, impl->interface, *p);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write introspection data: %m");
+ }
+
+ for (const BusObjectVtablePair *p = impl->fallback_vtables; p && p->vtable; p++) {
+ r = introspect_write_interface(intro, impl->interface, p->vtable);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write introspection data: %m");
+ }
+
+ return 0;
+}
+
+static void list_paths(
+ FILE *out,
+ const BusObjectImplementation* const* bus_objects) {
+
+ for (size_t i = 0; bus_objects[i]; i++) {
+ fprintf(out, "%s\t%s\n", bus_objects[i]->path, bus_objects[i]->interface);
+ if (bus_objects[i]->children)
+ list_paths(out, bus_objects[i]->children);
+ }
+}
+
+int bus_introspect_implementations(
+ FILE *out,
+ const char *pattern,
+ const BusObjectImplementation* const* bus_objects) {
+
+ const BusObjectImplementation *impl, *main_impl = NULL;
+ _cleanup_free_ char *s = NULL;
+ int r;
+
+ if (streq(pattern, "list")) {
+ list_paths(out, bus_objects);
+ return 0;
+ }
+
+ struct introspect intro = {};
+ bool is_interface = sd_bus_interface_name_is_valid(pattern);
+
+ impl = find_implementation(pattern, bus_objects);
+ if (!impl)
+ return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
+ "%s %s not found",
+ is_interface ? "Interface" : "Object path",
+ pattern);
+
+ /* We use trusted=false here to get all the @org.freedesktop.systemd1.Privileged annotations. */
+ r = introspect_begin(&intro, false);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write introspection data: %m");
+
+ r = introspect_write_default_interfaces(&intro, impl->manager);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write introspection data: %m");
+
+ /* Check if there is a non-fallback path that applies to the given interface, also
+ * print it. This is useful in the case of units: o.fd.systemd1.Service is declared
+ * as a fallback vtable for o/fd/systemd1/unit, and we also want to print
+ * o.fd.systemd1.Unit, which is the non-fallback implementation. */
+ if (impl->fallback_vtables && is_interface)
+ main_impl = find_implementation(impl->path, bus_objects);
+
+ if (main_impl)
+ bus_introspect_implementation(&intro, main_impl);
+
+ if (impl != main_impl)
+ bus_introspect_implementation(&intro, impl);
+
+ _cleanup_set_free_ Set *nodes = NULL;
+
+ for (size_t i = 0; impl->children && impl->children[i]; i++) {
+ r = set_put_strdup(&nodes, impl->children[i]->path);
+ if (r < 0)
+ return log_oom();
+ }
+
+ r = introspect_write_child_nodes(&intro, nodes, impl->path);
+ if (r < 0)
+ return r;
+
+ r = introspect_finish(&intro, &s);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write introspection data: %m");
+
+ fputs(s, out);
+ return 0;
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include <stdbool.h>
+#include <stdio.h>
+
+#include "sd-bus.h"
+
+typedef struct BusObjectImplementation BusObjectImplementation;
+
+typedef struct BusObjectVtablePair {
+ const sd_bus_vtable *vtable;
+ sd_bus_object_find_t object_find;
+} BusObjectVtablePair;
+
+struct BusObjectImplementation {
+ const char *path;
+ const char *interface;
+ const sd_bus_vtable **vtables;
+ const BusObjectVtablePair *fallback_vtables;
+ sd_bus_node_enumerator_t node_enumerator;
+ bool manager;
+ const BusObjectImplementation **children;
+};
+
+#define BUS_VTABLES(...) ((const sd_bus_vtable* []){ __VA_ARGS__, NULL })
+#define BUS_FALLBACK_VTABLES(...) ((const BusObjectVtablePair[]) { __VA_ARGS__, {} })
+#define BUS_IMPLEMENTATIONS(...) ((const BusObjectImplementation* []) { __VA_ARGS__, NULL })
+
+int bus_add_implementation(sd_bus *bus, const BusObjectImplementation *impl, void *userdata);
+int bus_introspect_implementations(
+ FILE *out,
+ const char *pattern,
+ const BusObjectImplementation* const* bus_objects);
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+
+#include "bus-print-properties.h"
+#include "cap-list.h"
+#include "cgroup-util.h"
+#include "escape.h"
+#include "mountpoint-util.h"
+#include "nsflags.h"
+#include "parse-util.h"
+#include "stdio-util.h"
+#include "string-util.h"
+#include "strv.h"
+#include "time-util.h"
+#include "user-util.h"
+
+int bus_print_property_value(const char *name, const char *expected_value, bool only_value, const char *value) {
+ assert(name);
+
+ if (expected_value && !streq_ptr(expected_value, value))
+ return 0;
+
+ if (only_value)
+ puts(value);
+ else
+ printf("%s=%s\n", name, value);
+
+ return 0;
+}
+
+int bus_print_property_valuef(const char *name, const char *expected_value, bool only_value, const char *fmt, ...) {
+ va_list ap;
+ int r;
+
+ assert(name);
+ assert(fmt);
+
+ if (expected_value) {
+ _cleanup_free_ char *s = NULL;
+
+ va_start(ap, fmt);
+ r = vasprintf(&s, fmt, ap);
+ va_end(ap);
+ if (r < 0)
+ return -ENOMEM;
+
+ if (streq_ptr(expected_value, s)) {
+ if (only_value)
+ puts(s);
+ else
+ printf("%s=%s\n", name, s);
+ }
+
+ return 0;
+ }
+
+ if (!only_value)
+ printf("%s=", name);
+ va_start(ap, fmt);
+ vprintf(fmt, ap);
+ va_end(ap);
+ puts("");
+
+ return 0;
+}
+
+static int bus_print_property(const char *name, const char *expected_value, sd_bus_message *m, bool value, bool all) {
+ char type;
+ const char *contents;
+ int r;
+
+ assert(name);
+ assert(m);
+
+ r = sd_bus_message_peek_type(m, &type, &contents);
+ if (r < 0)
+ return r;
+
+ switch (type) {
+
+ case SD_BUS_TYPE_STRING: {
+ const char *s;
+
+ r = sd_bus_message_read_basic(m, type, &s);
+ if (r < 0)
+ return r;
+
+ if (all || !isempty(s)) {
+ bool good;
+
+ /* This property has a single value, so we need to take
+ * care not to print a new line, everything else is OK. */
+ good = !strchr(s, '\n');
+ bus_print_property_value(name, expected_value, value, good ? s : "[unprintable]");
+ }
+
+ return 1;
+ }
+
+ case SD_BUS_TYPE_BOOLEAN: {
+ int b;
+
+ r = sd_bus_message_read_basic(m, type, &b);
+ if (r < 0)
+ return r;
+
+ if (expected_value && parse_boolean(expected_value) != b)
+ return 1;
+
+ bus_print_property_value(name, NULL, value, yes_no(b));
+ return 1;
+ }
+
+ case SD_BUS_TYPE_UINT64: {
+ uint64_t u;
+
+ r = sd_bus_message_read_basic(m, type, &u);
+ if (r < 0)
+ return r;
+
+ /* Yes, heuristics! But we can change this check
+ * should it turn out to not be sufficient */
+
+ if (endswith(name, "Timestamp") ||
+ STR_IN_SET(name, "NextElapseUSecRealtime", "LastTriggerUSec", "TimeUSec", "RTCTimeUSec")) {
+ char timestamp[FORMAT_TIMESTAMP_MAX];
+ const char *t;
+
+ t = format_timestamp(timestamp, sizeof(timestamp), u);
+ if (t || all)
+ bus_print_property_value(name, expected_value, value, strempty(t));
+
+ } else if (strstr(name, "USec")) {
+ char timespan[FORMAT_TIMESPAN_MAX];
+
+ (void) format_timespan(timespan, sizeof(timespan), u, 0);
+ bus_print_property_value(name, expected_value, value, timespan);
+
+ } else if (streq(name, "CoredumpFilter")) {
+ char buf[STRLEN("0xFFFFFFFF")];
+
+ xsprintf(buf, "0x%"PRIx64, u);
+ bus_print_property_value(name, expected_value, value, buf);
+
+ } else if (streq(name, "RestrictNamespaces")) {
+ _cleanup_free_ char *s = NULL;
+ const char *result;
+
+ if ((u & NAMESPACE_FLAGS_ALL) == 0)
+ result = "yes";
+ else if (FLAGS_SET(u, NAMESPACE_FLAGS_ALL))
+ result = "no";
+ else {
+ r = namespace_flags_to_string(u, &s);
+ if (r < 0)
+ return r;
+
+ result = strempty(s);
+ }
+
+ bus_print_property_value(name, expected_value, value, result);
+
+ } else if (streq(name, "MountFlags")) {
+ const char *result;
+
+ result = mount_propagation_flags_to_string(u);
+ if (!result)
+ return -EINVAL;
+
+ bus_print_property_value(name, expected_value, value, result);
+
+ } else if (STR_IN_SET(name, "CapabilityBoundingSet", "AmbientCapabilities")) {
+ _cleanup_free_ char *s = NULL;
+
+ r = capability_set_to_string_alloc(u, &s);
+ if (r < 0)
+ return r;
+
+ bus_print_property_value(name, expected_value, value, s);
+
+ } else if ((STR_IN_SET(name, "CPUWeight", "StartupCPUWeight", "IOWeight", "StartupIOWeight") && u == CGROUP_WEIGHT_INVALID) ||
+ (STR_IN_SET(name, "CPUShares", "StartupCPUShares") && u == CGROUP_CPU_SHARES_INVALID) ||
+ (STR_IN_SET(name, "BlockIOWeight", "StartupBlockIOWeight") && u == CGROUP_BLKIO_WEIGHT_INVALID) ||
+ (STR_IN_SET(name, "MemoryCurrent", "TasksCurrent") && u == (uint64_t) -1) ||
+ (endswith(name, "NSec") && u == (uint64_t) -1))
+
+ bus_print_property_value(name, expected_value, value, "[not set]");
+
+ else if ((STR_IN_SET(name, "DefaultMemoryLow", "DefaultMemoryMin", "MemoryLow", "MemoryHigh", "MemoryMax", "MemorySwapMax", "MemoryLimit") && u == CGROUP_LIMIT_MAX) ||
+ (STR_IN_SET(name, "TasksMax", "DefaultTasksMax") && u == (uint64_t) -1) ||
+ (startswith(name, "Limit") && u == (uint64_t) -1) ||
+ (startswith(name, "DefaultLimit") && u == (uint64_t) -1))
+
+ bus_print_property_value(name, expected_value, value, "infinity");
+ else if (STR_IN_SET(name, "IPIngressBytes", "IPIngressPackets", "IPEgressBytes", "IPEgressPackets") && u == (uint64_t) -1)
+ bus_print_property_value(name, expected_value, value, "[no data]");
+ else
+ bus_print_property_valuef(name, expected_value, value, "%"PRIu64, u);
+
+ return 1;
+ }
+
+ case SD_BUS_TYPE_INT64: {
+ int64_t i;
+
+ r = sd_bus_message_read_basic(m, type, &i);
+ if (r < 0)
+ return r;
+
+ bus_print_property_valuef(name, expected_value, value, "%"PRIi64, i);
+ return 1;
+ }
+
+ case SD_BUS_TYPE_UINT32: {
+ uint32_t u;
+
+ r = sd_bus_message_read_basic(m, type, &u);
+ if (r < 0)
+ return r;
+
+ if (strstr(name, "UMask") || strstr(name, "Mode"))
+ bus_print_property_valuef(name, expected_value, value, "%04o", u);
+
+ else if (streq(name, "UID")) {
+ if (u == UID_INVALID)
+ bus_print_property_value(name, expected_value, value, "[not set]");
+ else
+ bus_print_property_valuef(name, expected_value, value, "%"PRIu32, u);
+ } else if (streq(name, "GID")) {
+ if (u == GID_INVALID)
+ bus_print_property_value(name, expected_value, value, "[not set]");
+ else
+ bus_print_property_valuef(name, expected_value, value, "%"PRIu32, u);
+ } else
+ bus_print_property_valuef(name, expected_value, value, "%"PRIu32, u);
+
+ return 1;
+ }
+
+ case SD_BUS_TYPE_INT32: {
+ int32_t i;
+
+ r = sd_bus_message_read_basic(m, type, &i);
+ if (r < 0)
+ return r;
+
+ bus_print_property_valuef(name, expected_value, value, "%"PRIi32, i);
+ return 1;
+ }
+
+ case SD_BUS_TYPE_DOUBLE: {
+ double d;
+
+ r = sd_bus_message_read_basic(m, type, &d);
+ if (r < 0)
+ return r;
+
+ bus_print_property_valuef(name, expected_value, value, "%g", d);
+ return 1;
+ }
+
+ case SD_BUS_TYPE_ARRAY:
+ if (streq(contents, "s")) {
+ bool first = true;
+ const char *str;
+
+ r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, contents);
+ if (r < 0)
+ return r;
+
+ while ((r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &str)) > 0) {
+ _cleanup_free_ char *e = NULL;
+
+ e = shell_maybe_quote(str, ESCAPE_BACKSLASH_ONELINE);
+ if (!e)
+ return -ENOMEM;
+
+ if (first) {
+ if (!value)
+ printf("%s=", name);
+ first = false;
+ } else
+ fputs(" ", stdout);
+
+ fputs(e, stdout);
+ }
+ if (r < 0)
+ return r;
+
+ if (first && all && !value)
+ printf("%s=", name);
+ if (!first || all)
+ puts("");
+
+ r = sd_bus_message_exit_container(m);
+ if (r < 0)
+ return r;
+
+ return 1;
+
+ } else if (streq(contents, "y")) {
+ const uint8_t *u;
+ size_t n;
+
+ r = sd_bus_message_read_array(m, SD_BUS_TYPE_BYTE, (const void**) &u, &n);
+ if (r < 0)
+ return r;
+
+ if (all || n > 0) {
+ unsigned i;
+
+ if (!value)
+ printf("%s=", name);
+
+ for (i = 0; i < n; i++)
+ printf("%02x", u[i]);
+
+ puts("");
+ }
+
+ return 1;
+
+ } else if (streq(contents, "u")) {
+ uint32_t *u;
+ size_t n;
+
+ r = sd_bus_message_read_array(m, SD_BUS_TYPE_UINT32, (const void**) &u, &n);
+ if (r < 0)
+ return r;
+
+ if (all || n > 0) {
+ unsigned i;
+
+ if (!value)
+ printf("%s=", name);
+
+ for (i = 0; i < n; i++)
+ printf("%08x", u[i]);
+
+ puts("");
+ }
+
+ return 1;
+ }
+
+ break;
+ }
+
+ return 0;
+}
+
+int bus_message_print_all_properties(
+ sd_bus_message *m,
+ bus_message_print_t func,
+ char **filter,
+ bool value,
+ bool all,
+ Set **found_properties) {
+
+ int r;
+
+ assert(m);
+
+ r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "{sv}");
+ if (r < 0)
+ return r;
+
+ while ((r = sd_bus_message_enter_container(m, SD_BUS_TYPE_DICT_ENTRY, "sv")) > 0) {
+ _cleanup_free_ char *name_with_equal = NULL;
+ const char *name, *contents, *expected_value = NULL;
+
+ r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &name);
+ if (r < 0)
+ return r;
+
+ if (found_properties) {
+ r = set_ensure_put(found_properties, &string_hash_ops, name);
+ if (r < 0)
+ return log_oom();
+ }
+
+ name_with_equal = strjoin(name, "=");
+ if (!name_with_equal)
+ return log_oom();
+
+ if (!filter || strv_find(filter, name) ||
+ (expected_value = strv_find_startswith(filter, name_with_equal))) {
+ r = sd_bus_message_peek_type(m, NULL, &contents);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_enter_container(m, SD_BUS_TYPE_VARIANT, contents);
+ if (r < 0)
+ return r;
+
+ if (func)
+ r = func(name, expected_value, m, value, all);
+ if (!func || r == 0)
+ r = bus_print_property(name, expected_value, m, value, all);
+ if (r < 0)
+ return r;
+ if (r == 0) {
+ if (all && !expected_value)
+ printf("%s=[unprintable]\n", name);
+ /* skip what we didn't read */
+ r = sd_bus_message_skip(m, contents);
+ if (r < 0)
+ return r;
+ }
+
+ r = sd_bus_message_exit_container(m);
+ if (r < 0)
+ return r;
+ } else {
+ r = sd_bus_message_skip(m, "v");
+ if (r < 0)
+ return r;
+ }
+
+ r = sd_bus_message_exit_container(m);
+ if (r < 0)
+ return r;
+ }
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_exit_container(m);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+int bus_print_all_properties(
+ sd_bus *bus,
+ const char *dest,
+ const char *path,
+ bus_message_print_t func,
+ char **filter,
+ bool value,
+ bool all,
+ Set **found_properties) {
+
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+ _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+ int r;
+
+ assert(bus);
+ assert(path);
+
+ r = sd_bus_call_method(bus,
+ dest,
+ path,
+ "org.freedesktop.DBus.Properties",
+ "GetAll",
+ &error,
+ &reply,
+ "s", "");
+ if (r < 0)
+ return r;
+
+ return bus_message_print_all_properties(reply, func, filter, value, all, found_properties);
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include <stdbool.h>
+
+#include "sd-bus.h"
+
+#include "macro.h"
+#include "set.h"
+
+typedef int (*bus_message_print_t) (const char *name, const char *expected_value, sd_bus_message *m, bool value, bool all);
+
+int bus_print_property_value(const char *name, const char *expected_value, bool only_value, const char *value);
+int bus_print_property_valuef(const char *name, const char *expected_value, bool only_value, const char *fmt, ...) _printf_(4,5);
+int bus_message_print_all_properties(sd_bus_message *m, bus_message_print_t func, char **filter, bool value, bool all, Set **found_properties);
+int bus_print_all_properties(sd_bus *bus, const char *dest, const char *path, bus_message_print_t func, char **filter, bool value, bool all, Set **found_properties);
if (r < 0)
return bus_log_create_error(r);
return 1;
- } else if (isempty(eq) && STR_IN_SET(field, "DefaultMemoryLow",
- "DefaultMemoryMin",
- "MemoryLow",
- "MemoryMin")) {
- /* We can't use CGROUP_LIMIT_MIN nor CGROUP_LIMIT_MAX to convey the empty assignment
- * so marshall specially as a boolean. */
- r = sd_bus_message_append(m, "(sv)", field, "b", 0);
- if (r < 0)
- return bus_log_create_error(r);
- return 1;
} else if (isempty(eq)) {
- r = sd_bus_message_append(m, "(sv)", field, "t", CGROUP_LIMIT_MAX);
+ uint64_t empty_value = STR_IN_SET(field,
+ "DefaultMemoryLow",
+ "DefaultMemoryMin",
+ "MemoryLow",
+ "MemoryMin") ?
+ CGROUP_LIMIT_MIN :
+ CGROUP_LIMIT_MAX;
+
+ r = sd_bus_message_append(m, "(sv)", field, "t", empty_value);
if (r < 0)
return bus_log_create_error(r);
return 1;
if (STR_IN_SET(field, "RestrictAddressFamilies",
"SystemCallFilter")) {
- int whitelist = 1;
+ int allow_list = 1;
const char *p = eq;
if (*p == '~') {
- whitelist = 0;
+ allow_list = 0;
p++;
}
if (r < 0)
return bus_log_create_error(r);
- r = sd_bus_message_append_basic(m, 'b', &whitelist);
+ r = sd_bus_message_append_basic(m, 'b', &allow_list);
if (r < 0)
return bus_log_create_error(r);
return bus_append_byte_array(m, field, roothash_decoded, roothash_decoded_size);
}
+ if (streq(field, "RootHashSignature")) {
+ _cleanup_free_ void *roothash_sig_decoded = NULL;
+ char *value;
+ size_t roothash_sig_decoded_size = 0;
+
+ /* We have the path to a roothash signature to load and decode, eg: RootHash=/foo/bar.roothash.p7s */
+ if (path_is_absolute(eq))
+ return bus_append_string(m, "RootHashSignaturePath", eq);
+
+ if (!(value = startswith(eq, "base64:")))
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to decode RootHashSignature= '%s', not a path but doesn't start with 'base64:': %m", eq);
+
+ /* We have a roothash signature to decode, eg: RootHashSignature=base64:012345789abcdef */
+ r = unbase64mem(value, strlen(value), &roothash_sig_decoded, &roothash_sig_decoded_size);
+ if (r < 0)
+ return log_error_errno(r, "Failed to decode RootHashSignature= '%s': %m", eq);
+
+ return bus_append_byte_array(m, field, roothash_sig_decoded, roothash_sig_decoded_size);
+ }
+
return 0;
}
#include "sd-event.h"
#include "sd-id128.h"
-#include "alloc-util.h"
+/* #include "alloc-util.h" */
#include "bus-internal.h"
-#include "bus-introspect.h"
#include "bus-label.h"
-#include "bus-message.h"
#include "bus-util.h"
-#include "cap-list.h"
-#include "cgroup-util.h"
-#include "escape.h"
-#include "mountpoint-util.h"
-#include "nsflags.h"
-#include "parse-util.h"
#include "path-util.h"
-#include "rlimit-util.h"
#include "socket-util.h"
#include "stdio-util.h"
-#include "strv.h"
-#include "user-util.h"
+/* #include "string-util.h" */
static int name_owner_change_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
sd_event *e = userdata;
return 0;
}
-int bus_print_property_value(const char *name, const char *expected_value, bool only_value, const char *value) {
- assert(name);
-
- if (expected_value && !streq_ptr(expected_value, value))
- return 0;
-
- if (only_value)
- puts(value);
- else
- printf("%s=%s\n", name, value);
-
- return 0;
-}
-
-int bus_print_property_valuef(const char *name, const char *expected_value, bool only_value, const char *fmt, ...) {
- va_list ap;
- int r;
-
- assert(name);
- assert(fmt);
-
- if (expected_value) {
- _cleanup_free_ char *s = NULL;
-
- va_start(ap, fmt);
- r = vasprintf(&s, fmt, ap);
- va_end(ap);
- if (r < 0)
- return -ENOMEM;
-
- if (streq_ptr(expected_value, s)) {
- if (only_value)
- puts(s);
- else
- printf("%s=%s\n", name, s);
- }
-
- return 0;
- }
-
- if (!only_value)
- printf("%s=", name);
- va_start(ap, fmt);
- vprintf(fmt, ap);
- va_end(ap);
- puts("");
-
- return 0;
-}
-
-static int bus_print_property(const char *name, const char *expected_value, sd_bus_message *m, bool value, bool all) {
- char type;
- const char *contents;
- int r;
-
- assert(name);
- assert(m);
-
- r = sd_bus_message_peek_type(m, &type, &contents);
- if (r < 0)
- return r;
-
- switch (type) {
-
- case SD_BUS_TYPE_STRING: {
- const char *s;
-
- r = sd_bus_message_read_basic(m, type, &s);
- if (r < 0)
- return r;
-
- if (all || !isempty(s)) {
- bool good;
-
- /* This property has a single value, so we need to take
- * care not to print a new line, everything else is OK. */
- good = !strchr(s, '\n');
- bus_print_property_value(name, expected_value, value, good ? s : "[unprintable]");
- }
-
- return 1;
- }
-
- case SD_BUS_TYPE_BOOLEAN: {
- int b;
-
- r = sd_bus_message_read_basic(m, type, &b);
- if (r < 0)
- return r;
-
- if (expected_value && parse_boolean(expected_value) != b)
- return 1;
-
- bus_print_property_value(name, NULL, value, yes_no(b));
- return 1;
- }
-
- case SD_BUS_TYPE_UINT64: {
- uint64_t u;
-
- r = sd_bus_message_read_basic(m, type, &u);
- if (r < 0)
- return r;
-
- /* Yes, heuristics! But we can change this check
- * should it turn out to not be sufficient */
-
- if (endswith(name, "Timestamp") ||
- STR_IN_SET(name, "NextElapseUSecRealtime", "LastTriggerUSec", "TimeUSec", "RTCTimeUSec")) {
- char timestamp[FORMAT_TIMESTAMP_MAX];
- const char *t;
-
- t = format_timestamp(timestamp, sizeof(timestamp), u);
- if (t || all)
- bus_print_property_value(name, expected_value, value, strempty(t));
-
- } else if (strstr(name, "USec")) {
- char timespan[FORMAT_TIMESPAN_MAX];
-
- (void) format_timespan(timespan, sizeof(timespan), u, 0);
- bus_print_property_value(name, expected_value, value, timespan);
-
- } else if (streq(name, "CoredumpFilter")) {
- char buf[STRLEN("0xFFFFFFFF")];
-
- xsprintf(buf, "0x%"PRIx64, u);
- bus_print_property_value(name, expected_value, value, buf);
-
- } else if (streq(name, "RestrictNamespaces")) {
- _cleanup_free_ char *s = NULL;
- const char *result;
-
- if ((u & NAMESPACE_FLAGS_ALL) == 0)
- result = "yes";
- else if (FLAGS_SET(u, NAMESPACE_FLAGS_ALL))
- result = "no";
- else {
- r = namespace_flags_to_string(u, &s);
- if (r < 0)
- return r;
-
- result = strempty(s);
- }
-
- bus_print_property_value(name, expected_value, value, result);
-
- } else if (streq(name, "MountFlags")) {
- const char *result;
-
- result = mount_propagation_flags_to_string(u);
- if (!result)
- return -EINVAL;
-
- bus_print_property_value(name, expected_value, value, result);
-
- } else if (STR_IN_SET(name, "CapabilityBoundingSet", "AmbientCapabilities")) {
- _cleanup_free_ char *s = NULL;
-
- r = capability_set_to_string_alloc(u, &s);
- if (r < 0)
- return r;
-
- bus_print_property_value(name, expected_value, value, s);
-
- } else if ((STR_IN_SET(name, "CPUWeight", "StartupCPUWeight", "IOWeight", "StartupIOWeight") && u == CGROUP_WEIGHT_INVALID) ||
- (STR_IN_SET(name, "CPUShares", "StartupCPUShares") && u == CGROUP_CPU_SHARES_INVALID) ||
- (STR_IN_SET(name, "BlockIOWeight", "StartupBlockIOWeight") && u == CGROUP_BLKIO_WEIGHT_INVALID) ||
- (STR_IN_SET(name, "MemoryCurrent", "TasksCurrent") && u == (uint64_t) -1) ||
- (endswith(name, "NSec") && u == (uint64_t) -1))
-
- bus_print_property_value(name, expected_value, value, "[not set]");
-
- else if ((STR_IN_SET(name, "DefaultMemoryLow", "DefaultMemoryMin", "MemoryLow", "MemoryHigh", "MemoryMax", "MemorySwapMax", "MemoryLimit") && u == CGROUP_LIMIT_MAX) ||
- (STR_IN_SET(name, "TasksMax", "DefaultTasksMax") && u == (uint64_t) -1) ||
- (startswith(name, "Limit") && u == (uint64_t) -1) ||
- (startswith(name, "DefaultLimit") && u == (uint64_t) -1))
-
- bus_print_property_value(name, expected_value, value, "infinity");
- else if (STR_IN_SET(name, "IPIngressBytes", "IPIngressPackets", "IPEgressBytes", "IPEgressPackets") && u == (uint64_t) -1)
- bus_print_property_value(name, expected_value, value, "[no data]");
- else
- bus_print_property_valuef(name, expected_value, value, "%"PRIu64, u);
-
- return 1;
- }
-
- case SD_BUS_TYPE_INT64: {
- int64_t i;
-
- r = sd_bus_message_read_basic(m, type, &i);
- if (r < 0)
- return r;
-
- bus_print_property_valuef(name, expected_value, value, "%"PRIi64, i);
- return 1;
- }
-
- case SD_BUS_TYPE_UINT32: {
- uint32_t u;
-
- r = sd_bus_message_read_basic(m, type, &u);
- if (r < 0)
- return r;
-
- if (strstr(name, "UMask") || strstr(name, "Mode"))
- bus_print_property_valuef(name, expected_value, value, "%04o", u);
-
- else if (streq(name, "UID")) {
- if (u == UID_INVALID)
- bus_print_property_value(name, expected_value, value, "[not set]");
- else
- bus_print_property_valuef(name, expected_value, value, "%"PRIu32, u);
- } else if (streq(name, "GID")) {
- if (u == GID_INVALID)
- bus_print_property_value(name, expected_value, value, "[not set]");
- else
- bus_print_property_valuef(name, expected_value, value, "%"PRIu32, u);
- } else
- bus_print_property_valuef(name, expected_value, value, "%"PRIu32, u);
-
- return 1;
- }
-
- case SD_BUS_TYPE_INT32: {
- int32_t i;
-
- r = sd_bus_message_read_basic(m, type, &i);
- if (r < 0)
- return r;
-
- bus_print_property_valuef(name, expected_value, value, "%"PRIi32, i);
- return 1;
- }
-
- case SD_BUS_TYPE_DOUBLE: {
- double d;
-
- r = sd_bus_message_read_basic(m, type, &d);
- if (r < 0)
- return r;
-
- bus_print_property_valuef(name, expected_value, value, "%g", d);
- return 1;
- }
-
- case SD_BUS_TYPE_ARRAY:
- if (streq(contents, "s")) {
- bool first = true;
- const char *str;
-
- r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, contents);
- if (r < 0)
- return r;
-
- while ((r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &str)) > 0) {
- _cleanup_free_ char *e = NULL;
-
- e = shell_maybe_quote(str, ESCAPE_BACKSLASH_ONELINE);
- if (!e)
- return -ENOMEM;
-
- if (first) {
- if (!value)
- printf("%s=", name);
- first = false;
- } else
- fputs(" ", stdout);
-
- fputs(e, stdout);
- }
- if (r < 0)
- return r;
-
- if (first && all && !value)
- printf("%s=", name);
- if (!first || all)
- puts("");
-
- r = sd_bus_message_exit_container(m);
- if (r < 0)
- return r;
-
- return 1;
-
- } else if (streq(contents, "y")) {
- const uint8_t *u;
- size_t n;
-
- r = sd_bus_message_read_array(m, SD_BUS_TYPE_BYTE, (const void**) &u, &n);
- if (r < 0)
- return r;
-
- if (all || n > 0) {
- unsigned i;
-
- if (!value)
- printf("%s=", name);
-
- for (i = 0; i < n; i++)
- printf("%02x", u[i]);
-
- puts("");
- }
-
- return 1;
-
- } else if (streq(contents, "u")) {
- uint32_t *u;
- size_t n;
-
- r = sd_bus_message_read_array(m, SD_BUS_TYPE_UINT32, (const void**) &u, &n);
- if (r < 0)
- return r;
-
- if (all || n > 0) {
- unsigned i;
-
- if (!value)
- printf("%s=", name);
-
- for (i = 0; i < n; i++)
- printf("%08x", u[i]);
-
- puts("");
- }
-
- return 1;
- }
-
- break;
- }
-
- return 0;
-}
-
-int bus_message_print_all_properties(
- sd_bus_message *m,
- bus_message_print_t func,
- char **filter,
- bool value,
- bool all,
- Set **found_properties) {
-
- int r;
-
- assert(m);
-
- r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "{sv}");
- if (r < 0)
- return r;
-
- while ((r = sd_bus_message_enter_container(m, SD_BUS_TYPE_DICT_ENTRY, "sv")) > 0) {
- _cleanup_free_ char *name_with_equal = NULL;
- const char *name, *contents, *expected_value = NULL;
-
- r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &name);
- if (r < 0)
- return r;
-
- if (found_properties) {
- r = set_ensure_allocated(found_properties, &string_hash_ops);
- if (r < 0)
- return log_oom();
-
- r = set_put(*found_properties, name);
- if (r < 0 && r != -EEXIST)
- return log_oom();
- }
-
- name_with_equal = strjoin(name, "=");
- if (!name_with_equal)
- return log_oom();
-
- if (!filter || strv_find(filter, name) ||
- (expected_value = strv_find_startswith(filter, name_with_equal))) {
- r = sd_bus_message_peek_type(m, NULL, &contents);
- if (r < 0)
- return r;
-
- r = sd_bus_message_enter_container(m, SD_BUS_TYPE_VARIANT, contents);
- if (r < 0)
- return r;
-
- if (func)
- r = func(name, expected_value, m, value, all);
- if (!func || r == 0)
- r = bus_print_property(name, expected_value, m, value, all);
- if (r < 0)
- return r;
- if (r == 0) {
- if (all && !expected_value)
- printf("%s=[unprintable]\n", name);
- /* skip what we didn't read */
- r = sd_bus_message_skip(m, contents);
- if (r < 0)
- return r;
- }
-
- r = sd_bus_message_exit_container(m);
- if (r < 0)
- return r;
- } else {
- r = sd_bus_message_skip(m, "v");
- if (r < 0)
- return r;
- }
-
- r = sd_bus_message_exit_container(m);
- if (r < 0)
- return r;
- }
- if (r < 0)
- return r;
-
- r = sd_bus_message_exit_container(m);
- if (r < 0)
- return r;
-
- return 0;
-}
-
-int bus_print_all_properties(
- sd_bus *bus,
- const char *dest,
- const char *path,
- bus_message_print_t func,
- char **filter,
- bool value,
- bool all,
- Set **found_properties) {
-
- _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
- _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
- int r;
-
- assert(bus);
- assert(path);
-
- r = sd_bus_call_method(bus,
- dest,
- path,
- "org.freedesktop.DBus.Properties",
- "GetAll",
- &error,
- &reply,
- "s", "");
- if (r < 0)
- return r;
-
- return bus_message_print_all_properties(reply, func, filter, value, all, found_properties);
-}
-
-int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
- sd_id128_t *p = userdata;
- const void *v;
- size_t n;
- int r;
-
- r = sd_bus_message_read_array(m, SD_BUS_TYPE_BYTE, &v, &n);
- if (r < 0)
- return r;
-
- if (n == 0)
- *p = SD_ID128_NULL;
- else if (n == 16)
- memcpy((*p).bytes, v, n);
- else
- return -EINVAL;
-
- return 0;
-}
-
-static int map_basic(sd_bus *bus, const char *member, sd_bus_message *m, unsigned flags, sd_bus_error *error, void *userdata) {
- char type;
- int r;
-
- r = sd_bus_message_peek_type(m, &type, NULL);
- if (r < 0)
- return r;
-
- switch (type) {
-
- case SD_BUS_TYPE_STRING:
- case SD_BUS_TYPE_OBJECT_PATH: {
- const char **p = userdata;
- const char *s;
-
- r = sd_bus_message_read_basic(m, type, &s);
- if (r < 0)
- return r;
-
- if (isempty(s))
- s = NULL;
-
- if (flags & BUS_MAP_STRDUP)
- return free_and_strdup((char **) userdata, s);
-
- *p = s;
- return 0;
- }
-
- case SD_BUS_TYPE_ARRAY: {
- _cleanup_strv_free_ char **l = NULL;
- char ***p = userdata;
-
- r = bus_message_read_strv_extend(m, &l);
- if (r < 0)
- return r;
-
- return strv_extend_strv(p, l, false);
- }
-
- case SD_BUS_TYPE_BOOLEAN: {
- int b;
-
- r = sd_bus_message_read_basic(m, type, &b);
- if (r < 0)
- return r;
-
- if (flags & BUS_MAP_BOOLEAN_AS_BOOL)
- *(bool*) userdata = b;
- else
- *(int*) userdata = b;
-
- return 0;
- }
-
- case SD_BUS_TYPE_INT32:
- case SD_BUS_TYPE_UINT32: {
- uint32_t u, *p = userdata;
-
- r = sd_bus_message_read_basic(m, type, &u);
- if (r < 0)
- return r;
-
- *p = u;
- return 0;
- }
-
- case SD_BUS_TYPE_INT64:
- case SD_BUS_TYPE_UINT64: {
- uint64_t t, *p = userdata;
-
- r = sd_bus_message_read_basic(m, type, &t);
- if (r < 0)
- return r;
-
- *p = t;
- return 0;
- }
-
- case SD_BUS_TYPE_DOUBLE: {
- double d, *p = userdata;
-
- r = sd_bus_message_read_basic(m, type, &d);
- if (r < 0)
- return r;
-
- *p = d;
- return 0;
- }}
-
- return -EOPNOTSUPP;
-}
-
-int bus_message_map_all_properties(
- sd_bus_message *m,
- const struct bus_properties_map *map,
- unsigned flags,
- sd_bus_error *error,
- void *userdata) {
-
- int r;
-
- assert(m);
- assert(map);
-
- r = sd_bus_message_enter_container(m, SD_BUS_TYPE_ARRAY, "{sv}");
- if (r < 0)
- return r;
-
- while ((r = sd_bus_message_enter_container(m, SD_BUS_TYPE_DICT_ENTRY, "sv")) > 0) {
- const struct bus_properties_map *prop;
- const char *member;
- const char *contents;
- void *v;
- unsigned i;
-
- r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &member);
- if (r < 0)
- return r;
-
- for (i = 0, prop = NULL; map[i].member; i++)
- if (streq(map[i].member, member)) {
- prop = &map[i];
- break;
- }
-
- if (prop) {
- r = sd_bus_message_peek_type(m, NULL, &contents);
- if (r < 0)
- return r;
-
- r = sd_bus_message_enter_container(m, SD_BUS_TYPE_VARIANT, contents);
- if (r < 0)
- return r;
-
- v = (uint8_t *)userdata + prop->offset;
- if (map[i].set)
- r = prop->set(sd_bus_message_get_bus(m), member, m, error, v);
- else
- r = map_basic(sd_bus_message_get_bus(m), member, m, flags, error, v);
- if (r < 0)
- return r;
-
- r = sd_bus_message_exit_container(m);
- if (r < 0)
- return r;
- } else {
- r = sd_bus_message_skip(m, "v");
- if (r < 0)
- return r;
- }
-
- r = sd_bus_message_exit_container(m);
- if (r < 0)
- return r;
- }
- if (r < 0)
- return r;
-
- return sd_bus_message_exit_container(m);
-}
-
-int bus_map_all_properties(
- sd_bus *bus,
- const char *destination,
- const char *path,
- const struct bus_properties_map *map,
- unsigned flags,
- sd_bus_error *error,
- sd_bus_message **reply,
- void *userdata) {
-
- _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
- int r;
-
- assert(bus);
- assert(destination);
- assert(path);
- assert(map);
- assert(reply || (flags & BUS_MAP_STRDUP));
-
- r = sd_bus_call_method(
- bus,
- destination,
- path,
- "org.freedesktop.DBus.Properties",
- "GetAll",
- error,
- &m,
- "s", "");
- if (r < 0)
- return r;
-
- r = bus_message_map_all_properties(m, map, flags, error, userdata);
- if (r < 0)
- return r;
-
- if (reply)
- *reply = sd_bus_message_ref(m);
-
- return r;
-}
-
int bus_connect_transport(BusTransport transport, const char *host, bool user, sd_bus **ret) {
_cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
int r;
return r;
}
-int bus_property_get_bool(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- int b = *(bool*) userdata;
-
- return sd_bus_message_append_basic(reply, 'b', &b);
-}
-
-int bus_property_set_bool(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *value,
- void *userdata,
- sd_bus_error *error) {
-
- int b, r;
-
- r = sd_bus_message_read(value, "b", &b);
- if (r < 0)
- return r;
-
- *(bool*) userdata = b;
- return 0;
-}
-
-int bus_property_get_id128(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- sd_id128_t *id = userdata;
-
- if (sd_id128_is_null(*id)) /* Add an empty array if the ID is zero */
- return sd_bus_message_append(reply, "ay", 0);
- else
- return sd_bus_message_append_array(reply, 'y', id->bytes, 16);
-}
-
-#if __SIZEOF_SIZE_T__ != 8
-int bus_property_get_size(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- uint64_t sz = *(size_t*) userdata;
-
- return sd_bus_message_append_basic(reply, 't', &sz);
-}
-#endif
-
-#if __SIZEOF_LONG__ != 8
-int bus_property_get_long(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- int64_t l = *(long*) userdata;
-
- return sd_bus_message_append_basic(reply, 'x', &l);
-}
-
-int bus_property_get_ulong(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- uint64_t ul = *(unsigned long*) userdata;
-
- return sd_bus_message_append_basic(reply, 't', &ul);
-}
-#endif
-
/**
* bus_path_encode_unique() - encode unique object path
* @b: bus connection or NULL
return 1;
}
-int bus_property_get_rlimit(
- sd_bus *bus,
- const char *path,
- const char *interface,
- const char *property,
- sd_bus_message *reply,
- void *userdata,
- sd_bus_error *error) {
-
- const char *is_soft;
- struct rlimit *rl;
- uint64_t u;
- rlim_t x;
-
- assert(bus);
- assert(reply);
- assert(userdata);
-
- is_soft = endswith(property, "Soft");
-
- rl = *(struct rlimit**) userdata;
- if (rl)
- x = is_soft ? rl->rlim_cur : rl->rlim_max;
- else {
- struct rlimit buf = {};
- const char *s, *p;
- int z;
-
- /* Chop off "Soft" suffix */
- s = is_soft ? strndupa(property, is_soft - property) : property;
-
- /* Skip over any prefix, such as "Default" */
- assert_se(p = strstr(s, "Limit"));
-
- z = rlimit_from_string(p + 5);
- assert(z >= 0);
-
- (void) getrlimit(z, &buf);
- x = is_soft ? buf.rlim_cur : buf.rlim_max;
- }
-
- /* rlim_t might have different sizes, let's map RLIMIT_INFINITY to (uint64_t) -1, so that it is the same on all
- * archs */
- u = x == RLIM_INFINITY ? (uint64_t) -1 : (uint64_t) x;
-
- return sd_bus_message_append(reply, "t", u);
-}
-
int bus_track_add_name_many(sd_bus_track *t, char **l) {
int r = 0;
char **i;
.compare = trivial_compare_func,
.free_value = bus_message_unref_wrapper,
};
-
-/* Shorthand flavors of the sd-bus convenience helpers with destination,path,interface
- * strings encapsulated within a single struct.
- */
-int bus_call_method_async(
- sd_bus *bus,
- sd_bus_slot **slot,
- const BusLocator *locator,
- const char *member,
- sd_bus_message_handler_t callback,
- void *userdata,
- const char *types, ...) {
-
- va_list ap;
- int r;
-
- assert(locator);
-
- va_start(ap, types);
- r = sd_bus_call_method_asyncv(bus, slot, locator->destination, locator->path, locator->interface, member, callback, userdata, types, ap);
- va_end(ap);
-
- return r;
-}
-
-int bus_call_method(
- sd_bus *bus,
- const BusLocator *locator,
- const char *member,
- sd_bus_error *error,
- sd_bus_message **reply,
- const char *types, ...) {
-
- va_list ap;
- int r;
-
- assert(locator);
-
- va_start(ap, types);
- r = sd_bus_call_methodv(bus, locator->destination, locator->path, locator->interface, member, error, reply, types, ap);
- va_end(ap);
-
- return r;
-}
-
-int bus_get_property(
- sd_bus *bus,
- const BusLocator *locator,
- const char *member,
- sd_bus_error *error,
- sd_bus_message **reply,
- const char *type) {
-
- assert(locator);
-
- return sd_bus_get_property(bus, locator->destination, locator->path, locator->interface, member, error, reply, type);
-}
-
-int bus_get_property_trivial(
- sd_bus *bus,
- const BusLocator *locator,
- const char *member,
- sd_bus_error *error,
- char type, void *ptr) {
-
- assert(locator);
-
- return sd_bus_get_property_trivial(bus, locator->destination, locator->path, locator->interface, member, error, type, ptr);
-}
-
-int bus_get_property_string(
- sd_bus *bus,
- const BusLocator *locator,
- const char *member,
- sd_bus_error *error,
- char **ret) {
-
- assert(locator);
-
- return sd_bus_get_property_string(bus, locator->destination, locator->path, locator->interface, member, error, ret);
-}
-
-int bus_get_property_strv(
- sd_bus *bus,
- const BusLocator *locator,
- const char *member,
- sd_bus_error *error,
- char ***ret) {
-
- assert(locator);
-
- return sd_bus_get_property_strv(bus, locator->destination, locator->path, locator->interface, member, error, ret);
-}
-
-int bus_set_property(
- sd_bus *bus,
- const BusLocator *locator,
- const char *member,
- sd_bus_error *error,
- const char *type, ...) {
-
- va_list ap;
- int r;
-
- assert(locator);
-
- va_start(ap, type);
- r = sd_bus_set_propertyv(bus, locator->destination, locator->path, locator->interface, member, error, type, ap);
- va_end(ap);
-
- return r;
-}
-
-int bus_match_signal(
- sd_bus *bus,
- sd_bus_slot **ret,
- const BusLocator *locator,
- const char *member,
- sd_bus_message_handler_t callback,
- void *userdata) {
-
- assert(locator);
-
- return sd_bus_match_signal(bus, ret, locator->destination, locator->path, locator->interface, member, callback, userdata);
-}
-
-int bus_match_signal_async(
- sd_bus *bus,
- sd_bus_slot **ret,
- const BusLocator *locator,
- const char *member,
- sd_bus_message_handler_t callback,
- sd_bus_message_handler_t install_callback,
- void *userdata) {
-
- assert(locator);
-
- return sd_bus_match_signal_async(bus, ret, locator->destination, locator->path, locator->interface, member, callback, install_callback, userdata);
-}
-
-int bus_message_new_method_call(
- sd_bus *bus,
- sd_bus_message **m,
- const BusLocator *locator,
- const char *member) {
-
- assert(locator);
-
- return sd_bus_message_new_method_call(bus, m, locator->destination, locator->path, locator->interface, member);
-}
-
-int bus_add_implementation(sd_bus *bus, const BusObjectImplementation *impl, void *userdata) {
- int r;
-
- log_debug("Registering bus object implementation for path=%s iface=%s", impl->path, impl->interface);
-
- for (const sd_bus_vtable **p = impl->vtables; p && *p; p++) {
- r = sd_bus_add_object_vtable(bus, NULL,
- impl->path,
- impl->interface,
- *p,
- userdata);
- if (r < 0)
- return log_error_errno(r, "Failed to register bus path %s with interface %s: %m",
- impl->path,
- impl->interface);
- }
-
- for (const BusObjectVtablePair *p = impl->fallback_vtables; p && p->vtable; p++) {
- r = sd_bus_add_fallback_vtable(bus, NULL,
- impl->path,
- impl->interface,
- p->vtable,
- p->object_find,
- userdata);
- if (r < 0)
- return log_error_errno(r, "Failed to register bus path %s with interface %s: %m",
- impl->path,
- impl->interface);
- }
-
- if (impl->node_enumerator) {
- r = sd_bus_add_node_enumerator(bus, NULL,
- impl->path,
- impl->node_enumerator,
- userdata);
- if (r < 0)
- return log_error_errno(r, "Failed to add node enumerator for %s: %m",
- impl->path);
- }
-
- if (impl->manager) {
- r = sd_bus_add_object_manager(bus, NULL, impl->path);
- if (r < 0)
- return log_error_errno(r, "Failed to add object manager for %s: %m", impl->path);
- }
-
- for (size_t i = 0; impl->children && impl->children[i]; i++) {
- r = bus_add_implementation(bus, impl->children[i], userdata);
- if (r < 0)
- return r;
- }
-
- return 0;
-}
-
-static const BusObjectImplementation* find_implementation(
- const char *pattern,
- const BusObjectImplementation* const* bus_objects) {
-
- for (size_t i = 0; bus_objects && bus_objects[i]; i++) {
- const BusObjectImplementation *impl = bus_objects[i];
-
- if (STR_IN_SET(pattern, impl->path, impl->interface))
- return impl;
-
- impl = find_implementation(pattern, impl->children);
- if (impl)
- return impl;
- }
-
- return NULL;
-}
-
-static int bus_introspect_implementation(
- struct introspect *intro,
- const BusObjectImplementation *impl) {
- int r;
-
- for (const sd_bus_vtable **p = impl->vtables; p && *p; p++) {
- r = introspect_write_interface(intro, impl->interface, *p);
- if (r < 0)
- return log_error_errno(r, "Failed to write introspection data: %m");
- }
-
- for (const BusObjectVtablePair *p = impl->fallback_vtables; p && p->vtable; p++) {
- r = introspect_write_interface(intro, impl->interface, p->vtable);
- if (r < 0)
- return log_error_errno(r, "Failed to write introspection data: %m");
- }
-
- return 0;
-}
-
-static void list_paths(
- FILE *out,
- const BusObjectImplementation* const* bus_objects) {
-
- for (size_t i = 0; bus_objects[i]; i++) {
- fprintf(out, "%s\t%s\n", bus_objects[i]->path, bus_objects[i]->interface);
- if (bus_objects[i]->children)
- list_paths(out, bus_objects[i]->children);
- }
-}
-
-int bus_introspect_implementations(
- FILE *out,
- const char *pattern,
- const BusObjectImplementation* const* bus_objects) {
-
- const BusObjectImplementation *impl, *main_impl = NULL;
- _cleanup_free_ char *s = NULL;
- int r;
-
- if (streq(pattern, "list")) {
- list_paths(out, bus_objects);
- return 0;
- }
-
- struct introspect intro = {};
- bool is_interface = sd_bus_interface_name_is_valid(pattern);
-
- impl = find_implementation(pattern, bus_objects);
- if (!impl)
- return log_error_errno(SYNTHETIC_ERRNO(ENOENT),
- "%s %s not found",
- is_interface ? "Interface" : "Object path",
- pattern);
-
- /* We use trusted=false here to get all the @org.freedesktop.systemd1.Privileged annotations. */
- r = introspect_begin(&intro, false);
- if (r < 0)
- return log_error_errno(r, "Failed to write introspection data: %m");
-
- r = introspect_write_default_interfaces(&intro, impl->manager);
- if (r < 0)
- return log_error_errno(r, "Failed to write introspection data: %m");
-
- /* Check if there is a non-fallback path that applies to the given interface, also
- * print it. This is useful in the case of units: o.fd.systemd1.Service is declared
- * as a fallback vtable for o/fd/systemd1/unit, and we also want to print
- * o.fd.systemd1.Unit, which is the non-fallback implementation. */
- if (impl->fallback_vtables && is_interface)
- main_impl = find_implementation(impl->path, bus_objects);
-
- if (main_impl)
- bus_introspect_implementation(&intro, main_impl);
-
- if (impl != main_impl)
- bus_introspect_implementation(&intro, impl);
-
- _cleanup_set_free_ Set *nodes = NULL;
-
- for (size_t i = 0; impl->children && impl->children[i]; i++) {
- r = set_put_strdup(&nodes, impl->children[i]->path);
- if (r < 0)
- return log_oom();
- }
-
- r = introspect_write_child_nodes(&intro, nodes, impl->path);
- if (r < 0)
- return r;
-
- r = introspect_finish(&intro, &s);
- if (r < 0)
- return log_error_errno(r, "Failed to write introspection data: %m");
-
- fputs(s, out);
- return 0;
-}
#include "sd-bus.h"
#include "sd-event.h"
-#include "bus-locator.h"
#include "macro.h"
-#include "set.h"
#include "string-util.h"
#include "time-util.h"
_BUS_TRANSPORT_INVALID = -1
} BusTransport;
-typedef struct BusObjectImplementation BusObjectImplementation;
-
-typedef struct BusObjectVtablePair {
- const sd_bus_vtable *vtable;
- sd_bus_object_find_t object_find;
-} BusObjectVtablePair;
-
-struct BusObjectImplementation {
- const char *path;
- const char *interface;
- const sd_bus_vtable **vtables;
- const BusObjectVtablePair *fallback_vtables;
- sd_bus_node_enumerator_t node_enumerator;
- bool manager;
- const BusObjectImplementation **children;
-};
-
-#define BUS_VTABLES(...) ((const sd_bus_vtable* []){ __VA_ARGS__, NULL })
-#define BUS_FALLBACK_VTABLES(...) ((const BusObjectVtablePair[]) { __VA_ARGS__, {} })
-#define BUS_IMPLEMENTATIONS(...) ((const BusObjectImplementation* []) { __VA_ARGS__, NULL })
-
-typedef int (*bus_property_set_t) (sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
-
-struct bus_properties_map {
- const char *member;
- const char *signature;
- bus_property_set_t set;
- size_t offset;
-};
-
-enum {
- BUS_MAP_STRDUP = 1 << 0, /* If set, each "s" message is duplicated. Thus, each pointer needs to be freed. */
- BUS_MAP_BOOLEAN_AS_BOOL = 1 << 1, /* If set, each "b" message is written to a bool pointer. If not set, "b" is written to a int pointer. */
-};
-
-int bus_map_id128(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata);
-
-int bus_message_map_all_properties(sd_bus_message *m, const struct bus_properties_map *map, unsigned flags, sd_bus_error *error, void *userdata);
-int bus_map_all_properties(sd_bus *bus, const char *destination, const char *path, const struct bus_properties_map *map,
- unsigned flags, sd_bus_error *error, sd_bus_message **reply, void *userdata);
-
int bus_async_unregister_and_exit(sd_event *e, sd_bus *bus, const char *name);
typedef bool (*check_idle_t)(void *userdata);
int bus_connect_transport(BusTransport transport, const char *host, bool user, sd_bus **bus);
int bus_connect_transport_systemd(BusTransport transport, const char *host, bool user, sd_bus **bus);
-typedef int (*bus_message_print_t) (const char *name, const char *expected_value, sd_bus_message *m, bool value, bool all);
-
-int bus_print_property_value(const char *name, const char *expected_value, bool only_value, const char *value);
-int bus_print_property_valuef(const char *name, const char *expected_value, bool only_value, const char *fmt, ...) _printf_(4,5);
-int bus_message_print_all_properties(sd_bus_message *m, bus_message_print_t func, char **filter, bool value, bool all, Set **found_properties);
-int bus_print_all_properties(sd_bus *bus, const char *dest, const char *path, bus_message_print_t func, char **filter, bool value, bool all, Set **found_properties);
-
-int bus_property_get_bool(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-int bus_property_set_bool(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *value, void *userdata, sd_bus_error *error);
-int bus_property_get_id128(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-
-#define bus_property_get_usec ((sd_bus_property_get_t) NULL)
-#define bus_property_set_usec ((sd_bus_property_set_t) NULL)
-
-assert_cc(sizeof(int) == sizeof(int32_t));
-#define bus_property_get_int ((sd_bus_property_get_t) NULL)
-
-assert_cc(sizeof(unsigned) == sizeof(uint32_t));
-#define bus_property_get_unsigned ((sd_bus_property_get_t) NULL)
-
-/* On 64bit machines we can use the default serializer for size_t and
- * friends, otherwise we need to cast this manually */
-#if __SIZEOF_SIZE_T__ == 8
-#define bus_property_get_size ((sd_bus_property_get_t) NULL)
-#else
-int bus_property_get_size(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-#endif
-
-#if __SIZEOF_LONG__ == 8
-#define bus_property_get_long ((sd_bus_property_get_t) NULL)
-#define bus_property_get_ulong ((sd_bus_property_get_t) NULL)
-#else
-int bus_property_get_long(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-int bus_property_get_ulong(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-#endif
-
-/* uid_t and friends on Linux 32 bit. This means we can just use the
- * default serializer for 32bit unsigned, for serializing it, and map
- * it to NULL here */
-assert_cc(sizeof(uid_t) == sizeof(uint32_t));
-#define bus_property_get_uid ((sd_bus_property_get_t) NULL)
-
-assert_cc(sizeof(gid_t) == sizeof(uint32_t));
-#define bus_property_get_gid ((sd_bus_property_get_t) NULL)
-
-assert_cc(sizeof(pid_t) == sizeof(uint32_t));
-#define bus_property_get_pid ((sd_bus_property_get_t) NULL)
-
-assert_cc(sizeof(mode_t) == sizeof(uint32_t));
-#define bus_property_get_mode ((sd_bus_property_get_t) NULL)
-
#define bus_log_parse_error(r) \
log_error_errno(r, "Failed to parse bus message: %m")
#define bus_log_create_error(r) \
log_error_errno(r, "Failed to create bus message: %m")
-#define BUS_DEFINE_PROPERTY_GET_GLOBAL(function, bus_type, val) \
- int function(sd_bus *bus, \
- const char *path, \
- const char *interface, \
- const char *property, \
- sd_bus_message *reply, \
- void *userdata, \
- sd_bus_error *error) { \
- \
- assert(bus); \
- assert(reply); \
- \
- return sd_bus_message_append(reply, bus_type, val); \
- }
-
-#define BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, get1, get2) \
- int function(sd_bus *bus, \
- const char *path, \
- const char *interface, \
- const char *property, \
- sd_bus_message *reply, \
- void *userdata, \
- sd_bus_error *error) { \
- \
- data_type *data = userdata; \
- \
- assert(bus); \
- assert(reply); \
- assert(data); \
- \
- return sd_bus_message_append(reply, bus_type, \
- get2(get1(data))); \
- }
-
-#define ident(x) (x)
-#define BUS_DEFINE_PROPERTY_GET(function, bus_type, data_type, get1) \
- BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, get1, ident)
-
-#define ref(x) (*(x))
-#define BUS_DEFINE_PROPERTY_GET_REF(function, bus_type, data_type, get) \
- BUS_DEFINE_PROPERTY_GET2(function, bus_type, data_type, ref, get)
-
-#define BUS_DEFINE_PROPERTY_GET_ENUM(function, name, type) \
- BUS_DEFINE_PROPERTY_GET_REF(function, "s", type, name##_to_string)
-
-#define BUS_PROPERTY_DUAL_TIMESTAMP(name, offset, flags) \
- SD_BUS_PROPERTY(name, "t", bus_property_get_usec, (offset) + offsetof(struct dual_timestamp, realtime), (flags)), \
- SD_BUS_PROPERTY(name "Monotonic", "t", bus_property_get_usec, (offset) + offsetof(struct dual_timestamp, monotonic), (flags))
-
int bus_path_encode_unique(sd_bus *b, const char *prefix, const char *sender_id, const char *external_id, char **ret_path);
int bus_path_decode_unique(const char *path, const char *prefix, char **ret_sender, char **ret_external);
-int bus_property_get_rlimit(sd_bus *bus, const char *path, const char *interface, const char *property, sd_bus_message *reply, void *userdata, sd_bus_error *error);
-
int bus_track_add_name_many(sd_bus_track *t, char **l);
int bus_open_system_watch_bind_with_description(sd_bus **ret, const char *description);
int bus_reply_pair_array(sd_bus_message *m, char **l);
extern const struct hash_ops bus_message_hash_ops;
-
-/* Shorthand flavors of the sd-bus convenience helpers with destination,path,interface
- * strings encapsulated within a single struct.
- */
-int bus_call_method_async(sd_bus *bus, sd_bus_slot **slot, const BusLocator *locator, const char *member, sd_bus_message_handler_t callback, void *userdata, const char *types, ...);
-int bus_call_method(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, sd_bus_message **reply, const char *types, ...);
-int bus_get_property(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, sd_bus_message **reply, const char *type);
-int bus_get_property_trivial(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, char type, void *ptr);
-int bus_get_property_string(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, char **ret);
-int bus_get_property_strv(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, char ***ret);
-int bus_set_property(sd_bus *bus, const BusLocator *locator, const char *member, sd_bus_error *error, const char *type, ...);
-int bus_match_signal(sd_bus *bus, sd_bus_slot **ret, const BusLocator *locator, const char *member, sd_bus_message_handler_t callback, void *userdata);
-int bus_match_signal_async(sd_bus *bus, sd_bus_slot **ret, const BusLocator *locator, const char *member, sd_bus_message_handler_t callback, sd_bus_message_handler_t install_callback, void *userdata);
-int bus_message_new_method_call(sd_bus *bus, sd_bus_message **m, const BusLocator *locator, const char *member);
-
-int bus_add_implementation(sd_bus *bus, const BusObjectImplementation *impl, void *userdata);
-int bus_introspect_implementations(
- FILE *out,
- const char *pattern,
- const BusObjectImplementation* const* bus_objects);
/* SPDX-License-Identifier: LGPL-2.1+ */
-#include "bus-util.h"
+#include "bus-map-properties.h"
#include "bus-wait-for-units.h"
#include "hashmap.h"
#include "string-util.h"
const void *root_hash,
size_t root_hash_size,
const char *verity_data,
+ const char *root_hash_sig_path,
+ const void *root_hash_sig,
+ size_t root_hash_sig_size,
DissectImageFlags flags,
DecryptedImage *d) {
if (r < 0)
return r;
- r = crypt_activate_by_volume_key(cd, name, root_hash, root_hash_size, CRYPT_ACTIVATE_READONLY);
+ if (root_hash_sig || root_hash_sig_path) {
+#if HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY
+ if (root_hash_sig)
+ r = crypt_activate_by_signed_key(cd, name, root_hash, root_hash_size, root_hash_sig, root_hash_sig_size, CRYPT_ACTIVATE_READONLY);
+ else {
+ _cleanup_free_ char *hash_sig = NULL;
+ size_t hash_sig_size;
+
+ r = read_full_file_full(AT_FDCWD, root_hash_sig_path, 0, &hash_sig, &hash_sig_size);
+ if (r < 0)
+ return r;
+
+ r = crypt_activate_by_signed_key(cd, name, root_hash, root_hash_size, hash_sig, hash_sig_size, CRYPT_ACTIVATE_READONLY);
+ }
+#else
+ r = log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "activation of verity device with signature requested, but not supported by cryptsetup due to missing crypt_activate_by_signed_key()");
+#endif
+ } else
+ r = crypt_activate_by_volume_key(cd, name, root_hash, root_hash_size, CRYPT_ACTIVATE_READONLY);
if (r < 0)
return r;
const void *root_hash,
size_t root_hash_size,
const char *verity_data,
+ const char *root_hash_sig_path,
+ const void *root_hash_sig,
+ size_t root_hash_sig_size,
DissectImageFlags flags,
DecryptedImage **ret) {
k = PARTITION_VERITY_OF(i);
if (k >= 0) {
- r = verity_partition(p, m->partitions + k, root_hash, root_hash_size, verity_data, flags, d);
+ r = verity_partition(p, m->partitions + k, root_hash, root_hash_size, verity_data, root_hash_sig_path, root_hash_sig, root_hash_sig_size, flags, d);
if (r < 0)
return r;
}
const void *root_hash,
size_t root_hash_size,
const char *verity_data,
+ const char *root_hash_sig_path,
+ const void *root_hash_sig,
+ size_t root_hash_sig_size,
DissectImageFlags flags,
DecryptedImage **ret) {
n--;
for (;;) {
- r = dissected_image_decrypt(m, passphrase, root_hash, root_hash_size, verity_data, flags, ret);
+ r = dissected_image_decrypt(m, passphrase, root_hash, root_hash_size, verity_data, root_hash_sig_path, root_hash_sig, root_hash_sig_size, flags, ret);
if (r >= 0)
return r;
if (r == -EKEYREJECTED)
return 0;
}
-int verity_metadata_load(const char *image, const char *root_hash_path, void **ret_roothash, size_t *ret_roothash_size, char **ret_verity_data) {
- _cleanup_free_ char *verity_filename = NULL;
+int verity_metadata_load(const char *image, const char *root_hash_path, void **ret_roothash, size_t *ret_roothash_size, char **ret_verity_data, char **ret_roothashsig) {
+ _cleanup_free_ char *verity_filename = NULL, *roothashsig_filename = NULL;
_cleanup_free_ void *roothash_decoded = NULL;
size_t roothash_decoded_size = 0;
int r;
*ret_roothash_size = 0;
if (ret_verity_data)
*ret_verity_data = NULL;
+ if (ret_roothashsig)
+ *ret_roothashsig = NULL;
return 0;
}
}
}
+ if (ret_roothashsig) {
+ char *e;
+
+ /* Follow naming convention recommended by the relevant RFC:
+ * https://tools.ietf.org/html/rfc5751#section-3.2.1 */
+ roothashsig_filename = new(char, strlen(image) + STRLEN(".roothash.p7s") + 1);
+ if (!roothashsig_filename)
+ return -ENOMEM;
+ strcpy(roothashsig_filename, image);
+ e = endswith(roothashsig_filename, ".raw");
+ if (e)
+ strcpy(e, ".roothash.p7s");
+ else
+ strcat(roothashsig_filename, ".roothash.p7s");
+
+ r = access(roothashsig_filename, R_OK);
+ if (r < 0) {
+ if (errno != ENOENT)
+ return -errno;
+ roothashsig_filename = mfree(roothashsig_filename);
+ }
+ }
+
if (ret_roothash) {
_cleanup_free_ char *text = NULL;
assert(ret_roothash_size);
}
if (ret_verity_data)
*ret_verity_data = TAKE_PTR(verity_filename);
+ if (roothashsig_filename)
+ *ret_roothashsig = TAKE_PTR(roothashsig_filename);
return 1;
}
DissectedImage* dissected_image_unref(DissectedImage *m);
DEFINE_TRIVIAL_CLEANUP_FUNC(DissectedImage*, dissected_image_unref);
-int dissected_image_decrypt(DissectedImage *m, const char *passphrase, const void *root_hash, size_t root_hash_size, const char *verity_data, DissectImageFlags flags, DecryptedImage **ret);
-int dissected_image_decrypt_interactively(DissectedImage *m, const char *passphrase, const void *root_hash, size_t root_hash_size, const char *verity_data, DissectImageFlags flags, DecryptedImage **ret);
+int dissected_image_decrypt(DissectedImage *m, const char *passphrase, const void *root_hash, size_t root_hash_size, const char *verity_data, const char *root_hash_sig_path, const void *root_hash_sig, size_t root_hash_sig_size, DissectImageFlags flags, DecryptedImage **ret);
+int dissected_image_decrypt_interactively(DissectedImage *m, const char *passphrase, const void *root_hash, size_t root_hash_size, const char *verity_data, const char *root_hash_sig_path, const void *root_hash_sig, size_t root_hash_sig_size, DissectImageFlags flags, DecryptedImage **ret);
int dissected_image_mount(DissectedImage *m, const char *dest, uid_t uid_shift, DissectImageFlags flags);
int dissected_image_acquire_metadata(DissectedImage *m);
const char* partition_designator_to_string(int i) _const_;
int partition_designator_from_string(const char *name) _pure_;
-int verity_metadata_load(const char *image, const char *root_hash_path, void **ret_roothash, size_t *ret_roothash_size, char **ret_verity_data);
+int verity_metadata_load(const char *image, const char *root_hash_path, void **ret_roothash, size_t *ret_roothash_size, char **ret_verity_data, char **ret_roothashsig);
bool dissected_image_can_do_verity(const DissectedImage *image, unsigned partition_designator);
bool dissected_image_has_verity(const DissectedImage *image, unsigned partition_designator);
type = unit_name_to_type(name);
if (type < 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
- "Failed to to derive unit type from unit name: %s",
+ "Failed to derive unit type from unit name: %s",
name);
if (is_instance) {
type = unit_name_to_type(n);
if (type < 0)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
- "Failed to to derive unit type from unit name: %s", n);
+ "Failed to derive unit type from unit name: %s", n);
/* Special top level drop in for "<unit type>.<suffix>". Add this last as it's the most generic
* and should be able to be overridden by more specific drop-ins. */
return 0;
}
+int efi_loader_get_config_timeout_one_shot(usec_t *ret) {
+ _cleanup_free_ char *v = NULL, *fn = NULL;
+ static struct stat cache_stat = {};
+ struct stat new_stat;
+ static usec_t cache;
+ uint64_t sec;
+ int r;
+
+ assert(ret);
+
+ fn = efi_variable_path(EFI_VENDOR_LOADER, "LoaderConfigTimeoutOneShot");
+ if (!fn)
+ return -ENOMEM;
+
+ /* stat() the EFI variable, to see if the mtime changed. If it did we need to cache again. */
+ if (stat(fn, &new_stat) < 0)
+ return -errno;
+
+ if (stat_inode_unmodified(&new_stat, &cache_stat)) {
+ *ret = cache;
+ return 0;
+ }
+
+ r = efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderConfigTimeoutOneShot", &v);
+ if (r < 0)
+ return r;
+
+ r = safe_atou64(v, &sec);
+ if (r < 0)
+ return r;
+ if (sec > USEC_INFINITY / USEC_PER_SEC)
+ return -ERANGE;
+
+ cache_stat = new_stat;
+ *ret = cache = sec * USEC_PER_SEC; /* return in µs */
+ return 0;
+}
+
+int efi_loader_update_entry_one_shot_cache(char **cache, struct stat *cache_stat) {
+ _cleanup_free_ char *fn = NULL, *v = NULL;
+ struct stat new_stat;
+ int r;
+
+ assert(cache);
+ assert(cache_stat);
+
+ fn = efi_variable_path(EFI_VENDOR_LOADER, "LoaderEntryOneShot");
+ if (!fn)
+ return -ENOMEM;
+
+ /* stat() the EFI variable, to see if the mtime changed. If it did we need to cache again. */
+ if (stat(fn, &new_stat) < 0)
+ return -errno;
+
+ if (stat_inode_unmodified(&new_stat, cache_stat))
+ return 0;
+
+ r = efi_get_variable_string(EFI_VENDOR_LOADER, "LoaderEntryOneShot", &v);
+ if (r < 0)
+ return r;
+
+ if (!efi_loader_entry_name_valid(v))
+ return -EINVAL;
+
+ *cache_stat = new_stat;
+ free_and_replace(*cache, v);
+
+ return 0;
+}
+
#endif
bool efi_loader_entry_name_valid(const char *s) {
#include "efivars.h"
+#include <sys/stat.h>
+
#if ENABLE_EFI
int efi_reboot_to_firmware_supported(void);
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);
+
#else
static inline int efi_reboot_to_firmware_supported(void) {
return -EOPNOTSUPP;
}
+static inline int efi_loader_get_config_timeout_one_shot(usec_t *ret) {
+ return -EOPNOTSUPP;
+}
+
+static inline int efi_loader_update_entry_one_shot_cache(char **cache, struct stat *cache_stat) {
+ return -EOPNOTSUPP;
+}
+
#endif
bool efi_loader_entry_name_valid(const char *s);
#define table_log_add_error(r) \
log_error_errno(r, "Failed to add cell(s) to table: %m")
+
+#define table_log_print_error(r) \
+ log_error_errno(r, "Failed to print table: %m")
+
+#define table_log_sort_error(r) \
+ log_error_errno(r, "Failed to sort table: %m")
"%s: unit type %s cannot be templated, ignoring.", path, unit_type_to_string(type));
if (!(flags & SEARCH_LOAD)) {
- r = lstat(path, &st);
- if (r < 0)
+ if (lstat(path, &st) < 0)
return -errno;
if (null_or_empty(&st))
const char *path,
const char *root_dir,
SearchFlags flags) {
-
- _cleanup_free_ char *target = NULL;
+ _cleanup_free_ char *resolved = NULL;
+ struct stat st;
int r;
r = unit_file_load(c, info, path, root_dir, flags);
if (r != -ELOOP || (flags & SEARCH_DROPIN))
return r;
- /* This is a symlink, let's read it. */
+ r = chase_symlinks(path, root_dir, CHASE_WARN | CHASE_NONEXISTENT, &resolved, NULL);
+ if (r >= 0 &&
+ root_dir &&
+ path_equal_ptr(path_startswith(resolved, root_dir), "dev/null"))
+ /* When looking under root_dir, we can't expect /dev/ to be mounted,
+ * so let's see if the path is a (possibly dangling) symlink to /dev/null. */
+ info->type = UNIT_FILE_TYPE_MASKED;
- r = readlink_malloc(path, &target);
- if (r < 0)
- return r;
+ else if (r > 0 &&
+ stat(resolved, &st) >= 0 &&
+ null_or_empty(&st))
- if (path_equal(target, "/dev/null"))
info->type = UNIT_FILE_TYPE_MASKED;
+
else {
+ _cleanup_free_ char *target = NULL;
const char *bn;
UnitType a, b;
+ /* This is a symlink, let's read it. We read the link again, because last time
+ * we followed the link until resolution, and here we need to do one step. */
+
+ r = readlink_malloc(path, &target);
+ if (r < 0)
+ return r;
+
bn = basename(target);
if (unit_name_is_valid(info->name, UNIT_NAME_PLAIN)) {
* rates as defined by IEEE 802.11 7.3.2.2 but without the length
* restriction (at most %NL80211_MAX_SUPP_RATES).
* @NL80211_ATTR_STA_VLAN: interface index of VLAN interface to move station
- * to, or the AP interface the station was originally added to to.
+ * to, or the AP interface the station was originally added to.
* @NL80211_ATTR_STA_INFO: information about a station, part of station info
* given for %NL80211_CMD_GET_STATION, nested attribute containing
* info as possible, see &enum nl80211_sta_info.
if (config_file &&
message_len >= config_file_len &&
memcmp(message, config_file, config_file_len) == 0 &&
- IN_SET(message[config_file_len], ':', ' ', '\0') &&
+ (message_len == config_file_len || IN_SET(message[config_file_len], ':', ' ')) &&
(!highlight || highlight_shifted[0] == 0 || highlight_shifted[0] > config_file_len)) {
_cleanup_free_ char *t = NULL, *urlified = NULL;
t = strndup(config_file, config_file_len);
if (t && terminal_urlify_path(t, NULL, &urlified) >= 0) {
- size_t shift = strlen(urlified) - config_file_len;
+ size_t urlified_len = strlen(urlified);
+ size_t shift = urlified_len - config_file_len;
char *joined;
- joined = strjoin(urlified, message + config_file_len);
+ joined = realloc(urlified, message_len + shift);
if (joined) {
+ memcpy(joined + urlified_len, message + config_file_len, message_len - config_file_len);
free_and_replace(message, joined);
+ TAKE_PTR(urlified);
message_len += shift;
if (highlight) {
highlight_shifted[0] += shift;
[NETDEV_MACVLAN_MODE_VEPA] = "vepa",
[NETDEV_MACVLAN_MODE_BRIDGE] = "bridge",
[NETDEV_MACVLAN_MODE_PASSTHRU] = "passthru",
+ [NETDEV_MACVLAN_MODE_SOURCE] = "source",
};
DEFINE_STRING_TABLE_LOOKUP(macvlan_mode, MacVlanMode);
NETDEV_MACVLAN_MODE_VEPA = MACVLAN_MODE_VEPA,
NETDEV_MACVLAN_MODE_BRIDGE = MACVLAN_MODE_BRIDGE,
NETDEV_MACVLAN_MODE_PASSTHRU = MACVLAN_MODE_PASSTHRU,
+ NETDEV_MACVLAN_MODE_SOURCE = MACVLAN_MODE_SOURCE,
_NETDEV_MACVLAN_MODE_MAX,
_NETDEV_MACVLAN_MODE_INVALID = -1
} MacVlanMode;
bpf-program.h
bridge-util.c
bridge-util.h
+ bus-get-properties.c
+ bus-get-properties.h
bus-locator.c
bus-locator.h
bus-log-control-api.c
bus-log-control-api.h
+ bus-map-properties.c
+ bus-map-properties.h
+ bus-object.c
+ bus-object.h
bus-polkit.c
bus-polkit.h
+ bus-print-properties.c
+ bus-print-properties.h
bus-unit-procs.c
bus-unit-procs.h
bus-unit-util.c
"Inserted module '%s'", kmod_module_get_name(mod));
else if (err == KMOD_PROBE_APPLY_BLACKLIST)
log_full(verbose ? LOG_INFO : LOG_DEBUG,
- "Module '%s' is blacklisted", kmod_module_get_name(mod));
+ "Module '%s' is deny-listed", kmod_module_get_name(mod));
else {
assert(err < 0);
if (!path_startswith(path, prefix))
continue;
- if (umount2(path, flags) < 0) {
- r = log_debug_errno(errno, "Failed to umount %s: %m", path);
+ if (umount2(path, flags | UMOUNT_NOFOLLOW) < 0) {
+ log_debug_errno(errno, "Failed to umount %s, ignoring: %m", path);
continue;
}
break;
}
-
} while (again);
return n;
const char *prefix,
unsigned long new_flags,
unsigned long flags_mask,
- char **blacklist,
+ char **deny_list,
FILE *proc_self_mountinfo) {
_cleanup_set_free_free_ Set *done = NULL;
* do not have any effect on future submounts that might get propagated, they might be writable. This includes
* future submounts that have been triggered via autofs.
*
- * If the "blacklist" parameter is specified it may contain a list of subtrees to exclude from the
- * remount operation. Note that we'll ignore the blacklist for the top-level path. */
+ * If the "deny_list" parameter is specified it may contain a list of subtrees to exclude from the
+ * remount operation. Note that we'll ignore the deny list for the top-level path. */
simplified = strdup(prefix);
if (!simplified)
if (!path_startswith(path, simplified))
continue;
- /* Ignore this mount if it is blacklisted, but only if it isn't the top-level mount
+ /* Ignore this mount if it is deny-listed, but only if it isn't the top-level mount
* we shall operate on. */
if (!path_equal(path, simplified)) {
- bool blacklisted = false;
+ bool deny_listed = false;
char **i;
- STRV_FOREACH(i, blacklist) {
+ STRV_FOREACH(i, deny_list) {
if (path_equal(*i, simplified))
continue;
continue;
if (path_startswith(path, *i)) {
- blacklisted = true;
- log_debug("Not remounting %s blacklisted by %s, called for %s",
+ deny_listed = true;
+ log_debug("Not remounting %s deny-listed by %s, called for %s",
path, *i, simplified);
break;
}
}
- if (blacklisted)
+ if (deny_listed)
continue;
}
const char *prefix,
unsigned long new_flags,
unsigned long flags_mask,
- char **blacklist) {
+ char **deny_list) {
_cleanup_fclose_ FILE *proc_self_mountinfo = NULL;
int r;
if (r < 0)
return r;
- return bind_remount_recursive_with_mountinfo(prefix, new_flags, flags_mask, blacklist, proc_self_mountinfo);
+ return bind_remount_recursive_with_mountinfo(prefix, new_flags, flags_mask, deny_list, proc_self_mountinfo);
}
int bind_remount_one_with_mountinfo(
#include <mntent.h>
#include <stdio.h>
+#include <unistd.h>
+#include "errno-util.h"
#include "macro.h"
/* 4MB for contents of regular files, 64k inodes for directories, symbolic links and device specials,
int repeat_unmount(const char *path, int flags);
int umount_recursive(const char *target, int flags);
-int bind_remount_recursive(const char *prefix, unsigned long new_flags, unsigned long flags_mask, char **blacklist);
-int bind_remount_recursive_with_mountinfo(const char *prefix, unsigned long new_flags, unsigned long flags_mask, char **blacklist, FILE *proc_self_mountinfo);
+int bind_remount_recursive(const char *prefix, unsigned long new_flags, unsigned long flags_mask, char **deny_list);
+int bind_remount_recursive_with_mountinfo(const char *prefix, unsigned long new_flags, unsigned long flags_mask, char **deny_list, FILE *proc_self_mountinfo);
int bind_remount_one_with_mountinfo(const char *path, unsigned long new_flags, unsigned long flags_mask, FILE *proc_self_mountinfo);
int mount_move_root(const char *path);
char **ret_remaining_options);
int mode_to_inaccessible_node(const char *runtime_dir, mode_t mode, char **dest);
+
+/* Useful for usage with _cleanup_(), unmounts, removes a directory and frees the pointer */
+static inline void umount_and_rmdir_and_free(char *p) {
+ PROTECT_ERRNO;
+ (void) umount_recursive(p, 0);
+ (void) rmdir(p);
+ free(p);
+}
+DEFINE_TRIVIAL_CLEANUP_FUNC(char*, umount_and_rmdir_and_free);
return t;
}
+char *pkcs11_token_manufacturer_id(const CK_TOKEN_INFO *token_info) {
+ char *t;
+
+ t = strndup((char*) token_info->manufacturerID, sizeof(token_info->manufacturerID));
+ if (!t)
+ return NULL;
+
+ strstrip(t);
+ return t;
+}
+
+char *pkcs11_token_model(const CK_TOKEN_INFO *token_info) {
+ char *t;
+
+ t = strndup((char*) token_info->model, sizeof(token_info->model));
+ if (!t)
+ return NULL;
+
+ strstrip(t);
+ return t;
+}
+
int pkcs11_token_login(
CK_FUNCTION_LIST *m,
CK_SESSION_HANDLE session,
_cleanup_free_ char *token_uri_string = NULL, *token_uri_escaped = NULL, *id = NULL, *token_label = NULL;
_cleanup_(p11_kit_uri_freep) P11KitUri *token_uri = NULL;
CK_TOKEN_INFO updated_token_info;
- int uri_result;
+ int uri_result, r;
CK_RV rv;
- int r;
assert(m);
assert(token_info);
for (unsigned tries = 0; tries < 3; tries++) {
_cleanup_strv_free_erase_ char **passwords = NULL;
- _cleanup_free_ char *text = NULL;
char **i, *e;
- if (FLAGS_SET(token_info->flags, CKF_USER_PIN_FINAL_TRY))
- r = asprintf(&text,
- "Please enter correct PIN for security token '%s' in order to unlock %s (final try):",
- token_label, friendly_name);
- else if (FLAGS_SET(token_info->flags, CKF_USER_PIN_COUNT_LOW))
- r = asprintf(&text,
- "PIN has been entered incorrectly previously, please enter correct PIN for security token '%s' in order to unlock %s:",
- token_label, friendly_name);
- else if (tries == 0)
- r = asprintf(&text,
- "Please enter PIN for security token '%s' in order to unlock %s:",
- token_label, friendly_name);
- else
- r = asprintf(&text,
- "Please enter PIN for security token '%s' in order to unlock %s (try #%u):",
- token_label, friendly_name, tries+1);
- if (r < 0)
- return log_oom();
-
e = getenv("PIN");
if (e) {
passwords = strv_new(e);
if (unsetenv("PIN") < 0)
return log_error_errno(errno, "Failed to unset $PIN: %m");
} else {
+ _cleanup_free_ char *text = NULL;
+
+ if (FLAGS_SET(token_info->flags, CKF_USER_PIN_FINAL_TRY))
+ r = asprintf(&text,
+ "Please enter correct PIN for security token '%s' in order to unlock %s (final try):",
+ token_label, friendly_name);
+ else if (FLAGS_SET(token_info->flags, CKF_USER_PIN_COUNT_LOW))
+ r = asprintf(&text,
+ "PIN has been entered incorrectly previously, please enter correct PIN for security token '%s' in order to unlock %s:",
+ token_label, friendly_name);
+ else if (tries == 0)
+ r = asprintf(&text,
+ "Please enter PIN for security token '%s' in order to unlock %s:",
+ token_label, friendly_name);
+ else
+ r = asprintf(&text,
+ "Please enter PIN for security token '%s' in order to unlock %s (try #%u):",
+ token_label, friendly_name, tries+1);
+ if (r < 0)
+ return log_oom();
+
/* We never cache PINs, simply because it's fatal if we use wrong PINs, since usually there are only 3 tries */
r = ask_password_auto(text, icon_name, id, keyname, until, 0, &passwords);
if (r < 0)
assert(m);
assert(slot_info);
assert(token_info);
- assert(search_uri);
token_label = pkcs11_token_label(token_info);
if (!token_label)
CK_RV rv;
assert(m);
- assert(search_uri);
/* We return -EAGAIN for all failures we can attribute to a specific slot in some way, so that the
* caller might try other slots before giving up. */
return -EAGAIN;
}
- if (!p11_kit_uri_match_token_info(search_uri, &token_info)) {
+ if (search_uri && !p11_kit_uri_match_token_info(search_uri, &token_info)) {
log_debug("Found non-matching token with URI %s.", token_uri_string);
return -EAGAIN;
}
int r;
assert(m);
- assert(search_uri);
/* We ignore most errors from modules here, in order to skip over faulty modules: one faulty module
* should not have the effect that we don't try the others anymore. We indicate such per-module
_cleanup_(p11_kit_uri_freep) P11KitUri *search_uri = NULL;
int r;
- assert(pkcs11_uri);
-
/* Execute the specified callback for each matching token found. If nothing is found returns
* -EAGAIN. Logs about all errors, except for EAGAIN, which the caller has to log about. */
- r = uri_from_string(pkcs11_uri, &search_uri);
- if (r < 0)
- return log_error_errno(r, "Failed to parse PKCS#11 URI '%s': %m", pkcs11_uri);
+ if (pkcs11_uri) {
+ r = uri_from_string(pkcs11_uri, &search_uri);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse PKCS#11 URI '%s': %m", pkcs11_uri);
+ }
modules = p11_kit_modules_load_and_initialize(0);
if (!modules)
CK_RV pkcs11_get_slot_list_malloc(CK_FUNCTION_LIST *m, CK_SLOT_ID **ret_slotids, CK_ULONG *ret_n_slotids);
char *pkcs11_token_label(const CK_TOKEN_INFO *token_info);
+char *pkcs11_token_manufacturer_id(const CK_TOKEN_INFO *token_info);
+char *pkcs11_token_model(const CK_TOKEN_INFO *token_info);
int pkcs11_token_login(CK_FUNCTION_LIST *m, CK_SESSION_HANDLE session, CK_SLOT_ID slotid, const CK_TOKEN_INFO *token_info, const char *friendly_name, const char *icon_name, const char *keyname, usec_t until, char **ret_used_pin);
const uint32_t seccomp_local_archs[] = {
- /* Note: always list the native arch we are compiled as last, so that users can blacklist seccomp(), but our own calls to it still succeed */
+ /* Note: always list the native arch we are compiled as last, so that users can deny-list seccomp(), but our own calls to it still succeed */
#if defined(__x86_64__) && defined(__ILP32__)
SCMP_ARCH_X86,
/* If we previously wanted to forbid a syscall and now
* we want to allow it, then remove it from the list. */
- if (!(flags & SECCOMP_PARSE_INVERT) == !!(flags & SECCOMP_PARSE_WHITELIST)) {
+ if (!(flags & SECCOMP_PARSE_INVERT) == !!(flags & SECCOMP_PARSE_ALLOW_LIST)) {
r = hashmap_put(filter, INT_TO_PTR(id + 1), INT_TO_PTR(errno_num));
if (r < 0)
switch (r) {
return 0;
}
-int seccomp_restrict_address_families(Set *address_families, bool whitelist) {
+int seccomp_restrict_address_families(Set *address_families, bool allow_list) {
uint32_t arch;
int r;
if (r < 0)
return r;
- if (whitelist) {
+ if (allow_list) {
int af, first = 0, last = 0;
void *afp;
- /* If this is a whitelist, we first block the address families that are out of range and then
- * everything that is not in the set. First, we find the lowest and highest address family in
- * the set. */
+ /* If this is an allow list, we first block the address families that are out of
+ * range and then everything that is not in the set. First, we find the lowest and
+ * highest address family in the set. */
SET_FOREACH(afp, address_families, i) {
af = PTR_TO_INT(afp);
} else {
void *af;
- /* If this is a blacklist, then generate one rule for
- * each address family that are then combined in OR
- * checks. */
+ /* If this is a deny list, then generate one rule for each address family that are
+ * then combined in OR checks. */
SET_FOREACH(af, address_families, i) {
return r;
/* Go through all policies with lower values than that, and block them -- unless they appear in the
- * whitelist. */
+ * allow list. */
for (p = 0; p < max_policy; p++) {
bool good = false;
- /* Check if this is in the whitelist. */
+ /* Check if this is in the allow list. */
for (i = 0; i < ELEMENTSOF(permitted_policies); i++)
if (permitted_policies[i] == p) {
good = true;
}
}
- /* Blacklist all other policies, i.e. the ones with higher values. Note that all comparisons are
- * unsigned here, hence no need no check for < 0 values. */
+ /* Deny-list all other policies, i.e. the ones with higher values. Note that all comparisons
+ * are unsigned here, hence no need no check for < 0 values. */
r = seccomp_rule_add_exact(
seccomp,
SCMP_ACT_ERRNO(EPERM),
return 0;
}
-int parse_syscall_archs(char **l, Set **archs) {
- _cleanup_set_free_ Set *_archs = NULL;
+int parse_syscall_archs(char **l, Set **ret_archs) {
+ _cleanup_set_free_ Set *archs = NULL;
char **s;
int r;
assert(l);
- assert(archs);
-
- r = set_ensure_allocated(&_archs, NULL);
- if (r < 0)
- return r;
+ assert(ret_archs);
STRV_FOREACH(s, l) {
uint32_t a;
if (r < 0)
return -EINVAL;
- r = set_put(_archs, UINT32_TO_PTR(a + 1));
+ r = set_ensure_put(&archs, NULL, UINT32_TO_PTR(a + 1));
if (r < 0)
return -ENOMEM;
}
- *archs = TAKE_PTR(_archs);
-
+ *ret_archs = TAKE_PTR(archs);
return 0;
}
typedef enum SeccompParseFlags {
SECCOMP_PARSE_INVERT = 1 << 0,
- SECCOMP_PARSE_WHITELIST = 1 << 1,
+ SECCOMP_PARSE_ALLOW_LIST = 1 << 1,
SECCOMP_PARSE_LOG = 1 << 2,
SECCOMP_PARSE_PERMISSIVE = 1 << 3,
} SeccompParseFlags;
int seccomp_restrict_namespaces(unsigned long retain);
int seccomp_protect_sysctl(void);
int seccomp_protect_syslog(void);
-int seccomp_restrict_address_families(Set *address_families, bool whitelist);
+int seccomp_restrict_address_families(Set *address_families, bool allow_list);
int seccomp_restrict_realtime(void);
int seccomp_memory_deny_write_execute(void);
int seccomp_lock_personality(unsigned long personality);
DEFINE_TRIVIAL_CLEANUP_FUNC(scmp_filter_ctx, seccomp_release);
-int parse_syscall_archs(char **l, Set **archs);
+int parse_syscall_archs(char **l, Set **ret_archs);
uint32_t scmp_act_kill_process(void);
/* SPDX-License-Identifier: LGPL-2.1+ */
#pragma once
-#include "bus-util.h"
+#include "bus-object.h"
int service_parse_argv(
const char *service,
#include "env-util.h"
#include "fs-util.h"
#include "log.h"
+#include "namespace-util.h"
#include "path-util.h"
#include "random-util.h"
#include "strv.h"
if (pid == 0) {
/* child */
- if (unshare(CLONE_NEWNS) < 0)
- _exit(EXIT_FAILURE);
-
- if (mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL) < 0)
+ if (detach_mount_namespace() < 0)
_exit(EXIT_FAILURE);
_exit(EXIT_SUCCESS);
STRV_FOREACH(i, hr->pkcs11_token_uri)
printf(i == hr->pkcs11_token_uri ?
- " Sec. Token: %s\n" :
+ "PKCS11 Token: %s\n" :
" %s\n", *i);
}
+ if (hr->n_fido2_hmac_credential > 0)
+ printf(" FIDO2 Token: %zu\n", hr->n_fido2_hmac_credential);
+
k = strv_length(hr->hashed_password);
if (k == 0)
printf(" Passwords: %snone%s\n",
.password_change_inactive_usec = UINT64_MAX,
.password_change_now = -1,
.pkcs11_protected_authentication_path_permitted = -1,
+ .fido2_user_presence_permitted = -1,
};
return h;
erase_and_free(k->hashed_password);
}
+static void fido2_hmac_credential_done(Fido2HmacCredential *c) {
+ if (!c)
+ return;
+
+ free(c->id);
+}
+
+static void fido2_hmac_salt_done(Fido2HmacSalt *s) {
+ if (!s)
+ return;
+
+ fido2_hmac_credential_done(&s->credential);
+ erase_and_free(s->salt);
+ erase_and_free(s->hashed_password);
+}
+
static UserRecord* user_record_free(UserRecord *h) {
if (!h)
return NULL;
strv_free_erase(h->hashed_password);
strv_free_erase(h->ssh_authorized_keys);
strv_free_erase(h->password);
- strv_free_erase(h->pkcs11_pin);
+ strv_free_erase(h->token_pin);
free(h->cifs_service);
free(h->cifs_user_name);
pkcs11_encrypted_key_done(h->pkcs11_encrypted_key + i);
free(h->pkcs11_encrypted_key);
+ for (size_t i = 0; i < h->n_fido2_hmac_credential; i++)
+ fido2_hmac_credential_done(h->fido2_hmac_credential + i);
+ for (size_t i = 0; i < h->n_fido2_hmac_salt; i++)
+ fido2_hmac_salt_done(h->fido2_hmac_salt + i);
+
json_variant_unref(h->json);
return mfree(h);
static const JsonDispatch secret_dispatch_table[] = {
{ "password", _JSON_VARIANT_TYPE_INVALID, json_dispatch_strv, offsetof(UserRecord, password), 0 },
- { "pkcs11Pin", _JSON_VARIANT_TYPE_INVALID, json_dispatch_strv, offsetof(UserRecord, pkcs11_pin), 0 },
+ { "tokenPin", _JSON_VARIANT_TYPE_INVALID, json_dispatch_strv, offsetof(UserRecord, token_pin), 0 },
+ { "pkcs11Pin", /* legacy alias */ _JSON_VARIANT_TYPE_INVALID, json_dispatch_strv, offsetof(UserRecord, token_pin), 0 },
{ "pkcs11ProtectedAuthenticationPathPermitted", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, pkcs11_protected_authentication_path_permitted), 0 },
+ { "fido2UserPresencePermitted", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, fido2_user_presence_permitted), 0 },
{},
};
int r;
if (json_variant_is_null(variant)) {
- k->data = mfree(k->data);
+ k->data = erase_and_free(k->data);
k->size = 0;
return 0;
}
return 0;
}
+static int dispatch_fido2_hmac_credential(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+ Fido2HmacCredential *k = userdata;
+ size_t l;
+ void *b;
+ int r;
+
+ if (json_variant_is_null(variant)) {
+ k->id = mfree(k->id);
+ k->size = 0;
+ return 0;
+ }
+
+ if (!json_variant_is_string(variant))
+ return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name));
+
+ r = unbase64mem(json_variant_string(variant), (size_t) -1, &b, &l);
+ if (r < 0)
+ return json_log(variant, flags, r, "Failed to decode FIDO2 credential ID: %m");
+
+ free_and_replace(k->id, b);
+ k->size = l;
+
+ return 0;
+}
+
+static int dispatch_fido2_hmac_credential_array(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+ UserRecord *h = userdata;
+ JsonVariant *e;
+ int r;
+
+ if (!json_variant_is_array(variant))
+ return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array of strings.", strna(name));
+
+ JSON_VARIANT_ARRAY_FOREACH(e, variant) {
+ Fido2HmacCredential *array;
+ size_t l;
+ void *b;
+
+ if (!json_variant_is_string(e))
+ return json_log(e, flags, SYNTHETIC_ERRNO(EINVAL), "JSON array element is not a string.");
+
+ array = reallocarray(h->fido2_hmac_credential, h->n_fido2_hmac_credential + 1, sizeof(Fido2HmacCredential));
+ if (!array)
+ return log_oom();
+
+ r = unbase64mem(json_variant_string(e), (size_t) -1, &b, &l);
+ if (r < 0)
+ return json_log(variant, flags, r, "Failed to decode FIDO2 credential ID: %m");
+
+ h->fido2_hmac_credential = array;
+
+ h->fido2_hmac_credential[h->n_fido2_hmac_credential++] = (Fido2HmacCredential) {
+ .id = b,
+ .size = l,
+ };
+ }
+
+ return 0;
+}
+
+static int dispatch_fido2_hmac_salt_value(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+ Fido2HmacSalt *k = userdata;
+ size_t l;
+ void *b;
+ int r;
+
+ if (json_variant_is_null(variant)) {
+ k->salt = erase_and_free(k->salt);
+ k->salt_size = 0;
+ return 0;
+ }
+
+ if (!json_variant_is_string(variant))
+ return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not a string.", strna(name));
+
+ r = unbase64mem(json_variant_string(variant), (size_t) -1, &b, &l);
+ if (r < 0)
+ return json_log(variant, flags, r, "Failed to decode FIDO2 salt: %m");
+
+ erase_and_free(k->salt);
+ k->salt = b;
+ k->salt_size = l;
+
+ return 0;
+}
+
+static int dispatch_fido2_hmac_salt(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
+ UserRecord *h = userdata;
+ JsonVariant *e;
+ int r;
+
+ if (!json_variant_is_array(variant))
+ return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' is not an array of objects.", strna(name));
+
+ JSON_VARIANT_ARRAY_FOREACH(e, variant) {
+ Fido2HmacSalt *array, *k;
+
+ static const JsonDispatch fido2_hmac_salt_dispatch_table[] = {
+ { "credential", JSON_VARIANT_STRING, dispatch_fido2_hmac_credential, offsetof(Fido2HmacSalt, credential), JSON_MANDATORY },
+ { "salt", JSON_VARIANT_STRING, dispatch_fido2_hmac_salt_value, 0, JSON_MANDATORY },
+ { "hashedPassword", JSON_VARIANT_STRING, json_dispatch_string, offsetof(Fido2HmacSalt, hashed_password), JSON_MANDATORY },
+ {},
+ };
+
+ if (!json_variant_is_object(e))
+ return json_log(e, flags, SYNTHETIC_ERRNO(EINVAL), "JSON array element is not an object.");
+
+ array = reallocarray(h->fido2_hmac_salt, h->n_fido2_hmac_salt + 1, sizeof(Fido2HmacSalt));
+ if (!array)
+ return log_oom();
+
+ h->fido2_hmac_salt = array;
+ k = h->fido2_hmac_salt + h->n_fido2_hmac_salt;
+ *k = (Fido2HmacSalt) {};
+
+ r = json_dispatch(e, fido2_hmac_salt_dispatch_table, NULL, flags, k);
+ if (r < 0) {
+ fido2_hmac_salt_done(k);
+ return r;
+ }
+
+ h->n_fido2_hmac_salt++;
+ }
+
+ return 0;
+}
+
static int dispatch_privileged(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
static const JsonDispatch privileged_dispatch_table[] = {
- { "passwordHint", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, password_hint), 0 },
- { "hashedPassword", _JSON_VARIANT_TYPE_INVALID, json_dispatch_strv, offsetof(UserRecord, hashed_password), JSON_SAFE },
- { "sshAuthorizedKeys", _JSON_VARIANT_TYPE_INVALID, json_dispatch_strv, offsetof(UserRecord, ssh_authorized_keys), 0 },
- { "pkcs11EncryptedKey", JSON_VARIANT_ARRAY, dispatch_pkcs11_key, 0, 0 },
+ { "passwordHint", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, password_hint), 0 },
+ { "hashedPassword", _JSON_VARIANT_TYPE_INVALID, json_dispatch_strv, offsetof(UserRecord, hashed_password), JSON_SAFE },
+ { "sshAuthorizedKeys", _JSON_VARIANT_TYPE_INVALID, json_dispatch_strv, offsetof(UserRecord, ssh_authorized_keys), 0 },
+ { "pkcs11EncryptedKey", JSON_VARIANT_ARRAY, dispatch_pkcs11_key, 0, 0 },
+ { "fido2HmacSalt", JSON_VARIANT_ARRAY, dispatch_fido2_hmac_salt, 0, 0 },
{},
};
static int dispatch_per_machine(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) {
static const JsonDispatch per_machine_dispatch_table[] = {
- { "matchMachineId", _JSON_VARIANT_TYPE_INVALID, NULL, 0, 0 },
- { "matchHostname", _JSON_VARIANT_TYPE_INVALID, NULL, 0, 0 },
- { "iconName", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, icon_name), JSON_SAFE },
- { "location", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, location), 0 },
- { "shell", JSON_VARIANT_STRING, json_dispatch_filename_or_path, offsetof(UserRecord, shell), 0 },
- { "umask", JSON_VARIANT_UNSIGNED, json_dispatch_umask, offsetof(UserRecord, umask), 0 },
- { "environment", JSON_VARIANT_ARRAY, json_dispatch_environment, offsetof(UserRecord, environment), 0 },
- { "timeZone", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, time_zone), JSON_SAFE },
- { "preferredLanguage", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, preferred_language), JSON_SAFE },
- { "niceLevel", _JSON_VARIANT_TYPE_INVALID, json_dispatch_nice, offsetof(UserRecord, nice_level), 0 },
- { "resourceLimits", _JSON_VARIANT_TYPE_INVALID, json_dispatch_rlimits, offsetof(UserRecord, rlimits), 0 },
- { "locked", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, locked), 0 },
- { "notBeforeUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, not_before_usec), 0 },
- { "notAfterUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, not_after_usec), 0 },
- { "storage", JSON_VARIANT_STRING, json_dispatch_storage, offsetof(UserRecord, storage), 0 },
- { "diskSize", JSON_VARIANT_UNSIGNED, json_dispatch_disk_size, offsetof(UserRecord, disk_size), 0 },
- { "diskSizeRelative", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, disk_size_relative), 0 },
- { "skeletonDirectory", JSON_VARIANT_STRING, json_dispatch_path, offsetof(UserRecord, skeleton_directory), 0 },
- { "accessMode", JSON_VARIANT_UNSIGNED, json_dispatch_access_mode, offsetof(UserRecord, access_mode), 0 },
- { "tasksMax", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, tasks_max), 0 },
- { "memoryHigh", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, memory_high), 0 },
- { "memoryMax", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, memory_max), 0 },
- { "cpuWeight", JSON_VARIANT_UNSIGNED, json_dispatch_weight, offsetof(UserRecord, cpu_weight), 0 },
- { "ioWeight", JSON_VARIANT_UNSIGNED, json_dispatch_weight, offsetof(UserRecord, io_weight), 0 },
- { "mountNoDevices", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, nodev), 0 },
- { "mountNoSuid", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, nosuid), 0 },
- { "mountNoExecute", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, noexec), 0 },
- { "cifsDomain", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_domain), JSON_SAFE },
- { "cifsUserName", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_user_name), JSON_SAFE },
- { "cifsService", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_service), JSON_SAFE },
- { "imagePath", JSON_VARIANT_STRING, json_dispatch_path, offsetof(UserRecord, image_path), 0 },
- { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(UserRecord, uid), 0 },
- { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(UserRecord, gid), 0 },
- { "memberOf", JSON_VARIANT_ARRAY, json_dispatch_user_group_list, offsetof(UserRecord, member_of), JSON_RELAX},
- { "fileSystemType", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, file_system_type), JSON_SAFE },
- { "partitionUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, partition_uuid), 0 },
- { "luksUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, luks_uuid), 0 },
- { "fileSystemUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, file_system_uuid), 0 },
- { "luksDiscard", _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate, offsetof(UserRecord, luks_discard), 0, },
- { "luksOfflineDiscard", _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate, offsetof(UserRecord, luks_offline_discard), 0, },
- { "luksCipher", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_cipher), JSON_SAFE },
- { "luksCipherMode", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_cipher_mode), JSON_SAFE },
- { "luksVolumeKeySize", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_volume_key_size), 0 },
- { "luksPbkdfHashAlgorithm", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_pbkdf_hash_algorithm), JSON_SAFE },
- { "luksPbkdfType", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_pbkdf_type), JSON_SAFE },
- { "luksPbkdfTimeCostUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_time_cost_usec), 0 },
- { "luksPbkdfMemoryCost", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_memory_cost), 0 },
- { "luksPbkdfParallelThreads", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_parallel_threads), 0 },
- { "rateLimitIntervalUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, ratelimit_interval_usec), 0 },
- { "rateLimitBurst", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, ratelimit_burst), 0 },
- { "enforcePasswordPolicy", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, enforce_password_policy), 0 },
- { "autoLogin", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, auto_login), 0 },
- { "stopDelayUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, stop_delay_usec), 0 },
- { "killProcesses", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, kill_processes), 0 },
- { "passwordChangeMinUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_min_usec), 0 },
- { "passwordChangeMaxUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_max_usec), 0 },
- { "passwordChangeWarnUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_warn_usec), 0 },
- { "passwordChangeInactiveUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_inactive_usec), 0 },
- { "passwordChangeNow", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, password_change_now), 0 },
- { "pkcs11TokenUri", JSON_VARIANT_ARRAY, dispatch_pkcs11_uri_array, offsetof(UserRecord, pkcs11_token_uri), 0 },
+ { "matchMachineId", _JSON_VARIANT_TYPE_INVALID, NULL, 0, 0 },
+ { "matchHostname", _JSON_VARIANT_TYPE_INVALID, NULL, 0, 0 },
+ { "iconName", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, icon_name), JSON_SAFE },
+ { "location", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, location), 0 },
+ { "shell", JSON_VARIANT_STRING, json_dispatch_filename_or_path, offsetof(UserRecord, shell), 0 },
+ { "umask", JSON_VARIANT_UNSIGNED, json_dispatch_umask, offsetof(UserRecord, umask), 0 },
+ { "environment", JSON_VARIANT_ARRAY, json_dispatch_environment, offsetof(UserRecord, environment), 0 },
+ { "timeZone", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, time_zone), JSON_SAFE },
+ { "preferredLanguage", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, preferred_language), JSON_SAFE },
+ { "niceLevel", _JSON_VARIANT_TYPE_INVALID, json_dispatch_nice, offsetof(UserRecord, nice_level), 0 },
+ { "resourceLimits", _JSON_VARIANT_TYPE_INVALID, json_dispatch_rlimits, offsetof(UserRecord, rlimits), 0 },
+ { "locked", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, locked), 0 },
+ { "notBeforeUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, not_before_usec), 0 },
+ { "notAfterUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, not_after_usec), 0 },
+ { "storage", JSON_VARIANT_STRING, json_dispatch_storage, offsetof(UserRecord, storage), 0 },
+ { "diskSize", JSON_VARIANT_UNSIGNED, json_dispatch_disk_size, offsetof(UserRecord, disk_size), 0 },
+ { "diskSizeRelative", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, disk_size_relative), 0 },
+ { "skeletonDirectory", JSON_VARIANT_STRING, json_dispatch_path, offsetof(UserRecord, skeleton_directory), 0 },
+ { "accessMode", JSON_VARIANT_UNSIGNED, json_dispatch_access_mode, offsetof(UserRecord, access_mode), 0 },
+ { "tasksMax", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, tasks_max), 0 },
+ { "memoryHigh", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, memory_high), 0 },
+ { "memoryMax", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, memory_max), 0 },
+ { "cpuWeight", JSON_VARIANT_UNSIGNED, json_dispatch_weight, offsetof(UserRecord, cpu_weight), 0 },
+ { "ioWeight", JSON_VARIANT_UNSIGNED, json_dispatch_weight, offsetof(UserRecord, io_weight), 0 },
+ { "mountNoDevices", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, nodev), 0 },
+ { "mountNoSuid", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, nosuid), 0 },
+ { "mountNoExecute", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, noexec), 0 },
+ { "cifsDomain", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_domain), JSON_SAFE },
+ { "cifsUserName", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_user_name), JSON_SAFE },
+ { "cifsService", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_service), JSON_SAFE },
+ { "imagePath", JSON_VARIANT_STRING, json_dispatch_path, offsetof(UserRecord, image_path), 0 },
+ { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(UserRecord, uid), 0 },
+ { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(UserRecord, gid), 0 },
+ { "memberOf", JSON_VARIANT_ARRAY, json_dispatch_user_group_list, offsetof(UserRecord, member_of), JSON_RELAX},
+ { "fileSystemType", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, file_system_type), JSON_SAFE },
+ { "partitionUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, partition_uuid), 0 },
+ { "luksUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, luks_uuid), 0 },
+ { "fileSystemUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, file_system_uuid), 0 },
+ { "luksDiscard", _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate, offsetof(UserRecord, luks_discard), 0, },
+ { "luksOfflineDiscard", _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate, offsetof(UserRecord, luks_offline_discard), 0, },
+ { "luksCipher", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_cipher), JSON_SAFE },
+ { "luksCipherMode", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_cipher_mode), JSON_SAFE },
+ { "luksVolumeKeySize", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_volume_key_size), 0 },
+ { "luksPbkdfHashAlgorithm", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_pbkdf_hash_algorithm), JSON_SAFE },
+ { "luksPbkdfType", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_pbkdf_type), JSON_SAFE },
+ { "luksPbkdfTimeCostUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_time_cost_usec), 0 },
+ { "luksPbkdfMemoryCost", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_memory_cost), 0 },
+ { "luksPbkdfParallelThreads", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_parallel_threads), 0 },
+ { "rateLimitIntervalUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, ratelimit_interval_usec), 0 },
+ { "rateLimitBurst", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, ratelimit_burst), 0 },
+ { "enforcePasswordPolicy", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, enforce_password_policy), 0 },
+ { "autoLogin", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, auto_login), 0 },
+ { "stopDelayUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, stop_delay_usec), 0 },
+ { "killProcesses", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, kill_processes), 0 },
+ { "passwordChangeMinUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_min_usec), 0 },
+ { "passwordChangeMaxUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_max_usec), 0 },
+ { "passwordChangeWarnUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_warn_usec), 0 },
+ { "passwordChangeInactiveUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_inactive_usec), 0 },
+ { "passwordChangeNow", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, password_change_now), 0 },
+ { "pkcs11TokenUri", JSON_VARIANT_ARRAY, dispatch_pkcs11_uri_array, offsetof(UserRecord, pkcs11_token_uri), 0 },
+ { "fido2HmacCredential", JSON_VARIANT_ARRAY, dispatch_fido2_hmac_credential_array, 0, 0 },
{},
};
int user_record_load(UserRecord *h, JsonVariant *v, UserRecordLoadFlags load_flags) {
static const JsonDispatch user_dispatch_table[] = {
- { "userName", JSON_VARIANT_STRING, json_dispatch_user_group_name, offsetof(UserRecord, user_name), JSON_RELAX},
- { "realm", JSON_VARIANT_STRING, json_dispatch_realm, offsetof(UserRecord, realm), 0 },
- { "realName", JSON_VARIANT_STRING, json_dispatch_gecos, offsetof(UserRecord, real_name), 0 },
- { "emailAddress", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, email_address), JSON_SAFE },
- { "iconName", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, icon_name), JSON_SAFE },
- { "location", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, location), 0 },
- { "disposition", JSON_VARIANT_STRING, json_dispatch_user_disposition, offsetof(UserRecord, disposition), 0 },
- { "lastChangeUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, last_change_usec), 0 },
- { "lastPasswordChangeUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, last_password_change_usec), 0 },
- { "shell", JSON_VARIANT_STRING, json_dispatch_filename_or_path, offsetof(UserRecord, shell), 0 },
- { "umask", JSON_VARIANT_UNSIGNED, json_dispatch_umask, offsetof(UserRecord, umask), 0 },
- { "environment", JSON_VARIANT_ARRAY, json_dispatch_environment, offsetof(UserRecord, environment), 0 },
- { "timeZone", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, time_zone), JSON_SAFE },
- { "preferredLanguage", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, preferred_language), JSON_SAFE },
- { "niceLevel", _JSON_VARIANT_TYPE_INVALID, json_dispatch_nice, offsetof(UserRecord, nice_level), 0 },
- { "resourceLimits", _JSON_VARIANT_TYPE_INVALID, json_dispatch_rlimits, offsetof(UserRecord, rlimits), 0 },
- { "locked", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, locked), 0 },
- { "notBeforeUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, not_before_usec), 0 },
- { "notAfterUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, not_after_usec), 0 },
- { "storage", JSON_VARIANT_STRING, json_dispatch_storage, offsetof(UserRecord, storage), 0 },
- { "diskSize", JSON_VARIANT_UNSIGNED, json_dispatch_disk_size, offsetof(UserRecord, disk_size), 0 },
- { "diskSizeRelative", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, disk_size_relative), 0 },
- { "skeletonDirectory", JSON_VARIANT_STRING, json_dispatch_path, offsetof(UserRecord, skeleton_directory), 0 },
- { "accessMode", JSON_VARIANT_UNSIGNED, json_dispatch_access_mode, offsetof(UserRecord, access_mode), 0 },
- { "tasksMax", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, tasks_max), 0 },
- { "memoryHigh", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, memory_high), 0 },
- { "memoryMax", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, memory_max), 0 },
- { "cpuWeight", JSON_VARIANT_UNSIGNED, json_dispatch_weight, offsetof(UserRecord, cpu_weight), 0 },
- { "ioWeight", JSON_VARIANT_UNSIGNED, json_dispatch_weight, offsetof(UserRecord, io_weight), 0 },
- { "mountNoDevices", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, nodev), 0 },
- { "mountNoSuid", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, nosuid), 0 },
- { "mountNoExecute", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, noexec), 0 },
- { "cifsDomain", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_domain), JSON_SAFE },
- { "cifsUserName", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_user_name), JSON_SAFE },
- { "cifsService", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_service), JSON_SAFE },
- { "imagePath", JSON_VARIANT_STRING, json_dispatch_path, offsetof(UserRecord, image_path), 0 },
- { "homeDirectory", JSON_VARIANT_STRING, json_dispatch_home_directory, offsetof(UserRecord, home_directory), 0 },
- { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(UserRecord, uid), 0 },
- { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(UserRecord, gid), 0 },
- { "memberOf", JSON_VARIANT_ARRAY, json_dispatch_user_group_list, offsetof(UserRecord, member_of), JSON_RELAX},
- { "fileSystemType", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, file_system_type), JSON_SAFE },
- { "partitionUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, partition_uuid), 0 },
- { "luksUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, luks_uuid), 0 },
- { "fileSystemUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, file_system_uuid), 0 },
- { "luksDiscard", _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate, offsetof(UserRecord, luks_discard), 0 },
+ { "userName", JSON_VARIANT_STRING, json_dispatch_user_group_name, offsetof(UserRecord, user_name), JSON_RELAX},
+ { "realm", JSON_VARIANT_STRING, json_dispatch_realm, offsetof(UserRecord, realm), 0 },
+ { "realName", JSON_VARIANT_STRING, json_dispatch_gecos, offsetof(UserRecord, real_name), 0 },
+ { "emailAddress", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, email_address), JSON_SAFE },
+ { "iconName", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, icon_name), JSON_SAFE },
+ { "location", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, location), 0 },
+ { "disposition", JSON_VARIANT_STRING, json_dispatch_user_disposition, offsetof(UserRecord, disposition), 0 },
+ { "lastChangeUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, last_change_usec), 0 },
+ { "lastPasswordChangeUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, last_password_change_usec), 0 },
+ { "shell", JSON_VARIANT_STRING, json_dispatch_filename_or_path, offsetof(UserRecord, shell), 0 },
+ { "umask", JSON_VARIANT_UNSIGNED, json_dispatch_umask, offsetof(UserRecord, umask), 0 },
+ { "environment", JSON_VARIANT_ARRAY, json_dispatch_environment, offsetof(UserRecord, environment), 0 },
+ { "timeZone", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, time_zone), JSON_SAFE },
+ { "preferredLanguage", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, preferred_language), JSON_SAFE },
+ { "niceLevel", _JSON_VARIANT_TYPE_INVALID, json_dispatch_nice, offsetof(UserRecord, nice_level), 0 },
+ { "resourceLimits", _JSON_VARIANT_TYPE_INVALID, json_dispatch_rlimits, offsetof(UserRecord, rlimits), 0 },
+ { "locked", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, locked), 0 },
+ { "notBeforeUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, not_before_usec), 0 },
+ { "notAfterUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, not_after_usec), 0 },
+ { "storage", JSON_VARIANT_STRING, json_dispatch_storage, offsetof(UserRecord, storage), 0 },
+ { "diskSize", JSON_VARIANT_UNSIGNED, json_dispatch_disk_size, offsetof(UserRecord, disk_size), 0 },
+ { "diskSizeRelative", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, disk_size_relative), 0 },
+ { "skeletonDirectory", JSON_VARIANT_STRING, json_dispatch_path, offsetof(UserRecord, skeleton_directory), 0 },
+ { "accessMode", JSON_VARIANT_UNSIGNED, json_dispatch_access_mode, offsetof(UserRecord, access_mode), 0 },
+ { "tasksMax", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, tasks_max), 0 },
+ { "memoryHigh", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, memory_high), 0 },
+ { "memoryMax", JSON_VARIANT_UNSIGNED, json_dispatch_tasks_or_memory_max, offsetof(UserRecord, memory_max), 0 },
+ { "cpuWeight", JSON_VARIANT_UNSIGNED, json_dispatch_weight, offsetof(UserRecord, cpu_weight), 0 },
+ { "ioWeight", JSON_VARIANT_UNSIGNED, json_dispatch_weight, offsetof(UserRecord, io_weight), 0 },
+ { "mountNoDevices", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, nodev), 0 },
+ { "mountNoSuid", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, nosuid), 0 },
+ { "mountNoExecute", JSON_VARIANT_BOOLEAN, json_dispatch_boolean, offsetof(UserRecord, noexec), 0 },
+ { "cifsDomain", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_domain), JSON_SAFE },
+ { "cifsUserName", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_user_name), JSON_SAFE },
+ { "cifsService", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, cifs_service), JSON_SAFE },
+ { "imagePath", JSON_VARIANT_STRING, json_dispatch_path, offsetof(UserRecord, image_path), 0 },
+ { "homeDirectory", JSON_VARIANT_STRING, json_dispatch_home_directory, offsetof(UserRecord, home_directory), 0 },
+ { "uid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(UserRecord, uid), 0 },
+ { "gid", JSON_VARIANT_UNSIGNED, json_dispatch_uid_gid, offsetof(UserRecord, gid), 0 },
+ { "memberOf", JSON_VARIANT_ARRAY, json_dispatch_user_group_list, offsetof(UserRecord, member_of), JSON_RELAX},
+ { "fileSystemType", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, file_system_type), JSON_SAFE },
+ { "partitionUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, partition_uuid), 0 },
+ { "luksUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, luks_uuid), 0 },
+ { "fileSystemUuid", JSON_VARIANT_STRING, json_dispatch_id128, offsetof(UserRecord, file_system_uuid), 0 },
+ { "luksDiscard", _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate, offsetof(UserRecord, luks_discard), 0 },
{ "luksOfflineDiscard", _JSON_VARIANT_TYPE_INVALID, json_dispatch_tristate, offsetof(UserRecord, luks_offline_discard), 0 },
- { "luksCipher", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_cipher), JSON_SAFE },
- { "luksCipherMode", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_cipher_mode), JSON_SAFE },
- { "luksVolumeKeySize", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_volume_key_size), 0 },
- { "luksPbkdfHashAlgorithm", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_pbkdf_hash_algorithm), JSON_SAFE },
- { "luksPbkdfType", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_pbkdf_type), JSON_SAFE },
- { "luksPbkdfTimeCostUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_time_cost_usec), 0 },
- { "luksPbkdfMemoryCost", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_memory_cost), 0 },
- { "luksPbkdfParallelThreads", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_parallel_threads), 0 },
- { "service", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, service), JSON_SAFE },
- { "rateLimitIntervalUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, ratelimit_interval_usec), 0 },
- { "rateLimitBurst", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, ratelimit_burst), 0 },
- { "enforcePasswordPolicy", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, enforce_password_policy), 0 },
- { "autoLogin", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, auto_login), 0 },
- { "stopDelayUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, stop_delay_usec), 0 },
- { "killProcesses", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, kill_processes), 0 },
- { "passwordChangeMinUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_min_usec), 0 },
- { "passwordChangeMaxUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_max_usec), 0 },
- { "passwordChangeWarnUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_warn_usec), 0 },
- { "passwordChangeInactiveUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_inactive_usec), 0 },
- { "passwordChangeNow", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, password_change_now), 0 },
- { "pkcs11TokenUri", JSON_VARIANT_ARRAY, dispatch_pkcs11_uri_array, offsetof(UserRecord, pkcs11_token_uri), 0 },
-
- { "secret", JSON_VARIANT_OBJECT, dispatch_secret, 0, 0 },
- { "privileged", JSON_VARIANT_OBJECT, dispatch_privileged, 0, 0 },
+ { "luksCipher", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_cipher), JSON_SAFE },
+ { "luksCipherMode", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_cipher_mode), JSON_SAFE },
+ { "luksVolumeKeySize", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_volume_key_size), 0 },
+ { "luksPbkdfHashAlgorithm", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_pbkdf_hash_algorithm), JSON_SAFE },
+ { "luksPbkdfType", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, luks_pbkdf_type), JSON_SAFE },
+ { "luksPbkdfTimeCostUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_time_cost_usec), 0 },
+ { "luksPbkdfMemoryCost", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_memory_cost), 0 },
+ { "luksPbkdfParallelThreads", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, luks_pbkdf_parallel_threads), 0 },
+ { "service", JSON_VARIANT_STRING, json_dispatch_string, offsetof(UserRecord, service), JSON_SAFE },
+ { "rateLimitIntervalUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, ratelimit_interval_usec), 0 },
+ { "rateLimitBurst", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, ratelimit_burst), 0 },
+ { "enforcePasswordPolicy", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, enforce_password_policy), 0 },
+ { "autoLogin", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, auto_login), 0 },
+ { "stopDelayUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, stop_delay_usec), 0 },
+ { "killProcesses", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, kill_processes), 0 },
+ { "passwordChangeMinUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_min_usec), 0 },
+ { "passwordChangeMaxUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_max_usec), 0 },
+ { "passwordChangeWarnUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_warn_usec), 0 },
+ { "passwordChangeInactiveUSec", JSON_VARIANT_UNSIGNED, json_dispatch_uint64, offsetof(UserRecord, password_change_inactive_usec), 0 },
+ { "passwordChangeNow", JSON_VARIANT_BOOLEAN, json_dispatch_tristate, offsetof(UserRecord, password_change_now), 0 },
+ { "pkcs11TokenUri", JSON_VARIANT_ARRAY, dispatch_pkcs11_uri_array, offsetof(UserRecord, pkcs11_token_uri), 0 },
+ { "fido2HmacCredential", JSON_VARIANT_ARRAY, dispatch_fido2_hmac_credential_array, 0, 0 },
+
+ { "secret", JSON_VARIANT_OBJECT, dispatch_secret, 0, 0 },
+ { "privileged", JSON_VARIANT_OBJECT, dispatch_privileged, 0, 0 },
/* Ignore the perMachine, binding, status stuff here, and process it later, so that it overrides whatever is set above */
- { "perMachine", JSON_VARIANT_ARRAY, NULL, 0, 0 },
- { "binding", JSON_VARIANT_OBJECT, NULL, 0, 0 },
- { "status", JSON_VARIANT_OBJECT, NULL, 0, 0 },
+ { "perMachine", JSON_VARIANT_ARRAY, NULL, 0, 0 },
+ { "binding", JSON_VARIANT_OBJECT, NULL, 0, 0 },
+ { "status", JSON_VARIANT_OBJECT, NULL, 0, 0 },
/* Ignore 'signature', we check it with explicit accessors instead */
- { "signature", JSON_VARIANT_ARRAY, NULL, 0, 0 },
+ { "signature", JSON_VARIANT_ARRAY, NULL, 0, 0 },
{},
};
if (h->n_pkcs11_encrypted_key > 0)
return true;
+ if (h->n_fido2_hmac_salt > 0)
+ return true;
+
return !strv_isempty(h->hashed_password);
}
char *hashed_password;
} Pkcs11EncryptedKey;
+typedef struct Fido2HmacCredential {
+ void *id;
+ size_t size;
+} Fido2HmacCredential;
+
+typedef struct Fido2HmacSalt {
+ /* The FIDO2 Cridential ID to use */
+ Fido2HmacCredential credential;
+
+ /* The FIDO2 salt value */
+ void *salt;
+ size_t salt_size;
+
+ /* What to test the hashed salt value against, usually UNIX password hash here. */
+ char *hashed_password;
+} Fido2HmacSalt;
+
typedef struct UserRecord {
/* The following three fields are not part of the JSON record */
unsigned n_ref;
char **hashed_password;
char **ssh_authorized_keys;
char **password;
- char **pkcs11_pin;
+ char **token_pin;
char *cifs_domain;
char *cifs_user_name;
size_t n_pkcs11_encrypted_key;
int pkcs11_protected_authentication_path_permitted;
+ Fido2HmacCredential *fido2_hmac_credential;
+ size_t n_fido2_hmac_credential;
+ Fido2HmacSalt *fido2_hmac_salt;
+ size_t n_fido2_hmac_salt;
+ int fido2_user_presence_permitted;
+
JsonVariant *json;
} UserRecord;
#include <sys/auxv.h>
#include "dirent-util.h"
+#include "dlfcn-util.h"
#include "errno-util.h"
#include "fd-util.h"
#include "group-record-nss.h"
bool nss_iterating:1;
bool synthesize_root:1;
bool synthesize_nobody:1;
+ bool nss_systemd_blocked:1;
int error;
- int nss_lock;
unsigned n_found;
sd_event *event;
UserRecord *found_user; /* when .what == LOOKUP_USER */
}
sd_event_unref(iterator->event);
- safe_close(iterator->nss_lock);
+
+ if (iterator->nss_systemd_blocked)
+ assert_se(userdb_block_nss_systemd(false) >= 0);
return mfree(iterator);
}
*i = (UserDBIterator) {
.what = what,
- .nss_lock = -1,
};
return i;
}
+static int userdb_iterator_block_nss_systemd(UserDBIterator *iterator) {
+ int r;
+
+ assert(iterator);
+
+ if (iterator->nss_systemd_blocked)
+ return 0;
+
+ r = userdb_block_nss_systemd(true);
+ if (r < 0)
+ return r;
+
+ iterator->nss_systemd_blocked = true;
+ return 1;
+}
+
struct user_group_data {
JsonVariant *record;
bool incomplete;
if (r < 0)
return log_debug_errno(r, "Failed to invoke varlink method: %m");
- r = set_ensure_allocated(&iterator->links, &link_hash_ops);
- if (r < 0)
- return log_debug_errno(r, "Failed to allocate set: %m");
-
- r = set_put(iterator->links, vl);
+ r = set_ensure_consume(&iterator->links, &link_hash_ops, TAKE_PTR(vl));
if (r < 0)
return log_debug_errno(r, "Failed to add varlink connection to set: %m");
-
- TAKE_PTR(vl);
return r;
}
return r;
}
- if (!FLAGS_SET(flags, USERDB_AVOID_NSS) && !(iterator && iterator->nss_covered)) {
- /* Make sure the NSS lookup doesn't recurse back to us. (EBUSY is fine here, it just means we
- * already took the lock from our thread, which is totally OK.) */
- r = userdb_nss_compat_disable();
- if (r >= 0 || r == -EBUSY) {
- iterator->nss_lock = r;
+ if (!FLAGS_SET(flags, USERDB_AVOID_NSS) && !iterator->nss_covered) {
+ /* Make sure the NSS lookup doesn't recurse back to us. */
+ r = userdb_iterator_block_nss_systemd(iterator);
+ if (r >= 0) {
/* Client-side NSS fallback */
r = nss_user_record_by_name(name, !FLAGS_SET(flags, USERDB_AVOID_SHADOW), ret);
if (r >= 0)
return r;
}
- if (!FLAGS_SET(flags, USERDB_AVOID_NSS) && !(iterator && iterator->nss_covered)) {
- r = userdb_nss_compat_disable();
- if (r >= 0 || r == -EBUSY) {
- iterator->nss_lock = r;
-
+ if (!FLAGS_SET(flags, USERDB_AVOID_NSS) && !iterator->nss_covered) {
+ r = userdb_iterator_block_nss_systemd(iterator);
+ if (r >= 0) {
/* Client-side NSS fallback */
r = nss_user_record_by_uid(uid, !FLAGS_SET(flags, USERDB_AVOID_SHADOW), ret);
if (r >= 0)
r = userdb_start_query(iterator, "io.systemd.UserDatabase.GetUserRecord", true, NULL, flags);
if (!FLAGS_SET(flags, USERDB_AVOID_NSS) && (r < 0 || !iterator->nss_covered)) {
- iterator->nss_lock = userdb_nss_compat_disable();
- if (iterator->nss_lock < 0 && iterator->nss_lock != -EBUSY)
- return iterator->nss_lock;
+ r = userdb_iterator_block_nss_systemd(iterator);
+ if (r < 0)
+ return r;
setpwent();
iterator->nss_iterating = true;
}
if (!FLAGS_SET(flags, USERDB_AVOID_NSS) && !(iterator && iterator->nss_covered)) {
- r = userdb_nss_compat_disable();
- if (r >= 0 || r == -EBUSY) {
- iterator->nss_lock = r;
-
+ r = userdb_iterator_block_nss_systemd(iterator);
+ if (r >= 0) {
r = nss_group_record_by_name(name, !FLAGS_SET(flags, USERDB_AVOID_SHADOW), ret);
if (r >= 0)
return r;
}
if (!FLAGS_SET(flags, USERDB_AVOID_NSS) && !(iterator && iterator->nss_covered)) {
- r = userdb_nss_compat_disable();
- if (r >= 0 || r == -EBUSY) {
- iterator->nss_lock = r;
-
+ r = userdb_iterator_block_nss_systemd(iterator);
+ if (r >= 0) {
r = nss_group_record_by_gid(gid, !FLAGS_SET(flags, USERDB_AVOID_SHADOW), ret);
if (r >= 0)
return r;
r = userdb_start_query(iterator, "io.systemd.UserDatabase.GetGroupRecord", true, NULL, flags);
if (!FLAGS_SET(flags, USERDB_AVOID_NSS) && (r < 0 || !iterator->nss_covered)) {
- iterator->nss_lock = userdb_nss_compat_disable();
- if (iterator->nss_lock < 0 && iterator->nss_lock != -EBUSY)
- return iterator->nss_lock;
+ r = userdb_iterator_block_nss_systemd(iterator);
+ if (r < 0)
+ return r;
setgrent();
iterator->nss_iterating = true;
if ((r >= 0 && iterator->nss_covered) || FLAGS_SET(flags, USERDB_AVOID_NSS))
goto finish;
- iterator->nss_lock = userdb_nss_compat_disable();
- if (iterator->nss_lock < 0 && iterator->nss_lock != -EBUSY)
- return iterator->nss_lock;
+ r = userdb_iterator_block_nss_systemd(iterator);
+ if (r < 0)
+ return r;
iterator->filter_user_name = strdup(name);
if (!iterator->filter_user_name)
if ((r >= 0 && iterator->nss_covered) || FLAGS_SET(flags, USERDB_AVOID_NSS))
goto finish;
- iterator->nss_lock = userdb_nss_compat_disable();
- if (iterator->nss_lock < 0 && iterator->nss_lock != -EBUSY)
- return iterator->nss_lock;
+ r = userdb_iterator_block_nss_systemd(iterator);
+ if (r < 0)
+ return r;
/* We ignore all errors here, since the group might be defined by a userdb native service, and we queried them already above. */
(void) nss_group_record_by_name(name, false, &gr);
if ((r >= 0 && iterator->nss_covered) || FLAGS_SET(flags, USERDB_AVOID_NSS))
goto finish;
- iterator->nss_lock = userdb_nss_compat_disable();
- if (iterator->nss_lock < 0 && iterator->nss_lock != -EBUSY)
- return iterator->nss_lock;
+ r = userdb_iterator_block_nss_systemd(iterator);
+ if (r < 0)
+ return r;
setgrent();
iterator->nss_iterating = true;
return 0;
}
-static int userdb_thread_sockaddr(struct sockaddr_un *ret_sa, socklen_t *ret_salen) {
- static const uint8_t
- k1[16] = { 0x35, 0xc1, 0x1f, 0x41, 0x59, 0xc6, 0xa0, 0xf9, 0x33, 0x4b, 0x17, 0x3d, 0xb9, 0xf6, 0x14, 0xd9 },
- k2[16] = { 0x6a, 0x11, 0x4c, 0x37, 0xe5, 0xa3, 0x8c, 0xa6, 0x93, 0x55, 0x64, 0x8c, 0x93, 0xee, 0xa1, 0x7b };
-
- struct siphash sh;
- uint64_t x, y;
- pid_t tid;
- void *p;
-
- assert(ret_sa);
- assert(ret_salen);
-
- /* This calculates an AF_UNIX socket address in the abstract namespace whose existence works as an
- * indicator whether to emulate NSS records for complex user records that are also available via the
- * varlink protocol. The name of the socket is picked in a way so that:
- *
- * → it is per-thread (by hashing from the TID)
- *
- * → is not guessable for foreign processes (by hashing from the — hopefully secret — AT_RANDOM
- * value every process gets passed from the kernel
- *
- * By using a socket the NSS emulation can be nicely turned off for limited amounts of time only,
- * simply controlled by the lifetime of the fd itself. By using an AF_UNIX socket in the abstract
- * namespace the lock is automatically cleaned up when the process dies abnormally.
- *
- */
-
- p = ULONG_TO_PTR(getauxval(AT_RANDOM));
- if (!p)
- return -EIO;
-
- tid = gettid();
-
- siphash24_init(&sh, k1);
- siphash24_compress(p, 16, &sh);
- siphash24_compress(&tid, sizeof(tid), &sh);
- x = siphash24_finalize(&sh);
-
- siphash24_init(&sh, k2);
- siphash24_compress(p, 16, &sh);
- siphash24_compress(&tid, sizeof(tid), &sh);
- y = siphash24_finalize(&sh);
-
- *ret_sa = (struct sockaddr_un) {
- .sun_family = AF_UNIX,
- };
-
- sprintf(ret_sa->sun_path + 1, "userdb-%016" PRIx64 "%016" PRIx64, x, y);
- *ret_salen = offsetof(struct sockaddr_un, sun_path) + 1 + 7 + 32;
-
- return 0;
-}
-
-int userdb_nss_compat_is_enabled(void) {
- _cleanup_close_ int fd = -1;
- union sockaddr_union sa;
- socklen_t salen;
- int r;
-
- /* Tests whether the NSS compatibility logic is currently turned on for the invoking thread. Returns
- * true if NSS compatibility is turned on, i.e. whether NSS records shall be synthesized from complex
- * user records. */
-
- r = userdb_thread_sockaddr(&sa.un, &salen);
- if (r < 0)
- return r;
-
- fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0);
- if (fd < 0)
- return -errno;
+int userdb_block_nss_systemd(int b) {
+ _cleanup_(dlclosep) void *dl = NULL;
+ int (*call)(bool b);
- /* Try to connect(). This doesn't do anything really, except that it checks whether the socket
- * address is bound at all. */
- if (connect(fd, &sa.sa, salen) < 0) {
- if (errno == ECONNREFUSED) /* the socket is not bound, hence NSS emulation shall be done */
- return true;
+ /* Note that we might be called from libnss_systemd.so.2 itself, but that should be fine, really. */
- return -errno;
+ dl = dlopen(ROOTLIBDIR "libnss_systemd.so.2", RTLD_LAZY|RTLD_NODELETE);
+ if (!dl) {
+ /* If the file isn't installed, don't complain loudly */
+ log_debug("Failed to dlopen(libnss_systemd.so.2), ignoring: %s", dlerror());
+ return 0;
}
- return false;
-}
-
-int userdb_nss_compat_disable(void) {
- _cleanup_close_ int fd = -1;
- union sockaddr_union sa;
- socklen_t salen;
- int r;
-
- /* Turn off the NSS compatibility logic for the invoking thread. By default NSS records are
- * synthesized for all complex user records looked up via NSS. If this call is invoked this is
- * disabled for the invoking thread, but only for it. A caller that natively supports the varlink
- * user record protocol may use that to turn off the compatibility for NSS lookups. */
-
- r = userdb_thread_sockaddr(&sa.un, &salen);
- if (r < 0)
- return r;
-
- fd = socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0);
- if (fd < 0)
- return -errno;
-
- if (bind(fd, &sa.sa, salen) < 0) {
- if (errno == EADDRINUSE) /* lock already taken, convert this into a recognizable error */
- return -EBUSY;
-
- return -errno;
- }
+ call = (int (*)(bool b)) dlsym(dl, "_nss_systemd_block");
+ if (!call)
+ /* If the file is is installed but lacks the symbol we expect, things are weird, let's complain */
+ return log_debug_errno(SYNTHETIC_ERRNO(ELIBBAD),
+ "Unable to find symbol _nss_systemd_block in libnss_systemd.so.2: %s", dlerror());
- return TAKE_FD(fd);
+ return call(b);
}
int membershipdb_iterator_get(UserDBIterator *iterator, char **user, char **group);
int membershipdb_by_group_strv(const char *name, UserDBFlags flags, char ***ret);
-int userdb_nss_compat_is_enabled(void);
-int userdb_nss_compat_disable(void);
+int userdb_block_nss_systemd(int b);
#include "utmp-wtmp.h"
int utmp_get_runlevel(int *runlevel, int *previous) {
+ _cleanup_(utxent_cleanup) bool utmpx = false;
struct utmpx *found, lookup = { .ut_type = RUN_LVL };
- int r;
const char *e;
assert(runlevel);
* precedence. Presumably, sysvinit does this to work around a
* race condition that would otherwise exist where we'd always
* go to disk and hence might read runlevel data that might be
- * very new and does not apply to the current script being
- * executed. */
+ * very new and not apply to the current script being executed. */
e = getenv("RUNLEVEL");
if (e && e[0] > 0) {
if (utmpxname(_PATH_UTMPX) < 0)
return -errno;
- setutxent();
+ utmpx = utxent_start();
found = getutxid(&lookup);
if (!found)
- r = -errno;
- else {
- int a, b;
-
- a = found->ut_pid & 0xFF;
- b = (found->ut_pid >> 8) & 0xFF;
-
- *runlevel = a;
- if (previous)
- *previous = b;
-
- r = 0;
- }
+ return -errno;
- endutxent();
+ *runlevel = found->ut_pid & 0xFF;
+ if (previous)
+ *previous = (found->ut_pid >> 8) & 0xFF;
- return r;
+ return 0;
}
static void init_timestamp(struct utmpx *store, usec_t t) {
}
static int write_entry_utmp(const struct utmpx *store) {
- int r;
+ _cleanup_(utxent_cleanup) bool utmpx = false;
assert(store);
if (utmpxname(_PATH_UTMPX) < 0)
return -errno;
- setutxent();
-
- if (!pututxline(store))
- r = -errno;
- else
- r = 0;
-
- endutxent();
+ utmpx = utxent_start();
- return r;
+ if (pututxline(store))
+ return 0;
+ if (errno == ENOENT) {
+ /* If utmp/wtmp have been disabled, that's a good thing, hence ignore the error. */
+ log_debug_errno(errno, "Not writing utmp: %m");
+ return 0;
+ }
+ return -errno;
}
static int write_entry_wtmp(const struct utmpx *store) {
assert(store);
/* wtmp is a simple append-only file where each entry is
- simply appended to the end; i.e. basically a log. */
+ * simply appended to the end; i.e. basically a log. */
errno = 0;
updwtmpx(_PATH_WTMPX, store);
+ if (errno == ENOENT) {
+ /* If utmp/wtmp have been disabled, that's a good thing, hence ignore the error. */
+ log_debug_errno(errno, "Not writing wtmp: %m");
+ return 0;
+ }
+ if (errno == EROFS) {
+ log_warning_errno(errno, "Failed to write wtmp record, ignoring: %m");
+ return 0;
+ }
return -errno;
}
r = write_entry_utmp(store_utmp);
s = write_entry_wtmp(store_wtmp);
-
- if (r >= 0)
- r = s;
-
- /* If utmp/wtmp have been disabled, that's a good thing, hence
- * ignore the errors */
- if (r == -ENOENT)
- r = 0;
-
- return r;
+ return r < 0 ? r : s;
}
static int write_entry_both(const struct utmpx *store) {
#include "util.h"
#if ENABLE_UTMP
+#include <utmpx.h>
+
int utmp_get_runlevel(int *runlevel, int *previous);
int utmp_put_shutdown(void);
bool (*match_tty)(const char *tty, void *userdata),
void *userdata);
+static inline bool utxent_start(void) {
+ setutxent();
+ return true;
+}
+static inline void utxent_cleanup(bool *initialized) {
+ if (initialized)
+ endutxent();
+}
+
#else /* ENABLE_UTMP */
static inline int utmp_get_runlevel(int *runlevel, int *previous) {
static int varlink_test_disconnect(Varlink *v) {
assert(v);
- /* Tests whether we the the connection has been terminated. We are careful to not stop processing it
+ /* Tests whether we the connection has been terminated. We are careful to not stop processing it
* prematurely, since we want to handle half-open connections as well as possible and want to flush
* out and read data before we close down if we can. */
return 0;
}
- return log_debug_errno(errno, "/sys/power/resume_offset not writeable: %m");
+ return log_debug_errno(errno, "/sys/power/resume_offset not writable: %m");
}
xsprintf(offset_str, "%" PRIu64, hibernate_location->offset);
log_warning_errno(r, "Unable to disable idle timer, continuing: %m");
}
- r = set_ensure_allocated(&context->connections, NULL);
- if (r < 0) {
- log_oom();
- return 0;
- }
-
- c = new0(Connection, 1);
+ c = new(Connection, 1);
if (!c) {
log_oom();
return 0;
}
- c->context = context;
- c->server_fd = fd;
- c->client_fd = -1;
- c->server_to_client_buffer[0] = c->server_to_client_buffer[1] = -1;
- c->client_to_server_buffer[0] = c->client_to_server_buffer[1] = -1;
+ *c = (Connection) {
+ .context = context,
+ .server_fd = fd,
+ .client_fd = -1,
+ .server_to_client_buffer = {-1, -1},
+ .client_to_server_buffer = {-1, -1},
+ };
- r = set_put(context->connections, c);
+ r = set_ensure_put(&context->connections, NULL, c);
if (r < 0) {
free(c);
log_oom();
assert(context);
assert(fd >= 0);
- r = set_ensure_allocated(&context->listen, NULL);
- if (r < 0) {
- log_oom();
- return r;
- }
-
r = sd_is_socket(fd, 0, SOCK_STREAM, 1);
if (r < 0)
return log_error_errno(r, "Failed to determine socket type: %m");
if (r < 0)
return log_error_errno(r, "Failed to add event source: %m");
- r = set_put(context->listen, source);
+ r = set_ensure_put(&context->listen, NULL, source);
if (r < 0) {
log_error_errno(r, "Failed to add source to set: %m");
sd_event_source_unref(source);
#include "bootspec.h"
#include "bus-common-errors.h"
#include "bus-error.h"
+#include "bus-locator.h"
+#include "bus-map-properties.h"
#include "bus-message.h"
+#include "bus-print-properties.h"
#include "bus-unit-procs.h"
#include "bus-unit-util.h"
-#include "bus-util.h"
#include "bus-wait-for-jobs.h"
#include "bus-wait-for-units.h"
#include "cgroup-show.h"
else
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
return 0;
}
} else if (STR_IN_SET(name, "SystemCallFilter", "RestrictAddressFamilies")) {
_cleanup_strv_free_ char **l = NULL;
- int whitelist;
+ int allow_list;
r = sd_bus_message_enter_container(m, 'r', "bas");
if (r < 0)
return bus_log_parse_error(r);
- r = sd_bus_message_read(m, "b", &whitelist);
+ r = sd_bus_message_read(m, "b", &allow_list);
if (r < 0)
return bus_log_parse_error(r);
if (r < 0)
return bus_log_parse_error(r);
- if (all || whitelist || !strv_isempty(l)) {
+ if (all || allow_list || !strv_isempty(l)) {
bool first = true;
char **i;
fputc('=', stdout);
}
- if (!whitelist)
+ if (!allow_list)
fputc('~', stdout);
STRV_FOREACH(i, l) {
return 1;
- } else if (contents[0] == SD_BUS_TYPE_BYTE && streq(name, "StandardInputData")) {
+ } else if (contents[0] == SD_BUS_TYPE_BYTE && STR_IN_SET(name, "StandardInputData", "RootHashSignature")) {
_cleanup_free_ char *h = NULL;
const void *p;
size_t sz;
int r;
setlocale(LC_ALL, "");
- log_parse_environment();
+ log_parse_environment_cli();
log_open();
/* The journal merging logic potentially needs a lot of fds. */
int sd_lldp_neighbor_get_system_capabilities(sd_lldp_neighbor *n, uint16_t *ret);
int sd_lldp_neighbor_get_enabled_capabilities(sd_lldp_neighbor *n, uint16_t *ret);
-/* Low-level, iterative TLV access. This is for evertyhing else, it iteratively goes through all available TLVs
+/* Low-level, iterative TLV access. This is for everything else, it iteratively goes through all available TLVs
* (including the ones covered with the calls above), and allows multiple TLVs for the same fields. */
int sd_lldp_neighbor_tlv_rewind(sd_lldp_neighbor *n);
int sd_lldp_neighbor_tlv_next(sd_lldp_neighbor *n);
#define SD_MESSAGE_MOUNT_POINT_PATH_NOT_SUITABLE_STR \
SD_ID128_MAKE_STR(1b,3b,b9,40,37,f0,4b,bf,81,02,8e,13,5a,12,d2,93)
+#define SD_MESSAGE_NOBODY_USER_UNSUITABLE SD_ID128_MAKE(b4,80,32,5f,9c,39,4a,7b,80,2c,23,1e,51,a2,75,2c)
+#define SD_MESSAGE_NOBODY_USER_UNSUITABLE_STR \
+ SD_ID128_MAKE_STR(b4,80,32,5f,9c,39,4a,7b,80,2c,23,1e,51,a2,75,2c)
+
_SD_END_DECLARATIONS;
#endif
* IP addresses */
int sd_network_link_get_dns(int ifindex, char ***ret);
-/* Get DHCP4 address for a given link. This is string representations of
- * IPv4 address */
-int sd_network_link_get_dhcp4_address(int ifindex, char **ret);
-
/* Get NTP entries for a given link. These are domain names or string
* representations of IP addresses */
int sd_network_link_get_ntp(int ifindex, char ***ret);
/* Get the CARRIERS that are bound to current link. */
int sd_network_link_get_carrier_bound_by(int ifindex, int **ifindexes);
-/* Get the timezone that was learnt on a specific link. */
-int sd_network_link_get_timezone(int ifindex, char **timezone);
-
-/* Get DHCPv4 client id for a given link. */
-int sd_network_link_get_dhcp4_client_id_string(int ifindex, char **client_id);
-
/* Get DHCPv6 client IAID for a given link. */
int sd_network_link_get_dhcp6_client_iaid_string(int ifindex, char **iaid);
r = mac_selinux_init();
if (r < 0)
- return log_error_errno(r, "SELinux setup failed: %m");
+ return r;
/* If command line arguments are specified along with --replace, read all
* configuration files and insert the positional arguments at the specified
Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {};
_cleanup_strv_free_ char **sysvrcnd_path = NULL;
SysvStub *service;
- unsigned i;
Iterator j;
char **p;
int r;
if (r < 0)
return r;
- STRV_FOREACH(p, sysvrcnd_path) {
- for (i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
-
+ STRV_FOREACH(p, sysvrcnd_path)
+ for (unsigned i = 0; i < ELEMENTSOF(rcnd_table); i ++) {
_cleanup_closedir_ DIR *d = NULL;
_cleanup_free_ char *path = NULL;
struct dirent *de;
service->sysv_start_priority = MAX(a*10 + b, service->sysv_start_priority);
- r = set_ensure_allocated(&runlevel_services[i], NULL);
- if (r < 0) {
- log_oom();
- goto finish;
- }
-
- r = set_put(runlevel_services[i], service);
+ r = set_ensure_put(&runlevel_services[i], NULL, service);
if (r < 0) {
log_oom();
goto finish;
}
}
}
- }
- for (i = 0; i < ELEMENTSOF(rcnd_table); i ++)
+ for (unsigned i = 0; i < ELEMENTSOF(rcnd_table); i++)
SET_FOREACH(service, runlevel_services[i], j) {
r = strv_extend(&service->before, rcnd_table[i].target);
if (r < 0) {
r = 0;
finish:
- for (i = 0; i < ELEMENTSOF(rcnd_table); i++)
+ for (unsigned i = 0; i < ELEMENTSOF(rcnd_table); i++)
set_free(runlevel_services[i]);
return r;
r = bpf_devices_cgroup_init(&prog, CGROUP_DEVICE_POLICY_CLOSED, true);
assert_se(r >= 0);
- r = bpf_devices_whitelist_static(prog, cgroup_path);
+ r = bpf_devices_allow_list_static(prog, cgroup_path);
assert_se(r >= 0);
r = bpf_devices_apply_policy(prog, CGROUP_DEVICE_POLICY_CLOSED, true, cgroup_path, installed_prog);
r = bpf_devices_cgroup_init(&prog, CGROUP_DEVICE_POLICY_STRICT, true);
assert_se(r >= 0);
- r = bpf_devices_whitelist_device(prog, cgroup_path, "/dev/null", "rw");
+ r = bpf_devices_allow_list_device(prog, cgroup_path, "/dev/null", "rw");
assert_se(r >= 0);
- r = bpf_devices_whitelist_device(prog, cgroup_path, "/dev/random", "r");
+ r = bpf_devices_allow_list_device(prog, cgroup_path, "/dev/random", "r");
assert_se(r >= 0);
- r = bpf_devices_whitelist_device(prog, cgroup_path, "/dev/zero", "w");
+ r = bpf_devices_allow_list_device(prog, cgroup_path, "/dev/zero", "w");
assert_se(r >= 0);
r = bpf_devices_apply_policy(prog, CGROUP_DEVICE_POLICY_STRICT, true, cgroup_path, installed_prog);
assert_se(wrong == 0);
}
-static void test_policy_whitelist_major(const char *pattern, const char *cgroup_path, BPFProgram **installed_prog) {
+static void test_policy_allow_list_major(const char *pattern, const char *cgroup_path, BPFProgram **installed_prog) {
_cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
unsigned wrong = 0;
int r;
r = bpf_devices_cgroup_init(&prog, CGROUP_DEVICE_POLICY_STRICT, true);
assert_se(r >= 0);
- r = bpf_devices_whitelist_major(prog, cgroup_path, pattern, 'c', "rw");
+ r = bpf_devices_allow_list_major(prog, cgroup_path, pattern, 'c', "rw");
assert_se(r >= 0);
r = bpf_devices_apply_policy(prog, CGROUP_DEVICE_POLICY_STRICT, true, cgroup_path, installed_prog);
assert_se(wrong == 0);
}
-static void test_policy_whitelist_major_star(char type, const char *cgroup_path, BPFProgram **installed_prog) {
+static void test_policy_allow_list_major_star(char type, const char *cgroup_path, BPFProgram **installed_prog) {
_cleanup_(bpf_program_unrefp) BPFProgram *prog = NULL;
unsigned wrong = 0;
int r;
r = bpf_devices_cgroup_init(&prog, CGROUP_DEVICE_POLICY_STRICT, true);
assert_se(r >= 0);
- r = bpf_devices_whitelist_major(prog, cgroup_path, "*", type, "rw");
+ r = bpf_devices_allow_list_major(prog, cgroup_path, "*", type, "rw");
assert_se(r >= 0);
r = bpf_devices_apply_policy(prog, CGROUP_DEVICE_POLICY_STRICT, true, cgroup_path, installed_prog);
assert_se(r >= 0);
if (add_mismatched) {
- r = bpf_devices_whitelist_major(prog, cgroup_path, "foobarxxx", 'c', "rw");
+ r = bpf_devices_allow_list_major(prog, cgroup_path, "foobarxxx", 'c', "rw");
assert_se(r < 0);
}
test_policy_closed(cgroup, &prog);
test_policy_strict(cgroup, &prog);
- test_policy_whitelist_major("mem", cgroup, &prog);
- test_policy_whitelist_major("1", cgroup, &prog);
+ test_policy_allow_list_major("mem", cgroup, &prog);
+ test_policy_allow_list_major("1", cgroup, &prog);
- test_policy_whitelist_major_star('c', cgroup, &prog);
- test_policy_whitelist_major_star('b', cgroup, &prog);
+ test_policy_allow_list_major_star('c', cgroup, &prog);
+ test_policy_allow_list_major_star('b', cgroup, &prog);
test_policy_empty(false, cgroup, &prog);
test_policy_empty(true, cgroup, &prog);
static int run(int argc, char **argv) {
int r;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
test(__func__, m, "exec-restrictnamespaces-no.service", can_unshare ? 0 : EXIT_FAILURE, CLD_EXITED);
test(__func__, m, "exec-restrictnamespaces-yes.service", 1, CLD_EXITED);
test(__func__, m, "exec-restrictnamespaces-mnt.service", can_unshare ? 0 : EXIT_FAILURE, CLD_EXITED);
- test(__func__, m, "exec-restrictnamespaces-mnt-blacklist.service", 1, CLD_EXITED);
+ test(__func__, m, "exec-restrictnamespaces-mnt-deny-list.service", 1, CLD_EXITED);
test(__func__, m, "exec-restrictnamespaces-merge-and.service", can_unshare ? 0 : EXIT_FAILURE, CLD_EXITED);
test(__func__, m, "exec-restrictnamespaces-merge-or.service", can_unshare ? 0 : EXIT_FAILURE, CLD_EXITED);
test(__func__, m, "exec-restrictnamespaces-merge-all.service", can_unshare ? 0 : EXIT_FAILURE, CLD_EXITED);
#include "alloc-util.h"
#include "fileio.h"
+#include "fs-util.h"
#include "install.h"
#include "mkdir.h"
#include "rm-rf.h"
assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", NULL) == -ENOENT);
assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", NULL) == -ENOENT);
assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", NULL) == -ENOENT);
+ assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) == -ENOENT);
p = strjoina(root, "/usr/lib/systemd/system/a.service");
assert_se(write_string_file(p,
assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS);
+
+ /* Test masking with relative symlinks */
+
+ p = strjoina(root, "/usr/lib/systemd/system/e.service");
+ assert_se(symlink("../../../../../../dev/null", p) >= 0);
+
+ assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) >= 0);
+ assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+
+ assert_se(unlink(p) == 0);
+ assert_se(symlink("/usr/../dev/null", p) >= 0);
+
+ assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) >= 0);
+ assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED);
+
+ assert_se(unlink(p) == 0);
}
static void test_linked_units(const char *root) {
#include "tmpfile-util.h"
#include "user-util.h"
+/* Nontrivial value serves as a placeholder to check that parsing function (didn't) change it */
+#define CGROUP_LIMIT_DUMMY 3
+
static int test_unit_file_get_set(void) {
int r;
Hashmap *h;
unit_dump_config_items(stdout);
}
+static void test_config_parse_memory_limit(void) {
+ /* int config_parse_memory_limit(
+ 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) */
+ CGroupContext c;
+ struct limit_test {
+ const char *limit;
+ const char *value;
+ uint64_t *result;
+ uint64_t expected;
+ } limit_tests[]= {
+ { "MemoryMin", "", &c.memory_min, CGROUP_LIMIT_MIN },
+ { "MemoryMin", "0", &c.memory_min, CGROUP_LIMIT_MIN },
+ { "MemoryMin", "10", &c.memory_min, 10 },
+ { "MemoryMin", "infinity", &c.memory_min, CGROUP_LIMIT_MAX },
+ { "MemoryLow", "", &c.memory_low, CGROUP_LIMIT_MIN },
+ { "MemoryLow", "0", &c.memory_low, CGROUP_LIMIT_MIN },
+ { "MemoryLow", "10", &c.memory_low, 10 },
+ { "MemoryLow", "infinity", &c.memory_low, CGROUP_LIMIT_MAX },
+ { "MemoryHigh", "", &c.memory_high, CGROUP_LIMIT_MAX },
+ { "MemoryHigh", "0", &c.memory_high, CGROUP_LIMIT_DUMMY },
+ { "MemoryHigh", "10", &c.memory_high, 10 },
+ { "MemoryHigh", "infinity", &c.memory_high, CGROUP_LIMIT_MAX },
+ { "MemoryMax", "", &c.memory_max, CGROUP_LIMIT_MAX },
+ { "MemoryMax", "0", &c.memory_max, CGROUP_LIMIT_DUMMY },
+ { "MemoryMax", "10", &c.memory_max, 10 },
+ { "MemoryMax", "infinity", &c.memory_max, CGROUP_LIMIT_MAX },
+ };
+ size_t i;
+ int r;
+
+ for (i = 0; i < ELEMENTSOF(limit_tests); i++) {
+ c.memory_min = CGROUP_LIMIT_DUMMY;
+ c.memory_low = CGROUP_LIMIT_DUMMY;
+ c.memory_high = CGROUP_LIMIT_DUMMY;
+ c.memory_max = CGROUP_LIMIT_DUMMY;
+ r = config_parse_memory_limit(NULL, "fake", 1, "section", 1,
+ limit_tests[i].limit, 1,
+ limit_tests[i].value, &c, NULL);
+ log_info("%s=%s\t%"PRIu64"==%"PRIu64"\n",
+ limit_tests[i].limit, limit_tests[i].value,
+ *limit_tests[i].result, limit_tests[i].expected);
+ assert_se(r >= 0);
+ assert_se(*limit_tests[i].result == limit_tests[i].expected);
+ }
+
+}
+
int main(int argc, char *argv[]) {
_cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
int r;
test_config_parse_pass_environ();
TEST_REQ_RUNNING_SYSTEMD(test_install_printf());
test_unit_dump_config_items();
+ test_config_parse_memory_limit();
return r;
}
#define dump_glyph(x) log_info(STRINGIFY(x) ": %s", special_glyph(x))
static void dump_special_glyphs(void) {
- assert_cc(SPECIAL_GLYPH_LOCK_AND_KEY + 1 == _SPECIAL_GLYPH_MAX);
+ assert_cc(SPECIAL_GLYPH_TOUCH + 1 == _SPECIAL_GLYPH_MAX);
log_info("/* %s */", __func__);
dump_glyph(SPECIAL_GLYPH_UNHAPPY_SMILEY);
dump_glyph(SPECIAL_GLYPH_DEPRESSED_SMILEY);
dump_glyph(SPECIAL_GLYPH_LOCK_AND_KEY);
+ dump_glyph(SPECIAL_GLYPH_TOUCH);
}
int main(int argc, char *argv[]) {
NULL,
NULL,
0,
+ NULL,
+ NULL,
+ 0,
NULL);
assert_se(r == 0);
NULL,
NULL,
0,
+ NULL,
+ NULL,
+ 0,
NULL);
if (r < 0) {
log_error_errno(r, "Failed to set up namespace: %m");
manager_free(m);
}
-static void check_stop_unlink(Manager *m, Unit *unit, const char *test_path, const char *service_name) {
+static Service *service_for_path(Manager *m, Path *path, const char *service_name) {
_cleanup_free_ char *tmp = NULL;
Unit *service_unit = NULL;
- Service *service = NULL;
- usec_t ts;
- usec_t timeout = 2 * USEC_PER_SEC;
assert_se(m);
- assert_se(unit);
- assert_se(test_path);
+ assert_se(path);
if (!service_name) {
- assert_se(tmp = strreplace(unit->id, ".path", ".service"));
+ assert_se(tmp = strreplace(UNIT(path)->id, ".path", ".service"));
service_unit = manager_get_unit(m, tmp);
} else
service_unit = manager_get_unit(m, service_name);
assert_se(service_unit);
- service = SERVICE(service_unit);
+
+ return SERVICE(service_unit);
+}
+
+static void check_states(Manager *m, Path *path, Service *service, PathState path_state, ServiceState service_state) {
+ usec_t ts;
+ usec_t timeout = 2 * USEC_PER_SEC;
+
+ assert_se(m);
+ assert_se(service);
ts = now(CLOCK_MONOTONIC);
- /* We process events until the service related to the path has been successfully started */
- while (service->result != SERVICE_SUCCESS || service->state != SERVICE_START) {
+
+ while (path->result != PATH_SUCCESS || service->result != SERVICE_SUCCESS ||
+ path->state != path_state || service->state != service_state) {
usec_t n;
int r;
assert_se(r >= 0);
printf("%s: state = %s; result = %s \n",
- service_unit->id,
+ UNIT(path)->id,
+ path_state_to_string(path->state),
+ path_result_to_string(path->result));
+ printf("%s: state = %s; result = %s \n",
+ UNIT(service)->id,
service_state_to_string(service->state),
service_result_to_string(service->result));
- /* But we timeout if the service has not been started in the allocated time */
n = now(CLOCK_MONOTONIC);
if (ts + timeout < n) {
- log_error("Test timeout when testing %s", unit->id);
+ log_error("Test timeout when testing %s", UNIT(path)->id);
exit(EXIT_FAILURE);
}
}
-
- assert_se(unit_stop(unit) >= 0);
- (void) rm_rf(test_path, REMOVE_ROOT|REMOVE_PHYSICAL);
}
static void test_path_exists(Manager *m) {
const char *test_path = "/tmp/test-path_exists";
Unit *unit = NULL;
+ Path *path = NULL;
+ Service *service = NULL;
assert_se(m);
assert_se(manager_load_startable_unit_or_warn(m, "path-exists.path", NULL, &unit) >= 0);
+
+ path = PATH(unit);
+ service = service_for_path(m, path, NULL);
+
assert_se(unit_start(unit) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
assert_se(touch(test_path) >= 0);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
+
+ /* Service restarts if file still exists */
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
+
+ assert_se(rm_rf(test_path, REMOVE_ROOT|REMOVE_PHYSICAL) == 0);
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
- check_stop_unlink(m, unit, test_path, NULL);
+ assert_se(unit_stop(unit) >= 0);
}
static void test_path_existsglob(Manager *m) {
const char *test_path = "/tmp/test-path_existsglobFOOBAR";
Unit *unit = NULL;
+ Path *path = NULL;
+ Service *service = NULL;
assert_se(m);
+
assert_se(manager_load_startable_unit_or_warn(m, "path-existsglob.path", NULL, &unit) >= 0);
+
+ path = PATH(unit);
+ service = service_for_path(m, path, NULL);
+
assert_se(unit_start(unit) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
assert_se(touch(test_path) >= 0);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
+
+ /* Service restarts if file still exists */
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
- check_stop_unlink(m, unit, test_path, NULL);
+ assert_se(rm_rf(test_path, REMOVE_ROOT|REMOVE_PHYSICAL) == 0);
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
+
+ assert_se(unit_stop(unit) >= 0);
}
static void test_path_changed(Manager *m) {
const char *test_path = "/tmp/test-path_changed";
FILE *f;
Unit *unit = NULL;
+ Path *path = NULL;
+ Service *service = NULL;
assert_se(m);
- assert_se(touch(test_path) >= 0);
-
assert_se(manager_load_startable_unit_or_warn(m, "path-changed.path", NULL, &unit) >= 0);
+
+ path = PATH(unit);
+ service = service_for_path(m, path, NULL);
+
assert_se(unit_start(unit) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
+
+ assert_se(touch(test_path) >= 0);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
+
+ /* Service does not restart if file still exists */
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
f = fopen(test_path, "w");
assert_se(f);
fclose(f);
- check_stop_unlink(m, unit, test_path, NULL);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
+
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
+
+ (void) rm_rf(test_path, REMOVE_ROOT|REMOVE_PHYSICAL);
+ assert_se(unit_stop(unit) >= 0);
}
static void test_path_modified(Manager *m) {
_cleanup_fclose_ FILE *f = NULL;
const char *test_path = "/tmp/test-path_modified";
Unit *unit = NULL;
+ Path *path = NULL;
+ Service *service = NULL;
assert_se(m);
- assert_se(touch(test_path) >= 0);
-
assert_se(manager_load_startable_unit_or_warn(m, "path-modified.path", NULL, &unit) >= 0);
+
+ path = PATH(unit);
+ service = service_for_path(m, path, NULL);
+
assert_se(unit_start(unit) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
+
+ assert_se(touch(test_path) >= 0);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
+
+ /* Service does not restart if file still exists */
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
f = fopen(test_path, "w");
assert_se(f);
fputs("test", f);
- check_stop_unlink(m, unit, test_path, NULL);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
+
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
+
+ (void) rm_rf(test_path, REMOVE_ROOT|REMOVE_PHYSICAL);
+ assert_se(unit_stop(unit) >= 0);
}
static void test_path_unit(Manager *m) {
const char *test_path = "/tmp/test-path_unit";
Unit *unit = NULL;
+ Path *path = NULL;
+ Service *service = NULL;
assert_se(m);
assert_se(manager_load_startable_unit_or_warn(m, "path-unit.path", NULL, &unit) >= 0);
+
+ path = PATH(unit);
+ service = service_for_path(m, path, "path-mycustomunit.service");
+
assert_se(unit_start(unit) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
assert_se(touch(test_path) >= 0);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
+
+ assert_se(rm_rf(test_path, REMOVE_ROOT|REMOVE_PHYSICAL) == 0);
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
- check_stop_unlink(m, unit, test_path, "path-mycustomunit.service");
+ assert_se(unit_stop(unit) >= 0);
}
static void test_path_directorynotempty(Manager *m) {
const char *test_path = "/tmp/test-path_directorynotempty/";
Unit *unit = NULL;
+ Path *path = NULL;
+ Service *service = NULL;
assert_se(m);
+ assert_se(manager_load_startable_unit_or_warn(m, "path-directorynotempty.path", NULL, &unit) >= 0);
+
+ path = PATH(unit);
+ service = service_for_path(m, path, NULL);
+
assert_se(access(test_path, F_OK) < 0);
- assert_se(manager_load_startable_unit_or_warn(m, "path-directorynotempty.path", NULL, &unit) >= 0);
assert_se(unit_start(unit) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
/* MakeDirectory default to no */
assert_se(access(test_path, F_OK) < 0);
assert_se(mkdir_p(test_path, 0755) >= 0);
assert_se(touch(strjoina(test_path, "test_file")) >= 0);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
+
+ /* Service restarts if directory is still not empty */
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_RUNNING, SERVICE_RUNNING);
+
+ assert_se(rm_rf(test_path, REMOVE_ROOT|REMOVE_PHYSICAL) == 0);
+ assert_se(unit_stop(UNIT(service)) >= 0);
+ check_states(m, path, service, PATH_WAITING, SERVICE_DEAD);
- check_stop_unlink(m, unit, test_path, NULL);
+ assert_se(unit_stop(unit) >= 0);
}
static void test_path_makedirectory_directorymode(Manager *m) {
assert_se(m);
+ assert_se(manager_load_startable_unit_or_warn(m, "path-makedirectory.path", NULL, &unit) >= 0);
+
assert_se(access(test_path, F_OK) < 0);
- assert_se(manager_load_startable_unit_or_warn(m, "path-makedirectory.path", NULL, &unit) >= 0);
assert_se(unit_start(unit) >= 0);
/* Check if the directory has been created */
q = getpriority(PRIO_PROCESS, 0);
assert_se(errno == 0 && p == q);
- /* It should also be possible to to set the nice level to one higher */
+ /* It should also be possible to set the nice level to one higher */
if (p < PRIO_MAX-1) {
assert_se(setpriority_closest(++p) > 0);
assert_se(errno == 0 && p == q);
}
- /* It should also be possible to to set the nice level to two higher */
+ /* It should also be possible to set the nice level to two higher */
if (p < PRIO_MAX-1) {
assert_se(setpriority_closest(++p) > 0);
if (pid == 0) { /* Child? */
int fd;
- /* If we look at the default set (or one that includes it), whitelist instead of blacklist */
+ /* If we look at the default set (or one that includes it), allow-list instead of deny-list */
if (IN_SET(i, SYSCALL_FILTER_SET_DEFAULT, SYSCALL_FILTER_SET_SYSTEM_SERVICE))
r = seccomp_load_syscall_filter_set(SCMP_ACT_ERRNO(EUCLEAN), syscall_filter_sets + i, SCMP_ACT_ALLOW, true);
else
assert_se(set_size(m) == 3);
}
+static void test_set_ensure_allocated(void) {
+ _cleanup_set_free_ Set *m = NULL;
+
+ assert_se(set_ensure_allocated(&m, &string_hash_ops) == 1);
+ assert_se(set_ensure_allocated(&m, &string_hash_ops) == 0);
+ assert_se(set_ensure_allocated(&m, NULL) == 0);
+ assert_se(set_size(m) == 0);
+}
+
+static void test_set_ensure_put(void) {
+ _cleanup_set_free_ Set *m = NULL;
+
+ assert_se(set_ensure_put(&m, &string_hash_ops, "a") == 1);
+ assert_se(set_ensure_put(&m, &string_hash_ops, "a") == 0);
+ assert_se(set_ensure_put(&m, NULL, "a") == 0);
+ assert_se(set_ensure_put(&m, &string_hash_ops, "b") == 1);
+ assert_se(set_ensure_put(&m, &string_hash_ops, "b") == 0);
+ assert_se(set_ensure_put(&m, &string_hash_ops, "a") == 0);
+ assert_se(set_size(m) == 2);
+}
+
+static void test_set_ensure_consume(void) {
+ _cleanup_set_free_ Set *m = NULL;
+ char *s, *t;
+
+ assert_se(s = strdup("a"));
+ assert_se(set_ensure_consume(&m, &string_hash_ops_free, s) == 1);
+
+ assert_se(t = strdup("a"));
+ assert_se(set_ensure_consume(&m, &string_hash_ops_free, t) == 0);
+
+ assert_se(t = strdup("a"));
+ assert_se(set_ensure_consume(&m, &string_hash_ops_free, t) == 0);
+
+ assert_se(t = strdup("b"));
+ assert_se(set_ensure_consume(&m, &string_hash_ops_free, t) == 1);
+
+ assert_se(t = strdup("b"));
+ assert_se(set_ensure_consume(&m, &string_hash_ops_free, t) == 0);
+
+ assert_se(set_size(m) == 2);
+}
+
int main(int argc, const char *argv[]) {
test_set_steal_first();
test_set_free_with_destructor();
test_set_put();
test_set_put_strdup();
test_set_put_strdupv();
+ test_set_ensure_allocated();
+ test_set_ensure_put();
+ test_set_ensure_consume();
return 0;
}
#include "log.h"
#include "main-func.h"
#include "mkdir.h"
+#include "namespace-util.h"
#include "selinux-util.h"
#include "signal-util.h"
#include "string-util.h"
{ "test/run", "/etc/udev/rules.d", "Failed to mount empty /etc/udev/rules.d", true },
{ "test/run", UDEVLIBEXECDIR "/rules.d", "Failed to mount empty " UDEVLIBEXECDIR "/rules.d", true },
};
- unsigned i;
-
- if (unshare(CLONE_NEWNS) < 0)
- return log_error_errno(errno, "Failed to call unshare(): %m");
+ int r;
- if (mount(NULL, "/", NULL, MS_SLAVE|MS_REC, NULL) < 0)
- return log_error_errno(errno, "Failed to mount / as private: %m");
+ r = detach_mount_namespace();
+ if (r < 0)
+ return log_error_errno(r, "Failed to detach mount namespace: %m");
- for (i = 0; i < ELEMENTSOF(fakefss); i++)
+ for (size_t i = 0; i < ELEMENTSOF(fakefss); i++)
if (mount(fakefss[i].src, fakefss[i].target, NULL, MS_BIND, NULL) < 0) {
log_full_errno(fakefss[i].ignore_mount_error ? LOG_DEBUG : LOG_ERR, errno, "%s: %m", fakefss[i].error);
if (!fakefss[i].ignore_mount_error)
}
log_debug("version %s", GIT_VERSION);
- mac_selinux_init();
+
+ r = mac_selinux_init();
+ if (r < 0)
+ return r;
action = argv[1];
devpath = argv[2];
- assert_se(udev_rules_new(&rules, RESOLVE_NAME_EARLY) == 0);
+ assert_se(udev_rules_load(&rules, RESOLVE_NAME_EARLY) == 0);
const char *syspath = strjoina("/sys", devpath);
r = device_new_from_synthetic_event(&dev, syspath, action);
test_unit_name_from_path_one("///", ".mount", "-.mount", 0);
test_unit_name_from_path_one("/foo/../bar", ".mount", NULL, -EINVAL);
test_unit_name_from_path_one("/foo/./bar", ".mount", NULL, -EINVAL);
+ test_unit_name_from_path_one("/waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ".mount", NULL, -EINVAL);
}
static void test_unit_name_from_path_instance_one(const char *pattern, const char *path, const char *suffix, const char *expected, int ret) {
test_unit_name_from_path_instance_one("waldo", "..", ".mount", NULL, -EINVAL);
test_unit_name_from_path_instance_one("waldo", "/foo", ".waldi", NULL, -EINVAL);
test_unit_name_from_path_instance_one("wa--ldo", "/--", ".mount", "wa--ldo@\\x2d\\x2d.mount", 0);
+ test_unit_name_from_path_instance_one("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "/waldo", ".mount", NULL, -EINVAL);
}
static void test_unit_name_to_path_one(const char *unit, const char *path, int ret) {
assert_se(system_tasks_max_scale(UINT64_MAX/4, UINT64_MAX) == UINT64_MAX);
}
+static void test_foreach_pointer(void) {
+ int a, b, c, *i;
+ size_t k = 0;
+
+ FOREACH_POINTER(i, &a, &b, &c) {
+ switch (k) {
+
+ case 0:
+ assert_se(i == &a);
+ break;
+
+ case 1:
+ assert_se(i == &b);
+ break;
+
+ case 2:
+ assert_se(i == &c);
+ break;
+
+ default:
+ assert_not_reached("unexpected index");
+ break;
+ }
+
+ k++;
+ }
+
+ assert(k == 3);
+
+ FOREACH_POINTER(i, &b) {
+ assert(k == 3);
+ assert(i == &b);
+ k = 4;
+ }
+
+ assert(k == 4);
+
+ FOREACH_POINTER(i, NULL, &c, NULL, &b, NULL, &a, NULL) {
+ switch (k) {
+
+ case 4:
+ assert_se(i == NULL);
+ break;
+
+ case 5:
+ assert_se(i == &c);
+ break;
+
+ case 6:
+ assert_se(i == NULL);
+ break;
+
+ case 7:
+ assert_se(i == &b);
+ break;
+
+ case 8:
+ assert_se(i == NULL);
+ break;
+
+ case 9:
+ assert_se(i == &a);
+ break;
+
+ case 10:
+ assert_se(i == NULL);
+ break;
+
+ default:
+ assert_not_reached("unexpected index");
+ break;
+ }
+
+ k++;
+ }
+
+ assert(k == 11);
+}
+
int main(int argc, char *argv[]) {
test_setup_logging(LOG_INFO);
test_physical_memory_scale();
test_system_tasks_max();
test_system_tasks_max_scale();
+ test_foreach_pointer();
return 0;
}
case 0:
assert_se(streq(service->exec_string, "/bin/sleep 100"));
assert_se(strv_equal(service->only_show_in, STRV_MAKE("A", "B")));
- assert_se(strv_equal(service->not_show_in, STRV_MAKE("C", "", "D\\;", "E")));
+ assert_se(strv_equal(service->not_show_in, STRV_MAKE("C", "D\\;", "E")));
assert_se(!service->hidden);
break;
case 1:
}
int main(int argc, char *argv[]) {
- size_t i;
-
test_setup_logging(LOG_DEBUG);
test_translate_name();
test_xdg_format_exec_start();
- for (i = 0; i < ELEMENTSOF(xdg_desktop_file); i++)
+ for (size_t i = 0; i < ELEMENTSOF(xdg_desktop_file); i++)
test_xdg_desktop_parse(i, xdg_desktop_file[i]);
return 0;
#include "sd-bus.h"
#include "bus-error.h"
-#include "bus-util.h"
+#include "bus-locator.h"
+#include "bus-map-properties.h"
+#include "bus-print-properties.h"
#include "format-table.h"
#include "in-addr-util.h"
#include "main-func.h"
#include "pager.h"
#include "parse-util.h"
#include "pretty-print.h"
-#include "spawn-polkit-agent.h"
#include "sparse-endian.h"
+#include "spawn-polkit-agent.h"
#include "string-table.h"
#include "strv.h"
#include "terminal-util.h"
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
if (i->rtc_local)
printf("\n%s"
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
return 0;
}
log_error("Invalid NTP response");
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
return 0;
}
r = table_print(table, NULL);
if (r < 0)
- log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
return 0;
}
int r;
setlocale(LC_ALL, "");
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
#include "alloc-util.h"
#include "bus-common-errors.h"
#include "bus-error.h"
+#include "bus-get-properties.h"
+#include "bus-locator.h"
#include "bus-log-control-api.h"
+#include "bus-map-properties.h"
#include "bus-polkit.h"
-#include "bus-util.h"
#include "clock-util.h"
#include "conf-files.h"
#include "def.h"
}
}
- mac_selinux_init();
+ r = mac_selinux_init();
+ if (r < 0)
+ return r;
+
return write_string_file_atomic_label("/etc/adjtime", w);
}
#include "sd-bus.h"
#include "alloc-util.h"
+#include "bus-get-properties.h"
#include "bus-internal.h"
#include "bus-log-control-api.h"
#include "bus-protocol.h"
}
static int run(int argc, char *argv[]) {
- _cleanup_(notify_on_cleanup) const char *notify_message = NULL;
_cleanup_(manager_freep) Manager *m = NULL;
+ _cleanup_(notify_on_cleanup) const char *notify_message = NULL;
const char *user = "systemd-timesync";
uid_t uid, uid_current;
gid_t gid;
return true;
}
- /* no matches, so we should include this path only if we
- * have no whitelist at all */
+ /* no matches, so we should include this path only if we have no allow list at all */
if (strv_isempty(arg_include_prefixes))
return true;
if (!j)
j = ordered_hashmap_get(globs, prefix);
if (j) {
- r = set_ensure_allocated(&j->children, NULL);
- if (r < 0)
- return log_oom();
-
- r = set_put(j->children, a);
+ r = set_ensure_put(&j->children, NULL, a);
if (r < 0)
return log_oom();
umask(0022);
- mac_selinux_init();
+ r = mac_selinux_init();
+ if (r < 0)
+ return r;
items = ordered_hashmap_new(&item_array_hash_ops);
globs = ordered_hashmap_new(&item_array_hash_ops);
supported_parent = true;
supported_transport = true;
}
+ } else if (streq(subsys, "spi")) {
+ const char *sysnum;
+
+ if (sd_device_get_sysnum(parent, &sysnum) >= 0 && sysnum) {
+ path_prepend(&path, "cs-%s", sysnum);
+ parent = skip_subsystem(parent, "spi");
+ }
}
if (!parent)
}
}
-static int parse_file(UdevRules *rules, const char *filename) {
+int udev_rules_parse_file(UdevRules *rules, const char *filename) {
_cleanup_free_ char *continuation = NULL, *name = NULL;
_cleanup_fclose_ FILE *f = NULL;
UdevRuleFile *rule_file;
return 0;
}
-int udev_rules_new(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing) {
- _cleanup_(udev_rules_freep) UdevRules *rules = NULL;
- _cleanup_strv_free_ char **files = NULL;
- char **f;
- int r;
-
+UdevRules* udev_rules_new(ResolveNameTiming resolve_name_timing) {
assert(resolve_name_timing >= 0 && resolve_name_timing < _RESOLVE_NAME_TIMING_MAX);
- rules = new(UdevRules, 1);
+ UdevRules *rules = new(UdevRules, 1);
if (!rules)
- return -ENOMEM;
+ return NULL;
*rules = (UdevRules) {
.resolve_name_timing = resolve_name_timing,
};
+ return rules;
+}
+
+int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing) {
+ _cleanup_(udev_rules_freep) UdevRules *rules = NULL;
+ _cleanup_strv_free_ char **files = NULL;
+ char **f;
+ int r;
+
+ rules = udev_rules_new(resolve_name_timing);
+ if (!rules)
+ return -ENOMEM;
+
(void) udev_rules_check_timestamp(rules);
r = conf_files_list_strv(&files, ".rules", NULL, 0, RULES_DIRS);
if (r < 0)
- return log_error_errno(r, "Failed to enumerate rules files: %m");
+ return log_debug_errno(r, "Failed to enumerate rules files: %m");
- STRV_FOREACH(f, files)
- (void) parse_file(rules, *f);
+ STRV_FOREACH(f, files) {
+ r = udev_rules_parse_file(rules, *f);
+ if (r < 0)
+ log_debug_errno(r, "Failed to read rules file %s, ignoring: %m", *f);
+ }
*ret_rules = TAKE_PTR(rules);
return 0;
_ESCAPE_TYPE_INVALID = -1
} UdevRuleEscapeType;
-int udev_rules_new(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing);
+int udev_rules_parse_file(UdevRules *rules, const char *filename);
+UdevRules* udev_rules_new(ResolveNameTiming resolve_name_timing);
+int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing);
UdevRules *udev_rules_free(UdevRules *rules);
DEFINE_TRIVIAL_CLEANUP_FUNC(UdevRules*, udev_rules_free);
#include "device-util.h"
#include "dirent-util.h"
#include "fd-util.h"
+#include "sort-util.h"
#include "string-table.h"
#include "string-util.h"
#include "udev-util.h"
return string_table_lookup(skip, ELEMENTSOF(skip), name) >= 0;
}
-static void print_all_attributes(sd_device *device, const char *key) {
+typedef struct SysAttr {
+ const char *name;
+ const char *value;
+} SysAttr;
+
+static int sysattr_compare(const SysAttr *a, const SysAttr *b) {
+ return strcmp(a->name, b->name);
+}
+
+static int print_all_attributes(sd_device *device, bool is_parent) {
+ _cleanup_free_ SysAttr *sysattrs = NULL;
+ size_t n_items = 0, n_allocated = 0;
const char *name, *value;
+ value = NULL;
+ (void) sd_device_get_devpath(device, &value);
+ printf(" looking at %sdevice '%s':\n", is_parent ? "parent " : "", strempty(value));
+
+ value = NULL;
+ (void) sd_device_get_sysname(device, &value);
+ printf(" %s==\"%s\"\n", is_parent ? "KERNELS" : "KERNEL", strempty(value));
+
+ value = NULL;
+ (void) sd_device_get_subsystem(device, &value);
+ printf(" %s==\"%s\"\n", is_parent ? "SUBSYSTEMS" : "SUBSYSTEM", strempty(value));
+
+ value = NULL;
+ (void) sd_device_get_driver(device, &value);
+ printf(" %s==\"%s\"\n", is_parent ? "DRIVERS" : "DRIVER", strempty(value));
+
FOREACH_DEVICE_SYSATTR(device, name) {
size_t len;
if (len > 0)
continue;
- printf(" %s{%s}==\"%s\"\n", key, name, value);
+ if (!GREEDY_REALLOC(sysattrs, n_allocated, n_items + 1))
+ return log_oom();
+
+ sysattrs[n_items] = (SysAttr) {
+ .name = name,
+ .value = value,
+ };
+ n_items++;
}
+
+ typesafe_qsort(sysattrs, n_items, sysattr_compare);
+
+ for (size_t i = 0; i < n_items; i++)
+ printf(" %s{%s}==\"%s\"\n", is_parent ? "ATTRS" : "ATTR", sysattrs[i].name, sysattrs[i].value);
+
puts("");
+
+ return 0;
}
static int print_device_chain(sd_device *device) {
sd_device *child, *parent;
- const char *str;
+ int r;
printf("\n"
"Udevadm info starts with the device specified by the devpath and then\n"
"and the attributes from one single parent device.\n"
"\n");
- (void) sd_device_get_devpath(device, &str);
- printf(" looking at device '%s':\n", str);
- (void) sd_device_get_sysname(device, &str);
- printf(" KERNEL==\"%s\"\n", str);
- if (sd_device_get_subsystem(device, &str) < 0)
- str = "";
- printf(" SUBSYSTEM==\"%s\"\n", str);
- if (sd_device_get_driver(device, &str) < 0)
- str = "";
- printf(" DRIVER==\"%s\"\n", str);
- print_all_attributes(device, "ATTR");
+ r = print_all_attributes(device, false);
+ if (r < 0)
+ return r;
for (child = device; sd_device_get_parent(child, &parent) >= 0; child = parent) {
- (void) sd_device_get_devpath(parent, &str);
- printf(" looking at parent device '%s':\n", str);
- (void) sd_device_get_sysname(parent, &str);
- printf(" KERNELS==\"%s\"\n", str);
- if (sd_device_get_subsystem(parent, &str) < 0)
- str = "";
- printf(" SUBSYSTEMS==\"%s\"\n", str);
- if (sd_device_get_driver(parent, &str) < 0)
- str = "";
- printf(" DRIVERS==\"%s\"\n", str);
- print_all_attributes(parent, "ATTRS");
+ r = print_all_attributes(parent, true);
+ if (r < 0)
+ return r;
}
return 0;
subsystem = devtype = NULL;
break;
}
- case 't': {
- _cleanup_free_ char *tag = NULL;
-
- r = set_ensure_allocated(&arg_tag_filter, &string_hash_ops);
+ case 't':
+ /* optarg is stored in argv[], so we don't need to copy it */
+ r = set_ensure_put(&arg_tag_filter, &string_hash_ops, optarg);
if (r < 0)
return r;
-
- tag = strdup(optarg);
- if (!tag)
- return -ENOMEM;
-
- r = set_put(arg_tag_filter, tag);
- if (r < 0)
- return r;
-
- tag = NULL;
break;
- }
+
case 'V':
return print_version();
case 'h':
finalize:
hashmap_free_free_free(arg_subsystem_filter);
- set_free_free(arg_tag_filter);
+ set_free(arg_tag_filter);
return r;
}
udev_builtin_init();
- r = udev_rules_new(&rules, arg_resolve_name_timing);
+ r = udev_rules_load(&rules, arg_resolve_name_timing);
if (r < 0) {
log_error_errno(r, "Failed to read udev rules: %m");
goto out;
log_set_max_level_realm(LOG_REALM_SYSTEMD, log_get_max_level());
- mac_selinux_init();
+ r = mac_selinux_init();
+ if (r < 0)
+ return r;
+
return udevadm_main(argc, argv);
}
/* Exclude synthetic devices for now, this is supposed to be a safety feature to avoid modification
* of physical devices, and what sits on top of those doesn't really matter if we don't allow the
- * underlying block devices to recieve changes. */
+ * underlying block devices to receive changes. */
if (STARTSWITH_SET(val, "dm-", "md", "drbd", "loop", "nbd", "zram"))
return 0;
udev_builtin_init();
if (!manager->rules) {
- r = udev_rules_new(&manager->rules, arg_resolve_name_timing);
+ r = udev_rules_load(&manager->rules, arg_resolve_name_timing);
if (r < 0) {
log_warning_errno(r, "Failed to read udev rules: %m");
return;
udev_builtin_init();
- r = udev_rules_new(&manager->rules, arg_resolve_name_timing);
+ r = udev_rules_load(&manager->rules, arg_resolve_name_timing);
if (!manager->rules)
return log_error_errno(r, "Failed to read udev rules: %m");
r = mac_selinux_init();
if (r < 0)
- return log_error_errno(r, "Could not initialize labelling: %m");
+ return r;
r = mkdir_errno_wrapper("/run/udev", 0755);
if (r < 0 && r != -EEXIST)
}
r = mac_selinux_init();
- if (r < 0) {
- log_error_errno(r, "SELinux setup failed: %m");
+ if (r < 0)
return EXIT_FAILURE;
- }
r = apply_timestamp("/etc/.updated", &st.st_mtim);
q = apply_timestamp("/var/.updated", &st.st_mtim);
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
int r;
- unsigned i;
assert(c);
- for (i = 0; i < ELEMENTSOF(table); i++) {
+ for (size_t i = 0; i < ELEMENTSOF(table); i++) {
_cleanup_free_ char *state = NULL, *path = NULL;
path = unit_dbus_path_from_name(table[i].special);
};
int r;
- if (getppid() != 1)
- return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
- "This program should be invoked by init only.");
if (argc != 2)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"This program requires one argument.");
umask(0022);
- mac_selinux_init();
+ r = mac_selinux_init();
+ if (r < 0)
+ return r;
if (streq(argv[1], "start")) {
r = unlink_or_warn("/run/nologin");
TABLE_STRING, user_record_shell(ur),
TABLE_INT, (int) user_record_disposition(ur));
if (r < 0)
- return log_error_errno(r, "Failed to add row to table: %m");
+ return table_log_add_error(r);
break;
if (table) {
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
}
return ret;
TABLE_GID, gr->gid,
TABLE_INT, (int) group_record_disposition(gr));
if (r < 0)
- return log_error_errno(r, "Failed to add row to table: %m");
+ return table_log_add_error(r);
break;
if (table) {
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
}
return ret;
TABLE_STRING, user,
TABLE_STRING, group);
if (r < 0)
- return log_error_errno(r, "Failed to add row to table: %m");
+ return table_log_add_error(r);
break;
if (table) {
r = table_print(table, NULL);
if (r < 0)
- return log_error_errno(r, "Failed to show table: %m");
+ return table_log_print_error(r);
}
return ret;
TABLE_STRING, no ?: "yes",
TABLE_SET_COLOR, no ? ansi_highlight_red() : ansi_highlight_green());
if (r < 0)
- return log_error_errno(r, "Failed to add table row: %m");
+ return table_log_add_error(r);
}
if (table_get_rows(t) <= 0) {
int r;
- log_show_color(true);
- log_parse_environment();
- log_open();
+ log_setup_cli();
r = parse_argv(argc, argv);
if (r <= 0)
*/
static int run(int argc, char *argv[]) {
- _cleanup_(notify_on_cleanup) const char *notify_stop = NULL;
_cleanup_(manager_freep) Manager *m = NULL;
+ _cleanup_(notify_on_cleanup) const char *notify_stop = NULL;
int r;
log_setup_service();
static int run(int argc, char *argv[]) {
usec_t start_time, listen_idle_usec, last_busy_usec = USEC_INFINITY;
_cleanup_(varlink_server_unrefp) VarlinkServer *server = NULL;
- _cleanup_close_ int lock = -1;
unsigned n_iterations = 0;
int m, listen_fd, r;
return log_error_errno(r, "Failed to parse USERDB_FIXED_WORKER: %m");
listen_idle_usec = r ? USEC_INFINITY : LISTEN_IDLE_USEC;
- lock = userdb_nss_compat_disable();
- if (lock < 0)
+ r = userdb_block_nss_systemd(true);
+ if (r < 0)
return log_error_errno(r, "Failed to disable userdb NSS compatibility: %m");
start_time = now(CLOCK_MONOTONIC);
#include "alloc-util.h"
#include "crypt-util.h"
+#include "fileio.h"
#include "hexdecoct.h"
#include "log.h"
#include "main-func.h"
+#include "path-util.h"
#include "pretty-print.h"
#include "string-util.h"
#include "terminal-util.h"
if (r < 0)
return log_oom();
- printf("%s attach VOLUME DATADEVICE HASHDEVICE ROOTHASH\n"
+ printf("%s attach VOLUME DATADEVICE HASHDEVICE ROOTHASH [ROOTHASHSIG]\n"
"%s detach VOLUME\n\n"
"Attaches or detaches an integrity protected block device.\n"
"\nSee the %s for details.\n"
if (r < 0)
return log_error_errno(r, "Failed to configure data device: %m");
- r = crypt_activate_by_volume_key(cd, argv[2], m, l, CRYPT_ACTIVATE_READONLY);
+ if (argc > 6) {
+#if HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY
+ _cleanup_free_ char *hash_sig = NULL;
+ size_t hash_sig_size;
+ char *value;
+
+ if ((value = startswith(argv[6], "base64:"))) {
+ r = unbase64mem(value, strlen(value), (void *)&hash_sig, &hash_sig_size);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse root hash signature '%s': %m", argv[6]);
+ } else {
+ r = read_full_file_full(AT_FDCWD, argv[6], 0, &hash_sig, &hash_sig_size);
+ if (r < 0)
+ return log_error_errno(r, "Failed to read root hash signature: %m");
+ }
+
+ r = crypt_activate_by_signed_key(cd, argv[2], m, l, hash_sig, hash_sig_size, CRYPT_ACTIVATE_READONLY);
+#else
+ return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "activation of verity device with signature %s requested, but not supported by cryptsetup due to missing crypt_activate_by_signed_key()", argv[6]);
+#endif
+ } else
+ r = crypt_activate_by_volume_key(cd, argv[2], m, l, CRYPT_ACTIVATE_READONLY);
if (r < 0)
return log_error_errno(r, "Failed to set up verity device: %m");
return 0;
}
+static int strv_strndup_unescape_and_push(
+ const char *unit,
+ const char *filename,
+ unsigned line,
+ char ***sv,
+ size_t *n_allocated,
+ size_t *n,
+ const char *start,
+ const char *end) {
+
+ if (end == start)
+ return 0;
+
+ _cleanup_free_ char *copy = NULL;
+ int r;
+
+ copy = strndup(start, end - start);
+ if (!copy)
+ return log_oom();
+
+ r = xdg_unescape_string(unit, filename, line, copy);
+ if (r < 0)
+ return r;
+
+ if (!greedy_realloc((void**) sv, n_allocated, *n + 2, sizeof(char*))) /* One extra for NULL */
+ return log_oom();
+
+ (*sv)[*n] = TAKE_PTR(copy);
+ (*sv)[*n + 1] = NULL;
+ (*n)++;
+
+ return 0;
+}
+
static int xdg_config_parse_strv(
const char *unit,
const char *filename,
void *data,
void *userdata) {
- char ***sv = data;
- const char *start;
- const char *end;
+ char ***ret_sv = data;
int r;
assert(filename);
assert(data);
/* XDG does not allow duplicate definitions. */
- if (*sv) {
- log_syntax(unit, LOG_ERR, filename, line, 0, "Key %s was defined multiple times, ignoring.", lvalue);
+ if (*ret_sv) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "Key %s was already defined, ignoring.", lvalue);
return 0;
}
- *sv = strv_new(NULL);
- if (!*sv)
+ size_t n = 0, n_allocated = 0;
+ _cleanup_strv_free_ char **sv = NULL;
+
+ if (!GREEDY_REALLOC0(sv, n_allocated, 1))
return log_oom();
/* We cannot use strv_split because it does not handle escaping correctly. */
- start = rvalue;
+ const char *start = rvalue, *end;
for (end = start; *end; end++) {
if (*end == '\\') {
/* Move forward, and ensure it is a valid escape. */
end++;
- if (strchr("sntr\\;", *end) == NULL) {
+ if (!strchr("sntr\\;", *end)) {
log_syntax(unit, LOG_ERR, filename, line, 0, "Undefined escape sequence \\%c.", *end);
return 0;
}
}
if (*end == ';') {
- _cleanup_free_ char *copy = NULL;
-
- copy = strndup(start, end - start);
- if (!copy)
- return log_oom();
- r = xdg_unescape_string(unit, filename, line, copy);
+ r = strv_strndup_unescape_and_push(unit, filename, line,
+ &sv, &n_allocated, &n,
+ start, end);
if (r < 0)
return r;
- r = strv_consume(sv, TAKE_PTR(copy));
- if (r < 0)
- return log_oom();
start = end + 1;
}
}
- /* Any trailing entry should be ignored if it is empty. */
- if (end > start) {
- r = strv_extend(sv, start);
- if (r < 0)
- return log_oom();
- }
+ /* Handle the trailing entry after the last separator */
+ r = strv_strndup_unescape_and_push(unit, filename, line,
+ &sv, &n_allocated, &n,
+ start, end);
+ if (r < 0)
+ return r;
+ *ret_sv = TAKE_PTR(sv);
return 0;
}
/* Nothing to do if type is not Application. */
if (!streq_ptr(service->type, "Application")) {
- log_info("Not generating service for XDG autostart %s, it is hidden.", service->name);
+ log_info("Not generating service for XDG autostart %s, only Type=Application is supported.", service->name);
return 0;
}
return 0;
}
- if (streq_ptr(service->gnome_autostart_phase, "EarlyInitialization")) {
- log_info("Not generating service for XDG autostart %s, EarlyInitialization needs to be handled separately.",
+ if (service->gnome_autostart_phase) {
+ /* There is no explicit value for the "Application" phase. */
+ log_info("Not generating service for XDG autostart %s, startup phases are not supported.",
service->name);
return 0;
}
fprintf(f, "Description=%s\n", t);
}
- /* Only start after the session is ready.
- * XXX: GNOME has an autostart order which we may want to support.
- * It is not clear how this can be implemented reliably, which
- * is why it is skipped for now. */
+ /* Only start after the session is ready. */
fprintf(f,
"After=graphical-session.target\n");
--- /dev/null
+BUILD_DIR=$(shell ../../tools/find-build-dir.sh)
+
+all setup run clean clean-again:
+ @basedir=../.. TEST_BASE_DIR=../ BUILD_DIR=$(BUILD_DIR) ./test.sh --$@
+
+# finish option is used to run checks that can only be run outside of
+# the test execution. Example case, honor first shutdown, proof is obtained
+# from the console output as the image shuts down. This does not show up in
+# the journal so the output from the do_test is captured in a file in /tmp.
+# Without the use of finish the test will still pass because if it fails
+# the test will loop and will be terminated via a command timeout.
+# This just provides concrete confirmation.
+finish:
+ @basedir=../.. TEST_BASE_DIR=../ BUILD_DIR=$(BUILD_DIR) ./fini.sh --$@
+
+.PHONY: all setup run clean clean-again
--- /dev/null
+#!/bin/bash
+TEST_DESCRIPTION="test honor first shutdown"
+
+if grep -q "Shutdown is already active. Skipping emergency action request" /tmp/honorfirstshutdown.log; then
+ echo "$TEST_DESCRIPTION [pass]"
+ exit 0
+else
+ echo "$TEST_DESCRIPTION [fail]"
+ exit 1
+fi
--- /dev/null
+#!/bin/bash
+set -e
+. $TEST_BASE_DIR/test-functions
+TEST_REQUIRE_INSTALL_TESTS=0
+TEST_DESCRIPTION="testing honor first shutdown"
+#INTERACTIVE_DEBUG=1
+TEST_NO_QEMU=1
+
+#Using timeout because if the test fails it can loop.
+# The reason is because the poweroff executed by end.service
+# could turn into a reboot if the test fails.
+NSPAWN_TIMEOUT=20
+
+#Remove this file if it exists. this is used along with
+# the make target "finish". Since concrete confirmaion is
+# only found from the console during the poweroff.
+rm -f /tmp/honorfirstshutdown.log >/dev/null
+
+do_test "$@" 52 > /tmp/honorfirstshutdown.log
GVRP=
[MACVLAN]
Mode=
+SourceMACAddress=
[WireGuard]
ListenPort=
PrivateKey=
FirewallMark=
[MACVTAP]
Mode=
+SourceMACAddress=
[Match]
Architecture=
Host=
--- /dev/null
+[NetDev]
+Name=w
+Kind=wireguard
+[WireGuardPeer]
+Endpoint=:0
+Endpoint=:8
\ No newline at end of file
Multicast=
MACAddress=
Group=
-IPv6LinkLocalAddressGenerationMode=
+[SR-IOV]
+VirtualFunction=
+MACSpoofCheck=
+VLANId=
+VLANProtocol=
+QualityOfService=
+QueryReceiveSideScaling=
+Trust=
+LinkState=
+MACAddress=
[BridgeFDB]
VLANId=
MACAddress=
ListenPort=
UseTimezone=
RouteTable=
+DenyList=
BlackList=
+AllowList=
RequestOptions=
SendRelease=
MaxAttempts=
L2TP=
MACsec=
LinkLocalAddressing=
+IPv6LinkLocalAddressGenerationMode=
ConfigureWithoutCarrier=
NTP=
DHCP=
DHCPv6Client=
UseAutonomousPrefix=
UseOnLinkPrefix=
+DenyList=
BlackList=
[DHCPServer]
EmitNTP=
Parent=
Handle=
Rate=
+BurstBytes=
Burst=
+LimitBytes=
LimitSize=
MTUBytes=
MPUBytes=
Parent=
Handle=
PacketLimit=
+MemoryLimitBytes=
MemoryLimit=
Flows=
+QuantumBytes=
Quantum=
TargetSec=
IntervalSec=
Handle=
PacketLimit=
FlowLimit=
+QuantumBytes=
Quantum=
+InitialQuantumBytes=
InitialQuantum=
MaximumRate=
Buckets=
Parent=
Handle=
Bandwidth=
-Overhead=
+OverheadBytes=
[TrafficControlQueueingDiscipline]
Parent=
NetworkEmulatorDelaySec=
Parent=
Handle=
DefaultClass=
+RateToQuantum=
[HierarchyTokenBucketClass]
Parent=
ClassId=
Priority=
+QuantumBytes=
+MTUBytes=
+OverheadBytes=
Rate=
CeilRate=
+BufferBytes=
+CeilBufferBytes=
[BFIFO]
Parent=
Handle=
-LimitSize=
+LimitBytes=
[PFIFO]
Parent=
Handle=
Parent=
ClassId=
Weight=
-MaxPacketSize=
+MaxPacketBytes=
[DeficitRoundRobinScheduler]
Parent=
Handle=
[DeficitRoundRobinSchedulerClass]
Parent=
ClassId=
-Quantum=
+QuantumBytes=
+[EnhancedTransmissionSelection]
+Parent=
+Handle=
+Bands=
+StrictBands=
+QuantumBytes=
+PriorityMap=
[HeavyHitterFilter]
Parent=
Handle=
--- /dev/null
+[Network]
+DNSSECNegativeTrustAnchors=i i
\ No newline at end of file
[IPv6AcceptRA]
-BlackList=70:: 70::
\ No newline at end of file
+DenyList=70:: 70::
\ No newline at end of file
--- /dev/null
+O\x4294967296d%d;ycalc\x0a]r\n%s$(xcalc)$1'xcalc!xcalc%s"strjng_escaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSYMLIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\85aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
\ No newline at end of file
RootDirectoryStartOnly=
RootImage=
RootHash=
+RootHashSignature=
RootVerity=
RuntimeMaxSec=
SELinuxContextFromNet=
install_dir : testdata_dir)
install_subdir('testsuite-30.units',
install_dir : testdata_dir)
+install_subdir('testsuite-52.units',
+ install_dir : testdata_dir)
testsuite08_dir = testdata_dir + '/testsuite-08.units'
install_data('testsuite-08.units/-.mount',
# under ASan+UBSan in containers, which, in turn, are run in VMs.
# Let's limit which environments such services should be executed in.
mkdir -p /etc/systemd/system/systemd-hwdb-update.service.d
-printf "[Unit]\nConditionVirtualization=container\n\n[Service]\nTimeoutSec=180s\n" >/etc/systemd/system/systemd-hwdb-update.service.d/env-override.conf
+printf "[Unit]\nConditionVirtualization=container\n\n[Service]\nTimeoutSec=240s\n" >/etc/systemd/system/systemd-hwdb-update.service.d/env-override.conf
# Let's override another hard-coded timeout that kicks in too early
mkdir -p /etc/systemd/system/systemd-journal-flush.service.d
+++ /dev/null
-[NetDev]
-Kind=netdevsim
-Name=netdevsim99
[CAKE]
Parent=root
Handle=3a
-Overhead=128
+OverheadBytes=128
Bandwidth=500M
Parent=root
Handle=0002
DefaultClass=30
+RateToQuantum=20
[HierarchyTokenBucketClass]
Parent=root
ClassId=0002:0030
Priority=1
+QuantumBytes=4000
+MTUBytes=1700
+OverheadBytes=100
Rate=1M
+BufferBytes=123456
CeilRate=0.5M
+CeilBufferBytes=123457
[NetworkEmulator]
Parent=2:30
Handle=0032
PacketLimit=1000
FlowLimit=200
-Quantum=1500
-InitialQuantum=13000
+QuantumBytes=1500
+InitialQuantumBytes=13000
MaximumRate=1M
Buckets=512
OrphanMask=511
Parent=2:34
Handle=0034
PacketLimit=20480
-MemoryLimit=64M
+MemoryLimitBytes=64M
Flows=2048
TargetSec=10ms
IntervalSec=200ms
-Quantum=1400
+QuantumBytes=1400
ECN=yes
CEThresholdSec=100ms
Parent=2:35
Handle=0035
Rate=1G
-Burst=5K
+BurstBytes=5000
LatencySec=70msec
PeakRate=100G
-MTUBytes=1M
+MTUBytes=1000000
[HierarchyTokenBucketClass]
Parent=root
[BFIFO]
Parent=2:3a
Handle=003a
-LimitSize=1M
+LimitBytes=1000000
[HierarchyTokenBucketClass]
Parent=root
[DeficitRoundRobinSchedulerClass]
Parent=root
ClassId=0002:0030
-Quantum=2000
+QuantumBytes=2000
--- /dev/null
+[Match]
+Name=dummy98
+
+[Network]
+IPv6AcceptRA=no
+Address=10.1.2.3/16
+
+[EnhancedTransmissionSelection]
+Parent=root
+Handle=3a
+Bands=10
+StrictBands=3
+QuantumBytes=2 4 6
+QuantumBytes=
+QuantumBytes=1 2 3
+QuantumBytes=4 5
+PriorityMap=8 7 6 5
+PriorityMap=
+PriorityMap=3 4 5
+PriorityMap=6 7
Parent=root
ClassId=0002:0030
Weight=2
-MaxPacketSize=16000
+MaxPacketBytes=16000
[QuickFairQueueingClass]
Parent=root
ClassId=0002:0031
Weight=10
-MaxPacketSize=8000
+MaxPacketBytes=8000
--- /dev/null
+[Match]
+Name=eni99np1
+
+[Network]
+Address=192.168.100.100/24
+
+[SR-IOV]
+VirtualFunction=0
+VLANId=5
+VLANProtocol=802.1ad
+QualityOfService=1
+MACSpoofCheck=yes
+QueryReceiveSideScaling=yes
+Trust=yes
+LinkState=yes
+MACAddress=00:11:22:33:44:55
+
+[SR-IOV]
+VirtualFunction=1
+VLANId=6
+VLANProtocol=802.1Q
+QualityOfService=2
+MACSpoofCheck=no
+QueryReceiveSideScaling=no
+Trust=no
+LinkState=no
+MACAddress=00:11:22:33:44:56
+
+[SR-IOV]
+VirtualFunction=2
+VLANId=7
+QualityOfService=3
+MACSpoofCheck=no
+QueryReceiveSideScaling=no
+Trust=no
+LinkState=auto
+MACAddress=00:11:22:33:44:57
return f
+def expectedFailureIfNetdevsimWithSRIOVIsNotAvailable():
+ def f(func):
+ call('rmmod netdevsim', stderr=subprocess.DEVNULL)
+ rc = call('modprobe netdevsim', stderr=subprocess.DEVNULL)
+ if rc != 0:
+ return unittest.expectedFailure(func)
+
+ try:
+ with open('/sys/bus/netdevsim/new_device', mode='w') as f:
+ f.write('99 1')
+ except Exception as error:
+ return unittest.expectedFailure(func)
+
+ call('udevadm settle')
+ call('udevadm info -w10s /sys/devices/netdevsim99/net/eni99np1', stderr=subprocess.DEVNULL)
+ try:
+ with open('/sys/class/net/eni99np1/device/sriov_numvfs', mode='w') as f:
+ f.write('3')
+ except Exception as error:
+ call('rmmod netdevsim', stderr=subprocess.DEVNULL)
+ return unittest.expectedFailure(func)
+
+ call('rmmod netdevsim', stderr=subprocess.DEVNULL)
+ return func
+
+ return f
+
def expectedFailureIfCAKEIsNotAvailable():
def f(func):
call('ip link add dummy98 type dummy', stderr=subprocess.DEVNULL)
return f
+def expectedFailureIfETSIsNotAvailable():
+ def f(func):
+ call('ip link add dummy98 type dummy', stderr=subprocess.DEVNULL)
+ rc = call('tc qdisc add dev dummy98 parent root ets bands 10', stderr=subprocess.DEVNULL)
+ call('ip link del dummy98', stderr=subprocess.DEVNULL)
+ if rc == 0:
+ return func
+ else:
+ return unittest.expectedFailure(func)
+
+ return f
+
def setUpModule():
global running_units
'25-qdisc-cake.network',
'25-qdisc-clsact-and-htb.network',
'25-qdisc-drr.network',
+ '25-qdisc-ets.network',
'25-qdisc-hhf.network',
'25-qdisc-ingress-netem-compat.network',
'25-qdisc-pie.network',
'25-route-vrf.network',
'25-gateway-static.network',
'25-gateway-next-static.network',
+ '25-sriov.network',
'25-sysctl-disable-ipv6.network',
'25-sysctl.network',
'25-test1.network',
self.assertRegex(output, 'inet6 .* scope link')
output = check_output('ip -4 route show dev dummy98')
print(output)
- self.assertEqual(output, '10.2.0.0/16 proto kernel scope link src 10.2.3.4')
+ self.assertRegex(output, '10.2.0.0/16 proto kernel scope link src 10.2.3.4')
output = check_output('ip -6 route show dev dummy98')
print(output)
self.assertRegex(output, 'default via 2607:5300:203:39ff:ff:ff:ff:ff proto static')
self.assertRegex(output, 'inet6 .* scope link')
output = check_output('ip -4 route show dev dummy98')
print(output)
- self.assertEqual(output, '10.2.0.0/16 proto kernel scope link src 10.2.3.4')
+ self.assertRegex(output, '10.2.0.0/16 proto kernel scope link src 10.2.3.4')
output = check_output('ip -6 route show dev dummy98')
print(output)
self.assertRegex(output, 'default via 2607:5300:203:39ff:ff:ff:ff:ff proto static')
self.assertRegex(output, 'qdisc pfifo_fast 3c: parent 2:3c')
- output = check_output('tc class show dev dummy98')
+ output = check_output('tc -d class show dev dummy98')
print(output)
self.assertRegex(output, 'class htb 2:30 root leaf 30:')
self.assertRegex(output, 'class htb 2:31 root leaf 31:')
self.assertRegex(output, 'class htb 2:3a root leaf 3a:')
self.assertRegex(output, 'class htb 2:3b root leaf 3b:')
self.assertRegex(output, 'class htb 2:3c root leaf 3c:')
- self.assertRegex(output, 'prio 1 rate 1Mbit ceil 500Kbit')
+ self.assertRegex(output, 'prio 1 quantum 4000 rate 1Mbit overhead 100 ceil 500Kbit')
+ self.assertRegex(output, 'burst 123456')
+ self.assertRegex(output, 'cburst 123457')
def test_qdisc2(self):
copy_unit_to_networkd_unit_path('25-qdisc-drr.network', '12-dummy.netdev',
self.assertRegex(output, 'qdisc hhf 3a: root')
self.assertRegex(output, 'limit 1022p')
+ @expectedFailureIfETSIsNotAvailable()
+ def test_qdisc_ets(self):
+ copy_unit_to_networkd_unit_path('25-qdisc-ets.network', '12-dummy.netdev')
+ start_networkd()
+ self.wait_online(['dummy98:routable'])
+
+ output = check_output('tc qdisc show dev dummy98')
+ print(output)
+ self.assertRegex(output, 'qdisc ets 3a: root')
+ self.assertRegex(output, 'bands 10 strict 3')
+ self.assertRegex(output, 'quanta 1 2 3 4 5')
+ self.assertRegex(output, 'priomap 3 4 5 6 7')
+
+ @expectedFailureIfNetdevsimWithSRIOVIsNotAvailable()
+ def test_sriov(self):
+ call('rmmod netdevsim', stderr=subprocess.DEVNULL)
+ call('modprobe netdevsim', stderr=subprocess.DEVNULL)
+ with open('/sys/bus/netdevsim/new_device', mode='w') as f:
+ f.write('99 1')
+
+ call('udevadm settle')
+ call('udevadm info -w10s /sys/devices/netdevsim99/net/eni99np1', stderr=subprocess.DEVNULL)
+ with open('/sys/class/net/eni99np1/device/sriov_numvfs', mode='w') as f:
+ f.write('3')
+
+ copy_unit_to_networkd_unit_path('25-sriov.network')
+ start_networkd()
+ self.wait_online(['eni99np1:routable'])
+
+ output = check_output('ip link show dev eni99np1')
+ print(output)
+ self.assertRegex(output,
+ 'vf 0 .*00:11:22:33:44:55.*vlan 5, qos 1, vlan protocol 802.1ad, spoof checking on, link-state enable, trust on, query_rss on\n *'
+ 'vf 1 .*00:11:22:33:44:56.*vlan 6, qos 2, spoof checking off, link-state disable, trust off, query_rss off\n *'
+ 'vf 2 .*00:11:22:33:44:57.*vlan 7, qos 3, spoof checking off, link-state auto, trust off, query_rss off'
+ )
+
+ call('rmmod netdevsim', stderr=subprocess.DEVNULL)
+
class NetworkdStateFileTests(unittest.TestCase, Utilities):
links = [
'dummy98',
[Service]
ExecStart=/bin/true
-Type=oneshot
+Type=simple
+RemainAfterExit=true
[Service]
ExecStart=/bin/true
-Type=oneshot
+Type=simple
+RemainAfterExit=true
[Service]
ExecStart=/bin/true
-Type=oneshot
+Type=simple
+RemainAfterExit=true
[Service]
ExecStart=/bin/true
-Type=oneshot
+Type=simple
+RemainAfterExit=true
[Service]
ExecStart=/bin/true
-Type=oneshot
+Type=simple
+RemainAfterExit=true
[Service]
ExecStart=/bin/true
-Type=oneshot
+Type=simple
+RemainAfterExit=true
[Unit]
-Description=Service Test Path Unit=
+Description=Service Test Path Unit
[Service]
ExecStart=/bin/true
-Type=oneshot
+Type=simple
+RemainAfterExit=true
--- /dev/null
+[Unit]
+Description=Testsuite service
+
+[Service]
+ExecStart=/usr/lib/systemd/tests/testdata/%N.units/%N.sh
+Type=oneshot
--- /dev/null
+#!/bin/bash
+set -ex
+set -o pipefail
+
+if ! test -x /usr/lib/systemd/tests/testdata/units/test-honor-first-shutdown.sh ; then
+ echo "honor-first-shutdown script not found - FAIL" > /testok
+ exit 0
+fi
+
+systemd-analyze log-level debug
+systemd-analyze log-target console
+
+systemctl enable test-honor-first-shutdown.service
+systemctl start test-honor-first-shutdown.service
+
+echo OK > /testok
+
+exit 0
--- /dev/null
+[Unit]
+Description=Honor First Shutdown feature
+After=multi-user.target
+
+[Service]
+ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+ExecStop=sh -c 'kill -KILL $MAINPID'
+FailureAction=reboot
+
+[Install]
+WantedBy=multi-user.target
--- /dev/null
+#!/bin/bash
+echo "Honor first shutdown test script"
+sleep infinity;
> "$LOGFILE"
- if [ -n $3 ]; then
+ if [ -n "$3" ]; then
systemctl show -p NUMAMask $1 > "$LOGFILE"
grep "NUMAMask=$3" "$LOGFILE"
fi
systemd-analyze log-target console
systemctl start testsuite-47-repro
-sleep 1
+sleep 4
systemctl status testsuite-47-repro
leaked_pid=$(cat /leakedtestpid)
systemctl stop testsuite-47-repro
-sleep 1
+sleep 4
# Leaked PID will still be around if we're buggy.
# I personally prefer to see 42.
# May 07 23:12:20 systemd-testsuite testsuite-48.sh[52]: -rw-r--r-- 1 root root 50 2020-05-07 23:12:20.000000000 +0100 /
# May 07 23:12:20 systemd-testsuite testsuite-48.sh[30]: + stat -f --format=%t /etc/systemd/system/testservice-48.servic
# May 07 23:12:20 systemd-testsuite testsuite-48.sh[53]: ef53
-sleep 1.1
+sleep 3.1
cat > /run/systemd/system/testservice-48.service <<EOF
[Service]
ExecStart=/bin/sleep infinity
-Type=exec
EOF
systemctl start testservice-48.service
systemctl is-active testservice-48.service
+# Stop and remove, and try again to exercise https://github.com/systemd/systemd/issues/15992
+systemctl stop testservice-48.service
+rm -f /run/systemd/system/testservice-48.service
+systemctl daemon-reload
+
+sleep 3.1
+
+cat > /run/systemd/system/testservice-48.service <<EOF
+[Service]
+ExecStart=/bin/sleep infinity
+EOF
+
+# Start a non-existing unit first, so that the cache is reloaded for an unrelated
+# reason. Starting the existing unit later should still work thanks to the check
+# for the last load attempt vs cache timestamp.
+systemctl start testservice-48-nonexistent.service || true
+
+systemctl start testservice-48.service
+
+systemctl is-active testservice-48.service
+
+# Stop and remove, and try again to exercise the transaction setup code path by
+# having the target pull in the unloaded but available unit
+systemctl stop testservice-48.service testservice-48.target
+rm -f /run/systemd/system/testservice-48.service /run/systemd/system/testservice-48.target
+systemctl daemon-reload
+
+sleep 3.1
+
+cat > /run/systemd/system/testservice-48.target <<EOF
+[Unit]
+Conflicts=shutdown.target
+Wants=testservice-48.service
+EOF
+
+systemctl daemon-reload
+
+systemctl start testservice-48.target
+
+cat > /run/systemd/system/testservice-48.service <<EOF
+[Service]
+ExecStart=/bin/sleep infinity
+EOF
+
+systemctl restart testservice-48.target
+
+systemctl is-active testservice-48.service
+
echo OK > /testok
exit 0
set -eu
git shortlog -s `git describe --abbrev=0`.. | \
- cut -c8- | \
- sed 's/ / /g' | \
- awk '{ print $$0 "," }' | \
- sed -e 's/ / /g' | \
+ awk '{ $1=""; print $0 "," }' | \
sort -u
vendor, device = entry.split(':')
vendor = int(vendor, 16)
device = int(device, 16)
- print(f'pci:v{vendor:08X}d{device:08X}*')
+ print('pci:v{:08X}d{:08X}*'.format(vendor, device))
print('# usb:v<VEND>p<PROD> (4 uppercase hexadecimal digits twice')
for entry in chromiumos.gen_autosuspend_rules.USB_IDS:
vendor, product = entry.split(':')
vendor = int(vendor, 16)
product = int(product, 16)
- print(f'usb:v{vendor:04X}p{product:04X}*')
+ print('usb:v{:04X}p{:04X}*'.format(vendor, product))
print(' ID_AUTOSUSPEND=1')
ADDITIONAL_DEPS=(
clang
dnf-plugins-core
- hostname libasan
- jq iputils
+ hostname
+ iputils
+ jq
+ libasan
libfdisk-devel
+ libfido2-devel
libpwquality-devel
libubsan
+ libzstd-devel
llvm
openssl-devel
p11-kit-devel
REPO_ROOT=${REPO_ROOT:-$(pwd)}
-sudo bash -c "echo 'deb-src http://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse' >>/etc/apt/sources.list"
+sudo bash -c "echo 'deb-src http://archive.ubuntu.com/ubuntu/ $(lsb_release -cs) main restricted universe multiverse' >>/etc/apt/sources.list"
sudo apt-get update -y
sudo apt-get build-dep systemd -y
sudo apt-get install -y ninja-build python3-pip python3-setuptools quota
tools/oss-fuzz.sh
./out/fuzz-unit-file -max_total_time=5
git clean -dxff
-
-git clone https://github.com/google/oss-fuzz /tmp/oss-fuzz
-cd /tmp/oss-fuzz
-sudo ./infra/helper.py pull_images
-
-# docker doesn't like colons in filenames so let's create a directory
-# whose name can be consumed by the -v option.
-# https://github.com/google/oss-fuzz/issues/2428
-t=$(mktemp -d)
-sudo mount --bind "$REPO_ROOT" "$t"
-
-# helper.py is wrapped in script to trick it into thinking it's "interactive"
-# See https://github.com/systemd/systemd/pull/12542#issuecomment-491563572
-sudo script -e -c "./infra/helper.py build_fuzzers --clean --sanitizer=memory systemd $t"
-sudo script -e -c "./infra/helper.py check_build --sanitizer=memory -e ALLOWED_BROKEN_TARGETS_PERCENTAGE=0 systemd"