summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.mailmap10
-rw-r--r--CODING_STYLE23
-rw-r--r--Makefile-man.am7
-rw-r--r--Makefile.am39
-rw-r--r--NEWS253
-rw-r--r--README21
-rw-r--r--TODO27
-rw-r--r--configure.ac9
-rw-r--r--hwdb/20-OUI.hwdb5243
-rw-r--r--hwdb/20-acpi-vendor.hwdb15
-rw-r--r--hwdb/20-pci-vendor-model.hwdb1167
-rw-r--r--hwdb/20-usb-vendor-model.hwdb436
-rw-r--r--man/bootctl.xml33
-rw-r--r--man/journald.conf.xml25
-rw-r--r--man/logind.conf.xml9
-rw-r--r--man/nss-myhostname.xml5
-rw-r--r--man/nss-mymachines.xml5
-rw-r--r--man/nss-resolve.xml7
-rw-r--r--man/nss-systemd.xml107
-rw-r--r--man/resolved.conf.xml20
-rw-r--r--man/sd_id128_to_string.xml12
-rw-r--r--man/systemctl.xml186
-rw-r--r--man/systemd-gpt-auto-generator.xml23
-rw-r--r--man/systemd-machine-id-setup.xml6
-rw-r--r--man/systemd-nspawn.xml10
-rw-r--r--man/systemd-resolved.service.xml8
-rw-r--r--man/systemd-system.conf.xml9
-rw-r--r--man/systemd.exec.xml54
-rw-r--r--man/systemd.resource-control.xml15
-rw-r--r--man/systemd.service.xml20
-rw-r--r--man/systemd.special.xml51
-rw-r--r--src/basic/cgroup-util.c83
-rw-r--r--src/basic/cgroup-util.h20
-rw-r--r--src/basic/fileio.c3
-rw-r--r--src/basic/missing.h4
-rw-r--r--src/basic/mount-util.c33
-rw-r--r--src/basic/nss-util.h2
-rw-r--r--src/basic/process-util.c6
-rw-r--r--src/basic/socket-util.c14
-rw-r--r--src/basic/socket-util.h2
-rw-r--r--src/basic/string-util.c45
-rw-r--r--src/basic/string-util.h3
-rw-r--r--src/basic/user-util.c93
-rw-r--r--src/basic/user-util.h5
-rw-r--r--src/basic/util.c96
-rw-r--r--src/basic/util.h5
-rw-r--r--src/boot/bootctl.c450
-rw-r--r--src/core/automount.c6
-rw-r--r--src/core/cgroup.c7
-rw-r--r--src/core/dbus-cgroup.c34
-rw-r--r--src/core/dbus-execute.c13
-rw-r--r--src/core/dbus-manager.c60
-rw-r--r--src/core/dbus-scope.c2
-rw-r--r--src/core/dynamic-user.c763
-rw-r--r--src/core/dynamic-user.h66
-rw-r--r--src/core/execute.c89
-rw-r--r--src/core/execute.h12
-rw-r--r--src/core/load-fragment-gperf.gperf.m411
-rw-r--r--src/core/load-fragment.c139
-rw-r--r--src/core/load-fragment.h2
-rw-r--r--src/core/machine-id-setup.c224
-rw-r--r--src/core/machine-id-setup.h2
-rw-r--r--src/core/macros.systemd.in6
-rw-r--r--src/core/main.c30
-rw-r--r--src/core/manager.c20
-rw-r--r--src/core/manager.h3
-rw-r--r--src/core/mount.c15
-rw-r--r--src/core/mount.h3
-rw-r--r--src/core/namespace.c2
-rw-r--r--src/core/scope.c16
-rw-r--r--src/core/scope.h3
-rw-r--r--src/core/service.c18
-rw-r--r--src/core/service.h1
-rw-r--r--src/core/socket.c15
-rw-r--r--src/core/socket.h2
-rw-r--r--src/core/swap.c15
-rw-r--r--src/core/swap.h1
-rw-r--r--src/core/system.conf2
-rw-r--r--src/core/transaction.c3
-rw-r--r--src/core/unit.c161
-rw-r--r--src/core/unit.h6
-rw-r--r--src/coredump/coredump.c64
-rw-r--r--src/firstboot/firstboot.c2
-rw-r--r--src/fstab-generator/fstab-generator.c26
-rw-r--r--src/gpt-auto-generator/gpt-auto-generator.c134
-rw-r--r--src/import/import.c4
-rw-r--r--src/import/pull.c4
-rw-r--r--src/journal/journalctl.c2
-rw-r--r--src/journal/journald-server.c2
-rw-r--r--src/journal/journald-server.h2
-rw-r--r--src/kernel-install/kernel-install11
-rw-r--r--src/libsystemd/sd-bus/bus-common-errors.c1
-rw-r--r--src/libsystemd/sd-bus/bus-common-errors.h1
-rw-r--r--src/libsystemd/sd-bus/bus-socket.c2
-rw-r--r--src/libsystemd/sd-id128/id128-util.c194
-rw-r--r--src/libsystemd/sd-id128/id128-util.h45
-rw-r--r--src/libsystemd/sd-id128/sd-id128.c118
-rw-r--r--src/login/logind-gperf.gperf2
-rw-r--r--src/login/logind-session.c26
-rw-r--r--src/login/logind-user.c48
-rw-r--r--src/login/logind.c2
-rw-r--r--src/login/logind.conf.in2
-rw-r--r--src/login/logind.h1
-rw-r--r--src/machine-id-setup/machine-id-setup-main.c30
-rw-r--r--src/machine/machine.c2
-rw-r--r--src/machine/machinectl.c2
-rw-r--r--src/nspawn/nspawn-mount.c214
-rw-r--r--src/nspawn/nspawn-mount.h2
-rw-r--r--src/nspawn/nspawn-register.c17
-rw-r--r--src/nspawn/nspawn-seccomp.c6
-rw-r--r--src/nspawn/nspawn-setuid.c7
-rw-r--r--src/nspawn/nspawn.c186
l---------src/nss-systemd/Makefile1
-rw-r--r--src/nss-systemd/nss-systemd.c332
-rw-r--r--src/nss-systemd/nss-systemd.sym17
-rw-r--r--src/shared/bus-unit-util.c50
-rw-r--r--src/shared/conf-parser.c9
-rw-r--r--src/shared/install.c2
-rw-r--r--src/systemctl/systemctl.c212
-rw-r--r--src/sysusers/sysusers.c75
-rw-r--r--src/test/test-cgroup.c10
-rw-r--r--src/test/test-id128.c81
-rw-r--r--src/test/test-install-root.c7
-rw-r--r--src/test/test-user-util.c87
-rw-r--r--src/test/test-util.c38
-rw-r--r--src/tmpfiles/tmpfiles.c5
-rw-r--r--src/udev/udevd.c2
-rw-r--r--units/getty@.service.m46
-rw-r--r--units/systemd-nspawn@.service.in13
-rw-r--r--units/user/graphical-session.target13
130 files changed, 9143 insertions, 3447 deletions
diff --git a/.mailmap b/.mailmap
index 69060957da..d56fb67845 100644
--- a/.mailmap
+++ b/.mailmap
@@ -64,3 +64,13 @@ Tom Rini <trini@kernel.crashing.org>
Paul Mundt <lethal@linux-sh.org>
Atul Sabharwal <atul.sabharwal@intel.com>
Daniel Machon <Danielmachon@live.dk>
+Thomas Blume <Thomas.Blume@suse.com>
+Pablo Lezaeta Reyes <prflr88@gmail.com>
+Otto Wallenius <otto_026@hotmail.com>
+Tom Yan <tom.ty89@gmail.com>
+Marty Plummer <ntzrmtthihu777@gmail.com>
+Brian Boylston <brian.boylston@hpe.com>
+Thomas H. P. Andersen <phomes@gmail.com>
+Michael Olbrich <m.olbrich@pengutronix.de>
+Douglas Christman <DouglasChristman@gmail.com>
+Alexander Kuleshov <kuleshovmail@gmail.com> <0xAX@users.noreply.github.com>
diff --git a/CODING_STYLE b/CODING_STYLE
index f31d76f8ce..e89b3c67e5 100644
--- a/CODING_STYLE
+++ b/CODING_STYLE
@@ -406,3 +406,26 @@
shorts as their name would suggest, but on uint32_t and uint16_t. Also,
"network byte order" is just a weird name for "big endian", hence we might
want to call it "big endian" right-away.
+
+- You might wonder what kind of common code belongs in src/shared/ and what
+ belongs in src/basic/. The split is like this: anything that uses public APIs
+ we expose (i.e. any of the sd-bus, sd-login, sd-id128, ... APIs) must be
+ located in src/shared/. All stuff that only uses external libraries from
+ other projects (such as glibc's APIs), or APIs from src/basic/ itself should
+ be placed in src/basic/. Conversely, src/libsystemd/ may only use symbols
+ from src/basic, but not from src/shared/. To summarize:
+
+ src/basic/ → may be used by all code in the tree
+ → may not use any code outside of src/basic/
+
+ src/libsystemd/ → may be used by all code in the tree, except for code in src/basic/
+ → may not use any code outside of src/basic/, src/libsystemd/
+
+ src/shared/ → may be used by all code in the tree, except for code in src/basic/, src/libsystemd/
+ → may not use any code outside of src/basic/, src/libsystemd/, src/shared/
+
+- Our focus is on the GNU libc (glibc), not any other libcs. If other libcs are
+ incompatible with glibc it's on them. However, if there are equivalent POSIX
+ and Linux/GNU-specific APIs, we generally prefer the POSIX APIs. If there
+ aren't, we are happy to use GNU or Linux APIs, and expect non-GNU
+ implementations of libc to catch up with glibc.
diff --git a/Makefile-man.am b/Makefile-man.am
index 8ab733360d..3ac1906a4a 100644
--- a/Makefile-man.am
+++ b/Makefile-man.am
@@ -23,6 +23,7 @@ MANPAGES += \
man/localtime.5 \
man/machine-id.5 \
man/machine-info.5 \
+ man/nss-systemd.8 \
man/os-release.5 \
man/sd-bus-errors.3 \
man/sd-bus.3 \
@@ -255,6 +256,7 @@ MANPAGES_ALIAS += \
man/SD_WARNING.3 \
man/init.1 \
man/journald.conf.d.5 \
+ man/libnss_systemd.so.2.8 \
man/poweroff.8 \
man/reboot.8 \
man/sd_bus_creds_get_audit_login_uid.3 \
@@ -587,6 +589,7 @@ man/SD_NOTICE.3: man/sd-daemon.3
man/SD_WARNING.3: man/sd-daemon.3
man/init.1: man/systemd.1
man/journald.conf.d.5: man/journald.conf.5
+man/libnss_systemd.so.2.8: man/nss-systemd.8
man/poweroff.8: man/halt.8
man/reboot.8: man/halt.8
man/sd_bus_creds_get_audit_login_uid.3: man/sd_bus_creds_get_pid.3
@@ -1071,6 +1074,9 @@ man/init.html: man/systemd.html
man/journald.conf.d.html: man/journald.conf.html
$(html-alias)
+man/libnss_systemd.so.2.html: man/nss-systemd.html
+ $(html-alias)
+
man/poweroff.html: man/halt.html
$(html-alias)
@@ -2519,6 +2525,7 @@ EXTRA_DIST += \
man/nss-myhostname.xml \
man/nss-mymachines.xml \
man/nss-resolve.xml \
+ man/nss-systemd.xml \
man/os-release.xml \
man/pam_systemd.xml \
man/resolved.conf.xml \
diff --git a/Makefile.am b/Makefile.am
index 7535b505fb..7dd021b56a 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -39,12 +39,12 @@ SUBDIRS = . po
.PRECIOUS: $(TEST_SUITE_LOG) Makefile
LIBUDEV_CURRENT=7
-LIBUDEV_REVISION=4
+LIBUDEV_REVISION=5
LIBUDEV_AGE=6
-LIBSYSTEMD_CURRENT=15
+LIBSYSTEMD_CURRENT=16
LIBSYSTEMD_REVISION=0
-LIBSYSTEMD_AGE=15
+LIBSYSTEMD_AGE=16
# Dirs of external packages
dbuspolicydir=@dbuspolicydir@
@@ -242,6 +242,7 @@ AM_CPPFLAGS = \
-I $(top_srcdir)/src/libsystemd/sd-network \
-I $(top_srcdir)/src/libsystemd/sd-hwdb \
-I $(top_srcdir)/src/libsystemd/sd-device \
+ -I $(top_srcdir)/src/libsystemd/sd-id128 \
-I $(top_srcdir)/src/libsystemd-network \
$(OUR_CPPFLAGS)
@@ -572,7 +573,8 @@ endif
dist_userunit_DATA = \
units/user/basic.target \
units/user/default.target \
- units/user/exit.target
+ units/user/exit.target \
+ units/user/graphical-session.target
nodist_userunit_DATA = \
units/user/systemd-exit.service
@@ -1197,6 +1199,8 @@ libcore_la_SOURCES = \
src/core/load-dropin.h \
src/core/execute.c \
src/core/execute.h \
+ src/core/dynamic-user.c \
+ src/core/dynamic-user.h \
src/core/kill.c \
src/core/kill.h \
src/core/dbus.c \
@@ -3074,9 +3078,7 @@ systemd_nspawn_SOURCES = \
src/core/mount-setup.c \
src/core/mount-setup.h \
src/core/loopback-setup.c \
- src/core/loopback-setup.h \
- src/core/machine-id-setup.c \
- src/core/machine-id-setup.h
+ src/core/loopback-setup.h
nodist_systemd_nspawn_SOURCES = \
src/nspawn/nspawn-gperf.c
@@ -3213,6 +3215,8 @@ libsystemd_internal_la_SOURCES = \
src/libsystemd/sd-netlink/local-addresses.h \
src/libsystemd/sd-netlink/local-addresses.c \
src/libsystemd/sd-id128/sd-id128.c \
+ src/libsystemd/sd-id128/id128-util.h \
+ src/libsystemd/sd-id128/id128-util.c \
src/libsystemd/sd-daemon/sd-daemon.c \
src/libsystemd/sd-login/sd-login.c \
src/libsystemd/sd-path/sd-path.c \
@@ -4997,6 +5001,27 @@ manual_tests += \
test-nss
# ------------------------------------------------------------------------------
+libnss_systemd_la_SOURCES = \
+ src/nss-systemd/nss-systemd.sym \
+ src/nss-systemd/nss-systemd.c
+
+libnss_systemd_la_LDFLAGS = \
+ $(AM_LDFLAGS) \
+ -module \
+ -export-dynamic \
+ -avoid-version \
+ -shared \
+ -shrext .so.2 \
+ -Wl,--version-script=$(top_srcdir)/src/nss-systemd/nss-systemd.sym
+
+libnss_systemd_la_LIBADD = \
+ libsystemd-internal.la \
+ libbasic.la
+
+lib_LTLIBRARIES += \
+ libnss_systemd.la
+
+# ------------------------------------------------------------------------------
if HAVE_MYHOSTNAME
libnss_myhostname_la_SOURCES = \
src/nss-myhostname/nss-myhostname.sym \
diff --git a/NEWS b/NEWS
index bdba05eb2a..7ff4a44835 100644
--- a/NEWS
+++ b/NEWS
@@ -1,26 +1,249 @@
systemd System and Service Manager
+CHANGES WITH 232 in spe
+
+ * Journald's SplitMode=login setting has been deprecated. It has been
+ removed from documentation, and it's use is discouraged. In a future
+ release it will be completely removed, and made equivalent to current
+ default of SplitMode=uid.
+
CHANGES WITH 231:
- * When using systemd's default tmp.mount for /tmp, this will now be
- mounted with the "nosuid" and "nodev" options. This avoids
- privilege escalation attacks that put traps and exploits into /tmp.
- However, this might cause some problems if you e. g. put container
+ * In service units the various ExecXYZ= settings have been extended
+ with an additional special character as first argument of the
+ assigned value: if the character '+' is used the specified command
+ line it will be run with full privileges, regardless of User=,
+ Group=, CapabilityBoundingSet= and similar options. The effect is
+ similar to the existing PermissionsStartOnly= option, but allows
+ configuration of this concept for each executed command line
+ independently.
+
+ * Services may now alter the service watchdog timeout at runtime by
+ sending a WATCHDOG_USEC= message via sd_notify().
+
+ * MemoryLimit= and related unit settings now optionally take percentage
+ specifications. The percentage is taken relative to the amount of
+ physical memory in the system (or in case of containers, the assigned
+ amount of memory). This allows scaling service resources neatly with
+ the amount of RAM available on the system. Similarly, systemd-logind's
+ RuntimeDirectorySize= option now also optionally takes percentage
+ values.
+
+ * In similar fashion TasksMax= takes percentage values now, too. The
+ value is taken relative to the configured maximum number of processes
+ on the system. The per-service task maximum has been changed to 15%
+ using this functionality. (Effectively this is an increase of 512 →
+ 4915 for service units, given the kernel's default pid_max setting.)
+
+ * Calendar time specifications in .timer units now understand a ".."
+ syntax for time ranges. Example: "4..7:10" may now be used for
+ defining a timer that is triggered at 4:10am, 5:10am, 6:10am and
+ 7:10am every day.
+
+ * The InaccessableDirectories=, ReadOnlyDirectories= and
+ ReadWriteDirectories= unit file settings have been renamed to
+ InaccessablePaths=, ReadOnlyPaths= and ReadWritePaths= and may now be
+ applied to all kinds of file nodes, and not just directories, with
+ the exception of symlinks. Specifically these settings may now be
+ used on block and character device nodes, UNIX sockets and FIFOS as
+ well as regular files. The old names of these settings remain
+ available for compatibility.
+
+ * systemd will now log about all service processes it kills forcibly
+ (using SIGKILL) because they remained after the clean shutdown phase
+ of the service completed. This should help identifying services that
+ shut down uncleanly. Moreover if KillUserProcesses= is enabled in
+ systemd-logind's configuration a similar log message is generated for
+ processes killed at the end of each session due to this setting.
+
+ * systemd will now set the $JOURNAL_STREAM environment variable for all
+ services whose stdout/stderr are connected to the Journal (which
+ effectively means by default: all services). The variable contains
+ the device and inode number of the file descriptor used for
+ stdout/stderr. This may be used by invoked programs to detect whether
+ their stdout/stderr is connected to the Journal, in which case they
+ can switch over to direct Journal communication, thus being able to
+ pass extended, structured metadata along with their log messages. As
+ one example, this is now used by glib's logging primitives.
+
+ * When using systemd's default tmp.mount unit for /tmp, the mount point
+ will now be established with the "nosuid" and "nodev" options. This
+ avoids privilege escalation attacks that put traps and exploits into
+ /tmp. However, this might cause problems if you e. g. put container
images or overlays into /tmp; if you need this, override tmp.mount's
"Options=" with a drop-in, or mount /tmp from /etc/fstab with your
desired options.
- * systemd-resolved gained a new "Cache=" option in resolved.conf.
- Local caching makes DNS poisoning attacks slightly easier and allows
- a local user to detect whether any other user on the same machine has
- recently visited a given DNS name (privacy). If that is a concern,
- you can disable local caching with this option at the cost of slower
- DNS resolution (which is particularly expensive with DNSSEC). The
- default continues to be "yes" (i. e. caching is enabled).
-
- Contributions from: ...
-
- — Somewhere, 2016-XX-XX
+ * systemd now supports the "memory" cgroup controller also on
+ cgroupsv2.
+
+ * The systemd-cgtop tool now optionally takes a control group path as
+ command line argument. If specified, the control group list shown is
+ limited to subgroups of that group.
+
+ * The SystemCallFilter= unit file setting gained support for
+ pre-defined, named system call filter sets. For example
+ SystemCallFilter=@clock is now an effective way to make all clock
+ changing-related system calls unavailable to a service. A number of
+ similar pre-defined groups are defined. Writing system call filters
+ for system services is simplified substantially with this new
+ concept. Accordingly, all of systemd's own, long-running services now
+ enable system call filtering based on this, by default.
+
+ * A new service setting MemoryDenyWriteExecute= has been added, taking
+ a boolean value. If turned on, a service may no longer create memory
+ mappings that are writable and executable at the same time. This
+ enhances security for services where this is enabled as it becomes
+ harder to dynamically write and then execute memory in exploited
+ service processes. This option has been enabled for all of systemd's
+ own long-running services.
+
+ * A new RestrictRealtime= service setting has been added, taking a
+ boolean argument. If set the service's processes may no longer
+ acquire realtime scheduling. This improves security as realtime
+ scheduling may otherwise be used to easily freeze the system.
+
+ * systemd-nspawn gained a new switch --notify-ready= taking a boolean
+ value. This may be used for requesting that the system manager inside
+ of the container reports start-up completion to nspawn which then
+ propagates this notification further to the service manager
+ supervising nspawn itself. A related option NotifyReady= in .nspawn
+ files has been added too. This functionality allows ordering of the
+ start-up of multiple containers using the usual systemd ordering
+ primitives.
+
+ * machinectl gained a new command "stop" that is an alias for
+ "terminate".
+
+ * systemd-resolved gained support for contacting DNS servers on
+ link-local IPv6 addresses.
+
+ * If systemd-resolved receives the SIGUSR2 signal it will now flush all
+ its caches. A method call for requesting the same operation has been
+ added to the bus API too, and is made available via "systemd-resolve
+ --flush-caches".
+
+ * systemd-resolve gained a new --status switch. If passed a brief
+ summary of the used DNS configuration with per-interface information
+ is shown.
+
+ * resolved.conf gained a new Cache= boolean option, defaulting to
+ on. If turned off local DNS caching is disabled. This comes with a
+ performance penalty in particular when DNSSEC is enabled. Note that
+ resolved disables its internal caching implicitly anyway, when the
+ configured DNS server is on a host-local IP address such as ::1 or
+ 127.0.0.1, thus automatically avoiding double local caching.
+
+ * systemd-resolved now listens on the local IP address 127.0.0.53:53
+ for DNS requests. This improves compatibility with local programs
+ that do not use the libc NSS or systemd-resolved's bus APIs for name
+ resolution. This minimal DNS service is only available to local
+ programs and does not implement the full DNS protocol, but enough to
+ cover local DNS clients. A new, static resolv.conf file, listing just
+ this DNS server is now shipped in /usr/lib/systemd/resolv.conf. It is
+ now recommended to make /etc/resolv.conf a symlink to this file in
+ order to route all DNS lookups to systemd-resolved, regardless if
+ done via NSS, the bus API or raw DNS packets. Note that this local
+ DNS service is not as fully featured as the libc NSS or
+ systemd-resolved's bus APIs. For example, as unicast DNS cannot be
+ used to deliver link-local address information (as this implies
+ sending a local interface index along), LLMNR/mDNS support via this
+ interface is severely restricted. It is thus strongly recommended for
+ all applications to use the libc NSS API or native systemd-resolved
+ bus API instead.
+
+ * systemd-networkd's bridge support learned a new setting
+ VLANFiltering= for controlling VLAN filtering. Moreover a new section
+ in .network files has been added for configuring VLAN bridging in
+ more detail: VLAN=, EgressUntagged=, PVID= in [BridgeVLAN].
+
+ * systemd-networkd's IPv6 Router Advertisement code now makes use of
+ the DNSSL and RDNSS options. This means IPv6 DNS configuration may
+ now be acquired without relying on DHCPv6. Two new options
+ UseDomains= and UseDNS= have been added to configure this behaviour.
+
+ * systemd-networkd's IPv6AcceptRouterAdvertisements= option has been
+ renamed IPv6AcceptRA=, without altering its behaviour. The old
+ setting name remains available for compatibility reasons.
+
+ * The systemd-networkd VTI/VTI6 tunneling support gained new options
+ Key=, InputKey= and OutputKey=.
+
+ * systemd-networkd gained support for VRF ("Virtual Routing Function")
+ interface configuration.
+
+ * "systemctl edit" may now be used to create new unit files by
+ specifying the --force switch.
+
+ * sd-event gained a new function sd_event_get_iteration() for
+ requesting the current iteration counter of the event loop. It starts
+ at zero and is increased by one with each event loop iteration.
+
+ * A new rpm macro %systemd_ordering is provided by the macros.systemd
+ file. It can be used in lieu of %systemd_requires in packages which
+ don't use any systemd functionality and are intended to be installed
+ in minimal containers without systemd present. This macro provides
+ ordering dependecies to ensure that if the package is installed in
+ the same rpm transaction as systemd, systemd will be installed before
+ the scriptlets for the package are executed, allowing unit presets
+ to be handled.
+
+ New macros %_systemdgeneratordir and %_systemdusergeneratordir have
+ been added to simplify packaging of generators.
+
+ * The os-release file gained VERSION_CODENAME field for the
+ distribution nickname (e.g. VERSION_CODENAME=woody).
+
+ * New udev property UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG=1
+ can be set to disable parsing of metadata and the creation
+ of persistent symlinks for that device.
+
+ * The v230 change to tag framebuffer devices (/dev/fb*) with "uaccess"
+ to make them available to logged-in users has been reverted.
+
+ * Much of the common code of the various systemd components is now
+ built into an internal shared library libsystemd-shared-231.so
+ (incorporating the systemd version number in the name, to be updated
+ with future releases) that the components link to. This should
+ decrease systemd footprint both in memory during runtime and on
+ disk. Note that the shared library is not for public use, and is
+ neither API not ABI stable, but is likely to change with every new
+ released update. Packagers need to make sure that binaries
+ linking to libsystemd-shared.so are updated in step with the
+ library.
+
+ * Configuration for "mkosi" is now part of the systemd
+ repository. mkosi is a tool to easily build legacy-free OS images,
+ and is available on github: https://github.com/systemd/mkosi. If
+ "mkosi" is invoked in the build tree a new raw OS image is generated
+ incorporating the systemd sources currently being worked on and a
+ clean, fresh distribution installation. The generated OS image may be
+ booted up with "systemd-nspawn -b -i", qemu-kvm or on any physcial
+ UEFI PC. This functionality is particularly useful to easily test
+ local changes made to systemd in a pristine, defined environment. See
+ HACKING for details.
+
+ Contributions from: Alban Crequy, Alessandro Puccetti, Alessio Igor
+ Bogani, Alexander Kuleshov, Alexander Kurtz, Alex Gaynor, Andika
+ Triwidada, Andreas Pokorny, Andreas Rammhold, Andrew Jeddeloh, Ansgar
+ Burchardt, Atrotors, Benjamin Drung, Brian Boylston, Christian Hesse,
+ Christian Rebischke, Daniele Medri, Daniel Mack, Dave Reisner, David
+ Herrmann, David Michael, Djalal Harouni, Douglas Christman, Elias
+ Probst, Evgeny Vereshchagin, Federico Mena Quintero, Felipe Sateler,
+ Franck Bui, Harald Hoyer, Ian Lee, Ivan Shapovalov, Jakub Wilk, Jan
+ Janssen, Jean-Sébastien Bour, John Paul Adrian Glaubitz, Jouke
+ Witteveen, Kai Ruhnau, kpengboy, Kyle Walker, Lénaïc Huard, Lennart
+ Poettering, Luca Bruno, Lukas Lösche, Lukáš Nykrýn, mahkoh, Marcel
+ Holtmann, Martin Pitt, Marty Plummer, Matthieu Codron, Max Prokhorov,
+ Michael Biebl, Michael Karcher, Michael Olbrich, Michał Bartoszkiewicz,
+ Michal Sekletar, Michal Soltys, Minkyung, Muhammet Kara, mulkieran,
+ Otto Wallenius, Pablo Lezaeta Reyes, Peter Hutterer, Ronny Chevalier,
+ Rusty Bird, Stef Walter, Susant Sahani, Tejun Heo, Thomas Blume, Thomas
+ Haller, Thomas H. P. Andersen, Tobias Jungel, Tom Gundersen, Tom Yan,
+ Topi Miettinen, Torstein Husebø, Valentin Vidić, Viktar Vaŭčkievič,
+ WaLyong Cho, Weng Xuetian, Werner Fink, Zbigniew Jędrzejewski-Szmek
+
+ — Berlin, 2016-07-25
CHANGES WITH 230:
diff --git a/README b/README
index ca8993cb12..19c15a70b0 100644
--- a/README
+++ b/README
@@ -201,7 +201,7 @@ USERS AND GROUPS:
"systemd-coredump" system user and group to exist.
NSS:
- systemd ships with three NSS modules:
+ systemd ships with four glibc NSS modules:
nss-myhostname resolves the local hostname to locally
configured IP addresses, as well as "localhost" to
@@ -210,15 +210,22 @@ NSS:
nss-resolve enables DNS resolution via the systemd-resolved
DNS/LLMNR caching stub resolver "systemd-resolved".
- nss-mymachines enables resolution of all local containers
- registered with machined to their respective IP addresses.
+ nss-mymachines enables resolution of all local containers registered
+ with machined to their respective IP addresses. It also maps UID/GIDs
+ ranges used by containers to useful names.
- To make use of these NSS modules, please add them to the
- "hosts: " line in /etc/nsswitch.conf. The "resolve" module
- should replace the glibc "dns" module in this file.
+ nss-systemd enables resolution of all dynamically allocated service
+ users. (See the DynamicUser= setting in unit files.)
- The three modules should be used in the following order:
+ To make use of these NSS modules, please add them to the "hosts:",
+ "passwd:" and "group:" lines in /etc/nsswitch.conf. The "resolve"
+ module should replace the glibc "dns" module in this file (and don't
+ worry, it chain-loads the "dns" module if it can't talk to resolved).
+ The four modules should be used in the following order:
+
+ passwd: compat mymachines systemd
+ group: compat mymachines systemd
hosts: files mymachines resolve myhostname
SYSV INIT.D SCRIPTS:
diff --git a/TODO b/TODO
index ef25ef578e..bb36522bf9 100644
--- a/TODO
+++ b/TODO
@@ -33,6 +33,29 @@ Janitorial Clean-ups:
Features:
+* RemoveIPC= in unit files for removing POSIX/SysV IPC objects
+
+* Set SERVICE_RESULT= as env var while running ExecStop=
+
+* Introduce ProtectSystem=strict for making the entire OS hierarchy read-only
+ except for a select few
+
+* nspawn: start UID allocation loop from hash of container name
+
+* in the DynamicUser=1 nss module, also map "nobody" and "root" statically
+
+* pid1: log about all processes we kill with with SIGKILL or in abandoned scopes, as this should normally not happen
+
+* nspawn: support that /proc, /sys/, /dev are pre-mounted
+
+* nspawn: mount esp, so that bootctl can work
+
+* define gpt header bits to select volatility mode
+
+* nspawn: mount loopback filesystems with "discard"
+
+* Make TasksMax= take percentages, taken relative to the pids_max sysctl and pids.max cgroup limit
+
* ProtectKernelLogs= (drops CAP_SYSLOG, add seccomp for syslog() syscall, and DeviceAllow to /dev/kmsg) in service files
* ProtectClock= (drops CAP_SYS_TIMES, adds seecomp filters for settimeofday, adjtimex), sets DeviceAllow o /dev/rtc
@@ -46,7 +69,7 @@ Features:
* PrivateUsers= which maps the all user ids except root and the one specified
in User= to nobody
-* Add AllocateUser= for allowing dynamic user ids per-service
+* ProtectControlGroups= which mounts all of /sys/fs/cgroup read-only
* Add DataDirectory=, CacheDirectory= and LogDirectory= to match
RuntimeDirectory=, and create it as necessary when starting a service, owned by the right user.
@@ -60,8 +83,6 @@ Features:
* RestrictNamespaces= or so in services (taking away the ability to create namespaces, with setns, unshare, clone)
-* nspawn: make /proc/sys/net writable?
-
* make sure the ratelimit object can deal with USEC_INFINITY as way to turn off things
* journalctl: make sure -f ends when the container indicated by -M terminates
diff --git a/configure.ac b/configure.ac
index dd5f51fd7c..a86deca471 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
AC_PREREQ([2.64])
AC_INIT([systemd],
- [230],
+ [231],
[http://github.com/systemd/systemd/issues],
[systemd],
[http://www.freedesktop.org/wiki/Software/systemd])
@@ -211,9 +211,12 @@ AS_CASE([$CC], [*clang*],
-Wno-gnu-variable-sized-type-not-at-end \
])])
+AC_ARG_ENABLE([lto], [AS_HELP_STRING([--disable-lto], [disable -flto])],
+ [], [enable_lto=yes])
AS_CASE([$CFLAGS], [*-O[[12345sz\ ]]*],
- [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
- -flto])],
+ [AS_IF([test "x$enable_lto" = "xyes"],
+ [CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [-flto])],
+ [AC_MSG_RESULT([disabling -flto as requested])])],
[AC_MSG_RESULT([skipping -flto, optimization not enabled])])
AC_SUBST([OUR_CFLAGS], "$with_cflags $sanitizer_cflags")
diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
index d852e7b8b3..dd63627328 100644
--- a/hwdb/20-OUI.hwdb
+++ b/hwdb/20-OUI.hwdb
@@ -941,6 +941,63 @@ OUI:70B3D57B4*
OUI:70B3D5B11*
ID_OUI_FROM_DATABASE=CAB S.R.L.
+OUI:70B3D5513*
+ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+
+OUI:70B3D5F99*
+ ID_OUI_FROM_DATABASE=TEX COMPUTER SRL
+
+OUI:70B3D53A7*
+ ID_OUI_FROM_DATABASE=Varikorea
+
+OUI:70B3D5174*
+ ID_OUI_FROM_DATABASE=Carlson Wireless Technologies Inc.
+
+OUI:70B3D57D5*
+ ID_OUI_FROM_DATABASE=SICS Swedish ICT
+
+OUI:70B3D5448*
+ ID_OUI_FROM_DATABASE=B/E Aerospace, Inc.
+
+OUI:70B3D5A53*
+ ID_OUI_FROM_DATABASE=GS Industrie-Elektronik GmbH
+
+OUI:70B3D5BE3*
+ ID_OUI_FROM_DATABASE=Saratov Electrounit Production Plant named after Sergo Ordzhonikidze, OJSC
+
+OUI:70B3D5AAD*
+ ID_OUI_FROM_DATABASE=Bartec GmbH
+
+OUI:70B3D5E82*
+ ID_OUI_FROM_DATABASE=RF Track
+
+OUI:70B3D585D*
+ ID_OUI_FROM_DATABASE=ATHREYA INC
+
+OUI:70B3D5821*
+ ID_OUI_FROM_DATABASE=HL2 group
+
+OUI:70B3D5938*
+ ID_OUI_FROM_DATABASE=JETI Technische Instrumente GmbH
+
+OUI:70B3D5A21*
+ ID_OUI_FROM_DATABASE=PPI Inc.
+
+OUI:70B3D5E4F*
+ ID_OUI_FROM_DATABASE=RWS Automation GmbH
+
+OUI:70B3D55C4*
+ ID_OUI_FROM_DATABASE=TATTILE SRL
+
+OUI:70B3D567B*
+ ID_OUI_FROM_DATABASE=Stesalit Systems Ltd
+
+OUI:70B3D51C8*
+ ID_OUI_FROM_DATABASE=LDA audio video profesional S.L.
+
+OUI:70B3D5142*
+ ID_OUI_FROM_DATABASE=DAVE SRL
+
OUI:70B3D5D60*
ID_OUI_FROM_DATABASE=Flintab AB
@@ -1808,6 +1865,48 @@ OUI:70B3D509D*
OUI:70B3D5FB0*
ID_OUI_FROM_DATABASE=Rohde&Schwarz Topex SA
+OUI:70B3D5885*
+ ID_OUI_FROM_DATABASE=QuirkLogic
+
+OUI:70B3D5274*
+ ID_OUI_FROM_DATABASE=Stercom Power Solutions GmbH
+
+OUI:70B3D5615*
+ ID_OUI_FROM_DATABASE=JSC OTZVUK
+
+OUI:70B3D5889*
+ ID_OUI_FROM_DATABASE=Innovative Circuit Technology
+
+OUI:70B3D558D*
+ ID_OUI_FROM_DATABASE=DORLET SAU
+
+OUI:70B3D5FAA*
+ ID_OUI_FROM_DATABASE=LogiM GmbH Software und Entwicklung
+
+OUI:70B3D5854*
+ ID_OUI_FROM_DATABASE=Adimec Advanced Image Systems
+
+OUI:70B3D5FB3*
+ ID_OUI_FROM_DATABASE=3PS Inc
+
+OUI:70B3D5CAA*
+ ID_OUI_FROM_DATABASE=Bel Power Solutions GmbH
+
+OUI:70B3D5B9E*
+ ID_OUI_FROM_DATABASE=POLSYSTEM SI SP. Z O.O., S.K.A.
+
+OUI:70B3D54B0*
+ ID_OUI_FROM_DATABASE=Tecogen Inc.
+
+OUI:70B3D54A7*
+ ID_OUI_FROM_DATABASE=aelettronica group srl
+
+OUI:70B3D5238*
+ ID_OUI_FROM_DATABASE=Arete Associates
+
+OUI:70B3D59B6*
+ ID_OUI_FROM_DATABASE=Intercomp S.p.A.
+
OUI:70B3D510C*
ID_OUI_FROM_DATABASE=Vocality International Ltd
@@ -1820,6 +1919,18 @@ OUI:70B3D5307*
OUI:70B3D59FA*
ID_OUI_FROM_DATABASE=Ideas srl
+OUI:70B3D5649*
+ ID_OUI_FROM_DATABASE=swissled technologies AG
+
+OUI:70B3D5C0E*
+ ID_OUI_FROM_DATABASE=SYSDEV Srl
+
+OUI:70B3D54C7*
+ ID_OUI_FROM_DATABASE=SOLVERIS sp. z o.o.
+
+OUI:70B3D57A4*
+ ID_OUI_FROM_DATABASE=Potter Electric Signal Co. LLC
+
OUI:70B3D5494*
ID_OUI_FROM_DATABASE=Schildknecht AG
@@ -1895,9 +2006,6 @@ OUI:70B3D5383*
OUI:70B3D59F6*
ID_OUI_FROM_DATABASE=Edgeware AB
-OUI:70B3D5E0F*
- ID_OUI_FROM_DATABASE=Vtron Pty Ltd
-
OUI:70B3D5504*
ID_OUI_FROM_DATABASE=Xsight Systems Ltd.
@@ -2675,6 +2783,81 @@ OUI:70B3D53D5*
OUI:70B3D5D11*
ID_OUI_FROM_DATABASE=EREE Electronique
+OUI:70B3D51B5*
+ ID_OUI_FROM_DATABASE=StarBridge, Inc.
+
+OUI:70B3D55CD*
+ ID_OUI_FROM_DATABASE=MVT Video Technologies R + H Maedler GbR
+
+OUI:70B3D5AF7*
+ ID_OUI_FROM_DATABASE=DimoSystems BV
+
+OUI:70B3D59D2*
+ ID_OUI_FROM_DATABASE=ACS MOTION CONTROL
+
+OUI:70B3D5A5E*
+ ID_OUI_FROM_DATABASE=ConectaIP Tecnologia S.L.
+
+OUI:70B3D512C*
+ ID_OUI_FROM_DATABASE=CIELLE S.R.L.
+
+OUI:70B3D5486*
+ ID_OUI_FROM_DATABASE=ChongQing JianTao Technology Co., Ltd.
+
+OUI:70B3D512E*
+ ID_OUI_FROM_DATABASE=GreenFlux
+
+OUI:70B3D5B59*
+ ID_OUI_FROM_DATABASE=FutureTechnologyLaboratories INC.
+
+OUI:70B3D58B3*
+ ID_OUI_FROM_DATABASE=Firefly RFID Solutions
+
+OUI:70B3D5599*
+ ID_OUI_FROM_DATABASE=LECO Corporation
+
+OUI:70B3D5896*
+ ID_OUI_FROM_DATABASE=Shanghai Longpal Communication Equipment Co., Ltd.
+
+OUI:70B3D5692*
+ ID_OUI_FROM_DATABASE=HOSIN INDUSTRIAL LIMITED
+
+OUI:70B3D5AE7*
+ ID_OUI_FROM_DATABASE=E-T-A Elektrotechnische Apparate GmbH
+
+OUI:70B3D5400*
+ ID_OUI_FROM_DATABASE=Vtron Pty Ltd
+
+OUI:70B3D5E0F*
+ ID_OUI_FROM_DATABASE=Vtron Pty Ltd
+
+OUI:70B3D512F*
+ ID_OUI_FROM_DATABASE=DSP4YOU LTd
+
+OUI:70B3D59B1*
+ ID_OUI_FROM_DATABASE=Aplex Technology Inc.
+
+OUI:70B3D5CA4*
+ ID_OUI_FROM_DATABASE=Netemera Sp. z o.o.
+
+OUI:70B3D571B*
+ ID_OUI_FROM_DATABASE=elsys
+
+OUI:70B3D548F*
+ ID_OUI_FROM_DATABASE=Seiwa Giken
+
+OUI:70B3D5DDC*
+ ID_OUI_FROM_DATABASE=Syscom Instruments SA
+
+OUI:70B3D5C15*
+ ID_OUI_FROM_DATABASE=Sensobox GmbH
+
+OUI:70B3D5D2F*
+ ID_OUI_FROM_DATABASE=L.I.F.E. Corporation SA
+
+OUI:70B3D536A*
+ ID_OUI_FROM_DATABASE=Becton Dickinson
+
OUI:70B3D566B*
ID_OUI_FROM_DATABASE=Innitive B.V.
@@ -3044,9 +3227,6 @@ OUI:70B3D5610*
OUI:70B3D5ECE*
ID_OUI_FROM_DATABASE=COMM-connect A/S
-OUI:70B3D53EF*
- ID_OUI_FROM_DATABASE=Vtron Pty Ltd
-
OUI:70B3D5EB2*
ID_OUI_FROM_DATABASE=Shooter Detection Systems
@@ -3461,6 +3641,48 @@ OUI:70B3D59F3*
OUI:70B3D5AAC*
ID_OUI_FROM_DATABASE=SensoTec GmbH
+OUI:70B3D5F9A*
+ ID_OUI_FROM_DATABASE=Krabbenhøft og Ingolfsson
+
+OUI:70B3D5349*
+ ID_OUI_FROM_DATABASE=SLAT
+
+OUI:70B3D5D91*
+ ID_OUI_FROM_DATABASE=FoodALYT GmbH
+
+OUI:70B3D53AE*
+ ID_OUI_FROM_DATABASE=Exicom Technologies fze
+
+OUI:70B3D57DD*
+ ID_OUI_FROM_DATABASE=Excel Medical Electronics LLC
+
+OUI:70B3D5E71*
+ ID_OUI_FROM_DATABASE=SiS Technology
+
+OUI:70B3D5EA0*
+ ID_OUI_FROM_DATABASE=PARK24
+
+OUI:70B3D5D05*
+ ID_OUI_FROM_DATABASE=Colmek
+
+OUI:70B3D5BF5*
+ ID_OUI_FROM_DATABASE=Acacia Research
+
+OUI:70B3D5499*
+ ID_OUI_FROM_DATABASE=Pycom Ltd
+
+OUI:70B3D521E*
+ ID_OUI_FROM_DATABASE=Hildebrand Technology Limited
+
+OUI:70B3D5D67*
+ ID_OUI_FROM_DATABASE=ALPHA Corporation
+
+OUI:70B3D5C4F*
+ ID_OUI_FROM_DATABASE=AE Van de Vliet BVBA
+
+OUI:70B3D5BD9*
+ ID_OUI_FROM_DATABASE=SolwayTech
+
OUI:70B3D58DB*
ID_OUI_FROM_DATABASE=Kratos Analytical Ltd
@@ -3485,6 +3707,60 @@ OUI:70B3D56C5*
OUI:70B3D5FE9*
ID_OUI_FROM_DATABASE=Camsat Przemysław Gralak
+OUI:70B3D54C5*
+ ID_OUI_FROM_DATABASE=Moving iMage Technologies LLC
+
+OUI:70B3D591A*
+ ID_OUI_FROM_DATABASE=Fujian Landfone Information Technology Co.,Ltd
+
+OUI:70B3D59EC*
+ ID_OUI_FROM_DATABASE=eSoftThings
+
+OUI:70B3D5761*
+ ID_OUI_FROM_DATABASE=Critical Link LLC
+
+OUI:70B3D5C22*
+ ID_OUI_FROM_DATABASE=Skyriver Communications Inc.
+
+OUI:70B3D53BB*
+ ID_OUI_FROM_DATABASE=A-M Systems
+
+OUI:70B3D5B44*
+ ID_OUI_FROM_DATABASE=ENTEC Electric & Electronic Co., LTD.
+
+OUI:70B3D5584*
+ ID_OUI_FROM_DATABASE=Sertone, a division of Opti-Knights Ltd
+
+OUI:70B3D53EF*
+ ID_OUI_FROM_DATABASE=Vtron Pty Ltd
+
+OUI:70B3D57C2*
+ ID_OUI_FROM_DATABASE=Morgan Schaffer Inc.
+
+OUI:70B3D5697*
+ ID_OUI_FROM_DATABASE=Alazar Technologies Inc.
+
+OUI:70B3D561A*
+ ID_OUI_FROM_DATABASE=Rocket Lab Ltd.
+
+OUI:70B3D5855*
+ ID_OUI_FROM_DATABASE=CRDE
+
+OUI:70B3D5F8D*
+ ID_OUI_FROM_DATABASE=Flextronics Canafa Design Services
+
+OUI:70B3D59AE*
+ ID_OUI_FROM_DATABASE=Volansys technologies pvt ltd
+
+OUI:70B3D542C*
+ ID_OUI_FROM_DATABASE=D.Marchiori Srl
+
+OUI:70B3D5CE5*
+ ID_OUI_FROM_DATABASE=GridBridge Inc
+
+OUI:70B3D51EF*
+ ID_OUI_FROM_DATABASE=ADTEK
+
OUI:70B3D58AB*
ID_OUI_FROM_DATABASE=EMAC, Inc.
@@ -4298,6 +4574,33 @@ OUI:70B3D5296*
OUI:70B3D5167*
ID_OUI_FROM_DATABASE=Eiden Co.,Ltd.
+OUI:70B3D5A4A*
+ ID_OUI_FROM_DATABASE=Beijing Arrow SEED Technology Co,.Ltd.
+
+OUI:70B3D585B*
+ ID_OUI_FROM_DATABASE=TSUBAKIMOTO CHAIN CO.
+
+OUI:70B3D56FF*
+ ID_OUI_FROM_DATABASE=AKEO PLUS
+
+OUI:70B3D589B*
+ ID_OUI_FROM_DATABASE=ControlWorks, Inc.
+
+OUI:70B3D568F*
+ ID_OUI_FROM_DATABASE=PEEK TRAFFIC
+
+OUI:70B3D55AB*
+ ID_OUI_FROM_DATABASE=Sea Air and Land Communications Ltd
+
+OUI:70B3D5CD2*
+ ID_OUI_FROM_DATABASE=HBH Microwave GmbH
+
+OUI:70B3D5B23*
+ ID_OUI_FROM_DATABASE=Supervision Test et Pilotage
+
+OUI:70B3D5178*
+ ID_OUI_FROM_DATABASE=Gamber Johnson-LLC
+
OUI:70B3D57B6*
ID_OUI_FROM_DATABASE=Amada Miyachi America Inc.
@@ -4328,6 +4631,24 @@ OUI:70B3D51DA*
OUI:70B3D555B*
ID_OUI_FROM_DATABASE=Procon Electronics Pty Ltd
+OUI:70B3D5461*
+ ID_OUI_FROM_DATABASE=TESEC Corporation
+
+OUI:70B3D57FB*
+ ID_OUI_FROM_DATABASE=db Broadcast Products Ltd
+
+OUI:70B3D5CED*
+ ID_OUI_FROM_DATABASE=Advanced Products Corporation Pte Ltd
+
+OUI:70B3D5DB0*
+ ID_OUI_FROM_DATABASE=Arnouse Digital Devices Corp
+
+OUI:70B3D5CCD*
+ ID_OUI_FROM_DATABASE=Suzhou PowerCore Technology Co.,Ltd.
+
+OUI:70B3D5163*
+ ID_OUI_FROM_DATABASE=BHARAT HEAVY ELECTRICALS LIMITED
+
OUI:1C8776D*
ID_OUI_FROM_DATABASE=Qivivo
@@ -4931,6 +5252,57 @@ OUI:58E8768*
OUI:58E8766*
ID_OUI_FROM_DATABASE=DivioTec Inc.
+OUI:84E0F4B*
+ ID_OUI_FROM_DATABASE=Orchard Electronics Co., Ltd.
+
+OUI:84E0F4C*
+ ID_OUI_FROM_DATABASE=AIMTRON CORPORATION
+
+OUI:84E0F45*
+ ID_OUI_FROM_DATABASE=Hangzhou Nationalchip Science & Technology Co.,Ltd.
+
+OUI:84E0F41*
+ ID_OUI_FROM_DATABASE=MedicusTek Inc.
+
+OUI:70F8E77*
+ ID_OUI_FROM_DATABASE=NST Technology Limited Co.,Ltd.
+
+OUI:F81D786*
+ ID_OUI_FROM_DATABASE=Zengge Co., Limited
+
+OUI:F81D784*
+ ID_OUI_FROM_DATABASE=Digital Imaging Technology
+
+OUI:F81D781*
+ ID_OUI_FROM_DATABASE=ADTECHNO Inc.
+
+OUI:383A211*
+ ID_OUI_FROM_DATABASE=HOBART GmbH
+
+OUI:383A212*
+ ID_OUI_FROM_DATABASE=Shenzhen HS Fiber Communication Equipment CO., LTD
+
+OUI:383A217*
+ ID_OUI_FROM_DATABASE=Chengdu Krosslan Technology Inc.
+
+OUI:AC64DDA*
+ ID_OUI_FROM_DATABASE=Bluewave Global Manufacturing Limited
+
+OUI:AC64DDB*
+ ID_OUI_FROM_DATABASE=Groupe Citypassenger Inc
+
+OUI:4CE173B*
+ ID_OUI_FROM_DATABASE=Shanghai Ehong Technology Co.,Ltd
+
+OUI:4CE1737*
+ ID_OUI_FROM_DATABASE=Ersúles Limited
+
+OUI:4CE1739*
+ ID_OUI_FROM_DATABASE=Shenzhen Evolution Dynamics Co., Ltd.
+
+OUI:1CC0E13*
+ ID_OUI_FROM_DATABASE=HANGZHOU SOFTEL OPTIC CO., LTD
+
OUI:1C8776C*
ID_OUI_FROM_DATABASE=Strone Technology
@@ -5516,6 +5888,60 @@ OUI:2836381*
OUI:F0ACD7B*
ID_OUI_FROM_DATABASE=Zhejiang Makepower Electronics,Inc.
+OUI:84E0F48*
+ ID_OUI_FROM_DATABASE=RAY Co.,LTD
+
+OUI:84E0F49*
+ ID_OUI_FROM_DATABASE=SHENZHEN HCN.ELECTRONICS CO.,LTD.
+
+OUI:84E0F4A*
+ ID_OUI_FROM_DATABASE=iSolution Technologies Co.,Ltd.
+
+OUI:70F8E74*
+ ID_OUI_FROM_DATABASE=CLIP Inc.
+
+OUI:70F8E70*
+ ID_OUI_FROM_DATABASE=SHENZHEN Xin JiuNing Electronics Co Ltd
+
+OUI:70F8E79*
+ ID_OUI_FROM_DATABASE=Kontech Electronics Co., Ltd
+
+OUI:F81D78C*
+ ID_OUI_FROM_DATABASE=SHENZHUOYUE TECHNOLOGY.,LTD
+
+OUI:70F8E71*
+ ID_OUI_FROM_DATABASE=System Level Solutions (India) Pvt.
+
+OUI:F81D78A*
+ ID_OUI_FROM_DATABASE=AVPro Global Holdings LLC
+
+OUI:383A21B*
+ ID_OUI_FROM_DATABASE=Pactron
+
+OUI:383A214*
+ ID_OUI_FROM_DATABASE=Dongguan Innovation Technology Co Ltd
+
+OUI:383A21A*
+ ID_OUI_FROM_DATABASE=Foresight Sports
+
+OUI:383A218*
+ ID_OUI_FROM_DATABASE=Alicat Scientific
+
+OUI:AC64DD1*
+ ID_OUI_FROM_DATABASE=JSC InfoTeCS
+
+OUI:383A21E*
+ ID_OUI_FROM_DATABASE=SDNware technology co.,LTD
+
+OUI:AC64DD4*
+ ID_OUI_FROM_DATABASE=8Cups
+
+OUI:AC64DDC*
+ ID_OUI_FROM_DATABASE=Beijing Hamigua Technology Co., Ltd.
+
+OUI:4CE1730*
+ ID_OUI_FROM_DATABASE=Beijing Sutongwang E-Business Co., Ltd
+
OUI:F0ACD72*
ID_OUI_FROM_DATABASE=QUANTUM POWER SYSTEMS
@@ -5540,6 +5966,27 @@ OUI:C0D3912*
OUI:C0D391B*
ID_OUI_FROM_DATABASE=Private
+OUI:84E0F40*
+ ID_OUI_FROM_DATABASE=ShenZhen Panrich Technology Limited
+
+OUI:AC64DD5*
+ ID_OUI_FROM_DATABASE=SHANGHAI ZTE TECHNOLOGIES CO.,LTD
+
+OUI:AC64DD8*
+ ID_OUI_FROM_DATABASE=PFDC ELANCYL
+
+OUI:AC64DDE*
+ ID_OUI_FROM_DATABASE=DIGIBIRD TECHNOLOGY CO., LTD.
+
+OUI:4CE1736*
+ ID_OUI_FROM_DATABASE=CHINA CNR CORPORATION LIMITED DALIAN ELECTRIC TRACTION R&D CENTER
+
+OUI:4CE173D*
+ ID_OUI_FROM_DATABASE=KTC(K-TEL)
+
+OUI:4CE173E*
+ ID_OUI_FROM_DATABASE=Plus One Japan Limited
+
OUI:1C87765*
ID_OUI_FROM_DATABASE=Zhuhai MYZR Technology Co.,Ltd
@@ -6206,6 +6653,69 @@ OUI:58E8764*
OUI:C0D3911*
ID_OUI_FROM_DATABASE=B9Creations
+OUI:C0D3910*
+ ID_OUI_FROM_DATABASE=Fuzhou Jinshi Technology Co.,Ltd.
+
+OUI:C0D391A*
+ ID_OUI_FROM_DATABASE=Alpha Audiotronics, Inc.
+
+OUI:84E0F47*
+ ID_OUI_FROM_DATABASE=Dantherm
+
+OUI:84E0F4E*
+ ID_OUI_FROM_DATABASE=Scale-Tec Ltd.
+
+OUI:70F8E72*
+ ID_OUI_FROM_DATABASE=VOXX International
+
+OUI:70F8E7A*
+ ID_OUI_FROM_DATABASE=TiVACI CORPORATION PTE LTD
+
+OUI:70F8E76*
+ ID_OUI_FROM_DATABASE=Flexim Security Oy
+
+OUI:F81D788*
+ ID_OUI_FROM_DATABASE=TELEOFIS
+
+OUI:F81D785*
+ ID_OUI_FROM_DATABASE=DACONS
+
+OUI:F81D78B*
+ ID_OUI_FROM_DATABASE=SigmaConnectivityAB
+
+OUI:F81D780*
+ ID_OUI_FROM_DATABASE=Dongguan Shun Hing Plastics Limited
+
+OUI:F81D78E*
+ ID_OUI_FROM_DATABASE=GUANGDONG ENOK COMMUNICATION CO., LTD.
+
+OUI:383A215*
+ ID_OUI_FROM_DATABASE=OOO NPP Uraltechnologiya
+
+OUI:383A21C*
+ ID_OUI_FROM_DATABASE=Mission Embedded GmbH
+
+OUI:383A219*
+ ID_OUI_FROM_DATABASE=Skylark Wireless LLC
+
+OUI:AC64DD2*
+ ID_OUI_FROM_DATABASE=Shenzhen PuHua Technology Co., Ltd
+
+OUI:AC64DDD*
+ ID_OUI_FROM_DATABASE=HMicro Inc
+
+OUI:AC64DD0*
+ ID_OUI_FROM_DATABASE=Jia-Teng
+
+OUI:4CE1731*
+ ID_OUI_FROM_DATABASE=Datastorm Technologies Inc.
+
+OUI:4CE1733*
+ ID_OUI_FROM_DATABASE=outpaceIO
+
+OUI:4CE173C*
+ ID_OUI_FROM_DATABASE=REMONDE NETWORK
+
OUI:1C8776B*
ID_OUI_FROM_DATABASE=Hekatron Vertriebs GmbH
@@ -6662,9 +7172,6 @@ OUI:7419F82*
OUI:1C88793*
ID_OUI_FROM_DATABASE=Shenzhen Xiaoxi Technology Co., Ltd.
-OUI:1C88798*
- ID_OUI_FROM_DATABASE=Toshiba Toko meter systems co., LTD.
-
OUI:1C8879A*
ID_OUI_FROM_DATABASE=ITW-FEG
@@ -6866,6 +7373,24 @@ OUI:2CD141F*
OUI:2836388*
ID_OUI_FROM_DATABASE=Havells India Limited
+OUI:84E0F44*
+ ID_OUI_FROM_DATABASE=PetroInTrade
+
+OUI:84E0F43*
+ ID_OUI_FROM_DATABASE=ASL Intercom B.V.
+
+OUI:1C88798*
+ ID_OUI_FROM_DATABASE=Toshiba Toko Meter Systems Co., LTD.
+
+OUI:383A210*
+ ID_OUI_FROM_DATABASE=R3C Information(Shenzhen) Co.,Ltd.
+
+OUI:4CE1734*
+ ID_OUI_FROM_DATABASE=Huizhou Dehong Technology Co., Ltd.
+
+OUI:4CE173A*
+ ID_OUI_FROM_DATABASE=jvi
+
OUI:F0ACD70*
ID_OUI_FROM_DATABASE=Guilin glsun Science and Tech Co.,LTD
@@ -6878,6 +7403,54 @@ OUI:58E8760*
OUI:58E8761*
ID_OUI_FROM_DATABASE=Beijing Perabytes IS Technology Co., Ltd
+OUI:C0D3914*
+ ID_OUI_FROM_DATABASE=Vernier Software & Technology
+
+OUI:C0D3919*
+ ID_OUI_FROM_DATABASE=xxter bv
+
+OUI:C0D391E*
+ ID_OUI_FROM_DATABASE=SAMSARA NETWORKS INC
+
+OUI:84E0F4D*
+ ID_OUI_FROM_DATABASE=Logos01 Srl
+
+OUI:70F8E7E*
+ ID_OUI_FROM_DATABASE=CUAV
+
+OUI:70F8E73*
+ ID_OUI_FROM_DATABASE=Dr. Simon Consulting GmbH
+
+OUI:70F8E7C*
+ ID_OUI_FROM_DATABASE=Fixstars Corporation
+
+OUI:F81D783*
+ ID_OUI_FROM_DATABASE=SHANGHAI SUN TELECOMMUNICATION CO., LTD.
+
+OUI:F81D78D*
+ ID_OUI_FROM_DATABASE=Tofino
+
+OUI:F81D787*
+ ID_OUI_FROM_DATABASE=WUHAN GUIDE INFRARED CO.,LTD
+
+OUI:F81D789*
+ ID_OUI_FROM_DATABASE=Ophrys Systèmes
+
+OUI:383A21D*
+ ID_OUI_FROM_DATABASE=Colooc AB
+
+OUI:383A213*
+ ID_OUI_FROM_DATABASE=Shanghai Greatwall Safety System Co.,Ltd
+
+OUI:AC64DD7*
+ ID_OUI_FROM_DATABASE=Wittmann Kunststoffgeräte GmbH
+
+OUI:AC64DD9*
+ ID_OUI_FROM_DATABASE=Micro Connect Pty Ltd
+
+OUI:AC64DD3*
+ ID_OUI_FROM_DATABASE=infypower Co., Ltd
+
OUI:1C87740*
ID_OUI_FROM_DATABASE=Philips Personal Health Solutions
@@ -7085,9 +7658,6 @@ OUI:0CEFAF7*
OUI:A44F29E*
ID_OUI_FROM_DATABASE=Neotech Systems Pvt. Ltd.
-OUI:0CEFAF0*
- ID_OUI_FROM_DATABASE=Assurelink
-
OUI:2C265F9*
ID_OUI_FROM_DATABASE=Brüel & Kjaer Vibro GmbH
@@ -7418,11 +7988,35 @@ OUI:D0D94FE*
OUI:8C192D6*
ID_OUI_FROM_DATABASE=smartHome Partner GmbH
+OUI:8C192DB*
+ ID_OUI_FROM_DATABASE=Abside Networks, Inc.
+
+OUI:70F8E7D*
+ ID_OUI_FROM_DATABASE=System-on-Chip engineering
+
+OUI:70F8E78*
+ ID_OUI_FROM_DATABASE=Eclipse Security
+
+OUI:70F8E75*
+ ID_OUI_FROM_DATABASE=Beijing Eehuu Technology Co.,Ltd.
+
+OUI:70F8E7B*
+ ID_OUI_FROM_DATABASE=Photonfocus AG
+
+OUI:F81D782*
+ ID_OUI_FROM_DATABASE=Xperio Labs Limited
+
+OUI:0CEFAF0*
+ ID_OUI_FROM_DATABASE=Kenmore
+
OUI:78C2C06*
ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-OUI:8C192DB*
- ID_OUI_FROM_DATABASE=Abside Networks, Inc.
+OUI:4CE1732*
+ ID_OUI_FROM_DATABASE=Lenovo Data Center Group
+
+OUI:4CE1738*
+ ID_OUI_FROM_DATABASE=Nanjing Tongke Technology Development Co., LTD
OUI:F0ACD7A*
ID_OUI_FROM_DATABASE=Groupeer Technologies
@@ -7445,6 +8039,24 @@ OUI:C0D3917*
OUI:C0D3918*
ID_OUI_FROM_DATABASE=XENA SECURITY LIMITED
+OUI:C0D391C*
+ ID_OUI_FROM_DATABASE=Zhinengguo technology company limited
+
+OUI:84E0F42*
+ ID_OUI_FROM_DATABASE=Hangzhou Uni-Ubi Co.,Ltd.
+
+OUI:84E0F46*
+ ID_OUI_FROM_DATABASE=Liaoning IK'SONYA Science and Technology Co., Ltd.
+
+OUI:383A216*
+ ID_OUI_FROM_DATABASE=Shenzhen Smart-core Technology co., Ltd.
+
+OUI:4CE1735*
+ ID_OUI_FROM_DATABASE=NewVastek
+
+OUI:AC64DD6*
+ ID_OUI_FROM_DATABASE=Kpnetworks Ltd.
+
OUI:E043DB*
ID_OUI_FROM_DATABASE=Shenzhen ViewAt Technology Co.,Ltd.
@@ -7556,21 +8168,6 @@ OUI:58AC78*
OUI:907F61*
ID_OUI_FROM_DATABASE=Chicony Electronics Co., Ltd.
-OUI:001DCE*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001DD4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001DCD*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:CCA462*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:903EAB*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:28BC18*
ID_OUI_FROM_DATABASE=SourcingOverseas Co. Ltd
@@ -7598,45 +8195,6 @@ OUI:18AF61*
OUI:BC83A7*
ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
-OUI:14CFE2*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:900DCB*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:207355*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:C83FB4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:E0B70A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:78719C*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:D40598*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:946269*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:8C7F3B*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:D039B3*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0000C5*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:3C36E4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00ACE0*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:000347*
ID_OUI_FROM_DATABASE=Intel Corporation
@@ -7709,15 +8267,6 @@ OUI:000802*
OUI:90E7C4*
ID_OUI_FROM_DATABASE=HTC Corporation
-OUI:00265E*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:00234E*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:00234D*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:74A78E*
ID_OUI_FROM_DATABASE=zte corporation
@@ -7793,9 +8342,6 @@ OUI:84742A*
OUI:681AB2*
ID_OUI_FROM_DATABASE=zte corporation
-OUI:001C25*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:E005C5*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
@@ -7838,21 +8384,6 @@ OUI:CC4463*
OUI:6C72E7*
ID_OUI_FROM_DATABASE=Apple, Inc.
-OUI:0016CF*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:4437E6*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:F4B7E2*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:083E8E*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:485AB6*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:CCA223*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -8015,18 +8546,6 @@ OUI:0090BF*
OUI:005080*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:D0E54D*
- ID_OUI_FROM_DATABASE=Pace plc
-
-OUI:FC8E7E*
- ID_OUI_FROM_DATABASE=Pace plc
-
-OUI:B4F2E8*
- ID_OUI_FROM_DATABASE=Pace plc
-
-OUI:7085C6*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:00E018*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
@@ -8159,9 +8678,6 @@ OUI:E4C722*
OUI:C07BBC*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:005094*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:0090F2*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -8462,9 +8978,6 @@ OUI:70BF3E*
OUI:D848EE*
ID_OUI_FROM_DATABASE=Hangzhou Xueji Technology Co., Ltd.
-OUI:EC9BF3*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:88947E*
ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
@@ -8474,9 +8987,6 @@ OUI:88C242*
OUI:E8343E*
ID_OUI_FROM_DATABASE=Beijing Infosec Technologies Co., LTD.
-OUI:A8474A*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:C4ADF1*
ID_OUI_FROM_DATABASE=GOPEACE Inc.
@@ -8558,9 +9068,6 @@ OUI:C025A2*
OUI:7853F2*
ID_OUI_FROM_DATABASE=ROXTON Ltd.
-OUI:384C90*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:ACBC32*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -8573,9 +9080,6 @@ OUI:AC8995*
OUI:F898B9*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:D40AA9*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:1C497B*
ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd.
@@ -8609,9 +9113,6 @@ OUI:E4C2D1*
OUI:DC3CF6*
ID_OUI_FROM_DATABASE=Atomic Rules LLC
-OUI:441CA8*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:3C3178*
ID_OUI_FROM_DATABASE=Qolsys Inc.
@@ -8624,9 +9125,6 @@ OUI:083A5C*
OUI:4CAE31*
ID_OUI_FROM_DATABASE=ShengHai Electronics (Shenzhen) Ltd
-OUI:C80E14*
- ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
-
OUI:F0D657*
ID_OUI_FROM_DATABASE=ECHOSENS
@@ -8675,9 +9173,6 @@ OUI:24E5AA*
OUI:88CBA5*
ID_OUI_FROM_DATABASE=Suzhou Torchstar Intelligent Technology Co.,Ltd
-OUI:184F32*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:046169*
ID_OUI_FROM_DATABASE=MEDIA GLOBAL LINKS CO., LTD.
@@ -8810,9 +9305,6 @@ OUI:38C70A*
OUI:60E6BC*
ID_OUI_FROM_DATABASE=Sino-Telecom Technology Co.,Ltd.
-OUI:F8042E*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:1CA532*
ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd
@@ -8825,24 +9317,15 @@ OUI:340A22*
OUI:B008BF*
ID_OUI_FROM_DATABASE=Vital Connect, Inc.
-OUI:7CF854*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:485415*
ID_OUI_FROM_DATABASE=NET RULES TECNOLOGIA EIRELI
OUI:70C76F*
ID_OUI_FROM_DATABASE=INNO S
-OUI:C48E8F*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:704E66*
ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
-OUI:1008B1*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:409B0D*
ID_OUI_FROM_DATABASE=Shenzhen Yourf Kwan Industrial Co., Ltd
@@ -8924,9 +9407,6 @@ OUI:8C18D9*
OUI:6099D1*
ID_OUI_FROM_DATABASE=Vuzix / Lenovo
-OUI:38B1DB*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:34F6D2*
ID_OUI_FROM_DATABASE=Panasonic Taiwan Co.,Ltd.
@@ -9263,9 +9743,6 @@ OUI:4486C1*
OUI:C83168*
ID_OUI_FROM_DATABASE=eZEX corporation
-OUI:843838*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:F84A73*
ID_OUI_FROM_DATABASE=EUMTECH CO., LTD
@@ -9299,9 +9776,6 @@ OUI:64B370*
OUI:D86595*
ID_OUI_FROM_DATABASE=Toy's Myth Inc.
-OUI:C45006*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:D8DD5F*
ID_OUI_FROM_DATABASE=BALMUDA Inc.
@@ -9311,12 +9785,6 @@ OUI:88D962*
OUI:24C848*
ID_OUI_FROM_DATABASE=mywerk system GmbH
-OUI:805719*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:B0DF3A*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:2C18AE*
ID_OUI_FROM_DATABASE=Trend Electronics Co., Ltd.
@@ -9347,12 +9815,6 @@ OUI:9CF8DB*
OUI:644214*
ID_OUI_FROM_DATABASE=Swisscom Energy Solutions AG
-OUI:00E3B2*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:30D6C9*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:8CCDA2*
ID_OUI_FROM_DATABASE=ACTP, Inc.
@@ -9470,15 +9932,6 @@ OUI:404A18*
OUI:C4C0AE*
ID_OUI_FROM_DATABASE=MIDORI ELECTRONIC CO., LTD.
-OUI:08FD0E*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:78A873*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:54880E*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:90837A*
ID_OUI_FROM_DATABASE=General Electric Water & Process Technologies
@@ -9542,9 +9995,6 @@ OUI:5056A8*
OUI:D09D0A*
ID_OUI_FROM_DATABASE=LINKCOM
-OUI:C81479*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:54FB58*
ID_OUI_FROM_DATABASE=WISEWARE, Lda
@@ -9593,9 +10043,6 @@ OUI:CC4703*
OUI:5C3327*
ID_OUI_FROM_DATABASE=Spazio Italia srl
-OUI:BC8CCD*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co.,LTD.
-
OUI:F85BC9*
ID_OUI_FROM_DATABASE=M-Cube Spa
@@ -9614,15 +10061,9 @@ OUI:CC2A80*
OUI:3859F8*
ID_OUI_FROM_DATABASE=MindMade Sp. z o.o.
-OUI:F0728C*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:5C026A*
ID_OUI_FROM_DATABASE=Applied Vision Corporation
-OUI:94350A*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:7CBD06*
ID_OUI_FROM_DATABASE=AE REFUsol
@@ -9710,9 +10151,6 @@ OUI:681D64*
OUI:F4CD90*
ID_OUI_FROM_DATABASE=Vispiron Rotec GmbH
-OUI:400E85*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co.,LTD.
-
OUI:E438F2*
ID_OUI_FROM_DATABASE=Advantage Controls
@@ -9755,9 +10193,6 @@ OUI:6C5779*
OUI:40BD9E*
ID_OUI_FROM_DATABASE=Physio-Control, Inc
-OUI:BC79AD*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:581CBD*
ID_OUI_FROM_DATABASE=Affinegy
@@ -9827,12 +10262,6 @@ OUI:5061D6*
OUI:68EC62*
ID_OUI_FROM_DATABASE=YODO Technology Corp. Ltd.
-OUI:10D542*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:A0821F*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:F07F0C*
ID_OUI_FROM_DATABASE=Leopold Kostal GmbH &Co. KG
@@ -9851,12 +10280,6 @@ OUI:74F102*
OUI:080EA8*
ID_OUI_FROM_DATABASE=Velex s.r.l.
-OUI:041BBA*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:5C3C27*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:0086A0*
ID_OUI_FROM_DATABASE=Private
@@ -9992,9 +10415,6 @@ OUI:60B185*
OUI:504F94*
ID_OUI_FROM_DATABASE=Loxone Electronics GmbH
-OUI:88329B*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co.,LTD.
-
OUI:8C078C*
ID_OUI_FROM_DATABASE=FLOW DATA INC
@@ -10094,9 +10514,6 @@ OUI:C4E7BE*
OUI:105F49*
ID_OUI_FROM_DATABASE=Cisco SPVTG
-OUI:0418D6*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks
-
OUI:4495FA*
ID_OUI_FROM_DATABASE=Qingdao Santong Digital Technology Co.Ltd
@@ -10139,9 +10556,6 @@ OUI:60BC4C*
OUI:F41E26*
ID_OUI_FROM_DATABASE=Simon-Kaloi Engineering
-OUI:840B2D*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS CO., LTD
-
OUI:C44567*
ID_OUI_FROM_DATABASE=SAMBON PRECISON and ELECTRONICS
@@ -10163,9 +10577,6 @@ OUI:28A192*
OUI:A08C15*
ID_OUI_FROM_DATABASE=Gerhard D. Wempe KG
-OUI:A02195*
- ID_OUI_FROM_DATABASE=Samsung Electronics Digital Imaging
-
OUI:8CE081*
ID_OUI_FROM_DATABASE=zte corporation
@@ -10250,9 +10661,6 @@ OUI:88615A*
OUI:30215B*
ID_OUI_FROM_DATABASE=Shenzhen Ostar Display Electronic Co.,Ltd
-OUI:08D42B*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:DC028E*
ID_OUI_FROM_DATABASE=zte corporation
@@ -10334,9 +10742,6 @@ OUI:D43D7E*
OUI:64517E*
ID_OUI_FROM_DATABASE=LONG BEN (DONGGUAN) ELECTRONIC TECHNOLOGY CO.,LTD.
-OUI:18E2C2*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:0C57EB*
ID_OUI_FROM_DATABASE=Mueller Systems
@@ -10373,9 +10778,6 @@ OUI:5C5015*
OUI:0CD2B5*
ID_OUI_FROM_DATABASE=Binatone Telecommunication Pvt. Ltd
-OUI:1C62B8*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:4846F1*
ID_OUI_FROM_DATABASE=Uros Oy
@@ -10409,9 +10811,6 @@ OUI:40AC8D*
OUI:54466B*
ID_OUI_FROM_DATABASE=Shenzhen CZTIC Electronic Technology Co., Ltd
-OUI:08EDB9*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:1C3477*
ID_OUI_FROM_DATABASE=Innovation Wireless
@@ -10676,12 +11075,6 @@ OUI:38A851*
OUI:90185E*
ID_OUI_FROM_DATABASE=Apex Tool Group GmbH & Co OHG
-OUI:7CE9D3*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:8CC8CD*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., LTD
-
OUI:649EF3*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -10742,9 +11135,6 @@ OUI:AC319D*
OUI:08D09F*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:D0DFC7*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:B81413*
ID_OUI_FROM_DATABASE=Keen High Holding(HK) Ltd.
@@ -10811,9 +11201,6 @@ OUI:34255D*
OUI:1897FF*
ID_OUI_FROM_DATABASE=TechFaith Wireless Technology Limited
-OUI:0CDFA4*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:8C8E76*
ID_OUI_FROM_DATABASE=taskit GmbH
@@ -10901,9 +11288,6 @@ OUI:D0C282*
OUI:449CB5*
ID_OUI_FROM_DATABASE=Alcomp, Inc
-OUI:E4D53D*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:24E6BA*
ID_OUI_FROM_DATABASE=JSC Zavod im. Kozitsky
@@ -10976,9 +11360,6 @@ OUI:84248D*
OUI:24EC99*
ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
-OUI:9463D1*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:B8621F*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -11024,9 +11405,6 @@ OUI:B83A7B*
OUI:783F15*
ID_OUI_FROM_DATABASE=EasySYNC Ltd.
-OUI:F4B549*
- ID_OUI_FROM_DATABASE=Yeastar Technology Co., Ltd.
-
OUI:88B168*
ID_OUI_FROM_DATABASE=Delta Control GmbH
@@ -11084,9 +11462,6 @@ OUI:24C86E*
OUI:D4D898*
ID_OUI_FROM_DATABASE=Korea CNO Tech Co., Ltd
-OUI:04180F*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:5070E5*
ID_OUI_FROM_DATABASE=He Shan World Fair Electronics Technology Limited
@@ -11120,9 +11495,6 @@ OUI:D4C1FC*
OUI:48DCFB*
ID_OUI_FROM_DATABASE=Nokia Corporation
-OUI:CC051B*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:688470*
ID_OUI_FROM_DATABASE=eSSys Co.,Ltd
@@ -11228,9 +11600,6 @@ OUI:DCCBA8*
OUI:58EECE*
ID_OUI_FROM_DATABASE=Icon Time Systems
-OUI:90004E*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:A41BC0*
ID_OUI_FROM_DATABASE=Fastec Imaging Corporation
@@ -11264,15 +11633,9 @@ OUI:E44F29*
OUI:6CAB4D*
ID_OUI_FROM_DATABASE=Digital Payment Technologies
-OUI:60A10A*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:60DA23*
ID_OUI_FROM_DATABASE=Estech Co.,Ltd
-OUI:C0F8DA*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:28F358*
ID_OUI_FROM_DATABASE=2C - Trifonov & Co
@@ -11303,12 +11666,6 @@ OUI:7C7D41*
OUI:4C1480*
ID_OUI_FROM_DATABASE=NOREGON SYSTEMS, INC
-OUI:8C71F8*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:A07591*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:60F673*
ID_OUI_FROM_DATABASE=TERUMO CORPORATION
@@ -11429,9 +11786,6 @@ OUI:6015C7*
OUI:188ED5*
ID_OUI_FROM_DATABASE=TP Vision Belgium N.V. - innovation site Brugge
-OUI:E81132*
- ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
-
OUI:8CE7B3*
ID_OUI_FROM_DATABASE=Sonardyne International Ltd
@@ -11462,9 +11816,6 @@ OUI:58BC27*
OUI:34D2C4*
ID_OUI_FROM_DATABASE=RENA GmbH Print Systeme
-OUI:4C0F6E*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:E0A670*
ID_OUI_FROM_DATABASE=Nokia Corporation
@@ -11549,9 +11900,6 @@ OUI:D49E6D*
OUI:94F720*
ID_OUI_FROM_DATABASE=Tianjin Deviser Electronics Instrument Co., Ltd
-OUI:5C6D20*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:EC2368*
ID_OUI_FROM_DATABASE=IntelliVoice Co.,Ltd.
@@ -11633,9 +11981,6 @@ OUI:C802A6*
OUI:C84C75*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:68EBAE*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:284C53*
ID_OUI_FROM_DATABASE=Intune Networks
@@ -11654,9 +11999,6 @@ OUI:5C35DA*
OUI:005218*
ID_OUI_FROM_DATABASE=Wuxi Keboda Electron Co.Ltd
-OUI:F07BCB*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:08F2F4*
ID_OUI_FROM_DATABASE=Net One Partners Co.,Ltd.
@@ -11771,9 +12113,6 @@ OUI:60D30A*
OUI:BC9DA5*
ID_OUI_FROM_DATABASE=DASCOM Europe GmbH
-OUI:60D0A9*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:942E63*
ID_OUI_FROM_DATABASE=Finsécur
@@ -11789,9 +12128,6 @@ OUI:406186*
OUI:74E537*
ID_OUI_FROM_DATABASE=RADSPIN
-OUI:C417FE*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:7C08D9*
ID_OUI_FROM_DATABASE=Shanghai B-Star Technology Co
@@ -11834,9 +12170,6 @@ OUI:C45976*
OUI:B0C8AD*
ID_OUI_FROM_DATABASE=People Power Company
-OUI:A8F274*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:A870A5*
ID_OUI_FROM_DATABASE=UniComm Inc.
@@ -12239,9 +12572,6 @@ OUI:00257F*
OUI:002573*
ID_OUI_FROM_DATABASE=ST Electronics (Info-Security) Pte Ltd
-OUI:002567*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:00256E*
ID_OUI_FROM_DATABASE=Van Breda B.V.
@@ -12425,9 +12755,6 @@ OUI:0023AA*
OUI:0023A9*
ID_OUI_FROM_DATABASE=Beijing Detianquan Electromechanical Equipment Co., Ltd
-OUI:002341*
- ID_OUI_FROM_DATABASE=Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR
-
OUI:00233C*
ID_OUI_FROM_DATABASE=Alflex
@@ -12860,9 +13187,6 @@ OUI:001EB3*
OUI:001EB4*
ID_OUI_FROM_DATABASE=UNIFAT TECHNOLOGY LTD.
-OUI:001EAE*
- ID_OUI_FROM_DATABASE=Continental Automotive Systems
-
OUI:001EA8*
ID_OUI_FROM_DATABASE=Datang Mobile Communications Equipment CO.,LTD
@@ -12890,15 +13214,9 @@ OUI:001FDC*
OUI:001FD7*
ID_OUI_FROM_DATABASE=TELERAD SA
-OUI:001FCC*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:001FCB*
ID_OUI_FROM_DATABASE=NIW Solutions
-OUI:001FCD*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:001F77*
ID_OUI_FROM_DATABASE=HEOL DESIGN
@@ -13439,9 +13757,6 @@ OUI:001A99*
OUI:001A9B*
ID_OUI_FROM_DATABASE=ADEC & Parter AG
-OUI:001A8A*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd.
-
OUI:001A94*
ID_OUI_FROM_DATABASE=Votronic GmbH
@@ -14057,9 +14372,6 @@ OUI:0016EE*
OUI:0016E7*
ID_OUI_FROM_DATABASE=Dynamix Promotions Limited
-OUI:0016DB*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd.
-
OUI:0016E0*
ID_OUI_FROM_DATABASE=3Com Ltd
@@ -14243,9 +14555,6 @@ OUI:0015AC*
OUI:0015A7*
ID_OUI_FROM_DATABASE=Robatech AG
-OUI:001599*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., LTD
-
OUI:001594*
ID_OUI_FROM_DATABASE=BIXOLON CO.,LTD
@@ -14369,9 +14678,6 @@ OUI:00130E*
OUI:0012FC*
ID_OUI_FROM_DATABASE=PLANET System Co.,LTD
-OUI:0012FB*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:0012F6*
ID_OUI_FROM_DATABASE=MDK CO.,LTD.
@@ -16223,9 +16529,6 @@ OUI:00D05F*
OUI:000674*
ID_OUI_FROM_DATABASE=Spectrum Control, Inc.
-OUI:000678*
- ID_OUI_FROM_DATABASE=Marantz Brand Company
-
OUI:000661*
ID_OUI_FROM_DATABASE=NIA Home Technologies Corp.
@@ -16739,9 +17042,6 @@ OUI:00019E*
OUI:001095*
ID_OUI_FROM_DATABASE=Thomson Inc.
-OUI:000278*
- ID_OUI_FROM_DATABASE=Samsung Electro-Mechanics Co., Ltd.
-
OUI:00025A*
ID_OUI_FROM_DATABASE=Catena Networks
@@ -16991,9 +17291,6 @@ OUI:000124*
OUI:000101*
ID_OUI_FROM_DATABASE=Private
-OUI:00010D*
- ID_OUI_FROM_DATABASE=CORECO, INC.
-
OUI:000114*
ID_OUI_FROM_DATABASE=KANDA TSUSHIN KOGYO CO., LTD.
@@ -19352,12 +19649,6 @@ OUI:ACE010*
OUI:EC086B*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
-OUI:00159A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00192C*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:2421AB*
ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
@@ -19397,18 +19688,6 @@ OUI:18CF5E*
OUI:D0DF9A*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
-OUI:90B134*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:3C438E*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:E86D52*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0015D0*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:0013A9*
ID_OUI_FROM_DATABASE=Sony Corporation
@@ -19421,57 +19700,6 @@ OUI:001E45*
OUI:001813*
ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
-OUI:00080E*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0050E3*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:94CCB9*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:40B7F3*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:20E564*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:F87B7A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0023A3*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:64ED57*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0023EE*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002143*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:5856E8*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0025F1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0023AF*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001ADE*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001E46*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0018C0*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001A66*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:002163*
ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
@@ -19832,9 +20060,6 @@ OUI:DC2DCB*
OUI:3810D5*
ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
-OUI:44AAF5*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:1C5F2B*
ID_OUI_FROM_DATABASE=D-Link International
@@ -20000,9 +20225,6 @@ OUI:00144F*
OUI:E80959*
ID_OUI_FROM_DATABASE=Guoguang Electric Co.,Ltd
-OUI:541379*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:0090AE*
ID_OUI_FROM_DATABASE=ITALTEL S.p.A/RF-UP-I
@@ -20201,18 +20423,6 @@ OUI:D84A87*
OUI:BC307D*
ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
-OUI:643AB1*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
-OUI:D44165*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
-OUI:645D92*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
-OUI:8048A5*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
OUI:5410EC*
ID_OUI_FROM_DATABASE=Microchip Technology Inc.
@@ -20303,12 +20513,6 @@ OUI:E02A82*
OUI:001641*
ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
-OUI:44D9E7*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks
-
-OUI:F09FC2*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks
-
OUI:4C334E*
ID_OUI_FROM_DATABASE=HIGHTECH
@@ -20438,42 +20642,12 @@ OUI:3092F6*
OUI:7C2064*
ID_OUI_FROM_DATABASE=Alcatel-Lucent IPD
-OUI:48F8E1*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:00D0F6*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
OUI:E4A1E6*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
OUI:000B34*
ID_OUI_FROM_DATABASE=ShangHai Broadband Technologies CO.LTD
-OUI:B0754D*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:BC8D0E*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:E48184*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:94E98C*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:84262B*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:98B039*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:A47B2C*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:BC6B4D*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
OUI:38256B*
ID_OUI_FROM_DATABASE=Microsoft Mobile Oy
@@ -20642,9 +20816,6 @@ OUI:E8EB11*
OUI:D43639*
ID_OUI_FROM_DATABASE=Texas Instruments
-OUI:A8A648*
- ID_OUI_FROM_DATABASE=Qingdao Hisense Communications Co.,Ltd.
-
OUI:A043DB*
ID_OUI_FROM_DATABASE=Sitael S.p.A.
@@ -20657,6 +20828,9 @@ OUI:84EF18*
OUI:84C1C1*
ID_OUI_FROM_DATABASE=Juniper Networks
+OUI:A8A648*
+ ID_OUI_FROM_DATABASE=Qingdao Hisense Communications Co.,Ltd.
+
OUI:305890*
ID_OUI_FROM_DATABASE=Frontier Silicon Ltd
@@ -20678,6 +20852,582 @@ OUI:98F058*
OUI:24E43F*
ID_OUI_FROM_DATABASE=Wenzhou Kunmei Communication Technology Co.,Ltd.
+OUI:A00460*
+ ID_OUI_FROM_DATABASE=NETGEAR
+
+OUI:946269*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:D40598*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:78719C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:E0B70A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:C83FB4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:207355*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:900DCB*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:14CFE2*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0015D0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:E86D52*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:3C438E*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:90B134*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:20E564*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:40B7F3*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:94CCB9*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00ACE0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:3C36E4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0000C5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:D039B3*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:8C7F3B*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:903EAB*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:CCA462*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DCD*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DD4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DCE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0050E3*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00080E*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00159A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00192C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:D40AA9*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:384C90*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:44AAF5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:7085C6*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:D0E54D*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:B4F2E8*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:FC8E7E*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:005094*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002143*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0023EE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:64ED57*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0023A3*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:F87B7A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0025F1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001A66*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0018C0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001E46*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001ADE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0023AF*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:240AC4*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
+OUI:5856E8*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:E4C1F1*
+ ID_OUI_FROM_DATABASE=SHENZHEN SPOTMAU INFORMATION TECHNOLIGY CO., Ltd
+
+OUI:240DC2*
+ ID_OUI_FROM_DATABASE=TCT mobile ltd
+
+OUI:14DDE5*
+ ID_OUI_FROM_DATABASE=MPMKVVCL
+
+OUI:0016DB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:5C3C27*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:10D542*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:A0821F*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:C45006*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:88329B*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:BC8CCD*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:400E85*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:EC9BF3*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:F8042E*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:843838*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:54880E*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:BC79AD*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:30D6C9*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:B0DF3A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:805719*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:78A873*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:041BBA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:08FD0E*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:08D42B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:00E3B2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:C81479*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:F0728C*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:94350A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:001FCD*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:D0DFC7*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:1C62B8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:18E2C2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:F04347*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:9CB2B2*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:84BE52*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:001A8A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:002567*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:A8F274*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:B07870*
+ ID_OUI_FROM_DATABASE=Wi-NEXT, Inc.
+
+OUI:001599*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0012FB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:7CF854*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:8CC8CD*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:E81132*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:A02195*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:840B2D*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:000278*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:F07BCB*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:4C0F6E*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:5C6D20*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:90004E*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:C0F8DA*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:485AB6*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:083E8E*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:F4B7E2*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:4437E6*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:0016CF*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:001C25*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:C48E8F*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:184F32*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:441CA8*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:A8474A*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:08EDB9*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:7CE9D3*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:E4D53D*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:C417FE*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:38B1DB*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:00234D*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:00234E*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:00265E*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:541379*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:1008B1*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:701DC4*
+ ID_OUI_FROM_DATABASE=NorthStar Battery Company, LLC
+
+OUI:801844*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
+OUI:C80E14*
+ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+
+OUI:E0686D*
+ ID_OUI_FROM_DATABASE=Raybased AB
+
+OUI:A45385*
+ ID_OUI_FROM_DATABASE=Weifang GoerTek Electronics Co., Ltd.
+
+OUI:000678*
+ ID_OUI_FROM_DATABASE=D&M Holdings Inc.
+
+OUI:98B039*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:84262B*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:94E98C*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:E48184*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:BC8D0E*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:B0754D*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:BC6B4D*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:A47B2C*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:00D0F6*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:48F8E1*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:002341*
+ ID_OUI_FROM_DATABASE=Vanderbilt International (SWE) AB
+
+OUI:981333*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:8C71F8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:04180F*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:9463D1*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0CDFA4*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:CC051B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:68EBAE*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:60D0A9*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:60A10A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:A07591*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:D814D6*
+ ID_OUI_FROM_DATABASE=SURE SYSTEM Co Ltd
+
+OUI:646184*
+ ID_OUI_FROM_DATABASE=VELUX
+
+OUI:001FCC*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:EC01E2*
+ ID_OUI_FROM_DATABASE=FOXCONN INTERCONNECT TECHNOLOGY
+
+OUI:00F22C*
+ ID_OUI_FROM_DATABASE=Shanghai B-star Technology Co.,Ltd.
+
+OUI:D03DC3*
+ ID_OUI_FROM_DATABASE=AQ Corporation
+
+OUI:FCCAC4*
+ ID_OUI_FROM_DATABASE=LifeHealth, LLC
+
+OUI:04BA36*
+ ID_OUI_FROM_DATABASE=Li Seng Technology Ltd
+
+OUI:DCF090*
+ ID_OUI_FROM_DATABASE=Private
+
+OUI:4409B8*
+ ID_OUI_FROM_DATABASE=Salcomp (Shenzhen) CO., LTD.
+
+OUI:78888A*
+ ID_OUI_FROM_DATABASE=CDR Sp. z o.o. Sp. k.
+
+OUI:F09838*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:18DED7*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:EC107B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:A01081*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:001EAE*
+ ID_OUI_FROM_DATABASE=Continental Automotive Systems Inc.
+
+OUI:9CF48E*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:FCD848*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:8048A5*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:645D92*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:D44165*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:643AB1*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:00010D*
+ ID_OUI_FROM_DATABASE=Teledyne DALSA Inc.
+
+OUI:F09FC2*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:0418D6*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:44D9E7*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:48DA96*
+ ID_OUI_FROM_DATABASE=Eddy Smart Home Solutions Inc.
+
+OUI:503AA0*
+ ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+
+OUI:C025E9*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
+OUI:50B363*
+ ID_OUI_FROM_DATABASE=Digitron da Amazonia S/A
+
+OUI:94B819*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:DC0B34*
+ ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+
+OUI:A4D9A4*
+ ID_OUI_FROM_DATABASE=neXus ID Solutions AB
+
+OUI:484D7E*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
+OUI:8871E5*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
+OUI:F4B549*
+ ID_OUI_FROM_DATABASE=Xiamen Yeastar Information Technology Co., Ltd.
+
+OUI:9C3DCF*
+ ID_OUI_FROM_DATABASE=NETGEAR
+
+OUI:28EED3*
+ ID_OUI_FROM_DATABASE=Shenzhen Super D Technology Co., Ltd
+
+OUI:18F292*
+ ID_OUI_FROM_DATABASE=Shannon Systems
+
+OUI:3C3F51*
+ ID_OUI_FROM_DATABASE=2CRSI
+
+OUI:F4F524*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
+OUI:50584F*
+ ID_OUI_FROM_DATABASE=waytotec,Inc.
+
+OUI:00A2EE*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:0C6F9C*
ID_OUI_FROM_DATABASE=Shaw Communications Inc.
@@ -20801,33 +21551,12 @@ OUI:8896B6*
OUI:188796*
ID_OUI_FROM_DATABASE=HTC Corporation
-OUI:945330*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:00242C*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:00242B*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:D87988*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:AC2A0C*
ID_OUI_FROM_DATABASE=CSR ZHUZHOU INSTITUTE CO.,LTD.
-OUI:601971*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:F4CA24*
ID_OUI_FROM_DATABASE=FreeBit Co., Ltd.
-OUI:001DD1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001DD6*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:000A57*
ID_OUI_FROM_DATABASE=Hewlett Packard
@@ -20918,30 +21647,6 @@ OUI:001279*
OUI:001708*
ID_OUI_FROM_DATABASE=Hewlett Packard
-OUI:306023*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:ACB313*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:14ABF0*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0CF893*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:8461A0*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:E83381*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:44E137*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:1C1B68*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:2832C5*
ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
@@ -21032,18 +21737,6 @@ OUI:101B54*
OUI:7054F5*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:00197E*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:78DD08*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:9CD21E*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:8096CA*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:D07AB5*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -21239,12 +21932,6 @@ OUI:74A2E6*
OUI:204C9E*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:A055DE*
- ID_OUI_FROM_DATABASE=Pace plc
-
-OUI:0026D9*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:00112F*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
@@ -21635,9 +22322,6 @@ OUI:98F428*
OUI:7C5A67*
ID_OUI_FROM_DATABASE=JNC Systems, Inc.
-OUI:5C4979*
- ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
-
OUI:C4BBEA*
ID_OUI_FROM_DATABASE=Pakedge Device and Software Inc
@@ -21707,9 +22391,6 @@ OUI:385F66*
OUI:544E90*
ID_OUI_FROM_DATABASE=Apple, Inc.
-OUI:28C87A*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:58FC73*
ID_OUI_FROM_DATABASE=Arria Live Media, Inc.
@@ -21749,12 +22430,6 @@ OUI:04C23E*
OUI:2CFCE4*
ID_OUI_FROM_DATABASE=CTEK Sweden AB
-OUI:A8A795*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:10868C*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:C0B713*
ID_OUI_FROM_DATABASE=Beijing Xiaoyuer Technology Co. Ltd.
@@ -21773,18 +22448,12 @@ OUI:ECA9FA*
OUI:300C23*
ID_OUI_FROM_DATABASE=zte corporation
-OUI:EC1F72*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:445F8C*
ID_OUI_FROM_DATABASE=Intercel Group Limited
OUI:A48D3B*
ID_OUI_FROM_DATABASE=Vizio, Inc
-OUI:1005B1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:0C756C*
ID_OUI_FROM_DATABASE=Anaren Microwave, Inc.
@@ -21845,9 +22514,6 @@ OUI:E02CB2*
OUI:DC15DB*
ID_OUI_FROM_DATABASE=Ge Ruili Intelligent Technology ( Beijing ) Co., Ltd.
-OUI:E8508B*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:30F335*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -21875,9 +22541,6 @@ OUI:5804CB*
OUI:1CB72C*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
-OUI:40B89A*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:40B837*
ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
@@ -21911,9 +22574,6 @@ OUI:00323A*
OUI:64DB81*
ID_OUI_FROM_DATABASE=Syszone Co., Ltd.
-OUI:FC6FB7*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:C4BAA3*
ID_OUI_FROM_DATABASE=Beijing Winicssec Technologies Co., Ltd.
@@ -21974,9 +22634,6 @@ OUI:38D82F*
OUI:C8D779*
ID_OUI_FROM_DATABASE=Qingdao Haier Telecom Co.,Ltd
-OUI:A0C562*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:2CA2B4*
ID_OUI_FROM_DATABASE=Fortify Technologies, LLC
@@ -22004,12 +22661,6 @@ OUI:DC0914*
OUI:142971*
ID_OUI_FROM_DATABASE=NEMOA ELECTRONICS (HK) CO. LTD
-OUI:C0BDD1*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
-OUI:346895*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:B47356*
ID_OUI_FROM_DATABASE=Hangzhou Treebear Networking Co., Ltd.
@@ -22025,9 +22676,6 @@ OUI:28D98A*
OUI:BC4DFB*
ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
-OUI:7429AF*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:40EACE*
ID_OUI_FROM_DATABASE=FOUNDER BROADBAND NETWORK SERVICE CO.,LTD
@@ -22100,9 +22748,6 @@ OUI:64002D*
OUI:101218*
ID_OUI_FROM_DATABASE=Korins Inc.
-OUI:EC0EC4*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:B04515*
ID_OUI_FROM_DATABASE=mira fitness,LLC.
@@ -22226,9 +22871,6 @@ OUI:2053CA*
OUI:142BD6*
ID_OUI_FROM_DATABASE=Guangdong Appscomm Co.,Ltd
-OUI:C8BA94*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:B025AA*
ID_OUI_FROM_DATABASE=Private
@@ -22475,9 +23117,6 @@ OUI:64EB8C*
OUI:48D0CF*
ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
-OUI:AC3613*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:DCC793*
ID_OUI_FROM_DATABASE=Nokia Corporation
@@ -22520,27 +23159,18 @@ OUI:0CC47A*
OUI:D0634D*
ID_OUI_FROM_DATABASE=Meiko Maschinenbau GmbH &amp; Co. KG
-OUI:24DBED*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:88C626*
ID_OUI_FROM_DATABASE=Logitech - Ultimate Ears
OUI:889CA6*
ID_OUI_FROM_DATABASE=BTB Korea INC
-OUI:F025B7*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:B0DA00*
ID_OUI_FROM_DATABASE=CERA ELECTRONIQUE
OUI:447098*
ID_OUI_FROM_DATABASE=MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED
-OUI:54E2E0*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:00EEBD*
ID_OUI_FROM_DATABASE=HTC Corporation
@@ -22649,24 +23279,15 @@ OUI:88789C*
OUI:18AA45*
ID_OUI_FROM_DATABASE=Fon Technology
-OUI:0073E0*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:549359*
ID_OUI_FROM_DATABASE=SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
-OUI:BC4486*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:284430*
ID_OUI_FROM_DATABASE=GenesisTechnical Systems (UK) Ltd
OUI:9843DA*
ID_OUI_FROM_DATABASE=INTERTECH
-OUI:8056F2*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:285767*
ID_OUI_FROM_DATABASE=Echostar Technologies Corp
@@ -22694,9 +23315,6 @@ OUI:A409CB*
OUI:C445EC*
ID_OUI_FROM_DATABASE=Shanghai Yali Electron Co.,LTD
-OUI:380B40*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:E8611F*
ID_OUI_FROM_DATABASE=Dawning Information Industry Co.,Ltd
@@ -22733,12 +23351,6 @@ OUI:A47760*
OUI:24A495*
ID_OUI_FROM_DATABASE=Thales Canada Inc.
-OUI:70188B*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:3C77E6*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:883612*
ID_OUI_FROM_DATABASE=SRC Computers, LLC
@@ -22802,9 +23414,6 @@ OUI:A4C0C7*
OUI:EC2257*
ID_OUI_FROM_DATABASE=JiangSu NanJing University Electronic Information Technology Co.,Ltd
-OUI:0C84DC*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:341A4C*
ID_OUI_FROM_DATABASE=SHENZHEN WEIBU ELECTRONICS CO.,LTD.
@@ -22871,9 +23480,6 @@ OUI:043D98*
OUI:E8BB3D*
ID_OUI_FROM_DATABASE=Sino Prime-Tech Limited
-OUI:E492FB*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:98CDB4*
ID_OUI_FROM_DATABASE=Virident Systems, Inc.
@@ -22928,9 +23534,6 @@ OUI:CC04B4*
OUI:284FCE*
ID_OUI_FROM_DATABASE=Liaoning Wontel Science and Technology Development Co.,Ltd.
-OUI:1449E0*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co.,LTD.
-
OUI:0CC81F*
ID_OUI_FROM_DATABASE=Summer Infant, Inc.
@@ -22940,15 +23543,9 @@ OUI:D86960*
OUI:442AFF*
ID_OUI_FROM_DATABASE=E3 Technology, Inc.
-OUI:E440E2*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:0C9301*
ID_OUI_FROM_DATABASE=PT. Prasimax Inovasi Teknologi
-OUI:1CAF05*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:60699B*
ID_OUI_FROM_DATABASE=isepos GmbH
@@ -23216,9 +23813,6 @@ OUI:74372F*
OUI:BC51FE*
ID_OUI_FROM_DATABASE=Swann communications Pty Ltd
-OUI:789ED0*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:D40FB2*
ID_OUI_FROM_DATABASE=Applied Micro Electronics AME bv
@@ -23261,9 +23855,6 @@ OUI:ACE87E*
OUI:60CDC5*
ID_OUI_FROM_DATABASE=Taiwan Carol Electronics., Ltd
-OUI:1489FD*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:60C5A8*
ID_OUI_FROM_DATABASE=Beijing LT Honway Technology Co.,Ltd
@@ -23321,9 +23912,6 @@ OUI:F4472A*
OUI:185253*
ID_OUI_FROM_DATABASE=Pixord Corporation
-OUI:A41731*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:FCA9B0*
ID_OUI_FROM_DATABASE=MIARTECH (SHANGHAI),INC.
@@ -23450,18 +24038,12 @@ OUI:74BFA1*
OUI:F8AA8A*
ID_OUI_FROM_DATABASE=Axview Technology (Shenzhen) Co.,Ltd
-OUI:60F494*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:5894CF*
ID_OUI_FROM_DATABASE=Vertex Standard LMR, Inc.
OUI:2C5AA3*
ID_OUI_FROM_DATABASE=PROMATE ELECTRONIC CO.LTD
-OUI:9852B1*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:B4009C*
ID_OUI_FROM_DATABASE=CableWorld Ltd.
@@ -23579,15 +24161,9 @@ OUI:7C02BC*
OUI:1848D8*
ID_OUI_FROM_DATABASE=Fastback Networks
-OUI:C819F7*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:702393*
ID_OUI_FROM_DATABASE=fos4X GmbH
-OUI:C4731E*
- ID_OUI_FROM_DATABASE=Samsung Eletronics Co., Ltd
-
OUI:D8AFF1*
ID_OUI_FROM_DATABASE=Panasonic Appliances Company
@@ -23606,15 +24182,9 @@ OUI:241064*
OUI:10D1DC*
ID_OUI_FROM_DATABASE=INSTAR Deutschland GmbH
-OUI:844BF5*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:D8160A*
ID_OUI_FROM_DATABASE=Nippon Electro-Sensory Devices
-OUI:58696C*
- ID_OUI_FROM_DATABASE=Fujian Ruijie Networks co, ltd
-
OUI:F45433*
ID_OUI_FROM_DATABASE=Rockwell Automation
@@ -23729,9 +24299,6 @@ OUI:940070*
OUI:6C3A84*
ID_OUI_FROM_DATABASE=Shenzhen Aero-Startech. Co.Ltd
-OUI:C0143D*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:442B03*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -23759,9 +24326,6 @@ OUI:18B591*
OUI:A45630*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:CCFE3C*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:002AAF*
ID_OUI_FROM_DATABASE=LARsys-Automation GmbH
@@ -23840,9 +24404,6 @@ OUI:CC187B*
OUI:38B12D*
ID_OUI_FROM_DATABASE=Sonotronic Nagel GmbH
-OUI:E006E6*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:8020AF*
ID_OUI_FROM_DATABASE=Trade FIDES, a.s.
@@ -23885,9 +24446,6 @@ OUI:E00B28*
OUI:500B32*
ID_OUI_FROM_DATABASE=Foxda Technology Industrial(ShenZhen)Co.,LTD
-OUI:E8039A*
- ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
-
OUI:302DE8*
ID_OUI_FROM_DATABASE=JDA, LLC (JDA Systems)
@@ -23978,9 +24536,6 @@ OUI:4C2F9D*
OUI:E467BA*
ID_OUI_FROM_DATABASE=Danish Interpretation Systems A/S
-OUI:642737*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:BCFE8C*
ID_OUI_FROM_DATABASE=Altronic, LLC
@@ -24068,9 +24623,6 @@ OUI:A85BF3*
OUI:344F69*
ID_OUI_FROM_DATABASE=EKINOPS SAS
-OUI:2C4401*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:C02973*
ID_OUI_FROM_DATABASE=Audyssey Laboratories Inc.
@@ -24089,9 +24641,6 @@ OUI:88F488*
OUI:0041B4*
ID_OUI_FROM_DATABASE=Wuxi Zhongxing Optoelectronics Technology Co.,Ltd.
-OUI:0007AB*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:D453AF*
ID_OUI_FROM_DATABASE=VIGO System S.A.
@@ -24101,12 +24650,6 @@ OUI:1CE192*
OUI:20C8B3*
ID_OUI_FROM_DATABASE=SHENZHEN BUL-TECH CO.,LTD.
-OUI:60D819*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:945103*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:58B0D4*
ID_OUI_FROM_DATABASE=ZuniData Systems Inc.
@@ -24167,9 +24710,6 @@ OUI:3CD16E*
OUI:00077D*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:D0176A*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:1045BE*
ID_OUI_FROM_DATABASE=Norphonic AS
@@ -24197,9 +24737,6 @@ OUI:8C5CA1*
OUI:C8F981*
ID_OUI_FROM_DATABASE=Seneca s.r.l.
-OUI:8C7712*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:703187*
ID_OUI_FROM_DATABASE=ACX GmbH
@@ -24326,9 +24863,6 @@ OUI:50795B*
OUI:E8C229*
ID_OUI_FROM_DATABASE=H-Displays (MSC) Bhd
-OUI:3C6200*
- ID_OUI_FROM_DATABASE=Samsung electronics CO., LTD
-
OUI:B0BDA1*
ID_OUI_FROM_DATABASE=ZAKLAD ELEKTRONICZNY SIMS
@@ -24398,9 +24932,6 @@ OUI:806CBC*
OUI:1C184A*
ID_OUI_FROM_DATABASE=ShenZhen RicherLink Technologies Co.,LTD
-OUI:2013E0*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:04E662*
ID_OUI_FROM_DATABASE=Acroname Inc.
@@ -24524,12 +25055,6 @@ OUI:18922C*
OUI:F80F84*
ID_OUI_FROM_DATABASE=Natural Security SAS
-OUI:FCA13E*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
-OUI:BC4760*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:EC9ECD*
ID_OUI_FROM_DATABASE=Artesyn Embedded Technologies
@@ -24548,9 +25073,6 @@ OUI:A862A2*
OUI:984E97*
ID_OUI_FROM_DATABASE=Starlight Marketing (H. K.) Ltd.
-OUI:E4E0C5*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., LTD
-
OUI:7C6ADB*
ID_OUI_FROM_DATABASE=SafeTone Technology Co.,Ltd
@@ -24596,9 +25118,6 @@ OUI:948D50*
OUI:94E226*
ID_OUI_FROM_DATABASE=D. ORtiz Consulting, LLC
-OUI:78D6F0*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
-
OUI:E8E732*
ID_OUI_FROM_DATABASE=Alcatel-Lucent
@@ -24752,9 +25271,6 @@ OUI:C8EE08*
OUI:7472F2*
ID_OUI_FROM_DATABASE=Chipsip Technology Co., Ltd.
-OUI:C0CB38*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:5CD998*
ID_OUI_FROM_DATABASE=D-Link Corporation
@@ -24836,9 +25352,6 @@ OUI:100C24*
OUI:58F6BF*
ID_OUI_FROM_DATABASE=Kyoto University
-OUI:B407F9*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS
-
OUI:7CED8D*
ID_OUI_FROM_DATABASE=Microsoft
@@ -25253,9 +25766,6 @@ OUI:6465C0*
OUI:F0DE71*
ID_OUI_FROM_DATABASE=Shanghai EDO Technologies Co.,Ltd.
-OUI:A00798*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:28FBD3*
ID_OUI_FROM_DATABASE=Ragentek Technology Group
@@ -25550,9 +26060,6 @@ OUI:002489*
OUI:00248E*
ID_OUI_FROM_DATABASE=Infoware ZRt.
-OUI:002490*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
-
OUI:002482*
ID_OUI_FROM_DATABASE=Ruckus Wireless
@@ -25592,9 +26099,6 @@ OUI:0023CB*
OUI:0023D2*
ID_OUI_FROM_DATABASE=Inhand Electronics, Inc.
-OUI:0023D7*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:0024B4*
ID_OUI_FROM_DATABASE=ESCATRONIC GmbH
@@ -25706,9 +26210,6 @@ OUI:0024F7*
OUI:0024F0*
ID_OUI_FROM_DATABASE=Seanodes
-OUI:0024E9*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd., Storage System Division
-
OUI:0024EB*
ID_OUI_FROM_DATABASE=ClearPath Networks, Inc.
@@ -25832,9 +26333,6 @@ OUI:00231B*
OUI:00239F*
ID_OUI_FROM_DATABASE=Institut für Prüftechnik
-OUI:002399*
- ID_OUI_FROM_DATABASE=VD Division, Samsung Electronics Co.
-
OUI:002393*
ID_OUI_FROM_DATABASE=AJINEXTEK
@@ -26030,9 +26528,6 @@ OUI:0021E4*
OUI:0021DF*
ID_OUI_FROM_DATABASE=Martin Christ GmbH
-OUI:0021D2*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:0021D8*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -26285,9 +26780,6 @@ OUI:001E89*
OUI:001E84*
ID_OUI_FROM_DATABASE=Pika Technologies Inc.
-OUI:001E7D*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:001E83*
ID_OUI_FROM_DATABASE=LAN/MAN Standards Association (LMSC)
@@ -27224,9 +27716,6 @@ OUI:00165C*
OUI:001655*
ID_OUI_FROM_DATABASE=FUHO TECHNOLOGY Co., LTD
-OUI:001650*
- ID_OUI_FROM_DATABASE=Herley General Microwave Israel.
-
OUI:0015E4*
ID_OUI_FROM_DATABASE=Zimmer Elektromedizin
@@ -29675,9 +30164,6 @@ OUI:00043C*
OUI:000441*
ID_OUI_FROM_DATABASE=Half Dome Systems, Inc.
-OUI:000435*
- ID_OUI_FROM_DATABASE=Comptek International, Inc.
-
OUI:00042F*
ID_OUI_FROM_DATABASE=International Communications Products, Inc.
@@ -30332,9 +30818,6 @@ OUI:00D0AF*
OUI:00D026*
ID_OUI_FROM_DATABASE=HIRSCHMANN AUSTRIA GMBH
-OUI:00D037*
- ID_OUI_FROM_DATABASE=Pace France
-
OUI:00D010*
ID_OUI_FROM_DATABASE=CONVERGENT NETWORKS, INC.
@@ -31151,9 +31634,6 @@ OUI:0060B2*
OUI:006004*
ID_OUI_FROM_DATABASE=COMPUTADORES MODULARES SA
-OUI:0060D6*
- ID_OUI_FROM_DATABASE=NovAtel Wireless Technologies Ltd.
-
OUI:006000*
ID_OUI_FROM_DATABASE=XYCOM INC.
@@ -32561,21 +33041,6 @@ OUI:F0272D*
OUI:00225F*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
-OUI:0018A4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001311*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0015A2*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001596*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0000CA*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:983B16*
ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
@@ -32609,84 +33074,9 @@ OUI:20689D*
OUI:446D57*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
-OUI:000F9F*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0011AE*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002040*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0015CE*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001626*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00111A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00152F*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:000B06*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:44EE02*
ID_OUI_FROM_DATABASE=MTI Ltd.
-OUI:001C11*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001CC1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001D6B*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001E5A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001DBE*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001371*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:C8AA21*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:2C9E5F*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002495*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002642*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:A4ED4E*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0024A1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002375*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001ADB*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00149A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001A1B*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001F7E*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:0026B6*
ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
@@ -33209,12 +33599,6 @@ OUI:749781*
OUI:B4B15A*
ID_OUI_FROM_DATABASE=Siemens AG Energy Management Division
-OUI:A86BAD*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:D80F99*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:A8D828*
ID_OUI_FROM_DATABASE=Ascensia Diabetes Care
@@ -33293,9 +33677,6 @@ OUI:DCD916*
OUI:002552*
ID_OUI_FROM_DATABASE=VXi Corporation
-OUI:341FE4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:006CBC*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -33329,9 +33710,6 @@ OUI:B8E779*
OUI:240A11*
ID_OUI_FROM_DATABASE=TCT mobile ltd
-OUI:78B84B*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
OUI:C84544*
ID_OUI_FROM_DATABASE=Asia Pacific CIS (Wuxi) Co, Ltd
@@ -33386,9 +33764,6 @@ OUI:48435A*
OUI:9CE374*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:40F420*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
OUI:6C0EE6*
ID_OUI_FROM_DATABASE=Chengdu Xiyida Electronic Technology Co,.Ltd
@@ -33590,18 +33965,12 @@ OUI:00E00F*
OUI:3C404F*
ID_OUI_FROM_DATABASE=GUANGDONG PISEN ELECTRONICS CO.,LTD
-OUI:1CEA1B*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
OUI:00233E*
ID_OUI_FROM_DATABASE=Alcatel-Lucent IPD
OUI:6CBEE9*
ID_OUI_FROM_DATABASE=Alcatel-Lucent IPD
-OUI:4CC94F*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
OUI:0080F7*
ID_OUI_FROM_DATABASE=Zenith Electronics Corporation
@@ -33635,12 +34004,6 @@ OUI:002713*
OUI:002186*
ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
-OUI:802AA8*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks
-
-OUI:00156D*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks
-
OUI:8CFDF0*
ID_OUI_FROM_DATABASE=Qualcomm Inc.
@@ -33659,9 +34022,6 @@ OUI:000C29*
OUI:005056*
ID_OUI_FROM_DATABASE=VMware, Inc.
-OUI:9C6121*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
OUI:001C4D*
ID_OUI_FROM_DATABASE=Aplix IP Holdings Corporation
@@ -33689,18 +34049,273 @@ OUI:20F543*
OUI:685388*
ID_OUI_FROM_DATABASE=P&S Technology
-OUI:48F7F1*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:10E878*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
OUI:54A619*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
OUI:1880F5*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
+OUI:24DBED*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:AC3613*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:1449E0*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:C0BDD1*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:E8508B*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:F025B7*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:C8BA94*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:EC1F72*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:9852B1*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:1489FD*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:CCFE3C*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:789ED0*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:E440E2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:1CAF05*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:E492FB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:247F20*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
+OUI:0073E0*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:BC4486*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:380B40*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:8C0D76*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:005A13*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:002490*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0023D7*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:FCA13E*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:A00798*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:945103*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:C819F7*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:2C4401*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:08C6B3*
+ ID_OUI_FROM_DATABASE=QTECH LLC
+
+OUI:64DAA0*
+ ID_OUI_FROM_DATABASE=Robert Bosch Smart Home GmbH
+
+OUI:14B837*
+ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+
+OUI:8056F2*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:70188B*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:3C77E6*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:0C84DC*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:844BF5*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:E006E6*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:60F494*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:A41731*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:C0143D*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:642737*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:60D819*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:6474F6*
+ ID_OUI_FROM_DATABASE=Shooter Detection Systems
+
+OUI:604BAA*
+ ID_OUI_FROM_DATABASE=Private
+
+OUI:CC7314*
+ ID_OUI_FROM_DATABASE=HONG KONG WHEATEK TECHNOLOGY LIMITED
+
+OUI:C0CB38*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:98E7F4*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
+OUI:D42C44*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:D842E2*
+ ID_OUI_FROM_DATABASE=Canary Connect, Inc.
+
+OUI:500959*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
+OUI:143365*
+ ID_OUI_FROM_DATABASE=TEM Mobile Limited
+
+OUI:205D47*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
+OUI:C0F945*
+ ID_OUI_FROM_DATABASE=Toshiba Toko Meter Systems Co., LTD.
+
+OUI:ACAB2E*
+ ID_OUI_FROM_DATABASE=Beijing LasNubes Technology Co., Ltd.
+
+OUI:10E878*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:48F7F1*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:4CC94F*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:1CEA1B*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:B4F81E*
+ ID_OUI_FROM_DATABASE=Kinova
+
+OUI:A46011*
+ ID_OUI_FROM_DATABASE=VeriFone Inc.
+
+OUI:28CA09*
+ ID_OUI_FROM_DATABASE=ThyssenKrupp Elevators (Shanghai) Co.,Ltd
+
+OUI:E0B94D*
+ ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.,LTD
+
+OUI:D8380D*
+ ID_OUI_FROM_DATABASE=SHENZHEN IP-COM Network Co.,Ltd
+
+OUI:A4C64F*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:C83DD4*
+ ID_OUI_FROM_DATABASE=CyberTAN Technology Inc.
+
+OUI:487B6B*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:3087D9*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
+OUI:A8E705*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
+OUI:9C62AB*
+ ID_OUI_FROM_DATABASE=Sumavision Technologies Co.,Ltd
+
+OUI:487A55*
+ ID_OUI_FROM_DATABASE=ALE International
+
+OUI:000435*
+ ID_OUI_FROM_DATABASE=InfiNet LLC
+
+OUI:BC39D9*
+ ID_OUI_FROM_DATABASE=Z-TEC
+
+OUI:88E87F*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:B853AC*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:B04BBF*
+ ID_OUI_FROM_DATABASE=PT HAN SUNG ELECTORONICS INDONESIA
+
+OUI:0060D6*
+ ID_OUI_FROM_DATABASE=NovAtel Inc.
+
+OUI:2C3361*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:78B84B*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:40F420*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:9C6121*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:8C8ABB*
+ ID_OUI_FROM_DATABASE=Beijing Orient View Technology Co., Ltd.
+
+OUI:88366C*
+ ID_OUI_FROM_DATABASE=EFM Networks
+
+OUI:F074E4*
+ ID_OUI_FROM_DATABASE=Thundercomm Technology Co., Ltd
+
+OUI:A0722C*
+ ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
+
+OUI:FCECDA*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:E07C13*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:58696C*
+ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD.
+
OUI:001972*
ID_OUI_FROM_DATABASE=Plexus (Xiamen) Co.,ltd.
@@ -33866,9 +34481,6 @@ OUI:F45EAB*
OUI:001783*
ID_OUI_FROM_DATABASE=Texas Instruments
-OUI:400D10*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:A81B6A*
ID_OUI_FROM_DATABASE=Texas Instruments
@@ -33902,15 +34514,333 @@ OUI:EC8CA2*
OUI:C411E0*
ID_OUI_FROM_DATABASE=Bull Group Co., Ltd
+OUI:90842B*
+ ID_OUI_FROM_DATABASE=LEGO System A/S
+
+OUI:84C7EA*
+ ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
+
+OUI:8C6102*
+ ID_OUI_FROM_DATABASE=Beijing Baofengmojing Technologies Co., Ltd
+
+OUI:1005B1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:10868C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:1C1B68*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:44E137*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:E83381*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:8461A0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0CF893*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:14ABF0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:ACB313*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0026D9*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:28C87A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:54E2E0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:A055DE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:A0C562*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:FC6FB7*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001A1B*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00149A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001371*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DBE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001E5A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001D6B*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001CC1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001C11*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001F7E*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002495*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:2C9E5F*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:C8AA21*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:341FE4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:400D10*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001596*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0015A2*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001311*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0015CE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002040*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0011AE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:000F9F*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:306023*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DD6*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DD1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:601971*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0000CA*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001ADB*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002375*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0024A1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:A4ED4E*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002642*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:000B06*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00152F*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00111A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001626*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0018A4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00D037*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:FC9114*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
+OUI:1C25E1*
+ ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
+
+OUI:C0F636*
+ ID_OUI_FROM_DATABASE=Hangzhou Kuaiyue Technologies, Ltd.
+
+OUI:F0038C*
+ ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+
+OUI:B45D50*
+ ID_OUI_FROM_DATABASE=Aruba Networks
+
+OUI:742344*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
+OUI:001E7D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:3C6200*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0024E9*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:002399*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:E4E0C5*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:E8039A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:C4731E*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:78D6F0*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:B407F9*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:40B89A*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:A8A795*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:8096CA*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:9CD21E*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:D87988*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:00242B*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:00242C*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:945330*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:EC0EC4*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:7429AF*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:346895*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:A86BAD*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:D80F99*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:78DD08*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:00197E*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:A0AB1B*
+ ID_OUI_FROM_DATABASE=D-Link International
+
+OUI:5C4979*
+ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+
+OUI:086A0A*
+ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+
+OUI:101250*
+ ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
+
+OUI:8C7712*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:2013E0*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0007AB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0021D2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:BC4760*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:D0176A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:F0D9B2*
+ ID_OUI_FROM_DATABASE=EXO S.A.
+
+OUI:2CBABA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:24920E*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:40D3AE*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:802AA8*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:00156D*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:787D48*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
+OUI:D46E0E*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
+OUI:049790*
+ ID_OUI_FROM_DATABASE=Lartech telecom LLC
+
+OUI:8CEA1B*
+ ID_OUI_FROM_DATABASE=Edgecore Networks Corporation
+
+OUI:001650*
+ ID_OUI_FROM_DATABASE=Kratos EPD
+
+OUI:58E16C*
+ ID_OUI_FROM_DATABASE=Ying Hua Information Technology (Shanghai)Co., LTD
+
OUI:5846E1*
ID_OUI_FROM_DATABASE=Baxter International Inc
OUI:00D0BD*
ID_OUI_FROM_DATABASE=Lattice Semiconductor Corp. (LPA)
-OUI:001F3A*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:F08261*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
@@ -33995,9 +34925,6 @@ OUI:4CFB45*
OUI:A4BA76*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:003676*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:78E3B5*
ID_OUI_FROM_DATABASE=Hewlett Packard
@@ -34049,18 +34976,9 @@ OUI:F8DB7F*
OUI:E899C4*
ID_OUI_FROM_DATABASE=HTC Corporation
-OUI:28565A*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:40490F*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:7CB15D*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:002269*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:18686A*
ID_OUI_FROM_DATABASE=zte corporation
@@ -34142,15 +35060,6 @@ OUI:2C6E85*
OUI:00D0B7*
ID_OUI_FROM_DATABASE=Intel Corporation
-OUI:0015D1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:C005C2*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:6455B1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:0002B3*
ID_OUI_FROM_DATABASE=Intel Corporation
@@ -34187,24 +35096,6 @@ OUI:A0481C*
OUI:A01D48*
ID_OUI_FROM_DATABASE=Hewlett Packard
-OUI:001DD3*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:E8892C*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:E83EFC*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:083E0C*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:8C09F4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:3CDFA9*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:94B2CC*
ID_OUI_FROM_DATABASE=PIONEER CORPORATION
@@ -34352,30 +35243,6 @@ OUI:C864C7*
OUI:D0154A*
ID_OUI_FROM_DATABASE=zte corporation
-OUI:001FE2*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:001DD9*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:0016CE*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:0014A4*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:D02788*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:300ED5*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:543530*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:90489A*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:88E3AB*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -34889,9 +35756,6 @@ OUI:C02DEE*
OUI:54A3FA*
ID_OUI_FROM_DATABASE=BQT Solutions (Australia)Pty Ltd
-OUI:30F772*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:9023EC*
ID_OUI_FROM_DATABASE=Availink, Inc.
@@ -34949,12 +35813,6 @@ OUI:DC2B2A*
OUI:8C10D4*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
-OUI:203D66*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:B83A9D*
- ID_OUI_FROM_DATABASE=FIVE INTERACTIVE, LLC
-
OUI:089B4B*
ID_OUI_FROM_DATABASE=iKuai Networks
@@ -34976,15 +35834,9 @@ OUI:A8741D*
OUI:A4C138*
ID_OUI_FROM_DATABASE=Telink Semiconductor (Taipei) Co. Ltd.
-OUI:48E244*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:D8EFCD*
ID_OUI_FROM_DATABASE=Nokia
-OUI:D404CD*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:EC0133*
ID_OUI_FROM_DATABASE=TRINUS SYSTEMS INC.
@@ -35141,9 +35993,6 @@ OUI:702A7D*
OUI:B8B3DC*
ID_OUI_FROM_DATABASE=DEREK (SHAOGUAN) LIMITED
-OUI:347A60*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:6C1E70*
ID_OUI_FROM_DATABASE=Guangzhou YBDS IT Co.,Ltd
@@ -35174,9 +36023,6 @@ OUI:887384*
OUI:584704*
ID_OUI_FROM_DATABASE=Shenzhen Webridge Technology Co.,Ltd
-OUI:1C14B3*
- ID_OUI_FROM_DATABASE=Pinyon Technologies
-
OUI:749CE3*
ID_OUI_FROM_DATABASE=Art2Wave Canada Inc.
@@ -35252,9 +36098,6 @@ OUI:1436C6*
OUI:04C09C*
ID_OUI_FROM_DATABASE=Tellabs Inc.
-OUI:2C337A*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:844464*
ID_OUI_FROM_DATABASE=ServerU Inc
@@ -35282,9 +36125,6 @@ OUI:F8B2F3*
OUI:1C7D22*
ID_OUI_FROM_DATABASE=Fuji Xerox Co., Ltd.
-OUI:ACD1B8*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:7C11CD*
ID_OUI_FROM_DATABASE=QianTang Technology
@@ -35330,9 +36170,6 @@ OUI:ECB907*
OUI:5CF9F0*
ID_OUI_FROM_DATABASE=Atomos Engineering P/L
-OUI:F409D8*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:FCDBB3*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
@@ -35354,18 +36191,12 @@ OUI:B89BE4*
OUI:C0EEFB*
ID_OUI_FROM_DATABASE=OnePlus Tech (Shenzhen) Ltd
-OUI:E00DB9*
- ID_OUI_FROM_DATABASE=Private
-
OUI:108A1B*
ID_OUI_FROM_DATABASE=RAONIX Inc.
OUI:8CF813*
ID_OUI_FROM_DATABASE=ORANGE POLSKA
-OUI:B479A7*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:B8F317*
ID_OUI_FROM_DATABASE=iSun Smasher Communications Private Limited
@@ -35384,9 +36215,6 @@ OUI:50F43C*
OUI:B43934*
ID_OUI_FROM_DATABASE=Pen Generations, Inc.
-OUI:C03896*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:DCC622*
ID_OUI_FROM_DATABASE=BUHEUNG SYSTEM
@@ -35405,9 +36233,6 @@ OUI:2CA30E*
OUI:4CF5A0*
ID_OUI_FROM_DATABASE=Scalable Network Technologies Inc
-OUI:84E058*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:084656*
ID_OUI_FROM_DATABASE=VEO-LABS
@@ -35633,9 +36458,6 @@ OUI:748F1B*
OUI:F03A4B*
ID_OUI_FROM_DATABASE=Bloombase, Inc.
-OUI:E4121D*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:D82A15*
ID_OUI_FROM_DATABASE=Leitner SpA
@@ -35753,9 +36575,6 @@ OUI:083F3E*
OUI:6C09D6*
ID_OUI_FROM_DATABASE=Digiquest Electronics LTD
-OUI:684898*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:8C569D*
ID_OUI_FROM_DATABASE=Imaging Solutions Group
@@ -35870,9 +36689,6 @@ OUI:5CFFFF*
OUI:F0D3A7*
ID_OUI_FROM_DATABASE=CobaltRay Co., Ltd
-OUI:20D390*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:847616*
ID_OUI_FROM_DATABASE=Addat s.r.o.
@@ -35891,12 +36707,6 @@ OUI:38BF2F*
OUI:182012*
ID_OUI_FROM_DATABASE=Aztech Associates Inc.
-OUI:34BE00*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:343111*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:C0F991*
ID_OUI_FROM_DATABASE=GME Standard Communications P/L
@@ -36011,9 +36821,6 @@ OUI:AC5036*
OUI:FC019E*
ID_OUI_FROM_DATABASE=VIEVU
-OUI:34AA8B*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:F45F69*
ID_OUI_FROM_DATABASE=Matsufu Electronics distribution Company
@@ -36122,12 +36929,6 @@ OUI:6405BE*
OUI:E03E4A*
ID_OUI_FROM_DATABASE=Cavanagh Group International
-OUI:D890E8*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:24C696*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:6CB350*
ID_OUI_FROM_DATABASE=Anhui comhigher tech co.,ltd
@@ -36173,9 +36974,6 @@ OUI:C06C6D*
OUI:74CA25*
ID_OUI_FROM_DATABASE=Calxeda, Inc.
-OUI:181EB0*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:CCBD35*
ID_OUI_FROM_DATABASE=Steinel GmbH
@@ -36248,9 +37046,6 @@ OUI:380FE4*
OUI:847A88*
ID_OUI_FROM_DATABASE=HTC Corporation
-OUI:0808C2*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:5461EA*
ID_OUI_FROM_DATABASE=Zaplox AB
@@ -36332,9 +37127,6 @@ OUI:5C20D0*
OUI:E0C3F3*
ID_OUI_FROM_DATABASE=zte corporation
-OUI:30CDA7*
- ID_OUI_FROM_DATABASE=Samsung Electronics ITS, Printer division
-
OUI:104D77*
ID_OUI_FROM_DATABASE=Innovative Computer Engineering
@@ -36368,9 +37160,6 @@ OUI:A8D236*
OUI:6C8686*
ID_OUI_FROM_DATABASE=Technonia
-OUI:78521A*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:84E714*
ID_OUI_FROM_DATABASE=Liang Herng Enterprise,Co.Ltd.
@@ -36380,12 +37169,6 @@ OUI:303D08*
OUI:9C541C*
ID_OUI_FROM_DATABASE=Shenzhen My-power Technology Co.,Ltd
-OUI:90187C*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
-OUI:FC1F19*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS CO., LTD.
-
OUI:E496AE*
ID_OUI_FROM_DATABASE=ALTOGRAPHICS Inc.
@@ -36416,9 +37199,6 @@ OUI:D40057*
OUI:48B8DE*
ID_OUI_FROM_DATABASE=HOMEWINS TECHNOLOGY CO.,LTD.
-OUI:20D5BF*
- ID_OUI_FROM_DATABASE=Samsung Eletronics Co., Ltd
-
OUI:1065CF*
ID_OUI_FROM_DATABASE=IQSIM
@@ -36476,9 +37256,6 @@ OUI:B85AF7*
OUI:E0D9A2*
ID_OUI_FROM_DATABASE=Hippih aps
-OUI:B0C4E7*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:F0F669*
ID_OUI_FROM_DATABASE=Motion Analysis Corporation
@@ -36617,9 +37394,6 @@ OUI:50724D*
OUI:B898B0*
ID_OUI_FROM_DATABASE=Atlona Inc.
-OUI:1C66AA*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:2C625A*
ID_OUI_FROM_DATABASE=Finest Security Systems Co., Ltd
@@ -36704,9 +37478,6 @@ OUI:D41E35*
OUI:700BC0*
ID_OUI_FROM_DATABASE=Dewav Technology Company
-OUI:58C38B*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:2CD444*
ID_OUI_FROM_DATABASE=FUJITSU LIMITED
@@ -36740,18 +37511,12 @@ OUI:D8AF3B*
OUI:78D34F*
ID_OUI_FROM_DATABASE=Pace-O-Matic, Inc.
-OUI:D857EF*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:784405*
ID_OUI_FROM_DATABASE=FUJITU(HONG KONG) ELECTRONIC Co.,LTD.
OUI:C03F2A*
ID_OUI_FROM_DATABASE=Biscotti, Inc.
-OUI:5001BB*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:44B382*
ID_OUI_FROM_DATABASE=Kuang-chi Institute of Advanced Technology
@@ -36797,9 +37562,6 @@ OUI:A007B6*
OUI:542A9C*
ID_OUI_FROM_DATABASE=LSY Defense, LLC.
-OUI:D487D8*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:F89955*
ID_OUI_FROM_DATABASE=Fortress Technology Inc
@@ -36839,9 +37601,6 @@ OUI:A4F7D0*
OUI:D4EC0C*
ID_OUI_FROM_DATABASE=Harley-Davidson Motor Company
-OUI:5C0A5B*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS CO., LTD.
-
OUI:6CA96F*
ID_OUI_FROM_DATABASE=TransPacket AS
@@ -36953,12 +37712,6 @@ OUI:8C604F*
OUI:74FF7D*
ID_OUI_FROM_DATABASE=Wren Sound Systems, LLC
-OUI:380A94*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:2CC260*
- ID_OUI_FROM_DATABASE=Ravello Systems
-
OUI:30B216*
ID_OUI_FROM_DATABASE=Hytec Geraetebau GmbH
@@ -37013,9 +37766,6 @@ OUI:A078BA*
OUI:D4507A*
ID_OUI_FROM_DATABASE=CEIVA Logic, Inc
-OUI:184617*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:9CC7D1*
ID_OUI_FROM_DATABASE=SHARP Corporation
@@ -37163,9 +37913,6 @@ OUI:48C1AC*
OUI:046D42*
ID_OUI_FROM_DATABASE=Bryston Ltd.
-OUI:50CCF8*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
-
OUI:D0CF5E*
ID_OUI_FROM_DATABASE=Energy Micro AS
@@ -37316,9 +38063,6 @@ OUI:DCF05D*
OUI:D05A0F*
ID_OUI_FROM_DATABASE=I-BT DIGITAL CO.,LTD
-OUI:9439E5*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:7CDD20*
ID_OUI_FROM_DATABASE=IOXOS Technologies S.A.
@@ -37331,9 +38075,6 @@ OUI:9C7BD2*
OUI:900D66*
ID_OUI_FROM_DATABASE=Digimore Electronics Co., Ltd
-OUI:980C82*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
-
OUI:48C862*
ID_OUI_FROM_DATABASE=Simo Wireless,Inc.
@@ -37502,9 +38243,6 @@ OUI:94E848*
OUI:AC5E8C*
ID_OUI_FROM_DATABASE=Utillink
-OUI:549B12*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:CC7EE7*
ID_OUI_FROM_DATABASE=Panasonic AVC Networks Company
@@ -37538,21 +38276,12 @@ OUI:04C5A4*
OUI:3CA72B*
ID_OUI_FROM_DATABASE=MRV Communications (Networks) LTD
-OUI:EC55F9*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:F4D9FB*
- ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
-
OUI:584C19*
ID_OUI_FROM_DATABASE=Chongqing Guohong Technology Development Company Limited
OUI:D0A311*
ID_OUI_FROM_DATABASE=Neuberger Gebäudeautomation GmbH
-OUI:3C5A37*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:10A13B*
ID_OUI_FROM_DATABASE=FUJIKURA RUBBER LTD.
@@ -37748,9 +38477,6 @@ OUI:942053*
OUI:D49C8E*
ID_OUI_FROM_DATABASE=University of FUKUI
-OUI:3C8BFE*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:2CB0DF*
ID_OUI_FROM_DATABASE=Soliton Technologies Pvt Ltd
@@ -37772,9 +38498,6 @@ OUI:6C9CE9*
OUI:700258*
ID_OUI_FROM_DATABASE=01DB-METRAVIB
-OUI:D4E8B2*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:20FDF1*
ID_OUI_FROM_DATABASE=3COM EUROPE LTD
@@ -37850,9 +38573,6 @@ OUI:180C77*
OUI:ACA016*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:78E400*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:E4AD7D*
ID_OUI_FROM_DATABASE=SCL Elements
@@ -37865,9 +38585,6 @@ OUI:7C051E*
OUI:58570D*
ID_OUI_FROM_DATABASE=Danfoss Solar Inverters
-OUI:E47CF9*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., LTD
-
OUI:0C826A*
ID_OUI_FROM_DATABASE=Wuhan Huagong Genuine Optics Technology Co., Ltd
@@ -37925,9 +38642,6 @@ OUI:34E0D7*
OUI:40520D*
ID_OUI_FROM_DATABASE=Pico Technology
-OUI:8C7CB5*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:543131*
ID_OUI_FROM_DATABASE=Raster Vision Ltd
@@ -38042,9 +38756,6 @@ OUI:F0264C*
OUI:3C1CBE*
ID_OUI_FROM_DATABASE=JADAK LLC
-OUI:506313*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:A8995C*
ID_OUI_FROM_DATABASE=aizo ag
@@ -38150,9 +38861,6 @@ OUI:C0BAE6*
OUI:20BFDB*
ID_OUI_FROM_DATABASE=DVL
-OUI:C87E75*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:889821*
ID_OUI_FROM_DATABASE=TERAON
@@ -38306,9 +39014,6 @@ OUI:0026DD*
OUI:0026DE*
ID_OUI_FROM_DATABASE=FDI MATELEC
-OUI:7825AD*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRONICS CO., LTD.
-
OUI:54B620*
ID_OUI_FROM_DATABASE=SUHDOL E&C Co.Ltd.
@@ -38348,9 +39053,6 @@ OUI:002670*
OUI:002663*
ID_OUI_FROM_DATABASE=Shenzhen Huitaiwei Tech. Ltd, co.
-OUI:00265D*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:0025CD*
ID_OUI_FROM_DATABASE=Skylane Optics
@@ -38615,9 +39317,6 @@ OUI:002485*
OUI:002480*
ID_OUI_FROM_DATABASE=Meteocontrol GmbH
-OUI:002454*
- ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
-
OUI:002448*
ID_OUI_FROM_DATABASE=SpiderCloud Wireless, Inc
@@ -38807,12 +39506,6 @@ OUI:002353*
OUI:00234C*
ID_OUI_FROM_DATABASE=KTC AB
-OUI:00233A*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:002339*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:002304*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -38951,9 +39644,6 @@ OUI:002120*
OUI:002125*
ID_OUI_FROM_DATABASE=KUK JE TONG SHIN Co.,LTD
-OUI:002119*
- ID_OUI_FROM_DATABASE=Samsung Electro-Mechanics
-
OUI:002112*
ID_OUI_FROM_DATABASE=WISCOM SYSTEM CO.,LTD
@@ -39287,9 +39977,6 @@ OUI:001EE9*
OUI:001EEE*
ID_OUI_FROM_DATABASE=ETL Systems Ltd
-OUI:001EE2*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:001E7B*
ID_OUI_FROM_DATABASE=R.I.CO. S.r.l.
@@ -39353,9 +40040,6 @@ OUI:001D1F*
OUI:001D26*
ID_OUI_FROM_DATABASE=Rockridgesound Technology Co.
-OUI:001D25*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:001D1A*
ID_OUI_FROM_DATABASE=OvisLink S.A.
@@ -39503,9 +40187,6 @@ OUI:001C59*
OUI:001C4F*
ID_OUI_FROM_DATABASE=MACAB AB
-OUI:001C43*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:001C37*
ID_OUI_FROM_DATABASE=Callpod, Inc.
@@ -40166,18 +40847,12 @@ OUI:001800*
OUI:0017ED*
ID_OUI_FROM_DATABASE=WooJooIT Ltd.
-OUI:0017D5*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd.
-
OUI:0017DA*
ID_OUI_FROM_DATABASE=Spans Logic
OUI:0017E1*
ID_OUI_FROM_DATABASE=DACOS Technologies Co., Ltd.
-OUI:0017C9*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd.
-
OUI:0017D0*
ID_OUI_FROM_DATABASE=Opticom Communications, LLC
@@ -40211,15 +40886,9 @@ OUI:001681*
OUI:001674*
ID_OUI_FROM_DATABASE=EuroCB (Phils.), Inc.
-OUI:00166B*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:001672*
ID_OUI_FROM_DATABASE=Zenway enterprise ltd
-OUI:00166C*
- ID_OUI_FROM_DATABASE=Samsung Electonics Digital Video System Division
-
OUI:001666*
ID_OUI_FROM_DATABASE=Quantier Communication Inc.
@@ -40667,9 +41336,6 @@ OUI:001255*
OUI:00124E*
ID_OUI_FROM_DATABASE=XAC AUTOMATION CORP.
-OUI:001247*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd.
-
OUI:001248*
ID_OUI_FROM_DATABASE=EMC Corporation (Kashya)
@@ -42035,9 +42701,6 @@ OUI:0009FC*
OUI:000A03*
ID_OUI_FROM_DATABASE=ENDESA SERVICIOS, S.L.
-OUI:0006F4*
- ID_OUI_FROM_DATABASE=Prime Electronics & Satellitics Inc.
-
OUI:000705*
ID_OUI_FROM_DATABASE=Endress & Hauser GmbH & Co
@@ -42422,9 +43085,6 @@ OUI:000603*
OUI:A06A00*
ID_OUI_FROM_DATABASE=Verilink Corporation
-OUI:0005EE*
- ID_OUI_FROM_DATABASE=Siemens AB, Infrastructure & Cities, Building Technologies Division, IC BT SSP SP BA PR
-
OUI:0005F5*
ID_OUI_FROM_DATABASE=Geospace Technologies
@@ -43037,9 +43697,6 @@ OUI:00B017*
OUI:0030F0*
ID_OUI_FROM_DATABASE=Uniform Industrial Corp.
-OUI:00B0CE*
- ID_OUI_FROM_DATABASE=TECHNOLOGY RESCUE
-
OUI:00B080*
ID_OUI_FROM_DATABASE=Mannesmann Ipulsys B.V.
@@ -45413,9 +46070,6 @@ OUI:3039F2*
OUI:000827*
ID_OUI_FROM_DATABASE=ADB Broadband Italia
-OUI:001CA8*
- ID_OUI_FROM_DATABASE=AirTies Wireless Netowrks
-
OUI:9097D5*
ID_OUI_FROM_DATABASE=Espressif Inc.
@@ -45449,18 +46103,6 @@ OUI:E8C74F*
OUI:E8F724*
ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
-OUI:1C1448*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:707E43*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001AAD*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:A47AA4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:701A04*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
@@ -45518,66 +46160,6 @@ OUI:0022F4*
OUI:080046*
ID_OUI_FROM_DATABASE=Sony Corporation
-OUI:0003E0*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00128A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001225*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:3C754A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0024C1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002136*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0022B4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002395*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0023ED*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001B52*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00230B*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001E8D*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0023A2*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001BDD*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001404*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:745612*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:E46449*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002493*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:40FC89*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00195E*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:000D92*
ID_OUI_FROM_DATABASE=ARIMA Communications Corp.
@@ -45818,12 +46400,6 @@ OUI:0C75BD*
OUI:38F0C8*
ID_OUI_FROM_DATABASE=Livestream
-OUI:74EAE8*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:A811FC*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:0C1167*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -45971,9 +46547,6 @@ OUI:9897D1*
OUI:94C960*
ID_OUI_FROM_DATABASE=Zhongshan B&T technology.co.,ltd
-OUI:E04FBD*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
OUI:001479*
ID_OUI_FROM_DATABASE=NEC Magnus Communications,Ltd.
@@ -46301,15 +46874,9 @@ OUI:E0A3AC*
OUI:E00EDA*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:044E5A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:6C2483*
ID_OUI_FROM_DATABASE=Microsoft Mobile Oy
-OUI:94E8C5*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:848319*
ID_OUI_FROM_DATABASE=Hangzhou Zero Zero Technology Co., Ltd.
@@ -46451,9 +47018,6 @@ OUI:9CDD1F*
OUI:00EBD5*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:F8A097*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:1C7B23*
ID_OUI_FROM_DATABASE=Qingdao Hisense Communications Co.,Ltd.
@@ -46484,9 +47048,6 @@ OUI:40F413*
OUI:2C094D*
ID_OUI_FROM_DATABASE=Raptor Engineering, LLC
-OUI:ACE77B*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
OUI:B0E235*
ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
@@ -46583,9 +47144,6 @@ OUI:00199D*
OUI:6C0B84*
ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
-OUI:24A43C*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks
-
OUI:E4509A*
ID_OUI_FROM_DATABASE=HW Communications Ltd
@@ -46679,18 +47237,6 @@ OUI:00167A*
OUI:28BE03*
ID_OUI_FROM_DATABASE=TCT mobile ltd
-OUI:D4E33F*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:143E60*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:84DBFC*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:38521A*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
OUI:F4C613*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
@@ -46883,9 +47429,6 @@ OUI:D013FD*
OUI:D8E72B*
ID_OUI_FROM_DATABASE=NetScout Systems, Inc.
-OUI:BC644B*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:04FEA1*
ID_OUI_FROM_DATABASE=Fihonest communication co.,Ltd
@@ -46898,6 +47441,552 @@ OUI:A8BD27*
OUI:981E0F*
ID_OUI_FROM_DATABASE=Jeelan (Shanghai Jeelan Technology Information Inc
+OUI:548CA0*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
+OUI:707E43*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:1C1448*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:A47AA4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001AAD*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:E83EFC*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:E8892C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DD3*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:3CDFA9*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:8C09F4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:083E0C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:D404CD*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:203D66*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:6455B1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:C005C2*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001225*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00128A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0003E0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0015D1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:E46449*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:745612*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:74EAE8*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:A811FC*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:044E5A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:94E8C5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:F8A097*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:BC644B*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:347A60*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0023ED*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002395*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0022B4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002136*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0024C1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:3C754A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:40FC89*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002493*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00195E*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001404*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001BDD*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0023A2*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001E8D*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00230B*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001B52*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:84E058*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:003676*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001CA8*
+ ID_OUI_FROM_DATABASE=AirTies Wireless Networks
+
+OUI:001EE2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:001C43*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:001D25*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:3C5A37*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:549B12*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:3C8BFE*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:00265D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:D4E8B2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0017D5*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:001247*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:78521A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:E4121D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:684898*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:F409D8*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:B479A7*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:18D276*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:1C66AA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:58C38B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0808C2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:B0C4E7*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:D890E8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:34AA8B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:002339*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:D487D8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:184617*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:5001BB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:380A94*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:D857EF*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:24C696*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:181EB0*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:20D390*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:343111*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:34BE00*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:50CCF8*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:980C82*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:002119*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:7825AD*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:F4D9FB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0017C9*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:00166B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:00166C*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:E47CF9*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:002454*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:5C0A5B*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:90187C*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:FC1F19*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:20D5BF*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:30CDA7*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:00749C*
+ ID_OUI_FROM_DATABASE=RUIJIE NETWORKS CO., LTD.
+
+OUI:300ED5*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:D02788*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:0014A4*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:0016CE*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:001DD9*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:001FE2*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:48E244*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:30F772*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:90489A*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:543530*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:C03896*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:2C337A*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:ACD1B8*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:9439E5*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:506313*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:78E400*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:40490F*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:28565A*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:001F3A*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:002269*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:5C8613*
+ ID_OUI_FROM_DATABASE=Beijing Zhoenet Technology Co., Ltd
+
+OUI:8C7CB5*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:EC55F9*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:C8B21E*
+ ID_OUI_FROM_DATABASE=CHIPSEA TECHNOLOGIES (SHENZHEN) CORP.
+
+OUI:B072BF*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+
+OUI:600B03*
+ ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+
+OUI:503F98*
+ ID_OUI_FROM_DATABASE=CMITECH
+
+OUI:C09F05*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
+OUI:AC63BE*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
+OUI:38521A*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:A41437*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
+OUI:884CCF*
+ ID_OUI_FROM_DATABASE=Pulzze Systems, Inc
+
+OUI:84DBFC*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:143E60*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:D4E33F*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:00233A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:C87E75*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:5454CF*
+ ID_OUI_FROM_DATABASE=PROBEDIGITAL CO.,LTD
+
+OUI:F0D5BF*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
+OUI:748A69*
+ ID_OUI_FROM_DATABASE=Korea Image Technology Co., Ltd
+
+OUI:1C9D3E*
+ ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
+
+OUI:30B64F*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
+OUI:DC0D30*
+ ID_OUI_FROM_DATABASE=Shenzhen Feasycom Technology Co., Ltd.
+
+OUI:008731*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:B4EFFA*
+ ID_OUI_FROM_DATABASE=Lemobile Information Technology (Beijing) Co., Ltd.
+
+OUI:0005EE*
+ ID_OUI_FROM_DATABASE=Vanderbilt International (SWE) AB
+
+OUI:9495A0*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
+OUI:CCFD17*
+ ID_OUI_FROM_DATABASE=TCT mobile ltd
+
+OUI:4CF95D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:8421F1*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:707990*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:38D547*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
+OUI:248894*
+ ID_OUI_FROM_DATABASE=shenzhen lensun Communication Technology LTD
+
+OUI:60A4D0*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:3C8BCD*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
+
+OUI:E43ED7*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
+OUI:38A4ED*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
+OUI:00B0CE*
+ ID_OUI_FROM_DATABASE=Viveris Technologies
+
+OUI:E00DB9*
+ ID_OUI_FROM_DATABASE=Cree, Inc.
+
+OUI:40FE0D*
+ ID_OUI_FROM_DATABASE=MAXIO
+
+OUI:609AC1*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:F07960*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:9C8BA0*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:9840BB*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
+OUI:CC2D83*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
+OUI:4C3275*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:E04FBD*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:ACE77B*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:00B0E1*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:0006F4*
+ ID_OUI_FROM_DATABASE=Prime Electronics & Satellitics Inc.
+
+OUI:24A43C*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:28EE52*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
+OUI:D4E90B*
+ ID_OUI_FROM_DATABASE=CVT CO.,LTD
+
+OUI:788A20*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:905C44*
+ ID_OUI_FROM_DATABASE=Compal Broadband Networks, Inc.
+
+OUI:FC372B*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:0CD86C*
+ ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
+
+OUI:8C60E7*
+ ID_OUI_FROM_DATABASE=MPGIO CO.,LTD
+
+OUI:2C0E3D*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:24C44A*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:B83A9D*
+ ID_OUI_FROM_DATABASE=Alarm.com
+
+OUI:00BBC1*
+ ID_OUI_FROM_DATABASE=CANON INC.
+
+OUI:2CC260*
+ ID_OUI_FROM_DATABASE=Oracle Corporation
+
+OUI:1C14B3*
+ ID_OUI_FROM_DATABASE=Airwire Technologies
+
+OUI:407183*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
+OUI:0059DC*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:14612F*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
OUI:D86CE9*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
@@ -47021,9 +48110,6 @@ OUI:D40B1A*
OUI:A08D16*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:2C8158*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:601888*
ID_OUI_FROM_DATABASE=zte corporation
@@ -47078,18 +48164,6 @@ OUI:1002B5*
OUI:A468BC*
ID_OUI_FROM_DATABASE=Private
-OUI:001DCF*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001DD5*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001DD0*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:5C571A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:441EA1*
ID_OUI_FROM_DATABASE=Hewlett Packard
@@ -47105,9 +48179,6 @@ OUI:00237D*
OUI:002655*
ID_OUI_FROM_DATABASE=Hewlett Packard
-OUI:001438*
- ID_OUI_FROM_DATABASE=Hewlett Packard
-
OUI:001560*
ID_OUI_FROM_DATABASE=Hewlett Packard
@@ -47135,24 +48206,6 @@ OUI:38EAA7*
OUI:E83935*
ID_OUI_FROM_DATABASE=Hewlett Packard
-OUI:901ACA*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:E8ED05*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:90C792*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:789684*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:CC65AD*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:986B3D*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:08EB74*
ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
@@ -47288,18 +48341,6 @@ OUI:2002AF*
OUI:0026E8*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
-OUI:001C26*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:00197D*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:90FBA6*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:142D27*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:ECCB30*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -47480,18 +48521,6 @@ OUI:005054*
OUI:3C0E23*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:001CC3*
- ID_OUI_FROM_DATABASE=Pace plc
-
-OUI:14D4FE*
- ID_OUI_FROM_DATABASE=Pace plc
-
-OUI:70B14E*
- ID_OUI_FROM_DATABASE=Pace plc
-
-OUI:707630*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:90E6BA*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
@@ -47906,9 +48935,6 @@ OUI:4473D6*
OUI:E80734*
ID_OUI_FROM_DATABASE=Champion Optical Network Engineering, LLC
-OUI:D02544*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co., LTD.
-
OUI:6CEBB2*
ID_OUI_FROM_DATABASE=Dongguan Sen DongLv Electronics Co.,Ltd
@@ -48020,9 +49046,6 @@ OUI:081FEB*
OUI:785F4C*
ID_OUI_FROM_DATABASE=Argox Information Co., Ltd.
-OUI:E866C4*
- ID_OUI_FROM_DATABASE=Datawise Systems
-
OUI:5870C6*
ID_OUI_FROM_DATABASE=Shanghai Xiaoyi Technology Co., Ltd.
@@ -48413,9 +49436,6 @@ OUI:80EACA*
OUI:4CBC42*
ID_OUI_FROM_DATABASE=Shenzhen Hangsheng Electronics Co.,Ltd.
-OUI:D82522*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:987E46*
ID_OUI_FROM_DATABASE=Emizon Networks Limited
@@ -48449,9 +49469,6 @@ OUI:D8977C*
OUI:80AD67*
ID_OUI_FROM_DATABASE=Kasda Networks Inc
-OUI:9CAD97*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:30595B*
ID_OUI_FROM_DATABASE=streamnow AG
@@ -48749,9 +49766,6 @@ OUI:10DDF4*
OUI:080371*
ID_OUI_FROM_DATABASE=KRG CORPORATE
-OUI:B43A28*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:ACC595*
ID_OUI_FROM_DATABASE=Graphite Systems
@@ -48791,9 +49805,6 @@ OUI:F8572E*
OUI:E0E631*
ID_OUI_FROM_DATABASE=SNB TECHNOLOGIES LIMITED
-OUI:9401C2*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:20C60D*
ID_OUI_FROM_DATABASE=Shanghai annijie Information technology Co.,LTD
@@ -48875,9 +49886,6 @@ OUI:044F8B*
OUI:9CE7BD*
ID_OUI_FROM_DATABASE=Winduskorea co., Ltd
-OUI:3842A6*
- ID_OUI_FROM_DATABASE=Ingenieurbuero Stahlkopf
-
OUI:A0BF50*
ID_OUI_FROM_DATABASE=S.C. ADD-PRODUCTION S.R.L.
@@ -48926,9 +49934,6 @@ OUI:7CBF88*
OUI:90028A*
ID_OUI_FROM_DATABASE=Shenzhen Shidean Legrand Electronic Products Co.,Ltd
-OUI:4C3C16*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:90356E*
ID_OUI_FROM_DATABASE=Vodafone Omnitel N.V.
@@ -48995,9 +50000,6 @@ OUI:58E02C*
OUI:E481B3*
ID_OUI_FROM_DATABASE=Shenzhen ACT Industrial Co.,Ltd.
-OUI:BC8556*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:E4F3E3*
ID_OUI_FROM_DATABASE=Shanghai iComhome Co.,Ltd.
@@ -49040,18 +50042,12 @@ OUI:58F387*
OUI:B0793C*
ID_OUI_FROM_DATABASE=Revolv Inc
-OUI:D022BE*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co.,LTD.
-
OUI:20CEC4*
ID_OUI_FROM_DATABASE=Peraso Technologies
OUI:04848A*
ID_OUI_FROM_DATABASE=7INOVA TECHNOLOGY LIMITED
-OUI:94D771*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:20C6EB*
ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company
@@ -49076,9 +50072,6 @@ OUI:B847C6*
OUI:4CDF3D*
ID_OUI_FROM_DATABASE=TEAM ENGINEERS ADVANCE TECHNOLOGIES INDIA PVT LTD
-OUI:B85E7B*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:70F176*
ID_OUI_FROM_DATABASE=Data Modul AG
@@ -49100,9 +50093,6 @@ OUI:C034B4*
OUI:74ADB7*
ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
-OUI:C462EA*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:DC6F00*
ID_OUI_FROM_DATABASE=Livescribe, Inc.
@@ -49160,9 +50150,6 @@ OUI:0C2D89*
OUI:604A1C*
ID_OUI_FROM_DATABASE=SUYIN Corporation
-OUI:3423BA*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics co.,LTD.
-
OUI:A4D3B5*
ID_OUI_FROM_DATABASE=GLITEL Stropkov, s.r.o.
@@ -49265,9 +50252,6 @@ OUI:E0C6B3*
OUI:FCDB96*
ID_OUI_FROM_DATABASE=ENERVALLEY CO., LTD
-OUI:F06BCA*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:FC8B97*
ID_OUI_FROM_DATABASE=Shenzhen Gongjin Electronics Co.,Ltd
@@ -49295,9 +50279,6 @@ OUI:18E8DD*
OUI:4CCC34*
ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
-OUI:F82FA8*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:F084C9*
ID_OUI_FROM_DATABASE=zte corporation
@@ -49376,15 +50357,9 @@ OUI:6C9AC9*
OUI:10F49A*
ID_OUI_FROM_DATABASE=T3 Innovation
-OUI:1C5A3E*
- ID_OUI_FROM_DATABASE=Samsung Eletronics Co., Ltd (Visual Display Divison)
-
OUI:5865E6*
ID_OUI_FROM_DATABASE=INFOMARK CO., LTD.
-OUI:BC20A4*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:60BD91*
ID_OUI_FROM_DATABASE=Move Innovation
@@ -49463,9 +50438,6 @@ OUI:683B1E*
OUI:D4136F*
ID_OUI_FROM_DATABASE=Asia Pacific Brands
-OUI:9C2A70*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:A0A130*
ID_OUI_FROM_DATABASE=DLI Taiwan Branch office
@@ -49484,9 +50456,6 @@ OUI:2C26C5*
OUI:BC629F*
ID_OUI_FROM_DATABASE=Telenet Systems P. Ltd.
-OUI:F47B5E*
- ID_OUI_FROM_DATABASE=Samsung Eletronics Co., Ltd
-
OUI:B47F5E*
ID_OUI_FROM_DATABASE=Foresight Manufacture (S) Pte Ltd
@@ -49508,9 +50477,6 @@ OUI:F0F644*
OUI:30D357*
ID_OUI_FROM_DATABASE=Logosol, Inc.
-OUI:14F42A*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:2C441B*
ID_OUI_FROM_DATABASE=Spectrum Medical Limited
@@ -49853,9 +50819,6 @@ OUI:045A95*
OUI:B40E96*
ID_OUI_FROM_DATABASE=HERAN
-OUI:BC851F*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:0CAF5A*
ID_OUI_FROM_DATABASE=GENUS POWER INFRASTRUCTURES LIMITED
@@ -49943,9 +50906,6 @@ OUI:B88F14*
OUI:94FAE8*
ID_OUI_FROM_DATABASE=Shenzhen Eycom Technology Co., Ltd
-OUI:4844F7*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., LTD
-
OUI:3CA315*
ID_OUI_FROM_DATABASE=Bless Information & Communications Co., Ltd
@@ -49970,9 +50930,6 @@ OUI:A4B980*
OUI:002D76*
ID_OUI_FROM_DATABASE=TITECH GmbH
-OUI:DC7144*
- ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
-
OUI:78A183*
ID_OUI_FROM_DATABASE=Advidia
@@ -50003,9 +50960,6 @@ OUI:842B50*
OUI:0C5A19*
ID_OUI_FROM_DATABASE=Axtion Sdn Bhd
-OUI:606BBD*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., LTD
-
OUI:A00CA1*
ID_OUI_FROM_DATABASE=SKTB SKiT
@@ -50099,9 +51053,6 @@ OUI:3499D7*
OUI:7C336E*
ID_OUI_FROM_DATABASE=MEG Electronics Inc.
-OUI:D0C1B1*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:D4D249*
ID_OUI_FROM_DATABASE=Power Ethernet
@@ -50267,9 +51218,6 @@ OUI:8C94CF*
OUI:149090*
ID_OUI_FROM_DATABASE=KongTop industrial(shen zhen)CO.,LTD
-OUI:F008F1*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:CCF8F0*
ID_OUI_FROM_DATABASE=Xi'an HISU Multimedia Technology Co.,Ltd.
@@ -50513,9 +51461,6 @@ OUI:90B8D0*
OUI:909060*
ID_OUI_FROM_DATABASE=RSI VIDEO TECHNOLOGIES
-OUI:3859F9*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:281471*
ID_OUI_FROM_DATABASE=Lantis co., LTD.
@@ -50603,9 +51548,6 @@ OUI:DC9B1E*
OUI:5C7757*
ID_OUI_FROM_DATABASE=Haivision Network Video
-OUI:3816D1*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:E8B4AE*
ID_OUI_FROM_DATABASE=Shenzhen C&D Electronics Co.,Ltd
@@ -50711,18 +51653,12 @@ OUI:B8BA68*
OUI:BC38D2*
ID_OUI_FROM_DATABASE=Pandachip Limited
-OUI:A00BBA*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS
-
OUI:14EE9D*
ID_OUI_FROM_DATABASE=AirNav Systems LLC
OUI:48174C*
ID_OUI_FROM_DATABASE=MicroPower technologies
-OUI:78471D*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:F81037*
ID_OUI_FROM_DATABASE=Atopia Systems, LP
@@ -50750,15 +51686,9 @@ OUI:2C8065*
OUI:F8F014*
ID_OUI_FROM_DATABASE=RackWare Inc.
-OUI:889FFA*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:E41C4B*
ID_OUI_FROM_DATABASE=V2 TECHNOLOGY, INC.
-OUI:F0F002*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:E0143E*
ID_OUI_FROM_DATABASE=Modoosis Inc.
@@ -50831,9 +51761,6 @@ OUI:181456*
OUI:E8995A*
ID_OUI_FROM_DATABASE=PiiGAB, Processinformation i Goteborg AB
-OUI:18F46A*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:D4E32C*
ID_OUI_FROM_DATABASE=S. Siedle & Sohne
@@ -50861,9 +51788,6 @@ OUI:D82986*
OUI:C03B8F*
ID_OUI_FROM_DATABASE=Minicom Digital Signage
-OUI:D48890*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:A4218A*
ID_OUI_FROM_DATABASE=Nortel Networks
@@ -51014,9 +51938,6 @@ OUI:DCFAD5*
OUI:D84606*
ID_OUI_FROM_DATABASE=Silicon Valley Global Marketing
-OUI:5CAC4C*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:689234*
ID_OUI_FROM_DATABASE=Ruckus Wireless
@@ -51209,9 +52130,6 @@ OUI:7884EE*
OUI:2C3F3E*
ID_OUI_FROM_DATABASE=Alge-Timing GmbH
-OUI:ECE09B*
- ID_OUI_FROM_DATABASE=Samsung electronics CO., LTD
-
OUI:C0CFA3*
ID_OUI_FROM_DATABASE=Creative Electronics & Software, Inc.
@@ -51224,9 +52142,6 @@ OUI:844823*
OUI:D0F0DB*
ID_OUI_FROM_DATABASE=Ericsson
-OUI:34C3AC*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:7C1476*
ID_OUI_FROM_DATABASE=Damall Technologies SAS
@@ -51299,9 +52214,6 @@ OUI:8C8401*
OUI:6C7039*
ID_OUI_FROM_DATABASE=Novar GmbH
-OUI:C44619*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:A4561B*
ID_OUI_FROM_DATABASE=MCOT Corporation
@@ -51335,12 +52247,6 @@ OUI:E02636*
OUI:4456B7*
ID_OUI_FROM_DATABASE=Spawn Labs, Inc
-OUI:0C6076*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:0CEEE6*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:A09805*
ID_OUI_FROM_DATABASE=OpenVox Communication Co Ltd
@@ -51377,12 +52283,6 @@ OUI:E80B13*
OUI:44C9A2*
ID_OUI_FROM_DATABASE=Greenwald Industries
-OUI:9CB206*
- ID_OUI_FROM_DATABASE=PROCENTEC
-
-OUI:44F459*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:646E6C*
ID_OUI_FROM_DATABASE=Radio Datacom LLC
@@ -51599,9 +52499,6 @@ OUI:002666*
OUI:002665*
ID_OUI_FROM_DATABASE=ProtectedLogic Corporation
-OUI:00265F*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:002651*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -51677,9 +52574,6 @@ OUI:00257E*
OUI:002572*
ID_OUI_FROM_DATABASE=Nemo-Q International AB
-OUI:002566*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:00256B*
ID_OUI_FROM_DATABASE=ATENIX E.E. s.r.l.
@@ -51809,9 +52703,6 @@ OUI:0023D0*
OUI:0023CA*
ID_OUI_FROM_DATABASE=Behind The Set, LLC
-OUI:0023D6*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
-
OUI:0024B0*
ID_OUI_FROM_DATABASE=ESAB AB
@@ -51833,9 +52724,6 @@ OUI:00248A*
OUI:00248F*
ID_OUI_FROM_DATABASE=DO-MONIX
-OUI:002491*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:002496*
ID_OUI_FROM_DATABASE=Ginzinger electronic systems
@@ -52568,9 +53456,6 @@ OUI:001DFC*
OUI:001DF5*
ID_OUI_FROM_DATABASE=Sunshine Co,LTD
-OUI:001DF6*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:001DF0*
ID_OUI_FROM_DATABASE=Vidient Systems, Inc.
@@ -52919,9 +53804,6 @@ OUI:001BA4*
OUI:001B9F*
ID_OUI_FROM_DATABASE=Calyptech Pty Ltd
-OUI:001B98*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd.
-
OUI:001B9D*
ID_OUI_FROM_DATABASE=Novus Security Sp. z o.o.
@@ -53126,9 +54008,6 @@ OUI:001A2D*
OUI:001A32*
ID_OUI_FROM_DATABASE=ACTIVA MULTIMEDIA
-OUI:001A39*
- ID_OUI_FROM_DATABASE=Merten GmbH&CoKG
-
OUI:001A28*
ID_OUI_FROM_DATABASE=ASWT Co., LTD. Taiwan Branch H.K.
@@ -53450,9 +54329,6 @@ OUI:001634*
OUI:00162D*
ID_OUI_FROM_DATABASE=STNet Co., Ltd.
-OUI:001628*
- ID_OUI_FROM_DATABASE=Ultra Electronics Manufacturing and Card Systems
-
OUI:001621*
ID_OUI_FROM_DATABASE=Colorado Vnet
@@ -53561,9 +54437,6 @@ OUI:0015FE*
OUI:0015FD*
ID_OUI_FROM_DATABASE=Complete Media Systems
-OUI:0015FF*
- ID_OUI_FROM_DATABASE=Novatel Wireless, Inc.
-
OUI:0015F8*
ID_OUI_FROM_DATABASE=Kingtronics Industrial Co. Ltd.
@@ -53612,9 +54485,6 @@ OUI:0015C2*
OUI:0015BE*
ID_OUI_FROM_DATABASE=Iqua Ltd.
-OUI:0015B9*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd.
-
OUI:0016EF*
ID_OUI_FROM_DATABASE=Koko Fitness, Inc.
@@ -58010,9 +58880,6 @@ OUI:0000EE*
OUI:000089*
ID_OUI_FROM_DATABASE=CAYMAN SYSTEMS INC.
-OUI:0000F0*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRONICS CO., LTD.
-
OUI:000021*
ID_OUI_FROM_DATABASE=SUREMAN COMP. & COMMUN. CORP.
@@ -58748,36 +59615,6 @@ OUI:001FE4*
OUI:002298*
ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
-OUI:0019A6*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001700*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0015A8*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:000E5C*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:000CE5*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0004BD*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00E06F*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:386BBB*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0015CF*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0014E8*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:24FD52*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
@@ -58790,48 +59627,6 @@ OUI:9CB70D*
OUI:1C659D*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
-OUI:F80BBE*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:DC4517*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:74F612*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:74E7C6*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:B81619*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:B077AC*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:145BD1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:6CC1D2*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0025F2*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002374*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002641*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0026BA*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002180*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0019C0*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:001B9E*
ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
@@ -59156,9 +59951,6 @@ OUI:9CAED3*
OUI:F45C89*
ID_OUI_FROM_DATABASE=Apple, Inc.
-OUI:A41588*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:8C3C4A*
ID_OUI_FROM_DATABASE=NAKAYO TELECOMMUNICATIONS,INC
@@ -59462,9 +60254,6 @@ OUI:50DD4F*
OUI:904D4A*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
-OUI:38700C*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:7C79E8*
ID_OUI_FROM_DATABASE=PayRange Inc.
@@ -59555,9 +60344,6 @@ OUI:C83DFC*
OUI:0016FB*
ID_OUI_FROM_DATABASE=SHENZHEN MTC CO LTD
-OUI:08010F*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
OUI:381DD9*
ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
@@ -59585,9 +60371,6 @@ OUI:E0A8B8*
OUI:B88198*
ID_OUI_FROM_DATABASE=Intel Corporate
-OUI:CCA260*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
-
OUI:E4FB8F*
ID_OUI_FROM_DATABASE=MOBIWIRE MOBILES (NINGBO) CO.,LTD
@@ -59636,9 +60419,6 @@ OUI:587E61*
OUI:340AFF*
ID_OUI_FROM_DATABASE=Qingdao Hisense Communications Co.,Ltd.
-OUI:FC51A4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:F85A00*
ID_OUI_FROM_DATABASE=Sanford LP
@@ -59789,9 +60569,6 @@ OUI:0010C6*
OUI:00247E*
ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
-OUI:DC9FDB*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks
-
OUI:001639*
ID_OUI_FROM_DATABASE=Ubiquam Co., Ltd.
@@ -59888,18 +60665,9 @@ OUI:94D723*
OUI:A89DD2*
ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co.,Ltd
-OUI:903AA0*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
OUI:184A6F*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
-OUI:FC2FAA*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
-OUI:BC52B4*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
OUI:A0F3E4*
ID_OUI_FROM_DATABASE=Alcatel-Lucent IPD
@@ -59909,12 +60677,171 @@ OUI:002105*
OUI:000772*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
+OUI:F06BCA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:3423BA*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:D022BE*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:D02544*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:BC20A4*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:14F42A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:BC851F*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:B85E7B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:C462EA*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0023D6*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:002491*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:001B98*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:44F459*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:34C3AC*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:94D771*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:4C3C16*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:9401C2*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:B43A28*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:A8C83A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:849FB5*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:D0C1B1*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:F008F1*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:782079*
+ ID_OUI_FROM_DATABASE=ID Tech
+
+OUI:98234E*
+ ID_OUI_FROM_DATABASE=Micromedia AG
+
+OUI:E80036*
+ ID_OUI_FROM_DATABASE=Befs co,. ltd
+
+OUI:24590B*
+ ID_OUI_FROM_DATABASE=White Sky Inc. Limited
+
+OUI:10C60C*
+ ID_OUI_FROM_DATABASE=Domino UK Ltd
+
+OUI:3842A6*
+ ID_OUI_FROM_DATABASE=Ingenieurbuero Stahlkopf
+
+OUI:E866C4*
+ ID_OUI_FROM_DATABASE=Diamanti
+
+OUI:78471D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:3816D1*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:004A77*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:D48890*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:002566*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:00265F*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:001628*
+ ID_OUI_FROM_DATABASE=Magicard Ltd
+
+OUI:E4C801*
+ ID_OUI_FROM_DATABASE=BLU Products Inc
+
+OUI:00A6CA*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:9C7DA3*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:F02FA7*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:883FD3*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:A04E01*
+ ID_OUI_FROM_DATABASE=CENTRAL ENGINEERING co.,ltd.
+
+OUI:245CBF*
+ ID_OUI_FROM_DATABASE=NCSE
+
+OUI:84CD62*
+ ID_OUI_FROM_DATABASE=ShenZhen IDWELL Technology CO.,Ltd
+
+OUI:DC9FDB*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:B0958E*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
+OUI:001A39*
+ ID_OUI_FROM_DATABASE=Merten GmbH&CoKG
+
+OUI:007B18*
+ ID_OUI_FROM_DATABASE=SENTRY Co., LTD.
+
+OUI:144D67*
+ ID_OUI_FROM_DATABASE=Zioncom Electronics (Shenzhen) Ltd.
+
+OUI:34F39A*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
+OUI:20A8B9*
+ ID_OUI_FROM_DATABASE=Siemens
+
+OUI:C81B5C*
+ ID_OUI_FROM_DATABASE=BCTech
+
+OUI:3C2AF4*
+ ID_OUI_FROM_DATABASE=Brother Industries, LTD.
+
+OUI:20719E*
+ ID_OUI_FROM_DATABASE=SF Technology Co.,Ltd
+
OUI:E0DDC0*
ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
-OUI:702526*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
-
OUI:982F3C*
ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd.
@@ -60077,12 +61004,6 @@ OUI:34B1F7*
OUI:C4EDBA*
ID_OUI_FROM_DATABASE=Texas Instruments
-OUI:641269*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:287AEE*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:A40DBC*
ID_OUI_FROM_DATABASE=Xiamen Intretech Inc.
@@ -60110,6 +61031,333 @@ OUI:345760*
OUI:343DC4*
ID_OUI_FROM_DATABASE=BUFFALO.INC
+OUI:6CEFC6*
+ ID_OUI_FROM_DATABASE=SHENZHEN TWOWING TECHNOLOGIES CO.,LTD.
+
+OUI:986B3D*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:CC65AD*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:789684*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:90C792*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0015CF*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:386BBB*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00E06F*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0004BD*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:5C571A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DD0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DD5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DCF*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:E8ED05*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:901ACA*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002A10*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:74E7C6*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:74F612*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:DC4517*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:F80BBE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:6CC1D2*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:145BD1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:B077AC*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:B81619*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:A41588*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:38700C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:FC51A4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:287AEE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:641269*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001CC3*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:14D4FE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:70B14E*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:D82522*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:707630*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:000CE5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:000E5C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0015A8*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001700*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0019A6*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0014E8*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002180*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0026BA*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002641*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002374*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0025F2*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0019C0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:886AB1*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
+OUI:44D6E1*
+ ID_OUI_FROM_DATABASE=Snuza International Pty. Ltd.
+
+OUI:0015B9*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:001DF6*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:ECE09B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:606BBD*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0000F0*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:4844F7*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:DC7144*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:A00BBA*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:1C5A3E*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:F47B5E*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:C44619*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:F0F002*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:889FFA*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:5CAC4C*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:18F46A*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:3859F9*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:BC8556*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:9C2A70*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:F82FA8*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:0CEEE6*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:0C6076*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:90FBA6*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:00197D*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:001C26*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:9CAD97*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:2C8158*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:142D27*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:843DC6*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:407C7D*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:BC52B4*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:FC2FAA*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:903AA0*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:702526*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:38F7B2*
+ ID_OUI_FROM_DATABASE=SEOJUN ELECTRIC
+
+OUI:7802B7*
+ ID_OUI_FROM_DATABASE=ShenZhen Ultra Easy Technology CO.,LTD
+
+OUI:88AD43*
+ ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+
+OUI:E4186B*
+ ID_OUI_FROM_DATABASE=ZyXEL Communications Corporation
+
+OUI:6C71BD*
+ ID_OUI_FROM_DATABASE=EZELINK TELECOM
+
+OUI:842519*
+ ID_OUI_FROM_DATABASE=Samsung Electronics
+
+OUI:88DEA9*
+ ID_OUI_FROM_DATABASE=Roku, Inc.
+
+OUI:FC83C6*
+ ID_OUI_FROM_DATABASE=N-Radio Technologies Co., Ltd.
+
+OUI:B4E782*
+ ID_OUI_FROM_DATABASE=Vivalnk
+
+OUI:008701*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:FC4203*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:1C232C*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:08010F*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:CCA260*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:0015FF*
+ ID_OUI_FROM_DATABASE=Novatel Wireless Solutions, Inc.
+
+OUI:203CAE*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:748D08*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:00D78F*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:A03BE3*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:18E29F*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
+OUI:886B0F*
+ ID_OUI_FROM_DATABASE=Bluegiga Technologies OY
+
+OUI:001438*
+ ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
+
+OUI:98541B*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
+OUI:CC61E5*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
+OUI:404E36*
+ ID_OUI_FROM_DATABASE=HTC Corporation
+
+OUI:9CB206*
+ ID_OUI_FROM_DATABASE=PROCENTEC
+
+OUI:1C40E8*
+ ID_OUI_FROM_DATABASE=SHENZHEN PROGRESS&WIN TECHNOLOGY CO.,LTD
+
+OUI:C8D3FF*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
OUI:2C3996*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
@@ -60182,24 +61430,15 @@ OUI:3CDD89*
OUI:2C56DC*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
-OUI:001E4C*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:B8AF67*
ID_OUI_FROM_DATABASE=Hewlett Packard
-OUI:9C3426*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:188B45*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
OUI:B0C090*
ID_OUI_FROM_DATABASE=Chicony Electronics Co., Ltd.
-OUI:001DD2*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:1CA770*
ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
@@ -60317,30 +61556,6 @@ OUI:0060B0*
OUI:24BE05*
ID_OUI_FROM_DATABASE=Hewlett Packard
-OUI:94877C*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:407009*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:F8EDA5*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:5465DE*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:6CCA08*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:5C8FE0*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:BCCAB5*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:000FCC*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:000423*
ID_OUI_FROM_DATABASE=Intel Corporation
@@ -60383,21 +61598,12 @@ OUI:BCCFCC*
OUI:B0F1A3*
ID_OUI_FROM_DATABASE=Fengfan (BeiJing) Technology Co., Ltd.
-OUI:90CDB6*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:7C7D3D*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
OUI:4482E5*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:00265C*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:002556*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:542758*
ID_OUI_FROM_DATABASE=Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
@@ -60431,21 +61637,12 @@ OUI:9060F1*
OUI:EC26CA*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
-OUI:001FE1*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:002268*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:A09347*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
OUI:2C088C*
ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
-OUI:D42C0F*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:40F308*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
@@ -60455,27 +61652,6 @@ OUI:5CDAD4*
OUI:000E6D*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
-OUI:904CE5*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:CCAF78*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:1C666D*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:785968*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:F80D43*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:F866D1*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
-OUI:0071CC*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:B05B67*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -60812,9 +61988,6 @@ OUI:000704*
OUI:1C1D86*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:E0B7B1*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:001A92*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
@@ -61118,9 +62291,6 @@ OUI:34C9F0*
OUI:E034E4*
ID_OUI_FROM_DATABASE=Feit Electric Company, Inc.
-OUI:681401*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:98E848*
ID_OUI_FROM_DATABASE=Axiim
@@ -61238,9 +62408,6 @@ OUI:C8A2CE*
OUI:A4DEC9*
ID_OUI_FROM_DATABASE=QLove Mobile Intelligence Information Technology (W.H.) Co. Ltd.
-OUI:3C7A8A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:A4A6A9*
ID_OUI_FROM_DATABASE=Private
@@ -61283,9 +62450,6 @@ OUI:041E7A*
OUI:38B725*
ID_OUI_FROM_DATABASE=Wistron Infocomm (Zhongshan) Corporation
-OUI:ACEC80*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:4CC681*
ID_OUI_FROM_DATABASE=Shenzhen Aisat Electronic Co., Ltd.
@@ -61343,9 +62507,6 @@ OUI:F4672D*
OUI:382B78*
ID_OUI_FROM_DATABASE=ECO PLUGS ENTERPRISE CO., LTD
-OUI:606DC7*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:BCEB5F*
ID_OUI_FROM_DATABASE=Fujian Beifeng Telecom Technology Co., Ltd.
@@ -61397,9 +62558,6 @@ OUI:D0C0BF*
OUI:94F665*
ID_OUI_FROM_DATABASE=Ruckus Wireless
-OUI:707781*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:E04B45*
ID_OUI_FROM_DATABASE=Hi-P Electronics Pte Ltd
@@ -61511,9 +62669,6 @@ OUI:4CA515*
OUI:9CE230*
ID_OUI_FROM_DATABASE=JULONG CO,.LTD.
-OUI:80F503*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:34873D*
ID_OUI_FROM_DATABASE=Quectel Wireless Solution Co.,Ltd.
@@ -61544,9 +62699,6 @@ OUI:F8C397*
OUI:C4366C*
ID_OUI_FROM_DATABASE=LG Innotek
-OUI:D85DE2*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:60D9A0*
ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
@@ -61856,9 +63008,6 @@ OUI:DC663A*
OUI:B009D3*
ID_OUI_FROM_DATABASE=Avizia
-OUI:B01041*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:3CAA3F*
ID_OUI_FROM_DATABASE=iKey, Ltd.
@@ -61895,9 +63044,6 @@ OUI:D896E0*
OUI:300D2A*
ID_OUI_FROM_DATABASE=Zhejiang Wellcom Technology Co.,Ltd.
-OUI:8496D8*
- ID_OUI_FROM_DATABASE=Pace plc
-
OUI:64EAC5*
ID_OUI_FROM_DATABASE=SiboTech Automation Co., Ltd.
@@ -62126,15 +63272,6 @@ OUI:184462*
OUI:9C443D*
ID_OUI_FROM_DATABASE=CHENGDU XUGUANG TECHNOLOGY CO, LTD
-OUI:301966*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:CC07AB*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:E84E84*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:74A4B5*
ID_OUI_FROM_DATABASE=Powerleader Science and Technology Co. Ltd.
@@ -62201,9 +63338,6 @@ OUI:103378*
OUI:DC0575*
ID_OUI_FROM_DATABASE=SIEMENS ENERGY AUTOMATION
-OUI:342387*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:5C1193*
ID_OUI_FROM_DATABASE=Seal One AG
@@ -62282,9 +63416,6 @@ OUI:2C5FF3*
OUI:E0AF4B*
ID_OUI_FROM_DATABASE=Pluribus Networks, Inc.
-OUI:50FC9F*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:C85663*
ID_OUI_FROM_DATABASE=Sunflex Europe GmbH
@@ -62390,15 +63521,6 @@ OUI:78DAB3*
OUI:80BBEB*
ID_OUI_FROM_DATABASE=Satmap Systems Ltd
-OUI:6CB7F4*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:C06599*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:182666*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:949FB4*
ID_OUI_FROM_DATABASE=ChengDu JiaFaAnTai Technology Co.,Ltd
@@ -62429,9 +63551,6 @@ OUI:98F8C1*
OUI:F47A4E*
ID_OUI_FROM_DATABASE=Woojeon&Handan
-OUI:28BAB5*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:44700B*
ID_OUI_FROM_DATABASE=IFFU
@@ -62444,9 +63563,6 @@ OUI:B8F828*
OUI:58468F*
ID_OUI_FROM_DATABASE=Koncar Electronics and Informatics
-OUI:103B59*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:746630*
ID_OUI_FROM_DATABASE=T:mi Ytti
@@ -62501,12 +63617,6 @@ OUI:141330*
OUI:0CF405*
ID_OUI_FROM_DATABASE=Beijing Signalway Technologies Co.,Ltd
-OUI:BC72B1*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:78F7BE*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:1C76CA*
ID_OUI_FROM_DATABASE=Terasic Technologies Inc.
@@ -62591,9 +63701,6 @@ OUI:F0F260*
OUI:1423D7*
ID_OUI_FROM_DATABASE=EUTRONIX CO., LTD.
-OUI:1C3E84*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:3CFB96*
ID_OUI_FROM_DATABASE=Emcraft Systems LLC
@@ -62615,12 +63722,6 @@ OUI:70E027*
OUI:E880D8*
ID_OUI_FROM_DATABASE=GNTEK Electronics Co.,Ltd.
-OUI:889B39*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:E432CB*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:188857*
ID_OUI_FROM_DATABASE=Beijing Jinhong Xi-Dian Information Technology Corp.
@@ -62699,9 +63800,6 @@ OUI:187A93*
OUI:94C962*
ID_OUI_FROM_DATABASE=Teseq AG
-OUI:B8763F*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:384369*
ID_OUI_FROM_DATABASE=Patrol Products Consortium LLC
@@ -62726,9 +63824,6 @@ OUI:98208E*
OUI:704AE4*
ID_OUI_FROM_DATABASE=Rinstrum Pty Ltd
-OUI:5CA39D*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS CO., LTD.
-
OUI:68B8D9*
ID_OUI_FROM_DATABASE=Act KDE, Inc.
@@ -62831,9 +63926,6 @@ OUI:74ECF1*
OUI:6815D3*
ID_OUI_FROM_DATABASE=Zaklady Elektroniki i Mechaniki Precyzyjnej R&G S.A.
-OUI:50B7C3*
- ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
-
OUI:601929*
ID_OUI_FROM_DATABASE=VOLTRONIC POWER TECHNOLOGY(SHENZHEN) CORP.
@@ -62891,9 +63983,6 @@ OUI:E86D54*
OUI:9857D3*
ID_OUI_FROM_DATABASE=HON HAI-CCPBG PRECISION IND.CO.,LTD.
-OUI:689423*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:9C8D1A*
ID_OUI_FROM_DATABASE=INTEG process group inc
@@ -62912,9 +64001,6 @@ OUI:0CF361*
OUI:34BDFA*
ID_OUI_FROM_DATABASE=Cisco SPVTG
-OUI:70F927*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:8CEEC6*
ID_OUI_FROM_DATABASE=Precepscion Pty. Ltd.
@@ -62948,9 +64034,6 @@ OUI:381C4A*
OUI:C8DE51*
ID_OUI_FROM_DATABASE=Integra Networks, Inc.
-OUI:5CE8EB*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:901EDD*
ID_OUI_FROM_DATABASE=GREAT COMPUTER CORPORATION
@@ -63008,21 +64091,12 @@ OUI:604616*
OUI:ECD925*
ID_OUI_FROM_DATABASE=RAMI
-OUI:38AA3C*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS
-
OUI:049F06*
ID_OUI_FROM_DATABASE=Smobile Co., Ltd.
OUI:D806D1*
ID_OUI_FROM_DATABASE=Honeywell Fire System (Shanghai) Co,. Ltd.
-OUI:687251*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks
-
-OUI:B8D9CE*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:8C6AE4*
ID_OUI_FROM_DATABASE=Viogem Limited
@@ -63050,9 +64124,6 @@ OUI:18D949*
OUI:646223*
ID_OUI_FROM_DATABASE=Cellient Co., Ltd.
-OUI:F0E77E*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:ACF0B2*
ID_OUI_FROM_DATABASE=Becker Electronics Taiwan Ltd.
@@ -63113,9 +64184,6 @@ OUI:BC0200*
OUI:1C973D*
ID_OUI_FROM_DATABASE=PRICOM Design
-OUI:8018A7*
- ID_OUI_FROM_DATABASE=Samsung Eletronics Co., Ltd
-
OUI:F00786*
ID_OUI_FROM_DATABASE=Shandong Bittel Electronics Co., Ltd
@@ -63209,9 +64277,6 @@ OUI:A4934C*
OUI:E85484*
ID_OUI_FROM_DATABASE=NEO Information Systems Co., Ltd.
-OUI:206432*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO.,LTD.
-
OUI:74AE76*
ID_OUI_FROM_DATABASE=iNovo Broadband, Inc.
@@ -63251,9 +64316,6 @@ OUI:F0D14F*
OUI:AC3D75*
ID_OUI_FROM_DATABASE=HANGZHOU ZHIWAY TECHNOLOGIES CO.,LTD.
-OUI:C01885*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:141A51*
ID_OUI_FROM_DATABASE=Treetech Sistemas Digitais
@@ -63428,9 +64490,6 @@ OUI:D8F0F2*
OUI:B0CF4D*
ID_OUI_FROM_DATABASE=MI-Zone Technology Ireland
-OUI:BCB1F3*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:143605*
ID_OUI_FROM_DATABASE=Nokia Corporation
@@ -63464,9 +64523,6 @@ OUI:9CF67D*
OUI:A0E201*
ID_OUI_FROM_DATABASE=AVTrace Ltd.(China)
-OUI:38ECE4*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:04EE91*
ID_OUI_FROM_DATABASE=x-fabric GmbH
@@ -63524,9 +64580,6 @@ OUI:70A66A*
OUI:DC175A*
ID_OUI_FROM_DATABASE=Hitachi High-Technologies Corporation
-OUI:9034FC*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:5C076F*
ID_OUI_FROM_DATABASE=Thought Creator
@@ -63626,9 +64679,6 @@ OUI:C4EEAE*
OUI:2437EF*
ID_OUI_FROM_DATABASE=EMC Electronic Media Communication SA
-OUI:CCF9E8*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:D4F63F*
ID_OUI_FROM_DATABASE=IEA S.R.L.
@@ -63791,9 +64841,6 @@ OUI:4C98EF*
OUI:DCA6BD*
ID_OUI_FROM_DATABASE=Beijing Lanbo Technology Co., Ltd.
-OUI:D0667B*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., LTD
-
OUI:58E808*
ID_OUI_FROM_DATABASE=AUTONICS CORPORATION
@@ -64109,9 +65156,6 @@ OUI:1C334D*
OUI:609E64*
ID_OUI_FROM_DATABASE=Vivonic GmbH
-OUI:906EBB*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:D44F80*
ID_OUI_FROM_DATABASE=Kemper Digital GmbH
@@ -64307,12 +65351,6 @@ OUI:CC7A30*
OUI:D8760A*
ID_OUI_FROM_DATABASE=Escort, Inc.
-OUI:101DC0*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
-OUI:F49F54*
- ID_OUI_FROM_DATABASE=Samsung Electronics
-
OUI:6063FD*
ID_OUI_FROM_DATABASE=Transcend Communication Beijing Co.,Ltd.
@@ -64448,9 +65486,6 @@ OUI:C848F5*
OUI:1C17D3*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:E8E5D6*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:ACBE75*
ID_OUI_FROM_DATABASE=Ufine Technologies Co.,Ltd.
@@ -64508,9 +65543,6 @@ OUI:50F003*
OUI:0C17F1*
ID_OUI_FROM_DATABASE=TELECSYS
-OUI:5492BE*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:98BC99*
ID_OUI_FROM_DATABASE=Edeltech Co.,Ltd.
@@ -64589,9 +65621,6 @@ OUI:8CD628*
OUI:481BD2*
ID_OUI_FROM_DATABASE=Intron Scientific co., ltd.
-OUI:444E1A*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:009363*
ID_OUI_FROM_DATABASE=Uni-Link Technology Co., Ltd.
@@ -64964,9 +65993,6 @@ OUI:0026A6*
OUI:00263C*
ID_OUI_FROM_DATABASE=Bachmann Technology GmbH & Co. KG
-OUI:002637*
- ID_OUI_FROM_DATABASE=Samsung Electro-Mechanics
-
OUI:002630*
ID_OUI_FROM_DATABASE=ACOREL S.A.S
@@ -65360,9 +66386,6 @@ OUI:0023C6*
OUI:0023C0*
ID_OUI_FROM_DATABASE=Broadway Networks
-OUI:0023B9*
- ID_OUI_FROM_DATABASE=EADS Deutschland GmbH
-
OUI:0023B3*
ID_OUI_FROM_DATABASE=Lyyn AB
@@ -65438,9 +66461,6 @@ OUI:002242*
OUI:00223B*
ID_OUI_FROM_DATABASE=Communication Networks, LLC
-OUI:00214C*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRONICS CO., LTD.
-
OUI:002146*
ID_OUI_FROM_DATABASE=Sanmina-SCI
@@ -65594,9 +66614,6 @@ OUI:002101*
OUI:002102*
ID_OUI_FROM_DATABASE=UpdateLogic Inc.
-OUI:0021D1*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:0021D0*
ID_OUI_FROM_DATABASE=Global Display Solutions Spa
@@ -65744,9 +66761,6 @@ OUI:001EED*
OUI:001EE7*
ID_OUI_FROM_DATABASE=Epic Systems Inc
-OUI:001EE1*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-
OUI:001ED7*
ID_OUI_FROM_DATABASE=H-Stream Wireless, Inc.
@@ -66665,9 +67679,6 @@ OUI:0018B1*
OUI:0018B6*
ID_OUI_FROM_DATABASE=S3C, Inc.
-OUI:0018AF*
- ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd.
-
OUI:0018A3*
ID_OUI_FROM_DATABASE=ZIPPY TECHNOLOGY CORP.
@@ -66749,9 +67760,6 @@ OUI:00163E*
OUI:001637*
ID_OUI_FROM_DATABASE=CITEL SpA
-OUI:001632*
- ID_OUI_FROM_DATABASE=SAMSUNG ELECTRONICS CO., LTD.
-
OUI:00162B*
ID_OUI_FROM_DATABASE=Togami Electric Mfg.co.,Ltd.
@@ -67334,9 +68342,6 @@ OUI:00138C*
OUI:001391*
ID_OUI_FROM_DATABASE=OUEN CO.,LTD.
-OUI:001377*
- ID_OUI_FROM_DATABASE=Samsung Electronics CO., LTD
-
OUI:00137C*
ID_OUI_FROM_DATABASE=Kaicom co., Ltd.
@@ -67910,9 +68915,6 @@ OUI:000DFD*
OUI:000E02*
ID_OUI_FROM_DATABASE=Advantech AMT Inc.
-OUI:000DF0*
- ID_OUI_FROM_DATABASE=QCOM TECHNOLOGY INC.
-
OUI:000DEA*
ID_OUI_FROM_DATABASE=Kingtel Telecommunication Corp.
@@ -69056,9 +70058,6 @@ OUI:0005C8*
OUI:0005D4*
ID_OUI_FROM_DATABASE=FutureSmart Networks, Inc.
-OUI:0005CD*
- ID_OUI_FROM_DATABASE=Denon, Ltd.
-
OUI:0006EC*
ID_OUI_FROM_DATABASE=Harris Corporation
@@ -71549,9 +72548,6 @@ OUI:0080BD*
OUI:0080A8*
ID_OUI_FROM_DATABASE=VITACOM CORPORATION
-OUI:0080FB*
- ID_OUI_FROM_DATABASE=BVM LIMITED
-
OUI:008042*
ID_OUI_FROM_DATABASE=Artesyn Embedded Technologies
@@ -72059,12 +73055,6 @@ OUI:DC0B1A*
OUI:74888B*
ID_OUI_FROM_DATABASE=ADB Broadband Italia
-OUI:8841FC*
- ID_OUI_FROM_DATABASE=AirTies Wireless Netowrks
-
-OUI:182861*
- ID_OUI_FROM_DATABASE=AirTies Wireless Netowrks
-
OUI:84D6D0*
ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
@@ -72083,9 +73073,6 @@ OUI:00BB3A*
OUI:000941*
ID_OUI_FROM_DATABASE=Allied Telesis R&D Center K.K.
-OUI:984B4A*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:00014A*
ID_OUI_FROM_DATABASE=Sony Corporation
@@ -72107,84 +73094,15 @@ OUI:8400D2*
OUI:5CB524*
ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
-OUI:0015A3*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0015A4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:94A1A2*
ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
-OUI:00D088*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0017EE*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001180*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00909C*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:8096B1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:7CBFB1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001A77*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:CC7D37*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0017E2*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001784*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0016B5*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001675*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:74DE2B*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
OUI:68A3C4*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
-OUI:002210*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001FC4*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001C12*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:001CFB*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0012C9*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:E48399*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:00211E*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:0024A0*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:002636*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:C8FF28*
ID_OUI_FROM_DATABASE=Liteon Technology Corporation
@@ -72545,9 +73463,6 @@ OUI:10785B*
OUI:20768F*
ID_OUI_FROM_DATABASE=Apple, Inc.
-OUI:C0C522*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:9C5CF9*
ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
@@ -72773,9 +73688,6 @@ OUI:0020F2*
OUI:00015D*
ID_OUI_FROM_DATABASE=Oracle Corporation
-OUI:F8DA0C*
- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
-
OUI:943BB1*
ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD.
@@ -73181,9 +74093,6 @@ OUI:CC52AF*
OUI:001A6B*
ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
-OUI:002722*
- ID_OUI_FROM_DATABASE=Ubiquiti Networks
-
OUI:00DD0A*
ID_OUI_FROM_DATABASE=UNGERMANN-BASS INC.
@@ -73244,17 +74153,104 @@ OUI:00164D*
OUI:FCFAF7*
ID_OUI_FROM_DATABASE=Shanghai Baud Data Communication Co.,Ltd.
-OUI:0C54B9*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
+OUI:C8E776*
+ ID_OUI_FROM_DATABASE=PTCOM Technology
-OUI:C4084A*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
+OUI:5C497D*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0005CD*
+ ID_OUI_FROM_DATABASE=D&M Holdings Inc.
+
+OUI:E0286D*
+ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+
+OUI:7487A9*
+ ID_OUI_FROM_DATABASE=OCT Technology Co., Ltd.
OUI:34AA99*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:C4084A*
+ ID_OUI_FROM_DATABASE=Nokia
OUI:8C90D3*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Canada
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:0C54B9*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:444E1A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:E8E5D6*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:5492BE*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0021D1*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:101DC0*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0023B9*
+ ID_OUI_FROM_DATABASE=Airbus Defence and Space Deutschland GmbH
+
+OUI:2047ED*
+ ID_OUI_FROM_DATABASE=BSkyB Ltd
+
+OUI:C8F946*
+ ID_OUI_FROM_DATABASE=LOCOSYS Technology Inc.
+
+OUI:D41D71*
+ ID_OUI_FROM_DATABASE=Palo Alto Networks
+
+OUI:5C2443*
+ ID_OUI_FROM_DATABASE=O-Sung Telecom Co., Ltd.
+
+OUI:1861C7*
+ ID_OUI_FROM_DATABASE=lemonbeat GmbH
+
+OUI:9CDC71*
+ ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
+
+OUI:C8028F*
+ ID_OUI_FROM_DATABASE=Nova Electronics (Shanghai) Co., Ltd.
+
+OUI:240D65*
+ ID_OUI_FROM_DATABASE=Shenzhen Vsun Communication Technology Co., Ltd.
+
+OUI:D8452B*
+ ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
+
+OUI:2CDD95*
+ ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+
+OUI:5C9960*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:CC088D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:0080FB*
+ ID_OUI_FROM_DATABASE=BVM LIMITED
+
+OUI:107223*
+ ID_OUI_FROM_DATABASE=TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO
+
+OUI:AC84C9*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
+OUI:14EDBB*
+ ID_OUI_FROM_DATABASE=2Wire Inc
+
+OUI:44BA46*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:B4D135*
+ ID_OUI_FROM_DATABASE=Cloudistics
OUI:A8AD3D*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
@@ -73445,8 +74441,413 @@ OUI:58FB84*
OUI:E0E7BB*
ID_OUI_FROM_DATABASE=Nureva, Inc.
+OUI:BC8AA3*
+ ID_OUI_FROM_DATABASE=NHN Entertainment
+
+OUI:70A84C*
+ ID_OUI_FROM_DATABASE=MONAD., Inc.
+
+OUI:407009*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:94877C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001DD2*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:9C3426*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:3C7A8A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:000FCC*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:BCCAB5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:5C8FE0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:6CCA08*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:5465DE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:F8EDA5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00A289*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:ACEC80*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0015A4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0015A3*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:7CBFB1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:8096B1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00909C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001180*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0017EE*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00D088*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001675*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0016B5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001784*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0017E2*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:CC7D37*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001A77*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:984B4A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:80F503*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:8496D8*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:D42C0F*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:E0B7B1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002210*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:00211E*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:E48399*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:002636*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0024A0*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:0012C9*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001CFB*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001C12*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:001FC4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:C0C522*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:5CB066*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-OUI:BC8AA3*
- ID_OUI_FROM_DATABASE=NHN Entertainment
+OUI:486DBB*
+ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş.
+
+OUI:6C1E90*
+ ID_OUI_FROM_DATABASE=Hansol Technics Co., Ltd.
+
+OUI:E09DFA*
+ ID_OUI_FROM_DATABASE=Wanan Hongsheng Electronic Co.Ltd
+
+OUI:34E71C*
+ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+
+OUI:182861*
+ ID_OUI_FROM_DATABASE=AirTies Wireless Networks
+
+OUI:8841FC*
+ ID_OUI_FROM_DATABASE=AirTies Wireless Networks
+
+OUI:BCB1F3*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:38ECE4*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:CCF9E8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:F0E77E*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:5CE8EB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:B8D9CE*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:6CB7F4*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:182666*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:C06599*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:CC07AB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:E84E84*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:50FC9F*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:E432CB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:889B39*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:BC72B1*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:78F7BE*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:70F927*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:301966*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:28BAB5*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:103B59*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:7C11CB*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:A4CAA0*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
+OUI:001EE1*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:F49F54*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:0018AF*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:00214C*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:001632*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:D0667B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:001377*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:50B7C3*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:5CA39D*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:38AA3C*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:206432*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:8018A7*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
+OUI:002637*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+
+OUI:B88EDF*
+ ID_OUI_FROM_DATABASE=Zencheer Communication Technology Co., Ltd.
+
+OUI:707781*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:606DC7*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:681401*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:0071CC*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:F866D1*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:F80D43*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:785968*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:002556*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:00265C*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:90CDB6*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:001E4C*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:F8DA0C*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:342387*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:9034FC*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:906EBB*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:1C666D*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:CCAF78*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:904CE5*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:002268*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:001FE1*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:689423*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:B8763F*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:1C3E84*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:C01885*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:B01041*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:D85DE2*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+
+OUI:949AA9*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
+OUI:F8633F*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
+OUI:088620*
+ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
+
+OUI:A42983*
+ ID_OUI_FROM_DATABASE=Boeing Defence Australia
+
+OUI:702E22*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:B0C128*
+ ID_OUI_FROM_DATABASE=Adler ELREHA GmbH
+
+OUI:5CA933*
+ ID_OUI_FROM_DATABASE=Luma Home
+
+OUI:60EFC6*
+ ID_OUI_FROM_DATABASE=Shenzhen Chima Technologies Co Limited
+
+OUI:502B73*
+ ID_OUI_FROM_DATABASE=Tenda Technology Co.,Ltd.Dongguan branch
+
+OUI:20DBAB*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd.
+
+OUI:000DF0*
+ ID_OUI_FROM_DATABASE=QCOM TECHNOLOGY INC.
+
+OUI:5CF7E6*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:A0D795*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:002722*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:687251*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:B4FBE4*
+ ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
+
+OUI:188B15*
+ ID_OUI_FROM_DATABASE=ShenZhen ZhongRuiJing Technology co.,LTD
+
+OUI:CCB0DA*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
+OUI:E02CF3*
+ ID_OUI_FROM_DATABASE=MRS Electronic GmbH
+
+OUI:F41F88*
+ ID_OUI_FROM_DATABASE=zte corporation
+
+OUI:D816C1*
+ ID_OUI_FROM_DATABASE=DEWAV (HK) ELECTRONICS LIMITED
+
+OUI:7CCC1F*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
+
+OUI:C0854C*
+ ID_OUI_FROM_DATABASE=Ragentek Technology Group
+
+OUI:00FD45*
+ ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
diff --git a/hwdb/20-acpi-vendor.hwdb b/hwdb/20-acpi-vendor.hwdb
index 4ae652c6d6..3731b33656 100644
--- a/hwdb/20-acpi-vendor.hwdb
+++ b/hwdb/20-acpi-vendor.hwdb
@@ -42,6 +42,9 @@ acpi:BOSC*:
acpi:BRCM*:
ID_VENDOR_FROM_DATABASE=Broadcom Corporation
+acpi:CORE*:
+ ID_VENDOR_FROM_DATABASE=CoreOS, Inc
+
acpi:CPLM*:
ID_VENDOR_FROM_DATABASE=Capella Microsystems Inc.
@@ -2520,6 +2523,9 @@ acpi:FOK*:
acpi:FOS*:
ID_VENDOR_FROM_DATABASE=Foss Tecator
+acpi:FOV*:
+ ID_VENDOR_FROM_DATABASE=FOVE INC
+
acpi:FOX*:
ID_VENDOR_FROM_DATABASE=HON HAI PRECISON IND.CO.,LTD.
@@ -3039,6 +3045,9 @@ acpi:HTX*:
acpi:HUB*:
ID_VENDOR_FROM_DATABASE=GAI-Tronics, A Hubbell Company
+acpi:HUK*:
+ ID_VENDOR_FROM_DATABASE=Hoffmann + Krippner GmbH
+
acpi:HUM*:
ID_VENDOR_FROM_DATABASE=IMP Electronics Ltd.
@@ -4101,6 +4110,9 @@ acpi:MDC*:
acpi:MDD*:
ID_VENDOR_FROM_DATABASE=MODIS
+acpi:MDF*:
+ ID_VENDOR_FROM_DATABASE=MILDEF AB
+
acpi:MDG*:
ID_VENDOR_FROM_DATABASE=Madge Networks
@@ -4614,6 +4626,9 @@ acpi:NEC*:
acpi:NEO*:
ID_VENDOR_FROM_DATABASE=NEO TELECOM CO.,LTD.
+acpi:NES*:
+ ID_VENDOR_FROM_DATABASE=INNES
+
acpi:NET*:
ID_VENDOR_FROM_DATABASE=Mettler Toledo
diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
index f068e53fbc..0c829c8aec 100644
--- a/hwdb/20-pci-vendor-model.hwdb
+++ b/hwdb/20-pci-vendor-model.hwdb
@@ -4071,55 +4071,55 @@ pci:v00001002d00005A12sv000015D9sd0000A811*
ID_MODEL_FROM_DATABASE=RD890 Northbridge only dual slot (2x8) PCI-e GFX Hydra part (H8DGU)
pci:v00001002d00005A13*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (external gfx0 port A)
+ ID_MODEL_FROM_DATABASE=RD890S/SR5650 Host Bridge
pci:v00001002d00005A14*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (external gfx0 port B)
+ ID_MODEL_FROM_DATABASE=RD9x0/RX980 Host Bridge
pci:v00001002d00005A15*
ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (PCI express gpp port A)
pci:v00001002d00005A16*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (PCI express gpp port B)
+ ID_MODEL_FROM_DATABASE=RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GFX port 0)
pci:v00001002d00005A17*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (PCI express gpp port C)
+ ID_MODEL_FROM_DATABASE=RD890/RD9x0 PCI to PCI bridge (PCI Express GFX port 1)
pci:v00001002d00005A18*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (PCI express gpp port D)
+ ID_MODEL_FROM_DATABASE=RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 0)
pci:v00001002d00005A18sv000015D9sd0000A811*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (PCI express gpp port D) (H8DGU)
+ ID_MODEL_FROM_DATABASE=RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 0) (H8DGU)
pci:v00001002d00005A19*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (PCI express gpp port E)
+ ID_MODEL_FROM_DATABASE=RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 1)
pci:v00001002d00005A1A*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (PCI express gpp port F)
+ ID_MODEL_FROM_DATABASE=RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 2)
pci:v00001002d00005A1B*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (PCI express gpp port G)
+ ID_MODEL_FROM_DATABASE=RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 3)
pci:v00001002d00005A1C*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (PCI express gpp port H)
+ ID_MODEL_FROM_DATABASE=RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 4)
pci:v00001002d00005A1D*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (external gfx1 port A)
+ ID_MODEL_FROM_DATABASE=RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP Port 5)
pci:v00001002d00005A1E*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (external gfx1 port B)
+ ID_MODEL_FROM_DATABASE=RD890/RD9x0/RX980 PCI to PCI bridge (PCI Express GPP2 Port 0)
pci:v00001002d00005A1F*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (NB-SB link)
+ ID_MODEL_FROM_DATABASE=RD890/RD990 PCI to PCI bridge (PCI Express GFX2 port 0)
pci:v00001002d00005A1Fsv000015D9sd0000A811*
- ID_MODEL_FROM_DATABASE=RD890 PCI to PCI bridge (NB-SB link) (H8DGU)
+ ID_MODEL_FROM_DATABASE=RD890/RD990 PCI to PCI bridge (PCI Express GFX2 port 0) (H8DGU)
pci:v00001002d00005A20*
- ID_MODEL_FROM_DATABASE=RD890S PCI Express bridge for GPP2 port 1
+ ID_MODEL_FROM_DATABASE=RD890/RD990 PCI to PCI bridge (PCI Express GFX2 port 1)
pci:v00001002d00005A23*
- ID_MODEL_FROM_DATABASE=RD990 I/O Memory Management Unit (IOMMU)
+ ID_MODEL_FROM_DATABASE=RD890S/RD990 I/O Memory Management Unit (IOMMU)
pci:v00001002d00005A31*
ID_MODEL_FROM_DATABASE=RC410 Host Bridge
@@ -4481,6 +4481,9 @@ pci:v00001002d00006649sv00001002sd00000B0C*
pci:v00001002d00006649sv0000103Csd00000B0C*
ID_MODEL_FROM_DATABASE=Bonaire [FirePro W5100] (Bonaire [FirePro W4300])
+pci:v00001002d00006649sv0000103Csd0000230C*
+ ID_MODEL_FROM_DATABASE=Bonaire [FirePro W5100] (FirePro W5100)
+
pci:v00001002d00006650*
ID_MODEL_FROM_DATABASE=Bonaire
@@ -6179,6 +6182,9 @@ pci:v00001002d0000679Bsv0000148Csd00008990*
pci:v00001002d0000679E*
ID_MODEL_FROM_DATABASE=Tahiti LE [Radeon HD 7870 XT]
+pci:v00001002d0000679Esv00001787sd00002328*
+ ID_MODEL_FROM_DATABASE=Tahiti LE [Radeon HD 7870 XT] (Radeon HD 7870 Black Edition 2 GB GDDR5 [2GBD5-2DHV3E])
+
pci:v00001002d0000679F*
ID_MODEL_FROM_DATABASE=Tahiti
@@ -6329,6 +6335,9 @@ pci:v00001002d000067B1sv00001043sd000004DD*
pci:v00001002d000067B1sv0000148Csd00002358*
ID_MODEL_FROM_DATABASE=Hawaii PRO [Radeon R9 290/390] (Radeon R9 390)
+pci:v00001002d000067B1sv0000174Bsd0000E324*
+ ID_MODEL_FROM_DATABASE=Hawaii PRO [Radeon R9 290/390] (Sapphire Nitro R9 390)
+
pci:v00001002d000067B9*
ID_MODEL_FROM_DATABASE=Vesuvius [Radeon R9 295X2]
@@ -6339,7 +6348,7 @@ pci:v00001002d000067C0*
ID_MODEL_FROM_DATABASE=Ellesmere [Polaris10]
pci:v00001002d000067DF*
- ID_MODEL_FROM_DATABASE=Ellesmere [Polaris10]
+ ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 480]
pci:v00001002d000067E0*
ID_MODEL_FROM_DATABASE=Baffin [Polaris11]
@@ -11090,6 +11099,9 @@ pci:v00001014d000004DAsv00001014sd000004FB*
pci:v00001014d000004DAsv00001014sd000004FC*
ID_MODEL_FROM_DATABASE=PCI-E IPR SAS+ Adapter (ASIC) (PCIe3 x8 12Gb Quad SAS RAID+ Adapter(580A))
+pci:v00001014d000004ED*
+ ID_MODEL_FROM_DATABASE=Internal Shared Memory (ISM) virtual PCI device
+
pci:v00001014d00003022*
ID_MODEL_FROM_DATABASE=QLA3022 Network Adapter
@@ -17630,12 +17642,30 @@ pci:v00001077d00002261sv00001077sd0000029B*
pci:v00001077d00002261sv00001077sd0000029C*
ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (QLE2692 Dual Port 16Gb Fibre Channel to PCIe Adapter)
+pci:v00001077d00002261sv00001077sd000002A7*
+ ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (QLE2690 Single Port 16Gb FC to PCIe Gen3 x8 Adapter)
+
+pci:v00001077d00002261sv00001077sd000002A8*
+ ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (QLE2692 Dual Port 16Gb FC to PCIe Gen3 x8 Adapter)
+
+pci:v00001077d00002261sv00001077sd000002AB*
+ ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (QLE2740 Single Port 32Gb FC to PCIe Gen3 x8 Adapter)
+
+pci:v00001077d00002261sv00001077sd000002AC*
+ ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (QLE2742 Dual Port 32Gb FC to PCIe Gen3 x8 Adapter)
+
pci:v00001077d00002261sv00001590sd000000F9*
ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (HPE StoreFabric SN1100Q 16Gb Single Port Fibre Channel Host Bus Adapter)
pci:v00001077d00002261sv00001590sd000000FA*
ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (HPE StoreFabric SN1100Q 16Gb Dual Port Fibre Channel Host Bus Adapter)
+pci:v00001077d00002261sv00001590sd00000203*
+ ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (HPE StoreFabric SN1600Q 32Gb Single Port Fibre Channel Host Bus Adapter)
+
+pci:v00001077d00002261sv00001590sd00000204*
+ ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (HPE StoreFabric SN1600Q 32Gb Dual Port Fibre Channel Host Bus Adapter)
+
pci:v00001077d00002300*
ID_MODEL_FROM_DATABASE=QLA2300 64-bit Fibre Channel Adapter
@@ -29636,6 +29666,9 @@ pci:v000010DEd000010C5*
pci:v000010DEd000010D8*
ID_MODEL_FROM_DATABASE=GT218 [NVS 300]
+pci:v000010DEd000010F0*
+ ID_MODEL_FROM_DATABASE=GP104 High Definition Audio Controller
+
pci:v000010DEd00001140*
ID_MODEL_FROM_DATABASE=GF117M [GeForce 610M/710M/810M/820M / GT 620M/625M/630M/720M]
@@ -31209,7 +31242,13 @@ pci:v000010DEd000013BC*
ID_MODEL_FROM_DATABASE=GM107GL [Quadro K1200]
pci:v000010DEd000013BD*
- ID_MODEL_FROM_DATABASE=GM107GL [GRID M40]
+ ID_MODEL_FROM_DATABASE=GM107GL [Tesla M10]
+
+pci:v000010DEd000013BDsv000010DEsd0000110A*
+ ID_MODEL_FROM_DATABASE=GM107GL [Tesla M10] (GRID M40)
+
+pci:v000010DEd000013BDsv000010DEsd00001160*
+ ID_MODEL_FROM_DATABASE=GM107GL [Tesla M10] (Tesla M10)
pci:v000010DEd000013C0*
ID_MODEL_FROM_DATABASE=GM204 [GeForce GTX 980]
@@ -31283,6 +31322,18 @@ pci:v000010DEd00001430*
pci:v000010DEd00001431*
ID_MODEL_FROM_DATABASE=GM206GL [Tesla M4]
+pci:v000010DEd000015F0*
+ ID_MODEL_FROM_DATABASE=GP100GL
+
+pci:v000010DEd000015F1*
+ ID_MODEL_FROM_DATABASE=GP100GL
+
+pci:v000010DEd000015F8*
+ ID_MODEL_FROM_DATABASE=GP100GL
+
+pci:v000010DEd000015F9*
+ ID_MODEL_FROM_DATABASE=GP100GL
+
pci:v000010DEd00001617*
ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 980M]
@@ -31298,6 +31349,15 @@ pci:v000010DEd0000161A*
pci:v000010DEd00001667*
ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 965M]
+pci:v000010DEd00001725*
+ ID_MODEL_FROM_DATABASE=GP100
+
+pci:v000010DEd0000172E*
+ ID_MODEL_FROM_DATABASE=GP100
+
+pci:v000010DEd0000172F*
+ ID_MODEL_FROM_DATABASE=GP100
+
pci:v000010DEd000017C2*
ID_MODEL_FROM_DATABASE=GM200 [GeForce GTX TITAN X]
@@ -31313,9 +31373,87 @@ pci:v000010DEd000017F1*
pci:v000010DEd000017FD*
ID_MODEL_FROM_DATABASE=GM200GL [Tesla M40]
+pci:v000010DEd00001B00*
+ ID_MODEL_FROM_DATABASE=GP102
+
+pci:v000010DEd00001B01*
+ ID_MODEL_FROM_DATABASE=GP102
+
+pci:v000010DEd00001B70*
+ ID_MODEL_FROM_DATABASE=GP102GL
+
+pci:v000010DEd00001B78*
+ ID_MODEL_FROM_DATABASE=GP102GL
+
pci:v000010DEd00001B80*
ID_MODEL_FROM_DATABASE=GP104 [GeForce GTX 1080]
+pci:v000010DEd00001B81*
+ ID_MODEL_FROM_DATABASE=GP104 [GeForce GTX 1070]
+
+pci:v000010DEd00001B82*
+ ID_MODEL_FROM_DATABASE=GP104
+
+pci:v000010DEd00001B83*
+ ID_MODEL_FROM_DATABASE=GP104
+
+pci:v000010DEd00001BA1*
+ ID_MODEL_FROM_DATABASE=GP104M [GeForce GTX 1070]
+
+pci:v000010DEd00001BB0*
+ ID_MODEL_FROM_DATABASE=GP104GL
+
+pci:v000010DEd00001BB1*
+ ID_MODEL_FROM_DATABASE=GP104GL
+
+pci:v000010DEd00001BB4*
+ ID_MODEL_FROM_DATABASE=GP104GL
+
+pci:v000010DEd00001BE0*
+ ID_MODEL_FROM_DATABASE=GP104M [GeForce GTX 1080]
+
+pci:v000010DEd00001BE1*
+ ID_MODEL_FROM_DATABASE=GP104M [GeForce GTX 1070]
+
+pci:v000010DEd00001C00*
+ ID_MODEL_FROM_DATABASE=GP106
+
+pci:v000010DEd00001C01*
+ ID_MODEL_FROM_DATABASE=GP106
+
+pci:v000010DEd00001C02*
+ ID_MODEL_FROM_DATABASE=GP106
+
+pci:v000010DEd00001C03*
+ ID_MODEL_FROM_DATABASE=GP106 [GeForce GTX 1060]
+
+pci:v000010DEd00001C30*
+ ID_MODEL_FROM_DATABASE=GP106GL
+
+pci:v000010DEd00001C70*
+ ID_MODEL_FROM_DATABASE=GP106GL
+
+pci:v000010DEd00001C80*
+ ID_MODEL_FROM_DATABASE=GP107
+
+pci:v000010DEd00001C81*
+ ID_MODEL_FROM_DATABASE=GP107
+
+pci:v000010DEd00001C82*
+ ID_MODEL_FROM_DATABASE=GP107
+
+pci:v000010DEd00001CA7*
+ ID_MODEL_FROM_DATABASE=GP107GL
+
+pci:v000010DEd00001CA8*
+ ID_MODEL_FROM_DATABASE=GP107GL
+
+pci:v000010DEd00001CAA*
+ ID_MODEL_FROM_DATABASE=GP107GL
+
+pci:v000010DEd00001D01*
+ ID_MODEL_FROM_DATABASE=GP108
+
pci:v000010DF*
ID_VENDOR_FROM_DATABASE=Emulex Corporation
@@ -32063,6 +32201,9 @@ pci:v000010ECd00008168sv00001028sd000004B2*
pci:v000010ECd00008168sv00001028sd000004DA*
ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Vostro 3750)
+pci:v000010ECd00008168sv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Latitude 3570)
+
pci:v000010ECd00008168sv0000103Csd00001611*
ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Pavilion DM1Z-3000)
@@ -32097,7 +32238,7 @@ pci:v000010ECd00008168sv000010ECsd00008168*
ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (RTL8111/8168 PCI Express Gigabit Ethernet controller)
pci:v000010ECd00008168sv00001458sd0000E000*
- ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Motherboard)
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Onboard Ethernet)
pci:v000010ECd00008168sv00001462sd0000238C*
ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Onboard RTL8111b on MSI P965 Platinum Mainboard)
@@ -32198,6 +32339,9 @@ pci:v000010ECd00008178*
pci:v000010ECd00008179*
ID_MODEL_FROM_DATABASE=RTL8188EE Wireless Network Adapter
+pci:v000010ECd00008179sv0000103Csd0000197D*
+ ID_MODEL_FROM_DATABASE=RTL8188EE Wireless Network Adapter (RTL8188EE mini-PCIe card)
+
pci:v000010ECd00008180*
ID_MODEL_FROM_DATABASE=RTL8180L 802.11b MAC
@@ -32436,175 +32580,340 @@ pci:v00001102*
ID_VENDOR_FROM_DATABASE=Creative Labs
pci:v00001102d00000002*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series]
pci:v00001102d00000002sv0000100Asd00001102*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (SB Live! 5.1 Digital OEM SB0220 EMU10K1-JFF)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB Live! 5.1 Digital OEM SB0220 EMU10K1-JFF)
pci:v00001102d00000002sv00001102sd00000020*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4850 SBLive! Value)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4670/4850 SBLive! Value)
pci:v00001102d00000002sv00001102sd00000021*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4620 SBLive!)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4620 SBLive!)
pci:v00001102d00000002sv00001102sd0000002F*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (SBLive! mainboard implementation)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (M002/M003 Integrated SBLive!)
pci:v00001102d00000002sv00001102sd0000100A*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (SB Live! 5.1 Digital OEM [SB0220])
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0220/0229 SBLive! 5.1 Digital OEM)
pci:v00001102d00000002sv00001102sd00004001*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (E-mu APS)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (E-mu APS)
pci:v00001102d00000002sv00001102sd00008022*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4780 SBLive! Value)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4780 SBLive! Value)
pci:v00001102d00000002sv00001102sd00008023*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4790 SoundBlaster PCI512)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4790 SoundBlaster PCI512)
pci:v00001102d00000002sv00001102sd00008024*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4760 SBLive!)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4760 SBLive!)
pci:v00001102d00000002sv00001102sd00008025*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (SBLive! Mainboard Implementation)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT1140/SB0040 Integrated SBLive!)
pci:v00001102d00000002sv00001102sd00008026*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4830 SBLive! Value)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4830 SBLive! Value)
pci:v00001102d00000002sv00001102sd00008027*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4832 SBLive! Value)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4832 SBLive! Value)
pci:v00001102d00000002sv00001102sd00008028*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4760 SBLive! OEM version)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4870 SBLive! Value)
+
+pci:v00001102d00000002sv00001102sd00008029*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4872 SBLive! Value)
+
+pci:v00001102d00000002sv00001102sd0000802A*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4890 SoundBlaster PCI256)
+
+pci:v00001102d00000002sv00001102sd0000802B*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4891 SoundBlaster PCI256)
pci:v00001102d00000002sv00001102sd00008031*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4831 SBLive! Value)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4831 SBLive! Value)
+
+pci:v00001102d00000002sv00001102sd00008032*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4871 SBLive! Value)
+
+pci:v00001102d00000002sv00001102sd00008033*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4893 SoundBlaster PCI256)
+
+pci:v00001102d00000002sv00001102sd00008035*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT0060 SBLive!)
pci:v00001102d00000002sv00001102sd00008040*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4760 SBLive!)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4760 SBLive!)
+
+pci:v00001102d00000002sv00001102sd00008050*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4750 SoundBlaster PCI512)
pci:v00001102d00000002sv00001102sd00008051*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (CT4850 SBLive! Value)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT4850 SBLive! Value)
pci:v00001102d00000002sv00001102sd00008061*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (SBLive! Player 5.1)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB060 SBLive! Player 5.1)
+
+pci:v00001102d00000002sv00001102sd00008062*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0100 SBLive! 5.1)
+
+pci:v00001102d00000002sv00001102sd00008063*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (DXW Integrated SBLive! 5.1)
pci:v00001102d00000002sv00001102sd00008064*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (SBLive! 5.1 Model SB0100)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0100/SB0102 SBLive! 5.1)
pci:v00001102d00000002sv00001102sd00008065*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (SBLive! 5.1 Digital Model SB0220)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0220/0222 SBLive! 5.1 Digital)
pci:v00001102d00000002sv00001102sd00008066*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (Live! 5.1 Digital [SB0228])
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0228 SBLive! 5.1 Digital)
pci:v00001102d00000002sv00001102sd00008067*
- ID_MODEL_FROM_DATABASE=SB Live! EMU10k1 (SBLive! 5.1 eMicro 28028)
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0220 SBLive! 5.1)
+
+pci:v00001102d00000002sv00001102sd00008068*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (CT0061 SBLive!)
+
+pci:v00001102d00000002sv00001102sd00008069*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0101 SBLive! 5.1 Value)
+
+pci:v00001102d00000002sv00001102sd0000806A*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0103 SBLive! 5.1)
+
+pci:v00001102d00000002sv00001102sd0000806B*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0105 SBLive! 5.1)
+
+pci:v00001102d00000002sv00001102sd0000806C*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0221 SBLive! 5.1)
+
+pci:v00001102d00000002sv00001102sd00008071*
+ ID_MODEL_FROM_DATABASE=EMU10k1 [Sound Blaster Live! Series] (SB0150 SoundBlaster PCI512)
+
+pci:v00001102d00000003*
+ ID_MODEL_FROM_DATABASE=SB AWE64(D)
pci:v00001102d00000004*
- ID_MODEL_FROM_DATABASE=SB Audigy
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series]
+
+pci:v00001102d00000004sv00001102sd00000040*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0090 Audigy Player)
+
+pci:v00001102d00000004sv00001102sd00000041*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (CT4820 SBLive!2)
+
+pci:v00001102d00000004sv00001102sd00000042*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (CT0070 Audigy)
+
+pci:v00001102d00000004sv00001102sd00000043*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (CT0072 Audigy)
pci:v00001102d00000004sv00001102sd00000051*
- ID_MODEL_FROM_DATABASE=SB Audigy (SB0090 Audigy Player)
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0090 Audigy Player/Platinum (EX))
+
+pci:v00001102d00000004sv00001102sd00000052*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0162 Audigy ES)
pci:v00001102d00000004sv00001102sd00000053*
- ID_MODEL_FROM_DATABASE=SB Audigy (SB0090 Audigy Player/OEM)
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (CT0090/SB0092 Audigy Player/OEM)
+
+pci:v00001102d00000004sv00001102sd00000054*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0161 Audigy ES)
+
+pci:v00001102d00000004sv00001102sd00000055*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0192 Audigy)
+
+pci:v00001102d00000004sv00001102sd00000056*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0191 Audigy)
+
+pci:v00001102d00000004sv00001102sd00000057*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0091 Audigy)
pci:v00001102d00000004sv00001102sd00000058*
- ID_MODEL_FROM_DATABASE=SB Audigy (SB0090 Audigy Player/OEM)
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0095 Audigy Player/OEM)
+
+pci:v00001102d00000004sv00001102sd00000059*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0230 Audigy)
+
+pci:v00001102d00000004sv00001102sd0000005A*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0231 Audigy)
+
+pci:v00001102d00000004sv00001102sd0000005B*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0232 Audigy)
+
+pci:v00001102d00000004sv00001102sd0000005C*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0238 Audigy)
pci:v00001102d00000004sv00001102sd00001002*
- ID_MODEL_FROM_DATABASE=SB Audigy (2 Platinum)
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0240 Audigy 2 Platinum 6.1)
pci:v00001102d00000004sv00001102sd00001003*
- ID_MODEL_FROM_DATABASE=SB Audigy (SB0350 Audigy 2)
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0350 Audigy 2 / SB0243 Audigy 2 OEM)
+
+pci:v00001102d00000004sv00001102sd00001004*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0242 Audigy 2)
+
+pci:v00001102d00000004sv00001102sd00001005*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0280 Audigy 2 Platinum Ex)
+
+pci:v00001102d00000004sv00001102sd00001006*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0245 Audigy 2 OEM)
pci:v00001102d00000004sv00001102sd00001007*
- ID_MODEL_FROM_DATABASE=SB Audigy (SB0240 Audigy 2 Platinum 6.1)
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0240/SB0244 Audigy 2 Platinum)
+
+pci:v00001102d00000004sv00001102sd00001008*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0320 Audigy 2)
pci:v00001102d00000004sv00001102sd00001009*
- ID_MODEL_FROM_DATABASE=SB Audigy (2 OEM HP)
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0249 Audigy 2 OEM)
+
+pci:v00001102d00000004sv00001102sd0000100A*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0246 Audigy 2)
pci:v00001102d00000004sv00001102sd00002001*
- ID_MODEL_FROM_DATABASE=SB Audigy (2 ZS Platinum Pro)
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0360 Audigy 2 ZS Platinum Pro)
pci:v00001102d00000004sv00001102sd00002002*
- ID_MODEL_FROM_DATABASE=SB Audigy (2 ZS (SB0350))
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0350 Audigy 2 ZS)
+
+pci:v00001102d00000004sv00001102sd00002003*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0352 Audigy 2 ZS)
+
+pci:v00001102d00000004sv00001102sd00002004*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0355 Audigy 2 ZS)
+
+pci:v00001102d00000004sv00001102sd00002005*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0359 Audigy 2 ZS)
+
+pci:v00001102d00000004sv00001102sd00002006*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB035x Audigy 2 OEM)
+
+pci:v00001102d00000004sv00001102sd00002007*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (SB0380 Audigy 4 Pro)
pci:v00001102d00000004sv00001102sd00004001*
- ID_MODEL_FROM_DATABASE=SB Audigy (E-MU 1010)
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (E-MU 1010 [MAEM8810])
pci:v00001102d00000004sv00001102sd00004002*
- ID_MODEL_FROM_DATABASE=SB Audigy (E-MU 0404)
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (E-MU 0404)
+
+pci:v00001102d00000004sv00001102sd00004003*
+ ID_MODEL_FROM_DATABASE=EMU10k2/CA0100/CA0102/CA10200 [Sound Blaster Audigy Series] (E-MU 1010)
pci:v00001102d00000005*
- ID_MODEL_FROM_DATABASE=SB X-Fi
+ ID_MODEL_FROM_DATABASE=EMU20k1 [Sound Blaster X-Fi Series]
pci:v00001102d00000005sv00001102sd00000021*
- ID_MODEL_FROM_DATABASE=SB X-Fi (X-Fi Platinum)
+ ID_MODEL_FROM_DATABASE=EMU20k1 [Sound Blaster X-Fi Series] (X-Fi Platinum)
pci:v00001102d00000005sv00001102sd0000002C*
- ID_MODEL_FROM_DATABASE=SB X-Fi (X-Fi XtremeGamer FATAL1TY PRO)
+ ID_MODEL_FROM_DATABASE=EMU20k1 [Sound Blaster X-Fi Series] (X-Fi XtremeGamer FATAL1TY PRO)
pci:v00001102d00000005sv00001102sd00001003*
- ID_MODEL_FROM_DATABASE=SB X-Fi (X-Fi XtremeMusic)
+ ID_MODEL_FROM_DATABASE=EMU20k1 [Sound Blaster X-Fi Series] (X-Fi XtremeMusic)
pci:v00001102d00000006*
- ID_MODEL_FROM_DATABASE=[SB Live! Value] EMU10k1X
+ ID_MODEL_FROM_DATABASE=EMU10k1X [SB Live! Value/OEM Series]
pci:v00001102d00000007*
- ID_MODEL_FROM_DATABASE=CA0106 Soundblaster
+ ID_MODEL_FROM_DATABASE=CA0106/CA0111 [SB Live!/Audigy/X-Fi Series]
pci:v00001102d00000007sv00001102sd00000007*
- ID_MODEL_FROM_DATABASE=CA0106 Soundblaster (SBLive! 24bit)
+ ID_MODEL_FROM_DATABASE=CA0106/CA0111 [SB Live!/Audigy/X-Fi Series] (SBLive! 24bit)
pci:v00001102d00000007sv00001102sd00001001*
- ID_MODEL_FROM_DATABASE=CA0106 Soundblaster (SB0310 Audigy LS)
+ ID_MODEL_FROM_DATABASE=CA0106/CA0111 [SB Live!/Audigy/X-Fi Series] (SB0310 Audigy LS)
pci:v00001102d00000007sv00001102sd00001002*
- ID_MODEL_FROM_DATABASE=CA0106 Soundblaster (SB0312 Audigy LS)
+ ID_MODEL_FROM_DATABASE=CA0106/CA0111 [SB Live!/Audigy/X-Fi Series] (SB0312 Audigy LS)
pci:v00001102d00000007sv00001102sd00001006*
- ID_MODEL_FROM_DATABASE=CA0106 Soundblaster (SB0410 SBLive! 24-bit)
+ ID_MODEL_FROM_DATABASE=CA0106/CA0111 [SB Live!/Audigy/X-Fi Series] (SB0410 SBLive! 24-bit)
pci:v00001102d00000007sv00001102sd0000100A*
- ID_MODEL_FROM_DATABASE=CA0106 Soundblaster (SB0570 [SB Audigy SE])
+ ID_MODEL_FROM_DATABASE=CA0106/CA0111 [SB Live!/Audigy/X-Fi Series] (SB0570 [SB Audigy SE])
pci:v00001102d00000007sv00001102sd00001012*
- ID_MODEL_FROM_DATABASE=CA0106 Soundblaster (SB0790 X-Fi XA)
+ ID_MODEL_FROM_DATABASE=CA0106/CA0111 [SB Live!/Audigy/X-Fi Series] (SB0790 X-Fi XA)
pci:v00001102d00000007sv00001102sd00001013*
- ID_MODEL_FROM_DATABASE=CA0106 Soundblaster (Soundblaster X-Fi Xtreme Audio)
+ ID_MODEL_FROM_DATABASE=CA0106/CA0111 [SB Live!/Audigy/X-Fi Series] (Soundblaster X-Fi Xtreme Audio)
pci:v00001102d00000007sv00001462sd00001009*
- ID_MODEL_FROM_DATABASE=CA0106 Soundblaster (K8N Diamond)
+ ID_MODEL_FROM_DATABASE=CA0106/CA0111 [SB Live!/Audigy/X-Fi Series] (K8N Diamond)
pci:v00001102d00000008*
- ID_MODEL_FROM_DATABASE=SB0400 Audigy2 Value
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series]
pci:v00001102d00000008sv00001102sd00000008*
- ID_MODEL_FROM_DATABASE=SB0400 Audigy2 Value (EMU0404 Digital Audio System)
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (EMU0404 Digital Audio System)
+
+pci:v00001102d00000008sv00001102sd00001001*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (SB0400 Audigy 2 Value)
+
+pci:v00001102d00000008sv00001102sd00001021*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (SB0610 Audigy 4 Value)
+
+pci:v00001102d00000008sv00001102sd00001022*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (SBxxx Audigy 2/4 Value)
+
+pci:v00001102d00000008sv00001102sd00001023*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (SB0612 Audigy 2 LS)
+
+pci:v00001102d00000008sv00001102sd00001024*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (SB1550 Audigy 5/Rx)
+
+pci:v00001102d00000008sv00001102sd00001101*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (SBxxxx Audigy 2 SA)
+
+pci:v00001102d00000008sv00001102sd00002001*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (SB0530 Audigy 2 ZS Notebook)
+
+pci:v00001102d00000008sv00001102sd00002021*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (SBxxxx Audigy 4 Notebook)
+
+pci:v00001102d00000008sv00001102sd00004002*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (E-MU 0404)
+
+pci:v00001102d00000008sv00001102sd00004003*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (E-MU 1010)
pci:v00001102d00000008sv00001102sd00004004*
- ID_MODEL_FROM_DATABASE=SB0400 Audigy2 Value (EMU1010 Digital Audio System [MAEM8960])
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (EMU1010 Digital Audio System [MAEM8960])
+
+pci:v00001102d00000008sv00001102sd00004005*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (E-MU 0404 [MAEM8984])
+
+pci:v00001102d00000008sv00001102sd00004007*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (E-MU 1010 [MAEM8982])
+
+pci:v00001102d00000008sv00001102sd00004201*
+ ID_MODEL_FROM_DATABASE=CA0108/CA10300 [Sound Blaster Audigy Series] (E-MU 0202 [MAEM8950])
pci:v00001102d00000009*
- ID_MODEL_FROM_DATABASE=[SB X-Fi Xtreme Audio] CA0110-IBG
+ ID_MODEL_FROM_DATABASE=CA0110 [Sound Blaster X-Fi Xtreme Audio]
pci:v00001102d00000009sv00001102sd00000010*
- ID_MODEL_FROM_DATABASE=[SB X-Fi Xtreme Audio] CA0110-IBG
+ ID_MODEL_FROM_DATABASE=CA0110 [Sound Blaster X-Fi Xtreme Audio] (MB0820 Integrated)
pci:v00001102d00000009sv00001102sd00000018*
- ID_MODEL_FROM_DATABASE=[SB X-Fi Xtreme Audio] CA0110-IBG (SB1040)
+ ID_MODEL_FROM_DATABASE=CA0110 [Sound Blaster X-Fi Xtreme Audio] (SB1040 PCI Express)
pci:v00001102d0000000B*
- ID_MODEL_FROM_DATABASE=EMU20k2 [X-Fi Titanium Series]
+ ID_MODEL_FROM_DATABASE=EMU20k2 [Sound Blaster X-Fi Titanium Series]
pci:v00001102d0000000Bsv00001102sd00000041*
- ID_MODEL_FROM_DATABASE=EMU20k2 [X-Fi Titanium Series] (SB0880 [SoundBlaster X-Fi Titanium PCI-e])
+ ID_MODEL_FROM_DATABASE=EMU20k2 [Sound Blaster X-Fi Titanium Series] (SB0880 [SoundBlaster X-Fi Titanium PCI-e])
+
+pci:v00001102d0000000Bsv00001102sd00000062*
+ ID_MODEL_FROM_DATABASE=EMU20k2 [Sound Blaster X-Fi Titanium Series] (SB1270 [SoundBlaster X-Fi Titanium HD])
pci:v00001102d00000012*
- ID_MODEL_FROM_DATABASE=SB Recon3D
+ ID_MODEL_FROM_DATABASE=Sound Core3D [Sound Blaster Recon3D / Z-Series]
+
+pci:v00001102d00000012sv00001102sd00000010*
+ ID_MODEL_FROM_DATABASE=Sound Core3D [Sound Blaster Recon3D / Z-Series] (SB1570 SB Audigy Fx)
pci:v00001102d00004001*
ID_MODEL_FROM_DATABASE=SB Audigy FireWire Port
@@ -38037,7 +38346,7 @@ pci:v00001180d00000592sv0000103Csd000030CC*
ID_MODEL_FROM_DATABASE=R5C592 Memory Stick Bus Host Adapter (Pavilion dv6700)
pci:v00001180d00000592sv0000103Csd000030CF*
- ID_MODEL_FROM_DATABASE=R5C592 Memory Stick Bus Host Adapter (Pavilion dv9500/9600/9700 series)
+ ID_MODEL_FROM_DATABASE=R5C592 Memory Stick Bus Host Adapter (Pavilion dv95xx/96xx/97xx/98xx series)
pci:v00001180d00000592sv00001043sd00001237*
ID_MODEL_FROM_DATABASE=R5C592 Memory Stick Bus Host Adapter (A6J-Q008)
@@ -40340,6 +40649,9 @@ pci:v00001203*
pci:v00001204*
ID_VENDOR_FROM_DATABASE=Lattice Semiconductor Corporation
+pci:v00001204d00001965*
+ ID_MODEL_FROM_DATABASE=SB6501 802.11ad Wireless Network Adapter
+
pci:v00001205*
ID_VENDOR_FROM_DATABASE=Array Corporation
@@ -40610,6 +40922,9 @@ pci:v00001217d00008331*
pci:v00001217d00008520*
ID_MODEL_FROM_DATABASE=SD/MMC Card Reader Controller
+pci:v00001217d00008621*
+ ID_MODEL_FROM_DATABASE=SD/MMC Card Reader Controller
+
pci:v00001218*
ID_VENDOR_FROM_DATABASE=Hybricon Corp.
@@ -41261,6 +41576,9 @@ pci:v0000125Dd00001969sv00001014sd00000166*
pci:v0000125Dd00001969sv0000125Dsd00008888*
ID_MODEL_FROM_DATABASE=ES1938/ES1946/ES1969 Solo-1 Audiodrive (Solo-1 Audio Adapter)
+pci:v0000125Dd00001969sv0000125Dsd00008898*
+ ID_MODEL_FROM_DATABASE=ES1938/ES1946/ES1969 Solo-1 Audiodrive (ES1938S TTSOLO1-SL [TerraTec 128i PCI])
+
pci:v0000125Dd00001969sv0000153Bsd0000111B*
ID_MODEL_FROM_DATABASE=ES1938/ES1946/ES1969 Solo-1 Audiodrive (Terratec 128i PCI)
@@ -41622,172 +41940,172 @@ pci:v00001274d00001171*
ID_MODEL_FROM_DATABASE=ES1373 / Creative Labs CT5803 [AudioPCI]
pci:v00001274d00001371*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518
pci:v00001274d00001371sv00000E11sd00000024*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (AudioPCI on Motherboard Compaq Deskpro)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (AudioPCI on Motherboard Compaq Deskpro)
pci:v00001274d00001371sv00000E11sd0000B1A7*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI)
pci:v00001274d00001371sv00001033sd000080AC*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI)
pci:v00001274d00001371sv00001042sd00001854*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (Tazer)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (Tazer)
pci:v00001274d00001371sv0000107Bsd00008054*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (Tabor2)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (Tabor2)
pci:v00001274d00001371sv00001274sd00001371*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (AudioPCI 64V/128 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI])
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (Audio PCI 64V/128/5200 / Creative CT4810/CT5803/CT5806 [Sound Blaster PCI])
pci:v00001274d00001371sv00001274sd00008001*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (CT4751 board)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (CT4751 board)
pci:v00001274d00001371sv00001462sd00006470*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6147 1.1A)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6147 1.1A)
pci:v00001274d00001371sv00001462sd00006560*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6156 1.10)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6156 1.10)
pci:v00001274d00001371sv00001462sd00006630*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 1.0A)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 1.0A)
pci:v00001274d00001371sv00001462sd00006631*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 1.0A)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 1.0A)
pci:v00001274d00001371sv00001462sd00006632*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 2.0A)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6163BX 2.0A)
pci:v00001274d00001371sv00001462sd00006633*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 2.0A)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6163VIA 2.0A)
pci:v00001274d00001371sv00001462sd00006820*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00)
pci:v00001274d00001371sv00001462sd00006822*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00A)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6182 1.00A)
pci:v00001274d00001371sv00001462sd00006830*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6183 1.00)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6183 1.00)
pci:v00001274d00001371sv00001462sd00006880*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6188 1.00)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6188 1.00)
pci:v00001274d00001371sv00001462sd00006900*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6190 1.00)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6190 1.00)
pci:v00001274d00001371sv00001462sd00006910*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6191)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6191)
pci:v00001274d00001371sv00001462sd00006930*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6193)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6193)
pci:v00001274d00001371sv00001462sd00006990*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6199BX 2.0A)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6199BX 2.0A)
pci:v00001274d00001371sv00001462sd00006991*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MS-6199VIA 2.0A)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MS-6199VIA 2.0A)
pci:v00001274d00001371sv000014A4sd00002077*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard KR639)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard KR639)
pci:v00001274d00001371sv000014A4sd00002105*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MR800)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MR800)
pci:v00001274d00001371sv000014A4sd00002107*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard MR801)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard MR801)
pci:v00001274d00001371sv000014A4sd00002172*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard DR739)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard DR739)
pci:v00001274d00001371sv00001509sd00009902*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard KW11)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard KW11)
pci:v00001274d00001371sv00001509sd00009903*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard KW31)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard KW31)
pci:v00001274d00001371sv00001509sd00009904*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard KA11)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard KA11)
pci:v00001274d00001371sv00001509sd00009905*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard KC13)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard KC13)
pci:v00001274d00001371sv0000152Dsd00008801*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard CP810E)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard CP810E)
pci:v00001274d00001371sv0000152Dsd00008802*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard CP810)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard CP810)
pci:v00001274d00001371sv0000152Dsd00008803*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard P3810E)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard P3810E)
pci:v00001274d00001371sv0000152Dsd00008804*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard P3810-S)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard P3810-S)
pci:v00001274d00001371sv0000152Dsd00008805*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard P3820-S)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard P3820-S)
pci:v00001274d00001371sv0000270Fsd00002001*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard 6CTR)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard 6CTR)
pci:v00001274d00001371sv0000270Fsd00002200*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard 6WTX)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard 6WTX)
pci:v00001274d00001371sv0000270Fsd00003000*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard 6WSV)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard 6WSV)
pci:v00001274d00001371sv0000270Fsd00003100*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard 6WIV2)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard 6WIV2)
pci:v00001274d00001371sv0000270Fsd00003102*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard 6WIV)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard 6WIV)
pci:v00001274d00001371sv0000270Fsd00007060*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard 6ASA2)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard 6ASA2)
pci:v00001274d00001371sv00008086sd00004249*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard BI440ZX)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard BI440ZX)
pci:v00001274d00001371sv00008086sd0000424C*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard BL440ZX)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard BL440ZX)
pci:v00001274d00001371sv00008086sd0000425A*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard BZ440ZX)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard BZ440ZX)
pci:v00001274d00001371sv00008086sd00004341*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard Cayman)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard Cayman)
pci:v00001274d00001371sv00008086sd00004343*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard Cape Cod)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard Cape Cod)
pci:v00001274d00001371sv00008086sd00004541*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (D815EEA Motherboard)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (D815EEA Motherboard)
pci:v00001274d00001371sv00008086sd00004649*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard Fire Island)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard Fire Island)
pci:v00001274d00001371sv00008086sd0000464A*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard FJ440ZX)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard FJ440ZX)
pci:v00001274d00001371sv00008086sd00004D4F*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard Montreal)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard Montreal)
pci:v00001274d00001371sv00008086sd00004F43*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard OC440LX)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard OC440LX)
pci:v00001274d00001371sv00008086sd00005243*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard RC440BX)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard RC440BX)
pci:v00001274d00001371sv00008086sd00005352*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard SunRiver)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard SunRiver)
pci:v00001274d00001371sv00008086sd00005643*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard Vancouver)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard Vancouver)
pci:v00001274d00001371sv00008086sd00005753*
- ID_MODEL_FROM_DATABASE=ES1371 / Creative Labs CT2518/ES1373 (ES1371, ES1373 AudioPCI On Motherboard WS440BX)
+ ID_MODEL_FROM_DATABASE=ES1371/ES1373 / Creative Labs CT2518 (ES1371, ES1373 AudioPCI On Motherboard WS440BX)
pci:v00001274d00005000*
ID_MODEL_FROM_DATABASE=ES1370 [AudioPCI]
@@ -42486,7 +42804,7 @@ pci:v000012AA*
ID_VENDOR_FROM_DATABASE=SDL Communications, Inc.
pci:v000012AB*
- ID_VENDOR_FROM_DATABASE=Yuan Yuan Enterprise Co., Ltd.
+ ID_VENDOR_FROM_DATABASE=YUAN High-Tech Development Co., Ltd.
pci:v000012ABd00000000*
ID_MODEL_FROM_DATABASE=MPG160/Kuroutoshikou ITVC15-STVLP
@@ -46751,6 +47069,9 @@ pci:v00001425d00005016*
pci:v00001425d00005017*
ID_MODEL_FROM_DATABASE=T520-OCP-SO Unified Wire Ethernet Controller
+pci:v00001425d00005018*
+ ID_MODEL_FROM_DATABASE=T540-BT Unified Wire Ethernet Controller
+
pci:v00001425d00005080*
ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Ethernet Controller
@@ -46889,6 +47210,9 @@ pci:v00001425d00005416*
pci:v00001425d00005417*
ID_MODEL_FROM_DATABASE=T520-OCP-SO Unified Wire Ethernet Controller
+pci:v00001425d00005418*
+ ID_MODEL_FROM_DATABASE=T540-BT Unified Wire Ethernet Controller
+
pci:v00001425d00005480*
ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Ethernet Controller
@@ -47027,6 +47351,9 @@ pci:v00001425d00005516*
pci:v00001425d00005517*
ID_MODEL_FROM_DATABASE=T520-OCP-SO Unified Wire Storage Controller
+pci:v00001425d00005518*
+ ID_MODEL_FROM_DATABASE=T540-BT Unified Wire Storage Controller
+
pci:v00001425d00005580*
ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Storage Controller
@@ -47165,6 +47492,9 @@ pci:v00001425d00005616*
pci:v00001425d00005617*
ID_MODEL_FROM_DATABASE=T520-OCP-SO Unified Wire Storage Controller
+pci:v00001425d00005618*
+ ID_MODEL_FROM_DATABASE=T540-BT Unified Wire Storage Controller
+
pci:v00001425d00005680*
ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Storage Controller
@@ -47420,6 +47750,9 @@ pci:v00001425d00005816*
pci:v00001425d00005817*
ID_MODEL_FROM_DATABASE=T520-OCP-SO Unified Wire Ethernet Controller [VF]
+pci:v00001425d00005818*
+ ID_MODEL_FROM_DATABASE=T540-BT Unified Wire Ethernet Controller [VF]
+
pci:v00001425d00005880*
ID_MODEL_FROM_DATABASE=T540-5080 Unified Wire Ethernet Controller [VF]
@@ -49622,6 +49955,12 @@ pci:v000014E4d000016CA*
pci:v000014E4d000016CB*
ID_MODEL_FROM_DATABASE=BCM57304 NetXtreme-C Ethernet Virtual Function
+pci:v000014E4d000016CE*
+ ID_MODEL_FROM_DATABASE=BCM57311 NetXtreme-C Single-port 10Gb RDMA Ethernet
+
+pci:v000014E4d000016CF*
+ ID_MODEL_FROM_DATABASE=BCM57312 NetXtreme-C Dual-port 10Gb/25Gb RDMA Ethernet
+
pci:v000014E4d000016D0*
ID_MODEL_FROM_DATABASE=BCM57402 NetXtreme-E Dual-port 10Gb Ethernet
@@ -49634,9 +49973,39 @@ pci:v000014E4d000016D2*
pci:v000014E4d000016D3*
ID_MODEL_FROM_DATABASE=BCM57404 NetXtreme-E Ethernet Virtual Function
+pci:v000014E4d000016D4*
+ ID_MODEL_FROM_DATABASE=BCM57404 NetXtreme-E Ethernet Partition
+
+pci:v000014E4d000016D6*
+ ID_MODEL_FROM_DATABASE=BCM57412 NetXtreme-E Dual-port 10Gb RDMA Ethernet
+
+pci:v000014E4d000016D7*
+ ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E Dual-port 10Gb/25Gb RDMA Ethernet
+
+pci:v000014E4d000016D8*
+ ID_MODEL_FROM_DATABASE=BCM57416 NetXtreme-E Dual-port 10GBase-T RDMA Ethernet
+
+pci:v000014E4d000016D9*
+ ID_MODEL_FROM_DATABASE=BCM57417 NetXtreme-E Dual-port 10GBase-T RDMA Ethernet
+
+pci:v000014E4d000016DC*
+ ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E Ethernet Virtual Function
+
pci:v000014E4d000016DD*
ID_MODEL_FROM_DATABASE=NetLink BCM5781 Gigabit Ethernet PCI Express
+pci:v000014E4d000016DE*
+ ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E Ethernet Partition
+
+pci:v000014E4d000016DF*
+ ID_MODEL_FROM_DATABASE=BCM57314 NetXtreme-C Dual-port 10Gb/25Gb/40Gb/50Gb RDMA Ethernet
+
+pci:v000014E4d000016E1*
+ ID_MODEL_FROM_DATABASE=BCM57314 NetXtreme-C Ethernet Virtual Function
+
+pci:v000014E4d000016E2*
+ ID_MODEL_FROM_DATABASE=BCM57417 NetXtreme-E Dual-port 10Gb/25Gb RDMA Ethernet
+
pci:v000014E4d000016F3*
ID_MODEL_FROM_DATABASE=NetXtreme BCM5727 Gigabit Ethernet PCIe
@@ -51275,6 +51644,9 @@ pci:v000014F1d00008852sv00000070sd0000F038*
pci:v000014F1d00008852sv0000107Dsd00006F22*
ID_MODEL_FROM_DATABASE=CX23885 PCI Video and Audio Decoder (WinFast PxTV1200)
+pci:v000014F1d00008852sv000012ABsd0000D585*
+ ID_MODEL_FROM_DATABASE=CX23885 PCI Video and Audio Decoder (PE988J Hybrid ATSC/QAM PCI-E AVS Video Capture (SoftEncoder))
+
pci:v000014F1d00008852sv000013C2sd00003013*
ID_MODEL_FROM_DATABASE=CX23885 PCI Video and Audio Decoder (TT-budget CT2-4500 CI)
@@ -52643,6 +53015,12 @@ pci:v000015B3d0000CAF1*
pci:v000015B3d0000CB84*
ID_MODEL_FROM_DATABASE=MT52100
+pci:v000015B3d0000CF08*
+ ID_MODEL_FROM_DATABASE=MT53236
+
+pci:v000015B3d0000D2F0*
+ ID_MODEL_FROM_DATABASE=Switch-IB 3 HDR (200Gbps) switch
+
pci:v000015B4*
ID_VENDOR_FROM_DATABASE=CCI/TRIAD
@@ -54174,11 +54552,17 @@ pci:v0000168Cd00000032sv00001A3Bsd00001186*
ID_MODEL_FROM_DATABASE=AR9485 Wireless Network Adapter (AW-NE186H)
pci:v0000168Cd00000033*
- ID_MODEL_FROM_DATABASE=AR9580 Wireless Network Adapter
+ ID_MODEL_FROM_DATABASE=AR958x 802.11abgn Wireless Network Adapter
+
+pci:v0000168Cd00000033sv0000168Csd0000A120*
+ ID_MODEL_FROM_DATABASE=AR958x 802.11abgn Wireless Network Adapter (AR9582 802.11a/n WLAN Mini-PCIe Adapter)
pci:v0000168Cd00000034*
ID_MODEL_FROM_DATABASE=AR9462 Wireless Network Adapter
+pci:v0000168Cd00000034sv00001028sd00000300*
+ ID_MODEL_FROM_DATABASE=AR9462 Wireless Network Adapter (Wireless 1802 802.11abgn Adapter)
+
pci:v0000168Cd00000034sv00001A56sd00002003*
ID_MODEL_FROM_DATABASE=AR9462 Wireless Network Adapter (Killer Wireless-N 1202 Half-size Mini PCIe Card)
@@ -54551,6 +54935,21 @@ pci:v000016D5d00007006*
pci:v000016D5d00007007*
ID_MODEL_FROM_DATABASE=XMC-7A200CC: User-Configurable Conduction-Cooled Artix-7 FPGA, with 200k logic cells
+pci:v000016D5d00007011*
+ ID_MODEL_FROM_DATABASE=AP440-1: 32-Channel Isolated Digital Input Module
+
+pci:v000016D5d00007012*
+ ID_MODEL_FROM_DATABASE=AP440-2: 32-Channel Isolated Digital Input Module
+
+pci:v000016D5d00007013*
+ ID_MODEL_FROM_DATABASE=AP440-3: 32-Channel Isolated Digital Input Module
+
+pci:v000016D5d00007014*
+ ID_MODEL_FROM_DATABASE=AP445: 32-Channel Isolated Digital Output Module
+
+pci:v000016D5d00007018*
+ ID_MODEL_FROM_DATABASE=AP408: 32-Channel Digital I/O Module
+
pci:v000016DA*
ID_VENDOR_FROM_DATABASE=Advantech Co., Ltd.
@@ -54836,6 +55235,9 @@ pci:v0000177Dd00009703*
pci:v0000177Dd00009712*
ID_MODEL_FROM_DATABASE=CN23XX [LiquidIO II] SRIOV Virtual Function
+pci:v0000177Dd00009712sv0000177Dsd00000003*
+ ID_MODEL_FROM_DATABASE=CN23XX [LiquidIO II] SRIOV Virtual Function (CN2350 [LiquidIO II] 2-port 10GbE SRIOV Virtual Function)
+
pci:v0000177Dd00009713*
ID_MODEL_FROM_DATABASE=CN23XX [LiquidIO II] NVMe SRIOV Virtual Function
@@ -54843,7 +55245,7 @@ pci:v0000177Dd00009800*
ID_MODEL_FROM_DATABASE=Octeon Fusion CNF75XX Processor
pci:v0000177Dd0000A001*
- ID_MODEL_FROM_DATABASE=THUNDERX MRML Bridge
+ ID_MODEL_FROM_DATABASE=ThunderX MRML(Master RML Bridge to RSL devices)
pci:v0000177Dd0000A002*
ID_MODEL_FROM_DATABASE=THUNDERX PCC Bridge
@@ -54957,7 +55359,7 @@ pci:v0000177Dd0000A029*
ID_MODEL_FROM_DATABASE=THUNDERX NCSI (Network Controller Sideband Interface)
pci:v0000177Dd0000A02A*
- ID_MODEL_FROM_DATABASE=THUNDERX SGP
+ ID_MODEL_FROM_DATABASE=ThunderX SGPIO (Serial GPIO controller for SATA disk lights)
pci:v0000177Dd0000A02B*
ID_MODEL_FROM_DATABASE=THUNDERX SMI / MDIO Controller
@@ -54969,7 +55371,7 @@ pci:v0000177Dd0000A02D*
ID_MODEL_FROM_DATABASE=THUNDERX PCIERC (PCIe Root Complex)
pci:v0000177Dd0000A02E*
- ID_MODEL_FROM_DATABASE=THUNDERX L2C-TAD
+ ID_MODEL_FROM_DATABASE=ThunderX L2C-TAD (Level 2 cache tag and data)
pci:v0000177Dd0000A02F*
ID_MODEL_FROM_DATABASE=THUNDERX L2C-CBC
@@ -54983,6 +55385,33 @@ pci:v0000177Dd0000A031*
pci:v0000177Dd0000A032*
ID_MODEL_FROM_DATABASE=THUNDERX FUSF (Fuse Controller)
+pci:v0000177Dd0000A033*
+ ID_MODEL_FROM_DATABASE=THUNDERX Random Number Generator virtual function
+
+pci:v0000177Dd0000A034*
+ ID_MODEL_FROM_DATABASE=THUNDERX Network Interface Controller virtual function
+
+pci:v0000177Dd0000A035*
+ ID_MODEL_FROM_DATABASE=THUNDERX Parallel Bus
+
+pci:v0000177Dd0000A036*
+ ID_MODEL_FROM_DATABASE=ThunderX RAD (RAID acceleration engine) virtual function
+
+pci:v0000177Dd0000A037*
+ ID_MODEL_FROM_DATABASE=THUNDERX ZIP virtual function
+
+pci:v0000177Dd0000A040*
+ ID_MODEL_FROM_DATABASE=THUNDERX CPT Cryptographic Accelerator
+
+pci:v0000177Dd0000A100*
+ ID_MODEL_FROM_DATABASE=THUNDERX CN88XX 48 core SoC
+
+pci:v0000177Dd0000A200*
+ ID_MODEL_FROM_DATABASE=OCTEON TX CN81XX/CN80XX
+
+pci:v0000177Dd0000A300*
+ ID_MODEL_FROM_DATABASE=OCTEON TX CN83XX
+
pci:v00001787*
ID_VENDOR_FROM_DATABASE=Hightech Information System Ltd.
@@ -55136,6 +55565,9 @@ pci:v000017A0d00008084*
pci:v000017AA*
ID_VENDOR_FROM_DATABASE=Lenovo
+pci:v000017AAd0000402B*
+ ID_MODEL_FROM_DATABASE=Intel 82599ES 10Gb 2-port Server Adapter X520-2
+
pci:v000017AB*
ID_VENDOR_FROM_DATABASE=Phillips Components
@@ -55409,6 +55841,120 @@ pci:v000017DBd00000101*
pci:v000017DE*
ID_VENDOR_FROM_DATABASE=KWorld Computer Co. Ltd.
+pci:v000017DF*
+ ID_VENDOR_FROM_DATABASE=Dini Group
+
+pci:v000017DFd00001864*
+ ID_MODEL_FROM_DATABASE=Virtex4 PCI Board w/ QL5064 Bridge [DN7000K10PCI/DN8000K10PCI/DN8000K10PSX/NOTUS]
+
+pci:v000017DFd00001865*
+ ID_MODEL_FROM_DATABASE=Virtex4 ASIC Emulator [DN8000K10PCIe]
+
+pci:v000017DFd00001866*
+ ID_MODEL_FROM_DATABASE=Virtex4 ASIC Emulator Cable Connection [DN8000K10PCI]
+
+pci:v000017DFd00001867*
+ ID_MODEL_FROM_DATABASE=Virtex4 ASIC Emulator Cable Connection [DN8000K10PCIe]
+
+pci:v000017DFd00001868*
+ ID_MODEL_FROM_DATABASE=Virtex4 ASIC Emulator [DN8000K10PCIe-8]
+
+pci:v000017DFd00001900*
+ ID_MODEL_FROM_DATABASE=Virtex5 PCIe ASIC Emulator [DN9000K10PCIe8T/DN9002K10PCIe8T/DN9200K10PCIe8T/DN7006K10PCIe8T/DN7406K10PCIe8T]
+
+pci:v000017DFd00001901*
+ ID_MODEL_FROM_DATABASE=Virtex5 PCIe ASIC Emulator Large BARs [DN9000K10PCIe8T/DN9002K10PCIe8T/DN9200K10PCIe8T/DN7006K10PCIe8T/DN7406K10PCIe8T]
+
+pci:v000017DFd00001902*
+ ID_MODEL_FROM_DATABASE=Virtex5 PCIe ASIC Emulator Low Power [Interceptor]
+
+pci:v000017DFd00001903*
+ ID_MODEL_FROM_DATABASE=Spartan6 PCIe FPGA Accelerator Board [DNBFCS12PCIe]
+
+pci:v000017DFd00001904*
+ ID_MODEL_FROM_DATABASE=Virtex6 PCIe ASIC Emulation Board [DNDUALV6_PCIe4]
+
+pci:v000017DFd00001905*
+ ID_MODEL_FROM_DATABASE=Virtex6 PCIe ASIC Emulation Board [DNV6F6PCIe]
+
+pci:v000017DFd00001906*
+ ID_MODEL_FROM_DATABASE=Virtex6 PCIe ASIC Emulation Board [DN2076K10]
+
+pci:v000017DFd00001907*
+ ID_MODEL_FROM_DATABASE=Virtex6 PCIe ASIC Emulation Board [DNV6F2PCIe]
+
+pci:v000017DFd00001908*
+ ID_MODEL_FROM_DATABASE=Virtex6 PCIe ASIC Emulation Board Large BARs[DNV6F2PCIe]
+
+pci:v000017DFd00001909*
+ ID_MODEL_FROM_DATABASE=Kintex7 PCIe FPGA Accelerator Board [DNK7F5PCIe]
+
+pci:v000017DFd0000190A*
+ ID_MODEL_FROM_DATABASE=Virtex7 PCIe ASIC Emulation Board [DNV7F1A]
+
+pci:v000017DFd0000190B*
+ ID_MODEL_FROM_DATABASE=Stratix5 PCIe ASIC Emulation Board [DNS5GXF2]
+
+pci:v000017DFd0000190C*
+ ID_MODEL_FROM_DATABASE=Virtex7 PCIe ASIC Emulation Board [DNV7F2A]
+
+pci:v000017DFd0000190D*
+ ID_MODEL_FROM_DATABASE=Virtex7 PCIe ASIC Emulation Board [DNV7F4A]
+
+pci:v000017DFd0000190E*
+ ID_MODEL_FROM_DATABASE=Virtex7 PCIe ASIC Emulation Board [DNV7F2B]
+
+pci:v000017DFd0000190F*
+ ID_MODEL_FROM_DATABASE=KintexUS PCIe MainRef Design [DNPCIE_40G_KU_LL]
+
+pci:v000017DFd00001910*
+ ID_MODEL_FROM_DATABASE=VirtexUS ASIC Emulation Board [DNVUF4A]
+
+pci:v000017DFd00001911*
+ ID_MODEL_FROM_DATABASE=VirtexUS PCIe ASIC Emulation Board [DNVU_F2PCIe]
+
+pci:v000017DFd00001912*
+ ID_MODEL_FROM_DATABASE=KintexUS PCIe MainRef Design [DNPCIe_40G_KU_LL_QSFP]
+
+pci:v000017DFd00001913*
+ ID_MODEL_FROM_DATABASE=VirtexUS ASIC Emulation Board [DNVUF1A]
+
+pci:v000017DFd00001914*
+ ID_MODEL_FROM_DATABASE=VirtexUS ASIC Emulation Board [DNVUF2A]
+
+pci:v000017DFd00001915*
+ ID_MODEL_FROM_DATABASE=Arria10 PCIe MainRef Design [DNPCIe_80G_A10_LL]
+
+pci:v000017DFd00001916*
+ ID_MODEL_FROM_DATABASE=VirtexUS PCIe Accelerator Board [DNVUF2_HPC_PCIe]
+
+pci:v000017DFd00001A00*
+ ID_MODEL_FROM_DATABASE=Virtex6 PCIe DMA Netlist Design
+
+pci:v000017DFd00001A01*
+ ID_MODEL_FROM_DATABASE=Virtex6 PCIe Darklite Design [DNPCIe_HXT_10G_LL]
+
+pci:v000017DFd00001A02*
+ ID_MODEL_FROM_DATABASE=Virtex7 PCIe DMA Netlist Design
+
+pci:v000017DFd00001A03*
+ ID_MODEL_FROM_DATABASE=Kintex7 PCIe Darklite Design [DNPCIe_K7_10G_LL]
+
+pci:v000017DFd00001A05*
+ ID_MODEL_FROM_DATABASE=Stratix5 PCIe Darklite Design [DNS5GX_F2]
+
+pci:v000017DFd00001A06*
+ ID_MODEL_FROM_DATABASE=VirtexUS PCIe DMA Netlist Design
+
+pci:v000017DFd00001A07*
+ ID_MODEL_FROM_DATABASE=KintexUS PCIe Darklite Design [DNPCIe_40G_KU_LL]
+
+pci:v000017DFd00001A08*
+ ID_MODEL_FROM_DATABASE=KintexUS PCIe Darklite Design [DNPCIe_40G_KU_LL_QSFP]
+
+pci:v000017DFd00001A09*
+ ID_MODEL_FROM_DATABASE=Arria10 PCIe Darklite Design [DNPCIe_80G_A10_LL]
+
pci:v000017E4*
ID_VENDOR_FROM_DATABASE=Sectra AB
@@ -56738,6 +57284,9 @@ pci:v00001924d00000903sv00001924sd0000800D*
pci:v00001924d00000903sv00001924sd00008010*
ID_MODEL_FROM_DATABASE=SFC9120 (SFA7942Q-R1 QSFP+ AOE Adapter)
+pci:v00001924d00000903sv00001924sd00008015*
+ ID_MODEL_FROM_DATABASE=SFC9120 (SFA7942Q-A5-0-R1 QSFP+ AOE Adapter)
+
pci:v00001924d00000923*
ID_MODEL_FROM_DATABASE=SFC9140
@@ -56753,12 +57302,30 @@ pci:v00001924d00000923sv00001924sd0000800F*
pci:v00001924d00000A03*
ID_MODEL_FROM_DATABASE=SFC9220
+pci:v00001924d00000A03sv00001924sd00008011*
+ ID_MODEL_FROM_DATABASE=SFC9220 (SFN 8022-R1 Solarflare Flareon 8000 Series 10G Adapter)
+
pci:v00001924d00000A03sv00001924sd00008012*
ID_MODEL_FROM_DATABASE=SFC9220 (SFN8522-R1 Flareon Ultra 8000 Series 10G Adapter)
+pci:v00001924d00000A03sv00001924sd00008013*
+ ID_MODEL_FROM_DATABASE=SFC9220 (SFN8042-R1 Solarflare Flareon 8000 Series 10/40G Adapter)
+
pci:v00001924d00000A03sv00001924sd00008014*
ID_MODEL_FROM_DATABASE=SFC9220 (SFN8542-R1 Flareon Ultra 8000 Series 10/40G Adapter)
+pci:v00001924d00000A03sv00001924sd00008016*
+ ID_MODEL_FROM_DATABASE=SFC9220 (SFN8022-R2 Flareon 8000 Series 10G Adapter)
+
+pci:v00001924d00000A03sv00001924sd00008017*
+ ID_MODEL_FROM_DATABASE=SFC9220 (SFN8522-R2 Flareon Ultra 8000 Series 10G Adapter)
+
+pci:v00001924d00000A03sv00001924sd00008018*
+ ID_MODEL_FROM_DATABASE=SFC9220 (SFN8042-R2 Flareon 8000 Series 10/40G Adapter)
+
+pci:v00001924d00000A03sv00001924sd00008019*
+ ID_MODEL_FROM_DATABASE=SFC9220 (SFN8542-R2 Flareon Ultra 8000 Series 10/40G Adapter)
+
pci:v00001924d00001803*
ID_MODEL_FROM_DATABASE=SFC9020 Virtual Function [Solarstorm]
@@ -58244,6 +58811,15 @@ pci:v00001B36d00000005*
pci:v00001B36d00000005sv00001AF4sd00001100*
ID_MODEL_FROM_DATABASE=QEMU PCI Test Device (QEMU Virtual Machine)
+pci:v00001B36d00000006*
+ ID_MODEL_FROM_DATABASE=PCI Rocker Ethernet switch device
+
+pci:v00001B36d00000007*
+ ID_MODEL_FROM_DATABASE=PCI SD Card Host Controller Interface
+
+pci:v00001B36d0000000A*
+ ID_MODEL_FROM_DATABASE=PCI-PCI bridge (multiseat)
+
pci:v00001B36d00000100*
ID_MODEL_FROM_DATABASE=QXL paravirtual graphic card
@@ -58385,6 +58961,9 @@ pci:v00001B4Bd00009220*
pci:v00001B4Bd00009230*
ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller
+pci:v00001B4Bd00009230sv00001D49sd00000300*
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (ThinkSystem M.2 with Mirroring Enablement Kit)
+
pci:v00001B4Bd00009235*
ID_MODEL_FROM_DATABASE=88SE9235 PCIe 2.0 x2 4-port SATA 6 Gb/s Controller
@@ -58403,6 +58982,9 @@ pci:v00001B55*
pci:v00001B55d000018F6*
ID_MODEL_FROM_DATABASE=Dual DVB Universal CI card
+pci:v00001B55d000018F7*
+ ID_MODEL_FROM_DATABASE=Dual DVB Universal CI card rev 1.4
+
pci:v00001B55d00002A2C*
ID_MODEL_FROM_DATABASE=Dual DVB-S2-CI card
@@ -58532,6 +59114,18 @@ pci:v00001BB1d0000005Dsv00001BB1sd00006522*
pci:v00001BB1d0000005Dsv00001BB1sd00006523*
ID_MODEL_FROM_DATABASE=Nytro PCIe Flash Storage (Nytro XP6500-8A4096)
+pci:v00001BB1d00000100*
+ ID_MODEL_FROM_DATABASE=Nytro Flash Storage
+
+pci:v00001BB1d00000100sv00001BB1sd00000101*
+ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro XF1440)
+
+pci:v00001BB1d00000100sv00001BB1sd00000121*
+ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro XM1440)
+
+pci:v00001BB1d00000100sv00001BB1sd000001A1*
+ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro XP7102)
+
pci:v00001BB3*
ID_VENDOR_FROM_DATABASE=Bluecherry
@@ -58739,12 +59333,24 @@ pci:v00001C8Ad00000001*
pci:v00001CB1*
ID_VENDOR_FROM_DATABASE=Collion UG & Co.KG
+pci:v00001CB8*
+ ID_VENDOR_FROM_DATABASE=Dawning Information Industry Co., Ltd.
+
pci:v00001CC5*
ID_VENDOR_FROM_DATABASE=Embedded Intelligence, Inc.
pci:v00001CC5d00000100*
ID_MODEL_FROM_DATABASE=CAN-PCIe-02
+pci:v00001CC7*
+ ID_VENDOR_FROM_DATABASE=Radian Memory Systems Inc.
+
+pci:v00001CC7d00000200*
+ ID_MODEL_FROM_DATABASE=RMS-200
+
+pci:v00001CC7d00000250*
+ ID_MODEL_FROM_DATABASE=RMS-250
+
pci:v00001CD2*
ID_VENDOR_FROM_DATABASE=SesKion GmbH
@@ -58760,6 +59366,9 @@ pci:v00001CD2d00000303*
pci:v00001CD2d00000304*
ID_MODEL_FROM_DATABASE=Simulyzer-RT CompactPCI Serial PWR-ANA-1 card
+pci:v00001CD2d00000305*
+ ID_MODEL_FROM_DATABASE=Simulyzer-RT CompactPCI Serial CAN-1 card
+
pci:v00001CDD*
ID_VENDOR_FROM_DATABASE=secunet Security Networks AG
@@ -58805,6 +59414,12 @@ pci:v00001D26*
pci:v00001D26d00000040*
ID_MODEL_FROM_DATABASE=Turbocard2 Accelerator
+pci:v00001D26d00000080*
+ ID_MODEL_FROM_DATABASE=Open Network Interface Card 80G
+
+pci:v00001D26d000000C0*
+ ID_MODEL_FROM_DATABASE=Turbocard3 Accelerator
+
pci:v00001D26d0000E004*
ID_MODEL_FROM_DATABASE=AB01/EMB01 Development Board
@@ -58874,6 +59489,12 @@ pci:v00001D6Cd0000100B*
pci:v00001D6Cd0000100C*
ID_MODEL_FROM_DATABASE=K35-4SFP
+pci:v00001D6Cd0000100D*
+ ID_MODEL_FROM_DATABASE=AR-ARKA-FX0 [Arkville 32B DPDK Data Mover]
+
+pci:v00001D6Cd0000100E*
+ ID_MODEL_FROM_DATABASE=AR-ARKA-FX1 [Arkville 64B DPDK Data Mover]
+
pci:v00001D6Cd00004200*
ID_MODEL_FROM_DATABASE=A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument]
@@ -59174,6 +59795,9 @@ pci:v00003388d00000022*
pci:v00003388d00000026*
ID_MODEL_FROM_DATABASE=HB2 PCI-PCI Bridge
+pci:v00003388d00001014*
+ ID_MODEL_FROM_DATABASE=AudioTrak Maya
+
pci:v00003388d00001018*
ID_MODEL_FROM_DATABASE=Audiotrak INCA88
@@ -59783,6 +60407,9 @@ pci:v00004624d0000DE01*
pci:v00004624d0000DE02*
ID_MODEL_FROM_DATABASE=DL200ME Middle resolution delay line PCI based card
+pci:v00004651*
+ ID_VENDOR_FROM_DATABASE=TXIC
+
pci:v00004680*
ID_VENDOR_FROM_DATABASE=Umax Computer Corp
@@ -60827,6 +61454,9 @@ pci:v00005646*
pci:v00005654*
ID_VENDOR_FROM_DATABASE=VoiceTronix Pty Ltd
+pci:v00005678*
+ ID_VENDOR_FROM_DATABASE=Dawicontrol Computersysteme GmbH
+
pci:v00005700*
ID_VENDOR_FROM_DATABASE=Netpower
@@ -64568,6 +65198,9 @@ pci:v00008086d000010FBsv000017AAsd00001071*
pci:v00008086d000010FBsv000017AAsd00004007*
ID_MODEL_FROM_DATABASE=82599ES 10-Gigabit SFI/SFP+ Network Connection
+pci:v00008086d000010FBsv000017AAsd0000402B*
+ ID_MODEL_FROM_DATABASE=82599ES 10-Gigabit SFI/SFP+ Network Connection (82599ES 10Gb 2-port Server Adapter X520-DA2)
+
pci:v00008086d000010FBsv00008086sd00000002*
ID_MODEL_FROM_DATABASE=82599ES 10-Gigabit SFI/SFP+ Network Connection (Ethernet Server Adapter X520-DA2)
@@ -65741,6 +66374,9 @@ pci:v00008086d00001563sv00008086sd0000001A*
pci:v00008086d00001563sv00008086sd00000022*
ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T2)
+pci:v00008086d00001565*
+ ID_MODEL_FROM_DATABASE=X550 Virtual Function
+
pci:v00008086d00001566*
ID_MODEL_FROM_DATABASE=DSL4410 Thunderbolt NHI [Redwood Ridge 2C 2013]
@@ -65840,9 +66476,15 @@ pci:v00008086d00001572sv00008086sd00000009*
pci:v00008086d00001572sv00008086sd0000000A*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+
+pci:v00008086d00001572sv00008086sd0000000B*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Server Adapter X710-DA2 for OCP)
+
pci:v00008086d00001572sv00008086sd0000000D*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+
+pci:v00008086d00001572sv00008086sd00000010*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Converged Network Adapter X710)
+
pci:v00008086d00001572sv00008086sd00004005*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Controller XL710 for 10 Gigabit SFP+)
@@ -65850,10 +66492,10 @@ pci:v00008086d00001572sv00008086sd00004006*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+
pci:v00008086d00001575*
- ID_MODEL_FROM_DATABASE=DSL5110 Thunderbolt NHI [Falcon Ridge LP 2014]
+ ID_MODEL_FROM_DATABASE=DSL6340 Thunderbolt 3 NHI [Alpine Ridge 2C 2015]
pci:v00008086d00001576*
- ID_MODEL_FROM_DATABASE=DSL5110 Thunderbolt Bridge [Falcon Ridge LP 2014]
+ ID_MODEL_FROM_DATABASE=DSL6340 Thunderbolt 3 Bridge [Alpine Ridge 2C 2015]
pci:v00008086d00001577*
ID_MODEL_FROM_DATABASE=DSL6540 Thunderbolt 3 NHI [Alpine Ridge 4C 2015]
@@ -65868,10 +66510,10 @@ pci:v00008086d0000157C*
ID_MODEL_FROM_DATABASE=I210 Gigabit Backplane Connection
pci:v00008086d0000157D*
- ID_MODEL_FROM_DATABASE=DSL6340 Thunderbolt 3 NHI [Alpine Ridge 2C 2015]
+ ID_MODEL_FROM_DATABASE=DSL5110 Thunderbolt 2 NHI (Low Power) [Win Ridge 2C 2014]
pci:v00008086d0000157E*
- ID_MODEL_FROM_DATABASE=DSL6340 Thunderbolt 3 Bridge [Alpine Ridge 2C 2015]
+ ID_MODEL_FROM_DATABASE=DSL5110 Thunderbolt 2 Bridge (Low Power) [Win Ridge 2C 2014]
pci:v00008086d00001580*
ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE backplane
@@ -66002,6 +66644,9 @@ pci:v00008086d00001589sv00008086sd00000001*
pci:v00008086d00001589sv00008086sd00000002*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710/X557-AT 10GBASE-T (Ethernet Converged Network Adapter X710-T4)
+pci:v00008086d00001589sv00008086sd00001003*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710/X557-AT 10GBASE-T (Ethernet Converged Network Adapter X710-T)
+
pci:v00008086d000015A0*
ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM
@@ -66041,6 +66686,9 @@ pci:v00008086d000015AD*
pci:v00008086d000015AE*
ID_MODEL_FROM_DATABASE=Ethernet Connection X552 1000BASE-T
+pci:v00008086d000015B5*
+ ID_MODEL_FROM_DATABASE=DSL6340 USB 3.1 Controller [Alpine Ridge]
+
pci:v00008086d000015B6*
ID_MODEL_FROM_DATABASE=DSL6540 USB 3.1 Controller [Alpine Ridge]
@@ -66053,6 +66701,12 @@ pci:v00008086d000015B8*
pci:v00008086d000015B9*
ID_MODEL_FROM_DATABASE=Ethernet Connection (3) I219-LM
+pci:v00008086d000015BF*
+ ID_MODEL_FROM_DATABASE=JHL6240 Thunderbolt 3 NHI (Low Power) [Alpine Ridge LP 2016]
+
+pci:v00008086d000015C0*
+ ID_MODEL_FROM_DATABASE=JHL6240 Thunderbolt 3 Bridge (Low Power) [Alpine Ridge LP 2016]
+
pci:v00008086d000015D0*
ID_MODEL_FROM_DATABASE=Ethernet SDI Adapter FM10420-100GbE-QDA2
@@ -66068,9 +66722,18 @@ pci:v00008086d000015D1sv00008086sd00000021*
pci:v00008086d000015D1sv00008086sd000000A2*
ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T1)
+pci:v00008086d000015D2*
+ ID_MODEL_FROM_DATABASE=JHL6540 Thunderbolt 3 NHI (C step) [Alpine Ridge 4C 2016]
+
+pci:v00008086d000015D3*
+ ID_MODEL_FROM_DATABASE=JHL6540 Thunderbolt 3 Bridge (C step) [Alpine Ridge 4C 2016]
+
pci:v00008086d000015D5*
ID_MODEL_FROM_DATABASE=Ethernet SDI Adapter FM10420-25GbE-DA2
+pci:v00008086d000015D5sv00008086sd00000001*
+ ID_MODEL_FROM_DATABASE=Ethernet SDI Adapter FM10420-25GbE-DA2 (Intel(R) Ethernet SDI Adapter FM10420-25GbE-DA2)
+
pci:v00008086d000015D6*
ID_MODEL_FROM_DATABASE=Ethernet Connection (5) I219-V
@@ -66080,6 +66743,12 @@ pci:v00008086d000015D7*
pci:v00008086d000015D8*
ID_MODEL_FROM_DATABASE=Ethernet Connection (4) I219-V
+pci:v00008086d000015D9*
+ ID_MODEL_FROM_DATABASE=JHL6340 Thunderbolt 3 NHI (C step) [Alpine Ridge 2C 2016]
+
+pci:v00008086d000015DA*
+ ID_MODEL_FROM_DATABASE=JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
+
pci:v00008086d000015E3*
ID_MODEL_FROM_DATABASE=Ethernet Connection (5) I219-LM
@@ -66212,6 +66881,9 @@ pci:v00008086d00001903*
pci:v00008086d00001904*
ID_MODEL_FROM_DATABASE=Skylake Host Bridge/DRAM Registers
+pci:v00008086d00001904sv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=Skylake Host Bridge/DRAM Registers (Latitude 3570)
+
pci:v00008086d00001905*
ID_MODEL_FROM_DATABASE=Skylake PCIe Controller (x8)
@@ -66242,6 +66914,9 @@ pci:v00008086d00001912*
pci:v00008086d00001916*
ID_MODEL_FROM_DATABASE=HD Graphics 520
+pci:v00008086d00001916sv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=HD Graphics 520 (Latitude 3570)
+
pci:v00008086d00001918*
ID_MODEL_FROM_DATABASE=Skylake Host Bridge/DRAM Registers
@@ -67656,97 +68331,97 @@ pci:v00008086d0000225E*
ID_MODEL_FROM_DATABASE=Xeon Phi coprocessor 31S1
pci:v00008086d00002280*
- ID_MODEL_FROM_DATABASE=Braswell SoC Transaction Router
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SoC Transaction Register
pci:v00008086d00002284*
- ID_MODEL_FROM_DATABASE=Braswell HD Audio Controller
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series High Definition Audio Controller
pci:v00008086d00002286*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O DMA
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO1 DMA Controller
pci:v00008086d0000228A*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O HSUART Port 1
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO1 HSUART Controller #1
pci:v00008086d0000228C*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O HSUART Port 2
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO1 HSUART Controller #2
pci:v00008086d00002292*
- ID_MODEL_FROM_DATABASE=Braswell Platform Controller Unit SMBus
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx SMBus Controller
pci:v00008086d00002294*
- ID_MODEL_FROM_DATABASE=Braswell Storage Cluster Control MMC Port
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series MMC Controller
pci:v00008086d00002295*
- ID_MODEL_FROM_DATABASE=Braswell Storage Cluster Control SDIO Port
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SDIO Controller
pci:v00008086d00002296*
- ID_MODEL_FROM_DATABASE=Braswell Storage Cluster Control SD Port
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SD Controller
pci:v00008086d00002298*
- ID_MODEL_FROM_DATABASE=Braswell Trusted Execution Engine Interface
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Trusted Execution Engine
pci:v00008086d0000229C*
- ID_MODEL_FROM_DATABASE=Braswell Platform Controller Unit LPC
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCU
pci:v00008086d000022A3*
- ID_MODEL_FROM_DATABASE=Braswell SATA Controller
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SATA Controller
pci:v00008086d000022A4*
- ID_MODEL_FROM_DATABASE=Braswell SATA AHCI Controller
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series SATA AHCI Controller
pci:v00008086d000022A8*
- ID_MODEL_FROM_DATABASE=Braswell Low Power Engine Audio
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Low Power Engine Audio
pci:v00008086d000022B0*
- ID_MODEL_FROM_DATABASE=Braswell PCI Configuration Registers
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Configuration Registers
pci:v00008086d000022B1*
- ID_MODEL_FROM_DATABASE=Braswell Integrated Graphics Controller
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Integrated Graphics Controller
pci:v00008086d000022B5*
- ID_MODEL_FROM_DATABASE=Braswell USB xHCI Host Controller
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series USB xHCI Controller
pci:v00008086d000022B8*
- ID_MODEL_FROM_DATABASE=Braswell ISP Camera
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Imaging Unit
pci:v00008086d000022C0*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O DMA
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 DMA Controller
pci:v00008086d000022C1*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O I2C Port 1
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #1
pci:v00008086d000022C2*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O I2C Port 2
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #2
pci:v00008086d000022C3*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O I2C Port 3
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #3
pci:v00008086d000022C4*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O I2C Port 4
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #4
pci:v00008086d000022C5*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O I2C Port 5
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #5
pci:v00008086d000022C6*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O I2C Port 6
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #6
pci:v00008086d000022C7*
- ID_MODEL_FROM_DATABASE=Braswell Serial I/O I2C Port 7
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series LPIO2 I2C Controller #7
pci:v00008086d000022C8*
- ID_MODEL_FROM_DATABASE=Braswell PCIe Port 1
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Express Port #1
pci:v00008086d000022CA*
- ID_MODEL_FROM_DATABASE=Braswell PCIe Port 2
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Express Port #2
pci:v00008086d000022CC*
- ID_MODEL_FROM_DATABASE=Braswell PCIe Port 3
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Express Port #3
pci:v00008086d000022CE*
- ID_MODEL_FROM_DATABASE=Braswell PCIe Port 4
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series PCI Express Port #4
pci:v00008086d000022DC*
- ID_MODEL_FROM_DATABASE=Braswell P-Unit Power Management
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor x5-E8000/J3xxx/N3xxx Series Power Management Controller
pci:v00008086d00002310*
ID_MODEL_FROM_DATABASE=DH89xxCC LPC Controller
@@ -69758,6 +70433,12 @@ pci:v00008086d000024F0sv000010A9sd00008031*
pci:v00008086d000024F0sv000015D9sd00000934*
ID_MODEL_FROM_DATABASE=Omni-Path HFI Silicon 100 Series [discrete] (Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, SIOM Module)
+pci:v00008086d000024F0sv00001CB8sd00000001*
+ ID_MODEL_FROM_DATABASE=Omni-Path HFI Silicon 100 Series [discrete] (Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, TC4600 QSFP28)
+
+pci:v00008086d000024F0sv00001CB8sd00000002*
+ ID_MODEL_FROM_DATABASE=Omni-Path HFI Silicon 100 Series [discrete] (Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16, TC6600 Fixed Port)
+
pci:v00008086d000024F0sv00008086sd00002628*
ID_MODEL_FROM_DATABASE=Omni-Path HFI Silicon 100 Series [discrete] (Omni-Path HFI Adapter 100 Series, 1 Port, PCIe x16)
@@ -76064,6 +76745,12 @@ pci:v00008086d000037CD*
pci:v00008086d000037CE*
ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE backplane
+pci:v00008086d000037CEsv00001590sd00000200*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE backplane (Ethernet 10Gb 2-port 568i Adapter)
+
+pci:v00008086d000037CEsv00008086sd00000215*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE backplane (Ethernet 10Gb 2-port 568i Adapter)
+
pci:v00008086d000037CF*
ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE QSFP+
@@ -76082,6 +76769,9 @@ pci:v00008086d000037D3*
pci:v00008086d000037D4*
ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE QSFP+
+pci:v00008086d000037D9*
+ ID_MODEL_FROM_DATABASE=X722 Hyper-V Virtual Function
+
pci:v00008086d00003A00*
ID_MODEL_FROM_DATABASE=82801JD/DO (ICH10 Family) 4-port SATA IDE Controller
@@ -77681,8 +78371,110 @@ pci:v00008086d00005845*
pci:v00008086d00005845sv00001AF4sd00001100*
ID_MODEL_FROM_DATABASE=QEMU NVM Express Controller (QEMU Virtual Machine)
+pci:v00008086d00005A84*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Integrated Graphics Controller
+
+pci:v00008086d00005A88*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Imaging Unit
+
+pci:v00008086d00005A98*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Audio Cluster
+
+pci:v00008086d00005A9A*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Trusted Execution Engine
+
+pci:v00008086d00005AA2*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Integrated Sensor Hub
+
+pci:v00008086d00005AA8*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series USB xHCI
+
+pci:v00008086d00005AAC*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series I2C Controller #1
+
+pci:v00008086d00005AAE*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series I2C Controller #2
+
+pci:v00008086d00005AB0*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series I2C Controller #3
+
+pci:v00008086d00005AB2*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series I2C Controller #4
+
+pci:v00008086d00005AB4*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series I2C Controller #5
+
+pci:v00008086d00005AB6*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series I2C Controller #6
+
+pci:v00008086d00005AB8*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series I2C Controller #7
+
+pci:v00008086d00005ABA*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series I2C Controller #8
+
+pci:v00008086d00005ABC*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series HSUART Controller #1
+
+pci:v00008086d00005ABE*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series HSUART Controller #2
+
+pci:v00008086d00005AC0*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series HSUART Controller #3
+
+pci:v00008086d00005AC2*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SPI Controller #1
+
+pci:v00008086d00005AC4*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SPI Controller #2
+
+pci:v00008086d00005AC6*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SPI Controller #3
+
+pci:v00008086d00005AC8*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PWM Pin Controller
+
+pci:v00008086d00005ACA*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SDXC/MMC Host Controller
+
+pci:v00008086d00005ACC*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series eMMC Controller
+
+pci:v00008086d00005AD0*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SDIO Controller
+
pci:v00008086d00005AD4*
- ID_MODEL_FROM_DATABASE=Broxton SMBus Controller
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SMBus Controller
+
+pci:v00008086d00005AD6*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PCI Express Port B #1
+
+pci:v00008086d00005AD7*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PCI Express Port B #2
+
+pci:v00008086d00005AD8*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PCI Express Port A #1
+
+pci:v00008086d00005AD9*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PCI Express Port A #2
+
+pci:v00008086d00005ADA*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PCI Express Port A #3
+
+pci:v00008086d00005ADB*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series PCI Express Port A #4
+
+pci:v00008086d00005AE3*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series SATA AHCI Controller
+
+pci:v00008086d00005AE8*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Low Pin Count Interface
+
+pci:v00008086d00005AEE*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series HSUART Controller #4
+
+pci:v00008086d00005AF0*
+ ID_MODEL_FROM_DATABASE=Atom/Celeron/Pentium Processor N4200/N3350/E3900 Series Host Bridge
pci:v00008086d000065C0*
ID_MODEL_FROM_DATABASE=5100 Chipset Memory Controller Hub
@@ -79601,6 +80393,9 @@ pci:v00008086d00009CE6*
pci:v00008086d00009D03*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP SATA Controller [AHCI mode]
+pci:v00008086d00009D03sv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP SATA Controller [AHCI mode] (Latitude 3570)
+
pci:v00008086d00009D14*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP PCI Express Root Port #5
@@ -79610,9 +80405,15 @@ pci:v00008086d00009D15*
pci:v00008086d00009D21*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC
+pci:v00008086d00009D21sv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC (Latitude 3570)
+
pci:v00008086d00009D23*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP SMBus
+pci:v00008086d00009D23sv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP SMBus (Latitude 3570)
+
pci:v00008086d00009D27*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO UART Controller #0
@@ -79631,18 +80432,33 @@ pci:v00008086d00009D2D*
pci:v00008086d00009D2F*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP USB 3.0 xHCI Controller
+pci:v00008086d00009D2Fsv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP USB 3.0 xHCI Controller (Latitude 3570)
+
pci:v00008086d00009D31*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Thermal subsystem
+pci:v00008086d00009D31sv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Thermal subsystem (Latitude 3570)
+
pci:v00008086d00009D3A*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1
+pci:v00008086d00009D3Asv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1 (Latitude 3570)
+
pci:v00008086d00009D48*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller
+pci:v00008086d00009D48sv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller (Latitude 3570)
+
pci:v00008086d00009D60*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #0
+pci:v00008086d00009D60sv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #0 (Latitude 3570)
+
pci:v00008086d00009D60sv00008086sd00009D60*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #0 (100 Series PCH/Sunrise Point PCH I2C0 [Skylake/Kaby Lake LPSS I2C])
@@ -79667,6 +80483,9 @@ pci:v00008086d00009D66*
pci:v00008086d00009D70*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio
+pci:v00008086d00009D70sv00001028sd000006F3*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio (Latitude 3570)
+
pci:v00008086d0000A000*
ID_MODEL_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge
diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb
index cef2ade2e9..fec0fb4daa 100644
--- a/hwdb/20-usb-vendor-model.hwdb
+++ b/hwdb/20-usb-vendor-model.hwdb
@@ -275,9 +275,15 @@ usb:v03EBp210D*
usb:v03EBp2110*
ID_MODEL_FROM_DATABASE=AVR JTAGICE3 Debugger and Programmer
+usb:v03EBp2111*
+ ID_MODEL_FROM_DATABASE=Xplained Pro board debugger and programmer
+
usb:v03EBp2122*
ID_MODEL_FROM_DATABASE=XMEGA-A1 Explained evaluation kit
+usb:v03EBp2140*
+ ID_MODEL_FROM_DATABASE=AVR JTAGICE3 (v3.x) Debugger and Programmer
+
usb:v03EBp2141*
ID_MODEL_FROM_DATABASE=ICE debugger
@@ -293,12 +299,36 @@ usb:v03EBp2FE6*
usb:v03EBp2FEA*
ID_MODEL_FROM_DATABASE=Cactus RF60 (DFU)
+usb:v03EBp2FEE*
+ ID_MODEL_FROM_DATABASE=atmega8u2 DFU bootloader
+
+usb:v03EBp2FEF*
+ ID_MODEL_FROM_DATABASE=atmega16u2 DFU bootloader
+
usb:v03EBp2FF0*
ID_MODEL_FROM_DATABASE=atmega32u2 DFU bootloader
+usb:v03EBp2FF1*
+ ID_MODEL_FROM_DATABASE=at32uc3a3 DFU bootloader
+
+usb:v03EBp2FF3*
+ ID_MODEL_FROM_DATABASE=atmega16u4 DFU bootloader
+
usb:v03EBp2FF4*
ID_MODEL_FROM_DATABASE=atmega32u4 DFU bootloader
+usb:v03EBp2FF6*
+ ID_MODEL_FROM_DATABASE=at32uc3b0/1 DFU bootloader
+
+usb:v03EBp2FF7*
+ ID_MODEL_FROM_DATABASE=at90usb82 DFU bootloader
+
+usb:v03EBp2FF8*
+ ID_MODEL_FROM_DATABASE=at32uc3a0/1 DFU bootloader
+
+usb:v03EBp2FF9*
+ ID_MODEL_FROM_DATABASE=at90usb646/647 DFU bootloader
+
usb:v03EBp2FFA*
ID_MODEL_FROM_DATABASE=at90usb162 DFU bootloader
@@ -695,6 +725,9 @@ usb:v03F0p0D12*
usb:v03F0p0D17*
ID_MODEL_FROM_DATABASE=LaserJet 1012
+usb:v03F0p0D4A*
+ ID_MODEL_FROM_DATABASE=SK-2025 Keyboard
+
usb:v03F0p0E17*
ID_MODEL_FROM_DATABASE=LaserJet 1015
@@ -740,6 +773,9 @@ usb:v03F0p1024*
usb:v03F0p1027*
ID_MODEL_FROM_DATABASE=Virtual keyboard and mouse
+usb:v03F0p102A*
+ ID_MODEL_FROM_DATABASE=LaserJet Professional P 1102w
+
usb:v03F0p1102*
ID_MODEL_FROM_DATABASE=PhotoSmart 240 series
@@ -1176,7 +1212,7 @@ usb:v03F0p2F11*
ID_MODEL_FROM_DATABASE=PSC 1200
usb:v03F0p2F17*
- ID_MODEL_FROM_DATABASE=EWS 2605dn
+ ID_MODEL_FROM_DATABASE=Color LaserJet 2605dn
usb:v03F0p2F24*
ID_MODEL_FROM_DATABASE=LP2475w Monitor Hub
@@ -1229,6 +1265,9 @@ usb:v03F0p3302*
usb:v03F0p3304*
ID_MODEL_FROM_DATABASE=DeskJet 990c
+usb:v03F0p3307*
+ ID_MODEL_FROM_DATABASE=v125w Stick
+
usb:v03F0p3312*
ID_MODEL_FROM_DATABASE=OfficeJet J6410
@@ -1496,6 +1535,9 @@ usb:v03F0p5811*
usb:v03F0p5817*
ID_MODEL_FROM_DATABASE=LaserJet M1319f MFP
+usb:v03F0p581D*
+ ID_MODEL_FROM_DATABASE=lt4112 Gobi 4G Module Network Device
+
usb:v03F0p5911*
ID_MODEL_FROM_DATABASE=PhotoSmart C6180
@@ -3728,6 +3770,9 @@ usb:v041Ep3061*
usb:v041Ep3090*
ID_MODEL_FROM_DATABASE=Sound Blaster Digital Music SX
+usb:v041Ep30D0*
+ ID_MODEL_FROM_DATABASE=Xmod
+
usb:v041Ep30D3*
ID_MODEL_FROM_DATABASE=Sound Blaster Play!
@@ -3752,6 +3797,9 @@ usb:v041Ep3F04*
usb:v041Ep3F07*
ID_MODEL_FROM_DATABASE=E-Mu Xmidi 1x1
+usb:v041Ep3F0E*
+ ID_MODEL_FROM_DATABASE=Xmidi 1x1 Tab
+
usb:v041Ep4003*
ID_MODEL_FROM_DATABASE=VideoBlaster Webcam Go Plus [W9967CF]
@@ -3932,6 +3980,9 @@ usb:v041Ep4088*
usb:v041Ep4095*
ID_MODEL_FROM_DATABASE=Live! Cam Sync HD [VF0770]
+usb:v041Ep4097*
+ ID_MODEL_FROM_DATABASE=Live! Cam Chat HD [VF0700]
+
usb:v041Ep4100*
ID_MODEL_FROM_DATABASE=Nomad Jukebox 2
@@ -4454,9 +4505,18 @@ usb:v0421p0610*
usb:v0421p0661*
ID_MODEL_FROM_DATABASE=Lumia 620/920
+usb:v0421p0662*
+ ID_MODEL_FROM_DATABASE=301 Dual SIM (Mass Storage)
+
+usb:v0421p0663*
+ ID_MODEL_FROM_DATABASE=301 Dual SIM
+
usb:v0421p069A*
ID_MODEL_FROM_DATABASE=130 [RM-1035] (Charging only)
+usb:v0421p06FC*
+ ID_MODEL_FROM_DATABASE=Lumia 640 Phone
+
usb:v0421p0720*
ID_MODEL_FROM_DATABASE=X (RM-980)
@@ -4514,6 +4574,9 @@ usb:v0424*
usb:v0424p0001*
ID_MODEL_FROM_DATABASE=Integrated Hub
+usb:v0424p0140*
+ ID_MODEL_FROM_DATABASE=LPC47M14x hub
+
usb:v0424p0ACD*
ID_MODEL_FROM_DATABASE=Sitecom Internal Multi Memory reader/writer MD-005
@@ -4595,6 +4658,9 @@ usb:v0424p9512*
usb:v0424p9514*
ID_MODEL_FROM_DATABASE=SMC9514 Hub
+usb:v0424p9904*
+ ID_MODEL_FROM_DATABASE=LAN9512/LAN9514 Ethernet 10/100 Adapter (SAL10)
+
usb:v0424pA700*
ID_MODEL_FROM_DATABASE=2 Port Hub
@@ -4709,6 +4775,9 @@ usb:v0431p0100*
usb:v0432*
ID_VENDOR_FROM_DATABASE=Unisys Corp.
+usb:v0432p0031*
+ ID_MODEL_FROM_DATABASE=Document Processor
+
usb:v0433*
ID_VENDOR_FROM_DATABASE=Alps Electric, Inc.
@@ -5270,6 +5339,18 @@ usb:v0446p6782*
usb:v0447*
ID_VENDOR_FROM_DATABASE=Momentum Microsystems
+usb:v0449*
+ ID_VENDOR_FROM_DATABASE=Duta Multi Robotik
+
+usb:v0449p0128*
+ ID_MODEL_FROM_DATABASE=Menengah
+
+usb:v0449p0210*
+ ID_MODEL_FROM_DATABASE=Dasar
+
+usb:v0449p0612*
+ ID_MODEL_FROM_DATABASE=Lanjutan
+
usb:v044A*
ID_VENDOR_FROM_DATABASE=Shamrock Tech. Co., Ltd
@@ -5465,9 +5546,18 @@ usb:v0451p6070*
usb:v0451p625F*
ID_MODEL_FROM_DATABASE=TUSB6250 ATA Bridge
+usb:v0451p8041*
+ ID_MODEL_FROM_DATABASE=Hub
+
usb:v0451p8042*
ID_MODEL_FROM_DATABASE=Hub
+usb:v0451p8043*
+ ID_MODEL_FROM_DATABASE=Hub
+
+usb:v0451p8140*
+ ID_MODEL_FROM_DATABASE=TUSB8041 4-Port Hub
+
usb:v0451p8142*
ID_MODEL_FROM_DATABASE=TUSB8041 4-Port Hub
@@ -6186,7 +6276,7 @@ usb:v045Ep00DD*
ID_MODEL_FROM_DATABASE=Comfort Curve Keyboard 2000 V1.0
usb:v045Ep00E1*
- ID_MODEL_FROM_DATABASE=Wireless Laser Mouse 6000 Reciever
+ ID_MODEL_FROM_DATABASE=Wireless Laser Mouse 6000 Receiver
usb:v045Ep00F4*
ID_MODEL_FROM_DATABASE=LifeCam VX-6000 (SN9C20x + OV9650)
@@ -6210,7 +6300,7 @@ usb:v045Ep0202*
ID_MODEL_FROM_DATABASE=Xbox Controller
usb:v045Ep0280*
- ID_MODEL_FROM_DATABASE=XBox Device
+ ID_MODEL_FROM_DATABASE=Xbox Memory Unit (8MB)
usb:v045Ep0283*
ID_MODEL_FROM_DATABASE=Xbox Communicator
@@ -6276,7 +6366,7 @@ usb:v045Ep02B0*
ID_MODEL_FROM_DATABASE=Xbox NUI Motor
usb:v045Ep02B6*
- ID_MODEL_FROM_DATABASE=Xbox 360 / Bluetooth Wireless Headset
+ ID_MODEL_FROM_DATABASE=Xbox360 Bluetooth Wireless Headset
usb:v045Ep02BE*
ID_MODEL_FROM_DATABASE=Kinect for Windows NUI Audio
@@ -6288,11 +6378,14 @@ usb:v045Ep02C2*
ID_MODEL_FROM_DATABASE=Kinect for Windows NUI Motor
usb:v045Ep02D1*
- ID_MODEL_FROM_DATABASE=XBOX One Controller for Windows
+ ID_MODEL_FROM_DATABASE=Xbox One Controller
usb:v045Ep02D5*
ID_MODEL_FROM_DATABASE=Xbox One Digital TV Tuner
+usb:v045Ep02DD*
+ ID_MODEL_FROM_DATABASE=Xbox One Controller (Covert Forces/Firmware 2015)
+
usb:v045Ep0400*
ID_MODEL_FROM_DATABASE=Windows Powered Pocket PC 2002
@@ -6770,6 +6863,9 @@ usb:v045Ep0797*
usb:v045Ep07A5*
ID_MODEL_FROM_DATABASE=Wireless Receiver 1461C
+usb:v045Ep07CA*
+ ID_MODEL_FROM_DATABASE=Surface Pro 3 Docking Station Audio Device
+
usb:v045Ep07F8*
ID_MODEL_FROM_DATABASE=Wired Keyboard 600 (model 1576)
@@ -7469,6 +7565,12 @@ usb:v046Dp0A0C*
usb:v046Dp0A13*
ID_MODEL_FROM_DATABASE=Z-5 Speakers
+usb:v046Dp0A14*
+ ID_MODEL_FROM_DATABASE=USB Headset
+
+usb:v046Dp0A15*
+ ID_MODEL_FROM_DATABASE=G35 Headset
+
usb:v046Dp0A17*
ID_MODEL_FROM_DATABASE=G330 Headset
@@ -7706,11 +7808,17 @@ usb:v046DpC077*
usb:v046DpC07C*
ID_MODEL_FROM_DATABASE=M-R0017 [G700s Rechargeable Gaming Mouse]
+usb:v046DpC07D*
+ ID_MODEL_FROM_DATABASE=G502 Mouse
+
+usb:v046DpC07E*
+ ID_MODEL_FROM_DATABASE=G402 Gaming Mouse
+
usb:v046DpC101*
ID_MODEL_FROM_DATABASE=UltraX Media Remote
usb:v046DpC110*
- ID_MODEL_FROM_DATABASE=Harmony 785/885 Remote
+ ID_MODEL_FROM_DATABASE=Harmony 785/880/885 Remote
usb:v046DpC111*
ID_MODEL_FROM_DATABASE=Harmony 525 Remote
@@ -8999,9 +9107,15 @@ usb:v0480pA009*
usb:v0480pA00D*
ID_MODEL_FROM_DATABASE=STOR.E BASICS 500GB
+usb:v0480pA100*
+ ID_MODEL_FROM_DATABASE=Canvio Alu 2TB 2.5" Black External Disk Model HDTH320EK3CA
+
usb:v0480pA202*
ID_MODEL_FROM_DATABASE=Canvio Basics HDD
+usb:v0480pA208*
+ ID_MODEL_FROM_DATABASE=Canvio Basics 2TB USB 3.0 Portable Hard Drive
+
usb:v0480pB001*
ID_MODEL_FROM_DATABASE=Stor.E Partner
@@ -9026,6 +9140,9 @@ usb:v0482p000E*
usb:v0482p000F*
ID_MODEL_FROM_DATABASE=FS-1920 Mono Printer
+usb:v0482p0015*
+ ID_MODEL_FROM_DATABASE=FS-1030D printer
+
usb:v0482p0100*
ID_MODEL_FROM_DATABASE=Finecam S3x
@@ -9083,11 +9200,8 @@ usb:v0483p2018*
usb:v0483p2302*
ID_MODEL_FROM_DATABASE=Portable Flash Device (PFD)
-usb:v0483p347B*
- ID_MODEL_FROM_DATABASE=ST-LINK/V2-1
-
usb:v0483p3744*
- ID_MODEL_FROM_DATABASE=STLINK Pseudo disk
+ ID_MODEL_FROM_DATABASE=ST-LINK/V1
usb:v0483p3747*
ID_MODEL_FROM_DATABASE=ST Micro Connect Lite
@@ -9096,7 +9210,7 @@ usb:v0483p3748*
ID_MODEL_FROM_DATABASE=ST-LINK/V2
usb:v0483p374B*
- ID_MODEL_FROM_DATABASE=ST-LINK/V2.1 (Nucleo-F103RB)
+ ID_MODEL_FROM_DATABASE=ST-LINK/V2.1
usb:v0483p4810*
ID_MODEL_FROM_DATABASE=ISDN adapter
@@ -10217,6 +10331,9 @@ usb:v04A9p10C2*
usb:v04A9p10C4*
ID_MODEL_FROM_DATABASE=Pixma iP4500 Printer
+usb:v04A9p10C9*
+ ID_MODEL_FROM_DATABASE=PIXIMA iP4600 Printer
+
usb:v04A9p1404*
ID_MODEL_FROM_DATABASE=W6400PG
@@ -10361,6 +10478,9 @@ usb:v04A9p174D*
usb:v04A9p176D*
ID_MODEL_FROM_DATABASE=PIXMA MG2550
+usb:v04A9p178D*
+ ID_MODEL_FROM_DATABASE=PIXMA MG6853
+
usb:v04A9p1900*
ID_MODEL_FROM_DATABASE=CanoScan LiDE 90
@@ -10391,6 +10511,9 @@ usb:v04A9p190D*
usb:v04A9p190E*
ID_MODEL_FROM_DATABASE=CanoScan LiDE 120
+usb:v04A9p190F*
+ ID_MODEL_FROM_DATABASE=CanoScan LiDE 220
+
usb:v04A9p2200*
ID_MODEL_FROM_DATABASE=CanoScan LiDE 25
@@ -10595,6 +10718,9 @@ usb:v04A9p2651*
usb:v04A9p2655*
ID_MODEL_FROM_DATABASE=FP-L170/MF350/L380/L398
+usb:v04A9p2656*
+ ID_MODEL_FROM_DATABASE=iR1510-1670 CAPT Printer
+
usb:v04A9p2659*
ID_MODEL_FROM_DATABASE=MF8100
@@ -11594,6 +11720,9 @@ usb:v04A9p329B*
usb:v04A9p329C*
ID_MODEL_FROM_DATABASE=PowerShot SX400 IS
+usb:v04A9p329D*
+ ID_MODEL_FROM_DATABASE=PowerShot G7 X
+
usb:v04A9p329F*
ID_MODEL_FROM_DATABASE=PowerShot SX530 HS
@@ -11606,6 +11735,12 @@ usb:v04A9p32AA*
usb:v04A9p32AC*
ID_MODEL_FROM_DATABASE=PowerShot ELPH 170 IS / IXUS 170
+usb:v04A9p32AD*
+ ID_MODEL_FROM_DATABASE=PowerShot SX410 IS
+
+usb:v04A9p32C1*
+ ID_MODEL_FROM_DATABASE=PowerShot ELPH 180 / IXUS 175
+
usb:v04AA*
ID_VENDOR_FROM_DATABASE=DaeWoo Telecom, Ltd
@@ -12077,6 +12212,9 @@ usb:v04B4pF111*
usb:v04B4pF115*
ID_MODEL_FROM_DATABASE=PSoC FirstTouch Programmer
+usb:v04B4pF232*
+ ID_MODEL_FROM_DATABASE=Mono embedded computer
+
usb:v04B4pFD13*
ID_MODEL_FROM_DATABASE=Programmable power socket
@@ -13010,6 +13148,9 @@ usb:v04CAp2004*
usb:v04CAp2006*
ID_MODEL_FROM_DATABASE=Broadcom BCM43142A0 Bluetooth Device
+usb:v04CAp3005*
+ ID_MODEL_FROM_DATABASE=Atheros Bluetooth
+
usb:v04CAp300B*
ID_MODEL_FROM_DATABASE=Atheros AR3012 Bluetooth
@@ -13020,7 +13161,7 @@ usb:v04CAp300F*
ID_MODEL_FROM_DATABASE=Atheros AR3012 Bluetooth
usb:v04CAp3014*
- ID_MODEL_FROM_DATABASE=Qualcoom Atheros Bluetooth
+ ID_MODEL_FROM_DATABASE=Qualcomm Atheros Bluetooth
usb:v04CAp7025*
ID_MODEL_FROM_DATABASE=HP HD Webcam
@@ -13556,6 +13697,9 @@ usb:v04D9p1603*
usb:v04D9p1702*
ID_MODEL_FROM_DATABASE=Keyboard LKS02
+usb:v04D9p1818*
+ ID_MODEL_FROM_DATABASE=Keyboard [Diatec Filco Majestouch 2]
+
usb:v04D9p2011*
ID_MODEL_FROM_DATABASE=Keyboard [Diatec Filco Majestouch 1]
@@ -13577,6 +13721,9 @@ usb:v04D9p2832*
usb:v04D9p2834*
ID_MODEL_FROM_DATABASE=HT82A834R Audio MCU
+usb:v04D9pA01C*
+ ID_MODEL_FROM_DATABASE=wireless multimedia keyboard with trackball [Trust ADURA 17911]
+
usb:v04D9pA055*
ID_MODEL_FROM_DATABASE=Keyboard
@@ -14564,6 +14711,9 @@ usb:v04E8p61B5*
usb:v04E8p61B6*
ID_MODEL_FROM_DATABASE=M3 Portable Hard Drive 1TB
+usb:v04E8p61F3*
+ ID_MODEL_FROM_DATABASE=MU-PT500B [T3 500GB USB SSD]
+
usb:v04E8p6601*
ID_MODEL_FROM_DATABASE=Mobile Phone
@@ -14858,6 +15008,9 @@ usb:v04F2p0418*
usb:v04F2p0618*
ID_MODEL_FROM_DATABASE=RG-0618U Wireless HID Receiver & KG-0609 Wireless Keyboard with Touchpad
+usb:v04F2p0718*
+ ID_MODEL_FROM_DATABASE=wired mouse
+
usb:v04F2p0760*
ID_MODEL_FROM_DATABASE=Acer KU-0760 Keyboard
@@ -16620,13 +16773,16 @@ 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 P-touch Label Printer
usb:v04F9p2027*
- ID_MODEL_FROM_DATABASE=QL-560 P-Touch Label Printer
+ ID_MODEL_FROM_DATABASE=QL-560 P-touch Label Printer
+
+usb:v04F9p2028*
+ ID_MODEL_FROM_DATABASE=QL-570 P-touch Label Printer
usb:v04F9p202B*
- ID_MODEL_FROM_DATABASE=PT-7600 P-Touch Label Printer
+ ID_MODEL_FROM_DATABASE=PT-7600 P-touch Label Printer
usb:v04F9p2100*
ID_MODEL_FROM_DATABASE=Card Reader Writer
@@ -16703,6 +16859,9 @@ usb:v04FCp0561*
usb:v04FCp05D8*
ID_MODEL_FROM_DATABASE=Wireless keyboard/mouse
+usb:v04FCp05DA*
+ ID_MODEL_FROM_DATABASE=SPEEDLINK SNAPPY Wireless Mouse Nano
+
usb:v04FCp0C15*
ID_MODEL_FROM_DATABASE=SPIF215A SATA bridge
@@ -17762,6 +17921,9 @@ usb:v0547p2810*
usb:v0547p4D90*
ID_MODEL_FROM_DATABASE=AmScope MD1900 camera
+usb:v0547p6510*
+ ID_MODEL_FROM_DATABASE=Touptek UCMOS05100KPA
+
usb:v0547p7000*
ID_MODEL_FROM_DATABASE=PowerSpec MCE460 Front Panel LED Display
@@ -19026,10 +19188,10 @@ usb:v056Ap00C4*
ID_MODEL_FROM_DATABASE=DTF-720
usb:v056Ap00C5*
- ID_MODEL_FROM_DATABASE=DTZ-20WSX [Cintiq 20WSX]
+ ID_MODEL_FROM_DATABASE=DTZ-2000W [Cintiq 20WSX]
usb:v056Ap00C6*
- ID_MODEL_FROM_DATABASE=DTZ-12WX [Cintiq 12WX]
+ ID_MODEL_FROM_DATABASE=DTZ-1200W [Cintiq 12WX]
usb:v056Ap00C7*
ID_MODEL_FROM_DATABASE=DTU-1931
@@ -19145,6 +19307,9 @@ usb:v056Ap0116*
usb:v056Ap012C*
ID_MODEL_FROM_DATABASE=TPC12C
+usb:v056Ap0221*
+ ID_MODEL_FROM_DATABASE=MDP-123 [Inkling]
+
usb:v056Ap0300*
ID_MODEL_FROM_DATABASE=CTL-471 [Bamboo Splash, One by Wacom (S)]
@@ -19178,6 +19343,9 @@ usb:v056Ap0315*
usb:v056Ap0317*
ID_MODEL_FROM_DATABASE=PTH-851 [Intuos pro (L)]
+usb:v056Ap0318*
+ ID_MODEL_FROM_DATABASE=CTH-301 [Bamboo]
+
usb:v056Ap032F*
ID_MODEL_FROM_DATABASE=DTU-1031X
@@ -20778,7 +20946,7 @@ usb:v058Fp9510*
ID_MODEL_FROM_DATABASE=ChunghwaTL USB02 Smartcard Reader
usb:v058Fp9520*
- ID_MODEL_FROM_DATABASE=EMV Certified Smart Card Reader
+ ID_MODEL_FROM_DATABASE=Watchdata W 1981
usb:v058Fp9540*
ID_MODEL_FROM_DATABASE=AU9540 Smartcard Reader
@@ -20972,6 +21140,9 @@ usb:v059Bp0251*
usb:v059Bp0252*
ID_MODEL_FROM_DATABASE=Optical
+usb:v059Bp0275*
+ ID_MODEL_FROM_DATABASE=ST332082 0A
+
usb:v059Bp0278*
ID_MODEL_FROM_DATABASE=LDHD-UPS [Professional Desktop Hard Drive eSATA / USB2.0]
@@ -21044,6 +21215,9 @@ usb:v059Fp100C*
usb:v059Fp1010*
ID_MODEL_FROM_DATABASE=Desktop Hard Drive
+usb:v059Fp1016*
+ ID_MODEL_FROM_DATABASE=Desktop Hard Drive
+
usb:v059Fp1018*
ID_MODEL_FROM_DATABASE=Desktop Hard Drive
@@ -21068,6 +21242,9 @@ usb:v059Fp1052*
usb:v059Fp1064*
ID_MODEL_FROM_DATABASE=Rugged 16 and 32 GB
+usb:v059Fp106D*
+ ID_MODEL_FROM_DATABASE=Porsche Design Mobile Drive
+
usb:v059Fp106E*
ID_MODEL_FROM_DATABASE=Porsche Design Desktop Drive
@@ -21437,9 +21614,18 @@ usb:v05ACp0253*
usb:v05ACp0254*
ID_MODEL_FROM_DATABASE=Internal Keyboard/Trackpad (JIS)
+usb:v05ACp0259*
+ ID_MODEL_FROM_DATABASE=Internal Keyboard/Trackpad
+
usb:v05ACp0263*
ID_MODEL_FROM_DATABASE=Apple Internal Keyboard / Trackpad (MacBook Retina)
+usb:v05ACp0267*
+ ID_MODEL_FROM_DATABASE=Magic Keyboard A1644
+
+usb:v05ACp0273*
+ ID_MODEL_FROM_DATABASE=Internal Keyboard/Trackpad (ISO)
+
usb:v05ACp0301*
ID_MODEL_FROM_DATABASE=USB Mouse [Mitsumi, M4848]
@@ -21740,6 +21926,9 @@ usb:v05ACp8286*
usb:v05ACp828C*
ID_MODEL_FROM_DATABASE=Bluetooth Host Controller
+usb:v05ACp8290*
+ ID_MODEL_FROM_DATABASE=Bluetooth Host Controller
+
usb:v05ACp8300*
ID_MODEL_FROM_DATABASE=Built-in iSight (no firmware loaded)
@@ -21875,6 +22064,9 @@ usb:v05B8*
usb:v05B8p3002*
ID_MODEL_FROM_DATABASE=Scroll Mouse
+usb:v05B8p3223*
+ ID_MODEL_FROM_DATABASE=ISY Wireless Presenter
+
usb:v05B9*
ID_VENDOR_FROM_DATABASE=Philips Research Laboratories
@@ -22067,6 +22259,9 @@ usb:v05C8*
usb:v05C8p0103*
ID_MODEL_FROM_DATABASE=FO13FF-65 PC-CAM
+usb:v05C8p010B*
+ ID_MODEL_FROM_DATABASE=Webcam (UVC)
+
usb:v05C8p021A*
ID_MODEL_FROM_DATABASE=HP Webcam
@@ -22892,6 +23087,9 @@ usb:v05DCpA701*
usb:v05DCpA731*
ID_MODEL_FROM_DATABASE=JumpDrive FireFly
+usb:v05DCpA762*
+ ID_MODEL_FROM_DATABASE=JumpDrive FireFly
+
usb:v05DCpA768*
ID_MODEL_FROM_DATABASE=JumpDrive Retrax
@@ -22922,9 +23120,15 @@ usb:v05DCpB047*
usb:v05DCpBA02*
ID_MODEL_FROM_DATABASE=Workflow CFR1
+usb:v05DCpBA0A*
+ ID_MODEL_FROM_DATABASE=Workflow DD512
+
usb:v05DCpC753*
ID_MODEL_FROM_DATABASE=JumpDrive TwistTurn
+usb:v05DCpC75C*
+ ID_MODEL_FROM_DATABASE=JumpDrive V10
+
usb:v05DD*
ID_VENDOR_FROM_DATABASE=Delta Electronics, Inc.
@@ -23075,6 +23279,9 @@ usb:v05E3p0608*
usb:v05E3p0610*
ID_MODEL_FROM_DATABASE=4-port hub
+usb:v05E3p0612*
+ ID_MODEL_FROM_DATABASE=Hub
+
usb:v05E3p0616*
ID_MODEL_FROM_DATABASE=hub
@@ -23177,6 +23384,9 @@ usb:v05E3p0743*
usb:v05E3p0745*
ID_MODEL_FROM_DATABASE=Logilink CR0012
+usb:v05E3p0751*
+ ID_MODEL_FROM_DATABASE=microSD Card Reader
+
usb:v05E3p0760*
ID_MODEL_FROM_DATABASE=USB 2.0 Card Reader/Writer
@@ -23504,6 +23714,9 @@ usb:v060Bp0001*
usb:v060Bp0230*
ID_MODEL_FROM_DATABASE=KSK-8003 UX Keyboard
+usb:v060Bp0540*
+ ID_MODEL_FROM_DATABASE=DeltaCo TB-106U Keyboard
+
usb:v060Bp1006*
ID_MODEL_FROM_DATABASE=Japanese Keyboard - 260U
@@ -23720,6 +23933,9 @@ usb:v062Ap0201*
usb:v062Ap0252*
ID_MODEL_FROM_DATABASE=Emerge Uni-retractable Laser Mouse
+usb:v062Ap2410*
+ ID_MODEL_FROM_DATABASE=Wireless PS3 gamepad
+
usb:v062Ap3286*
ID_MODEL_FROM_DATABASE=Nano Receiver [Sandstrom Laser Mouse SMWLL11]
@@ -23966,6 +24182,9 @@ usb:v064EpC335*
usb:v064EpD101*
ID_MODEL_FROM_DATABASE=Acer CrystalEye Webcam
+usb:v064EpD213*
+ ID_MODEL_FROM_DATABASE=UVC HD Webcam
+
usb:v064EpD217*
ID_MODEL_FROM_DATABASE=HP TrueVision HD
@@ -23978,6 +24197,9 @@ usb:v064EpE203*
usb:v064EpE258*
ID_MODEL_FROM_DATABASE=HP TrueVision HD Integrated Webcam
+usb:v064EpE263*
+ ID_MODEL_FROM_DATABASE=HP TrueVision HD Integrated Webcam
+
usb:v064EpF102*
ID_MODEL_FROM_DATABASE=Lenovo Integrated Webcam [R5U877]
@@ -24650,6 +24872,9 @@ usb:v067BpAAA0*
usb:v067BpAAA2*
ID_MODEL_FROM_DATABASE=PL2303 Serial Adapter (IODATA USB-RSAQ3)
+usb:v067BpAAA3*
+ ID_MODEL_FROM_DATABASE=PL2303x Serial Adapter
+
usb:v067C*
ID_VENDOR_FROM_DATABASE=Efficient Networks, Inc.
@@ -24986,6 +25211,12 @@ usb:v0694p0001*
usb:v0694p0002*
ID_MODEL_FROM_DATABASE=Mindstorms NXT
+usb:v0694p0005*
+ ID_MODEL_FROM_DATABASE=Mindstorms EV3
+
+usb:v0694p0006*
+ ID_MODEL_FROM_DATABASE=Mindstorms EV3 Firmware Update
+
usb:v0698*
ID_VENDOR_FROM_DATABASE=Chuntex (CTX)
@@ -25004,6 +25235,9 @@ usb:v0699*
usb:v0699p0347*
ID_MODEL_FROM_DATABASE=AFG 3022B
+usb:v0699p036A*
+ ID_MODEL_FROM_DATABASE=TDS 2024B
+
usb:v069A*
ID_VENDOR_FROM_DATABASE=Askey Computer Corp.
@@ -25847,6 +26081,9 @@ usb:v06D3p0394*
usb:v06D3p03A1*
ID_MODEL_FROM_DATABASE=CP9550D/DW Port
+usb:v06D3p03A5*
+ ID_MODEL_FROM_DATABASE=CP9550DW-S
+
usb:v06D3p3B30*
ID_MODEL_FROM_DATABASE=CP-D70DW / CP-D707DW
@@ -26502,7 +26739,7 @@ usb:v0714*
ID_VENDOR_FROM_DATABASE=NewMotion, Inc.
usb:v0714p0003*
- ID_MODEL_FROM_DATABASE=ADB to USB convertor
+ ID_MODEL_FROM_DATABASE=ADB converter
usb:v0717*
ID_VENDOR_FROM_DATABASE=ZNK Corp.
@@ -26576,6 +26813,9 @@ usb:v071Bp0002*
usb:v071Bp0101*
ID_MODEL_FROM_DATABASE=Audio4-USB DSP Data Acquisition Unit
+usb:v071Bp0184*
+ ID_MODEL_FROM_DATABASE=Archos 2 8GB EM184RB
+
usb:v071Bp0201*
ID_MODEL_FROM_DATABASE=Audio4-5410 DSP Data Acquisition Unit
@@ -26820,10 +27060,10 @@ usb:v0733p0780*
ID_MODEL_FROM_DATABASE=Smart Cam Deluxe(composite)
usb:v0733p1310*
- ID_MODEL_FROM_DATABASE=Epsilon 1.3/Jenoptik JD C1.3/UMAX AstraPix 470
+ ID_MODEL_FROM_DATABASE=Epsilon 1.3/Jenoptik JD C1.3/UMAX AstraPix 470 (mass storage mode)
usb:v0733p1311*
- ID_MODEL_FROM_DATABASE=Digital Dream Epsilon 1.3
+ ID_MODEL_FROM_DATABASE=Epsilon 1.3/Jenoptik JD C1.3/UMAX AstraPix 470 (PC Cam mode)
usb:v0733p1314*
ID_MODEL_FROM_DATABASE=Mercury 2.1MEG Deluxe Classic Cam
@@ -27126,7 +27366,7 @@ usb:v0763p1021*
ID_MODEL_FROM_DATABASE=MidiSport 4x4
usb:v0763p1030*
- ID_MODEL_FROM_DATABASE=Midisport 8x8
+ ID_MODEL_FROM_DATABASE=M-Audio MIDISPORT 8x8
usb:v0763p1031*
ID_MODEL_FROM_DATABASE=MidiSport 8x8/s Loader
@@ -27201,7 +27441,7 @@ usb:v0763p2024*
ID_MODEL_FROM_DATABASE=M-Audio Fast Track MKII
usb:v0763p2080*
- ID_MODEL_FROM_DATABASE=M-Audio RunTime DFU
+ ID_MODEL_FROM_DATABASE=M-Audio Fast Track Ultra
usb:v0763p2081*
ID_MODEL_FROM_DATABASE=M-Audio RunTime DFU / Fast Track Ultra 8R
@@ -27248,6 +27488,9 @@ usb:v0765*
usb:v0765p5001*
ID_MODEL_FROM_DATABASE=Huey PRO Colorimeter
+usb:v0765p5010*
+ ID_MODEL_FROM_DATABASE=X-Rite Pantone Color Sensor
+
usb:v0765p5020*
ID_MODEL_FROM_DATABASE=i1 Display Pro
@@ -27542,6 +27785,9 @@ usb:v0781p5530*
usb:v0781p5567*
ID_MODEL_FROM_DATABASE=Cruzer Blade
+usb:v0781p556B*
+ ID_MODEL_FROM_DATABASE=Cruzer Edge
+
usb:v0781p556C*
ID_MODEL_FROM_DATABASE=Ultra
@@ -27551,6 +27797,9 @@ usb:v0781p556D*
usb:v0781p5571*
ID_MODEL_FROM_DATABASE=Cruzer Fit
+usb:v0781p5575*
+ ID_MODEL_FROM_DATABASE=Cruzer Glide
+
usb:v0781p5576*
ID_MODEL_FROM_DATABASE=Cruzer Facet
@@ -27743,6 +27992,9 @@ usb:v0781pB2B3*
usb:v0781pB4B5*
ID_MODEL_FROM_DATABASE=SDDR-89 V4 ImageMate 12-in-1 Reader
+usb:v0781pB6BA*
+ ID_MODEL_FROM_DATABASE=CF SDDR-289
+
usb:v0782*
ID_VENDOR_FROM_DATABASE=Trackerball
@@ -29045,6 +29297,9 @@ usb:v07CFp4500*
usb:v07CFp6101*
ID_MODEL_FROM_DATABASE=fx-9750gII
+usb:v07CFp6102*
+ ID_MODEL_FROM_DATABASE=fx-CP400
+
usb:v07CFp6801*
ID_MODEL_FROM_DATABASE=PL-40R
@@ -29258,6 +29513,12 @@ usb:v07DEp2820*
usb:v07DF*
ID_VENDOR_FROM_DATABASE=David Electronics Co., Ltd
+usb:v07E0*
+ ID_VENDOR_FROM_DATABASE=NCP engineering GmbH
+
+usb:v07E0p4742*
+ ID_MODEL_FROM_DATABASE=VPN GovNet Box
+
usb:v07E1*
ID_VENDOR_FROM_DATABASE=Ambient Technologies, Inc.
@@ -29363,6 +29624,12 @@ usb:v07FApA904*
usb:v07FApA905*
ID_MODEL_FROM_DATABASE=BeWAN ADSL ST
+usb:v07FC*
+ ID_VENDOR_FROM_DATABASE=Thomann
+
+usb:v07FCp1113*
+ ID_MODEL_FROM_DATABASE=SWISSONIC EasyKeys61 Midikeyboard
+
usb:v07FD*
ID_VENDOR_FROM_DATABASE=Mark of the Unicorn
@@ -29370,7 +29637,7 @@ usb:v07FDp0000*
ID_MODEL_FROM_DATABASE=FastLane MIDI Interface
usb:v07FDp0001*
- ID_MODEL_FROM_DATABASE=FastLane Quad MIDI Interface
+ ID_MODEL_FROM_DATABASE=MIDI Interface
usb:v07FDp0002*
ID_MODEL_FROM_DATABASE=MOTU Audio for 64 bit
@@ -29975,6 +30242,9 @@ usb:v0846p9011*
usb:v0846p9012*
ID_MODEL_FROM_DATABASE=WNDA4100 802.11abgn 3x3:3 [Ralink RT3573]
+usb:v0846p9014*
+ ID_MODEL_FROM_DATABASE=WNDA3100v3 802.11abgn 2x2:2 [MediaTek MT7632U]
+
usb:v0846p9018*
ID_MODEL_FROM_DATABASE=WNDA3200 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]
@@ -30710,6 +30980,9 @@ usb:v08CAp2016*
usb:v08CAp2018*
ID_MODEL_FROM_DATABASE=Pencam SD 2M
+usb:v08CAp2019*
+ ID_MODEL_FROM_DATABASE=Pencam SD 2M (mass storage mode)
+
usb:v08CAp2020*
ID_MODEL_FROM_DATABASE=Slim 3000F
@@ -31046,6 +31319,9 @@ usb:v08EE*
usb:v08F0*
ID_VENDOR_FROM_DATABASE=Corex Technologies
+usb:v08F0p0005*
+ ID_MODEL_FROM_DATABASE=CardScan 800c
+
usb:v08F1*
ID_VENDOR_FROM_DATABASE=CTI Electronics Corp.
@@ -31646,6 +31922,9 @@ usb:v091Ep253C*
usb:v091Ep255B*
ID_MODEL_FROM_DATABASE=Nuvi 2505LM
+usb:v091Ep26A1*
+ ID_MODEL_FROM_DATABASE=Nuvi 55
+
usb:v0920*
ID_VENDOR_FROM_DATABASE=Echelon Co.
@@ -31697,6 +31976,9 @@ usb:v0924p23DD*
usb:v0924p3CE8*
ID_MODEL_FROM_DATABASE=Phaser 3428 Printer
+usb:v0924p3CEA*
+ ID_MODEL_FROM_DATABASE=Phaser 3125
+
usb:v0924p3D5B*
ID_MODEL_FROM_DATABASE=Phaser 6115MFP TWAIN Scanner
@@ -31859,6 +32141,9 @@ usb:v0930p070B*
usb:v0930p0A07*
ID_MODEL_FROM_DATABASE=WLM-10U1 802.11abgn Wireless Adapter [Ralink RT3572]
+usb:v0930p0A08*
+ ID_MODEL_FROM_DATABASE=WLM-20U2/GN-1080 802.11abgn Wireless Adapter [Atheros AR7010+AR9280]
+
usb:v0930p0A13*
ID_MODEL_FROM_DATABASE=AX88179 Gigabit Ethernet [Toshiba]
@@ -32016,7 +32301,7 @@ usb:v0930p6540*
ID_MODEL_FROM_DATABASE=TransMemory Flash Memory
usb:v0930p6544*
- ID_MODEL_FROM_DATABASE=TransMemory-Mini / Kingston DataTraveler 2.0 Stick (2GB)
+ ID_MODEL_FROM_DATABASE=TransMemory-Mini / Kingston DataTraveler 2.0 Stick
usb:v0930p6545*
ID_MODEL_FROM_DATABASE=Kingston DataTraveler 102/2.0 / HEMA Flash Drive 2 GB / PNY Attache 4GB Stick
@@ -32294,6 +32579,9 @@ usb:v0951p1606*
usb:v0951p1607*
ID_MODEL_FROM_DATABASE=DataTraveler 100
+usb:v0951p160B*
+ ID_MODEL_FROM_DATABASE=DataTraveler 2.0 (2GB)
+
usb:v0951p160D*
ID_MODEL_FROM_DATABASE=DataTraveler Vault Privacy
@@ -32339,11 +32627,14 @@ usb:v0951p1653*
usb:v0951p1656*
ID_MODEL_FROM_DATABASE=DataTraveler Ultimate G2
+usb:v0951p1660*
+ ID_MODEL_FROM_DATABASE=Data Traveller 108
+
usb:v0951p1665*
ID_MODEL_FROM_DATABASE=Digital DataTraveler SE9 64GB
usb:v0951p1666*
- ID_MODEL_FROM_DATABASE=DataTraveler G4
+ ID_MODEL_FROM_DATABASE=DataTraveler 100 G3/G4/SE9 G2
usb:v0951p1689*
ID_MODEL_FROM_DATABASE=DataTraveler SE9
@@ -46148,9 +46439,6 @@ usb:v1519*
usb:v1519p0020*
ID_MODEL_FROM_DATABASE=HSIC Device
-usb:v1519p0443*
- ID_MODEL_FROM_DATABASE=Telit LN930
-
usb:v1520*
ID_VENDOR_FROM_DATABASE=Bitwire Corp.
@@ -50120,6 +50408,12 @@ usb:v1B1Cp1A0A*
usb:v1B1Cp1A90*
ID_MODEL_FROM_DATABASE=Flash Voyager GT
+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:v1B20*
ID_VENDOR_FROM_DATABASE=MStar Semiconductor, Inc.
@@ -51014,15 +51308,99 @@ usb:v1D4Dp000E*
usb:v1D50*
ID_VENDOR_FROM_DATABASE=OpenMoko, Inc.
+usb:v1D50p1DB5*
+ ID_MODEL_FROM_DATABASE=IDBG DFU
+
+usb:v1D50p1DB6*
+ ID_MODEL_FROM_DATABASE=IDBG
+
+usb:v1D50p5117*
+ ID_MODEL_FROM_DATABASE=Neo1973/FreeRunner kernel usbnet (g_ether, CDC Ethernet) Mode
+
+usb:v1D50p5118*
+ ID_MODEL_FROM_DATABASE=Debug Board (FT2232D) for Neo1973/FreeRunner
+
usb:v1D50p5119*
ID_MODEL_FROM_DATABASE=GTA01/GTA02 U-Boot Bootloader
+usb:v1D50p511A*
+ ID_MODEL_FROM_DATABASE=HXD8 u-boot usbtty CDC ACM Mode
+
+usb:v1D50p511B*
+ ID_MODEL_FROM_DATABASE=SMDK2440 u-boot usbtty CDC ACM mode
+
+usb:v1D50p511C*
+ ID_MODEL_FROM_DATABASE=SMDK2443 u-boot usbtty CDC ACM mode
+
+usb:v1D50p511D*
+ ID_MODEL_FROM_DATABASE=QT2410 u-boot usbtty CDC ACM mode
+
+usb:v1D50p5120*
+ ID_MODEL_FROM_DATABASE=Neo1973/FreeRunner u-boot generic serial mode
+
+usb:v1D50p5121*
+ ID_MODEL_FROM_DATABASE=Neo1973/FreeRunner kernel mass storage (g_storage) mode
+
+usb:v1D50p5122*
+ ID_MODEL_FROM_DATABASE=Neo1973/FreeRunner kernel usbnet (g_ether, RNDIS) mode
+
+usb:v1D50p5123*
+ ID_MODEL_FROM_DATABASE=Neo1973/FreeRunner internal Bluetooth CSR4 module
+
+usb:v1D50p5124*
+ ID_MODEL_FROM_DATABASE=Neo1973/FreeRunner Bluetooth Device ID service
+
+usb:v1D50p6000*
+ ID_MODEL_FROM_DATABASE=Ubertooth Zero
+
+usb:v1D50p6001*
+ ID_MODEL_FROM_DATABASE=Ubertooth Zero DFU
+
+usb:v1D50p6002*
+ ID_MODEL_FROM_DATABASE=Ubertooth One
+
+usb:v1D50p6003*
+ ID_MODEL_FROM_DATABASE=Ubertooth One DFU
+
+usb:v1D50p6004*
+ ID_MODEL_FROM_DATABASE=LeoLipo
+
+usb:v1D50p6005*
+ ID_MODEL_FROM_DATABASE=LED Flower S
+
+usb:v1D50p6006*
+ ID_MODEL_FROM_DATABASE=LED Cube
+
+usb:v1D50p6007*
+ ID_MODEL_FROM_DATABASE=LED Flower
+
+usb:v1D50p6008*
+ ID_MODEL_FROM_DATABASE=Kisbee 802.15.4 transceiver
+
+usb:v1D50p6009*
+ ID_MODEL_FROM_DATABASE=Adjacent Reality Tracker
+
+usb:v1D50p6028*
+ ID_MODEL_FROM_DATABASE=Teensy 2.0 Development Board [ErgoDox Keyboard]
+
usb:v1D50p602B*
ID_MODEL_FROM_DATABASE=FPGALink
+usb:v1D50p604B*
+ ID_MODEL_FROM_DATABASE=HackRF Jawbreaker Software-Defined Radio
+
usb:v1D50p6053*
ID_MODEL_FROM_DATABASE=Darkgame Controller
+usb:v1D50p6089*
+ ID_MODEL_FROM_DATABASE=Great Scott Gadgets HackRF One
+
+usb:v1D50p60A1*
+ ID_MODEL_FROM_DATABASE=Airspy
+
+usb:v1D50pCC15*
+ ID_MODEL_FROM_DATABASE=CCCAMP2015 rad1o badge
+
usb:v1D57*
ID_VENDOR_FROM_DATABASE=Xenta
diff --git a/man/bootctl.xml b/man/bootctl.xml
index 6e835c037f..e2575a4751 100644
--- a/man/bootctl.xml
+++ b/man/bootctl.xml
@@ -47,16 +47,16 @@
<refsynopsisdiv>
<cmdsynopsis>
- <command>bootctl <arg choice="opt" rep="repeat">OPTIONS</arg>status</command>
+ <command>bootctl <arg choice="opt" rep="repeat">OPTIONS</arg> status</command>
</cmdsynopsis>
<cmdsynopsis>
- <command>bootctl <arg choice="opt" rep="repeat">OPTIONS</arg>update</command>
+ <command>bootctl <arg choice="opt" rep="repeat">OPTIONS</arg> update</command>
</cmdsynopsis>
<cmdsynopsis>
- <command>bootctl <arg choice="opt" rep="repeat">OPTIONS</arg>install</command>
+ <command>bootctl <arg choice="opt" rep="repeat">OPTIONS</arg> install</command>
</cmdsynopsis>
<cmdsynopsis>
- <command>bootctl <arg choice="opt" rep="repeat">OPTIONS</arg>remove</command>
+ <command>bootctl <arg choice="opt" rep="repeat">OPTIONS</arg> remove</command>
</cmdsynopsis>
</refsynopsisdiv>
@@ -71,19 +71,14 @@
currently installed versions of the boot loader binaries and
all current EFI boot variables.</para>
- <para><command>bootctl update</command> updates all installed
- versions of systemd-boot, if the current version is newer than the
- version installed in the EFI system partition. This also includes
- the EFI default/fallback loader at /EFI/BOOT/BOOT*.EFI. A
- systemd-boot entry in the EFI boot variables is created if there
- is no current entry. The created entry will be added to the end of
- the boot order list.</para>
+ <para><command>bootctl update</command> updates all installed versions of systemd-boot, if the current version is
+ newer than the version installed in the EFI system partition. This also includes the EFI default/fallback loader at
+ <filename>/EFI/BOOT/BOOT*.EFI</filename>. A systemd-boot entry in the EFI boot variables is created if there is no
+ current entry. The created entry will be added to the end of the boot order list.</para>
- <para><command>bootctl install</command> installs systemd-boot into
- the EFI system partition. A copy of systemd-boot will be stored as
- the EFI default/fallback loader at /EFI/BOOT/BOOT*.EFI. A systemd-boot
- entry in the EFI boot variables is created and added to the top
- of the boot order list.</para>
+ <para><command>bootctl install</command> installs systemd-boot into the EFI system partition. A copy of
+ systemd-boot will be stored as the EFI default/fallback loader at <filename>/EFI/BOOT/BOOT*.EFI</filename>. A
+ systemd-boot entry in the EFI boot variables is created and added to the top of the boot order list.</para>
<para><command>bootctl remove</command> removes all installed
versions of systemd-boot from the EFI system partition, and removes
@@ -101,8 +96,10 @@
<xi:include href="standard-options.xml" xpointer="help" />
<xi:include href="standard-options.xml" xpointer="version" />
<varlistentry>
- <term><option>--path</option></term>
- <listitem><para>Path to the EFI system partition. The default is /boot.</para></listitem>
+ <term><option>--path=</option></term>
+ <listitem><para>Path to the EFI System Partition (ESP). If not specified, <filename>/efi</filename>,
+ <filename>/boot</filename>, and <filename>/boot/efi</filename> are checked in turn. It is recommended to mount
+ the ESP to <filename>/boot</filename>, if possible.</para></listitem>
</varlistentry>
<varlistentry>
diff --git a/man/journald.conf.xml b/man/journald.conf.xml
index 3964cd6bc5..a9562c121a 100644
--- a/man/journald.conf.xml
+++ b/man/journald.conf.xml
@@ -129,22 +129,15 @@
<varlistentry>
<term><varname>SplitMode=</varname></term>
- <listitem><para>Controls whether to split up journal files per
- user. One of <literal>uid</literal>, <literal>login</literal>
- and <literal>none</literal>. If <literal>uid</literal>, all
- users will get each their own journal files regardless of
- whether they possess a login session or not, however system
- users will log into the system journal. If
- <literal>login</literal>, actually logged-in users will get
- each their own journal files, but users without login session
- and system users will log into the system journal. If
- <literal>none</literal>, journal files are not split up by
- user and all messages are instead stored in the single system
- journal. Note that splitting up journal files by user is only
- available for journals stored persistently. If journals are
- stored on volatile storage (see above), only a single journal
- file for all user IDs is kept. Defaults to
- <literal>uid</literal>.</para></listitem>
+ <listitem><para>Controls whether to split up journal files per user, either <literal>uid</literal> or
+ <literal>none</literal>. Split journal files are primarily useful for access control: on UNIX/Linux access
+ control is managed per file, and the journal daemon will assign users read access to their journal files. If
+ <literal>uid</literal>, all regular users will each get their own journal files, and system users will log to
+ the system journal. If <literal>none</literal>, journal files are not split up by user and all messages are
+ instead stored in the single system journal. In this mode unprivileged users generally do not have access to
+ their own log data. Note that splitting up journal files by user is only available for journals stored
+ persistently. If journals are stored on volatile storage (see <varname>Storage=</varname> above), only a single
+ journal file is used. Defaults to <literal>uid</literal>.</para></listitem>
</varlistentry>
<varlistentry>
diff --git a/man/logind.conf.xml b/man/logind.conf.xml
index fe92277a1f..adba5a4131 100644
--- a/man/logind.conf.xml
+++ b/man/logind.conf.xml
@@ -315,12 +315,11 @@
<varlistentry>
<term><varname>UserTasksMax=</varname></term>
- <listitem><para>Sets the maximum number of OS tasks each user
- may run concurrently. This controls the
- <varname>TasksMax=</varname> setting of the per-user slice
- unit, see
+ <listitem><para>Sets the maximum number of OS tasks each user may run concurrently. This controls the
+ <varname>TasksMax=</varname> setting of the per-user slice unit, see
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for details. Defaults to 12288 (12K).</para></listitem>
+ for details. Defaults to 33%, which equals 10813 with the kernel's defaults on the host, but might be smaller
+ in OS containers.</para></listitem>
</varlistentry>
<varlistentry>
diff --git a/man/nss-myhostname.xml b/man/nss-myhostname.xml
index a920ec334f..b1daaba02b 100644
--- a/man/nss-myhostname.xml
+++ b/man/nss-myhostname.xml
@@ -106,8 +106,8 @@
<para>Here is an example <filename>/etc/nsswitch.conf</filename> file that enables
<command>nss-myhostname</command> correctly:</para>
-<programlisting>passwd: compat mymachines
-group: compat mymachines
+<programlisting>passwd: compat mymachines systemd
+group: compat mymachines systemd
shadow: compat
hosts: files mymachines resolve <command>myhostname</command>
@@ -138,6 +138,7 @@ netgroup: nis</programlisting>
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nss-systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>nss-resolve</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>nss-mymachines</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry project='man-pages'><refentrytitle>nsswitch.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/nss-mymachines.xml b/man/nss-mymachines.xml
index ec047449bf..a70119e256 100644
--- a/man/nss-mymachines.xml
+++ b/man/nss-mymachines.xml
@@ -82,8 +82,8 @@
<para>Here is an example <filename>/etc/nsswitch.conf</filename> file that enables
<command>nss-mymachines</command> correctly:</para>
- <programlisting>passwd: compat <command>mymachines</command>
-group: compat <command>mymachines</command>
+ <programlisting>passwd: compat <command>mymachines</command> systemd
+group: compat <command>mymachines</command> systemd
shadow: compat
hosts: files <command>mymachines</command> resolve myhostname
@@ -103,6 +103,7 @@ netgroup: nis</programlisting>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-machined.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nss-systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>nss-resolve</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>nss-myhostname</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry project='man-pages'><refentrytitle>nsswitch.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/nss-resolve.xml b/man/nss-resolve.xml
index d9e56453e8..e6cc1d982a 100644
--- a/man/nss-resolve.xml
+++ b/man/nss-resolve.xml
@@ -81,8 +81,8 @@
<para>Here is an example <filename>/etc/nsswitch.conf</filename> file that enables <command>nss-resolve</command>
correctly:</para>
-<programlisting>passwd: compat mymachines
-group: compat mymachines
+<programlisting>passwd: compat mymachines systemd
+group: compat mymachines systemd
shadow: compat
hosts: files mymachines <command>resolve</command> myhostname
@@ -102,8 +102,9 @@ netgroup: nis</programlisting>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-resolved</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>nss-mymachines</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nss-systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry><refentrytitle>nss-myhostname</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nss-mymachines</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
<citerefentry project='man-pages'><refentrytitle>nsswitch.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>
</para>
</refsect1>
diff --git a/man/nss-systemd.xml b/man/nss-systemd.xml
new file mode 100644
index 0000000000..4228372e51
--- /dev/null
+++ b/man/nss-systemd.xml
@@ -0,0 +1,107 @@
+<?xml version='1.0'?> <!--*-nxml-*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+ This file is part of systemd.
+
+ Copyright 2016 Lennart Poettering
+
+ systemd is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="nss-systemd">
+
+ <refentryinfo>
+ <title>nss-systemd</title>
+ <productname>systemd</productname>
+
+ <authorgroup>
+ <author>
+ <contrib>Developer</contrib>
+ <firstname>Lennart</firstname>
+ <surname>Poettering</surname>
+ <email>lennart@poettering.net</email>
+ </author>
+ </authorgroup>
+ </refentryinfo>
+
+ <refmeta>
+ <refentrytitle>nss-systemd</refentrytitle>
+ <manvolnum>8</manvolnum>
+ </refmeta>
+
+ <refnamediv>
+ <refname>nss-systemd</refname>
+ <refname>libnss_systemd.so.2</refname>
+ <refpurpose>Provide UNIX user and group name resolution for dynamic users and groups.</refpurpose>
+ </refnamediv>
+
+ <refsynopsisdiv>
+ <para><filename>libnss_systemd.so.2</filename></para>
+ </refsynopsisdiv>
+
+ <refsect1>
+ <title>Description</title>
+
+ <para><command>nss-systemd</command> is a plug-in module for the GNU Name Service Switch (NSS) functionality of the
+ GNU C Library (<command>glibc</command>), providing UNIX user and group name resolution for dynamic users and
+ groups allocated through the <varname>DynamicUser=</varname> option in systemd unit files. See
+ <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry> for details on
+ this option.</para>
+
+ <para>To activate the NSS module, add <literal>systemd</literal> to the lines starting with
+ <literal>passwd:</literal> and <literal>group:</literal> in <filename>/etc/nsswitch.conf</filename>.</para>
+
+ <para>It is recommended to place <literal>systemd</literal> after the <literal>files</literal> or
+ <literal>compat</literal> entry of the <filename>/etc/nsswitch.conf</filename> lines so that
+ <filename>/etc/passwd</filename> and <filename>/etc/group</filename> based mappings take precedence.</para>
+ </refsect1>
+
+ <refsect1>
+ <title>Example</title>
+
+ <para>Here is an example <filename>/etc/nsswitch.conf</filename> file that enables
+ <command>nss-systemd</command> correctly:</para>
+
+ <programlisting>passwd: compat mymachines <command>systemd</command>
+group: compat mymachines <command>systemd</command>
+shadow: compat
+
+hosts: files mymachines resolve myhostname
+networks: files
+
+protocols: db files
+services: db files
+ethers: db files
+rpc: db files
+
+netgroup: nis</programlisting>
+
+ </refsect1>
+
+ <refsect1>
+ <title>See Also</title>
+ <para>
+ <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nss-resolve</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nss-myhostname</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>nss-mymachines</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry project='man-pages'><refentrytitle>nsswitch.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
+ <citerefentry project='man-pages'><refentrytitle>getent</refentrytitle><manvolnum>1</manvolnum></citerefentry>
+ </para>
+ </refsect1>
+
+</refentry>
diff --git a/man/resolved.conf.xml b/man/resolved.conf.xml
index 024ad6a9c1..7556c6ff31 100644
--- a/man/resolved.conf.xml
+++ b/man/resolved.conf.xml
@@ -204,19 +204,13 @@
<varlistentry>
<term><varname>Cache=</varname></term>
- <listitem><para>Takes a boolean argument. If "yes" (the default),
- resolving a domain name which already got queried earlier will re-use
- the previous result as long as that is still valid, and thus does not
- need to do an actual network request.</para>
-
- <para>However, local caching slightly increases the chance of a
- successful DNS poisoning attack, and might also be a privacy problem in
- some environments: By measuring the time it takes to resolve a
- particular network name, a user can determine whether any other user on
- the same machine recently visited that name. If either of these is a
- concern, you may disable the local caching. Be aware that this comes at
- a performance cost, which is <emphasis>very</emphasis> high with DNSSEC.
- </para></listitem>
+ <listitem><para>Takes a boolean argument. If "yes" (the default), resolving a domain name which already got
+ queried earlier will return the previous result as long as it is still valid, and thus does not result in a new
+ network request. Be aware that that turning off caching comes at a performance penalty, which is particularly
+ high when DNSSEC is used.</para>
+
+ <para>Note that caching is turned off implicitly if the configured DNS server is on a host-local IP address
+ (such as 127.0.0.1 or ::1), in order to avoid duplicate local caching.</para></listitem>
</varlistentry>
</variablelist>
diff --git a/man/sd_id128_to_string.xml b/man/sd_id128_to_string.xml
index e70c80892e..927d1ad5f2 100644
--- a/man/sd_id128_to_string.xml
+++ b/man/sd_id128_to_string.xml
@@ -74,13 +74,11 @@
lowercase hexadecimal digits and be terminated by a
<constant>NUL</constant> byte.</para>
- <para><function>sd_id128_from_string()</function> implements the
- reverse operation: it takes a 33 character string with 32
- hexadecimal digits (either lowercase or uppercase, terminated by
- <constant>NUL</constant>) and parses them back into a 128-bit ID
- returned in <parameter>ret</parameter>. Alternatively, this call
- can also parse a 37-character string with a 128-bit ID formatted
- as RFC UUID.</para>
+ <para><function>sd_id128_from_string()</function> implements the reverse operation: it takes a 33 character string
+ with 32 hexadecimal digits (either lowercase or uppercase, terminated by <constant>NUL</constant>) and parses them
+ back into a 128-bit ID returned in <parameter>ret</parameter>. Alternatively, this call can also parse a
+ 37-character string with a 128-bit ID formatted as RFC UUID. If <parameter>ret</parameter> is passed as NULL the
+ function will validate the passed ID string, but not actually return it in parsed form.</para>
<para>For more information about the <literal>sd_id128_t</literal>
type see
diff --git a/man/systemctl.xml b/man/systemctl.xml
index 742da81cfe..e7880d24f7 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -973,70 +973,61 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<term><command>list-unit-files <optional><replaceable>PATTERN...</replaceable></optional></command></term>
<listitem>
- <para>List unit files installed in the file system and their enablement state
- (as reported by <command>is-enabled</command>). If one or more
- <replaceable>PATTERN</replaceable>s are specified, only units whose filename
- (just the last component of the path) matches one of them are shown.</para>
+ <para>List unit files installed on the system, in combination with their enablement state (as reported by
+ <command>is-enabled</command>). If one or more <replaceable>PATTERN</replaceable>s are specified, only unit
+ files whose name matches one of them are shown (patterns matching unit file system paths are not
+ supported).</para>
</listitem>
</varlistentry>
<varlistentry>
<term><command>enable <replaceable>NAME</replaceable>...</command></term>
+ <term><command>enable <replaceable>PATH</replaceable>...</command></term>
<listitem>
- <para>Enable one or more unit files or unit file instances,
- as specified on the command line. This will create a number
- of symlinks as encoded in the <literal>[Install]</literal>
- sections of the unit files. After the symlinks have been
- created, the systemd configuration is reloaded (in a way that
- is equivalent to <command>daemon-reload</command>) 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 desired, either <option>--now</option> should be used
- together with this command, or an additional <command>start</command>
- command must be invoked for the unit. Also note that, in case of
- instance enablement, symlinks named the same as instances
- are created in the install location, however they all point to the
- same template unit file.</para>
-
- <para>This command will print the actions executed. This
- output may be suppressed by passing <option>--quiet</option>.
+ <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,
+ 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
+ desired, combine this command with the <option>--now</option> switch, or invoke <command>start</command>
+ with appropriate arguments later. Note that in case of unit instance enablement (i.e. enablement of units of
+ the form <filename>foo@bar.service</filename>), symlinks named the same as instances are created in the
+ unit configuration diectory, however they point to the single template unit file they are instantiated
+ from.</para>
+
+ <para>This command expects either valid unit names (in which case various unit file directories are
+ automatically searched for unit files with appropriate names), or absolute paths to unit files (in which
+ case these files are read directly). If a specified unit file is located outside of the usual unit file
+ directories, an additional symlink is created, linking it into the unit configuration path, thus ensuring
+ it is found when requested by commands such as <command>start</command>.</para>
+
+ <para>This command will print the file system operations executed. This output may be suppressed by passing
+ <option>--quiet</option>.
</para>
- <para>Note that this operation creates only the suggested
- symlinks for the units. 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 in the
- directory. This is particularly useful to create
- configurations that deviate from the suggested default
- installation. In this case, the administrator must make sure
- to invoke <command>daemon-reload</command> manually as
- necessary to ensure the changes are taken into account.
+ <para>Note that this operation creates only the symlinks suggested in the <literal>[Install]</literal>
+ 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
+ default installation. In this case, the administrator must make sure to invoke
+ <command>daemon-reload</command> manually as necessary, in order to ensure the changes are taken into
+ account.
</para>
- <para>Enabling units should not be confused with starting
- (activating) units, as done by the <command>start</command>
- command. Enabling and starting units is orthogonal: units
- may be enabled without being started and started without
- being enabled. Enabling simply hooks the unit into various
- suggested places (for example, so that the unit is
- automatically started on boot or when a particular kind of
- hardware is plugged in). Starting actually spawns the daemon
- process (in case of service units), or binds the socket (in
- case of socket units), and so on.</para>
-
- <para>Depending on whether <option>--system</option>,
- <option>--user</option>, <option>--runtime</option>,
- or <option>--global</option> is specified, this enables the unit
- for the system, for the calling user only, for only this boot of
- the system, or for all future logins of all users, or only this
- boot. Note that in the last case, no systemd daemon
- configuration is reloaded.</para>
-
- <para>Using <command>enable</command> on masked units
- results in an error.</para>
+ <para>Enabling units should not be confused with starting (activating) units, as done by the
+ <command>start</command> command. Enabling and starting units is orthogonal: units may be enabled without
+ being started and started without being enabled. Enabling simply hooks the unit into various suggested
+ places (for example, so that the unit is automatically started on boot or when a particular kind of
+ hardware is plugged in). Starting actually spawns the daemon process (in case of service units), or binds
+ the socket (in case of socket units), and so on.</para>
+
+ <para>Depending on whether <option>--system</option>, <option>--user</option>, <option>--runtime</option>,
+ or <option>--global</option> is specified, this enables the unit for the system, for the calling user only,
+ for only this boot of the system, or for all future logins of all users, or only this boot. Note that in
+ the last case, no systemd daemon configuration is reloaded.</para>
+
+ <para>Using <command>enable</command> on masked units is not supported and results in an error.</para>
</listitem>
</varlistentry>
@@ -1044,28 +1035,31 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<term><command>disable <replaceable>NAME</replaceable>...</command></term>
<listitem>
- <para>Disables one or more units. This removes all symlinks
- to the specified unit files from the unit configuration
- directory, and hence undoes the changes made by
- <command>enable</command>. Note however that this removes
- all symlinks to the unit files (i.e. including manual
- additions), not just those actually created by
- <command>enable</command>. This call implicitly reloads the
- systemd daemon configuration after completing the disabling
- of the units. Note that this command does not implicitly
- stop the units that are being disabled. If this is desired, either
- <option>--now</option> should be used together with this command, or
- an additional <command>stop</command> command should be executed
- afterwards.</para>
-
- <para>This command will print the actions executed. This
- output may be suppressed by passing <option>--quiet</option>.
+ <para>Disables one or more units. This removes all symlinks to the unit files backing the specified units
+ from the unit configuration directory, and hence undoes any changes made by <command>enable</command> or
+ <command>link</command>. Note that this removes <emphasis>all</emphasis> symlinks to matching unit files,
+ including manually created symlinks, and not just those actually created by <command>enable</command> or
+ <command>link</command>. Note that while <command>disable</command> undoes the effect of
+ <command>enable</command>, the two commands are otherwise not symmetric, as <command>disable</command> may
+ remove more symlinks than a prior <command>enable</command> invocation of the same unit created.</para>
+
+ <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
+ files being operated on.</para>
+
+ <para>This command implicitly reloads the system manager configuration after completing the operation. Note
+ that this command does not implicitly stop the units that are being disabled. If this is desired, either
+ combine this command with the <option>--now</option> switch, or invoke the <command>stop</command> command
+ with appropriate arguments later.</para>
+
+ <para>This command will print information about the file system operations (symlink removals)
+ executed. This output may be suppressed by passing <option>--quiet</option>.
</para>
- <para>This command honors <option>--system</option>,
- <option>--user</option>, <option>--runtime</option> and
- <option>--global</option> in a similar way as
- <command>enable</command>.</para>
+ <para>This command honors <option>--system</option>, <option>--user</option>, <option>--runtime</option>
+ and <option>--global</option> in a similar way as <command>enable</command>.</para>
</listitem>
</varlistentry>
@@ -1073,12 +1067,10 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<term><command>reenable <replaceable>NAME</replaceable>...</command></term>
<listitem>
- <para>Reenable one or more unit files, 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 is enabled with to
- the defaults configured in the <literal>[Install]</literal>
- section of the unit file.</para>
+ <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 commands expects
+ a unit uname only, it does not accept paths to unit files.</para>
</listitem>
</varlistentry>
@@ -1209,16 +1201,13 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<term><command>mask <replaceable>NAME</replaceable>...</command></term>
<listitem>
- <para>Mask one or more unit files, as specified on the
- command line. This will link these units to
- <filename>/dev/null</filename>, making it impossible to
- start them. This is a stronger version of
- <command>disable</command>, since it prohibits all kinds of
- activation of the unit, including enablement and manual
- activation. Use this option with care. This honors the
- <option>--runtime</option> option to only mask temporarily
- until the next reboot of the system. The <option>--now</option>
- option can be used to ensure that the units are also stopped.</para>
+ <para>Mask one or more units, as specified on the command line. This will link these unit files to
+ <filename>/dev/null</filename>, making it impossible to start them. This is a stronger version of
+ <command>disable</command>, since it prohibits all kinds of activation of the unit, including enablement
+ and manual activation. Use this option with care. This honors the <option>--runtime</option> option to only
+ mask temporarily until the next reboot of the system. The <option>--now</option> option may be used to
+ ensure that the units are also stopped. This command expects valid unit names only, it does not accept unit
+ file paths.</para>
</listitem>
</varlistentry>
@@ -1226,23 +1215,20 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<term><command>unmask <replaceable>NAME</replaceable>...</command></term>
<listitem>
- <para>Unmask one or more unit files, as specified on the
- command line. This will undo the effect of
- <command>mask</command>.</para>
+ <para>Unmask one or more unit files, as specified on the command line. This will undo the effect of
+ <command>mask</command>. This command expects valid unit names only, it does not accept unit file
+ paths.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><command>link <replaceable>FILENAME</replaceable>...</command></term>
+ <term><command>link <replaceable>PATH</replaceable>...</command></term>
<listitem>
- <para>Link a unit file that is not in the unit file search
- paths into the unit file search path. This requires an
- absolute path to a unit file. The effect of this can be
- undone with <command>disable</command>. The effect of this
- command is that a unit file is available for
- <command>start</command> and other commands although it
- is not installed directly in the unit search path.</para>
+ <para>Link a unit file that is not in the unit file search paths into the unit file search path. This
+ command expects an absolute path to a unit file. The effect of this may be undone with
+ <command>disable</command>. The effect of this command is that a unit file is made available for commands
+ such as <command>start</command>, even though it is not installed directly in the unit search path.</para>
</listitem>
</varlistentry>
diff --git a/man/systemd-gpt-auto-generator.xml b/man/systemd-gpt-auto-generator.xml
index e890c4dce2..d26206710f 100644
--- a/man/systemd-gpt-auto-generator.xml
+++ b/man/systemd-gpt-auto-generator.xml
@@ -137,6 +137,11 @@
<entry>Swap</entry>
<entry>All swap partitions located on the disk the root partition is located on are enabled.</entry>
</row>
+ <row>
+ <entry>c12a7328-f81f-11d2-ba4b-00a0c93ec93b</entry>
+ <entry>EFI System Partition (ESP)</entry>
+ <entry>The first ESP located on the disk the root partition is located on is mounted to <filename>/boot</filename> or <filename>/efi</filename>, see below.</entry>
+ </row>
</tbody>
</tgroup>
</table>
@@ -150,16 +155,14 @@
<filename>/etc/crypttab</filename> with a different device mapper
device name.</para>
- <para>Mount and automount units for the EFI System Partition (ESP),
- mounting it to <filename>/boot</filename>, are generated on EFI
- systems where the boot loader communicates the used ESP to the operating
- system. Since this generator creates an automount unit, the mount will
- only be activated on-demand, when accessed. On systems where
- <filename>/boot</filename> is an explicitly configured mount
- (for example, listed in
- <citerefentry project='man-pages'><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>)
- or where the <filename>/boot</filename> mount point is non-empty, no
- mount units are generated.</para>
+ <para>Mount and automount units for the EFI System Partition (ESP) are generated on EFI systems. The ESP is mounted
+ to <filename>/boot</filename>, unless a mount point directory <filename>/efi</filename> exists, in which case it is
+ mounted there. Since this generator creates an automount unit, the mount will only be activated on-demand, when
+ accessed. On systems where <filename>/boot</filename> (or <filename>/efi</filename> if it exists) is an explicitly
+ configured mount (for example, listed in <citerefentry
+ project='man-pages'><refentrytitle>fstab</refentrytitle><manvolnum>5</manvolnum></citerefentry>) or where the
+ <filename>/boot</filename> (or <filename>/efi</filename>) mount point is non-empty, no mount units are
+ generated.</para>
<para>When using this generator in conjunction with btrfs file
systems, make sure to set the correct default subvolumes on them,
diff --git a/man/systemd-machine-id-setup.xml b/man/systemd-machine-id-setup.xml
index bfcd74f436..749987a937 100644
--- a/man/systemd-machine-id-setup.xml
+++ b/man/systemd-machine-id-setup.xml
@@ -151,6 +151,12 @@
early boot service.</para></listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--print</option></term>
+
+ <listitem><para>Print the machine ID generated or commited after the operation is complete.</para></listitem>
+ </varlistentry>
+
<xi:include href="standard-options.xml" xpointer="help" />
<xi:include href="standard-options.xml" xpointer="version" />
</variablelist>
diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
index cb0468fbf5..9b623c8353 100644
--- a/man/systemd-nspawn.xml
+++ b/man/systemd-nspawn.xml
@@ -73,11 +73,9 @@
since it fully virtualizes the file system hierarchy, as well as the process tree, the various IPC subsystems and
the host and domain name.</para>
- <para>Like <citerefentry
- project='man-pages'><refentrytitle>chroot</refentrytitle><manvolnum>1</manvolnum></citerefentry> the
- <command>systemd-nspawn</command> command may be invoked on any directory tree containing an operating system tree,
+ <para><command>systemd-nspawn</command> may be invoked on any directory tree containing an operating system tree,
using the <option>--directory=</option> command line option. By using the <option>--machine=</option> option an OS
- tree is automatically searched in a couple of locations, most importantly in
+ tree is automatically searched for in a couple of locations, most importantly in
<filename>/var/lib/machines</filename>, the suggested directory to place container images installed on the
system.</para>
@@ -935,8 +933,8 @@
<literal>tmpfs</literal> instance, and
<filename>/usr</filename> from the OS tree is mounted into it
in read-only mode (the system thus starts up with read-only OS
- resources, but pristine state and configuration, any changes
- to the either are lost on shutdown). When the mode parameter
+ image, but pristine state and configuration, any changes
+ are lost on shutdown). When the mode parameter
is specified as <option>state</option>, the OS tree is
mounted read-only, but <filename>/var</filename> is mounted as
a <literal>tmpfs</literal> instance into it (the system thus
diff --git a/man/systemd-resolved.service.xml b/man/systemd-resolved.service.xml
index 141b06e374..aa1c2365e5 100644
--- a/man/systemd-resolved.service.xml
+++ b/man/systemd-resolved.service.xml
@@ -80,10 +80,10 @@
<listitem><para>Additionally, <command>systemd-resolved</command> provides a local DNS stub listener on IP
address 127.0.0.53 on the local loopback interface. Programs issuing DNS requests directly, bypassing any local
- API may be directed to this stub, in order to connect them <command>systemd-resolved</command>. Note however that
- it is strongly recommended that local programs use the glibc NSS or bus APIs instead (as described above), as
- various network resolution concepts (such as link-local addressing, or LLMNR Unicode domains) cannot be mapped to
- the unicast DNS protocol.</para></listitem>
+ API may be directed to this stub, in order to connect them to <command>systemd-resolved</command>. Note however
+ that it is strongly recommended that local programs use the glibc NSS or bus APIs instead (as described above),
+ as various network resolution concepts (such as link-local addressing, or LLMNR Unicode domains) cannot be mapped
+ to the unicast DNS protocol.</para></listitem>
</itemizedlist>
<para>The DNS servers contacted are determined from the global settings in
diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
index 8833e73c72..1bb40fd234 100644
--- a/man/systemd-system.conf.xml
+++ b/man/systemd-system.conf.xml
@@ -325,12 +325,11 @@
<varlistentry>
<term><varname>DefaultTasksMax=</varname></term>
- <listitem><para>Configure the default value for the per-unit
- <varname>TasksMax=</varname> setting. See
+ <listitem><para>Configure the default value for the per-unit <varname>TasksMax=</varname> setting. See
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for details. This setting applies to all unit types that
- support resource control settings, with the exception of slice
- units. Defaults to 512.</para></listitem>
+ for details. This setting applies to all unit types that support resource control settings, with the exception
+ of slice units. Defaults to 15%, which equals 4915 with the kernel's defaults on the host, but might be smaller
+ in OS containers.</para></listitem>
</varlistentry>
<varlistentry>
diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
index 49fea98a95..58ba582911 100644
--- a/man/systemd.exec.xml
+++ b/man/systemd.exec.xml
@@ -143,10 +143,38 @@
<term><varname>User=</varname></term>
<term><varname>Group=</varname></term>
- <listitem><para>Sets the Unix user or group that the processes
- are executed as, respectively. Takes a single user or group
- name or ID as argument. If no group is set, the default group
- of the user is chosen. These do not affect commands prefixed with <literal>!</literal>.</para></listitem>
+ <listitem><para>Set the UNIX user or group that the processes are executed as, respectively. Takes a single
+ user or group name, or numeric ID as argument. If no group is set, the default group of the user is used. This
+ setting does not affect commands whose command line is prefixed with <literal>+</literal>.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><varname>DynamicUser=</varname></term>
+
+ <listitem><para>Takes a boolean parameter. If set, a UNIX user and group pair is allocated dynamically when the
+ unit is started, and released as soon as it is stopped. The user and group will not be added to
+ <filename>/etc/passwd</filename> or <filename>/etc/group</filename>, but are managed transiently during
+ runtime. The <citerefentry><refentrytitle>nss-systemd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+ glibc NSS module provides integration of these dynamic users/groups into the system's user and group
+ databases. The user and group name to use may be configured via <varname>User=</varname> and
+ <varname>Group=</varname> (see above). If these options are not used and dynamic user/group allocation is
+ enabled for a unit, the name of the dynamic user/group is implicitly derived from the unit name. If the unit
+ name without the type suffix qualifies as valid user name it is used directly, otherwise a name incorporating a
+ hash of it is used. If a statically allocated user or group of the configured name already exists, it is used
+ and no dynamic user/group is allocated. Dynamic users/groups are allocated from the UID/GID range
+ 61184…65519. It is recommended to avoid this range for regular system or login users. At any point in time
+ each UID/GID from this range is only assigned to zero or one dynamically allocated users/groups in
+ use. However, UID/GIDs are recycled after a unit is terminated. Care should be taken that any processes running
+ as part of a unit for which dynamic users/groups are enabled do not leave files or directories owned by these
+ users/groups around, as a different unit might get the same UID/GID assigned later on, and thus gain access to
+ these files or directories. If <varname>DynamicUser=</varname> is enabled, <varname>PrivateTmp=</varname> is
+ implied. This ensures that the lifetime of temporary files created by the executed processes is bound to the
+ runtime of the service, and hence the lifetime of the dynamic user/group. Since <filename>/tmp</filename> and
+ <filename>/var/tmp</filename> are usually the only world-writable directories on a system this ensures that a
+ unit making use of dynamic user/group allocation cannot leave files around after unit termination. 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. Defaults to
+ off.</para></listitem>
</varlistentry>
<varlistentry>
@@ -161,7 +189,7 @@
this one will have no effect. In any way, this option does not
override, but extends the list of supplementary groups
configured in the system group database for the
- user. This does not affect commands prefixed with <literal>!</literal>.</para></listitem>
+ user. This does not affect commands prefixed with <literal>+</literal>.</para></listitem>
</varlistentry>
<varlistentry>
@@ -796,7 +824,7 @@
empty string is assigned to this option, the bounding set is reset to the empty capability set, and all prior
settings have no effect. If set to <literal>~</literal> (without any further argument), the bounding set is
reset to the full set of available capabilities, also undoing any previous settings. This does not affect
- commands prefixed with <literal>!</literal>.</para></listitem>
+ commands prefixed with <literal>+</literal>.</para></listitem>
</varlistentry>
<varlistentry>
@@ -826,7 +854,7 @@
Note that in this case option <constant>keep-caps</constant> is
automatically added to <varname>SecureBits=</varname> to retain the
capabilities over the user change. <varname>AmbientCapabilities=</varname> does not affect
- commands prefixed with <literal>!</literal>.</para></listitem>
+ commands prefixed with <literal>+</literal>.</para></listitem>
</varlistentry>
<varlistentry>
@@ -842,7 +870,7 @@
<option>noroot-locked</option>.
This option may appear more than once, in which case the secure
bits are ORed. If the empty string is assigned to this option,
- the bits are reset to 0. This does not affect commands prefixed with <literal>!</literal>.
+ the bits are reset to 0. This does not affect commands prefixed with <literal>+</literal>.
See <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
for details.</para></listitem>
</varlistentry>
@@ -1101,7 +1129,7 @@
domain transition. However, the policy still needs to
authorize the transition. This directive is ignored if SELinux
is disabled. If prefixed by <literal>-</literal>, all errors
- will be ignored. This does not affect commands prefixed with <literal>!</literal>.
+ will be ignored. This does not affect commands prefixed with <literal>+</literal>.
See <citerefentry project='die-net'><refentrytitle>setexeccon</refentrytitle><manvolnum>3</manvolnum></citerefentry>
for details.</para></listitem>
</varlistentry>
@@ -1114,7 +1142,7 @@
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>
+ be ignored. This does not affect commands prefixed with <literal>+</literal>.</para></listitem>
</varlistentry>
<varlistentry>
@@ -1134,7 +1162,7 @@
<para>The value may be prefixed by <literal>-</literal>, in
which case all errors will be ignored. An empty value may be
specified to unset previous assignments. This does not affect
- commands prefixed with <literal>!</literal>.</para>
+ commands prefixed with <literal>+</literal>.</para>
</listitem>
</varlistentry>
@@ -1185,7 +1213,7 @@
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>
+ have no effect. This does not affect commands prefixed with <literal>+</literal>.</para>
<para>If you specify both types of this option (i.e.
whitelisting and blacklisting), the first encountered will
@@ -1354,7 +1382,7 @@
family should be included in the configured whitelist as it is
frequently used for local communication, including for
<citerefentry><refentrytitle>syslog</refentrytitle><manvolnum>2</manvolnum></citerefentry>
- logging. This does not affect commands prefixed with <literal>!</literal>.</para></listitem>
+ logging. This does not affect commands prefixed with <literal>+</literal>.</para></listitem>
</varlistentry>
<varlistentry>
diff --git a/man/systemd.resource-control.xml b/man/systemd.resource-control.xml
index 7263c0b329..bf44a68345 100644
--- a/man/systemd.resource-control.xml
+++ b/man/systemd.resource-control.xml
@@ -327,15 +327,12 @@
<term><varname>TasksMax=<replaceable>N</replaceable></varname></term>
<listitem>
- <para>Specify the maximum number of tasks that may be
- created in the unit. This ensures that the number of tasks
- accounted for the unit (see above) stays below a specific
- limit. If assigned the special value
- <literal>infinity</literal>, no tasks limit is applied. This
- controls the <literal>pids.max</literal> control group
- attribute. For details about this control group attribute,
- see <ulink
- url="https://www.kernel.org/doc/Documentation/cgroup-v1/pids.txt">pids.txt</ulink>.</para>
+ <para>Specify the maximum number of tasks that may be created in the unit. This ensures that the number of
+ tasks accounted for the unit (see above) stays below a specific limit. This either takes an absolute number
+ of tasks or a percentage value that is taken relative to the configured maximum number of tasks on the
+ system. If assigned the special value <literal>infinity</literal>, no tasks limit is applied. This controls
+ the <literal>pids.max</literal> control group attribute. For details about this control group attribute, see
+ <ulink url="https://www.kernel.org/doc/Documentation/cgroup-v1/pids.txt">pids.txt</ulink>.</para>
<para>Implies <literal>TasksAccounting=true</literal>. The
system default for this setting may be controlled with
diff --git a/man/systemd.service.xml b/man/systemd.service.xml
index 70f12b2d32..875d368fcf 100644
--- a/man/systemd.service.xml
+++ b/man/systemd.service.xml
@@ -288,18 +288,14 @@
<varname>ExecStart=</varname> is specified, then the service
must have <varname>RemainAfterExit=yes</varname> set.</para>
- <para>For each of the specified commands, the first argument
- must be an absolute path to an executable. Optionally, if this
- file name is prefixed with <literal>@</literal>, the second
- token will be passed as <literal>argv[0]</literal> to the
- executed process, followed by the further arguments specified.
- If the absolute filename is prefixed with
- <literal>-</literal>, an exit code of the command normally
- considered a failure (i.e. non-zero exit status or abnormal
- exit due to signal) is ignored and considered success.
- If the absolute path is prefixed with <literal>!</literal> then
- it is executed with full privileges. <literal>-</literal>, <literal>@</literal>, and <literal>!</literal>
- may be used together and they can appear in any order.</para>
+ <para>For each of the specified commands, the first argument must be an absolute path to an
+ executable. Optionally, if this file name is prefixed with <literal>@</literal>, the second token will be
+ passed as <literal>argv[0]</literal> to the executed process, followed by the further arguments specified. If
+ the absolute filename is prefixed with <literal>-</literal>, an exit code of the command normally considered a
+ failure (i.e. non-zero exit status or abnormal exit due to signal) is ignored and considered success. If the
+ absolute path is prefixed with <literal>+</literal> then it is executed with full
+ privileges. <literal>-</literal>, <literal>@</literal>, and <literal>+</literal> may be used together and they
+ can appear in any order.</para>
<para>If more than one command is specified, the commands are
invoked sequentially in the order they appear in the unit
diff --git a/man/systemd.special.xml b/man/systemd.special.xml
index 18ad8f92e5..18142598cb 100644
--- a/man/systemd.special.xml
+++ b/man/systemd.special.xml
@@ -879,6 +879,57 @@
</refsect1>
<refsect1>
+ <title>Special Passive User Units</title>
+
+ <refsect2>
+ <title>graphical-session.target</title>
+
+ <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> section. A target for a particular session
+ (e. g. <filename>gnome-session.target</filename>) starts and stops
+ <literal>graphical-session.target</literal> with
+ <literal>BindsTo=graphical-session.target</literal>.</para>
+
+ <para>Which services are started by a session target is determined by the
+ <literal>Wants=</literal> and <literal>Requires=</literal> dependencies.
+ For services that can be enabled independently, symlinks in
+ <literal>.wants/</literal> and <literal>.requires/</literal> should be
+ used, see
+ <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ Those symlinks should either be shipped in packages, or should be added
+ dynamically after installation, for example using <literal>systemctl add-wants</literal>, see
+ <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
+ </para>
+
+ <example>
+ <title>Nautilus as part of a GNOME session</title>
+
+ <para><literal>gnome-session.target</literal> pulls in Nautilus as
+ top-level service:</para>
+
+ <programlisting>[Unit]
+Description=User systemd services for GNOME graphical session
+Wants=nautilus.service
+BindsTo=graphical-session.target
+ </programlisting>
+
+ <para><literal>nautilus.service</literal> gets stopped when the session stops:</para>
+
+ <programlisting>[Unit]
+Description=Render the desktop icons with Nautilus
+PartOf=graphical-session.target
+
+[Service]
+...
+ </programlisting>
+ </example>
+ </refsect2>
+ </refsect1>
+
+ <refsect1>
<title>Special Slice Units</title>
<para>There are four <literal>.slice</literal> units which form
diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
index 7cdc97ee3c..302b958d0d 100644
--- a/src/basic/cgroup-util.c
+++ b/src/basic/cgroup-util.c
@@ -134,6 +134,20 @@ int cg_read_event(const char *controller, const char *path, const char *event,
return -ENOENT;
}
+bool cg_ns_supported(void) {
+ static thread_local int enabled = -1;
+
+ if (enabled >= 0)
+ return enabled;
+
+ if (access("/proc/self/ns/cgroup", F_OK) == 0)
+ enabled = 1;
+ else
+ enabled = 0;
+
+ return enabled;
+}
+
int cg_enumerate_subgroups(const char *controller, const char *path, DIR **_d) {
_cleanup_free_ char *fs = NULL;
int r;
@@ -197,7 +211,15 @@ int cg_rmdir(const char *controller, const char *path) {
return 0;
}
-int cg_kill(const char *controller, const char *path, int sig, bool sigcont, bool ignore_self, Set *s) {
+int cg_kill(
+ const char *controller,
+ const char *path,
+ int sig,
+ CGroupFlags flags,
+ Set *s,
+ cg_kill_log_func_t log_kill,
+ void *userdata) {
+
_cleanup_set_free_ Set *allocated_set = NULL;
bool done = false;
int r, ret = 0;
@@ -205,6 +227,11 @@ int cg_kill(const char *controller, const char *path, int sig, bool sigcont, boo
assert(sig >= 0);
+ /* Don't send SIGCONT twice. Also, SIGKILL always works even when process is suspended, hence don't send
+ * SIGCONT on SIGKILL. */
+ if (IN_SET(sig, SIGCONT, SIGKILL))
+ flags &= ~CGROUP_SIGCONT;
+
/* This goes through the tasks list and kills them all. This
* is repeated until no further processes are added to the
* tasks list, to properly handle forking processes */
@@ -232,19 +259,22 @@ int cg_kill(const char *controller, const char *path, int sig, bool sigcont, boo
while ((r = cg_read_pid(f, &pid)) > 0) {
- if (ignore_self && pid == my_pid)
+ if ((flags & CGROUP_IGNORE_SELF) && pid == my_pid)
continue;
if (set_get(s, PID_TO_PTR(pid)) == PID_TO_PTR(pid))
continue;
+ if (log_kill)
+ log_kill(pid, sig, userdata);
+
/* If we haven't killed this process yet, kill
* it */
if (kill(pid, sig) < 0) {
if (ret >= 0 && errno != ESRCH)
ret = -errno;
} else {
- if (sigcont && sig != SIGKILL)
+ if (flags & CGROUP_SIGCONT)
(void) kill(pid, SIGCONT);
if (ret == 0)
@@ -278,7 +308,15 @@ int cg_kill(const char *controller, const char *path, int sig, bool sigcont, boo
return ret;
}
-int cg_kill_recursive(const char *controller, const char *path, int sig, bool sigcont, bool ignore_self, bool rem, Set *s) {
+int cg_kill_recursive(
+ const char *controller,
+ const char *path,
+ int sig,
+ CGroupFlags flags,
+ Set *s,
+ cg_kill_log_func_t log_kill,
+ void *userdata) {
+
_cleanup_set_free_ Set *allocated_set = NULL;
_cleanup_closedir_ DIR *d = NULL;
int r, ret;
@@ -293,7 +331,7 @@ int cg_kill_recursive(const char *controller, const char *path, int sig, bool si
return -ENOMEM;
}
- ret = cg_kill(controller, path, sig, sigcont, ignore_self, s);
+ ret = cg_kill(controller, path, sig, flags, s, log_kill, userdata);
r = cg_enumerate_subgroups(controller, path, &d);
if (r < 0) {
@@ -311,15 +349,14 @@ int cg_kill_recursive(const char *controller, const char *path, int sig, bool si
if (!p)
return -ENOMEM;
- r = cg_kill_recursive(controller, p, sig, sigcont, ignore_self, rem, s);
+ r = cg_kill_recursive(controller, p, sig, flags, s, log_kill, userdata);
if (r != 0 && ret >= 0)
ret = r;
}
-
if (ret >= 0 && r < 0)
ret = r;
- if (rem) {
+ if (flags & CGROUP_REMOVE) {
r = cg_rmdir(controller, path);
if (r < 0 && ret >= 0 && r != -ENOENT && r != -EBUSY)
return r;
@@ -328,7 +365,13 @@ int cg_kill_recursive(const char *controller, const char *path, int sig, bool si
return ret;
}
-int cg_migrate(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self) {
+int cg_migrate(
+ const char *cfrom,
+ const char *pfrom,
+ const char *cto,
+ const char *pto,
+ CGroupFlags flags) {
+
bool done = false;
_cleanup_set_free_ Set *s = NULL;
int r, ret = 0;
@@ -363,7 +406,7 @@ int cg_migrate(const char *cfrom, const char *pfrom, const char *cto, const char
/* This might do weird stuff if we aren't a
* single-threaded program. However, we
* luckily know we are not */
- if (ignore_self && pid == my_pid)
+ if ((flags & CGROUP_IGNORE_SELF) && pid == my_pid)
continue;
if (set_get(s, PID_TO_PTR(pid)) == PID_TO_PTR(pid))
@@ -411,8 +454,7 @@ int cg_migrate_recursive(
const char *pfrom,
const char *cto,
const char *pto,
- bool ignore_self,
- bool rem) {
+ CGroupFlags flags) {
_cleanup_closedir_ DIR *d = NULL;
int r, ret = 0;
@@ -423,7 +465,7 @@ int cg_migrate_recursive(
assert(cto);
assert(pto);
- ret = cg_migrate(cfrom, pfrom, cto, pto, ignore_self);
+ ret = cg_migrate(cfrom, pfrom, cto, pto, flags);
r = cg_enumerate_subgroups(cfrom, pfrom, &d);
if (r < 0) {
@@ -441,7 +483,7 @@ int cg_migrate_recursive(
if (!p)
return -ENOMEM;
- r = cg_migrate_recursive(cfrom, p, cto, pto, ignore_self, rem);
+ r = cg_migrate_recursive(cfrom, p, cto, pto, flags);
if (r != 0 && ret >= 0)
ret = r;
}
@@ -449,7 +491,7 @@ int cg_migrate_recursive(
if (r < 0 && ret >= 0)
ret = r;
- if (rem) {
+ if (flags & CGROUP_REMOVE) {
r = cg_rmdir(cfrom, pfrom);
if (r < 0 && ret >= 0 && r != -ENOENT && r != -EBUSY)
return r;
@@ -463,8 +505,7 @@ int cg_migrate_recursive_fallback(
const char *pfrom,
const char *cto,
const char *pto,
- bool ignore_self,
- bool rem) {
+ CGroupFlags flags) {
int r;
@@ -473,7 +514,7 @@ int cg_migrate_recursive_fallback(
assert(cto);
assert(pto);
- r = cg_migrate_recursive(cfrom, pfrom, cto, pto, ignore_self, rem);
+ r = cg_migrate_recursive(cfrom, pfrom, cto, pto, flags);
if (r < 0) {
char prefix[strlen(pto) + 1];
@@ -482,7 +523,7 @@ int cg_migrate_recursive_fallback(
PATH_FOREACH_PREFIX(prefix, pto) {
int q;
- q = cg_migrate_recursive(cfrom, pfrom, cto, prefix, ignore_self, rem);
+ q = cg_migrate_recursive(cfrom, pfrom, cto, prefix, flags);
if (q >= 0)
return q;
}
@@ -1955,7 +1996,7 @@ int cg_migrate_everywhere(CGroupMask supported, const char *from, const char *to
int r = 0, unified;
if (!path_equal(from, to)) {
- r = cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, from, SYSTEMD_CGROUP_CONTROLLER, to, false, true);
+ r = cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, from, SYSTEMD_CGROUP_CONTROLLER, to, CGROUP_REMOVE);
if (r < 0)
return r;
}
@@ -1979,7 +2020,7 @@ int cg_migrate_everywhere(CGroupMask supported, const char *from, const char *to
if (!p)
p = to;
- (void) cg_migrate_recursive_fallback(SYSTEMD_CGROUP_CONTROLLER, to, cgroup_controller_to_string(c), p, false, false);
+ (void) cg_migrate_recursive_fallback(SYSTEMD_CGROUP_CONTROLLER, to, cgroup_controller_to_string(c), p, 0);
}
return 0;
diff --git a/src/basic/cgroup-util.h b/src/basic/cgroup-util.h
index 4bb5291296..ec5c715987 100644
--- a/src/basic/cgroup-util.h
+++ b/src/basic/cgroup-util.h
@@ -135,12 +135,20 @@ int cg_read_event(const char *controller, const char *path, const char *event,
int cg_enumerate_subgroups(const char *controller, const char *path, DIR **_d);
int cg_read_subgroup(DIR *d, char **fn);
-int cg_kill(const char *controller, const char *path, int sig, bool sigcont, bool ignore_self, Set *s);
-int cg_kill_recursive(const char *controller, const char *path, int sig, bool sigcont, bool ignore_self, bool remove, Set *s);
+typedef enum CGroupFlags {
+ CGROUP_SIGCONT = 1,
+ CGROUP_IGNORE_SELF = 2,
+ CGROUP_REMOVE = 4,
+} CGroupFlags;
-int cg_migrate(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self);
-int cg_migrate_recursive(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self, bool remove);
-int cg_migrate_recursive_fallback(const char *cfrom, const char *pfrom, const char *cto, const char *pto, bool ignore_self, bool rem);
+typedef void (*cg_kill_log_func_t)(pid_t pid, int sig, void *userdata);
+
+int cg_kill(const char *controller, const char *path, int sig, CGroupFlags flags, Set *s, cg_kill_log_func_t kill_log, void *userdata);
+int cg_kill_recursive(const char *controller, const char *path, int sig, CGroupFlags flags, Set *s, cg_kill_log_func_t kill_log, void *userdata);
+
+int cg_migrate(const char *cfrom, const char *pfrom, const char *cto, const char *pto, CGroupFlags flags);
+int cg_migrate_recursive(const char *cfrom, const char *pfrom, const char *cto, const char *pto, CGroupFlags flags);
+int cg_migrate_recursive_fallback(const char *cfrom, const char *pfrom, const char *cto, const char *pto, CGroupFlags flags);
int cg_split_spec(const char *spec, char **controller, char **path);
int cg_mangle_path(const char *path, char **result);
@@ -214,6 +222,8 @@ int cg_mask_supported(CGroupMask *ret);
int cg_kernel_controllers(Set *controllers);
+bool cg_ns_supported(void);
+
int cg_unified(void);
void cg_unified_flush(void);
diff --git a/src/basic/fileio.c b/src/basic/fileio.c
index 47ccfc39d8..f183de4999 100644
--- a/src/basic/fileio.c
+++ b/src/basic/fileio.c
@@ -1259,7 +1259,8 @@ int open_tmpfile_unlinkable(const char *directory, int flags) {
char *p;
int fd;
- assert(directory);
+ if (!directory)
+ directory = "/tmp";
/* Returns an unlinked temporary file that cannot be linked into the file system anymore */
diff --git a/src/basic/missing.h b/src/basic/missing.h
index b1272f8799..f8e096605e 100644
--- a/src/basic/missing.h
+++ b/src/basic/missing.h
@@ -445,6 +445,10 @@ struct btrfs_ioctl_quota_ctl_args {
#define CGROUP2_SUPER_MAGIC 0x63677270
#endif
+#ifndef CLONE_NEWCGROUP
+#define CLONE_NEWCGROUP 0x02000000
+#endif
+
#ifndef TMPFS_MAGIC
#define TMPFS_MAGIC 0x01021994
#endif
diff --git a/src/basic/mount-util.c b/src/basic/mount-util.c
index 63dff3dd5c..28dc778969 100644
--- a/src/basic/mount-util.c
+++ b/src/basic/mount-util.c
@@ -448,21 +448,21 @@ int bind_remount_recursive(const char *prefix, bool ro) {
if (r < 0)
return r;
- /* Try to reuse the original flag set, but
- * don't care for errors, in case of
- * obstructed mounts */
+ /* Deal with mount points that are obstructed by a
+ * later mount */
+ r = path_is_mount_point(x, 0);
+ if (r == -ENOENT || r == 0)
+ continue;
+ if (r < 0)
+ return r;
+
+ /* Try to reuse the original flag set */
orig_flags = 0;
(void) get_mount_flags(x, &orig_flags);
orig_flags &= ~MS_RDONLY;
- if (mount(NULL, x, NULL, orig_flags|MS_BIND|MS_REMOUNT|(ro ? MS_RDONLY : 0), NULL) < 0) {
-
- /* Deal with mount points that are
- * obstructed by a later mount */
-
- if (errno != ENOENT)
- return -errno;
- }
+ if (mount(NULL, x, NULL, orig_flags|MS_BIND|MS_REMOUNT|(ro ? MS_RDONLY : 0), NULL) < 0)
+ return -errno;
}
}
@@ -534,15 +534,22 @@ int repeat_unmount(const char *path, int flags) {
}
const char* mode_to_inaccessible_node(mode_t mode) {
+ /* This function maps a node type to the correspondent inaccessible node type.
+ * Character and block inaccessible devices may not be created (because major=0 and minor=0),
+ * in such case we map character and block devices to the inaccessible node type socket. */
switch(mode & S_IFMT) {
case S_IFREG:
return "/run/systemd/inaccessible/reg";
case S_IFDIR:
return "/run/systemd/inaccessible/dir";
case S_IFCHR:
- return "/run/systemd/inaccessible/chr";
+ if (access("/run/systemd/inaccessible/chr", F_OK) == 0)
+ return "/run/systemd/inaccessible/chr";
+ return "/run/systemd/inaccessible/sock";
case S_IFBLK:
- return "/run/systemd/inaccessible/blk";
+ if (access("/run/systemd/inaccessible/blk", F_OK) == 0)
+ return "/run/systemd/inaccessible/blk";
+ return "/run/systemd/inaccessible/sock";
case S_IFIFO:
return "/run/systemd/inaccessible/fifo";
case S_IFSOCK:
diff --git a/src/basic/nss-util.h b/src/basic/nss-util.h
index bf7c4854fc..e7844fff96 100644
--- a/src/basic/nss-util.h
+++ b/src/basic/nss-util.h
@@ -137,7 +137,7 @@ enum nss_status _nss_##module##_getpwnam_r( \
struct passwd *pwd, \
char *buffer, size_t buflen, \
int *errnop) _public_; \
-enum nss_status _nss_mymachines_getpwuid_r( \
+enum nss_status _nss_##module##_getpwuid_r( \
uid_t uid, \
struct passwd *pwd, \
char *buffer, size_t buflen, \
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
index e38b67405e..54b644ad56 100644
--- a/src/basic/process-util.c
+++ b/src/basic/process-util.c
@@ -625,8 +625,10 @@ int kill_and_sigcont(pid_t pid, int sig) {
r = kill(pid, sig) < 0 ? -errno : 0;
- if (r >= 0)
- kill(pid, SIGCONT);
+ /* If this worked, also send SIGCONT, unless we already just sent a SIGCONT, or SIGKILL was sent which isn't
+ * affected by a process being suspended anyway. */
+ if (r >= 0 && !IN_SET(SIGCONT, SIGKILL))
+ (void) kill(pid, SIGCONT);
return r;
}
diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c
index 385c3e4df3..6093e47172 100644
--- a/src/basic/socket-util.c
+++ b/src/basic/socket-util.c
@@ -1046,3 +1046,17 @@ int flush_accept(int fd) {
close(cfd);
}
}
+
+struct cmsghdr* cmsg_find(struct msghdr *mh, int level, int type, socklen_t length) {
+ struct cmsghdr *cmsg;
+
+ assert(mh);
+
+ CMSG_FOREACH(cmsg, mh)
+ if (cmsg->cmsg_level == level &&
+ cmsg->cmsg_type == type &&
+ (length == (socklen_t) -1 || length == cmsg->cmsg_len))
+ return cmsg;
+
+ return NULL;
+}
diff --git a/src/basic/socket-util.h b/src/basic/socket-util.h
index e9230e4a9f..2536b085f9 100644
--- a/src/basic/socket-util.h
+++ b/src/basic/socket-util.h
@@ -142,6 +142,8 @@ int flush_accept(int fd);
#define CMSG_FOREACH(cmsg, mh) \
for ((cmsg) = CMSG_FIRSTHDR(mh); (cmsg); (cmsg) = CMSG_NXTHDR((mh), (cmsg)))
+struct cmsghdr* cmsg_find(struct msghdr *mh, int level, int type, socklen_t length);
+
/* Covers only file system and abstract AF_UNIX socket addresses, but not unnamed socket addresses. */
#define SOCKADDR_UN_LEN(sa) \
({ \
diff --git a/src/basic/string-util.c b/src/basic/string-util.c
index 293a15f9c0..5d4510e1b3 100644
--- a/src/basic/string-util.c
+++ b/src/basic/string-util.c
@@ -22,6 +22,7 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "alloc-util.h"
#include "gunicode.h"
@@ -323,6 +324,14 @@ char ascii_tolower(char x) {
return x;
}
+char ascii_toupper(char x) {
+
+ if (x >= 'a' && x <= 'z')
+ return x - 'a' + 'A';
+
+ return x;
+}
+
char *ascii_strlower(char *t) {
char *p;
@@ -334,6 +343,17 @@ char *ascii_strlower(char *t) {
return t;
}
+char *ascii_strupper(char *t) {
+ char *p;
+
+ assert(t);
+
+ for (p = t; *p; p++)
+ *p = ascii_toupper(*p);
+
+ return t;
+}
+
char *ascii_strlower_n(char *t, size_t n) {
size_t i;
@@ -803,25 +823,20 @@ int free_and_strdup(char **p, const char *s) {
return 1;
}
-#pragma GCC push_options
-#pragma GCC optimize("O0")
+/*
+ * Pointer to memset is volatile so that compiler must de-reference
+ * the pointer and can't assume that it points to any function in
+ * particular (such as memset, which it then might further "optimize")
+ * This approach is inspired by openssl's crypto/mem_clr.c.
+ */
+typedef void *(*memset_t)(void *,int,size_t);
-void* memory_erase(void *p, size_t l) {
- volatile uint8_t* x = (volatile uint8_t*) p;
+static volatile memset_t memset_func = memset;
- /* This basically does what memset() does, but hopefully isn't
- * optimized away by the compiler. One of those days, when
- * glibc learns memset_s() we should replace this call by
- * memset_s(), but until then this has to do. */
-
- for (; l > 0; l--)
- *(x++) = 'x';
-
- return p;
+void* memory_erase(void *p, size_t l) {
+ return memset_func(p, 'x', l);
}
-#pragma GCC pop_options
-
char* string_erase(char *x) {
if (!x)
diff --git a/src/basic/string-util.h b/src/basic/string-util.h
index 1209e1e2e1..b75aba63c2 100644
--- a/src/basic/string-util.h
+++ b/src/basic/string-util.h
@@ -137,6 +137,9 @@ char ascii_tolower(char x);
char *ascii_strlower(char *s);
char *ascii_strlower_n(char *s, size_t n);
+char ascii_toupper(char x);
+char *ascii_strupper(char *s);
+
int ascii_strcasecmp_n(const char *a, const char *b, size_t n);
int ascii_strcasecmp_nn(const char *a, size_t n, const char *b, size_t m);
diff --git a/src/basic/user-util.c b/src/basic/user-util.c
index e9d668ddfc..122d9a0c7c 100644
--- a/src/basic/user-util.c
+++ b/src/basic/user-util.c
@@ -29,6 +29,7 @@
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
+#include <utmp.h>
#include "missing.h"
#include "alloc-util.h"
@@ -39,6 +40,7 @@
#include "path-util.h"
#include "string-util.h"
#include "user-util.h"
+#include "utf8.h"
bool uid_is_valid(uid_t uid) {
@@ -479,3 +481,94 @@ int take_etc_passwd_lock(const char *root) {
return fd;
}
+
+bool valid_user_group_name(const char *u) {
+ const char *i;
+ long sz;
+
+ /* Checks if the specified name is a valid user/group name. */
+
+ if (isempty(u))
+ return false;
+
+ if (!(u[0] >= 'a' && u[0] <= 'z') &&
+ !(u[0] >= 'A' && u[0] <= 'Z') &&
+ u[0] != '_')
+ return false;
+
+ for (i = u+1; *i; i++) {
+ if (!(*i >= 'a' && *i <= 'z') &&
+ !(*i >= 'A' && *i <= 'Z') &&
+ !(*i >= '0' && *i <= '9') &&
+ *i != '_' &&
+ *i != '-')
+ return false;
+ }
+
+ sz = sysconf(_SC_LOGIN_NAME_MAX);
+ assert_se(sz > 0);
+
+ if ((size_t) (i-u) > (size_t) sz)
+ return false;
+
+ if ((size_t) (i-u) > UT_NAMESIZE - 1)
+ return false;
+
+ return true;
+}
+
+bool valid_user_group_name_or_id(const char *u) {
+
+ /* Similar as above, but is also fine with numeric UID/GID specifications, as long as they are in the right
+ * range, and not the invalid user ids. */
+
+ if (isempty(u))
+ return false;
+
+ if (valid_user_group_name(u))
+ return true;
+
+ return parse_uid(u, NULL) >= 0;
+}
+
+bool valid_gecos(const char *d) {
+
+ if (!d)
+ return false;
+
+ if (!utf8_is_valid(d))
+ return false;
+
+ if (string_has_cc(d, NULL))
+ return false;
+
+ /* Colons are used as field separators, and hence not OK */
+ if (strchr(d, ':'))
+ return false;
+
+ return true;
+}
+
+bool valid_home(const char *p) {
+
+ if (isempty(p))
+ return false;
+
+ if (!utf8_is_valid(p))
+ return false;
+
+ if (string_has_cc(p, NULL))
+ return false;
+
+ if (!path_is_absolute(p))
+ return false;
+
+ if (!path_is_safe(p))
+ return false;
+
+ /* Colons are used as field separators, and hence not OK */
+ if (strchr(p, ':'))
+ return false;
+
+ return true;
+}
diff --git a/src/basic/user-util.h b/src/basic/user-util.h
index 8026eca3f4..36f71fb004 100644
--- a/src/basic/user-util.h
+++ b/src/basic/user-util.h
@@ -68,3 +68,8 @@ int take_etc_passwd_lock(const char *root);
static inline bool userns_supported(void) {
return access("/proc/self/uid_map", F_OK) >= 0;
}
+
+bool valid_user_group_name(const char *u);
+bool valid_user_group_name_or_id(const char *u);
+bool valid_gecos(const char *d);
+bool valid_home(const char *p);
diff --git a/src/basic/util.c b/src/basic/util.c
index 09d16697b7..9d66d28eb7 100644
--- a/src/basic/util.c
+++ b/src/basic/util.c
@@ -581,47 +581,6 @@ int on_ac_power(void) {
return found_online || !found_offline;
}
-bool id128_is_valid(const char *s) {
- size_t i, l;
-
- l = strlen(s);
- if (l == 32) {
-
- /* Simple formatted 128bit hex string */
-
- for (i = 0; i < l; i++) {
- char c = s[i];
-
- if (!(c >= '0' && c <= '9') &&
- !(c >= 'a' && c <= 'z') &&
- !(c >= 'A' && c <= 'Z'))
- return false;
- }
-
- } else if (l == 36) {
-
- /* Formatted UUID */
-
- for (i = 0; i < l; i++) {
- char c = s[i];
-
- if ((i == 8 || i == 13 || i == 18 || i == 23)) {
- if (c != '-')
- return false;
- } else {
- if (!(c >= '0' && c <= '9') &&
- !(c >= 'a' && c <= 'z') &&
- !(c >= 'A' && c <= 'Z'))
- return false;
- }
- }
-
- } else
- return false;
-
- return true;
-}
-
int container_get_leader(const char *machine, pid_t *pid) {
_cleanup_free_ char *s = NULL, *class = NULL;
const char *p;
@@ -832,6 +791,61 @@ uint64_t physical_memory_scale(uint64_t v, uint64_t max) {
return r;
}
+uint64_t system_tasks_max(void) {
+
+#if SIZEOF_PID_T == 4
+#define TASKS_MAX ((uint64_t) (INT32_MAX-1))
+#elif SIZEOF_PID_T == 2
+#define TASKS_MAX ((uint64_t) (INT16_MAX-1))
+#else
+#error "Unknown pid_t size"
+#endif
+
+ _cleanup_free_ char *value = NULL, *root = NULL;
+ uint64_t a = TASKS_MAX, b = TASKS_MAX;
+
+ /* Determine the maximum number of tasks that may run on this system. We check three sources to determine this
+ * limit:
+ *
+ * a) the maximum value for the pid_t type
+ * b) the cgroups pids_max attribute for the system
+ * c) the kernel's configure maximum PID value
+ *
+ * And then pick the smallest of the three */
+
+ if (read_one_line_file("/proc/sys/kernel/pid_max", &value) >= 0)
+ (void) safe_atou64(value, &a);
+
+ if (cg_get_root_path(&root) >= 0) {
+ value = mfree(value);
+
+ if (cg_get_attribute("pids", root, "pids.max", &value) >= 0)
+ (void) safe_atou64(value, &b);
+ }
+
+ return MIN3(TASKS_MAX,
+ a <= 0 ? TASKS_MAX : a,
+ b <= 0 ? TASKS_MAX : b);
+}
+
+uint64_t system_tasks_max_scale(uint64_t v, uint64_t max) {
+ uint64_t t, m;
+
+ assert(max > 0);
+
+ /* Multiply the system's task value by the fraction v/max. Hence, if max==100 this calculates percentages
+ * relative to the system's maximum number of tasks. Returns UINT64_MAX on overflow. */
+
+ t = system_tasks_max();
+ assert(t > 0);
+
+ m = t * v;
+ if (m / t != v) /* overflow? */
+ return UINT64_MAX;
+
+ return m / max;
+}
+
int update_reboot_parameter_and_warn(const char *param) {
int r;
diff --git a/src/basic/util.h b/src/basic/util.h
index db105197e8..44497dcd78 100644
--- a/src/basic/util.h
+++ b/src/basic/util.h
@@ -176,8 +176,6 @@ static inline unsigned log2u_round_up(unsigned x) {
return log2u(x - 1) + 1;
}
-bool id128_is_valid(const char *s) _pure_;
-
int container_get_leader(const char *machine, pid_t *pid);
int namespace_open(pid_t pid, int *pidns_fd, int *mntns_fd, int *netns_fd, int *userns_fd, int *root_fd);
@@ -186,6 +184,9 @@ int namespace_enter(int pidns_fd, int mntns_fd, int netns_fd, int userns_fd, int
uint64_t physical_memory(void);
uint64_t physical_memory_scale(uint64_t v, uint64_t max);
+uint64_t system_tasks_max(void);
+uint64_t system_tasks_max_scale(uint64_t v, uint64_t max);
+
int update_reboot_parameter_and_warn(const char *param);
int version(void);
diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c
index 7cb2259717..ff8c7a38dd 100644
--- a/src/boot/bootctl.c
+++ b/src/boot/bootctl.c
@@ -26,6 +26,7 @@
#include <ftw.h>
#include <getopt.h>
#include <limits.h>
+#include <linux/magic.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
@@ -42,22 +43,53 @@
#include "fd-util.h"
#include "fileio.h"
#include "locale-util.h"
+#include "parse-util.h"
#include "rm-rf.h"
#include "string-util.h"
+#include "strv.h"
+#include "umask-util.h"
#include "util.h"
+#include "verbs.h"
+#include "virt.h"
+#include "stat-util.h"
+
+static char *arg_path = NULL;
+static bool arg_touch_variables = true;
+
+static int verify_esp(
+ bool searching,
+ const char *p,
+ uint32_t *ret_part,
+ uint64_t *ret_pstart,
+ uint64_t *ret_psize,
+ sd_id128_t *ret_uuid) {
-static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t *psize, sd_id128_t *uuid) {
- struct statfs sfs;
- struct stat st, st2;
- _cleanup_free_ char *t = NULL;
_cleanup_blkid_free_probe_ blkid_probe b = NULL;
- int r;
+ _cleanup_free_ char *t = NULL;
+ uint64_t pstart = 0, psize = 0;
+ struct stat st, st2;
const char *v, *t2;
+ struct statfs sfs;
+ sd_id128_t uuid = SD_ID128_NULL;
+ uint32_t part = 0;
+ int r;
+
+ assert(p);
+
+ if (statfs(p, &sfs) < 0) {
+
+ /* If we are searching for the mount point, don't generate a log message if we can't find the path */
+ if (errno == ENOENT && searching)
+ return -ENOENT;
- if (statfs(p, &sfs) < 0)
return log_error_errno(errno, "Failed to check file system type of \"%s\": %m", p);
+ }
+
+ if (!F_TYPE_EQUAL(sfs.f_type, MSDOS_SUPER_MAGIC)) {
+
+ if (searching)
+ return -EADDRNOTAVAIL;
- if (sfs.f_type != 0x4d44) {
log_error("File system \"%s\" is not a FAT EFI System Partition (ESP) file system.", p);
return -ENODEV;
}
@@ -80,6 +112,11 @@ static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t
return -ENODEV;
}
+ /* In a container we don't have access to block devices, skip this part of the verification, we trust the
+ * container manager set everything up correctly on its own. */
+ if (detect_container() > 0)
+ goto finish;
+
r = asprintf(&t, "/dev/block/%u:%u", major(st.st_dev), minor(st.st_dev));
if (r < 0)
return log_oom();
@@ -117,7 +154,6 @@ static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t
r = errno ? -errno : -EIO;
return log_error_errno(r, "Failed to probe file system type \"%s\": %m", p);
}
-
if (!streq(v, "vfat")) {
log_error("File system \"%s\" is not FAT.", p);
return -ENODEV;
@@ -129,7 +165,6 @@ static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t
r = errno ? -errno : -EIO;
return log_error_errno(r, "Failed to probe partition scheme \"%s\": %m", p);
}
-
if (!streq(v, "gpt")) {
log_error("File system \"%s\" is not on a GPT partition table.", p);
return -ENODEV;
@@ -141,7 +176,6 @@ static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t
r = errno ? -errno : -EIO;
return log_error_errno(r, "Failed to probe partition type UUID \"%s\": %m", p);
}
-
if (!streq(v, "c12a7328-f81f-11d2-ba4b-00a0c93ec93b")) {
log_error("File system \"%s\" has wrong type for an EFI System Partition (ESP).", p);
return -ENODEV;
@@ -153,8 +187,7 @@ static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t
r = errno ? -errno : -EIO;
return log_error_errno(r, "Failed to probe partition entry UUID \"%s\": %m", p);
}
-
- r = sd_id128_from_string(v, uuid);
+ r = sd_id128_from_string(v, &uuid);
if (r < 0) {
log_error("Partition \"%s\" has invalid UUID \"%s\".", p, v);
return -EIO;
@@ -166,7 +199,9 @@ static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t
r = errno ? -errno : -EIO;
return log_error_errno(r, "Failed to probe partition number \"%s\": m", p);
}
- *part = strtoul(v, NULL, 10);
+ r = safe_atou32(v, &part);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse PART_ENTRY_NUMBER field.");
errno = 0;
r = blkid_probe_lookup_value(b, "PART_ENTRY_OFFSET", &v, NULL);
@@ -174,7 +209,9 @@ static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t
r = errno ? -errno : -EIO;
return log_error_errno(r, "Failed to probe partition offset \"%s\": %m", p);
}
- *pstart = strtoul(v, NULL, 10);
+ r = safe_atou64(v, &pstart);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse PART_ENTRY_OFFSET field.");
errno = 0;
r = blkid_probe_lookup_value(b, "PART_ENTRY_SIZE", &v, NULL);
@@ -182,11 +219,50 @@ static int verify_esp(const char *p, uint32_t *part, uint64_t *pstart, uint64_t
r = errno ? -errno : -EIO;
return log_error_errno(r, "Failed to probe partition size \"%s\": %m", p);
}
- *psize = strtoul(v, NULL, 10);
+ r = safe_atou64(v, &psize);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse PART_ENTRY_SIZE field.");
+
+finish:
+ if (ret_part)
+ *ret_part = part;
+ if (ret_pstart)
+ *ret_pstart = pstart;
+ if (ret_psize)
+ *ret_psize = psize;
+ if (ret_uuid)
+ *ret_uuid = uuid;
return 0;
}
+static int find_esp(uint32_t *part, uint64_t *pstart, uint64_t *psize, sd_id128_t *uuid) {
+ const char *path;
+ int r;
+
+ if (arg_path)
+ return verify_esp(false, arg_path, part, pstart, psize, uuid);
+
+ FOREACH_STRING(path, "/efi", "/boot", "/boot/efi") {
+
+ r = verify_esp(true, path, part, pstart, psize, uuid);
+ if (IN_SET(r, -ENOENT, -EADDRNOTAVAIL)) /* This one is not it */
+ continue;
+ if (r < 0)
+ return r;
+
+ arg_path = strdup(path);
+ if (!arg_path)
+ return log_oom();
+
+ log_info("Using EFI System Parition at %s.", path);
+ return 0;
+ }
+
+ log_error("Couldn't find EFI system partition. It is recommended to mount it to /boot. Alternatively, use --path= to specify path to mount point.");
+ return -ENOENT;
+}
+
/* search for "#### LoaderInfo: systemd-boot 218 ####" string inside the binary */
static int get_file_version(int fd, char **v) {
struct stat st;
@@ -199,14 +275,16 @@ static int get_file_version(int fd, char **v) {
assert(v);
if (fstat(fd, &st) < 0)
- return -errno;
+ return log_error_errno(errno, "Failed to stat EFI binary: %m");
- if (st.st_size < 27)
+ if (st.st_size < 27) {
+ *v = NULL;
return 0;
+ }
buf = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if (buf == MAP_FAILED)
- return -errno;
+ return log_error_errno(errno, "Failed to memory map EFI binary: %m");
s = memmem(buf, st.st_size - 8, "#### LoaderInfo: ", 17);
if (!s)
@@ -228,7 +306,7 @@ static int get_file_version(int fd, char **v) {
r = 1;
finish:
- munmap(buf, st.st_size);
+ (void) munmap(buf, st.st_size);
*v = x;
return r;
}
@@ -311,7 +389,7 @@ static int print_efi_option(uint16_t id, bool in_order) {
return r;
/* print only configured entries with partition information */
- if (!path || sd_id128_equal(partition, SD_ID128_NULL))
+ if (!path || sd_id128_is_null(partition))
return 0;
efi_tilt_backslashes(path);
@@ -338,9 +416,10 @@ static int status_variables(void) {
n_options = efi_get_boot_options(&options);
if (n_options == -ENOENT)
- return log_error_errno(ENOENT, "Failed to access EFI variables, efivarfs"
+ return log_error_errno(n_options,
+ "Failed to access EFI variables, efivarfs"
" needs to be available at /sys/firmware/efi/efivars/.");
- else if (n_options < 0)
+ if (n_options < 0)
return log_error_errno(n_options, "Failed to read EFI boot entries: %m");
n_order = efi_get_boot_order(&order);
@@ -360,11 +439,9 @@ static int status_variables(void) {
for (j = 0; j < n_order; j++)
if (options[i] == order[j])
- goto next;
+ continue;
print_efi_option(options[i], false);
- next:
- continue;
}
return 0;
@@ -523,15 +600,6 @@ error:
return r;
}
-static char* strupper(char *s) {
- char *p;
-
- for (p = s; *p; p++)
- *p = toupper(*p);
-
- return s;
-}
-
static int mkdir_one(const char *prefix, const char *suffix) {
char *p;
@@ -554,11 +622,11 @@ static const char *efi_subdirs[] = {
};
static int create_dirs(const char *esp_path) {
+ const char **i;
int r;
- unsigned i;
- for (i = 0; i < ELEMENTSOF(efi_subdirs); i++) {
- r = mkdir_one(esp_path, efi_subdirs[i]);
+ STRV_FOREACH(i, efi_subdirs) {
+ r = mkdir_one(esp_path, *i);
if (r < 0)
return r;
}
@@ -580,7 +648,7 @@ static int copy_one_file(const char *esp_path, const char *name, bool force) {
/* Create the EFI default boot loader name (specified for removable devices) */
v = strjoina(esp_path, "/EFI/BOOT/BOOT", name + strlen("systemd-boot"));
- strupper(strrchr(v, '/') + 1);
+ ascii_strupper(strrchr(v, '/') + 1);
k = copy_file(p, v, force);
if (k < 0 && r == 0)
@@ -751,8 +819,8 @@ static int install_variables(const char *esp_path,
if (access(p, F_OK) < 0) {
if (errno == ENOENT)
return 0;
- else
- return log_error_errno(errno, "Cannot access \"%s\": %m", p);
+
+ return log_error_errno(errno, "Cannot access \"%s\": %m", p);
}
r = find_slot(uuid, path, &slot);
@@ -762,7 +830,7 @@ static int install_variables(const char *esp_path,
"Failed to access EFI variables. Is the \"efivarfs\" filesystem mounted?" :
"Failed to determine current boot order: %m");
- if (first || r == false) {
+ if (first || r == 0) {
r = efi_add_boot_option(slot, "Linux Boot Manager",
part, pstart, psize,
uuid, path);
@@ -872,46 +940,39 @@ static int remove_variables(sd_id128_t uuid, const char *path, bool in_order) {
if (in_order)
return remove_from_order(slot);
- else
- return 0;
+
+ return 0;
}
static int install_loader_config(const char *esp_path) {
- char *p;
- char line[64];
- char *machine = NULL;
- _cleanup_fclose_ FILE *f = NULL, *g = NULL;
- f = fopen("/etc/machine-id", "re");
- if (!f)
- return errno == ENOENT ? 0 : -errno;
+ _cleanup_fclose_ FILE *f = NULL;
+ char machine_string[SD_ID128_STRING_MAX];
+ sd_id128_t machine_id;
+ const char *p;
+ int r;
- if (fgets(line, sizeof(line), f) != NULL) {
- char *s;
+ r = sd_id128_get_machine(&machine_id);
+ if (r < 0)
+ return log_error_errno(r, "Failed to get machine did: %m");
- s = strchr(line, '\n');
- if (s)
- s[0] = '\0';
- if (strlen(line) == 32)
- machine = line;
- }
+ p = strjoina(esp_path, "/loader/loader.conf");
+ f = fopen(p, "wxe");
+ if (!f)
+ return log_error_errno(errno, "Failed to open loader.conf for writing: %m");
- if (!machine)
- return -ESRCH;
+ fprintf(f, "#timeout 3\n");
+ fprintf(f, "default %s-*\n", sd_id128_to_string(machine_id, machine_string));
- p = strjoina(esp_path, "/loader/loader.conf");
- g = fopen(p, "wxe");
- if (g) {
- fprintf(g, "#timeout 3\n");
- fprintf(g, "default %s-*\n", machine);
- if (ferror(g))
- return log_error_errno(EIO, "Failed to write \"%s\": %m", p);
- }
+ r = fflush_and_check(f);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write \"%s\": %m", p);
return 0;
}
-static int help(void) {
+static int help(int argc, char *argv[], void *userdata) {
+
printf("%s [COMMAND] [OPTIONS...]\n"
"\n"
"Install, update or remove the systemd-boot EFI boot manager.\n\n"
@@ -930,9 +991,6 @@ static int help(void) {
return 0;
}
-static const char *arg_path = "/boot";
-static bool arg_touch_variables = true;
-
static int parse_argv(int argc, char *argv[]) {
enum {
ARG_PATH = 0x100,
@@ -948,7 +1006,7 @@ static int parse_argv(int argc, char *argv[]) {
{ NULL, 0, NULL, 0 }
};
- int c;
+ int c, r;
assert(argc >= 0);
assert(argv);
@@ -957,14 +1015,16 @@ static int parse_argv(int argc, char *argv[]) {
switch (c) {
case 'h':
- help();
+ help(0, NULL, NULL);
return 0;
case ARG_VERSION:
return version();
case ARG_PATH:
- arg_path = optarg;
+ r = free_and_strdup(&arg_path, optarg);
+ if (r < 0)
+ return log_oom();
break;
case ARG_NO_VARIABLES:
@@ -989,149 +1049,170 @@ static void read_loader_efi_var(const char *name, char **var) {
log_warning_errno(r, "Failed to read EFI variable %s: %m", name);
}
-static int bootctl_main(int argc, char*argv[]) {
- enum action {
- ACTION_STATUS,
- ACTION_INSTALL,
- ACTION_UPDATE,
- ACTION_REMOVE
- } arg_action = ACTION_STATUS;
- static const struct {
- const char* verb;
- enum action action;
- } verbs[] = {
- { "status", ACTION_STATUS },
- { "install", ACTION_INSTALL },
- { "update", ACTION_UPDATE },
- { "remove", ACTION_REMOVE },
- };
+static int must_be_root(void) {
- sd_id128_t uuid = {};
- uint32_t part = 0;
- uint64_t pstart = 0, psize = 0;
- int r, q;
+ if (geteuid() == 0)
+ return 0;
- if (argv[optind]) {
- unsigned i;
+ log_error("Need to be root.");
+ return -EPERM;
+}
- for (i = 0; i < ELEMENTSOF(verbs); i++) {
- if (!streq(argv[optind], verbs[i].verb))
- continue;
- arg_action = verbs[i].action;
- break;
- }
- if (i >= ELEMENTSOF(verbs)) {
- log_error("Unknown operation \"%s\"", argv[optind]);
- return -EINVAL;
- }
- }
+static int verb_status(int argc, char *argv[], void *userdata) {
- if (geteuid() != 0)
- return log_error_errno(EPERM, "Need to be root.");
+ sd_id128_t uuid = SD_ID128_NULL;
+ int r;
- r = verify_esp(arg_path, &part, &pstart, &psize, &uuid);
- if (r == -ENODEV && !arg_path)
- log_notice("You might want to use --path= to indicate the path to your ESP, in case it is not mounted on /boot.");
+ r = must_be_root();
if (r < 0)
return r;
- switch (arg_action) {
- case ACTION_STATUS: {
- _cleanup_free_ char *fw_type = NULL;
- _cleanup_free_ char *fw_info = NULL;
- _cleanup_free_ char *loader = NULL;
- _cleanup_free_ char *loader_path = NULL;
- sd_id128_t loader_part_uuid = {};
-
- if (is_efi_boot()) {
- read_loader_efi_var("LoaderFirmwareType", &fw_type);
- read_loader_efi_var("LoaderFirmwareInfo", &fw_info);
- read_loader_efi_var("LoaderInfo", &loader);
- read_loader_efi_var("LoaderImageIdentifier", &loader_path);
- if (loader_path)
- efi_tilt_backslashes(loader_path);
- r = efi_loader_get_device_part_uuid(&loader_part_uuid);
- if (r < 0 && r == -ENOENT)
- log_warning_errno(r, "Failed to read EFI variable LoaderDevicePartUUID: %m");
-
- printf("System:\n");
- printf(" Firmware: %s (%s)\n", strna(fw_type), strna(fw_info));
-
- r = is_efi_secure_boot();
- if (r < 0)
- log_warning_errno(r, "Failed to query secure boot status: %m");
- else
- printf(" Secure Boot: %s\n", r ? "enabled" : "disabled");
+ r = find_esp(NULL, NULL, NULL, &uuid);
+ if (r < 0)
+ return r;
- r = is_efi_secure_boot_setup_mode();
- if (r < 0)
- log_warning_errno(r, "Failed to query secure boot mode: %m");
- else
- printf(" Setup Mode: %s\n", r ? "setup" : "user");
- printf("\n");
-
- printf("Loader:\n");
- printf(" Product: %s\n", strna(loader));
- if (!sd_id128_equal(loader_part_uuid, SD_ID128_NULL))
- printf(" Partition: /dev/disk/by-partuuid/%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\n",
- SD_ID128_FORMAT_VAL(loader_part_uuid));
- else
- printf(" Partition: n/a\n");
- printf(" File: %s%s\n", special_glyph(TREE_RIGHT), strna(loader_path));
- printf("\n");
- } else
- printf("System:\n Not booted with EFI\n");
-
- r = status_binaries(arg_path, uuid);
+ if (is_efi_boot()) {
+ _cleanup_free_ char *fw_type = NULL, *fw_info = NULL, *loader = NULL, *loader_path = NULL;
+ sd_id128_t loader_part_uuid = SD_ID128_NULL;
+
+ read_loader_efi_var("LoaderFirmwareType", &fw_type);
+ read_loader_efi_var("LoaderFirmwareInfo", &fw_info);
+ read_loader_efi_var("LoaderInfo", &loader);
+ read_loader_efi_var("LoaderImageIdentifier", &loader_path);
+
+ if (loader_path)
+ efi_tilt_backslashes(loader_path);
+
+ r = efi_loader_get_device_part_uuid(&loader_part_uuid);
+ if (r < 0 && r != -ENOENT)
+ log_warning_errno(r, "Failed to read EFI variable LoaderDevicePartUUID: %m");
+
+ printf("System:\n");
+ printf(" Firmware: %s (%s)\n", strna(fw_type), strna(fw_info));
+
+ r = is_efi_secure_boot();
if (r < 0)
- return r;
+ log_warning_errno(r, "Failed to query secure boot status: %m");
+ else
+ printf(" Secure Boot: %s\n", r ? "enabled" : "disabled");
- if (arg_touch_variables)
- r = status_variables();
- break;
- }
+ r = is_efi_secure_boot_setup_mode();
+ if (r < 0)
+ log_warning_errno(r, "Failed to query secure boot mode: %m");
+ else
+ printf(" Setup Mode: %s\n", r ? "setup" : "user");
+ printf("\n");
+
+ printf("Loader:\n");
+ printf(" Product: %s\n", strna(loader));
+ if (!sd_id128_is_null(loader_part_uuid))
+ printf(" Partition: /dev/disk/by-partuuid/%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x\n",
+ SD_ID128_FORMAT_VAL(loader_part_uuid));
+ else
+ printf(" Partition: n/a\n");
+ printf(" File: %s%s\n", special_glyph(TREE_RIGHT), strna(loader_path));
+ printf("\n");
+ } else
+ printf("System:\n Not booted with EFI\n");
- case ACTION_INSTALL:
- case ACTION_UPDATE:
- umask(0002);
+ r = status_binaries(arg_path, uuid);
+ if (r < 0)
+ return r;
+
+ if (arg_touch_variables)
+ r = status_variables();
- r = install_binaries(arg_path, arg_action == ACTION_INSTALL);
+ return r;
+}
+
+static int verb_install(int argc, char *argv[], void *userdata) {
+
+ sd_id128_t uuid = SD_ID128_NULL;
+ uint64_t pstart = 0, psize = 0;
+ uint32_t part = 0;
+ bool install;
+ int r;
+
+ r = must_be_root();
+ if (r < 0)
+ return r;
+
+ r = find_esp(&part, &pstart, &psize, &uuid);
+ if (r < 0)
+ return r;
+
+ install = streq(argv[0], "install");
+
+ RUN_WITH_UMASK(0002) {
+ r = install_binaries(arg_path, install);
if (r < 0)
return r;
- if (arg_action == ACTION_INSTALL) {
+ if (install) {
r = install_loader_config(arg_path);
if (r < 0)
return r;
}
+ }
- if (arg_touch_variables)
- r = install_variables(arg_path,
- part, pstart, psize, uuid,
- "/EFI/systemd/systemd-boot" EFI_MACHINE_TYPE_NAME ".efi",
- arg_action == ACTION_INSTALL);
- break;
+ if (arg_touch_variables)
+ r = install_variables(arg_path,
+ part, pstart, psize, uuid,
+ "/EFI/systemd/systemd-boot" EFI_MACHINE_TYPE_NAME ".efi",
+ install);
- case ACTION_REMOVE:
- r = remove_binaries(arg_path);
+ return r;
+}
- if (arg_touch_variables) {
- q = remove_variables(uuid, "/EFI/systemd/systemd-boot" EFI_MACHINE_TYPE_NAME ".efi", true);
- if (q < 0 && r == 0)
- r = q;
- }
- break;
+static int verb_remove(int argc, char *argv[], void *userdata) {
+ sd_id128_t uuid = SD_ID128_NULL;
+ int r;
+
+ r = must_be_root();
+ if (r < 0)
+ return r;
+
+ r = find_esp(NULL, NULL, NULL, &uuid);
+ if (r < 0)
+ return r;
+
+ r = remove_binaries(arg_path);
+
+ if (arg_touch_variables) {
+ int q;
+
+ q = remove_variables(uuid, "/EFI/systemd/systemd-boot" EFI_MACHINE_TYPE_NAME ".efi", true);
+ if (q < 0 && r == 0)
+ r = q;
}
return r;
}
+static int bootctl_main(int argc, char *argv[]) {
+
+ static const Verb verbs[] = {
+ { "help", VERB_ANY, VERB_ANY, 0, help },
+ { "status", VERB_ANY, 1, VERB_DEFAULT, verb_status },
+ { "install", VERB_ANY, 1, 0, verb_install },
+ { "update", VERB_ANY, 1, 0, verb_install },
+ { "remove", VERB_ANY, 1, 0, verb_remove },
+ {}
+ };
+
+ return dispatch_verb(argc, argv, verbs, NULL);
+}
+
int main(int argc, char *argv[]) {
int r;
log_parse_environment();
log_open();
+ /* If we run in a container, automatically turn of EFI file system access */
+ if (detect_container() > 0)
+ arg_touch_variables = false;
+
r = parse_argv(argc, argv);
if (r <= 0)
goto finish;
@@ -1139,5 +1220,6 @@ int main(int argc, char *argv[]) {
r = bootctl_main(argc, argv);
finish:
+ free(arg_path);
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
}
diff --git a/src/core/automount.c b/src/core/automount.c
index 85803a9c4a..4e9891569c 100644
--- a/src/core/automount.c
+++ b/src/core/automount.c
@@ -98,9 +98,6 @@ static void unmount_autofs(Automount *a) {
if (a->pipe_fd < 0)
return;
- automount_send_ready(a, a->tokens, -EHOSTDOWN);
- automount_send_ready(a, a->expire_tokens, -EHOSTDOWN);
-
a->pipe_event_source = sd_event_source_unref(a->pipe_event_source);
a->pipe_fd = safe_close(a->pipe_fd);
@@ -109,6 +106,9 @@ static void unmount_autofs(Automount *a) {
if (a->where &&
(UNIT(a)->manager->exit_code != MANAGER_RELOAD &&
UNIT(a)->manager->exit_code != MANAGER_REEXECUTE)) {
+ automount_send_ready(a, a->tokens, -EHOSTDOWN);
+ automount_send_ready(a, a->expire_tokens, -EHOSTDOWN);
+
r = repeat_unmount(a->where, MNT_DETACH);
if (r < 0)
log_error_errno(r, "Failed to unmount: %m");
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index 94d1161605..c19e43f571 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -800,7 +800,10 @@ static void cgroup_context_apply(Unit *u, CGroupMask mask, ManagerState state) {
"/dev/random\0" "rwm\0"
"/dev/urandom\0" "rwm\0"
"/dev/tty\0" "rwm\0"
- "/dev/pts/ptmx\0" "rw\0"; /* /dev/pts/ptmx may not be duplicated, but accessed */
+ "/dev/pts/ptmx\0" "rw\0" /* /dev/pts/ptmx may not be duplicated, but accessed */
+ /* Allow /run/systemd/inaccessible/{chr,blk} devices for mapping InaccessiblePaths */
+ "/run/systemd/inaccessible/chr\0" "rwm\0"
+ "/run/systemd/inaccessible/blk\0" "rwm\0";
const char *x, *y;
@@ -1705,7 +1708,7 @@ int manager_setup_cgroup(Manager *m) {
/* also, move all other userspace processes remaining
* in the root cgroup into that scope. */
- r = cg_migrate(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_root, SYSTEMD_CGROUP_CONTROLLER, scope_path, false);
+ r = cg_migrate(SYSTEMD_CGROUP_CONTROLLER, m->cgroup_root, SYSTEMD_CGROUP_CONTROLLER, scope_path, 0);
if (r < 0)
log_warning_errno(r, "Couldn't move remaining userspace processes, ignoring: %m");
diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c
index 6167ce92cd..85b0c86a2f 100644
--- a/src/core/dbus-cgroup.c
+++ b/src/core/dbus-cgroup.c
@@ -856,7 +856,7 @@ int bus_cgroup_set_property(
return 1;
- } else if (STR_IN_SET(name, "MemoryLowByPhysicalMemory", "MemoryHighByPhysicalMemory", "MemoryMaxByPhysicalMemory")) {
+ } else if (STR_IN_SET(name, "MemoryLowScale", "MemoryHighScale", "MemoryMaxScale")) {
uint32_t raw;
uint64_t v;
@@ -872,7 +872,7 @@ int bus_cgroup_set_property(
const char *e;
/* Chop off suffix */
- assert_se(e = endswith(name, "ByPhysicalMemory"));
+ assert_se(e = endswith(name, "Scale"));
name = strndupa(name, e - name);
if (streq(name, "MemoryLow"))
@@ -883,7 +883,8 @@ int bus_cgroup_set_property(
c->memory_max = v;
unit_invalidate_cgroup(u, CGROUP_MASK_MEMORY);
- unit_write_drop_in_private_format(u, mode, name, "%s=%" PRIu32 "%%", name, (uint32_t) (DIV_ROUND_UP((uint64_t) raw * 100, (uint64_t) UINT32_MAX)));
+ unit_write_drop_in_private_format(u, mode, name, "%s=%" PRIu32 "%%", name,
+ (uint32_t) (DIV_ROUND_UP((uint64_t) raw * 100U, (uint64_t) UINT32_MAX)));
}
return 1;
@@ -909,7 +910,7 @@ int bus_cgroup_set_property(
return 1;
- } else if (streq(name, "MemoryLimitByPhysicalMemory")) {
+ } else if (streq(name, "MemoryLimitScale")) {
uint64_t limit;
uint32_t raw;
@@ -924,7 +925,8 @@ int bus_cgroup_set_property(
if (mode != UNIT_CHECK) {
c->memory_limit = limit;
unit_invalidate_cgroup(u, CGROUP_MASK_MEMORY);
- unit_write_drop_in_private_format(u, mode, "MemoryLimit", "MemoryLimit=%" PRIu32 "%%", (uint32_t) (DIV_ROUND_UP((uint64_t) raw * 100, (uint64_t) UINT32_MAX)));
+ unit_write_drop_in_private_format(u, mode, "MemoryLimit", "MemoryLimit=%" PRIu32 "%%",
+ (uint32_t) (DIV_ROUND_UP((uint64_t) raw * 100U, (uint64_t) UINT32_MAX)));
}
return 1;
@@ -1060,6 +1062,8 @@ int bus_cgroup_set_property(
r = sd_bus_message_read(message, "t", &limit);
if (r < 0)
return r;
+ if (limit <= 0)
+ return sd_bus_error_set_errnof(error, EINVAL, "%s= is too small", name);
if (mode != UNIT_CHECK) {
c->tasks_max = limit;
@@ -1072,6 +1076,26 @@ int bus_cgroup_set_property(
}
return 1;
+ } else if (streq(name, "TasksMaxScale")) {
+ uint64_t limit;
+ uint32_t raw;
+
+ r = sd_bus_message_read(message, "u", &raw);
+ if (r < 0)
+ return r;
+
+ limit = system_tasks_max_scale(raw, UINT32_MAX);
+ if (limit <= 0 || limit >= UINT64_MAX)
+ return sd_bus_error_set_errnof(error, EINVAL, "%s= is out of range", name);
+
+ if (mode != UNIT_CHECK) {
+ c->tasks_max = limit;
+ unit_invalidate_cgroup(u, CGROUP_MASK_PIDS);
+ unit_write_drop_in_private_format(u, mode, name, "TasksMax=%" PRIu32 "%%",
+ (uint32_t) (DIV_ROUND_UP((uint64_t) raw * 100U, (uint64_t) UINT32_MAX)));
+ }
+
+ return 1;
}
if (u->transient && u->load_state == UNIT_STUB) {
diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c
index 307c3d8e7a..9c50cd93e5 100644
--- a/src/core/dbus-execute.c
+++ b/src/core/dbus-execute.c
@@ -44,6 +44,7 @@
#endif
#include "strv.h"
#include "syslog-util.h"
+#include "user-util.h"
#include "utf8.h"
BUS_DEFINE_PROPERTY_GET_ENUM(bus_property_get_exec_output, exec_output, ExecOutput);
@@ -693,6 +694,7 @@ const sd_bus_vtable bus_exec_vtable[] = {
SD_BUS_PROPERTY("AmbientCapabilities", "t", property_get_ambient_capabilities, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("User", "s", NULL, offsetof(ExecContext, user), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("Group", "s", NULL, offsetof(ExecContext, group), SD_BUS_VTABLE_PROPERTY_CONST),
+ SD_BUS_PROPERTY("DynamicUser", "b", bus_property_get_bool, offsetof(ExecContext, dynamic_user), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("SupplementaryGroups", "as", NULL, offsetof(ExecContext, supplementary_groups), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("PAMName", "s", NULL, offsetof(ExecContext, pam_name), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("ReadWriteDirectories", "as", NULL, offsetof(ExecContext, read_write_paths), SD_BUS_VTABLE_PROPERTY_CONST|SD_BUS_VTABLE_HIDDEN),
@@ -840,6 +842,9 @@ int bus_exec_context_set_transient_property(
if (r < 0)
return r;
+ if (!isempty(uu) && !valid_user_group_name_or_id(uu))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid user name: %s", uu);
+
if (mode != UNIT_CHECK) {
if (isempty(uu))
@@ -859,6 +864,9 @@ int bus_exec_context_set_transient_property(
if (r < 0)
return r;
+ if (!isempty(gg) && !valid_user_group_name_or_id(gg))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid group name: %s", gg);
+
if (mode != UNIT_CHECK) {
if (isempty(gg))
@@ -1061,7 +1069,8 @@ int bus_exec_context_set_transient_property(
} else if (STR_IN_SET(name,
"IgnoreSIGPIPE", "TTYVHangup", "TTYReset",
"PrivateTmp", "PrivateDevices", "PrivateNetwork",
- "NoNewPrivileges", "SyslogLevelPrefix", "MemoryDenyWriteExecute", "RestrictRealtime")) {
+ "NoNewPrivileges", "SyslogLevelPrefix", "MemoryDenyWriteExecute",
+ "RestrictRealtime", "DynamicUser")) {
int b;
r = sd_bus_message_read(message, "b", &b);
@@ -1089,6 +1098,8 @@ int bus_exec_context_set_transient_property(
c->memory_deny_write_execute = b;
else if (streq(name, "RestrictRealtime"))
c->restrict_realtime = b;
+ else if (streq(name, "DynamicUser"))
+ c->dynamic_user = b;
unit_write_drop_in_private_format(u, mode, name, "%s=%s", name, yes_no(b));
}
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
index d05968bd65..ef05a75a8b 100644
--- a/src/core/dbus-manager.c
+++ b/src/core/dbus-manager.c
@@ -43,6 +43,7 @@
#include "string-util.h"
#include "strv.h"
#include "syslog-util.h"
+#include "user-util.h"
#include "virt.h"
#include "watchdog.h"
@@ -1511,8 +1512,8 @@ static int method_unset_and_set_environment(sd_bus_message *message, void *userd
}
static int method_set_exit_code(sd_bus_message *message, void *userdata, sd_bus_error *error) {
- uint8_t code;
Manager *m = userdata;
+ uint8_t code;
int r;
assert(message);
@@ -1534,6 +1535,61 @@ static int method_set_exit_code(sd_bus_message *message, void *userdata, sd_bus_
return sd_bus_reply_method_return(message, NULL);
}
+static int method_lookup_dynamic_user_by_name(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+ Manager *m = userdata;
+ const char *name;
+ uid_t uid;
+ int r;
+
+ assert(message);
+ assert(m);
+
+ r = sd_bus_message_read_basic(message, 's', &name);
+ if (r < 0)
+ return r;
+
+ if (!MANAGER_IS_SYSTEM(m))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Dynamic users are only supported in the system instance.");
+ if (!valid_user_group_name(name))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "User name invalid: %s", name);
+
+ r = dynamic_user_lookup_name(m, name, &uid);
+ if (r == -ESRCH)
+ return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_DYNAMIC_USER, "Dynamic user %s does not exist.", name);
+ if (r < 0)
+ return r;
+
+ return sd_bus_reply_method_return(message, "u", (uint32_t) uid);
+}
+
+static int method_lookup_dynamic_user_by_uid(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+ _cleanup_free_ char *name = NULL;
+ Manager *m = userdata;
+ uid_t uid;
+ int r;
+
+ assert(message);
+ assert(m);
+
+ assert_cc(sizeof(uid) == sizeof(uint32_t));
+ r = sd_bus_message_read_basic(message, 'u', &uid);
+ if (r < 0)
+ return r;
+
+ if (!MANAGER_IS_SYSTEM(m))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_NOT_SUPPORTED, "Dynamic users are only supported in the system instance.");
+ if (!uid_is_valid(uid))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "User ID invalid: " UID_FMT, uid);
+
+ r = dynamic_user_lookup_uid(m, uid, &name);
+ if (r == -ESRCH)
+ return sd_bus_error_setf(error, BUS_ERROR_NO_SUCH_DYNAMIC_USER, "Dynamic user ID " UID_FMT " does not exist.", uid);
+ if (r < 0)
+ return r;
+
+ return sd_bus_reply_method_return(message, "s", name);
+}
+
static int list_unit_files_by_patterns(sd_bus_message *message, void *userdata, sd_bus_error *error, char **states, char **patterns) {
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
Manager *m = userdata;
@@ -2199,6 +2255,8 @@ const sd_bus_vtable bus_manager_vtable[] = {
SD_BUS_METHOD("PresetAllUnitFiles", "sbb", "a(sss)", method_preset_all_unit_files, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_METHOD("AddDependencyUnitFiles", "asssbb", "a(sss)", method_add_dependency_unit_files, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_METHOD("SetExitCode", "y", NULL, method_set_exit_code, SD_BUS_VTABLE_UNPRIVILEGED),
+ SD_BUS_METHOD("LookupDynamicUserByName", "s", "u", method_lookup_dynamic_user_by_name, SD_BUS_VTABLE_UNPRIVILEGED),
+ SD_BUS_METHOD("LookupDynamicUserByUID", "u", "s", method_lookup_dynamic_user_by_uid, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_SIGNAL("UnitNew", "so", 0),
SD_BUS_SIGNAL("UnitRemoved", "so", 0),
diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c
index f557eedfc3..1abaf9f658 100644
--- a/src/core/dbus-scope.c
+++ b/src/core/dbus-scope.c
@@ -225,5 +225,5 @@ int bus_scope_send_request_stop(Scope *s) {
if (r < 0)
return r;
- return sd_bus_send_to(UNIT(s)->manager->api_bus, m, /* s->controller */ NULL, NULL);
+ return sd_bus_send_to(UNIT(s)->manager->api_bus, m, s->controller, NULL);
}
diff --git a/src/core/dynamic-user.c b/src/core/dynamic-user.c
new file mode 100644
index 0000000000..8035bee231
--- /dev/null
+++ b/src/core/dynamic-user.c
@@ -0,0 +1,763 @@
+/***
+ This file is part of systemd.
+
+ Copyright 2016 Lennart Poettering
+
+ systemd is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <grp.h>
+#include <pwd.h>
+#include <sys/file.h>
+
+#include "dynamic-user.h"
+#include "fd-util.h"
+#include "fs-util.h"
+#include "parse-util.h"
+#include "random-util.h"
+#include "stdio-util.h"
+#include "string-util.h"
+#include "user-util.h"
+#include "fileio.h"
+
+/* Let's pick a UIDs within the 16bit range, so that we are compatible with containers using 16bit user namespacing. At
+ * least on Fedora normal users are allocated until UID 60000, hence do not allocate from below this. Also stay away
+ * from the upper end of the range as that is often used for overflow/nobody users. */
+#define UID_PICK_MIN ((uid_t) UINT32_C(0x0000EF00))
+#define UID_PICK_MAX ((uid_t) UINT32_C(0x0000FFEF))
+
+/* Takes a value generated randomly or by hashing and turns it into a UID in the right range */
+#define UID_CLAMP_INTO_RANGE(rnd) (((uid_t) (rnd) % (UID_PICK_MAX - UID_PICK_MIN + 1)) + UID_PICK_MIN)
+
+static DynamicUser* dynamic_user_free(DynamicUser *d) {
+ if (!d)
+ return NULL;
+
+ if (d->manager)
+ (void) hashmap_remove(d->manager->dynamic_users, d->name);
+
+ safe_close_pair(d->storage_socket);
+ free(d);
+
+ return NULL;
+}
+
+static int dynamic_user_add(Manager *m, const char *name, int storage_socket[2], DynamicUser **ret) {
+ DynamicUser *d = NULL;
+ int r;
+
+ assert(m);
+ assert(name);
+ assert(storage_socket);
+
+ r = hashmap_ensure_allocated(&m->dynamic_users, &string_hash_ops);
+ if (r < 0)
+ return r;
+
+ d = malloc0(offsetof(DynamicUser, name) + strlen(name) + 1);
+ if (!d)
+ return -ENOMEM;
+
+ strcpy(d->name, name);
+
+ d->storage_socket[0] = storage_socket[0];
+ d->storage_socket[1] = storage_socket[1];
+
+ r = hashmap_put(m->dynamic_users, d->name, d);
+ if (r < 0) {
+ free(d);
+ return r;
+ }
+
+ d->manager = m;
+
+ if (ret)
+ *ret = d;
+
+ return 0;
+}
+
+int dynamic_user_acquire(Manager *m, const char *name, DynamicUser** ret) {
+ _cleanup_close_pair_ int storage_socket[2] = { -1, -1 };
+ DynamicUser *d;
+ int r;
+
+ assert(m);
+ assert(name);
+
+ /* Return the DynamicUser structure for a specific user name. Note that this won't actually allocate a UID for
+ * it, but just prepare the data structure for it. The UID is allocated only on demand, when it's really
+ * needed, and in the child process we fork off, since allocation involves NSS checks which are not OK to do
+ * from PID 1. To allow the children and PID 1 share information about allocated UIDs we use an anonymous
+ * AF_UNIX/SOCK_DGRAM socket (called the "storage socket") that contains at most one datagram with the
+ * allocated UID number, plus an fd referencing the lock file for the UID
+ * (i.e. /run/systemd/dynamic-uid/$UID). Why involve the socket pair? So that PID 1 and all its children can
+ * share the same storage for the UID and lock fd, simply by inheriting the storage socket fds. The socket pair
+ * may exist in three different states:
+ *
+ * a) no datagram stored. This is the initial state. In this case the dynamic user was never realized.
+ *
+ * b) a datagram containing a UID stored, but no lock fd attached to it. In this case there was already a
+ * statically assigned UID by the same name, which we are reusing.
+ *
+ * c) a datagram containing a UID stored, and a lock fd is attached to it. In this case we allocated a dynamic
+ * UID and locked it in the file system, using the lock fd.
+ *
+ * As PID 1 and various children might access the socket pair simultaneously, and pop the datagram or push it
+ * back in any time, we also maintain a lock on the socket pair. Note one peculiarity regarding locking here:
+ * the UID lock on disk is protected via a BSD file lock (i.e. an fd-bound lock), so that the lock is kept in
+ * place as long as there's a reference to the fd open. The lock on the storage socket pair however is a POSIX
+ * file lock (i.e. a process-bound lock), as all users share the same fd of this (after all it is anonymous,
+ * nobody else could get any access to it except via our own fd) and we want to synchronize access between all
+ * processes that have access to it. */
+
+ d = hashmap_get(m->dynamic_users, name);
+ if (d) {
+ /* We already have a structure for the dynamic user, let's increase the ref count and reuse it */
+ d->n_ref++;
+ *ret = d;
+ return 0;
+ }
+
+ if (!valid_user_group_name_or_id(name))
+ return -EINVAL;
+
+ if (socketpair(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0, storage_socket) < 0)
+ return -errno;
+
+ r = dynamic_user_add(m, name, storage_socket, &d);
+ if (r < 0)
+ return r;
+
+ storage_socket[0] = storage_socket[1] = -1;
+
+ if (ret) {
+ d->n_ref++;
+ *ret = d;
+ }
+
+ return 1;
+}
+
+static int pick_uid(const char *name, uid_t *ret_uid) {
+
+ static const uint8_t hash_key[] = {
+ 0x37, 0x53, 0x7e, 0x31, 0xcf, 0xce, 0x48, 0xf5,
+ 0x8a, 0xbb, 0x39, 0x57, 0x8d, 0xd9, 0xec, 0x59
+ };
+
+ unsigned n_tries = 100;
+ uid_t candidate;
+ int r;
+
+ /* A static user by this name does not exist yet. Let's find a free ID then, and use that. We start with a UID
+ * generated as hash from the user name. */
+ candidate = UID_CLAMP_INTO_RANGE(siphash24(name, strlen(name), hash_key));
+
+ (void) mkdir("/run/systemd/dynamic-uid", 0755);
+
+ for (;;) {
+ char lock_path[strlen("/run/systemd/dynamic-uid/") + DECIMAL_STR_MAX(uid_t) + 1];
+ _cleanup_close_ int lock_fd = -1;
+ ssize_t l;
+
+ if (--n_tries <= 0) /* Give up retrying eventually */
+ return -EBUSY;
+
+ if (candidate < UID_PICK_MIN || candidate > UID_PICK_MAX)
+ goto next;
+
+ xsprintf(lock_path, "/run/systemd/dynamic-uid/" UID_FMT, candidate);
+
+ for (;;) {
+ struct stat st;
+
+ lock_fd = open(lock_path, O_CREAT|O_RDWR|O_NOFOLLOW|O_CLOEXEC|O_NOCTTY, 0600);
+ if (lock_fd < 0)
+ return -errno;
+
+ r = flock(lock_fd, LOCK_EX|LOCK_NB); /* Try to get a BSD file lock on the UID lock file */
+ if (r < 0) {
+ if (errno == EBUSY || errno == EAGAIN)
+ goto next; /* already in use */
+
+ return -errno;
+ }
+
+ if (fstat(lock_fd, &st) < 0)
+ return -errno;
+ if (st.st_nlink > 0)
+ break;
+
+ /* Oh, bummer, we got got the lock, but the file was unlinked between the time we opened it and
+ * got the lock. Close it, and try again. */
+ lock_fd = safe_close(lock_fd);
+ }
+
+ /* Some superficial check whether this UID/GID might already be taken by some static user */
+ if (getpwuid(candidate) || getgrgid((gid_t) candidate)) {
+ (void) unlink(lock_path);
+ goto next;
+ }
+
+ /* Let's store the user name in the lock file, so that we can use it for looking up the username for a UID */
+ l = pwritev(lock_fd,
+ (struct iovec[2]) {
+ { .iov_base = (char*) name, .iov_len = strlen(name) },
+ { .iov_base = (char[1]) { '\n' }, .iov_len = 1 }
+ }, 2, 0);
+ if (l < 0) {
+ (void) unlink(lock_path);
+ return -errno;
+ }
+
+ (void) ftruncate(lock_fd, l);
+
+ *ret_uid = candidate;
+ r = lock_fd;
+ lock_fd = -1;
+
+ return r;
+
+ next:
+ /* Pick another random UID, and see if that works for us. */
+ random_bytes(&candidate, sizeof(candidate));
+ candidate = UID_CLAMP_INTO_RANGE(candidate);
+ }
+}
+
+static int dynamic_user_pop(DynamicUser *d, uid_t *ret_uid, int *ret_lock_fd) {
+ uid_t uid = UID_INVALID;
+ struct iovec iov = {
+ .iov_base = &uid,
+ .iov_len = sizeof(uid),
+ };
+ union {
+ struct cmsghdr cmsghdr;
+ uint8_t buf[CMSG_SPACE(sizeof(int))];
+ } control = {};
+ struct msghdr mh = {
+ .msg_control = &control,
+ .msg_controllen = sizeof(control),
+ .msg_iov = &iov,
+ .msg_iovlen = 1,
+ };
+ struct cmsghdr *cmsg;
+
+ ssize_t k;
+ int lock_fd = -1;
+
+ assert(d);
+ assert(ret_uid);
+ assert(ret_lock_fd);
+
+ /* Read the UID and lock fd that is stored in the storage AF_UNIX socket. This should be called with the lock
+ * on the socket taken. */
+
+ k = recvmsg(d->storage_socket[0], &mh, MSG_DONTWAIT|MSG_NOSIGNAL|MSG_CMSG_CLOEXEC);
+ if (k < 0)
+ return -errno;
+
+ cmsg = cmsg_find(&mh, SOL_SOCKET, SCM_RIGHTS, CMSG_LEN(sizeof(int)));
+ if (cmsg)
+ lock_fd = *(int*) CMSG_DATA(cmsg);
+ else
+ cmsg_close_all(&mh); /* just in case... */
+
+ *ret_uid = uid;
+ *ret_lock_fd = lock_fd;
+
+ return 0;
+}
+
+static int dynamic_user_push(DynamicUser *d, uid_t uid, int lock_fd) {
+ struct iovec iov = {
+ .iov_base = &uid,
+ .iov_len = sizeof(uid),
+ };
+ union {
+ struct cmsghdr cmsghdr;
+ uint8_t buf[CMSG_SPACE(sizeof(int))];
+ } control = {};
+ struct msghdr mh = {
+ .msg_control = &control,
+ .msg_controllen = sizeof(control),
+ .msg_iov = &iov,
+ .msg_iovlen = 1,
+ };
+ ssize_t k;
+
+ assert(d);
+
+ /* Store the UID and lock_fd in the storage socket. This should be called with the socket pair lock taken. */
+
+ if (lock_fd >= 0) {
+ struct cmsghdr *cmsg;
+
+ cmsg = CMSG_FIRSTHDR(&mh);
+ cmsg->cmsg_level = SOL_SOCKET;
+ cmsg->cmsg_type = SCM_RIGHTS;
+ cmsg->cmsg_len = CMSG_LEN(sizeof(int));
+ memcpy(CMSG_DATA(cmsg), &lock_fd, sizeof(int));
+
+ mh.msg_controllen = CMSG_SPACE(sizeof(int));
+ } else {
+ mh.msg_control = NULL;
+ mh.msg_controllen = 0;
+ }
+
+ k = sendmsg(d->storage_socket[1], &mh, MSG_DONTWAIT|MSG_NOSIGNAL);
+ if (k < 0)
+ return -errno;
+
+ return 0;
+}
+
+static void unlink_uid_lock(int lock_fd, uid_t uid) {
+ char lock_path[strlen("/run/systemd/dynamic-uid/") + DECIMAL_STR_MAX(uid_t) + 1];
+
+ if (lock_fd < 0)
+ return;
+
+ xsprintf(lock_path, "/run/systemd/dynamic-uid/" UID_FMT, uid);
+ (void) unlink_noerrno(lock_path);
+}
+
+int dynamic_user_realize(DynamicUser *d, uid_t *ret) {
+
+ _cleanup_close_ int etc_passwd_lock_fd = -1, uid_lock_fd = -1;
+ uid_t uid = UID_INVALID;
+ int r;
+
+ assert(d);
+
+ /* Acquire a UID for the user name. This will allocate a UID for the user name if the user doesn't exist
+ * yet. If it already exists its existing UID/GID will be reused. */
+
+ if (lockf(d->storage_socket[0], F_LOCK, 0) < 0)
+ return -errno;
+
+ r = dynamic_user_pop(d, &uid, &uid_lock_fd);
+ if (r < 0) {
+ int new_uid_lock_fd;
+ uid_t new_uid;
+
+ if (r != -EAGAIN)
+ goto finish;
+
+ /* OK, nothing stored yet, let's try to find something useful. While we are working on this release the
+ * lock however, so that nobody else blocks on our NSS lookups. */
+ (void) lockf(d->storage_socket[0], F_ULOCK, 0);
+
+ /* Let's see if a proper, static user or group by this name exists. Try to take the lock on
+ * /etc/passwd, if that fails with EROFS then /etc is read-only. In that case it's fine if we don't
+ * take the lock, given that users can't be added there anyway in this case. */
+ etc_passwd_lock_fd = take_etc_passwd_lock(NULL);
+ if (etc_passwd_lock_fd < 0 && etc_passwd_lock_fd != -EROFS)
+ return etc_passwd_lock_fd;
+
+ /* First, let's parse this as numeric UID */
+ r = parse_uid(d->name, &uid);
+ if (r < 0) {
+ struct passwd *p;
+ struct group *g;
+
+ /* OK, this is not a numeric UID. Let's see if there's a user by this name */
+ p = getpwnam(d->name);
+ if (p)
+ uid = p->pw_uid;
+
+ /* Let's see if there's a group by this name */
+ g = getgrnam(d->name);
+ if (g) {
+ /* If the UID/GID of the user/group of the same don't match, refuse operation */
+ if (uid != UID_INVALID && uid != (uid_t) g->gr_gid)
+ return -EILSEQ;
+
+ uid = (uid_t) g->gr_gid;
+ }
+ }
+
+ if (uid == UID_INVALID) {
+ /* No static UID assigned yet, excellent. Let's pick a new dynamic one, and lock it. */
+
+ uid_lock_fd = pick_uid(d->name, &uid);
+ if (uid_lock_fd < 0)
+ return uid_lock_fd;
+ }
+
+ /* So, we found a working UID/lock combination. Let's see if we actually still need it. */
+ if (lockf(d->storage_socket[0], F_LOCK, 0) < 0) {
+ unlink_uid_lock(uid_lock_fd, uid);
+ return -errno;
+ }
+
+ r = dynamic_user_pop(d, &new_uid, &new_uid_lock_fd);
+ if (r < 0) {
+ if (r != -EAGAIN) {
+ /* OK, something bad happened, let's get rid of the bits we acquired. */
+ unlink_uid_lock(uid_lock_fd, uid);
+ goto finish;
+ }
+
+ /* Great! Nothing is stored here, still. Store our newly acquired data. */
+ } else {
+ /* Hmm, so as it appears there's now something stored in the storage socket. Throw away what we
+ * acquired, and use what's stored now. */
+
+ unlink_uid_lock(uid_lock_fd, uid);
+ safe_close(uid_lock_fd);
+
+ uid = new_uid;
+ uid_lock_fd = new_uid_lock_fd;
+ }
+ }
+
+ /* If the UID/GID was already allocated dynamically, push the data we popped out back in. If it was already
+ * allocated statically, push the UID back too, but do not push the lock fd in. If we allocated the UID
+ * dynamically right here, push that in along with the lock fd for it. */
+ r = dynamic_user_push(d, uid, uid_lock_fd);
+ if (r < 0)
+ goto finish;
+
+ *ret = uid;
+ r = 0;
+
+finish:
+ (void) lockf(d->storage_socket[0], F_ULOCK, 0);
+ return r;
+}
+
+int dynamic_user_current(DynamicUser *d, uid_t *ret) {
+ _cleanup_close_ int lock_fd = -1;
+ uid_t uid;
+ int r;
+
+ assert(d);
+ assert(ret);
+
+ /* Get the currently assigned UID for the user, if there's any. This simply pops the data from the storage socket, and pushes it back in right-away. */
+
+ if (lockf(d->storage_socket[0], F_LOCK, 0) < 0)
+ return -errno;
+
+ r = dynamic_user_pop(d, &uid, &lock_fd);
+ if (r < 0)
+ goto finish;
+
+ r = dynamic_user_push(d, uid, lock_fd);
+ if (r < 0)
+ goto finish;
+
+ *ret = uid;
+ r = 0;
+
+finish:
+ (void) lockf(d->storage_socket[0], F_ULOCK, 0);
+ return r;
+}
+
+DynamicUser* dynamic_user_ref(DynamicUser *d) {
+ if (!d)
+ return NULL;
+
+ assert(d->n_ref > 0);
+ d->n_ref++;
+
+ return d;
+}
+
+DynamicUser* dynamic_user_unref(DynamicUser *d) {
+ if (!d)
+ return NULL;
+
+ /* Note that this doesn't actually release any resources itself. If a dynamic user should be fully destroyed
+ * and its UID released, use dynamic_user_destroy() instead. NB: the dynamic user table may contain entries
+ * with no references, which is commonly the case right before a daemon reload. */
+
+ assert(d->n_ref > 0);
+ d->n_ref--;
+
+ return NULL;
+}
+
+static int dynamic_user_close(DynamicUser *d) {
+ _cleanup_close_ int lock_fd = -1;
+ uid_t uid;
+ int r;
+
+ /* Release the user ID, by releasing the lock on it, and emptying the storage socket. After this the user is
+ * unrealized again, much like it was after it the DynamicUser object was first allocated. */
+
+ if (lockf(d->storage_socket[0], F_LOCK, 0) < 0)
+ return -errno;
+
+ r = dynamic_user_pop(d, &uid, &lock_fd);
+ if (r == -EAGAIN) {
+ /* User wasn't realized yet, nothing to do. */
+ r = 0;
+ goto finish;
+ }
+ if (r < 0)
+ goto finish;
+
+ /* This dynamic user was realized and dynamically allocated. In this case, let's remove the lock file. */
+ unlink_uid_lock(lock_fd, uid);
+ r = 1;
+
+finish:
+ (void) lockf(d->storage_socket[0], F_ULOCK, 0);
+ return r;
+}
+
+DynamicUser* dynamic_user_destroy(DynamicUser *d) {
+ if (!d)
+ return NULL;
+
+ /* Drop a reference to a DynamicUser object, and destroy the user completely if this was the last
+ * reference. This is called whenever a service is shut down and wants its dynamic UID gone. Note that
+ * dynamic_user_unref() is what is called whenever a service is simply freed, for example during a reload
+ * cycle, where the dynamic users should not be destroyed, but our datastructures should. */
+
+ dynamic_user_unref(d);
+
+ if (d->n_ref > 0)
+ return NULL;
+
+ (void) dynamic_user_close(d);
+ return dynamic_user_free(d);
+}
+
+int dynamic_user_serialize(Manager *m, FILE *f, FDSet *fds) {
+ DynamicUser *d;
+ Iterator i;
+
+ assert(m);
+ assert(f);
+ assert(fds);
+
+ /* Dump the dynamic user database into the manager serialization, to deal with daemon reloads. */
+
+ HASHMAP_FOREACH(d, m->dynamic_users, i) {
+ int copy0, copy1;
+
+ copy0 = fdset_put_dup(fds, d->storage_socket[0]);
+ if (copy0 < 0)
+ return copy0;
+
+ copy1 = fdset_put_dup(fds, d->storage_socket[1]);
+ if (copy1 < 0)
+ return copy1;
+
+ fprintf(f, "dynamic-user=%s %i %i\n", d->name, copy0, copy1);
+ }
+
+ return 0;
+}
+
+void dynamic_user_deserialize_one(Manager *m, const char *value, FDSet *fds) {
+ _cleanup_free_ char *name = NULL, *s0 = NULL, *s1 = NULL;
+ int r, fd0, fd1;
+
+ assert(m);
+ assert(value);
+ assert(fds);
+
+ /* Parse the serialization again, after a daemon reload */
+
+ r = extract_many_words(&value, NULL, 0, &name, &s0, &s1, NULL);
+ if (r != 3 || !isempty(value)) {
+ log_debug("Unable to parse dynamic user line.");
+ return;
+ }
+
+ if (safe_atoi(s0, &fd0) < 0 || !fdset_contains(fds, fd0)) {
+ log_debug("Unable to process dynamic user fd specification.");
+ return;
+ }
+
+ if (safe_atoi(s1, &fd1) < 0 || !fdset_contains(fds, fd1)) {
+ log_debug("Unable to process dynamic user fd specification.");
+ return;
+ }
+
+ r = dynamic_user_add(m, name, (int[]) { fd0, fd1 }, NULL);
+ if (r < 0) {
+ log_debug_errno(r, "Failed to add dynamic user: %m");
+ return;
+ }
+
+ (void) fdset_remove(fds, fd0);
+ (void) fdset_remove(fds, fd1);
+}
+
+void dynamic_user_vacuum(Manager *m, bool close_user) {
+ DynamicUser *d;
+ Iterator i;
+
+ assert(m);
+
+ /* Empty the dynamic user database, optionally cleaning up orphaned dynamic users, i.e. destroy and free users
+ * to which no reference exist. This is called after a daemon reload finished, in order to destroy users which
+ * might not be referenced anymore. */
+
+ HASHMAP_FOREACH(d, m->dynamic_users, i) {
+ if (d->n_ref > 0)
+ continue;
+
+ if (close_user) {
+ log_debug("Removing orphaned dynamic user %s", d->name);
+ (void) dynamic_user_close(d);
+ }
+
+ dynamic_user_free(d);
+ }
+}
+
+int dynamic_user_lookup_uid(Manager *m, uid_t uid, char **ret) {
+ char lock_path[strlen("/run/systemd/dynamic-uid/") + DECIMAL_STR_MAX(uid_t) + 1];
+ _cleanup_free_ char *user = NULL;
+ uid_t check_uid;
+ int r;
+
+ assert(m);
+ assert(ret);
+
+ /* A friendly way to translate a dynamic user's UID into a his name. */
+
+ if (uid < UID_PICK_MIN)
+ return -ESRCH;
+ if (uid > UID_PICK_MAX)
+ return -ESRCH;
+
+ xsprintf(lock_path, "/run/systemd/dynamic-uid/" UID_FMT, uid);
+ r = read_one_line_file(lock_path, &user);
+ if (r == -ENOENT)
+ return -ESRCH;
+ if (r < 0)
+ return r;
+
+ /* The lock file might be stale, hence let's verify the data before we return it */
+ r = dynamic_user_lookup_name(m, user, &check_uid);
+ if (r < 0)
+ return r;
+ if (check_uid != uid) /* lock file doesn't match our own idea */
+ return -ESRCH;
+
+ *ret = user;
+ user = NULL;
+
+ return 0;
+}
+
+int dynamic_user_lookup_name(Manager *m, const char *name, uid_t *ret) {
+ DynamicUser *d;
+ int r;
+
+ assert(m);
+ assert(name);
+ assert(ret);
+
+ /* A friendly call for translating a dynamic user's name into its UID */
+
+ d = hashmap_get(m->dynamic_users, name);
+ if (!d)
+ return -ESRCH;
+
+ r = dynamic_user_current(d, ret);
+ if (r == -EAGAIN) /* not realized yet? */
+ return -ESRCH;
+
+ return r;
+}
+
+int dynamic_creds_acquire(DynamicCreds *creds, Manager *m, const char *user, const char *group) {
+ bool acquired = false;
+ int r;
+
+ assert(creds);
+ assert(m);
+
+ /* A DynamicUser object encapsulates an allocation of both a UID and a GID for a specific name. However, some
+ * services use different user and groups. For cases like that there's DynamicCreds containing a pair of user
+ * and group. This call allocates a pair. */
+
+ if (!creds->user && user) {
+ r = dynamic_user_acquire(m, user, &creds->user);
+ if (r < 0)
+ return r;
+
+ acquired = true;
+ }
+
+ if (!creds->group) {
+
+ if (creds->user && (!group || streq_ptr(user, group)))
+ creds->group = dynamic_user_ref(creds->user);
+ else {
+ r = dynamic_user_acquire(m, group, &creds->group);
+ if (r < 0) {
+ if (acquired)
+ creds->user = dynamic_user_unref(creds->user);
+ return r;
+ }
+ }
+ }
+
+ return 0;
+}
+
+int dynamic_creds_realize(DynamicCreds *creds, uid_t *uid, gid_t *gid) {
+ uid_t u = UID_INVALID;
+ gid_t g = GID_INVALID;
+ int r;
+
+ assert(creds);
+ assert(uid);
+ assert(gid);
+
+ /* Realize both the referenced user and group */
+
+ if (creds->user) {
+ r = dynamic_user_realize(creds->user, &u);
+ if (r < 0)
+ return r;
+ }
+
+ if (creds->group && creds->group != creds->user) {
+ r = dynamic_user_realize(creds->group, &g);
+ if (r < 0)
+ return r;
+ } else
+ g = u;
+
+ *uid = u;
+ *gid = g;
+
+ return 0;
+}
+
+void dynamic_creds_unref(DynamicCreds *creds) {
+ assert(creds);
+
+ creds->user = dynamic_user_unref(creds->user);
+ creds->group = dynamic_user_unref(creds->group);
+}
+
+void dynamic_creds_destroy(DynamicCreds *creds) {
+ assert(creds);
+
+ creds->user = dynamic_user_destroy(creds->user);
+ creds->group = dynamic_user_destroy(creds->group);
+}
diff --git a/src/core/dynamic-user.h b/src/core/dynamic-user.h
new file mode 100644
index 0000000000..0b8bce1a72
--- /dev/null
+++ b/src/core/dynamic-user.h
@@ -0,0 +1,66 @@
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2016 Lennart Poettering
+
+ systemd is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+typedef struct DynamicUser DynamicUser;
+
+typedef struct DynamicCreds {
+ /* A combination of a dynamic user and group */
+ DynamicUser *user;
+ DynamicUser *group;
+} DynamicCreds;
+
+#include "manager.h"
+
+/* Note that this object always allocates a pair of user and group under the same name, even if one of them isn't
+ * used. This means, if you want to allocate a group and user pair, and they might have two different names, then you
+ * need to allocated two of these objects. DynamicCreds below makes that easy. */
+struct DynamicUser {
+ int n_ref;
+ Manager *manager;
+
+ /* An AF_UNIX socket pair that contains a datagram containing both the numeric ID assigned, as well as a lock
+ * file fd locking the user ID we picked. */
+ int storage_socket[2];
+
+ char name[];
+};
+
+int dynamic_user_acquire(Manager *m, const char *name, DynamicUser **ret);
+
+int dynamic_user_realize(DynamicUser *d, uid_t *ret);
+int dynamic_user_current(DynamicUser *d, uid_t *ret);
+
+DynamicUser* dynamic_user_ref(DynamicUser *d);
+DynamicUser* dynamic_user_unref(DynamicUser *d);
+DynamicUser* dynamic_user_destroy(DynamicUser *d);
+
+int dynamic_user_serialize(Manager *m, FILE *f, FDSet *fds);
+void dynamic_user_deserialize_one(Manager *m, const char *value, FDSet *fds);
+void dynamic_user_vacuum(Manager *m, bool close_user);
+
+int dynamic_user_lookup_uid(Manager *m, uid_t uid, char **ret);
+int dynamic_user_lookup_name(Manager *m, const char *name, uid_t *ret);
+
+int dynamic_creds_acquire(DynamicCreds *creds, Manager *m, const char *user, const char *group);
+int dynamic_creds_realize(DynamicCreds *creds, uid_t *uid, gid_t *gid);
+
+void dynamic_creds_unref(DynamicCreds *creds);
+void dynamic_creds_destroy(DynamicCreds *creds);
diff --git a/src/core/execute.c b/src/core/execute.c
index 05dc1aaec1..26e9cd5339 100644
--- a/src/core/execute.c
+++ b/src/core/execute.c
@@ -290,10 +290,10 @@ static int connect_journal_socket(int fd, uid_t uid, gid_t gid) {
}
static int connect_logger_as(
+ Unit *unit,
const ExecContext *context,
ExecOutput output,
const char *ident,
- const char *unit_id,
int nfd,
uid_t uid,
gid_t gid) {
@@ -329,7 +329,7 @@ static int connect_logger_as(
"%i\n"
"%i\n",
context->syslog_identifier ? context->syslog_identifier : ident,
- unit_id,
+ unit->id,
context->syslog_priority,
!!context->syslog_level_prefix,
output == EXEC_OUTPUT_SYSLOG || output == EXEC_OUTPUT_SYSLOG_AND_CONSOLE,
@@ -544,7 +544,7 @@ static int setup_output(
case EXEC_OUTPUT_KMSG_AND_CONSOLE:
case EXEC_OUTPUT_JOURNAL:
case EXEC_OUTPUT_JOURNAL_AND_CONSOLE:
- r = connect_logger_as(context, o, ident, unit->id, fileno, uid, gid);
+ r = connect_logger_as(unit, context, o, ident, fileno, uid, gid);
if (r < 0) {
log_unit_error_errno(unit, r, "Failed to connect %s to the journal socket, ignoring: %m", fileno == STDOUT_FILENO ? "stdout" : "stderr");
r = open_null_as(O_WRONLY, fileno);
@@ -1526,14 +1526,28 @@ static bool exec_needs_mount_namespace(
return false;
}
+static void append_socket_pair(int *array, unsigned *n, int pair[2]) {
+ assert(array);
+ assert(n);
+
+ if (!pair)
+ return;
+
+ if (pair[0] >= 0)
+ array[(*n)++] = pair[0];
+ if (pair[1] >= 0)
+ array[(*n)++] = pair[1];
+}
+
static int close_remaining_fds(
const ExecParameters *params,
ExecRuntime *runtime,
+ DynamicCreds *dcreds,
int socket_fd,
int *fds, unsigned n_fds) {
unsigned n_dont_close = 0;
- int dont_close[n_fds + 7];
+ int dont_close[n_fds + 11];
assert(params);
@@ -1551,11 +1565,14 @@ static int close_remaining_fds(
n_dont_close += n_fds;
}
- if (runtime) {
- if (runtime->netns_storage_socket[0] >= 0)
- dont_close[n_dont_close++] = runtime->netns_storage_socket[0];
- if (runtime->netns_storage_socket[1] >= 0)
- dont_close[n_dont_close++] = runtime->netns_storage_socket[1];
+ if (runtime)
+ append_socket_pair(dont_close, &n_dont_close, runtime->netns_storage_socket);
+
+ if (dcreds) {
+ if (dcreds->user)
+ append_socket_pair(dont_close, &n_dont_close, dcreds->user->storage_socket);
+ if (dcreds->group)
+ append_socket_pair(dont_close, &n_dont_close, dcreds->group->storage_socket);
}
return close_all_fds(dont_close, n_dont_close);
@@ -1567,6 +1584,7 @@ static int exec_child(
const ExecContext *context,
const ExecParameters *params,
ExecRuntime *runtime,
+ DynamicCreds *dcreds,
char **argv,
int socket_fd,
int *fds, unsigned n_fds,
@@ -1617,7 +1635,7 @@ static int exec_child(
log_forget_fds();
- r = close_remaining_fds(params, runtime, socket_fd, fds, n_fds);
+ r = close_remaining_fds(params, runtime, dcreds, socket_fd, fds, n_fds);
if (r < 0) {
*exit_status = EXIT_FDS;
return r;
@@ -1650,25 +1668,48 @@ static int exec_child(
}
}
- if (context->user) {
- username = context->user;
- r = get_user_creds(&username, &uid, &gid, &home, &shell);
+ if (context->dynamic_user && dcreds) {
+
+ /* Make sure we bypass our own NSS module for any NSS checks */
+ if (putenv((char*) "SYSTEMD_NSS_DYNAMIC_BYPASS=1") != 0) {
+ *exit_status = EXIT_USER;
+ return -errno;
+ }
+
+ r = dynamic_creds_realize(dcreds, &uid, &gid);
if (r < 0) {
*exit_status = EXIT_USER;
return r;
}
- }
- if (context->group) {
- const char *g = context->group;
+ if (uid == UID_INVALID || gid == GID_INVALID) {
+ *exit_status = EXIT_USER;
+ return -ESRCH;
+ }
- r = get_group_creds(&g, &gid);
- if (r < 0) {
- *exit_status = EXIT_GROUP;
- return r;
+ if (dcreds->user)
+ username = dcreds->user->name;
+
+ } else {
+ if (context->user) {
+ username = context->user;
+ r = get_user_creds(&username, &uid, &gid, &home, &shell);
+ if (r < 0) {
+ *exit_status = EXIT_USER;
+ return r;
+ }
}
- }
+ if (context->group) {
+ const char *g = context->group;
+
+ r = get_group_creds(&g, &gid);
+ if (r < 0) {
+ *exit_status = EXIT_GROUP;
+ return r;
+ }
+ }
+ }
/* If a socket is connected to STDIN/STDOUT/STDERR, we
* must sure to drop O_NONBLOCK */
@@ -2192,6 +2233,7 @@ int exec_spawn(Unit *unit,
const ExecContext *context,
const ExecParameters *params,
ExecRuntime *runtime,
+ DynamicCreds *dcreds,
pid_t *ret) {
_cleanup_strv_free_ char **files_env = NULL;
@@ -2250,6 +2292,7 @@ int exec_spawn(Unit *unit,
context,
params,
runtime,
+ dcreds,
argv,
socket_fd,
fds, n_fds,
@@ -2723,6 +2766,8 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) {
if (c->group)
fprintf(f, "%sGroup: %s\n", prefix, c->group);
+ fprintf(f, "%sDynamicUser: %s\n", prefix, yes_no(c->dynamic_user));
+
if (strv_length(c->supplementary_groups) > 0) {
fprintf(f, "%sSupplementaryGroups:", prefix);
strv_fprintf(f, c->supplementary_groups);
@@ -3062,7 +3107,7 @@ int exec_runtime_make(ExecRuntime **rt, ExecContext *c, const char *id) {
return r;
if (c->private_network && (*rt)->netns_storage_socket[0] < 0) {
- if (socketpair(AF_UNIX, SOCK_DGRAM, 0, (*rt)->netns_storage_socket) < 0)
+ if (socketpair(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0, (*rt)->netns_storage_socket) < 0)
return -errno;
}
diff --git a/src/core/execute.h b/src/core/execute.h
index 73b8a119b0..48cc18fbb3 100644
--- a/src/core/execute.h
+++ b/src/core/execute.h
@@ -30,6 +30,7 @@ typedef struct ExecParameters ExecParameters;
#include <stdio.h>
#include <sys/capability.h>
+#include "cgroup-util.h"
#include "fdset.h"
#include "list.h"
#include "missing.h"
@@ -91,6 +92,8 @@ struct ExecRuntime {
char *tmp_dir;
char *var_tmp_dir;
+ /* An AF_UNIX socket pair, that contains a datagram containing a file descriptor referring to the network
+ * namespace. */
int netns_storage_socket[2];
};
@@ -173,6 +176,8 @@ struct ExecContext {
bool no_new_privileges;
+ bool dynamic_user;
+
/* This is not exposed to the user but available
* internally. We need it to make sure that whenever we spawn
* /usr/bin/mount it is run in the same process group as us so
@@ -203,9 +208,6 @@ struct ExecContext {
bool no_new_privileges_set:1;
};
-#include "cgroup-util.h"
-#include "cgroup.h"
-
struct ExecParameters {
char **argv;
char **environment;
@@ -236,11 +238,15 @@ struct ExecParameters {
int stderr_fd;
};
+#include "unit.h"
+#include "dynamic-user.h"
+
int exec_spawn(Unit *unit,
ExecCommand *command,
const ExecContext *context,
const ExecParameters *exec_params,
ExecRuntime *runtime,
+ DynamicCreds *dynamic_creds,
pid_t *ret);
void exec_command_done(ExecCommand *c);
diff --git a/src/core/load-fragment-gperf.gperf.m4 b/src/core/load-fragment-gperf.gperf.m4
index 6a5c16a000..c9cdbe8ba7 100644
--- a/src/core/load-fragment-gperf.gperf.m4
+++ b/src/core/load-fragment-gperf.gperf.m4
@@ -19,9 +19,9 @@ m4_dnl Define the context options only once
m4_define(`EXEC_CONTEXT_CONFIG_ITEMS',
`$1.WorkingDirectory, config_parse_working_directory, 0, offsetof($1, exec_context)
$1.RootDirectory, config_parse_unit_path_printf, 0, offsetof($1, exec_context.root_directory)
-$1.User, config_parse_unit_string_printf, 0, offsetof($1, exec_context.user)
-$1.Group, config_parse_unit_string_printf, 0, offsetof($1, exec_context.group)
-$1.SupplementaryGroups, config_parse_strv, 0, offsetof($1, exec_context.supplementary_groups)
+$1.User, config_parse_user_group, 0, offsetof($1, exec_context.user)
+$1.Group, config_parse_user_group, 0, offsetof($1, exec_context.group)
+$1.SupplementaryGroups, config_parse_user_group_strv, 0, offsetof($1, exec_context.supplementary_groups)
$1.Nice, config_parse_exec_nice, 0, offsetof($1, exec_context)
$1.OOMScoreAdjust, config_parse_exec_oom_score_adjust, 0, offsetof($1, exec_context)
$1.IOSchedulingClass, config_parse_exec_io_class, 0, offsetof($1, exec_context)
@@ -34,6 +34,7 @@ $1.UMask, config_parse_mode, 0,
$1.Environment, config_parse_environ, 0, offsetof($1, exec_context.environment)
$1.EnvironmentFile, config_parse_unit_env_file, 0, offsetof($1, exec_context.environment_files)
$1.PassEnvironment, config_parse_pass_environ, 0, offsetof($1, exec_context.pass_environment)
+$1.DynamicUser, config_parse_bool, 0, offsetof($1, exec_context.dynamic_user)
$1.StandardInput, config_parse_input, 0, offsetof($1, exec_context.std_input)
$1.StandardOutput, config_parse_output, 0, offsetof($1, exec_context.std_output)
$1.StandardError, config_parse_output, 0, offsetof($1, exec_context.std_error)
@@ -285,8 +286,8 @@ Socket.ExecStartPost, config_parse_exec, SOCKET_EXEC
Socket.ExecStopPre, config_parse_exec, SOCKET_EXEC_STOP_PRE, offsetof(Socket, exec_command)
Socket.ExecStopPost, config_parse_exec, SOCKET_EXEC_STOP_POST, offsetof(Socket, exec_command)
Socket.TimeoutSec, config_parse_sec, 0, offsetof(Socket, timeout_usec)
-Socket.SocketUser, config_parse_unit_string_printf, 0, offsetof(Socket, user)
-Socket.SocketGroup, config_parse_unit_string_printf, 0, offsetof(Socket, group)
+Socket.SocketUser, config_parse_user_group, 0, offsetof(Socket, user)
+Socket.SocketGroup, config_parse_user_group, 0, offsetof(Socket, group)
Socket.SocketMode, config_parse_mode, 0, offsetof(Socket, socket_mode)
Socket.DirectoryMode, config_parse_mode, 0, offsetof(Socket, directory_mode)
Socket.Accept, config_parse_bool, 0, offsetof(Socket, accept)
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index 782e420e4c..e8cb3a4249 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -64,6 +64,7 @@
#include "unit-name.h"
#include "unit-printf.h"
#include "unit.h"
+#include "user-util.h"
#include "utf8.h"
#include "web-util.h"
@@ -620,7 +621,7 @@ int config_parse_exec(
ignore = true;
else if (*f == '@' && !separate_argv0)
separate_argv0 = true;
- else if (*f == '!' && !privileged)
+ else if (*f == '+' && !privileged)
privileged = true;
else
break;
@@ -1763,6 +1764,123 @@ int config_parse_sec_fix_0(
return 0;
}
+int config_parse_user_group(
+ 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) {
+
+ char **user = data, *n;
+ Unit *u = userdata;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(u);
+
+ if (isempty(rvalue))
+ n = NULL;
+ else {
+ _cleanup_free_ char *k = NULL;
+
+ r = unit_full_printf(u, rvalue, &k);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers in %s, ignoring: %m", rvalue);
+ return 0;
+ }
+
+ if (!valid_user_group_name_or_id(k)) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid user/group name or numeric ID, ignoring: %s", k);
+ return 0;
+ }
+
+ n = k;
+ k = NULL;
+ }
+
+ free(*user);
+ *user = n;
+
+ return 0;
+}
+
+int config_parse_user_group_strv(
+ 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) {
+
+ char ***users = data;
+ Unit *u = userdata;
+ const char *p;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(u);
+
+ if (isempty(rvalue)) {
+ char **empty;
+
+ empty = new0(char*, 1);
+ if (!empty)
+ return log_oom();
+
+ strv_free(*users);
+ *users = empty;
+
+ return 0;
+ }
+
+ p = rvalue;
+ for (;;) {
+ _cleanup_free_ char *word = NULL, *k = NULL;
+
+ r = extract_first_word(&p, &word, WHITESPACE, 0);
+ if (r == 0)
+ break;
+ if (r == -ENOMEM)
+ return log_oom();
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r, "Invalid syntax, ignoring: %s", rvalue);
+ break;
+ }
+
+ r = unit_full_printf(u, word, &k);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r, "Failed to resolve unit specifiers in %s, ignoring: %m", word);
+ continue;
+ }
+
+ if (!valid_user_group_name_or_id(k)) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "Invalid user/group name or numeric ID, ignoring: %s", k);
+ continue;
+ }
+
+ r = strv_push(users, k);
+ if (r < 0)
+ return log_oom();
+
+ k = NULL;
+ }
+
+ return 0;
+}
+
int config_parse_busname_service(
const char *unit,
const char *filename,
@@ -2823,8 +2941,8 @@ int config_parse_memory_limit(
} else
bytes = physical_memory_scale(r, 100U);
- if (bytes < 1) {
- log_syntax(unit, LOG_ERR, filename, line, 0, "Memory limit '%s' too small. Ignoring.", rvalue);
+ if (bytes <= 0 || bytes >= UINT64_MAX) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "Memory limit '%s' out of range. Ignoring.", rvalue);
return 0;
}
}
@@ -2861,9 +2979,18 @@ int config_parse_tasks_max(
return 0;
}
- r = safe_atou64(rvalue, &u);
- if (r < 0 || u < 1) {
- log_syntax(unit, LOG_ERR, filename, line, r, "Maximum tasks value '%s' invalid. Ignoring.", rvalue);
+ r = parse_percent(rvalue);
+ if (r < 0) {
+ r = safe_atou64(rvalue, &u);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r, "Maximum tasks value '%s' invalid. Ignoring.", rvalue);
+ return 0;
+ }
+ } else
+ u = system_tasks_max_scale(r, 100U);
+
+ if (u <= 0 || u >= UINT64_MAX) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "Maximum tasks value '%s' out of range. Ignoring.", rvalue);
return 0;
}
diff --git a/src/core/load-fragment.h b/src/core/load-fragment.h
index b36a2e3a02..213bce55a7 100644
--- a/src/core/load-fragment.h
+++ b/src/core/load-fragment.h
@@ -111,6 +111,8 @@ int config_parse_exec_utmp_mode(const char *unit, const char *filename, unsigned
int config_parse_working_directory(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);
int config_parse_fdname(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);
int config_parse_sec_fix_0(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);
+int config_parse_user_group(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);
+int config_parse_user_group_strv(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);
/* gperf prototypes */
const struct ConfigPerfItem* load_fragment_gperf_lookup(const char *key, unsigned length);
diff --git a/src/core/machine-id-setup.c b/src/core/machine-id-setup.c
index ea6b085e4f..76dfcfa6d7 100644
--- a/src/core/machine-id-setup.c
+++ b/src/core/machine-id-setup.c
@@ -17,11 +17,8 @@
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
-#include <errno.h>
#include <fcntl.h>
#include <sched.h>
-#include <stdio.h>
-#include <string.h>
#include <sys/mount.h>
#include <unistd.h>
@@ -29,10 +26,8 @@
#include "alloc-util.h"
#include "fd-util.h"
-#include "fileio.h"
#include "fs-util.h"
-#include "hexdecoct.h"
-#include "io-util.h"
+#include "id128-util.h"
#include "log.h"
#include "machine-id-setup.h"
#include "macro.h"
@@ -46,101 +41,23 @@
#include "util.h"
#include "virt.h"
-static int shorten_uuid(char destination[34], const char source[36]) {
- unsigned i, j;
-
- assert(destination);
- assert(source);
-
- /* Converts a UUID into a machine ID, by lowercasing it and
- * removing dashes. Validates everything. */
-
- for (i = 0, j = 0; i < 36 && j < 32; i++) {
- int t;
-
- t = unhexchar(source[i]);
- if (t < 0)
- continue;
-
- destination[j++] = hexchar(t);
- }
-
- if (i != 36 || j != 32)
- return -EINVAL;
-
- destination[32] = '\n';
- destination[33] = 0;
- return 0;
-}
-
-static int read_machine_id(int fd, char id[34]) {
- char id_to_validate[34];
- int r;
-
- assert(fd >= 0);
- assert(id);
-
- /* Reads a machine ID from a file, validates it, and returns
- * it. The returned ID ends in a newline. */
-
- r = loop_read_exact(fd, id_to_validate, 33, false);
- if (r < 0)
- return r;
-
- if (id_to_validate[32] != '\n')
- return -EINVAL;
-
- id_to_validate[32] = 0;
-
- if (!id128_is_valid(id_to_validate))
- return -EINVAL;
-
- memcpy(id, id_to_validate, 32);
- id[32] = '\n';
- id[33] = 0;
- return 0;
-}
-
-static int write_machine_id(int fd, const char id[34]) {
- int r;
-
- assert(fd >= 0);
- assert(id);
-
- if (lseek(fd, 0, SEEK_SET) < 0)
- return -errno;
-
- r = loop_write(fd, id, 33, false);
- if (r < 0)
- return r;
-
- if (fsync(fd) < 0)
- return -errno;
-
- return 0;
-}
-
-static int generate_machine_id(char id[34], const char *root) {
- int fd, r;
- unsigned char *p;
- sd_id128_t buf;
- char *q;
+static int generate_machine_id(const char *root, sd_id128_t *ret) {
const char *dbus_machine_id;
+ _cleanup_close_ int fd = -1;
+ int r;
- assert(id);
-
- dbus_machine_id = prefix_roota(root, "/var/lib/dbus/machine-id");
+ assert(ret);
/* First, try reading the D-Bus machine id, unless it is a symlink */
+ dbus_machine_id = prefix_roota(root, "/var/lib/dbus/machine-id");
fd = open(dbus_machine_id, O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
if (fd >= 0) {
- r = read_machine_id(fd, id);
- safe_close(fd);
-
- if (r >= 0) {
+ if (id128_read_fd(fd, ID128_PLAIN, ret) >= 0) {
log_info("Initializing machine ID from D-Bus machine ID.");
return 0;
}
+
+ fd = safe_close(fd);
}
if (isempty(root)) {
@@ -151,13 +68,10 @@ static int generate_machine_id(char id[34], const char *root) {
if (detect_container() > 0) {
_cleanup_free_ char *e = NULL;
- r = getenv_for_pid(1, "container_uuid", &e);
- if (r > 0) {
- r = shorten_uuid(id, e);
- if (r >= 0) {
- log_info("Initializing machine ID from container UUID.");
- return 0;
- }
+ if (getenv_for_pid(1, "container_uuid", &e) > 0 &&
+ sd_id128_from_string(e, ret) >= 0) {
+ log_info("Initializing machine ID from container UUID.");
+ return 0;
}
} else if (detect_vm() == VIRTUALIZATION_KVM) {
@@ -166,51 +80,29 @@ static int generate_machine_id(char id[34], const char *root) {
* running in qemu/kvm and a machine ID was passed in
* via -uuid on the qemu/kvm command line */
- char uuid[36];
-
- fd = open("/sys/class/dmi/id/product_uuid", O_RDONLY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
- if (fd >= 0) {
- r = loop_read_exact(fd, uuid, 36, false);
- safe_close(fd);
-
- if (r >= 0) {
- r = shorten_uuid(id, uuid);
- if (r >= 0) {
- log_info("Initializing machine ID from KVM UUID.");
- return 0;
- }
- }
+ if (id128_read("/sys/class/dmi/id/product_uuid", ID128_UUID, ret) >= 0) {
+ log_info("Initializing machine ID from KVM UUID.");
+ return 0;
}
}
}
/* If that didn't work, generate a random machine id */
- r = sd_id128_randomize(&buf);
+ r = sd_id128_randomize(ret);
if (r < 0)
- return log_error_errno(r, "Failed to open /dev/urandom: %m");
-
- for (p = buf.bytes, q = id; p < buf.bytes + sizeof(buf); p++, q += 2) {
- q[0] = hexchar(*p >> 4);
- q[1] = hexchar(*p & 15);
- }
-
- id[32] = '\n';
- id[33] = 0;
+ return log_error_errno(r, "Failed to generate randomized : %m");
log_info("Initializing machine ID from random generator.");
-
return 0;
}
-int machine_id_setup(const char *root, sd_id128_t machine_id) {
+int machine_id_setup(const char *root, sd_id128_t machine_id, sd_id128_t *ret) {
const char *etc_machine_id, *run_machine_id;
_cleanup_close_ int fd = -1;
- bool writable = true;
- char id[34]; /* 32 + \n + \0 */
+ bool writable;
int r;
etc_machine_id = prefix_roota(root, "/etc/machine-id");
- run_machine_id = prefix_roota(root, "/run/machine-id");
RUN_WITH_UMASK(0000) {
/* We create this 0444, to indicate that this isn't really
@@ -218,7 +110,7 @@ int machine_id_setup(const char *root, sd_id128_t machine_id) {
* will be owned by root it doesn't matter much, but maybe
* people look. */
- mkdir_parents(etc_machine_id, 0755);
+ (void) mkdir_parents(etc_machine_id, 0755);
fd = open(etc_machine_id, O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444);
if (fd < 0) {
int old_errno = errno;
@@ -239,41 +131,41 @@ int machine_id_setup(const char *root, sd_id128_t machine_id) {
}
writable = false;
- }
+ } else
+ writable = true;
}
- /* A machine id argument overrides all other machined-ids */
- if (!sd_id128_is_null(machine_id)) {
- sd_id128_to_string(machine_id, id);
- id[32] = '\n';
- id[33] = 0;
- } else {
- if (read_machine_id(fd, id) >= 0)
- return 0;
+ /* A we got a valid machine ID argument, that's what counts */
+ if (sd_id128_is_null(machine_id)) {
- /* Hmm, so, the id currently stored is not useful, then let's
- * generate one */
+ /* Try to read any existing machine ID */
+ if (id128_read_fd(fd, ID128_PLAIN, ret) >= 0)
+ return 0;
- r = generate_machine_id(id, root);
+ /* Hmm, so, the id currently stored is not useful, then let's generate one */
+ r = generate_machine_id(root, &machine_id);
if (r < 0)
return r;
+
+ if (lseek(fd, 0, SEEK_SET) == (off_t) -1)
+ return log_error_errno(errno, "Failed to seek: %m");
}
if (writable)
- if (write_machine_id(fd, id) >= 0)
- return 0;
+ if (id128_write_fd(fd, ID128_PLAIN, machine_id, true) >= 0)
+ goto finish;
fd = safe_close(fd);
- /* Hmm, we couldn't write it? So let's write it to
- * /run/machine-id as a replacement */
+ /* Hmm, we couldn't write it? So let's write it to /run/machine-id as a replacement */
- RUN_WITH_UMASK(0022) {
- r = write_string_file(run_machine_id, id, WRITE_STRING_FILE_CREATE);
- if (r < 0) {
- (void) unlink(run_machine_id);
- return log_error_errno(r, "Cannot write %s: %m", run_machine_id);
- }
+ run_machine_id = prefix_roota(root, "/run/machine-id");
+
+ RUN_WITH_UMASK(0022)
+ r = id128_write(run_machine_id, ID128_PLAIN, machine_id, false);
+ if (r < 0) {
+ (void) unlink(run_machine_id);
+ return log_error_errno(r, "Cannot write %s: %m", run_machine_id);
}
/* And now, let's mount it over */
@@ -286,7 +178,11 @@ int machine_id_setup(const char *root, sd_id128_t machine_id) {
/* Mark the mount read-only */
if (mount(NULL, etc_machine_id, NULL, MS_BIND|MS_RDONLY|MS_REMOUNT, NULL) < 0)
- log_warning_errno(errno, "Failed to make transient %s read-only: %m", etc_machine_id);
+ log_warning_errno(errno, "Failed to make transient %s read-only, ignoring: %m", etc_machine_id);
+
+finish:
+ if (ret)
+ *ret = machine_id;
return 0;
}
@@ -294,9 +190,13 @@ int machine_id_setup(const char *root, sd_id128_t machine_id) {
int machine_id_commit(const char *root) {
_cleanup_close_ int fd = -1, initial_mntns_fd = -1;
const char *etc_machine_id;
- char id[34]; /* 32 + \n + \0 */
+ sd_id128_t id;
int r;
+ /* Replaces a tmpfs bind mount of /etc/machine-id by a proper file, atomically. For this, the umount is removed
+ * in a mount namespace, a new file is created at the right place. Afterwards the mount is also removed in the
+ * original mount namespace, thus revealing the file that was just created. */
+
etc_machine_id = prefix_roota(root, "/etc/machine-id");
r = path_is_mount_point(etc_machine_id, 0);
@@ -312,10 +212,6 @@ int machine_id_commit(const char *root) {
if (fd < 0)
return log_error_errno(errno, "Cannot open %s: %m", etc_machine_id);
- r = read_machine_id(fd, id);
- if (r < 0)
- return log_error_errno(r, "We didn't find a valid machine ID in %s.", etc_machine_id);
-
r = fd_is_temporary_fs(fd);
if (r < 0)
return log_error_errno(r, "Failed to determine whether %s is on a temporary file system: %m", etc_machine_id);
@@ -324,6 +220,10 @@ int machine_id_commit(const char *root) {
return -EROFS;
}
+ r = id128_read_fd(fd, ID128_PLAIN, &id);
+ if (r < 0)
+ return log_error_errno(r, "We didn't find a valid machine ID in %s.", etc_machine_id);
+
fd = safe_close(fd);
/* Store current mount namespace */
@@ -342,15 +242,9 @@ int machine_id_commit(const char *root) {
return log_error_errno(errno, "Failed to unmount transient %s file in our private namespace: %m", etc_machine_id);
/* Update a persistent version of etc_machine_id */
- fd = open(etc_machine_id, O_RDWR|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444);
- if (fd < 0)
- return log_error_errno(errno, "Cannot open for writing %s. This is mandatory to get a persistent machine-id: %m", etc_machine_id);
-
- r = write_machine_id(fd, id);
+ r = id128_write(etc_machine_id, ID128_PLAIN, id, true);
if (r < 0)
- return log_error_errno(r, "Cannot write %s: %m", etc_machine_id);
-
- fd = safe_close(fd);
+ return log_error_errno(r, "Cannot write %s. This is mandatory to get a persistent machine ID: %m", etc_machine_id);
/* Return to initial namespace and proceed a lazy tmpfs unmount */
r = namespace_enter(-1, initial_mntns_fd, -1, -1, -1);
diff --git a/src/core/machine-id-setup.h b/src/core/machine-id-setup.h
index a7e7678ed9..29f4620646 100644
--- a/src/core/machine-id-setup.h
+++ b/src/core/machine-id-setup.h
@@ -20,4 +20,4 @@
***/
int machine_id_commit(const char *root);
-int machine_id_setup(const char *root, sd_id128_t machine_id);
+int machine_id_setup(const char *root, sd_id128_t requested, sd_id128_t *ret);
diff --git a/src/core/macros.systemd.in b/src/core/macros.systemd.in
index 028db1cc4a..6e8a3b3e3d 100644
--- a/src/core/macros.systemd.in
+++ b/src/core/macros.systemd.in
@@ -38,6 +38,12 @@ Requires(preun): systemd \
Requires(postun): systemd \
%{nil}
+%systemd_ordering \
+OrderWithRequires(post): systemd \
+OrderWithRequires(preun): systemd \
+OrderWithRequires(postun): systemd \
+%{nil}
+
%systemd_post() \
if [ $1 -eq 1 ] ; then \
# Initial installation \
diff --git a/src/core/main.c b/src/core/main.c
index fc04fb8051..f2adca7d2b 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -127,7 +127,7 @@ static bool arg_default_io_accounting = false;
static bool arg_default_blockio_accounting = false;
static bool arg_default_memory_accounting = false;
static bool arg_default_tasks_accounting = true;
-static uint64_t arg_default_tasks_max = UINT64_C(512);
+static uint64_t arg_default_tasks_max = UINT64_MAX;
static sd_id128_t arg_machine_id = {};
noreturn static void freeze_or_reboot(void) {
@@ -291,14 +291,16 @@ static int parse_crash_chvt(const char *value) {
}
static int set_machine_id(const char *m) {
+ sd_id128_t t;
assert(m);
- if (sd_id128_from_string(m, &arg_machine_id) < 0)
+ if (sd_id128_from_string(m, &t) < 0)
return -EINVAL;
- if (sd_id128_is_null(arg_machine_id))
+ if (sd_id128_is_null(t))
return -EINVAL;
+ arg_machine_id = t;
return 0;
}
@@ -1298,6 +1300,11 @@ static int fixup_environment(void) {
_cleanup_free_ char *term = NULL;
int r;
+ /* We expect the environment to be set correctly
+ * if run inside a container. */
+ if (detect_container() > 0)
+ return 0;
+
/* When started as PID1, the kernel uses /dev/console
* for our stdios and uses TERM=linux whatever the
* backend device used by the console. We try to make
@@ -1314,7 +1321,7 @@ static int fixup_environment(void) {
if (r == 0) {
term = strdup(default_term_for_tty("/dev/console") + 5);
if (!term)
- return -errno;
+ return -ENOMEM;
}
if (setenv("TERM", term, 1) < 0)
@@ -1508,13 +1515,10 @@ int main(int argc, char *argv[]) {
}
if (arg_system) {
- /* We expect the environment to be set correctly
- * if run inside a container. */
- if (detect_container() <= 0)
- if (fixup_environment() < 0) {
- error_message = "Failed to fix up PID1 environment";
- goto finish;
- }
+ if (fixup_environment() < 0) {
+ error_message = "Failed to fix up PID1 environment";
+ goto finish;
+ }
/* Try to figure out if we can use colors with the console. No
* need to do that for user instances since they never log
@@ -1556,6 +1560,8 @@ int main(int argc, char *argv[]) {
(void) reset_all_signal_handlers();
(void) ignore_signals(SIGNALS_IGNORE, -1);
+ arg_default_tasks_max = system_tasks_max_scale(15U, 100U); /* 15% the system PIDs equals 4915 by default. */
+
if (parse_config_file() < 0) {
error_message = "Failed to parse config file";
goto finish;
@@ -1717,7 +1723,7 @@ int main(int argc, char *argv[]) {
status_welcome();
hostname_setup();
- machine_id_setup(NULL, arg_machine_id);
+ machine_id_setup(NULL, arg_machine_id, NULL);
loopback_setup();
bump_unix_max_dgram_qlen();
diff --git a/src/core/manager.c b/src/core/manager.c
index a0181e2138..e41b65da50 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -569,7 +569,7 @@ int manager_new(UnitFileScope scope, bool test_run, Manager **_m) {
m->exit_code = _MANAGER_EXIT_CODE_INVALID;
m->default_timer_accuracy_usec = USEC_PER_MINUTE;
m->default_tasks_accounting = true;
- m->default_tasks_max = UINT64_C(512);
+ m->default_tasks_max = UINT64_MAX;
#ifdef ENABLE_EFI
if (MANAGER_IS_SYSTEM(m) && detect_container() <= 0)
@@ -1004,6 +1004,9 @@ Manager* manager_free(Manager *m) {
bus_done(m);
+ dynamic_user_vacuum(m, false);
+ hashmap_free(m->dynamic_users);
+
hashmap_free(m->units);
hashmap_free(m->jobs);
hashmap_free(m->watch_pids1);
@@ -1227,6 +1230,9 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
/* Third, fire things up! */
manager_coldplug(m);
+ /* Release any dynamic users no longer referenced */
+ dynamic_user_vacuum(m, true);
+
if (serialization) {
assert(m->n_reloading > 0);
m->n_reloading--;
@@ -2403,6 +2409,10 @@ int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root) {
bus_track_serialize(m->subscribed, f);
+ r = dynamic_user_serialize(m, f, fds);
+ if (r < 0)
+ return r;
+
fputc('\n', f);
HASHMAP_FOREACH_KEY(u, t, m->units, i) {
@@ -2579,7 +2589,9 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
m->kdbus_fd = fdset_remove(fds, fd);
}
- } else {
+ } else if (startswith(l, "dynamic-user="))
+ dynamic_user_deserialize_one(m, l + 13, fds);
+ else {
int k;
k = bus_track_deserialize_item(&m->deserialized_subscribed, l);
@@ -2660,6 +2672,7 @@ int manager_reload(Manager *m) {
manager_clear_jobs_and_units(m);
lookup_paths_flush_generator(&m->lookup_paths);
lookup_paths_free(&m->lookup_paths);
+ dynamic_user_vacuum(m, false);
q = lookup_paths_init(&m->lookup_paths, m->unit_file_scope, 0, NULL);
if (q < 0 && r >= 0)
@@ -2696,6 +2709,9 @@ int manager_reload(Manager *m) {
/* Third, fire things up! */
manager_coldplug(m);
+ /* Release any dynamic users no longer referenced */
+ dynamic_user_vacuum(m, true);
+
/* Sync current state of bus names with our set of listening units */
if (m->api_bus)
manager_sync_bus_names(m, m->api_bus);
diff --git a/src/core/manager.h b/src/core/manager.h
index 6ed15c1a41..c681d5dc46 100644
--- a/src/core/manager.h
+++ b/src/core/manager.h
@@ -298,6 +298,9 @@ struct Manager {
/* Used for processing polkit authorization responses */
Hashmap *polkit_registry;
+ /* Dynamic users/groups, indexed by their name */
+ Hashmap *dynamic_users;
+
/* When the user hits C-A-D more than 7 times per 2s, reboot immediately... */
RateLimit ctrl_alt_del_ratelimit;
diff --git a/src/core/mount.c b/src/core/mount.c
index fda4d65d6f..db5cafcb11 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -245,6 +245,8 @@ static void mount_done(Unit *u) {
exec_command_done_array(m->exec_command, _MOUNT_EXEC_COMMAND_MAX);
m->control_command = NULL;
+ dynamic_creds_unref(&m->dynamic_creds);
+
mount_unwatch_control_pid(m);
m->timer_event_source = sd_event_source_unref(m->timer_event_source);
@@ -648,6 +650,9 @@ static int mount_coldplug(Unit *u) {
return r;
}
+ if (!IN_SET(new_state, MOUNT_DEAD, MOUNT_FAILED))
+ (void) unit_setup_dynamic_creds(u);
+
mount_set_state(m, new_state);
return 0;
}
@@ -716,6 +721,10 @@ static int mount_spawn(Mount *m, ExecCommand *c, pid_t *_pid) {
if (r < 0)
return r;
+ r = unit_setup_dynamic_creds(UNIT(m));
+ if (r < 0)
+ return r;
+
r = mount_arm_timer(m, usec_add(now(CLOCK_MONOTONIC), m->timeout_usec));
if (r < 0)
return r;
@@ -732,6 +741,7 @@ static int mount_spawn(Mount *m, ExecCommand *c, pid_t *_pid) {
&m->exec_context,
&exec_params,
m->exec_runtime,
+ &m->dynamic_creds,
&pid);
if (r < 0)
return r;
@@ -752,12 +762,14 @@ static void mount_enter_dead(Mount *m, MountResult f) {
if (f != MOUNT_SUCCESS)
m->result = f;
+ mount_set_state(m, m->result != MOUNT_SUCCESS ? MOUNT_FAILED : MOUNT_DEAD);
+
exec_runtime_destroy(m->exec_runtime);
m->exec_runtime = exec_runtime_unref(m->exec_runtime);
exec_context_destroy_runtime_directory(&m->exec_context, manager_get_runtime_prefix(UNIT(m)->manager));
- mount_set_state(m, m->result != MOUNT_SUCCESS ? MOUNT_FAILED : MOUNT_DEAD);
+ dynamic_creds_destroy(&m->dynamic_creds);
}
static void mount_enter_mounted(Mount *m, MountResult f) {
@@ -1817,6 +1829,7 @@ const UnitVTable mount_vtable = {
.cgroup_context_offset = offsetof(Mount, cgroup_context),
.kill_context_offset = offsetof(Mount, kill_context),
.exec_runtime_offset = offsetof(Mount, exec_runtime),
+ .dynamic_creds_offset = offsetof(Mount, dynamic_creds),
.sections =
"Unit\0"
diff --git a/src/core/mount.h b/src/core/mount.h
index da529c44f4..ac27b518cc 100644
--- a/src/core/mount.h
+++ b/src/core/mount.h
@@ -21,8 +21,8 @@
typedef struct Mount Mount;
-#include "execute.h"
#include "kill.h"
+#include "dynamic-user.h"
typedef enum MountExecCommand {
MOUNT_EXEC_MOUNT,
@@ -85,6 +85,7 @@ struct Mount {
CGroupContext cgroup_context;
ExecRuntime *exec_runtime;
+ DynamicCreds dynamic_creds;
MountState state, deserialized_state;
diff --git a/src/core/namespace.c b/src/core/namespace.c
index 4baf4750f4..52a2505d94 100644
--- a/src/core/namespace.c
+++ b/src/core/namespace.c
@@ -642,7 +642,7 @@ int setup_netns(int netns_storage_socket[2]) {
}
fail:
- lockf(netns_storage_socket[0], F_ULOCK, 0);
+ (void) lockf(netns_storage_socket[0], F_ULOCK, 0);
return r;
}
diff --git a/src/core/scope.c b/src/core/scope.c
index decd1a1f3f..b45e238974 100644
--- a/src/core/scope.c
+++ b/src/core/scope.c
@@ -240,7 +240,7 @@ static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) {
/* If we have a controller set let's ask the controller nicely
* to terminate the scope, instead of us going directly into
- * SIGTERM beserk mode */
+ * SIGTERM berserk mode */
if (state == SCOPE_STOP_SIGTERM)
skip_signal = bus_scope_send_request_stop(s) > 0;
@@ -248,7 +248,9 @@ static void scope_enter_signal(Scope *s, ScopeState state, ScopeResult f) {
r = unit_kill_context(
UNIT(s),
&s->kill_context,
- state != SCOPE_STOP_SIGTERM ? KILL_KILL : KILL_TERMINATE,
+ state != SCOPE_STOP_SIGTERM ? KILL_KILL :
+ s->was_abandoned ? KILL_TERMINATE_AND_LOG :
+ KILL_TERMINATE,
-1, -1, false);
if (r < 0)
goto fail;
@@ -369,6 +371,7 @@ static int scope_serialize(Unit *u, FILE *f, FDSet *fds) {
assert(fds);
unit_serialize_item(u, f, "state", scope_state_to_string(s->state));
+ unit_serialize_item(u, f, "was-abandoned", yes_no(s->was_abandoned));
return 0;
}
@@ -389,6 +392,14 @@ static int scope_deserialize_item(Unit *u, const char *key, const char *value, F
else
s->deserialized_state = state;
+ } else if (streq(key, "was-abandoned")) {
+ int k;
+
+ k = parse_boolean(value);
+ if (k < 0)
+ log_unit_debug(u, "Failed to parse boolean value: %s", value);
+ else
+ s->was_abandoned = k;
} else
log_unit_debug(u, "Unknown serialization key: %s", key);
@@ -474,6 +485,7 @@ int scope_abandon(Scope *s) {
if (!IN_SET(s->state, SCOPE_RUNNING, SCOPE_ABANDONED))
return -ESTALE;
+ s->was_abandoned = true;
s->controller = mfree(s->controller);
/* The client is no longer watching the remaining processes,
diff --git a/src/core/scope.h b/src/core/scope.h
index 2dc86325c5..eaf8e8b447 100644
--- a/src/core/scope.h
+++ b/src/core/scope.h
@@ -21,7 +21,9 @@
typedef struct Scope Scope;
+#include "cgroup.h"
#include "kill.h"
+#include "unit.h"
typedef enum ScopeResult {
SCOPE_SUCCESS,
@@ -43,6 +45,7 @@ struct Scope {
usec_t timeout_stop_usec;
char *controller;
+ bool was_abandoned;
sd_event_source *timer_event_source;
};
diff --git a/src/core/service.c b/src/core/service.c
index 13de671700..4d59d78ecb 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -322,6 +322,8 @@ static void service_done(Unit *u) {
s->control_command = NULL;
s->main_command = NULL;
+ dynamic_creds_unref(&s->dynamic_creds);
+
exit_status_set_free(&s->restart_prevent_status);
exit_status_set_free(&s->restart_force_status);
exit_status_set_free(&s->success_status);
@@ -1030,6 +1032,9 @@ static int service_coldplug(Unit *u) {
if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
service_start_watchdog(s);
+ if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
+ (void) unit_setup_dynamic_creds(u);
+
service_set_state(s, s->deserialized_state);
return 0;
}
@@ -1184,6 +1189,10 @@ static int service_spawn(
if (r < 0)
return r;
+ r = unit_setup_dynamic_creds(UNIT(s));
+ if (r < 0)
+ return r;
+
if (pass_fds ||
s->exec_context.std_input == EXEC_INPUT_SOCKET ||
s->exec_context.std_output == EXEC_OUTPUT_SOCKET ||
@@ -1285,6 +1294,7 @@ static int service_spawn(
&s->exec_context,
&exec_params,
s->exec_runtime,
+ &s->dynamic_creds,
&pid);
if (r < 0)
return r;
@@ -1418,9 +1428,12 @@ static void service_enter_dead(Service *s, ServiceResult f, bool allow_restart)
exec_runtime_destroy(s->exec_runtime);
s->exec_runtime = exec_runtime_unref(s->exec_runtime);
- /* Also, remove the runtime directory in */
+ /* Also, remove the runtime directory */
exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
+ /* Release the user, and destroy it if we are the only remaining owner */
+ dynamic_creds_destroy(&s->dynamic_creds);
+
/* Try to delete the pid file. At this point it will be
* out-of-date, and some software might be confused by it, so
* let's remove it. */
@@ -1674,7 +1687,7 @@ static void service_kill_control_processes(Service *s) {
return;
p = strjoina(UNIT(s)->cgroup_path, "/control");
- cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, true, true, true, NULL);
+ cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, p, SIGKILL, CGROUP_SIGCONT|CGROUP_IGNORE_SELF|CGROUP_REMOVE, NULL, NULL, NULL);
}
static void service_enter_start(Service *s) {
@@ -3323,6 +3336,7 @@ const UnitVTable service_vtable = {
.cgroup_context_offset = offsetof(Service, cgroup_context),
.kill_context_offset = offsetof(Service, kill_context),
.exec_runtime_offset = offsetof(Service, exec_runtime),
+ .dynamic_creds_offset = offsetof(Service, dynamic_creds),
.sections =
"Unit\0"
diff --git a/src/core/service.h b/src/core/service.h
index cfef375b03..8e56e1acb9 100644
--- a/src/core/service.h
+++ b/src/core/service.h
@@ -148,6 +148,7 @@ struct Service {
/* Runtime data of the execution context */
ExecRuntime *exec_runtime;
+ DynamicCreds dynamic_creds;
pid_t main_pid, control_pid;
int socket_fd;
diff --git a/src/core/socket.c b/src/core/socket.c
index e098055885..1ce41a1f07 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -150,6 +150,8 @@ static void socket_done(Unit *u) {
exec_command_free_array(s->exec_command, _SOCKET_EXEC_COMMAND_MAX);
s->control_command = NULL;
+ dynamic_creds_unref(&s->dynamic_creds);
+
socket_unwatch_control_pid(s);
unit_ref_unset(&s->service);
@@ -1602,6 +1604,9 @@ static int socket_coldplug(Unit *u) {
return r;
}
+ if (!IN_SET(s->deserialized_state, SOCKET_DEAD, SOCKET_FAILED))
+ (void) unit_setup_dynamic_creds(u);
+
socket_set_state(s, s->deserialized_state);
return 0;
}
@@ -1633,6 +1638,10 @@ static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) {
if (r < 0)
return r;
+ r = unit_setup_dynamic_creds(UNIT(s));
+ if (r < 0)
+ return r;
+
r = socket_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_usec));
if (r < 0)
return r;
@@ -1654,6 +1663,7 @@ static int socket_spawn(Socket *s, ExecCommand *c, pid_t *_pid) {
&s->exec_context,
&exec_params,
s->exec_runtime,
+ &s->dynamic_creds,
&pid);
if (r < 0)
return r;
@@ -1757,12 +1767,14 @@ static void socket_enter_dead(Socket *s, SocketResult f) {
if (f != SOCKET_SUCCESS)
s->result = f;
+ socket_set_state(s, s->result != SOCKET_SUCCESS ? SOCKET_FAILED : SOCKET_DEAD);
+
exec_runtime_destroy(s->exec_runtime);
s->exec_runtime = exec_runtime_unref(s->exec_runtime);
exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
- socket_set_state(s, s->result != SOCKET_SUCCESS ? SOCKET_FAILED : SOCKET_DEAD);
+ dynamic_creds_destroy(&s->dynamic_creds);
}
static void socket_enter_signal(Socket *s, SocketState state, SocketResult f);
@@ -2930,6 +2942,7 @@ const UnitVTable socket_vtable = {
.cgroup_context_offset = offsetof(Socket, cgroup_context),
.kill_context_offset = offsetof(Socket, kill_context),
.exec_runtime_offset = offsetof(Socket, exec_runtime),
+ .dynamic_creds_offset = offsetof(Socket, dynamic_creds),
.sections =
"Unit\0"
diff --git a/src/core/socket.h b/src/core/socket.h
index 0f1ac69c6f..6c32d67bef 100644
--- a/src/core/socket.h
+++ b/src/core/socket.h
@@ -94,7 +94,9 @@ struct Socket {
ExecContext exec_context;
KillContext kill_context;
CGroupContext cgroup_context;
+
ExecRuntime *exec_runtime;
+ DynamicCreds dynamic_creds;
/* For Accept=no sockets refers to the one service we'll
activate. For Accept=yes sockets is either NULL, or filled
diff --git a/src/core/swap.c b/src/core/swap.c
index a532b15be8..66a318d01f 100644
--- a/src/core/swap.c
+++ b/src/core/swap.c
@@ -153,6 +153,8 @@ static void swap_done(Unit *u) {
exec_command_done_array(s->exec_command, _SWAP_EXEC_COMMAND_MAX);
s->control_command = NULL;
+ dynamic_creds_unref(&s->dynamic_creds);
+
swap_unwatch_control_pid(s);
s->timer_event_source = sd_event_source_unref(s->timer_event_source);
@@ -553,6 +555,9 @@ static int swap_coldplug(Unit *u) {
return r;
}
+ if (!IN_SET(new_state, SWAP_DEAD, SWAP_FAILED))
+ (void) unit_setup_dynamic_creds(u);
+
swap_set_state(s, new_state);
return 0;
}
@@ -628,6 +633,10 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) {
if (r < 0)
goto fail;
+ r = unit_setup_dynamic_creds(UNIT(s));
+ if (r < 0)
+ return r;
+
r = swap_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), s->timeout_usec));
if (r < 0)
goto fail;
@@ -644,6 +653,7 @@ static int swap_spawn(Swap *s, ExecCommand *c, pid_t *_pid) {
&s->exec_context,
&exec_params,
s->exec_runtime,
+ &s->dynamic_creds,
&pid);
if (r < 0)
goto fail;
@@ -668,12 +678,14 @@ static void swap_enter_dead(Swap *s, SwapResult f) {
if (f != SWAP_SUCCESS)
s->result = f;
+ swap_set_state(s, s->result != SWAP_SUCCESS ? SWAP_FAILED : SWAP_DEAD);
+
exec_runtime_destroy(s->exec_runtime);
s->exec_runtime = exec_runtime_unref(s->exec_runtime);
exec_context_destroy_runtime_directory(&s->exec_context, manager_get_runtime_prefix(UNIT(s)->manager));
- swap_set_state(s, s->result != SWAP_SUCCESS ? SWAP_FAILED : SWAP_DEAD);
+ dynamic_creds_destroy(&s->dynamic_creds);
}
static void swap_enter_active(Swap *s, SwapResult f) {
@@ -1466,6 +1478,7 @@ const UnitVTable swap_vtable = {
.cgroup_context_offset = offsetof(Swap, cgroup_context),
.kill_context_offset = offsetof(Swap, kill_context),
.exec_runtime_offset = offsetof(Swap, exec_runtime),
+ .dynamic_creds_offset = offsetof(Swap, dynamic_creds),
.sections =
"Unit\0"
diff --git a/src/core/swap.h b/src/core/swap.h
index fbf66debdc..b0ef50f1e8 100644
--- a/src/core/swap.h
+++ b/src/core/swap.h
@@ -82,6 +82,7 @@ struct Swap {
CGroupContext cgroup_context;
ExecRuntime *exec_runtime;
+ DynamicCreds dynamic_creds;
SwapState state, deserialized_state;
diff --git a/src/core/system.conf b/src/core/system.conf
index db8b7acd78..c6bb050aac 100644
--- a/src/core/system.conf
+++ b/src/core/system.conf
@@ -42,7 +42,7 @@
#DefaultBlockIOAccounting=no
#DefaultMemoryAccounting=no
#DefaultTasksAccounting=yes
-#DefaultTasksMax=512
+#DefaultTasksMax=15%
#DefaultLimitCPU=
#DefaultLimitFSIZE=
#DefaultLimitDATA=
diff --git a/src/core/transaction.c b/src/core/transaction.c
index af539171fd..8370b864fb 100644
--- a/src/core/transaction.c
+++ b/src/core/transaction.c
@@ -591,6 +591,9 @@ static int transaction_apply(Transaction *tr, Manager *m, JobMode mode) {
HASHMAP_FOREACH(j, m->jobs, i) {
assert(j->installed);
+ if (j->unit->ignore_on_isolate)
+ continue;
+
if (hashmap_get(tr->jobs, j->unit))
continue;
diff --git a/src/core/unit.c b/src/core/unit.c
index fdf7ce3af3..ff7c562fba 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -3144,7 +3144,7 @@ int unit_kill_common(
if (!pid_set)
return -ENOMEM;
- q = cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, signo, false, false, false, pid_set);
+ q = cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, signo, 0, pid_set, NULL, NULL);
if (q < 0 && q != -EAGAIN && q != -ESRCH && q != -ENOENT)
r = q;
else
@@ -3224,6 +3224,33 @@ void unit_ref_unset(UnitRef *ref) {
ref->unit = NULL;
}
+static int user_from_unit_name(Unit *u, char **ret) {
+
+ static const uint8_t hash_key[] = {
+ 0x58, 0x1a, 0xaf, 0xe6, 0x28, 0x58, 0x4e, 0x96,
+ 0xb4, 0x4e, 0xf5, 0x3b, 0x8c, 0x92, 0x07, 0xec
+ };
+
+ _cleanup_free_ char *n = NULL;
+ int r;
+
+ r = unit_name_to_prefix(u->id, &n);
+ if (r < 0)
+ return r;
+
+ if (valid_user_group_name(n)) {
+ *ret = n;
+ n = NULL;
+ return 0;
+ }
+
+ /* If we can't use the unit name as a user name, then let's hash it and use that */
+ if (asprintf(ret, "_du%016" PRIx64, siphash24(n, strlen(n), hash_key)) < 0)
+ return -ENOMEM;
+
+ return 0;
+}
+
int unit_patch_contexts(Unit *u) {
CGroupContext *cc;
ExecContext *ec;
@@ -3268,6 +3295,22 @@ int unit_patch_contexts(Unit *u) {
if (ec->private_devices)
ec->capability_bounding_set &= ~(UINT64_C(1) << CAP_MKNOD);
+
+ if (ec->dynamic_user) {
+ if (!ec->user) {
+ r = user_from_unit_name(u, &ec->user);
+ if (r < 0)
+ return r;
+ }
+
+ if (!ec->group) {
+ ec->group = strdup(ec->user);
+ if (!ec->group)
+ return -ENOMEM;
+ }
+
+ ec->private_tmp = true;
+ }
}
cc = unit_get_cgroup_context(u);
@@ -3512,6 +3555,43 @@ int unit_make_transient(Unit *u) {
return 0;
}
+static void log_kill(pid_t pid, int sig, void *userdata) {
+ _cleanup_free_ char *comm = NULL;
+
+ (void) get_process_comm(pid, &comm);
+
+ /* Don't log about processes marked with brackets, under the assumption that these are temporary processes
+ only, like for example systemd's own PAM stub process. */
+ if (comm && comm[0] == '(')
+ return;
+
+ log_unit_notice(userdata,
+ "Killing process " PID_FMT " (%s) with signal SIG%s.",
+ pid,
+ strna(comm),
+ signal_to_string(sig));
+}
+
+static int operation_to_signal(KillContext *c, KillOperation k) {
+ assert(c);
+
+ switch (k) {
+
+ case KILL_TERMINATE:
+ case KILL_TERMINATE_AND_LOG:
+ return c->kill_signal;
+
+ case KILL_KILL:
+ return SIGKILL;
+
+ case KILL_ABORT:
+ return SIGABRT;
+
+ default:
+ assert_not_reached("KillOperation unknown");
+ }
+}
+
int unit_kill_context(
Unit *u,
KillContext *c,
@@ -3520,58 +3600,63 @@ int unit_kill_context(
pid_t control_pid,
bool main_pid_alien) {
- bool wait_for_exit = false;
+ bool wait_for_exit = false, send_sighup;
+ cg_kill_log_func_t log_func;
int sig, r;
assert(u);
assert(c);
+ /* Kill the processes belonging to this unit, in preparation for shutting the unit down. Returns > 0 if we
+ * killed something worth waiting for, 0 otherwise. */
+
if (c->kill_mode == KILL_NONE)
return 0;
- switch (k) {
- case KILL_KILL:
- sig = SIGKILL;
- break;
- case KILL_ABORT:
- sig = SIGABRT;
- break;
- case KILL_TERMINATE:
- sig = c->kill_signal;
- break;
- default:
- assert_not_reached("KillOperation unknown");
- }
+ sig = operation_to_signal(c, k);
+
+ send_sighup =
+ c->send_sighup &&
+ IN_SET(k, KILL_TERMINATE, KILL_TERMINATE_AND_LOG) &&
+ sig != SIGHUP;
+
+ log_func =
+ k != KILL_TERMINATE ||
+ IN_SET(sig, SIGKILL, SIGABRT) ? log_kill : NULL;
if (main_pid > 0) {
- r = kill_and_sigcont(main_pid, sig);
+ if (log_func)
+ log_func(main_pid, sig, u);
+ r = kill_and_sigcont(main_pid, sig);
if (r < 0 && r != -ESRCH) {
_cleanup_free_ char *comm = NULL;
- get_process_comm(main_pid, &comm);
+ (void) get_process_comm(main_pid, &comm);
log_unit_warning_errno(u, r, "Failed to kill main process " PID_FMT " (%s), ignoring: %m", main_pid, strna(comm));
} else {
if (!main_pid_alien)
wait_for_exit = true;
- if (c->send_sighup && k == KILL_TERMINATE)
+ if (r != -ESRCH && send_sighup)
(void) kill(main_pid, SIGHUP);
}
}
if (control_pid > 0) {
- r = kill_and_sigcont(control_pid, sig);
+ if (log_func)
+ log_func(control_pid, sig, u);
+ r = kill_and_sigcont(control_pid, sig);
if (r < 0 && r != -ESRCH) {
_cleanup_free_ char *comm = NULL;
- get_process_comm(control_pid, &comm);
+ (void) get_process_comm(control_pid, &comm);
log_unit_warning_errno(u, r, "Failed to kill control process " PID_FMT " (%s), ignoring: %m", control_pid, strna(comm));
} else {
wait_for_exit = true;
- if (c->send_sighup && k == KILL_TERMINATE)
+ if (r != -ESRCH && send_sighup)
(void) kill(control_pid, SIGHUP);
}
}
@@ -3585,7 +3670,11 @@ int unit_kill_context(
if (!pid_set)
return -ENOMEM;
- r = cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, sig, true, k != KILL_TERMINATE, false, pid_set);
+ r = cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path,
+ sig,
+ CGROUP_SIGCONT|CGROUP_IGNORE_SELF,
+ pid_set,
+ log_func, u);
if (r < 0) {
if (r != -EAGAIN && r != -ESRCH && r != -ENOENT)
log_unit_warning_errno(u, r, "Failed to kill control group %s, ignoring: %m", u->cgroup_path);
@@ -3610,14 +3699,18 @@ int unit_kill_context(
(detect_container() == 0 && !unit_cgroup_delegate(u)))
wait_for_exit = true;
- if (c->send_sighup && k != KILL_KILL) {
+ if (send_sighup) {
set_free(pid_set);
pid_set = unit_pid_set(main_pid, control_pid);
if (!pid_set)
return -ENOMEM;
- cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, SIGHUP, false, true, false, pid_set);
+ cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path,
+ SIGHUP,
+ CGROUP_IGNORE_SELF,
+ pid_set,
+ NULL, NULL);
}
}
}
@@ -3726,6 +3819,26 @@ int unit_setup_exec_runtime(Unit *u) {
return exec_runtime_make(rt, unit_get_exec_context(u), u->id);
}
+int unit_setup_dynamic_creds(Unit *u) {
+ ExecContext *ec;
+ DynamicCreds *dcreds;
+ size_t offset;
+
+ assert(u);
+
+ offset = UNIT_VTABLE(u)->dynamic_creds_offset;
+ assert(offset > 0);
+ dcreds = (DynamicCreds*) ((uint8_t*) u + offset);
+
+ ec = unit_get_exec_context(u);
+ assert(ec);
+
+ if (!ec->dynamic_user)
+ return 0;
+
+ return dynamic_creds_acquire(dcreds, u->manager, ec->user, ec->group);
+}
+
bool unit_type_supported(UnitType t) {
if (_unlikely_(t < 0))
return false;
diff --git a/src/core/unit.h b/src/core/unit.h
index c41011ed9d..47eb8d50a6 100644
--- a/src/core/unit.h
+++ b/src/core/unit.h
@@ -36,6 +36,7 @@ typedef struct UnitStatusMessageFormats UnitStatusMessageFormats;
typedef enum KillOperation {
KILL_TERMINATE,
+ KILL_TERMINATE_AND_LOG,
KILL_KILL,
KILL_ABORT,
_KILL_OPERATION_MAX,
@@ -290,6 +291,10 @@ struct UnitVTable {
* that */
size_t exec_runtime_offset;
+ /* If greater than 0, the offset into the object where the pointer to DynamicCreds is found, if the unit type
+ * has that. */
+ size_t dynamic_creds_offset;
+
/* The name of the configuration file section with the private settings of this unit */
const char *private_section;
@@ -588,6 +593,7 @@ CGroupContext *unit_get_cgroup_context(Unit *u) _pure_;
ExecRuntime *unit_get_exec_runtime(Unit *u) _pure_;
int unit_setup_exec_runtime(Unit *u);
+int unit_setup_dynamic_creds(Unit *u);
int unit_write_drop_in(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *data);
int unit_write_drop_in_format(Unit *u, UnitSetPropertiesMode mode, const char *name, const char *format, ...) _printf_(4,5);
diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c
index 82a54968e7..dcc09fcc6d 100644
--- a/src/coredump/coredump.c
+++ b/src/coredump/coredump.c
@@ -157,10 +157,8 @@ static int fix_acl(int fd, uid_t uid) {
if (acl_create_entry(&acl, &entry) < 0 ||
acl_set_tag_type(entry, ACL_USER) < 0 ||
- acl_set_qualifier(entry, &uid) < 0) {
- log_error_errno(errno, "Failed to patch ACL: %m");
- return -errno;
- }
+ acl_set_qualifier(entry, &uid) < 0)
+ return log_error_errno(errno, "Failed to patch ACL: %m");
if (acl_get_permset(entry, &permset) < 0 ||
acl_add_perm(permset, ACL_READ) < 0)
@@ -756,7 +754,6 @@ static int process_socket(int fd) {
iovec[n_iovec].iov_len = l;
iovec[n_iovec].iov_base = malloc(l + 1);
-
if (!iovec[n_iovec].iov_base) {
r = log_oom();
goto finish;
@@ -852,12 +849,42 @@ static int send_iovec(const struct iovec iovec[], size_t n_iovec, int input_fd)
return log_error_errno(errno, "Failed to connect to coredump service: %m");
for (i = 0; i < n_iovec; i++) {
- ssize_t n;
- assert(iovec[i].iov_len > 0);
+ struct msghdr mh = {
+ .msg_iov = (struct iovec*) iovec + i,
+ .msg_iovlen = 1,
+ };
+ struct iovec copy[2];
+
+ for (;;) {
+ if (sendmsg(fd, &mh, MSG_NOSIGNAL) >= 0)
+ break;
+
+ if (errno == EMSGSIZE && mh.msg_iov[0].iov_len > 0) {
+ /* This field didn't fit? That's a pity. Given that this is just metadata,
+ * let's truncate the field at half, and try again. We append three dots, in
+ * order to show that this is truncated. */
+
+ if (mh.msg_iov != copy) {
+ /* We don't want to modify the caller's iovec, hence let's create our
+ * own array, consisting of two new iovecs, where the first is a
+ * (truncated) copy of what we want to send, and the second one
+ * contains the trailing dots. */
+ copy[0] = iovec[i];
+ copy[1] = (struct iovec) {
+ .iov_base = (char[]) { '.', '.', '.' },
+ .iov_len = 3,
+ };
+
+ mh.msg_iov = copy;
+ mh.msg_iovlen = 2;
+ }
+
+ copy[0].iov_len /= 2; /* halve it, and try again */
+ continue;
+ }
- n = send(fd, iovec[i].iov_base, iovec[i].iov_len, MSG_NOSIGNAL);
- if (n < 0)
return log_error_errno(errno, "Failed to send coredump datagram: %m");
+ }
}
r = send_one_fd(fd, input_fd, 0);
@@ -867,7 +894,7 @@ static int send_iovec(const struct iovec iovec[], size_t n_iovec, int input_fd)
return 0;
}
-static int process_journald_crash(const char *context[], int input_fd) {
+static int process_special_crash(const char *context[], int input_fd) {
_cleanup_close_ int coredump_fd = -1, coredump_node_fd = -1;
_cleanup_free_ char *filename = NULL;
uint64_t coredump_size;
@@ -876,7 +903,7 @@ static int process_journald_crash(const char *context[], int input_fd) {
assert(context);
assert(input_fd >= 0);
- /* If we are journald, we cut things short, don't write to the journal, but still create a coredump. */
+ /* If we are pid1 or journald, we cut things short, don't write to the journal, but still create a coredump. */
if (arg_storage != COREDUMP_STORAGE_NONE)
arg_storage = COREDUMP_STORAGE_EXTERNAL;
@@ -889,7 +916,8 @@ static int process_journald_crash(const char *context[], int input_fd) {
if (r < 0)
return r;
- log_info("Detected coredump of the journal daemon itself, diverted to %s.", filename);
+ log_notice("Detected coredump of the journal daemon or PID 1, diverted to %s.", filename);
+
return 0;
}
@@ -949,9 +977,17 @@ static int process_kernel(int argc, char* argv[]) {
if (cg_pid_get_unit(pid, &t) >= 0) {
- if (streq(t, SPECIAL_JOURNALD_SERVICE)) {
+ /* If this is PID 1 disable coredump collection, we'll unlikely be able to process it later on. */
+ if (streq(t, SPECIAL_INIT_SCOPE)) {
+ log_notice("Due to PID 1 having crashed coredump collection will now be turned off.");
+ (void) write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", 0);
+ }
+
+ /* Let's avoid dead-locks when processing journald and init crashes, as socket activation and logging
+ * are unlikely to work then. */
+ if (STR_IN_SET(t, SPECIAL_JOURNALD_SERVICE, SPECIAL_INIT_SCOPE)) {
free(t);
- return process_journald_crash(context, STDIN_FILENO);
+ return process_special_crash(context, STDIN_FILENO);
}
core_unit = strjoina("COREDUMP_UNIT=", t);
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
index 3df72460ef..c9e8e54ee3 100644
--- a/src/firstboot/firstboot.c
+++ b/src/firstboot/firstboot.c
@@ -427,7 +427,7 @@ static int process_machine_id(void) {
if (laccess(etc_machine_id, F_OK) >= 0)
return 0;
- if (sd_id128_equal(arg_machine_id, SD_ID128_NULL))
+ if (sd_id128_is_null(arg_machine_id))
return 0;
mkdir_parents(etc_machine_id, 0755);
diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c
index 5aeca7e2d5..33af553d0d 100644
--- a/src/fstab-generator/fstab-generator.c
+++ b/src/fstab-generator/fstab-generator.c
@@ -85,13 +85,12 @@ static int add_swap(
return log_oom();
f = fopen(unit, "wxe");
- if (!f) {
- if (errno == EEXIST)
- log_error("Failed to create swap unit file %s, as it already exists. Duplicate entry in /etc/fstab?", unit);
- else
- log_error_errno(errno, "Failed to create unit file %s: %m", unit);
- return -errno;
- }
+ if (!f)
+ return log_error_errno(errno,
+ errno == EEXIST ?
+ "Failed to create swap unit file %s, as it already exists. Duplicate entry in /etc/fstab?" :
+ "Failed to create unit file %s: %m",
+ unit);
fprintf(f,
"# Automatically generated by systemd-fstab-generator\n\n"
@@ -281,13 +280,12 @@ static int add_mount(
return log_oom();
f = fopen(unit, "wxe");
- if (!f) {
- if (errno == EEXIST)
- log_error("Failed to create mount unit file %s, as it already exists. Duplicate entry in /etc/fstab?", unit);
- else
- log_error_errno(errno, "Failed to create unit file %s: %m", unit);
- return -errno;
- }
+ if (!f)
+ return log_error_errno(errno,
+ errno == EEXIST ?
+ "Failed to create mount unit file %s, as it already exists. Duplicate entry in /etc/fstab?" :
+ "Failed to create unit file %s: %m",
+ unit);
fprintf(f,
"# Automatically generated by systemd-fstab-generator\n\n"
diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
index a4938a7c3a..6cc1aad705 100644
--- a/src/gpt-auto-generator/gpt-auto-generator.c
+++ b/src/gpt-auto-generator/gpt-auto-generator.c
@@ -450,101 +450,101 @@ static int add_automount(
}
static int add_boot(const char *what) {
- _cleanup_blkid_free_probe_ blkid_probe b = NULL;
- const char *fstype = NULL, *uuid = NULL;
- sd_id128_t id, type_id;
+ const char *esp;
int r;
assert(what);
- if (!is_efi_boot()) {
- log_debug("Not an EFI boot, ignoring /boot.");
- return 0;
- }
-
if (in_initrd()) {
- log_debug("In initrd, ignoring /boot.");
+ log_debug("In initrd, ignoring the ESP.");
return 0;
}
if (detect_container() > 0) {
- log_debug("In a container, ignoring /boot.");
+ log_debug("In a container, ignoring the ESP.");
return 0;
}
+ /* If /efi exists we'll use that. Otherwise we'll use /boot, as that's usually the better choice */
+ esp = access("/efi/", F_OK) >= 0 ? "/efi" : "/boot";
+
/* We create an .automount which is not overridden by the .mount from the fstab generator. */
- if (fstab_is_mount_point("/boot")) {
- log_debug("/boot specified in fstab, ignoring.");
+ if (fstab_is_mount_point(esp)) {
+ log_debug("%s specified in fstab, ignoring.", esp);
return 0;
}
- if (path_is_busy("/boot")) {
- log_debug("/boot already populated, ignoring.");
+ if (path_is_busy(esp)) {
+ log_debug("%s already populated, ignoring.", esp);
return 0;
}
- r = efi_loader_get_device_part_uuid(&id);
- if (r == -ENOENT) {
- log_debug("EFI loader partition unknown.");
- return 0;
- }
+ if (is_efi_boot()) {
+ _cleanup_blkid_free_probe_ blkid_probe b = NULL;
+ const char *fstype = NULL, *uuid_string = NULL;
+ sd_id128_t loader_uuid, part_uuid;
- if (r < 0) {
- log_error_errno(r, "Failed to read ESP partition UUID: %m");
- return r;
- }
+ /* If this is an EFI boot, be extra careful, and only mount the ESP if it was the ESP used for booting. */
- errno = 0;
- b = blkid_new_probe_from_filename(what);
- if (!b) {
- if (errno == 0)
- return log_oom();
- return log_error_errno(errno, "Failed to allocate prober: %m");
- }
-
- blkid_probe_enable_partitions(b, 1);
- blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS);
+ r = efi_loader_get_device_part_uuid(&loader_uuid);
+ if (r == -ENOENT) {
+ log_debug("EFI loader partition unknown.");
+ return 0;
+ }
+ if (r < 0)
+ return log_error_errno(r, "Failed to read ESP partition UUID: %m");
- errno = 0;
- r = blkid_do_safeprobe(b);
- if (r == -2 || r == 1) /* no result or uncertain */
- return 0;
- else if (r != 0)
- return log_error_errno(errno ?: EIO, "Failed to probe %s: %m", what);
+ errno = 0;
+ b = blkid_new_probe_from_filename(what);
+ if (!b) {
+ if (errno == 0)
+ return log_oom();
+ return log_error_errno(errno, "Failed to allocate prober: %m");
+ }
- (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL);
- if (!streq_ptr(fstype, "vfat")) {
- log_debug("Partition for /boot is not a FAT filesystem, ignoring.");
- return 0;
- }
+ blkid_probe_enable_partitions(b, 1);
+ blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS);
- errno = 0;
- r = blkid_probe_lookup_value(b, "PART_ENTRY_UUID", &uuid, NULL);
- if (r != 0) {
- log_debug_errno(errno, "Partition for /boot does not have a UUID, ignoring.");
- return 0;
- }
+ errno = 0;
+ r = blkid_do_safeprobe(b);
+ if (r == -2 || r == 1) /* no result or uncertain */
+ return 0;
+ else if (r != 0)
+ return log_error_errno(errno ?: EIO, "Failed to probe %s: %m", what);
- if (sd_id128_from_string(uuid, &type_id) < 0) {
- log_debug("Partition for /boot does not have a valid UUID, ignoring.");
- return 0;
- }
+ (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL);
+ if (!streq_ptr(fstype, "vfat")) {
+ log_debug("Partition for %s is not a FAT filesystem, ignoring.", esp);
+ return 0;
+ }
- if (!sd_id128_equal(type_id, id)) {
- log_debug("Partition for /boot does not appear to be the partition we are booted from.");
- return 0;
- }
+ errno = 0;
+ r = blkid_probe_lookup_value(b, "PART_ENTRY_UUID", &uuid_string, NULL);
+ if (r != 0) {
+ log_debug_errno(errno, "Partition for %s does not have a UUID, ignoring.", esp);
+ return 0;
+ }
- r = add_automount("boot",
- what,
- "/boot",
- "vfat",
- true,
- "umask=0077",
- "EFI System Partition Automount",
- 120 * USEC_PER_SEC);
+ if (sd_id128_from_string(uuid_string, &part_uuid) < 0) {
+ log_debug("Partition for %s does not have a valid UUID, ignoring.", esp);
+ return 0;
+ }
- return r;
+ if (!sd_id128_equal(part_uuid, loader_uuid)) {
+ log_debug("Partition for %s does not appear to be the partition we are booted from.", esp);
+ return 0;
+ }
+ } else
+ log_debug("Not an EFI boot, skipping ESP check.");
+
+ return add_automount("boot",
+ what,
+ esp,
+ "vfat",
+ true,
+ "umask=0077",
+ "EFI System Partition Automount",
+ 120 * USEC_PER_SEC);
}
#else
static int add_boot(const char *what) {
diff --git a/src/import/import.c b/src/import/import.c
index 4e442ee84a..2b6ca24af8 100644
--- a/src/import/import.c
+++ b/src/import/import.c
@@ -90,7 +90,7 @@ static int import_tar(int argc, char *argv[], void *userdata) {
if (r < 0)
return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
else if (r > 0) {
- log_error_errno(EEXIST, "Image '%s' already exists.", local);
+ log_error("Image '%s' already exists.", local);
return -EEXIST;
}
}
@@ -185,7 +185,7 @@ static int import_raw(int argc, char *argv[], void *userdata) {
if (r < 0)
return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
else if (r > 0) {
- log_error_errno(EEXIST, "Image '%s' already exists.", local);
+ log_error("Image '%s' already exists.", local);
return -EEXIST;
}
}
diff --git a/src/import/pull.c b/src/import/pull.c
index 72604a6a74..53b1211965 100644
--- a/src/import/pull.c
+++ b/src/import/pull.c
@@ -97,7 +97,7 @@ static int pull_tar(int argc, char *argv[], void *userdata) {
if (r < 0)
return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
else if (r > 0) {
- log_error_errno(EEXIST, "Image '%s' already exists.", local);
+ log_error("Image '%s' already exists.", local);
return -EEXIST;
}
}
@@ -183,7 +183,7 @@ static int pull_raw(int argc, char *argv[], void *userdata) {
if (r < 0)
return log_error_errno(r, "Failed to check whether image '%s' exists: %m", local);
else if (r > 0) {
- log_error_errno(EEXIST, "Image '%s' already exists.", local);
+ log_error("Image '%s' already exists.", local);
return -EEXIST;
}
}
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c
index 4cc0c2b6c2..53c6180864 100644
--- a/src/journal/journalctl.c
+++ b/src/journal/journalctl.c
@@ -1266,7 +1266,7 @@ static int add_boot(sd_journal *j) {
/* Take a shortcut and use the current boot_id, which we can do very quickly.
* We can do this only when we logs are coming from the current machine,
* so take the slow path if log location is specified. */
- if (arg_boot_offset == 0 && sd_id128_equal(arg_boot_id, SD_ID128_NULL) &&
+ if (arg_boot_offset == 0 && sd_id128_is_null(arg_boot_id) &&
!arg_directory && !arg_file)
return add_match_this_boot(j, arg_machine);
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
index 886e0ec856..587c343b31 100644
--- a/src/journal/journald-server.c
+++ b/src/journal/journald-server.c
@@ -877,7 +877,7 @@ void server_driver_message(Server *s, sd_id128_t message_id, const char *format,
assert_cc(6 == LOG_INFO);
IOVEC_SET_STRING(iovec[n++], "PRIORITY=6");
- if (!sd_id128_equal(message_id, SD_ID128_NULL)) {
+ if (!sd_id128_is_null(message_id)) {
snprintf(mid, sizeof(mid), LOG_MESSAGE_ID(message_id));
IOVEC_SET_STRING(iovec[n++], mid);
}
diff --git a/src/journal/journald-server.h b/src/journal/journald-server.h
index e025a4cf90..d2a32ab422 100644
--- a/src/journal/journald-server.h
+++ b/src/journal/journald-server.h
@@ -43,7 +43,7 @@ typedef enum Storage {
typedef enum SplitMode {
SPLIT_UID,
- SPLIT_LOGIN,
+ SPLIT_LOGIN, /* deprecated */
SPLIT_NONE,
_SPLIT_MAX,
_SPLIT_INVALID = -1
diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
index 1159dc384d..c66bcfc092 100644
--- a/src/kernel-install/kernel-install
+++ b/src/kernel-install/kernel-install
@@ -86,10 +86,15 @@ if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then
exit 1
fi
-if [[ -d /boot/loader/entries ]] || [[ -d /boot/$MACHINE_ID ]]; then
+if [[ -d /efi/loader/entries ]] || [[ -d /efi/$MACHINE_ID ]]; then
+ BOOT_DIR_ABS="/efi/$MACHINE_ID/$KERNEL_VERSION"
+elif [[ -d /boot/loader/entries ]] || [[ -d /boot/$MACHINE_ID ]]; then
BOOT_DIR_ABS="/boot/$MACHINE_ID/$KERNEL_VERSION"
-elif [[ -d /boot/efi/loader/entries ]] || [[ -d /boot/efi/$MACHINE_ID ]] \
- || mountpoint -q /boot/efi; then
+elif [[ -d /boot/efi/loader/entries ]] || [[ -d /boot/efi/$MACHINE_ID ]]; then
+ BOOT_DIR_ABS="/boot/efi/$MACHINE_ID/$KERNEL_VERSION"
+elif mountpoint -q /efi; then
+ BOOT_DIR_ABS="/efi/$MACHINE_ID/$KERNEL_VERSION"
+elif mountpoint -q /boot/efi; then
BOOT_DIR_ABS="/boot/efi/$MACHINE_ID/$KERNEL_VERSION"
else
BOOT_DIR_ABS="/boot/$MACHINE_ID/$KERNEL_VERSION"
diff --git a/src/libsystemd/sd-bus/bus-common-errors.c b/src/libsystemd/sd-bus/bus-common-errors.c
index 02e3bf904c..32be3cdc38 100644
--- a/src/libsystemd/sd-bus/bus-common-errors.c
+++ b/src/libsystemd/sd-bus/bus-common-errors.c
@@ -44,6 +44,7 @@ BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_common_errors[] = {
SD_BUS_ERROR_MAP(BUS_ERROR_NO_ISOLATION, EPERM),
SD_BUS_ERROR_MAP(BUS_ERROR_SHUTTING_DOWN, ECANCELED),
SD_BUS_ERROR_MAP(BUS_ERROR_SCOPE_NOT_RUNNING, EHOSTDOWN),
+ SD_BUS_ERROR_MAP(BUS_ERROR_NO_SUCH_DYNAMIC_USER, ESRCH),
SD_BUS_ERROR_MAP(BUS_ERROR_NO_SUCH_MACHINE, ENXIO),
SD_BUS_ERROR_MAP(BUS_ERROR_NO_SUCH_IMAGE, ENOENT),
diff --git a/src/libsystemd/sd-bus/bus-common-errors.h b/src/libsystemd/sd-bus/bus-common-errors.h
index c8f369cb78..befb6fbfe0 100644
--- a/src/libsystemd/sd-bus/bus-common-errors.h
+++ b/src/libsystemd/sd-bus/bus-common-errors.h
@@ -40,6 +40,7 @@
#define BUS_ERROR_NO_ISOLATION "org.freedesktop.systemd1.NoIsolation"
#define BUS_ERROR_SHUTTING_DOWN "org.freedesktop.systemd1.ShuttingDown"
#define BUS_ERROR_SCOPE_NOT_RUNNING "org.freedesktop.systemd1.ScopeNotRunning"
+#define BUS_ERROR_NO_SUCH_DYNAMIC_USER "org.freedesktop.systemd1.NoSuchDynamicUser"
#define BUS_ERROR_NO_SUCH_MACHINE "org.freedesktop.machine1.NoSuchMachine"
#define BUS_ERROR_NO_SUCH_IMAGE "org.freedesktop.machine1.NoSuchImage"
diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c
index f1e2a06050..cfd7753139 100644
--- a/src/libsystemd/sd-bus/bus-socket.c
+++ b/src/libsystemd/sd-bus/bus-socket.c
@@ -221,7 +221,7 @@ static int bus_socket_auth_verify_client(sd_bus *b) {
peer.bytes[i/2] = ((uint8_t) x << 4 | (uint8_t) y);
}
- if (!sd_id128_equal(b->server_id, SD_ID128_NULL) &&
+ if (!sd_id128_is_null(b->server_id) &&
!sd_id128_equal(b->server_id, peer))
return -EPERM;
diff --git a/src/libsystemd/sd-id128/id128-util.c b/src/libsystemd/sd-id128/id128-util.c
new file mode 100644
index 0000000000..c3f527d657
--- /dev/null
+++ b/src/libsystemd/sd-id128/id128-util.c
@@ -0,0 +1,194 @@
+/***
+ This file is part of systemd.
+
+ Copyright 2016 Lennart Poettering
+
+ systemd is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "fd-util.h"
+#include "hexdecoct.h"
+#include "id128-util.h"
+#include "io-util.h"
+#include "stdio-util.h"
+
+char *id128_to_uuid_string(sd_id128_t id, char s[37]) {
+ unsigned n, k = 0;
+
+ assert(s);
+
+ /* Similar to sd_id128_to_string() but formats the result as UUID instead of plain hex chars */
+
+ for (n = 0; n < 16; n++) {
+
+ if (IN_SET(n, 4, 6, 8, 10))
+ s[k++] = '-';
+
+ s[k++] = hexchar(id.bytes[n] >> 4);
+ s[k++] = hexchar(id.bytes[n] & 0xF);
+ }
+
+ assert(k == 36);
+
+ s[k] = 0;
+
+ return s;
+}
+
+bool id128_is_valid(const char *s) {
+ size_t i, l;
+
+ assert(s);
+
+ l = strlen(s);
+ if (l == 32) {
+
+ /* Plain formatted 128bit hex string */
+
+ for (i = 0; i < l; i++) {
+ char c = s[i];
+
+ if (!(c >= '0' && c <= '9') &&
+ !(c >= 'a' && c <= 'z') &&
+ !(c >= 'A' && c <= 'Z'))
+ return false;
+ }
+
+ } else if (l == 36) {
+
+ /* Formatted UUID */
+
+ for (i = 0; i < l; i++) {
+ char c = s[i];
+
+ if ((i == 8 || i == 13 || i == 18 || i == 23)) {
+ if (c != '-')
+ return false;
+ } else {
+ if (!(c >= '0' && c <= '9') &&
+ !(c >= 'a' && c <= 'z') &&
+ !(c >= 'A' && c <= 'Z'))
+ return false;
+ }
+ }
+
+ } else
+ return false;
+
+ return true;
+}
+
+int id128_read_fd(int fd, Id128Format f, sd_id128_t *ret) {
+ char buffer[36 + 2];
+ ssize_t l;
+
+ assert(fd >= 0);
+ assert(f < _ID128_FORMAT_MAX);
+
+ /* Reads an 128bit ID from a file, which may either be in plain format (32 hex digits), or in UUID format, both
+ * optionally followed by a newline and nothing else. ID files should really be newline terminated, but if they
+ * aren't that's OK too, following the rule of "Be conservative in what you send, be liberal in what you
+ * accept". */
+
+ l = loop_read(fd, buffer, sizeof(buffer), false); /* we expect a short read of either 32/33 or 36/37 chars */
+ if (l < 0)
+ return (int) l;
+ if (l == 0) /* empty? */
+ return -ENOMEDIUM;
+
+ switch (l) {
+
+ case 33: /* plain UUID with trailing newline */
+ if (buffer[32] != '\n')
+ return -EINVAL;
+
+ /* fall through */
+ case 32: /* plain UUID without trailing newline */
+ if (f == ID128_UUID)
+ return -EINVAL;
+
+ buffer[32] = 0;
+ break;
+
+ case 37: /* RFC UUID with trailing newline */
+ if (buffer[36] != '\n')
+ return -EINVAL;
+
+ /* fall through */
+ case 36: /* RFC UUID without trailing newline */
+ if (f == ID128_PLAIN)
+ return -EINVAL;
+
+ buffer[36] = 0;
+ break;
+
+ default:
+ return -EINVAL;
+ }
+
+ return sd_id128_from_string(buffer, ret);
+}
+
+int id128_read(const char *p, Id128Format f, sd_id128_t *ret) {
+ _cleanup_close_ int fd = -1;
+
+ fd = open(p, O_RDONLY|O_CLOEXEC|O_NOCTTY);
+ if (fd < 0)
+ return -errno;
+
+ return id128_read_fd(fd, f, ret);
+}
+
+int id128_write_fd(int fd, Id128Format f, sd_id128_t id, bool do_sync) {
+ char buffer[36 + 2];
+ size_t sz;
+ int r;
+
+ assert(fd >= 0);
+ assert(f < _ID128_FORMAT_MAX);
+
+ if (f != ID128_UUID) {
+ sd_id128_to_string(id, buffer);
+ buffer[32] = '\n';
+ sz = 33;
+ } else {
+ id128_to_uuid_string(id, buffer);
+ buffer[36] = '\n';
+ sz = 37;
+ }
+
+ r = loop_write(fd, buffer, sz, false);
+ if (r < 0)
+ return r;
+
+ if (do_sync) {
+ if (fsync(fd) < 0)
+ return -errno;
+ }
+
+ return r;
+}
+
+int id128_write(const char *p, Id128Format f, sd_id128_t id, bool do_sync) {
+ _cleanup_close_ int fd = -1;
+
+ fd = open(p, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY, 0444);
+ if (fd < 0)
+ return -errno;
+
+ return id128_write_fd(fd, f, id, do_sync);
+}
diff --git a/src/libsystemd/sd-id128/id128-util.h b/src/libsystemd/sd-id128/id128-util.h
new file mode 100644
index 0000000000..3ba59acbca
--- /dev/null
+++ b/src/libsystemd/sd-id128/id128-util.h
@@ -0,0 +1,45 @@
+#pragma once
+
+/***
+ This file is part of systemd.
+
+ Copyright 2016 Lennart Poettering
+
+ systemd is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <stdbool.h>
+
+#include "sd-id128.h"
+#include "macro.h"
+
+char *id128_to_uuid_string(sd_id128_t id, char s[37]);
+
+/* Like SD_ID128_FORMAT_STR, but formats as UUID, not in plain format */
+#define ID128_UUID_FORMAT_STR "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x"
+
+bool id128_is_valid(const char *s) _pure_;
+
+typedef enum Id128Format {
+ ID128_ANY,
+ ID128_PLAIN, /* formatted as 32 hex chars as-is */
+ ID128_UUID, /* formatted as 36 character uuid string */
+ _ID128_FORMAT_MAX,
+} Id128Format;
+
+int id128_read_fd(int fd, Id128Format f, sd_id128_t *ret);
+int id128_read(const char *p, Id128Format f, sd_id128_t *ret);
+
+int id128_write_fd(int fd, Id128Format f, sd_id128_t id, bool do_sync);
+int id128_write(const char *p, Id128Format f, sd_id128_t id, bool do_sync);
diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c
index d9c0116f60..9f47d04e61 100644
--- a/src/libsystemd/sd-id128/sd-id128.c
+++ b/src/libsystemd/sd-id128/sd-id128.c
@@ -25,6 +25,7 @@
#include "fd-util.h"
#include "hexdecoct.h"
+#include "id128-util.h"
#include "io-util.h"
#include "macro.h"
#include "random-util.h"
@@ -51,7 +52,6 @@ _public_ int sd_id128_from_string(const char s[], sd_id128_t *ret) {
bool is_guid = false;
assert_return(s, -EINVAL);
- assert_return(ret, -EINVAL);
for (n = 0, i = 0; n < 16;) {
int a, b;
@@ -89,121 +89,57 @@ _public_ int sd_id128_from_string(const char s[], sd_id128_t *ret) {
if (s[i] != 0)
return -EINVAL;
- *ret = t;
+ if (ret)
+ *ret = t;
return 0;
}
-static sd_id128_t make_v4_uuid(sd_id128_t id) {
- /* Stolen from generate_random_uuid() of drivers/char/random.c
- * in the kernel sources */
-
- /* Set UUID version to 4 --- truly random generation */
- id.bytes[6] = (id.bytes[6] & 0x0F) | 0x40;
-
- /* Set the UUID variant to DCE */
- id.bytes[8] = (id.bytes[8] & 0x3F) | 0x80;
-
- return id;
-}
-
_public_ int sd_id128_get_machine(sd_id128_t *ret) {
- static thread_local sd_id128_t saved_machine_id;
- static thread_local bool saved_machine_id_valid = false;
- _cleanup_close_ int fd = -1;
- char buf[33];
- unsigned j;
- sd_id128_t t;
+ static thread_local sd_id128_t saved_machine_id = {};
int r;
assert_return(ret, -EINVAL);
- if (saved_machine_id_valid) {
- *ret = saved_machine_id;
- return 0;
- }
-
- fd = open("/etc/machine-id", O_RDONLY|O_CLOEXEC|O_NOCTTY);
- if (fd < 0)
- return -errno;
-
- r = loop_read_exact(fd, buf, 33, false);
- if (r < 0)
- return r;
- if (buf[32] !='\n')
- return -EIO;
-
- for (j = 0; j < 16; j++) {
- int a, b;
-
- a = unhexchar(buf[j*2]);
- b = unhexchar(buf[j*2+1]);
-
- if (a < 0 || b < 0)
- return -EIO;
+ if (sd_id128_is_null(saved_machine_id)) {
+ r = id128_read("/etc/machine-id", ID128_PLAIN, &saved_machine_id);
+ if (r < 0)
+ return r;
- t.bytes[j] = a << 4 | b;
+ if (sd_id128_is_null(saved_machine_id))
+ return -EINVAL;
}
- saved_machine_id = t;
- saved_machine_id_valid = true;
-
- *ret = t;
+ *ret = saved_machine_id;
return 0;
}
_public_ int sd_id128_get_boot(sd_id128_t *ret) {
- static thread_local sd_id128_t saved_boot_id;
- static thread_local bool saved_boot_id_valid = false;
- _cleanup_close_ int fd = -1;
- char buf[36];
- unsigned j;
- sd_id128_t t;
- char *p;
+ static thread_local sd_id128_t saved_boot_id = {};
int r;
assert_return(ret, -EINVAL);
- if (saved_boot_id_valid) {
- *ret = saved_boot_id;
- return 0;
+ if (sd_id128_is_null(saved_boot_id)) {
+ r = id128_read("/proc/sys/kernel/random/boot_id", ID128_UUID, &saved_boot_id);
+ if (r < 0)
+ return r;
}
- fd = open("/proc/sys/kernel/random/boot_id", O_RDONLY|O_CLOEXEC|O_NOCTTY);
- if (fd < 0)
- return -errno;
-
- r = loop_read_exact(fd, buf, 36, false);
- if (r < 0)
- return r;
-
- for (j = 0, p = buf; j < 16; j++) {
- int a, b;
-
- if (p >= buf + 35)
- return -EIO;
-
- if (*p == '-') {
- p++;
- if (p >= buf + 35)
- return -EIO;
- }
-
- a = unhexchar(p[0]);
- b = unhexchar(p[1]);
-
- if (a < 0 || b < 0)
- return -EIO;
+ *ret = saved_boot_id;
+ return 0;
+}
- t.bytes[j] = a << 4 | b;
+static sd_id128_t make_v4_uuid(sd_id128_t id) {
+ /* Stolen from generate_random_uuid() of drivers/char/random.c
+ * in the kernel sources */
- p += 2;
- }
+ /* Set UUID version to 4 --- truly random generation */
+ id.bytes[6] = (id.bytes[6] & 0x0F) | 0x40;
- saved_boot_id = t;
- saved_boot_id_valid = true;
+ /* Set the UUID variant to DCE */
+ id.bytes[8] = (id.bytes[8] & 0x3F) | 0x80;
- *ret = t;
- return 0;
+ return id;
}
_public_ int sd_id128_randomize(sd_id128_t *ret) {
diff --git a/src/login/logind-gperf.gperf b/src/login/logind-gperf.gperf
index 6bd08adc05..0b6a5f3cf4 100644
--- a/src/login/logind-gperf.gperf
+++ b/src/login/logind-gperf.gperf
@@ -36,4 +36,4 @@ Login.RuntimeDirectorySize, config_parse_tmpfs_size, 0, offsetof(Manag
Login.RemoveIPC, config_parse_bool, 0, offsetof(Manager, remove_ipc)
Login.InhibitorsMax, config_parse_uint64, 0, offsetof(Manager, inhibitors_max)
Login.SessionsMax, config_parse_uint64, 0, offsetof(Manager, sessions_max)
-Login.UserTasksMax, config_parse_uint64, 0, offsetof(Manager, user_tasks_max)
+Login.UserTasksMax, config_parse_user_tasks_max,0, offsetof(Manager, user_tasks_max)
diff --git a/src/login/logind-session.c b/src/login/logind-session.c
index 1e0666884a..b6da237397 100644
--- a/src/login/logind-session.c
+++ b/src/login/logind-session.c
@@ -603,7 +603,6 @@ int session_start(Session *s) {
static int session_stop_scope(Session *s, bool force) {
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
- char *job = NULL;
int r;
assert(s);
@@ -611,22 +610,25 @@ static int session_stop_scope(Session *s, bool force) {
if (!s->scope)
return 0;
+ /* Let's always abandon the scope first. This tells systemd that we are not interested anymore, and everything
+ * that is left in in the scope is "left-over". Informing systemd about this has the benefit that it will log
+ * when killing any processes left after this point. */
+ r = manager_abandon_scope(s->manager, s->scope, &error);
+ if (r < 0)
+ log_warning_errno(r, "Failed to abandon session scope, ignoring: %s", bus_error_message(&error, r));
+
+ /* Optionally, let's kill everything that's left now. */
if (force || manager_shall_kill(s->manager, s->user->name)) {
+ char *job = NULL;
+
r = manager_stop_unit(s->manager, s->scope, &error, &job);
- if (r < 0) {
- log_error("Failed to stop session scope: %s", bus_error_message(&error, r));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Failed to stop session scope: %s", bus_error_message(&error, r));
free(s->scope_job);
s->scope_job = job;
- } else {
- r = manager_abandon_scope(s->manager, s->scope, &error);
- if (r < 0) {
- log_error("Failed to abandon session scope: %s", bus_error_message(&error, r));
- return r;
- }
- }
+ } else
+ s->scope_job = mfree(s->scope_job);
return 0;
}
diff --git a/src/login/logind-user.c b/src/login/logind-user.c
index de44d369cf..348e396292 100644
--- a/src/login/logind-user.c
+++ b/src/login/logind-user.c
@@ -311,8 +311,7 @@ int user_load(User *u) {
if (r == -ENOENT)
return 0;
- log_error_errno(r, "Failed to read %s: %m", u->state_file);
- return r;
+ return log_error_errno(r, "Failed to read %s: %m", u->state_file);
}
if (display)
@@ -870,3 +869,48 @@ int config_parse_tmpfs_size(
return 0;
}
+
+int config_parse_user_tasks_max(
+ 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) {
+
+ uint64_t *m = data;
+ uint64_t k;
+ int r;
+
+ assert(filename);
+ assert(lvalue);
+ assert(rvalue);
+ assert(data);
+
+ /* First, try to parse as percentage */
+ r = parse_percent(rvalue);
+ if (r > 0 && r < 100)
+ k = system_tasks_max_scale(r, 100U);
+ else {
+
+ /* If the passed argument was not a percentage, or out of range, parse as byte size */
+
+ r = safe_atou64(rvalue, &k);
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse tasks maximum, ignoring: %s", rvalue);
+ return 0;
+ }
+ }
+
+ if (k <= 0 || k >= UINT64_MAX) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "Tasks maximum out of range, ignoring: %s", rvalue);
+ return 0;
+ }
+
+ *m = k;
+ return 0;
+}
diff --git a/src/login/logind.c b/src/login/logind.c
index d01dd110ea..5ce36d28c7 100644
--- a/src/login/logind.c
+++ b/src/login/logind.c
@@ -62,7 +62,7 @@ static void manager_reset_config(Manager *m) {
m->idle_action = HANDLE_IGNORE;
m->runtime_dir_size = physical_memory_scale(10U, 100U); /* 10% */
- m->user_tasks_max = 12288;
+ m->user_tasks_max = system_tasks_max_scale(33U, 100U); /* 33% */
m->sessions_max = 8192;
m->inhibitors_max = 8192;
diff --git a/src/login/logind.conf.in b/src/login/logind.conf.in
index 32c0844cb6..6f720b7708 100644
--- a/src/login/logind.conf.in
+++ b/src/login/logind.conf.in
@@ -34,4 +34,4 @@
#RemoveIPC=yes
#InhibitorsMax=8192
#SessionsMax=8192
-#UserTasksMax=12288
+#UserTasksMax=33%
diff --git a/src/login/logind.h b/src/login/logind.h
index 90431eb4b0..086fa1eeb5 100644
--- a/src/login/logind.h
+++ b/src/login/logind.h
@@ -187,6 +187,7 @@ const struct ConfigPerfItem* logind_gperf_lookup(const char *key, unsigned lengt
int manager_set_lid_switch_ignore(Manager *m, usec_t until);
int config_parse_tmpfs_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);
+int config_parse_user_tasks_max(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);
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);
diff --git a/src/machine-id-setup/machine-id-setup-main.c b/src/machine-id-setup/machine-id-setup-main.c
index 1d55fa04af..cc9b1b38fe 100644
--- a/src/machine-id-setup/machine-id-setup-main.c
+++ b/src/machine-id-setup/machine-id-setup-main.c
@@ -29,6 +29,7 @@
static char *arg_root = NULL;
static bool arg_commit = false;
+static bool arg_print = false;
static void help(void) {
printf("%s [OPTIONS...]\n\n"
@@ -37,6 +38,7 @@ static void help(void) {
" --version Show package version\n"
" --root=ROOT Filesystem root\n"
" --commit Commit transient ID\n"
+ " --print Print used machine ID\n"
, program_invocation_short_name);
}
@@ -46,6 +48,7 @@ static int parse_argv(int argc, char *argv[]) {
ARG_VERSION = 0x100,
ARG_ROOT,
ARG_COMMIT,
+ ARG_PRINT,
};
static const struct option options[] = {
@@ -53,6 +56,7 @@ static int parse_argv(int argc, char *argv[]) {
{ "version", no_argument, NULL, ARG_VERSION },
{ "root", required_argument, NULL, ARG_ROOT },
{ "commit", no_argument, NULL, ARG_COMMIT },
+ { "print", no_argument, NULL, ARG_PRINT },
{}
};
@@ -82,6 +86,10 @@ static int parse_argv(int argc, char *argv[]) {
arg_commit = true;
break;
+ case ARG_PRINT:
+ arg_print = true;
+ break;
+
case '?':
return -EINVAL;
@@ -98,6 +106,8 @@ static int parse_argv(int argc, char *argv[]) {
}
int main(int argc, char *argv[]) {
+ char buf[SD_ID128_STRING_MAX];
+ sd_id128_t id;
int r;
log_parse_environment();
@@ -107,10 +117,24 @@ int main(int argc, char *argv[]) {
if (r <= 0)
goto finish;
- if (arg_commit)
+ if (arg_commit) {
r = machine_id_commit(arg_root);
- else
- r = machine_id_setup(arg_root, SD_ID128_NULL);
+ if (r < 0)
+ goto finish;
+
+ r = sd_id128_get_machine(&id);
+ if (r < 0) {
+ log_error_errno(r, "Failed to read machine ID back: %m");
+ goto finish;
+ }
+ } else {
+ r = machine_id_setup(arg_root, SD_ID128_NULL, &id);
+ if (r < 0)
+ goto finish;
+ }
+
+ if (arg_print)
+ puts(sd_id128_to_string(id, buf));
finish:
free(arg_root);
diff --git a/src/machine/machine.c b/src/machine/machine.c
index c1fae57084..dd046d6563 100644
--- a/src/machine/machine.c
+++ b/src/machine/machine.c
@@ -181,7 +181,7 @@ int machine_save(Machine *m) {
fprintf(f, "ROOT=%s\n", escaped);
}
- if (!sd_id128_equal(m->id, SD_ID128_NULL))
+ if (!sd_id128_is_null(m->id))
fprintf(f, "ID=" SD_ID128_FORMAT_STR "\n", SD_ID128_FORMAT_VAL(m->id));
if (m->leader != 0)
diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c
index 96e0ab4b8a..ddec6cb4d6 100644
--- a/src/machine/machinectl.c
+++ b/src/machine/machinectl.c
@@ -528,7 +528,7 @@ static void print_machine_status_info(sd_bus *bus, MachineStatusInfo *i) {
fputs(strna(i->name), stdout);
- if (!sd_id128_equal(i->id, SD_ID128_NULL))
+ if (!sd_id128_is_null(i->id))
printf("(" SD_ID128_FORMAT_STR ")\n", SD_ID128_FORMAT_VAL(i->id));
else
putchar('\n');
diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c
index 9f4903c842..803caef3dd 100644
--- a/src/nspawn/nspawn-mount.c
+++ b/src/nspawn/nspawn-mount.c
@@ -23,6 +23,8 @@
#include "alloc-util.h"
#include "cgroup-util.h"
#include "escape.h"
+#include "fd-util.h"
+#include "fileio.h"
#include "fs-util.h"
#include "label.h"
#include "mkdir.h"
@@ -181,13 +183,15 @@ int tmpfs_mount_parse(CustomMount **l, unsigned *n, const char *s) {
static int tmpfs_patch_options(
const char *options,
- bool userns, uid_t uid_shift, uid_t uid_range,
+ bool userns,
+ uid_t uid_shift, uid_t uid_range,
+ bool patch_ids,
const char *selinux_apifs_context,
char **ret) {
char *buf = NULL;
- if (userns && uid_shift != 0) {
+ if ((userns && uid_shift != 0) || patch_ids) {
assert(uid_shift != UID_INVALID);
if (options)
@@ -218,7 +222,13 @@ static int tmpfs_patch_options(
}
#endif
+ if (!buf && options) {
+ buf = strdup(options);
+ if (!buf)
+ return -ENOMEM;
+ }
*ret = buf;
+
return !!buf;
}
@@ -271,7 +281,15 @@ int mount_sysfs(const char *dest) {
return log_error_errno(errno, "Failed to remove %s: %m", full);
x = prefix_roota(top, "/fs/kdbus");
- (void) mkdir(x, 0755);
+ (void) mkdir_p(x, 0755);
+
+ /* Create mountpoint for cgroups. Otherwise we are not allowed since we
+ * remount /sys read-only.
+ */
+ if (cg_ns_supported()) {
+ x = prefix_roota(top, "/fs/cgroup");
+ (void) mkdir_p(x, 0755);
+ }
if (mount(NULL, top, NULL, MS_BIND|MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_REMOUNT, NULL) < 0)
return log_error_errno(errno, "Failed to make %s read-only: %m", top);
@@ -297,18 +315,19 @@ int mount_all(const char *dest,
} MountPoint;
static const MountPoint mount_table[] = {
- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true, false },
- { "/proc/sys", "/proc/sys", NULL, NULL, MS_BIND, true, true, false }, /* Bind mount first */
- { NULL, "/proc/sys", NULL, NULL, MS_BIND|MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_REMOUNT, true, true, false }, /* Then, make it r/o */
- { "tmpfs", "/sys", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV, true, false, true },
- { "sysfs", "/sys", "sysfs", NULL, MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV, true, false, false },
- { "tmpfs", "/dev", "tmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, false, false },
- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, false, false },
- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, false, false },
- { "tmpfs", "/tmp", "tmpfs", "mode=1777", MS_STRICTATIME, true, false, false },
+ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true, false },
+ { "/proc/sys", "/proc/sys", NULL, NULL, MS_BIND, true, true, false }, /* Bind mount first ...*/
+ { "/proc/sys/net", "/proc/sys/net", NULL, NULL, MS_BIND, true, true, true }, /* (except for this) */
+ { NULL, "/proc/sys", NULL, NULL, MS_BIND|MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_REMOUNT, true, true, false }, /* ... then, make it r/o */
+ { "tmpfs", "/sys", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV, true, false, true },
+ { "sysfs", "/sys", "sysfs", NULL, MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV, true, false, false },
+ { "tmpfs", "/dev", "tmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, false, false },
+ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, false, false },
+ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, false, false },
+ { "tmpfs", "/tmp", "tmpfs", "mode=1777", MS_STRICTATIME, true, false, false },
#ifdef HAVE_SELINUX
- { "/sys/fs/selinux", "/sys/fs/selinux", NULL, NULL, MS_BIND, false, false, false }, /* Bind mount first */
- { NULL, "/sys/fs/selinux", NULL, NULL, MS_BIND|MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_REMOUNT, false, false, false }, /* Then, make it r/o */
+ { "/sys/fs/selinux", "/sys/fs/selinux", NULL, NULL, MS_BIND, false, false, false }, /* Bind mount first */
+ { NULL, "/sys/fs/selinux", NULL, NULL, MS_BIND|MS_RDONLY|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_REMOUNT, false, false, false }, /* Then, make it r/o */
#endif
};
@@ -348,7 +367,7 @@ int mount_all(const char *dest,
o = mount_table[k].options;
if (streq_ptr(mount_table[k].type, "tmpfs")) {
- r = tmpfs_patch_options(o, use_userns, uid_shift, uid_range, selinux_apifs_context, &options);
+ r = tmpfs_patch_options(o, use_userns, uid_shift, uid_range, false, selinux_apifs_context, &options);
if (r < 0)
return log_oom();
if (r > 0)
@@ -485,7 +504,7 @@ static int mount_tmpfs(
if (r < 0 && r != -EEXIST)
return log_error_errno(r, "Creating mount point for tmpfs %s failed: %m", where);
- r = tmpfs_patch_options(m->options, userns, uid_shift, uid_range, selinux_apifs_context, &buf);
+ r = tmpfs_patch_options(m->options, userns, uid_shift, uid_range, false, selinux_apifs_context, &buf);
if (r < 0)
return log_oom();
options = r > 0 ? buf : m->options;
@@ -600,6 +619,48 @@ int mount_custom(
return 0;
}
+/* Retrieve existing subsystems. This function is called in a new cgroup
+ * namespace.
+ */
+static int get_controllers(Set *subsystems) {
+ _cleanup_fclose_ FILE *f = NULL;
+ char line[LINE_MAX];
+
+ assert(subsystems);
+
+ f = fopen("/proc/self/cgroup", "re");
+ if (!f)
+ return errno == ENOENT ? -ESRCH : -errno;
+
+ FOREACH_LINE(line, f, return -errno) {
+ int r;
+ char *e, *l, *p;
+
+ truncate_nl(line);
+
+ l = strchr(line, ':');
+ if (!l)
+ continue;
+
+ l++;
+ e = strchr(l, ':');
+ if (!e)
+ continue;
+
+ *e = 0;
+
+ if (streq(l, "") || streq(l, "name=systemd"))
+ continue;
+
+ p = strdup(l);
+ r = set_consume(subsystems, p);
+ if (r < 0)
+ return r;
+ }
+
+ return 0;
+}
+
static int mount_legacy_cgroup_hierarchy(const char *dest, const char *controller, const char *hierarchy, bool read_only) {
char *to;
int r;
@@ -628,11 +689,107 @@ static int mount_legacy_cgroup_hierarchy(const char *dest, const char *controlle
return 1;
}
-static int mount_legacy_cgroups(
- const char *dest,
+/* Mount a legacy cgroup hierarchy when cgroup namespaces are supported. */
+static int mount_legacy_cgns_supported(
bool userns, uid_t uid_shift, uid_t uid_range,
const char *selinux_apifs_context) {
+ _cleanup_set_free_free_ Set *controllers = NULL;
+ const char *cgroup_root = "/sys/fs/cgroup", *c;
+ int r;
+
+ (void) mkdir_p(cgroup_root, 0755);
+
+ /* Mount a tmpfs to /sys/fs/cgroup if it's not mounted there yet. */
+ r = path_is_mount_point(cgroup_root, AT_SYMLINK_FOLLOW);
+ if (r < 0)
+ return log_error_errno(r, "Failed to determine if /sys/fs/cgroup is already mounted: %m");
+ if (r == 0) {
+ _cleanup_free_ char *options = NULL;
+
+ /* When cgroup namespaces are enabled and user namespaces are
+ * used then the mount of the cgroupfs is done *inside* the new
+ * user namespace. We're root in the new user namespace and the
+ * kernel will happily translate our uid/gid to the correct
+ * uid/gid as seen from e.g. /proc/1/mountinfo. So we simply
+ * pass uid 0 and not uid_shift to tmpfs_patch_options().
+ */
+ r = tmpfs_patch_options("mode=755", userns, 0, uid_range, true, selinux_apifs_context, &options);
+ if (r < 0)
+ return log_oom();
+ if (mount("tmpfs", cgroup_root, "tmpfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, options) < 0)
+ return log_error_errno(errno, "Failed to mount /sys/fs/cgroup: %m");
+ }
+
+ if (cg_unified() > 0)
+ goto skip_controllers;
+
+ controllers = set_new(&string_hash_ops);
+ if (!controllers)
+ return log_oom();
+
+ r = get_controllers(controllers);
+ if (r < 0)
+ return log_error_errno(r, "Failed to determine cgroup controllers: %m");
+
+ for (;;) {
+ _cleanup_free_ const char *controller = NULL;
+
+ controller = set_steal_first(controllers);
+ if (!controller)
+ break;
+
+ r = mount_legacy_cgroup_hierarchy("", controller, controller, !userns);
+ if (r < 0)
+ return r;
+
+ /* When multiple hierarchies are co-mounted, make their
+ * constituting individual hierarchies a symlink to the
+ * co-mount.
+ */
+ c = controller;
+ for (;;) {
+ _cleanup_free_ char *target = NULL, *tok = NULL;
+
+ r = extract_first_word(&c, &tok, ",", 0);
+ if (r < 0)
+ return log_error_errno(r, "Failed to extract co-mounted cgroup controller: %m");
+ if (r == 0)
+ break;
+
+ target = prefix_root("/sys/fs/cgroup", tok);
+ if (!target)
+ return log_oom();
+
+ if (streq(controller, tok))
+ break;
+
+ r = symlink_idempotent(controller, target);
+ if (r == -EINVAL)
+ return log_error_errno(r, "Invalid existing symlink for combined hierarchy: %m");
+ if (r < 0)
+ return log_error_errno(r, "Failed to create symlink for combined hierarchy: %m");
+ }
+ }
+
+skip_controllers:
+ r = mount_legacy_cgroup_hierarchy("", "none,name=systemd,xattr", "systemd", false);
+ if (r < 0)
+ return r;
+
+ if (!userns) {
+ if (mount(NULL, cgroup_root, NULL, MS_REMOUNT|MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME|MS_RDONLY, "mode=755") < 0)
+ return log_error_errno(errno, "Failed to remount %s read-only: %m", cgroup_root);
+ }
+
+ return 0;
+}
+
+/* Mount legacy cgroup hierarchy when cgroup namespaces are unsupported. */
+static int mount_legacy_cgns_unsupported(
+ const char *dest,
+ bool userns, uid_t uid_shift, uid_t uid_range,
+ const char *selinux_apifs_context) {
_cleanup_set_free_free_ Set *controllers = NULL;
const char *cgroup_root;
int r;
@@ -648,7 +805,7 @@ static int mount_legacy_cgroups(
if (r == 0) {
_cleanup_free_ char *options = NULL;
- r = tmpfs_patch_options("mode=755", userns, uid_shift, uid_range, selinux_apifs_context, &options);
+ r = tmpfs_patch_options("mode=755", userns, uid_shift, uid_range, false, selinux_apifs_context, &options);
if (r < 0)
return log_oom();
@@ -707,10 +864,8 @@ static int mount_legacy_cgroups(
return r;
r = symlink_idempotent(combined, target);
- if (r == -EINVAL) {
- log_error("Invalid existing symlink for combined hierarchy");
- return r;
- }
+ if (r == -EINVAL)
+ return log_error_errno(r, "Invalid existing symlink for combined hierarchy: %m");
if (r < 0)
return log_error_errno(r, "Failed to create symlink for combined hierarchy: %m");
}
@@ -761,12 +916,15 @@ int mount_cgroups(
const char *dest,
bool unified_requested,
bool userns, uid_t uid_shift, uid_t uid_range,
- const char *selinux_apifs_context) {
+ const char *selinux_apifs_context,
+ bool use_cgns) {
if (unified_requested)
return mount_unified_cgroups(dest);
- else
- return mount_legacy_cgroups(dest, userns, uid_shift, uid_range, selinux_apifs_context);
+ else if (use_cgns && cg_ns_supported())
+ return mount_legacy_cgns_supported(userns, uid_shift, uid_range, selinux_apifs_context);
+
+ return mount_legacy_cgns_unsupported(dest, userns, uid_shift, uid_range, selinux_apifs_context);
}
int mount_systemd_cgroup_writable(
@@ -834,7 +992,7 @@ int setup_volatile_state(
return log_error_errno(errno, "Failed to create %s: %m", directory);
options = "mode=755";
- r = tmpfs_patch_options(options, userns, uid_shift, uid_range, selinux_apifs_context, &buf);
+ r = tmpfs_patch_options(options, userns, uid_shift, uid_range, false, selinux_apifs_context, &buf);
if (r < 0)
return log_oom();
if (r > 0)
@@ -870,7 +1028,7 @@ int setup_volatile(
return log_error_errno(errno, "Failed to create temporary directory: %m");
options = "mode=755";
- r = tmpfs_patch_options(options, userns, uid_shift, uid_range, selinux_apifs_context, &buf);
+ r = tmpfs_patch_options(options, userns, uid_shift, uid_range, false, selinux_apifs_context, &buf);
if (r < 0)
return log_oom();
if (r > 0)
diff --git a/src/nspawn/nspawn-mount.h b/src/nspawn/nspawn-mount.h
index 0daf145412..0eff8e1006 100644
--- a/src/nspawn/nspawn-mount.h
+++ b/src/nspawn/nspawn-mount.h
@@ -58,7 +58,7 @@ int custom_mount_compare(const void *a, const void *b);
int mount_all(const char *dest, bool use_userns, bool in_userns, bool use_netns, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context);
int mount_sysfs(const char *dest);
-int mount_cgroups(const char *dest, bool unified_requested, bool userns, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context);
+int mount_cgroups(const char *dest, bool unified_requested, bool userns, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context, bool use_cgns);
int mount_systemd_cgroup_writable(const char *dest, bool unified_requested);
int mount_custom(const char *dest, CustomMount *mounts, unsigned n, bool userns, uid_t uid_shift, uid_t uid_range, const char *selinux_apifs_context);
diff --git a/src/nspawn/nspawn-register.c b/src/nspawn/nspawn-register.c
index 7fd711b8a4..e5b76a0c5d 100644
--- a/src/nspawn/nspawn-register.c
+++ b/src/nspawn/nspawn-register.c
@@ -104,7 +104,7 @@ int register_machine(
return bus_log_create_error(r);
}
- r = sd_bus_message_append(m, "(sv)", "DevicePolicy", "s", "strict");
+ r = sd_bus_message_append(m, "(sv)", "DevicePolicy", "s", "closed");
if (r < 0)
return bus_log_create_error(r);
@@ -112,31 +112,20 @@ int register_machine(
* systemd-nspawn@.service, to keep the device
* policies in sync regardless if we are run with or
* without the --keep-unit switch. */
- r = sd_bus_message_append(m, "(sv)", "DeviceAllow", "a(ss)", 11,
+ r = sd_bus_message_append(m, "(sv)", "DeviceAllow", "a(ss)", 2,
/* Allow the container to
* access and create the API
* device nodes, so that
* PrivateDevices= in the
* container can work
* fine */
- "/dev/null", "rwm",
- "/dev/zero", "rwm",
- "/dev/full", "rwm",
- "/dev/random", "rwm",
- "/dev/urandom", "rwm",
- "/dev/tty", "rwm",
"/dev/net/tun", "rwm",
/* Allow the container
* access to ptys. However,
* do not permit the
* container to ever create
* these device nodes. */
- "/dev/pts/ptmx", "rw",
- "char-pts", "rw",
- /* Allow /run/systemd/inaccessible/{chr,blk}
- * devices inside the container */
- "/run/systemd/inaccessible/chr", "rwm",
- "/run/systemd/inaccessible/blk", "rwm");
+ "char-pts", "rw");
if (r < 0)
return bus_log_create_error(r);
diff --git a/src/nspawn/nspawn-seccomp.c b/src/nspawn/nspawn-seccomp.c
index 54db1b47f8..3ab7160ebe 100644
--- a/src/nspawn/nspawn-seccomp.c
+++ b/src/nspawn/nspawn-seccomp.c
@@ -119,10 +119,8 @@ static int seccomp_add_default_syscall_filter(scmp_filter_ctx ctx,
r = seccomp_rule_add(ctx, SCMP_ACT_ERRNO(EPERM), blacklist[i].syscall_num, 0);
if (r == -EFAULT)
continue; /* unknown syscall */
- if (r < 0) {
- log_error_errno(r, "Failed to block syscall: %m");
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Failed to block syscall: %m");
}
return 0;
diff --git a/src/nspawn/nspawn-setuid.c b/src/nspawn/nspawn-setuid.c
index ee15a47e93..b8e8e091c8 100644
--- a/src/nspawn/nspawn-setuid.c
+++ b/src/nspawn/nspawn-setuid.c
@@ -124,14 +124,12 @@ int change_uid_gid(const char *user, char **_home) {
fd = -1;
if (!fgets(line, sizeof(line), f)) {
-
if (!ferror(f)) {
log_error("Failed to resolve user %s.", user);
return -ESRCH;
}
- log_error_errno(errno, "Failed to read from getent: %m");
- return -errno;
+ return log_error_errno(errno, "Failed to read from getent: %m");
}
truncate_nl(line);
@@ -214,8 +212,7 @@ int change_uid_gid(const char *user, char **_home) {
return -ESRCH;
}
- log_error_errno(errno, "Failed to read from getent: %m");
- return -errno;
+ return log_error_errno(errno, "Failed to read from getent: %m");
}
truncate_nl(line);
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index e4be0a2251..6cc1b9177d 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -61,9 +61,9 @@
#include "fs-util.h"
#include "gpt.h"
#include "hostname-util.h"
+#include "id128-util.h"
#include "log.h"
#include "loopback-setup.h"
-#include "machine-id-setup.h"
#include "machine-image.h"
#include "macro.h"
#include "missing.h"
@@ -76,10 +76,10 @@
#include "nspawn-network.h"
#include "nspawn-patch-uid.h"
#include "nspawn-register.h"
+#include "nspawn-seccomp.h"
#include "nspawn-settings.h"
#include "nspawn-setuid.h"
#include "nspawn-stub-pid1.h"
-#include "nspawn-seccomp.h"
#include "parse-util.h"
#include "path-util.h"
#include "process-util.h"
@@ -101,9 +101,11 @@
#include "util.h"
/* Note that devpts's gid= parameter parses GIDs as signed values, hence we stay away from the upper half of the 32bit
- * UID range here */
+ * UID range here. We leave a bit of room at the lower end and a lot of room at the upper end, so that other subsystems
+ * may have their own allocation ranges too. */
#define UID_SHIFT_PICK_MIN ((uid_t) UINT32_C(0x00080000))
#define UID_SHIFT_PICK_MAX ((uid_t) UINT32_C(0x6FFF0000))
+
/* nspawn is listening on the socket at the path in the constant nspawn_notify_socket_path
* nspawn_notify_socket_path is relative to the container
* the init process in the container pid can send messages to nspawn following the sd_notify(3) protocol */
@@ -192,6 +194,7 @@ static int arg_settings_trusted = -1;
static char **arg_parameters = NULL;
static const char *arg_container_service_name = "systemd-nspawn";
static bool arg_notify_ready = false;
+static bool arg_use_cgns = true;
static void help(void) {
printf("%s [OPTIONS...] [PATH] [ARGUMENTS...]\n\n"
@@ -277,7 +280,6 @@ static void help(void) {
, program_invocation_short_name);
}
-
static int custom_mounts_prepare(void) {
unsigned i;
int r;
@@ -593,9 +595,12 @@ static int parse_argv(int argc, char *argv[]) {
case ARG_UUID:
r = sd_id128_from_string(optarg, &arg_uuid);
- if (r < 0) {
- log_error("Invalid UUID: %s", optarg);
- return r;
+ if (r < 0)
+ return log_error_errno(r, "Invalid UUID: %s", optarg);
+
+ if (sd_id128_is_null(arg_uuid)) {
+ log_error("Machine UUID may not be all zeroes.");
+ return -EINVAL;
}
arg_settings_mask |= SETTING_MACHINE_ID;
@@ -1100,6 +1105,12 @@ static int parse_argv(int argc, char *argv[]) {
if (e)
arg_container_service_name = e;
+ r = getenv_bool("SYSTEMD_NSPAWN_USE_CGNS");
+ if (r < 0)
+ arg_use_cgns = cg_ns_supported();
+ else
+ arg_use_cgns = r;
+
return 1;
}
@@ -1265,20 +1276,9 @@ static int setup_resolv_conf(const char *dest) {
return 0;
}
-static char* id128_format_as_uuid(sd_id128_t id, char s[37]) {
- assert(s);
-
- snprintf(s, 37,
- "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
- SD_ID128_FORMAT_VAL(id));
-
- return s;
-}
-
static int setup_boot_id(const char *dest) {
+ sd_id128_t rnd = SD_ID128_NULL;
const char *from, *to;
- sd_id128_t rnd = {};
- char as_uuid[37];
int r;
if (arg_share_system)
@@ -1294,18 +1294,16 @@ static int setup_boot_id(const char *dest) {
if (r < 0)
return log_error_errno(r, "Failed to generate random boot id: %m");
- id128_format_as_uuid(rnd, as_uuid);
-
- r = write_string_file(from, as_uuid, WRITE_STRING_FILE_CREATE);
+ r = id128_write(from, ID128_UUID, rnd, false);
if (r < 0)
return log_error_errno(r, "Failed to write boot id: %m");
if (mount(from, to, NULL, MS_BIND, NULL) < 0)
r = log_error_errno(errno, "Failed to bind mount boot id: %m");
else if (mount(NULL, to, NULL, MS_BIND|MS_REMOUNT|MS_RDONLY|MS_NOSUID|MS_NODEV, NULL) < 0)
- log_warning_errno(errno, "Failed to make boot id read-only: %m");
+ log_warning_errno(errno, "Failed to make boot id read-only, ignoring: %m");
- unlink(from);
+ (void) unlink(from);
return r;
}
@@ -1803,17 +1801,18 @@ static int dissect_image(
char **root_device, bool *root_device_rw,
char **home_device, bool *home_device_rw,
char **srv_device, bool *srv_device_rw,
+ char **esp_device,
bool *secondary) {
#ifdef HAVE_BLKID
- int home_nr = -1, srv_nr = -1;
+ int home_nr = -1, srv_nr = -1, esp_nr = -1;
#ifdef GPT_ROOT_NATIVE
int root_nr = -1;
#endif
#ifdef GPT_ROOT_SECONDARY
int secondary_root_nr = -1;
#endif
- _cleanup_free_ char *home = NULL, *root = NULL, *secondary_root = NULL, *srv = NULL, *generic = NULL;
+ _cleanup_free_ char *home = NULL, *root = NULL, *secondary_root = NULL, *srv = NULL, *esp = NULL, *generic = NULL;
_cleanup_udev_enumerate_unref_ struct udev_enumerate *e = NULL;
_cleanup_udev_device_unref_ struct udev_device *d = NULL;
_cleanup_blkid_free_probe_ blkid_probe b = NULL;
@@ -1831,6 +1830,7 @@ static int dissect_image(
assert(root_device);
assert(home_device);
assert(srv_device);
+ assert(esp_device);
assert(secondary);
assert(arg_image);
@@ -2044,6 +2044,16 @@ static int dissect_image(
r = free_and_strdup(&srv, node);
if (r < 0)
return log_oom();
+ } else if (sd_id128_equal(type_id, GPT_ESP)) {
+
+ if (esp && nr >= esp_nr)
+ continue;
+
+ esp_nr = nr;
+
+ r = free_and_strdup(&esp, node);
+ if (r < 0)
+ return log_oom();
}
#ifdef GPT_ROOT_NATIVE
else if (sd_id128_equal(type_id, GPT_ROOT_NATIVE)) {
@@ -2161,6 +2171,11 @@ static int dissect_image(
*srv_device_rw = srv_rw;
}
+ if (esp) {
+ *esp_device = esp;
+ esp = NULL;
+ }
+
return 0;
#else
log_error("--image= is not supported, compiled without blkid support.");
@@ -2231,33 +2246,37 @@ static int mount_device(const char *what, const char *where, const char *directo
}
static int setup_machine_id(const char *directory) {
+ const char *etc_machine_id;
+ sd_id128_t id;
int r;
- const char *etc_machine_id, *t;
- _cleanup_free_ char *s = NULL;
- etc_machine_id = prefix_roota(directory, "/etc/machine-id");
+ /* If the UUID in the container is already set, then that's what counts, and we use. If it isn't set, and the
+ * caller passed --uuid=, then we'll pass it in the $container_uuid env var to PID 1 of the container. The
+ * assumption is that PID 1 will then write it to /etc/machine-id to make it persistent. If --uuid= is not
+ * passed we generate a random UUID, and pass it via $container_uuid. In effect this means that /etc/machine-id
+ * in the container and our idea of the container UUID will always be in sync (at least if PID 1 in the
+ * container behaves nicely). */
- r = read_one_line_file(etc_machine_id, &s);
- if (r < 0)
- return log_error_errno(r, "Failed to read machine ID from %s: %m", etc_machine_id);
+ etc_machine_id = prefix_roota(directory, "/etc/machine-id");
- t = strstrip(s);
+ r = id128_read(etc_machine_id, ID128_PLAIN, &id);
+ if (r < 0) {
+ if (!IN_SET(r, -ENOENT, -ENOMEDIUM)) /* If the file is missing or empty, we don't mind */
+ return log_error_errno(r, "Failed to read machine ID from container image: %m");
- if (!isempty(t)) {
- r = sd_id128_from_string(t, &arg_uuid);
- if (r < 0)
- return log_error_errno(r, "Failed to parse machine ID from %s: %m", etc_machine_id);
- } else {
if (sd_id128_is_null(arg_uuid)) {
r = sd_id128_randomize(&arg_uuid);
if (r < 0)
- return log_error_errno(r, "Failed to generate random machine ID: %m");
+ return log_error_errno(r, "Failed to acquire randomized machine UUID: %m");
+ }
+ } else {
+ if (sd_id128_is_null(id)) {
+ log_error("Machine ID in container image is zero, refusing.");
+ return -EINVAL;
}
- }
- r = machine_id_setup(directory, arg_uuid);
- if (r < 0)
- return log_error_errno(r, "Failed to setup machine ID: %m");
+ arg_uuid = id;
+ }
return 0;
}
@@ -2289,7 +2308,8 @@ static int mount_devices(
const char *where,
const char *root_device, bool root_device_rw,
const char *home_device, bool home_device_rw,
- const char *srv_device, bool srv_device_rw) {
+ const char *srv_device, bool srv_device_rw,
+ const char *esp_device) {
int r;
assert(where);
@@ -2312,6 +2332,27 @@ static int mount_devices(
return log_error_errno(r, "Failed to mount server data directory: %m");
}
+ if (esp_device) {
+ const char *mp, *x;
+
+ /* Mount the ESP to /efi if it exists and is empty. If it doesn't exist, use /boot instead. */
+
+ mp = "/efi";
+ x = strjoina(arg_directory, mp);
+ r = dir_is_empty(x);
+ if (r == -ENOENT) {
+ mp = "/boot";
+ x = strjoina(arg_directory, mp);
+ r = dir_is_empty(x);
+ }
+
+ if (r > 0) {
+ r = mount_device(esp_device, arg_directory, mp, true);
+ if (r < 0)
+ return log_error_errno(r, "Failed to mount ESP: %m");
+ }
+ }
+
return 0;
}
@@ -2594,9 +2635,25 @@ static int inner_child(
return -ESRCH;
}
- r = mount_systemd_cgroup_writable("", arg_unified_cgroup_hierarchy);
- if (r < 0)
- return r;
+ if (arg_use_cgns && cg_ns_supported()) {
+ r = unshare(CLONE_NEWCGROUP);
+ if (r < 0)
+ return log_error_errno(errno, "Failed to unshare cgroup namespace");
+ r = mount_cgroups(
+ "",
+ arg_unified_cgroup_hierarchy,
+ arg_userns_mode != USER_NAMESPACE_NO,
+ arg_uid_shift,
+ arg_uid_range,
+ arg_selinux_apifs_context,
+ arg_use_cgns);
+ if (r < 0)
+ return r;
+ } else {
+ r = mount_systemd_cgroup_writable("", arg_unified_cgroup_hierarchy);
+ if (r < 0)
+ return r;
+ }
r = reset_uid_gid();
if (r < 0)
@@ -2662,9 +2719,9 @@ static int inner_child(
(asprintf((char**)(envp + n_env++), "LOGNAME=%s", arg_user ? arg_user : "root") < 0))
return log_oom();
- assert(!sd_id128_equal(arg_uuid, SD_ID128_NULL));
+ assert(!sd_id128_is_null(arg_uuid));
- if (asprintf((char**)(envp + n_env++), "container_uuid=%s", id128_format_as_uuid(arg_uuid, as_uuid)) < 0)
+ if (asprintf((char**)(envp + n_env++), "container_uuid=%s", id128_to_uuid_string(arg_uuid, as_uuid)) < 0)
return log_oom();
if (fdset_size(fds) > 0) {
@@ -2785,6 +2842,7 @@ static int outer_child(
const char *root_device, bool root_device_rw,
const char *home_device, bool home_device_rw,
const char *srv_device, bool srv_device_rw,
+ const char *esp_device,
bool interactive,
bool secondary,
int pid_socket,
@@ -2846,7 +2904,8 @@ static int outer_child(
r = mount_devices(directory,
root_device, root_device_rw,
home_device, home_device_rw,
- srv_device, srv_device_rw);
+ srv_device, srv_device_rw,
+ esp_device);
if (r < 0)
return r;
@@ -2978,15 +3037,18 @@ static int outer_child(
if (r < 0)
return r;
- r = mount_cgroups(
- directory,
- arg_unified_cgroup_hierarchy,
- arg_userns_mode != USER_NAMESPACE_NO,
- arg_uid_shift,
- arg_uid_range,
- arg_selinux_apifs_context);
- if (r < 0)
- return r;
+ if (!arg_use_cgns || !cg_ns_supported()) {
+ r = mount_cgroups(
+ directory,
+ arg_unified_cgroup_hierarchy,
+ arg_userns_mode != USER_NAMESPACE_NO,
+ arg_uid_shift,
+ arg_uid_range,
+ arg_selinux_apifs_context,
+ arg_use_cgns);
+ if (r < 0)
+ return r;
+ }
r = mount_move_root(directory);
if (r < 0)
@@ -3449,7 +3511,7 @@ static int load_settings(void) {
int main(int argc, char *argv[]) {
- _cleanup_free_ char *device_path = NULL, *root_device = NULL, *home_device = NULL, *srv_device = NULL, *console = NULL;
+ _cleanup_free_ char *device_path = NULL, *root_device = NULL, *home_device = NULL, *srv_device = NULL, *esp_device = NULL, *console = NULL;
bool root_device_rw = true, home_device_rw = true, srv_device_rw = true;
_cleanup_close_ int master = -1, image_fd = -1;
_cleanup_fdset_free_ FDSet *fds = NULL;
@@ -3558,7 +3620,7 @@ int main(int argc, char *argv[]) {
}
if (r < 0) {
log_error_errno(r, "Failed to lock %s: %m", arg_directory);
- return r;
+ goto finish;
}
if (arg_template) {
@@ -3631,6 +3693,7 @@ int main(int argc, char *argv[]) {
&root_device, &root_device_rw,
&home_device, &home_device_rw,
&srv_device, &srv_device_rw,
+ &esp_device,
&secondary);
if (r < 0)
goto finish;
@@ -3805,6 +3868,7 @@ int main(int argc, char *argv[]) {
root_device, root_device_rw,
home_device, home_device_rw,
srv_device, srv_device_rw,
+ esp_device,
interactive,
secondary,
pid_socket_pair[1],
diff --git a/src/nss-systemd/Makefile b/src/nss-systemd/Makefile
new file mode 120000
index 0000000000..d0b0e8e008
--- /dev/null
+++ b/src/nss-systemd/Makefile
@@ -0,0 +1 @@
+../Makefile \ No newline at end of file
diff --git a/src/nss-systemd/nss-systemd.c b/src/nss-systemd/nss-systemd.c
new file mode 100644
index 0000000000..e7a4393bb0
--- /dev/null
+++ b/src/nss-systemd/nss-systemd.c
@@ -0,0 +1,332 @@
+/***
+ This file is part of systemd.
+
+ Copyright 2016 Lennart Poettering
+
+ systemd is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+
+ systemd is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with systemd; If not, see <http://www.gnu.org/licenses/>.
+***/
+
+#include <nss.h>
+
+#include "sd-bus.h"
+
+#include "bus-common-errors.h"
+#include "env-util.h"
+#include "macro.h"
+#include "nss-util.h"
+#include "signal-util.h"
+#include "user-util.h"
+#include "util.h"
+
+NSS_GETPW_PROTOTYPES(systemd);
+NSS_GETGR_PROTOTYPES(systemd);
+
+enum nss_status _nss_systemd_getpwnam_r(
+ const char *name,
+ struct passwd *pwd,
+ char *buffer, size_t buflen,
+ int *errnop) {
+
+ _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message* reply = NULL;
+ _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+ uint32_t translated;
+ size_t l;
+ int r;
+
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+
+ assert(name);
+ assert(pwd);
+
+ /* Make sure that we don't go in circles when allocating a dynamic UID by checking our own database */
+ if (getenv_bool("SYSTEMD_NSS_DYNAMIC_BYPASS") > 0)
+ goto not_found;
+
+ r = sd_bus_open_system(&bus);
+ if (r < 0)
+ goto fail;
+
+ r = sd_bus_call_method(bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "LookupDynamicUserByName",
+ &error,
+ &reply,
+ "s",
+ name);
+ if (r < 0) {
+ if (sd_bus_error_has_name(&error, BUS_ERROR_NO_SUCH_DYNAMIC_USER))
+ goto not_found;
+
+ goto fail;
+ }
+
+ r = sd_bus_message_read(reply, "u", &translated);
+ if (r < 0)
+ goto fail;
+
+ l = strlen(name);
+ if (buflen < l+1) {
+ *errnop = ENOMEM;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ memcpy(buffer, name, l+1);
+
+ pwd->pw_name = buffer;
+ pwd->pw_uid = (uid_t) translated;
+ pwd->pw_gid = (uid_t) translated;
+ pwd->pw_gecos = (char*) "Dynamic User";
+ pwd->pw_passwd = (char*) "*"; /* locked */
+ pwd->pw_dir = (char*) "/";
+ pwd->pw_shell = (char*) "/sbin/nologin";
+
+ *errnop = 0;
+ return NSS_STATUS_SUCCESS;
+
+not_found:
+ *errnop = 0;
+ return NSS_STATUS_NOTFOUND;
+
+fail:
+ *errnop = -r;
+ return NSS_STATUS_UNAVAIL;
+}
+
+enum nss_status _nss_systemd_getpwuid_r(
+ uid_t uid,
+ struct passwd *pwd,
+ char *buffer, size_t buflen,
+ int *errnop) {
+
+ _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message* reply = NULL;
+ _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+ const char *translated;
+ size_t l;
+ int r;
+
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+
+ if (!uid_is_valid(uid)) {
+ r = -EINVAL;
+ goto fail;
+ }
+
+ if (uid <= SYSTEM_UID_MAX)
+ goto not_found;
+
+ if (getenv_bool("SYSTEMD_NSS_DYNAMIC_BYPASS") > 0)
+ goto not_found;
+
+ r = sd_bus_open_system(&bus);
+ if (r < 0)
+ goto fail;
+
+ r = sd_bus_call_method(bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "LookupDynamicUserByUID",
+ &error,
+ &reply,
+ "u",
+ (uint32_t) uid);
+ if (r < 0) {
+ if (sd_bus_error_has_name(&error, BUS_ERROR_NO_SUCH_DYNAMIC_USER))
+ goto not_found;
+
+ goto fail;
+ }
+
+ r = sd_bus_message_read(reply, "s", &translated);
+ if (r < 0)
+ goto fail;
+
+ l = strlen(translated) + 1;
+ if (buflen < l) {
+ *errnop = ENOMEM;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ memcpy(buffer, translated, l);
+
+ pwd->pw_name = buffer;
+ pwd->pw_uid = uid;
+ pwd->pw_gid = uid;
+ pwd->pw_gecos = (char*) "Dynamic User";
+ pwd->pw_passwd = (char*) "*"; /* locked */
+ pwd->pw_dir = (char*) "/";
+ pwd->pw_shell = (char*) "/sbin/nologin";
+
+ *errnop = 0;
+ return NSS_STATUS_SUCCESS;
+
+not_found:
+ *errnop = 0;
+ return NSS_STATUS_NOTFOUND;
+
+fail:
+ *errnop = -r;
+ return NSS_STATUS_UNAVAIL;
+}
+
+enum nss_status _nss_systemd_getgrnam_r(
+ const char *name,
+ struct group *gr,
+ char *buffer, size_t buflen,
+ int *errnop) {
+
+ _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message* reply = NULL;
+ _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+ uint32_t translated;
+ size_t l;
+ int r;
+
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+
+ assert(name);
+ assert(gr);
+
+ if (getenv_bool("SYSTEMD_NSS_DYNAMIC_BYPASS") > 0)
+ goto not_found;
+
+ r = sd_bus_open_system(&bus);
+ if (r < 0)
+ goto fail;
+
+ r = sd_bus_call_method(bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "LookupDynamicUserByName",
+ &error,
+ &reply,
+ "s",
+ name);
+ if (r < 0) {
+ if (sd_bus_error_has_name(&error, BUS_ERROR_NO_SUCH_DYNAMIC_USER))
+ goto not_found;
+
+ goto fail;
+ }
+
+ r = sd_bus_message_read(reply, "u", &translated);
+ if (r < 0)
+ goto fail;
+
+ l = sizeof(char*) + strlen(name) + 1;
+ if (buflen < l) {
+ *errnop = ENOMEM;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ memzero(buffer, sizeof(char*));
+ strcpy(buffer + sizeof(char*), name);
+
+ gr->gr_name = buffer + sizeof(char*);
+ gr->gr_gid = (gid_t) translated;
+ gr->gr_passwd = (char*) "*"; /* locked */
+ gr->gr_mem = (char**) buffer;
+
+ *errnop = 0;
+ return NSS_STATUS_SUCCESS;
+
+not_found:
+ *errnop = 0;
+ return NSS_STATUS_NOTFOUND;
+
+fail:
+ *errnop = -r;
+ return NSS_STATUS_UNAVAIL;
+}
+
+enum nss_status _nss_systemd_getgrgid_r(
+ gid_t gid,
+ struct group *gr,
+ char *buffer, size_t buflen,
+ int *errnop) {
+
+ _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message* reply = NULL;
+ _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
+ const char *translated;
+ size_t l;
+ int r;
+
+ BLOCK_SIGNALS(NSS_SIGNALS_BLOCK);
+
+ if (!gid_is_valid(gid)) {
+ r = -EINVAL;
+ goto fail;
+ }
+
+ if (gid <= SYSTEM_GID_MAX)
+ goto not_found;
+
+ if (getenv_bool("SYSTEMD_NSS_DYNAMIC_BYPASS") > 0)
+ goto not_found;
+
+ r = sd_bus_open_system(&bus);
+ if (r < 0)
+ goto fail;
+
+ r = sd_bus_call_method(bus,
+ "org.freedesktop.systemd1",
+ "/org/freedesktop/systemd1",
+ "org.freedesktop.systemd1.Manager",
+ "LookupDynamicUserByUID",
+ &error,
+ &reply,
+ "u",
+ (uint32_t) gid);
+ if (r < 0) {
+ if (sd_bus_error_has_name(&error, BUS_ERROR_NO_SUCH_DYNAMIC_USER))
+ goto not_found;
+
+ goto fail;
+ }
+
+ r = sd_bus_message_read(reply, "s", &translated);
+ if (r < 0)
+ goto fail;
+
+ l = sizeof(char*) + strlen(translated) + 1;
+ if (buflen < l) {
+ *errnop = ENOMEM;
+ return NSS_STATUS_TRYAGAIN;
+ }
+
+ memzero(buffer, sizeof(char*));
+ strcpy(buffer + sizeof(char*), translated);
+
+ gr->gr_name = buffer + sizeof(char*);
+ gr->gr_gid = gid;
+ gr->gr_passwd = (char*) "*"; /* locked */
+ gr->gr_mem = (char**) buffer;
+
+ *errnop = 0;
+ return NSS_STATUS_SUCCESS;
+
+not_found:
+ *errnop = 0;
+ return NSS_STATUS_NOTFOUND;
+
+fail:
+ *errnop = -r;
+ return NSS_STATUS_UNAVAIL;
+}
diff --git a/src/nss-systemd/nss-systemd.sym b/src/nss-systemd/nss-systemd.sym
new file mode 100644
index 0000000000..955078788a
--- /dev/null
+++ b/src/nss-systemd/nss-systemd.sym
@@ -0,0 +1,17 @@
+/***
+ This file is part of systemd.
+
+ systemd is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
+ (at your option) any later version.
+***/
+
+{
+global:
+ _nss_systemd_getpwnam_r;
+ _nss_systemd_getpwuid_r;
+ _nss_systemd_getgrnam_r;
+ _nss_systemd_getgrgid_r;
+local: *;
+};
diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
index 94ffa8af87..14bf8ad627 100644
--- a/src/shared/bus-unit-util.c
+++ b/src/shared/bus-unit-util.c
@@ -132,10 +132,10 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
char *n;
/* When this is a percentage we'll convert this into a relative value in the range
- * 0…UINT32_MAX and pass it in the MemoryLowByPhysicalMemory property (and related
+ * 0…UINT32_MAX and pass it in the MemoryLowScale property (and related
* ones). This way the physical memory size can be determined server-side */
- n = strjoina(field, "ByPhysicalMemory");
+ n = strjoina(field, "Scale");
r = sd_bus_message_append(m, "sv", n, "u", (uint32_t) (((uint64_t) UINT32_MAX * r) / 100U));
goto finish;
@@ -148,6 +148,26 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
r = sd_bus_message_append(m, "sv", field, "t", bytes);
goto finish;
+ } else if (streq(field, "TasksMax")) {
+ uint64_t t;
+
+ if (isempty(eq) || streq(eq, "infinity"))
+ t = (uint64_t) -1;
+ else {
+ r = parse_percent(eq);
+ if (r >= 0) {
+ r = sd_bus_message_append(m, "sv", "TasksMaxScale", "u", (uint32_t) (((uint64_t) UINT32_MAX * r) / 100U));
+ goto finish;
+ } else {
+ r = safe_atou64(eq, &t);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse maximum tasks specification %s", assignment);
+ }
+
+ }
+
+ r = sd_bus_message_append(m, "sv", "TasksMax", "t", t);
+ goto finish;
}
r = sd_bus_message_append_basic(m, SD_BUS_TYPE_STRING, field);
@@ -179,11 +199,12 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
r = sd_bus_message_append(m, "sv", sn, "t", l.rlim_cur);
} else if (STR_IN_SET(field,
- "CPUAccounting", "MemoryAccounting", "IOAccounting", "BlockIOAccounting", "TasksAccounting",
- "SendSIGHUP", "SendSIGKILL", "WakeSystem", "DefaultDependencies",
- "IgnoreSIGPIPE", "TTYVHangup", "TTYReset", "RemainAfterExit",
- "PrivateTmp", "PrivateDevices", "PrivateNetwork", "NoNewPrivileges",
- "SyslogLevelPrefix", "Delegate", "RemainAfterElapse", "MemoryDenyWriteExecute")) {
+ "CPUAccounting", "MemoryAccounting", "IOAccounting", "BlockIOAccounting", "TasksAccounting",
+ "SendSIGHUP", "SendSIGKILL", "WakeSystem", "DefaultDependencies",
+ "IgnoreSIGPIPE", "TTYVHangup", "TTYReset", "RemainAfterExit",
+ "PrivateTmp", "PrivateDevices", "PrivateNetwork", "NoNewPrivileges",
+ "SyslogLevelPrefix", "Delegate", "RemainAfterElapse", "MemoryDenyWriteExecute",
+ "RestrictRealtime", "DynamicUser")) {
r = parse_boolean(eq);
if (r < 0)
@@ -191,21 +212,6 @@ int bus_append_unit_property_assignment(sd_bus_message *m, const char *assignmen
r = sd_bus_message_append(m, "v", "b", r);
- } else if (streq(field, "TasksMax")) {
- uint64_t n;
-
- if (isempty(eq) || streq(eq, "infinity"))
- n = (uint64_t) -1;
- else {
- r = safe_atou64(eq, &n);
- if (r < 0) {
- log_error("Failed to parse maximum tasks specification %s", assignment);
- return -EINVAL;
- }
- }
-
- r = sd_bus_message_append(m, "v", "t", n);
-
} else if (STR_IN_SET(field, "CPUShares", "StartupCPUShares")) {
uint64_t u;
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
index 83be79a4f5..7cf222e4d2 100644
--- a/src/shared/conf-parser.c
+++ b/src/shared/conf-parser.c
@@ -323,8 +323,7 @@ int config_parse(const char *unit,
if (feof(f))
break;
- log_error_errno(errno, "Failed to read configuration file '%s': %m", filename);
- return -errno;
+ return log_error_errno(errno, "Failed to read configuration file '%s': %m", filename);
}
l = buf;
@@ -708,6 +707,7 @@ int config_parse_strv(const char *unit,
void *userdata) {
char ***sv = data;
+ int r;
assert(filename);
assert(lvalue);
@@ -721,18 +721,19 @@ int config_parse_strv(const char *unit,
* we actually fill in a real empty array here rather
* than NULL, since some code wants to know if
* something was set at all... */
- empty = strv_new(NULL, NULL);
+ empty = new0(char*, 1);
if (!empty)
return log_oom();
strv_free(*sv);
*sv = empty;
+
return 0;
}
for (;;) {
char *word = NULL;
- int r;
+
r = extract_first_word(&rvalue, &word, WHITESPACE, EXTRACT_QUOTES|EXTRACT_RETAIN_ESCAPE);
if (r == 0)
break;
diff --git a/src/shared/install.c b/src/shared/install.c
index 23cab96c50..7b49e1ece9 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -2215,7 +2215,7 @@ int unit_file_enable(
config_path = runtime ? paths.runtime_config : paths.persistent_config;
STRV_FOREACH(f, files) {
- r = install_info_discover(scope, &c, &paths, *f, SEARCH_LOAD, &i);
+ r = install_info_discover(scope, &c, &paths, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, &i);
if (r < 0)
return r;
r = install_info_may_process(i, &paths, changes, n_changes);
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index d3f437411a..782824ff38 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -224,6 +224,21 @@ static void release_busses(void) {
busses[w] = sd_bus_flush_close_unref(busses[w]);
}
+static int map_string_no_copy(sd_bus *bus, const char *member, sd_bus_message *m, sd_bus_error *error, void *userdata) {
+ char *s;
+ const char **p = userdata;
+ int r;
+
+ r = sd_bus_message_read_basic(m, SD_BUS_TYPE_STRING, &s);
+ if (r < 0)
+ return r;
+
+ if (!isempty(s))
+ *p = s;
+
+ return 0;
+}
+
static void ask_password_agent_open_if_enabled(void) {
/* Open the password agent as a child process if necessary */
@@ -1820,12 +1835,12 @@ static const struct bus_properties_map machine_info_property_map[] = {
};
static void machine_info_clear(struct machine_info *info) {
- if (info) {
- free(info->name);
- free(info->state);
- free(info->control_group);
- zero(*info);
- }
+ assert(info);
+
+ free(info->name);
+ free(info->state);
+ free(info->control_group);
+ zero(*info);
}
static void free_machines_list(struct machine_info *machine_infos, int n) {
@@ -3033,6 +3048,9 @@ static int logind_check_inhibitors(enum action a) {
if (!on_tty())
return 0;
+ if (arg_transport != BUS_TRANSPORT_LOCAL)
+ return 0;
+
r = acquire_bus(BUS_FULL, &bus);
if (r < 0)
return r;
@@ -3455,6 +3473,27 @@ static int exec_status_info_deserialize(sd_bus_message *m, ExecStatusInfo *i) {
return 1;
}
+typedef struct UnitCondition {
+ char *name;
+ char *param;
+ bool trigger;
+ bool negate;
+ int tristate;
+
+ LIST_FIELDS(struct UnitCondition, conditions);
+} UnitCondition;
+
+static void unit_condition_free(UnitCondition *c) {
+ if (!c)
+ return;
+
+ free(c->name);
+ free(c->param);
+ free(c);
+}
+
+DEFINE_TRIVIAL_CLEANUP_FUNC(UnitCondition*, unit_condition_free);
+
typedef struct UnitStatusInfo {
const char *id;
const char *load_state;
@@ -3501,10 +3540,7 @@ typedef struct UnitStatusInfo {
usec_t condition_timestamp;
bool condition_result;
- bool failed_condition_trigger;
- bool failed_condition_negate;
- const char *failed_condition;
- const char *failed_condition_parameter;
+ LIST_HEAD(UnitCondition, conditions);
usec_t assert_timestamp;
bool assert_result;
@@ -3543,6 +3579,25 @@ typedef struct UnitStatusInfo {
LIST_HEAD(ExecStatusInfo, exec);
} UnitStatusInfo;
+static void unit_status_info_free(UnitStatusInfo *info) {
+ ExecStatusInfo *p;
+ UnitCondition *c;
+
+ strv_free(info->documentation);
+ strv_free(info->dropin_paths);
+ strv_free(info->listen);
+
+ while ((c = info->conditions)) {
+ LIST_REMOVE(conditions, info->conditions, c);
+ unit_condition_free(c);
+ }
+
+ while ((p = info->exec)) {
+ LIST_REMOVE(exec, info->exec, p);
+ exec_status_info_free(p);
+ }
+}
+
static void print_status_info(
sd_bus *bus,
UnitStatusInfo *i,
@@ -3664,19 +3719,28 @@ static void print_status_info(
printf("\n");
if (!i->condition_result && i->condition_timestamp > 0) {
+ UnitCondition *c;
+ int n = 0;
+
s1 = format_timestamp_relative(since1, sizeof(since1), i->condition_timestamp);
s2 = format_timestamp(since2, sizeof(since2), i->condition_timestamp);
printf("Condition: start %scondition failed%s at %s%s%s\n",
ansi_highlight_yellow(), ansi_normal(),
s2, s1 ? "; " : "", strempty(s1));
- if (i->failed_condition_trigger)
- printf(" none of the trigger conditions were met\n");
- else if (i->failed_condition)
- printf(" %s=%s%s was not met\n",
- i->failed_condition,
- i->failed_condition_negate ? "!" : "",
- i->failed_condition_parameter);
+
+ LIST_FOREACH(conditions, c, i->conditions)
+ if (c->tristate < 0)
+ n++;
+
+ LIST_FOREACH(conditions, c, i->conditions)
+ if (c->tristate < 0)
+ printf(" %s %s=%s%s%s was not met\n",
+ --n ? special_glyph(TREE_BRANCH) : special_glyph(TREE_RIGHT),
+ c->name,
+ c->trigger ? "|" : "",
+ c->negate ? "!" : "",
+ c->param);
}
if (!i->assert_result && i->assert_timestamp > 0) {
@@ -3761,7 +3825,7 @@ static void print_status_info(
if (i->running) {
_cleanup_free_ char *comm = NULL;
- get_process_comm(i->main_pid, &comm);
+ (void) get_process_comm(i->main_pid, &comm);
if (comm)
printf(" (%s)", comm);
} else if (i->exit_code > 0) {
@@ -3780,17 +3844,19 @@ static void print_status_info(
printf("signal=%s", signal_to_string(i->exit_status));
printf(")");
}
-
- if (i->control_pid > 0)
- printf(";");
}
if (i->control_pid > 0) {
_cleanup_free_ char *c = NULL;
- printf(" %8s: "PID_FMT, i->main_pid ? "" : " Control", i->control_pid);
+ if (i->main_pid > 0)
+ fputs("; Control PID: ", stdout);
+ else
+ fputs("Cntrl PID: ", stdout); /* if first in column, abbreviated so it fits alignment */
+
+ printf(PID_FMT, i->control_pid);
- get_process_comm(i->control_pid, &c);
+ (void) get_process_comm(i->control_pid, &c);
if (c)
printf(" (%s)", c);
}
@@ -3807,7 +3873,7 @@ static void print_status_info(
printf(" Tasks: %" PRIu64, i->tasks_current);
if (i->tasks_max != (uint64_t) -1)
- printf(" (limit: %" PRIi64 ")\n", i->tasks_max);
+ printf(" (limit: %" PRIu64 ")\n", i->tasks_max);
else
printf("\n");
}
@@ -4169,13 +4235,25 @@ static int status_property(const char *name, sd_bus_message *m, UnitStatusInfo *
return bus_log_parse_error(r);
while ((r = sd_bus_message_read(m, "(sbbsi)", &cond, &trigger, &negate, &param, &state)) > 0) {
- log_debug("%s %d %d %s %d", cond, trigger, negate, param, state);
- if (state < 0 && (!trigger || !i->failed_condition)) {
- i->failed_condition = cond;
- i->failed_condition_trigger = trigger;
- i->failed_condition_negate = negate;
- i->failed_condition_parameter = param;
- }
+ _cleanup_(unit_condition_freep) UnitCondition *c = NULL;
+
+ log_debug("%s trigger=%d negate=%d %s →%d", cond, trigger, negate, param, state);
+
+ c = new0(UnitCondition, 1);
+ if (!c)
+ return log_oom();
+
+ c->name = strdup(cond);
+ c->param = strdup(param);
+ if (!c->name || !c->param)
+ return log_oom();
+
+ c->trigger = trigger;
+ c->negate = negate;
+ c->tristate = state;
+
+ LIST_PREPEND(conditions, i->conditions, c);
+ c = NULL;
}
if (r < 0)
return bus_log_parse_error(r);
@@ -4565,15 +4643,15 @@ static int show_one(
bool *ellipsized) {
static const struct bus_properties_map property_map[] = {
- { "LoadState", "s", NULL, offsetof(UnitStatusInfo, load_state) },
- { "ActiveState", "s", NULL, offsetof(UnitStatusInfo, active_state) },
+ { "LoadState", "s", map_string_no_copy, offsetof(UnitStatusInfo, load_state) },
+ { "ActiveState", "s", map_string_no_copy, offsetof(UnitStatusInfo, active_state) },
{}
};
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
_cleanup_set_free_ Set *found_properties = NULL;
- UnitStatusInfo info = {
+ _cleanup_(unit_status_info_free) UnitStatusInfo info = {
.memory_current = (uint64_t) -1,
.memory_high = CGROUP_LIMIT_MAX,
.memory_max = CGROUP_LIMIT_MAX,
@@ -4582,7 +4660,6 @@ static int show_one(
.tasks_current = (uint64_t) -1,
.tasks_max = (uint64_t) -1,
};
- ExecStatusInfo *p;
int r;
assert(path);
@@ -4676,16 +4753,15 @@ static int show_one(
return bus_log_parse_error(r);
r = 0;
-
if (show_properties) {
char **pp;
- STRV_FOREACH(pp, arg_properties) {
+ STRV_FOREACH(pp, arg_properties)
if (!set_contains(found_properties, *pp)) {
log_warning("Property %s does not exist.", *pp);
r = -ENXIO;
}
- }
+
} else if (streq(verb, "help"))
show_unit_help(&info);
else if (streq(verb, "status")) {
@@ -4697,15 +4773,6 @@ static int show_one(
r = EXIT_PROGRAM_RUNNING_OR_SERVICE_OK;
}
- strv_free(info.documentation);
- strv_free(info.dropin_paths);
- strv_free(info.listen);
-
- while ((p = info.exec)) {
- LIST_REMOVE(exec, info.exec, p);
- exec_status_info_free(p);
- }
-
return r;
}
@@ -5499,10 +5566,12 @@ static int enable_sysv_units(const char *verb, char **args) {
if (!found_sysv)
continue;
- if (found_native)
- log_info("Synchronizing state of %s with SysV service script with %s.", name, argv[0]);
- else
- log_info("%s is not a native service, redirecting to systemd-sysv-install.", name);
+ if (!arg_quiet) {
+ if (found_native)
+ log_info("Synchronizing state of %s with SysV service script with %s.", name, argv[0]);
+ else
+ log_info("%s is not a native service, redirecting to systemd-sysv-install.", name);
+ }
if (!isempty(arg_root))
argv[c++] = q = strappend("--root=", arg_root);
@@ -5532,10 +5601,8 @@ static int enable_sysv_units(const char *verb, char **args) {
}
j = wait_for_terminate(pid, &status);
- if (j < 0) {
- log_error_errno(j, "Failed to wait for child: %m");
- return j;
- }
+ if (j < 0)
+ return log_error_errno(j, "Failed to wait for child: %m");
if (status.si_code == CLD_EXITED) {
if (streq(verb, "is-enabled")) {
@@ -5605,13 +5672,36 @@ static int mangle_names(char **original_names, char ***mangled_names) {
return 0;
}
+static int normalize_names(char **names, bool warn_if_path) {
+ char **u;
+ bool was_path = false;
+
+ STRV_FOREACH(u, names) {
+ int r;
+
+ if (!is_path(*u))
+ continue;
+
+ r = free_and_strdup(u, basename(*u));
+ if (r < 0)
+ return log_error_errno(r, "Failed to normalize unit file path: %m");
+
+ was_path = true;
+ }
+
+ if (warn_if_path && was_path)
+ log_warning("Warning: Can't execute disable on the unit file path. Proceeding with the unit name.");
+
+ return 0;
+}
+
static int unit_exists(const char *unit) {
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
_cleanup_free_ char *path = NULL;
static const struct bus_properties_map property_map[] = {
- { "LoadState", "s", NULL, offsetof(UnitStatusInfo, load_state) },
- { "ActiveState", "s", NULL, offsetof(UnitStatusInfo, active_state)},
+ { "LoadState", "s", map_string_no_copy, offsetof(UnitStatusInfo, load_state) },
+ { "ActiveState", "s", map_string_no_copy, offsetof(UnitStatusInfo, active_state)},
{},
};
UnitStatusInfo info = {};
@@ -5672,6 +5762,12 @@ static int enable_unit(int argc, char *argv[], void *userdata) {
return daemon_reload(argc, argv, userdata);
}
+ if (streq(verb, "disable")) {
+ r = normalize_names(names, true);
+ if (r < 0)
+ return r;
+ }
+
if (install_client_side()) {
if (streq(verb, "enable")) {
r = unit_file_enable(arg_scope, arg_runtime, arg_root, names, arg_force, &changes, &n_changes);
@@ -6530,7 +6626,7 @@ static void systemctl_help(void) {
" unit is required or wanted\n\n"
"Unit File Commands:\n"
" list-unit-files [PATTERN...] List installed unit files\n"
- " enable NAME... Enable one or more unit files\n"
+ " enable [NAME...|PATH...] Enable one or more unit files\n"
" disable NAME... Disable one or more unit files\n"
" reenable NAME... Reenable one or more unit files\n"
" preset NAME... Enable/disable one or more unit files\n"
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
index 787d68a009..5d72493725 100644
--- a/src/sysusers/sysusers.c
+++ b/src/sysusers/sysusers.c
@@ -1299,81 +1299,6 @@ static bool item_equal(Item *a, Item *b) {
return true;
}
-static bool valid_user_group_name(const char *u) {
- const char *i;
- long sz;
-
- if (isempty(u))
- return false;
-
- if (!(u[0] >= 'a' && u[0] <= 'z') &&
- !(u[0] >= 'A' && u[0] <= 'Z') &&
- u[0] != '_')
- return false;
-
- for (i = u+1; *i; i++) {
- if (!(*i >= 'a' && *i <= 'z') &&
- !(*i >= 'A' && *i <= 'Z') &&
- !(*i >= '0' && *i <= '9') &&
- *i != '_' &&
- *i != '-')
- return false;
- }
-
- sz = sysconf(_SC_LOGIN_NAME_MAX);
- assert_se(sz > 0);
-
- if ((size_t) (i-u) > (size_t) sz)
- return false;
-
- if ((size_t) (i-u) > UT_NAMESIZE - 1)
- return false;
-
- return true;
-}
-
-static bool valid_gecos(const char *d) {
-
- if (!d)
- return false;
-
- if (!utf8_is_valid(d))
- return false;
-
- if (string_has_cc(d, NULL))
- return false;
-
- /* Colons are used as field separators, and hence not OK */
- if (strchr(d, ':'))
- return false;
-
- return true;
-}
-
-static bool valid_home(const char *p) {
-
- if (isempty(p))
- return false;
-
- if (!utf8_is_valid(p))
- return false;
-
- if (string_has_cc(p, NULL))
- return false;
-
- if (!path_is_absolute(p))
- return false;
-
- if (!path_is_safe(p))
- return false;
-
- /* Colons are used as field separators, and hence not OK */
- if (strchr(p, ':'))
- return false;
-
- return true;
-}
-
static int parse_line(const char *fname, unsigned line, const char *buffer) {
static const Specifier specifier_table[] = {
diff --git a/src/test/test-cgroup.c b/src/test/test-cgroup.c
index 72c32d9c8f..5336c19652 100644
--- a/src/test/test-cgroup.c
+++ b/src/test/test-cgroup.c
@@ -60,16 +60,16 @@ int main(int argc, char*argv[]) {
assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a") > 0);
assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b") == 0);
- assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0, false, false, false, NULL) == 0);
- assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0, false, false, false, NULL) > 0);
+ assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0, 0, NULL, NULL, NULL) == 0);
+ assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0, 0, NULL, NULL, NULL) > 0);
- assert_se(cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", SYSTEMD_CGROUP_CONTROLLER, "/test-a", false, false) > 0);
+ assert_se(cg_migrate_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0) > 0);
assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a") == 0);
assert_se(cg_is_empty_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b") > 0);
- assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0, false, false, false, NULL) > 0);
- assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0, false, false, false, NULL) == 0);
+ assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0, 0, NULL, NULL, NULL) > 0);
+ assert_se(cg_kill_recursive(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0, 0, NULL, NULL, NULL) == 0);
cg_trim(SYSTEMD_CGROUP_CONTROLLER, "/", false);
diff --git a/src/test/test-id128.c b/src/test/test-id128.c
index 96aa008c06..f01fbdd6b2 100644
--- a/src/test/test-id128.c
+++ b/src/test/test-id128.c
@@ -23,6 +23,9 @@
#include "sd-id128.h"
#include "alloc-util.h"
+#include "fd-util.h"
+#include "fileio.h"
+#include "id128-util.h"
#include "macro.h"
#include "string-util.h"
#include "util.h"
@@ -33,8 +36,9 @@
int main(int argc, char *argv[]) {
sd_id128_t id, id2;
- char t[33];
+ char t[33], q[37];
_cleanup_free_ char *b = NULL;
+ _cleanup_close_ int fd = -1;
assert_se(sd_id128_randomize(&id) == 0);
printf("random: %s\n", sd_id128_to_string(id, t));
@@ -57,6 +61,17 @@ int main(int argc, char *argv[]) {
printf("waldi2: %s\n", b);
assert_se(streq(t, b));
+ printf("waldi3: %s\n", id128_to_uuid_string(ID128_WALDI, q));
+ assert_se(streq(q, UUID_WALDI));
+
+ b = mfree(b);
+ assert_se(asprintf(&b, ID128_UUID_FORMAT_STR, SD_ID128_FORMAT_VAL(ID128_WALDI)) == 36);
+ printf("waldi4: %s\n", b);
+ assert_se(streq(q, b));
+
+ assert_se(sd_id128_from_string(STR_WALDI, &id) >= 0);
+ assert_se(sd_id128_equal(id, ID128_WALDI));
+
assert_se(sd_id128_from_string(UUID_WALDI, &id) >= 0);
assert_se(sd_id128_equal(id, ID128_WALDI));
@@ -74,5 +89,69 @@ int main(int argc, char *argv[]) {
assert_se(!id128_is_valid("01020304-0506-0708-090a0b0c0d0e0f10"));
assert_se(!id128_is_valid("010203040506-0708-090a-0b0c0d0e0f10"));
+ fd = open_tmpfile_unlinkable(NULL, O_RDWR|O_CLOEXEC);
+ assert_se(fd >= 0);
+
+ /* First, write as UUID */
+ assert_se(sd_id128_randomize(&id) >= 0);
+ assert_se(id128_write_fd(fd, ID128_UUID, id, false) >= 0);
+
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(id128_read_fd(fd, ID128_PLAIN, &id2) == -EINVAL);
+
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(id128_read_fd(fd, ID128_UUID, &id2) >= 0);
+ assert_se(sd_id128_equal(id, id2));
+
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(id128_read_fd(fd, ID128_ANY, &id2) >= 0);
+ assert_se(sd_id128_equal(id, id2));
+
+ /* Second, write as plain */
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(ftruncate(fd, 0) >= 0);
+
+ assert_se(sd_id128_randomize(&id) >= 0);
+ assert_se(id128_write_fd(fd, ID128_PLAIN, id, false) >= 0);
+
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(id128_read_fd(fd, ID128_UUID, &id2) == -EINVAL);
+
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(id128_read_fd(fd, ID128_PLAIN, &id2) >= 0);
+ assert_se(sd_id128_equal(id, id2));
+
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(id128_read_fd(fd, ID128_ANY, &id2) >= 0);
+ assert_se(sd_id128_equal(id, id2));
+
+ /* Third, write plain without trailing newline */
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(ftruncate(fd, 0) >= 0);
+
+ assert_se(sd_id128_randomize(&id) >= 0);
+ assert_se(write(fd, sd_id128_to_string(id, t), 32) == 32);
+
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(id128_read_fd(fd, ID128_UUID, &id2) == -EINVAL);
+
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(id128_read_fd(fd, ID128_PLAIN, &id2) >= 0);
+ assert_se(sd_id128_equal(id, id2));
+
+ /* Third, write UUID without trailing newline */
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(ftruncate(fd, 0) >= 0);
+
+ assert_se(sd_id128_randomize(&id) >= 0);
+ assert_se(write(fd, id128_to_uuid_string(id, t), 36) == 36);
+
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(id128_read_fd(fd, ID128_PLAIN, &id2) == -EINVAL);
+
+ assert_se(lseek(fd, 0, SEEK_SET) == 0);
+ assert_se(id128_read_fd(fd, ID128_UUID, &id2) >= 0);
+ assert_se(sd_id128_equal(id, id2));
+
return 0;
}
diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c
index 4b9a74fca4..db1c928660 100644
--- a/src/test/test-install-root.c
+++ b/src/test/test-install-root.c
@@ -301,7 +301,12 @@ static void test_linked_units(const char *root) {
unit_file_changes_free(changes, n_changes);
changes = NULL; n_changes = 0;
- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, false, root, STRV_MAKE("linked3.service"), false, &changes, &n_changes) == -ELOOP);
+ assert_se(unit_file_enable(UNIT_FILE_SYSTEM, false, root, STRV_MAKE("linked3.service"), false, &changes, &n_changes) >= 0);
+ assert_se(n_changes == 1);
+ assert_se(changes[0].type == UNIT_FILE_SYMLINK);
+ assert_se(startswith(changes[0].path, root));
+ assert_se(endswith(changes[0].path, "linked3.service"));
+ assert_se(streq(changes[0].source, "/opt/linked3.service"));
unit_file_changes_free(changes, n_changes);
changes = NULL; n_changes = 0;
}
diff --git a/src/test/test-user-util.c b/src/test/test-user-util.c
index 8d1ec19f17..2a344a9f93 100644
--- a/src/test/test-user-util.c
+++ b/src/test/test-user-util.c
@@ -61,6 +61,88 @@ static void test_uid_ptr(void) {
assert_se(PTR_TO_UID(UID_TO_PTR(1000)) == 1000);
}
+static void test_valid_user_group_name(void) {
+ assert_se(!valid_user_group_name(NULL));
+ assert_se(!valid_user_group_name(""));
+ assert_se(!valid_user_group_name("1"));
+ assert_se(!valid_user_group_name("65535"));
+ assert_se(!valid_user_group_name("-1"));
+ assert_se(!valid_user_group_name("-kkk"));
+ assert_se(!valid_user_group_name("rööt"));
+ assert_se(!valid_user_group_name("."));
+ assert_se(!valid_user_group_name("eff.eff"));
+ assert_se(!valid_user_group_name("foo\nbar"));
+ assert_se(!valid_user_group_name("0123456789012345678901234567890123456789"));
+ assert_se(!valid_user_group_name_or_id("aaa:bbb"));
+
+ assert_se(valid_user_group_name("root"));
+ assert_se(valid_user_group_name("lennart"));
+ assert_se(valid_user_group_name("LENNART"));
+ assert_se(valid_user_group_name("_kkk"));
+ assert_se(valid_user_group_name("kkk-"));
+ assert_se(valid_user_group_name("kk-k"));
+
+ assert_se(valid_user_group_name("some5"));
+ assert_se(!valid_user_group_name("5some"));
+ assert_se(valid_user_group_name("INNER5NUMBER"));
+}
+
+static void test_valid_user_group_name_or_id(void) {
+ assert_se(!valid_user_group_name_or_id(NULL));
+ assert_se(!valid_user_group_name_or_id(""));
+ assert_se(valid_user_group_name_or_id("0"));
+ assert_se(valid_user_group_name_or_id("1"));
+ assert_se(valid_user_group_name_or_id("65534"));
+ assert_se(!valid_user_group_name_or_id("65535"));
+ assert_se(valid_user_group_name_or_id("65536"));
+ assert_se(!valid_user_group_name_or_id("-1"));
+ assert_se(!valid_user_group_name_or_id("-kkk"));
+ assert_se(!valid_user_group_name_or_id("rööt"));
+ assert_se(!valid_user_group_name_or_id("."));
+ assert_se(!valid_user_group_name_or_id("eff.eff"));
+ assert_se(!valid_user_group_name_or_id("foo\nbar"));
+ assert_se(!valid_user_group_name_or_id("0123456789012345678901234567890123456789"));
+ assert_se(!valid_user_group_name_or_id("aaa:bbb"));
+
+ assert_se(valid_user_group_name_or_id("root"));
+ assert_se(valid_user_group_name_or_id("lennart"));
+ assert_se(valid_user_group_name_or_id("LENNART"));
+ assert_se(valid_user_group_name_or_id("_kkk"));
+ assert_se(valid_user_group_name_or_id("kkk-"));
+ assert_se(valid_user_group_name_or_id("kk-k"));
+
+ assert_se(valid_user_group_name_or_id("some5"));
+ assert_se(!valid_user_group_name_or_id("5some"));
+ assert_se(valid_user_group_name_or_id("INNER5NUMBER"));
+}
+
+static void test_valid_gecos(void) {
+
+ assert_se(!valid_gecos(NULL));
+ assert_se(valid_gecos(""));
+ assert_se(valid_gecos("test"));
+ assert_se(valid_gecos("Ümläüt"));
+ assert_se(!valid_gecos("In\nvalid"));
+ assert_se(!valid_gecos("In:valid"));
+}
+
+static void test_valid_home(void) {
+
+ assert_se(!valid_home(NULL));
+ assert_se(!valid_home(""));
+ assert_se(!valid_home("."));
+ assert_se(!valid_home("/home/.."));
+ assert_se(!valid_home("/home/../"));
+ assert_se(!valid_home("/home\n/foo"));
+ assert_se(!valid_home("./piep"));
+ assert_se(!valid_home("piep"));
+ assert_se(!valid_home("/home/user:lennart"));
+
+ assert_se(valid_home("/"));
+ assert_se(valid_home("/home"));
+ assert_se(valid_home("/home/foo"));
+}
+
int main(int argc, char*argv[]) {
test_uid_to_name_one(0, "root");
@@ -75,5 +157,10 @@ int main(int argc, char*argv[]) {
test_parse_uid();
test_uid_ptr();
+ test_valid_user_group_name();
+ test_valid_user_group_name_or_id();
+ test_valid_gecos();
+ test_valid_home();
+
return 0;
}
diff --git a/src/test/test-util.c b/src/test/test-util.c
index e177612a9f..1b5cba86c1 100644
--- a/src/test/test-util.c
+++ b/src/test/test-util.c
@@ -308,7 +308,43 @@ static void test_physical_memory_scale(void) {
/* overflow */
assert_se(physical_memory_scale(UINT64_MAX/4, UINT64_MAX) == UINT64_MAX);
+}
+
+static void test_system_tasks_max(void) {
+ uint64_t t;
+
+ t = system_tasks_max();
+ assert_se(t > 0);
+ assert_se(t < UINT64_MAX);
+
+ log_info("Max tasks: %" PRIu64, t);
+}
+
+static void test_system_tasks_max_scale(void) {
+ uint64_t t;
+
+ t = system_tasks_max();
+
+ assert_se(system_tasks_max_scale(0, 100) == 0);
+ assert_se(system_tasks_max_scale(100, 100) == t);
+
+ assert_se(system_tasks_max_scale(0, 1) == 0);
+ assert_se(system_tasks_max_scale(1, 1) == t);
+ assert_se(system_tasks_max_scale(2, 1) == 2*t);
+
+ assert_se(system_tasks_max_scale(0, 2) == 0);
+ assert_se(system_tasks_max_scale(1, 2) == t/2);
+ assert_se(system_tasks_max_scale(2, 2) == t);
+ assert_se(system_tasks_max_scale(3, 2) == (3*t)/2);
+ assert_se(system_tasks_max_scale(4, 2) == t*2);
+
+ assert_se(system_tasks_max_scale(0, UINT32_MAX) == 0);
+ assert_se(system_tasks_max_scale((UINT32_MAX-1)/2, UINT32_MAX-1) == t/2);
+ assert_se(system_tasks_max_scale(UINT32_MAX, UINT32_MAX) == t);
+
+ /* overflow */
+ assert_se(system_tasks_max_scale(UINT64_MAX/4, UINT64_MAX) == UINT64_MAX);
}
int main(int argc, char *argv[]) {
@@ -327,6 +363,8 @@ int main(int argc, char *argv[]) {
test_raw_clone();
test_physical_memory();
test_physical_memory_scale();
+ test_system_tasks_max();
+ test_system_tasks_max_scale();
return 0;
}
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index bfb6293b3d..954f4aa985 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -1575,13 +1575,12 @@ static int clean_item_instance(Item *i, const char* instance) {
d = opendir_nomod(instance);
if (!d) {
- if (errno == ENOENT || errno == ENOTDIR) {
+ if (IN_SET(errno, ENOENT, ENOTDIR)) {
log_debug_errno(errno, "Directory \"%s\": %m", instance);
return 0;
}
- log_error_errno(errno, "Failed to open directory %s: %m", instance);
- return -errno;
+ return log_error_errno(errno, "Failed to open directory %s: %m", instance);
}
if (fstat(dirfd(d), &s) < 0)
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index a8ab208816..a893a2b3d9 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -1256,7 +1256,7 @@ static int on_post(sd_event_source *s, void *userdata) {
return r;
} else if (manager->cgroup)
/* cleanup possible left-over processes in our cgroup */
- cg_kill(SYSTEMD_CGROUP_CONTROLLER, manager->cgroup, SIGKILL, false, true, NULL);
+ cg_kill(SYSTEMD_CGROUP_CONTROLLER, manager->cgroup, SIGKILL, CGROUP_IGNORE_SELF, NULL, NULL, NULL);
}
}
diff --git a/units/getty@.service.m4 b/units/getty@.service.m4
index 46164ab9d8..5b82c13fc5 100644
--- a/units/getty@.service.m4
+++ b/units/getty@.service.m4
@@ -20,6 +20,12 @@ After=rc-local.service
Before=getty.target
IgnoreOnIsolate=yes
+# IgnoreOnIsolate causes issues with sulogin, if someone isolates
+# rescue.target or starts rescue.service from multi-user.target or
+# graphical.target.
+Conflicts=rescue.service
+Before=rescue.service
+
# On systems without virtual consoles, don't start any getty. Note
# that serial gettys are covered by serial-getty@.service, not this
# unit.
diff --git a/units/systemd-nspawn@.service.in b/units/systemd-nspawn@.service.in
index a88774a495..c8141639b6 100644
--- a/units/systemd-nspawn@.service.in
+++ b/units/systemd-nspawn@.service.in
@@ -20,23 +20,14 @@ RestartForceExitStatus=133
SuccessExitStatus=133
Slice=machine.slice
Delegate=yes
-TasksMax=8192
+TasksMax=16384
# Enforce a strict device policy, similar to the one nspawn configures
# when it allocates its own scope unit. Make sure to keep these
# policies in sync if you change them!
-DevicePolicy=strict
-DeviceAllow=/dev/null rwm
-DeviceAllow=/dev/zero rwm
-DeviceAllow=/dev/full rwm
-DeviceAllow=/dev/random rwm
-DeviceAllow=/dev/urandom rwm
-DeviceAllow=/dev/tty rwm
+DevicePolicy=closed
DeviceAllow=/dev/net/tun rwm
-DeviceAllow=/dev/pts/ptmx rw
DeviceAllow=char-pts rw
-DeviceAllow=/run/systemd/inaccessible/chr rwm
-DeviceAllow=/run/systemd/inaccessible/blk rwm
# nspawn itself needs access to /dev/loop-control and /dev/loop, to
# implement the --image= option. Add these here, too.
diff --git a/units/user/graphical-session.target b/units/user/graphical-session.target
new file mode 100644
index 0000000000..00d16230b7
--- /dev/null
+++ b/units/user/graphical-session.target
@@ -0,0 +1,13 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+
+[Unit]
+Description=Current graphical user session
+Documentation=man:systemd.special(7)
+Requires=basic.target
+RefuseManualStart=yes
+StopWhenUnneeded=yes