summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Sateler <fsateler@debian.org>2019-02-20 21:24:33 -0300
committerFelipe Sateler <fsateler@debian.org>2019-02-20 21:24:33 -0300
commit7c20daf69c4411979b7f8902f3601d1cdc56cc07 (patch)
treed59b9989ce55ed23693e80974d94c856f1c2c8b1
parent6e866b331d7cd4a5e0759dd160dea6edabd3678e (diff)
downloadsystemd-7c20daf69c4411979b7f8902f3601d1cdc56cc07.tar.gz
New upstream version 241upstream/241
-rw-r--r--.mailmap6
-rw-r--r--.mkosi/mkosi.arch1
-rw-r--r--.travis.yml64
-rw-r--r--NEWS142
-rw-r--r--README6
-rw-r--r--README.md1
-rw-r--r--TODO4
-rw-r--r--docs/AUTOMATIC_BOOT_ASSESSMENT.md4
-rw-r--r--docs/BLOCK_DEVICE_LOCKING.md4
-rw-r--r--docs/BOOT_LOADER_INTERFACE.md4
-rw-r--r--docs/BOOT_LOADER_SPECIFICATION.md4
-rw-r--r--docs/CGROUP_DELEGATION.md70
-rw-r--r--docs/CODE_OF_CONDUCT.md4
-rw-r--r--docs/CODE_QUALITY.md4
-rw-r--r--docs/CODING_STYLE.md8
-rw-r--r--docs/CONTRIBUTING.md4
-rw-r--r--docs/DISTRO_PORTING.md4
-rw-r--r--docs/ENVIRONMENT.md4
-rw-r--r--docs/HACKING.md4
-rw-r--r--docs/PORTABLE_SERVICES.md16
-rw-r--r--docs/PREDICTABLE_INTERFACE_NAMES.md4
-rw-r--r--docs/RELEASE.md4
-rw-r--r--docs/TRANSIENT-SETTINGS.md4
-rw-r--r--docs/TRANSLATORS.md4
-rw-r--r--docs/UIDS-GIDS.md4
-rw-r--r--docs/index.md27
-rw-r--r--hwdb/20-OUI.hwdb972
-rw-r--r--hwdb/20-acpi-vendor.hwdb12
-rw-r--r--hwdb/20-acpi-vendor.hwdb.patch98
-rw-r--r--hwdb/20-pci-vendor-model.hwdb1657
-rw-r--r--hwdb/20-sdio-classes.hwdb2
-rw-r--r--hwdb/20-sdio-vendor-model.hwdb3
-rw-r--r--hwdb/20-usb-vendor-model.hwdb755
-rw-r--r--hwdb/60-evdev.hwdb18
-rw-r--r--hwdb/60-keyboard.hwdb40
-rw-r--r--hwdb/60-sensor.hwdb25
-rw-r--r--hwdb/70-mouse.hwdb37
-rw-r--r--hwdb/acpi_id_registry.html2
-rw-r--r--hwdb/ma-large.txt2042
-rw-r--r--hwdb/ma-medium.txt488
-rw-r--r--hwdb/ma-small.txt463
-rw-r--r--hwdb/pci.ids630
-rw-r--r--hwdb/pnp_id_registry.html2
-rw-r--r--hwdb/sdio.ids3
-rw-r--r--hwdb/usb.ids279
-rw-r--r--man/coredump.conf.xml2
-rw-r--r--man/journal-remote.conf.xml2
-rw-r--r--man/journal-upload.conf.xml2
-rw-r--r--man/journalctl.xml4
-rw-r--r--man/journald.conf.xml4
-rw-r--r--man/kernel-command-line.xml1
-rw-r--r--man/kernel-install.xml14
-rw-r--r--man/logind.conf.xml2
-rw-r--r--man/machine-info.xml2
-rw-r--r--man/os-release.xml2
-rw-r--r--man/pam_systemd.xml16
-rw-r--r--man/sd-bus-errors.xml62
-rw-r--r--man/sd-login.xml2
-rw-r--r--man/sd_bus_new.xml46
-rw-r--r--man/sd_bus_request_name.xml14
-rw-r--r--man/sd_event_wait.xml2
-rw-r--r--man/sd_id128_get_machine.xml4
-rw-r--r--man/systemctl.xml4
-rw-r--r--man/systemd-boot.xml2
-rw-r--r--man/systemd-cat.xml23
-rw-r--r--man/systemd-sleep.conf.xml2
-rw-r--r--man/systemd-system.conf.xml6
-rw-r--r--man/systemd.exec.xml43
-rw-r--r--man/systemd.kill.xml2
-rw-r--r--man/systemd.link.xml176
-rw-r--r--man/systemd.mount.xml15
-rw-r--r--man/systemd.netdev.xml22
-rw-r--r--man/systemd.nspawn.xml6
-rw-r--r--man/systemd.resource-control.xml1
-rw-r--r--man/systemd.service.xml1
-rw-r--r--man/systemd.socket.xml1
-rw-r--r--man/systemd.swap.xml1
-rw-r--r--man/systemd.unit.xml1
-rw-r--r--man/systemd.xml13
-rw-r--r--man/timedatectl.xml2
-rw-r--r--man/tmpfiles.d.xml12
-rw-r--r--man/udev.conf.xml2
-rw-r--r--man/udev.xml12
-rw-r--r--man/udev_device_has_tag.xml11
-rw-r--r--man/udevadm.xml112
-rw-r--r--man/vconsole.conf.xml2
-rw-r--r--meson.build58
-rw-r--r--meson_options.txt5
-rw-r--r--network/99-default.link2
-rw-r--r--po/it.po22
-rw-r--r--po/uk.po2
-rwxr-xr-xsemaphoreci/gcc-compilation.sh8
-rwxr-xr-xsemaphoreci/setup.sh27
-rw-r--r--shell-completion/bash/udevadm4
-rw-r--r--shell-completion/zsh/_bootctl4
-rw-r--r--shell-completion/zsh/_busctl4
-rw-r--r--shell-completion/zsh/_coredumpctl11
-rw-r--r--shell-completion/zsh/_hostnamectl10
-rw-r--r--shell-completion/zsh/_journalctl34
-rw-r--r--shell-completion/zsh/_kernel-install10
-rw-r--r--shell-completion/zsh/_localectl8
-rw-r--r--shell-completion/zsh/_loginctl7
-rw-r--r--shell-completion/zsh/_machinectl16
-rw-r--r--shell-completion/zsh/_networkctl5
-rw-r--r--shell-completion/zsh/_sd_machines6
-rw-r--r--shell-completion/zsh/_systemctl.in38
-rw-r--r--shell-completion/zsh/_systemd-analyze21
-rw-r--r--shell-completion/zsh/_systemd-delta5
-rw-r--r--shell-completion/zsh/_systemd-inhibit8
-rw-r--r--shell-completion/zsh/_systemd-nspawn7
-rw-r--r--shell-completion/zsh/_systemd-resolve16
-rw-r--r--shell-completion/zsh/_systemd-run11
-rw-r--r--shell-completion/zsh/_udevadm14
-rw-r--r--src/analyze/analyze-security.c23
-rw-r--r--src/analyze/analyze.c3
-rw-r--r--src/basic/alloc-util.h49
-rw-r--r--src/basic/btrfs-util.c2
-rw-r--r--src/basic/btrfs-util.h16
-rw-r--r--src/basic/build.h2
-rw-r--r--src/basic/capability-util.c1
-rw-r--r--src/basic/cgroup-util.c12
-rw-r--r--src/basic/cgroup-util.h12
-rw-r--r--src/basic/copy.c28
-rw-r--r--src/basic/copy.h9
-rw-r--r--src/basic/env-file.c32
-rw-r--r--src/basic/env-util.c2
-rw-r--r--src/basic/env-util.h6
-rw-r--r--src/basic/extract-word.h12
-rw-r--r--src/basic/fd-util.c39
-rw-r--r--src/basic/fd-util.h2
-rw-r--r--src/basic/hashmap.c10
-rw-r--r--src/basic/hashmap.h1
-rw-r--r--src/basic/in-addr-util.c37
-rw-r--r--src/basic/in-addr-util.h22
-rw-r--r--src/basic/io-util.c10
-rw-r--r--src/basic/io-util.h2
-rw-r--r--src/basic/meson.build3
-rw-r--r--src/basic/missing_if_link.h3
-rw-r--r--src/basic/missing_syscall.h1
-rw-r--r--src/basic/path-util.h2
-rw-r--r--src/basic/prioq.c7
-rw-r--r--src/basic/prioq.h8
-rw-r--r--src/basic/process-util.c91
-rw-r--r--src/basic/process-util.h4
-rw-r--r--src/basic/procfs-util.c9
-rw-r--r--src/basic/procfs-util.h5
-rw-r--r--src/basic/siphash24.c8
-rw-r--r--src/basic/siphash24.h6
-rw-r--r--src/basic/stat-util.c16
-rw-r--r--src/basic/stat-util.h5
-rw-r--r--src/basic/string-util.c2
-rw-r--r--src/basic/string-util.h3
-rw-r--r--src/basic/strv.h15
-rw-r--r--src/basic/time-util.c1
-rw-r--r--src/basic/tmpfile-util.c1
-rw-r--r--src/basic/unit-name.h10
-rw-r--r--src/basic/user-util.c7
-rw-r--r--src/basic/util.c2
-rw-r--r--src/basic/util.h9
-rw-r--r--src/boot/efi/boot.c10
-rw-r--r--src/boot/efi/disk.c2
-rw-r--r--src/boot/efi/disk.h2
-rw-r--r--src/boot/efi/linux.c4
-rw-r--r--src/boot/efi/meson.build8
-rw-r--r--src/boot/efi/stub.c4
-rw-r--r--src/busctl/busctl.c2
-rw-r--r--src/cgtop/cgtop.c4
-rw-r--r--src/core/automount.c7
-rw-r--r--src/core/bpf-devices.c1
-rw-r--r--src/core/cgroup.c55
-rw-r--r--src/core/dbus-manager.c2
-rw-r--r--src/core/dbus-service.c38
-rw-r--r--src/core/dbus-socket.c4
-rw-r--r--src/core/dbus-unit.c4
-rw-r--r--src/core/dbus.c9
-rw-r--r--src/core/device.c2
-rw-r--r--src/core/dynamic-user.c2
-rw-r--r--src/core/execute.c55
-rw-r--r--src/core/job.c11
-rw-r--r--src/core/load-fragment.c8
-rw-r--r--src/core/locale-setup.c4
-rw-r--r--src/core/macros.systemd.in22
-rw-r--r--src/core/main.c77
-rw-r--r--src/core/manager.c2
-rw-r--r--src/core/meson.build21
-rw-r--r--src/core/mount.c77
-rw-r--r--src/core/namespace.c2
-rw-r--r--src/core/namespace.h2
-rw-r--r--src/core/service.c2
-rw-r--r--src/core/socket.c69
-rw-r--r--src/core/systemd.pc.in4
-rw-r--r--src/core/transaction.c26
-rw-r--r--src/core/unit-printf.c1
-rw-r--r--src/core/unit.h4
-rw-r--r--src/coredump/coredump.c44
-rw-r--r--src/cryptsetup/cryptsetup.c88
-rw-r--r--src/fsck/fsck.c2
-rw-r--r--src/import/curl-util.c5
-rw-r--r--src/import/pull-job.c2
-rw-r--r--src/initctl/initctl.c8
-rw-r--r--src/journal-remote/journal-gatewayd.c53
-rw-r--r--src/journal-remote/journal-remote-main.c39
-rw-r--r--src/journal-remote/journal-remote.c3
-rw-r--r--src/journal-remote/journal-upload-journal.c2
-rw-r--r--src/journal-remote/journal-upload.c3
-rw-r--r--src/journal-remote/microhttpd-util.c13
-rw-r--r--src/journal-remote/microhttpd-util.h1
-rw-r--r--src/journal/audit-type.h3
-rw-r--r--src/journal/cat.c50
-rw-r--r--src/journal/catalog.c48
-rw-r--r--src/journal/journal-def.h118
-rw-r--r--src/journal/journal-send.c4
-rw-r--r--src/journal/journald-audit.c2
-rw-r--r--src/journal/journald-context.c72
-rw-r--r--src/journal/journald-native.c74
-rw-r--r--src/journal/journald-server.c29
-rw-r--r--src/journal/journald-server.h2
-rw-r--r--src/journal/journald-wall.h1
-rw-r--r--src/journal/mmap-cache.c2
-rw-r--r--src/journal/sd-journal.c1
-rw-r--r--src/kernel-install/90-loaderentry.install25
-rw-r--r--src/kernel-install/kernel-install7
-rw-r--r--src/libsystemd-network/dhcp-identifier.c7
-rw-r--r--src/libsystemd-network/lldp-neighbor.c4
-rw-r--r--src/libsystemd-network/network-internal.c2
-rw-r--r--src/libsystemd-network/radv-internal.h35
-rw-r--r--src/libsystemd-network/sd-dhcp-client.c35
-rw-r--r--src/libsystemd-network/sd-ndisc.c1
-rw-r--r--src/libsystemd-network/test-lldp.c4
-rw-r--r--src/libsystemd/libsystemd.pc.in4
-rw-r--r--src/libsystemd/libsystemd.sym5
-rw-r--r--src/libsystemd/meson.build7
-rw-r--r--src/libsystemd/sd-bus/bus-dump.h4
-rw-r--r--src/libsystemd/sd-bus/bus-match.c4
-rw-r--r--src/libsystemd/sd-bus/bus-objects.c12
-rw-r--r--src/libsystemd/sd-bus/bus-protocol.h12
-rw-r--r--src/libsystemd/sd-bus/bus-socket.c11
-rw-r--r--src/libsystemd/sd-bus/sd-bus.c13
-rw-r--r--src/libsystemd/sd-daemon/sd-daemon.c8
-rw-r--r--src/libsystemd/sd-device/device-monitor.c12
-rw-r--r--src/libsystemd/sd-device/device-private.c24
-rw-r--r--src/libsystemd/sd-device/device-private.h1
-rw-r--r--src/libsystemd/sd-device/sd-device.c76
-rw-r--r--src/libsystemd/sd-device/test-sd-device-monitor.c127
-rw-r--r--src/libsystemd/sd-event/sd-event.c23
-rw-r--r--src/libsystemd/sd-hwdb/hwdb-util.c2
-rw-r--r--src/libsystemd/sd-hwdb/sd-hwdb.c2
-rw-r--r--src/libsystemd/sd-id128/sd-id128.c2
-rw-r--r--src/libsystemd/sd-login/sd-login.c4
-rw-r--r--src/libsystemd/sd-netlink/netlink-message.c36
-rw-r--r--src/libsystemd/sd-netlink/netlink-types.c4
-rw-r--r--src/libsystemd/sd-netlink/netlink-types.h1
-rw-r--r--src/libsystemd/sd-network/sd-network.c4
-rw-r--r--src/libsystemd/sd-resolve/sd-resolve.c1
-rw-r--r--src/libudev/libudev-list.c2
-rw-r--r--src/libudev/libudev-util.c13
-rw-r--r--src/libudev/libudev.pc.in2
-rw-r--r--src/libudev/meson.build7
-rw-r--r--src/login/logind-action.c2
-rw-r--r--src/login/logind-dbus.c27
-rw-r--r--src/login/logind-inhibit.h18
-rw-r--r--src/login/logind-seat.c2
-rw-r--r--src/login/logind-session.c58
-rw-r--r--src/login/logind.c2
-rw-r--r--src/login/pam_systemd.c56
-rw-r--r--src/login/user-runtime-dir.c2
-rw-r--r--src/machine/machine-dbus.c2
-rw-r--r--src/machine/machinectl.c9
-rw-r--r--src/machine/machined.c2
-rw-r--r--src/network/netdev/bridge.c2
-rw-r--r--src/network/netdev/netdev.c11
-rw-r--r--src/network/netdev/netdev.h1
-rw-r--r--src/network/netdev/wireguard.c233
-rw-r--r--src/network/networkd-address.c53
-rw-r--r--src/network/networkd-brvlan.c3
-rw-r--r--src/network/networkd-dhcp4.c2
-rw-r--r--src/network/networkd-dhcp6.c2
-rw-r--r--src/network/networkd-link.c291
-rw-r--r--src/network/networkd-link.h2
-rw-r--r--src/network/networkd-manager.c2
-rw-r--r--src/network/networkd-ndisc.c1
-rw-r--r--src/network/networkd-network.c50
-rw-r--r--src/network/wait-online/manager.c31
-rw-r--r--src/nspawn/nspawn-network.c2
-rw-r--r--src/nspawn/nspawn.c11
-rw-r--r--src/nss-myhostname/nss-myhostname.c13
-rw-r--r--src/nss-mymachines/nss-mymachines.c13
-rw-r--r--src/nss-resolve/nss-resolve.c8
-rw-r--r--src/nss-systemd/nss-systemd.c10
-rw-r--r--src/portable/portabled.c2
-rw-r--r--src/resolve/resolved-dns-answer.h10
-rw-r--r--src/resolve/resolved-dns-dnssec.c2
-rw-r--r--src/resolve/resolved-dns-query.c2
-rw-r--r--src/resolve/resolved-dns-scope.c30
-rw-r--r--src/resolve/resolved-etc-hosts.c4
-rw-r--r--src/resolve/resolved-manager.c2
-rw-r--r--src/resolve/resolved.c4
-rw-r--r--src/shared/acl-util.c8
-rw-r--r--src/shared/ask-password-api.c4
-rw-r--r--src/shared/ask-password-api.h1
-rw-r--r--src/shared/bus-unit-util.c2
-rw-r--r--src/shared/bus-util.c8
-rw-r--r--src/shared/conf-parser.c4
-rw-r--r--src/shared/dissect-image.c4
-rw-r--r--src/shared/efivars.c134
-rw-r--r--src/shared/install.c6
-rw-r--r--src/shared/journal-importer.c5
-rw-r--r--src/shared/journal-importer.h3
-rw-r--r--src/shared/json.c7
-rw-r--r--src/shared/json.h3
-rw-r--r--src/shared/lockfile-util.c1
-rw-r--r--src/shared/logs-show.c4
-rw-r--r--src/shared/loop-util.c7
-rw-r--r--src/shared/pager.c4
-rw-r--r--src/shared/seccomp-util.c1
-rw-r--r--src/shared/switch-root.c2
-rw-r--r--src/shared/xml.c2
-rw-r--r--src/sleep/sleep.conf25
-rw-r--r--src/socket-proxy/socket-proxyd.c2
-rw-r--r--src/stdio-bridge/stdio-bridge.c2
-rw-r--r--src/systemctl/systemctl.c4
-rw-r--r--src/systemd/_sd-common.h8
-rw-r--r--src/systemd/meson.build3
-rw-r--r--src/systemd/sd-bus.h2
-rw-r--r--src/systemd/sd-id128.h2
-rw-r--r--src/systemd/sd-lldp.h20
-rw-r--r--src/systemd/sd-netlink.h3
-rw-r--r--src/test/meson.build5
-rw-r--r--src/test/test-barrier.c17
-rw-r--r--src/test/test-bpf.c36
-rw-r--r--src/test/test-capability.c1
-rw-r--r--src/test/test-conf-parser.c22
-rw-r--r--src/test/test-execute.c4
-rw-r--r--src/test/test-fileio.c34
-rw-r--r--src/test/test-fs-util.c6
-rw-r--r--src/test/test-hexdecoct.c1
-rw-r--r--src/test/test-in-addr-util.c122
-rw-r--r--src/test/test-json.c23
-rw-r--r--src/test/test-libudev.c30
-rw-r--r--src/test/test-mountpoint-util.c1
-rw-r--r--src/test/test-path-util.c2
-rw-r--r--src/test/test-prioq.c16
-rw-r--r--src/test/test-process-util.c2
-rw-r--r--src/test/test-procfs-util.c2
-rw-r--r--src/test/test-sizeof.c11
-rw-r--r--src/test/test-stat-util.c1
-rw-r--r--src/test/test-time-util.c2
-rw-r--r--src/test/test-udev.c3
-rw-r--r--src/test/test-util.c29
-rw-r--r--src/timedate/timedated.c15
-rw-r--r--src/timesync/timesyncd-manager.c7
-rw-r--r--src/timesync/timesyncd.c4
-rw-r--r--src/tmpfiles/tmpfiles.c4
-rw-r--r--src/udev/meson.build9
-rw-r--r--src/udev/net/ethtool-util.c12
-rw-r--r--src/udev/net/ethtool-util.h16
-rw-r--r--src/udev/net/link-config.c136
-rw-r--r--src/udev/net/link-config.h1
-rw-r--r--src/udev/net/naming-scheme.c64
-rw-r--r--src/udev/net/naming-scheme.h48
-rw-r--r--src/udev/scsi_id/scsi_id.c3
-rw-r--r--src/udev/udev-builtin-blkid.c2
-rw-r--r--src/udev/udev-builtin-btrfs.c2
-rw-r--r--src/udev/udev-builtin-hwdb.c4
-rw-r--r--src/udev/udev-builtin-input_id.c2
-rw-r--r--src/udev/udev-builtin-keyboard.c6
-rw-r--r--src/udev/udev-builtin-net_id.c103
-rw-r--r--src/udev/udev-builtin-net_setup_link.c2
-rw-r--r--src/udev/udev-builtin-path_id.c1
-rw-r--r--src/udev/udev-builtin.c2
-rw-r--r--src/udev/udev-ctrl.c68
-rw-r--r--src/udev/udev-ctrl.h17
-rw-r--r--src/udev/udev-event.c54
-rw-r--r--src/udev/udev-node.c5
-rw-r--r--src/udev/udev-rules.c226
-rw-r--r--src/udev/udev.pc.in2
-rw-r--r--src/udev/udevadm-control.c79
-rw-r--r--src/udev/udevadm-info.c13
-rw-r--r--src/udev/udevadm-monitor.c10
-rw-r--r--src/udev/udevadm-settle.c10
-rw-r--r--src/udev/udevadm-trigger.c55
-rw-r--r--src/udev/udevadm.c3
-rw-r--r--src/udev/udevadm.h6
-rw-r--r--src/udev/udevd.c169
-rw-r--r--src/version/version.h.in1
-rw-r--r--sysctl.d/50-default.conf4
-rwxr-xr-xtest/TEST-01-BASIC/test.sh11
-rwxr-xr-xtest/TEST-10-ISSUE-2467/test.sh6
-rwxr-xr-xtest/TEST-19-DELEGATE/testsuite.sh2
-rwxr-xr-xtest/TEST-22-TMPFILES/test-02.sh31
-rw-r--r--test/TEST-28-PERCENTJ-WANTEDBY/Makefile9
-rwxr-xr-xtest/TEST-28-PERCENTJ-WANTEDBY/test.sh68
-rw-r--r--test/fuzz/fuzz-udev-rules/oss-fuzz-129801
-rw-r--r--test/meson.build3
-rwxr-xr-xtest/rule-syntax-check.py5
-rw-r--r--test/test-execute/exec-privatenetwork-yes.service2
-rw-r--r--test/test-functions82
-rw-r--r--test/test-network/conf/24-search-domain.network2
-rw-r--r--test/test-network/conf/25-address-section.network7
-rw-r--r--test/test-network/conf/25-link-local-addressing-no.network5
-rw-r--r--test/test-network/conf/25-link-local-addressing-yes.network5
-rw-r--r--test/test-network/conf/25-route-ipv6-src.network16
-rw-r--r--test/test-network/conf/25-wireguard-23-peers.netdev148
-rw-r--r--test/test-network/conf/25-wireguard-23-peers.network97
-rw-r--r--test/test-network/conf/25-wireguard.netdev3
-rw-r--r--test/test-network/conf/dhcp-server-veth-peer.network2
-rw-r--r--test/test-network/conf/dhcp-v4-server-veth-peer.network4
-rwxr-xr-xtest/test-network/systemd-networkd-tests.py251
-rwxr-xr-xtools/choose-default-locale.sh12
-rwxr-xr-xtools/make-directive-index.py31
-rwxr-xr-xtools/make-index-md.sh32
-rwxr-xr-xtools/meson-vcs-tag.sh18
-rwxr-xr-xtravis-ci/managers/debian.sh18
-rwxr-xr-xtravis-ci/managers/xenial.sh23
-rw-r--r--units/initrd-switch-root.target2
-rw-r--r--units/systemd-tmpfiles-setup-dev.service.in1
416 files changed, 11424 insertions, 3524 deletions
diff --git a/.mailmap b/.mailmap
index f3809eac4c..abde31e48c 100644
--- a/.mailmap
+++ b/.mailmap
@@ -192,3 +192,9 @@ Yin Kangkai <kangkai.yin@intel.com> <kangkai.yin@linux.intel.com>
Zachary Winnerman <33329648+winnerman-pythian@users.noreply.github.com>
Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Łukasz Stelmach <l.stelmach@samsung.com> <stlman@poczta.fm>
+Jonathon Kowalski <bl0pbl33p@gmail.com>
+Diego Canuhe <dcanuhe@gmail.com> <46734128+dcanuhe@users.noreply.github.com>
+David Santamaría Rogado <howl.nsp@gmail.com>
+Mike Auty <mike.auty@gmail.com>
+Roger James <roger@beardandsandals.co.uk>
+Stephan Edel <se@se-it.eu>
diff --git a/.mkosi/mkosi.arch b/.mkosi/mkosi.arch
index 05620cd1e9..aabfd52ad1 100644
--- a/.mkosi/mkosi.arch
+++ b/.mkosi/mkosi.arch
@@ -54,3 +54,4 @@ BuildPackages=
Packages=
libidn2
+ qrencode
diff --git a/.travis.yml b/.travis.yml
index f50731fe3f..6eae0bc3e4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,4 +1,5 @@
sudo: required
+dist: xenial
services:
- docker
@@ -17,96 +18,85 @@ stages:
jobs:
include:
- stage: Build & test
- name: Fedora Latest
+ name: Debian Testing
language: bash
env:
- - FEDORA_RELEASE="latest"
- - CONT_NAME="systemd-fedora-$FEDORA_RELEASE"
+ - DEBIAN_RELEASE="testing"
+ - CONT_NAME="systemd-debian-$DEBIAN_RELEASE"
- DOCKER_EXEC="docker exec -ti $CONT_NAME"
before_install:
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
install:
- - $CI_MANAGERS/fedora.sh SETUP
+ - $CI_MANAGERS/debian.sh SETUP
script:
- set -e
# Build systemd
- - $CI_MANAGERS/fedora.sh RUN
+ - $CI_MANAGERS/debian.sh RUN
- set +e
after_script:
- - $CI_MANAGERS/fedora.sh CLEANUP
+ - $CI_MANAGERS/debian.sh CLEANUP
- - name: Fedora Latest (ASan+UBSan)
+ - name: Debian Testing (ASan+UBSan)
language: bash
env:
- - FEDORA_RELEASE="latest"
- - CONT_NAME="systemd-fedora-$FEDORA_RELEASE"
+ - DEBIAN_RELEASE="testing"
+ - CONT_NAME="systemd-debian-$DEBIAN_RELEASE"
- DOCKER_EXEC="docker exec -ti $CONT_NAME"
before_install:
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
install:
- - $CI_MANAGERS/fedora.sh SETUP
+ - $CI_MANAGERS/debian.sh SETUP
script:
- set -e
- - $CI_MANAGERS/fedora.sh RUN_ASAN
+ - $CI_MANAGERS/debian.sh RUN_ASAN
- set +e
after_script:
- - $CI_MANAGERS/fedora.sh CLEANUP
+ - $CI_MANAGERS/debian.sh CLEANUP
- - name: Fedora Latest (clang)
+ - name: Debian Testing (clang)
language: bash
env:
- - FEDORA_RELEASE="latest"
- - CONT_NAME="systemd-fedora-$FEDORA_RELEASE"
+ - DEBIAN_RELEASE="testing"
+ - CONT_NAME="systemd-debian-$DEBIAN_RELEASE"
- DOCKER_EXEC="docker exec -ti $CONT_NAME"
before_install:
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
install:
- - $CI_MANAGERS/fedora.sh SETUP
+ - $CI_MANAGERS/debian.sh SETUP
script:
- set -e
- - $CI_MANAGERS/fedora.sh RUN_CLANG
+ - $CI_MANAGERS/debian.sh RUN_CLANG
- set +e
after_script:
- - $CI_MANAGERS/fedora.sh CLEANUP
+ - $CI_MANAGERS/debian.sh CLEANUP
- - name: Fedora Latest (clang ASan+UBSan)
+ - name: Debian Testing (clang ASan+UBSan)
language: bash
env:
- - FEDORA_RELEASE="latest"
- - CONT_NAME="systemd-fedora-$FEDORA_RELEASE"
+ - DEBIAN_RELEASE="testing"
+ - CONT_NAME="systemd-debian-$DEBIAN_RELEASE"
- DOCKER_EXEC="docker exec -ti $CONT_NAME"
before_install:
- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- docker --version
install:
- - $CI_MANAGERS/fedora.sh SETUP
+ - $CI_MANAGERS/debian.sh SETUP
script:
- set -e
- - $CI_MANAGERS/fedora.sh RUN_CLANG_ASAN
+ - $CI_MANAGERS/debian.sh RUN_CLANG_ASAN
- set +e
after_script:
- - $CI_MANAGERS/fedora.sh CLEANUP
+ - $CI_MANAGERS/debian.sh CLEANUP
- - name: Debian Testing
+ - name: Ubuntu Xenial
language: bash
- env:
- - DEBIAN_RELEASE="testing"
- - CONT_NAME="systemd-debian-$DEBIAN_RELEASE"
- - DOCKER_EXEC="docker exec -ti $CONT_NAME"
- before_install:
- - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
- - docker --version
- install:
- - $CI_MANAGERS/debian.sh SETUP
script:
- set -e
- - $CI_MANAGERS/debian.sh RUN
+ - sudo $CI_MANAGERS/xenial.sh
- set +e
- after_script:
- - $CI_MANAGERS/debian.sh CLEANUP
- stage: Coverity
language: bash
diff --git a/NEWS b/NEWS
index c67b5b068a..cd81d9ca35 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,108 @@
systemd System and Service Manager
+CHANGES WITH 241:
+
+ * The default locale can now be configured at compile time. Otherwise,
+ a suitable default will be selected automatically (one of C.UTF-8,
+ en_US.UTF-8, and C).
+
+ * The version string shown by systemd and other tools now includes the
+ git commit hash when built from git. An override may be specified
+ during compilation, which is intended to be used by distributions to
+ include the package release information.
+
+ * systemd-cat can now filter standard input and standard error streams
+ for different syslog priorities using the new --stderr-priority=
+ option.
+
+ * systemd-journald and systemd-journal-remote reject entries which
+ contain too many fields (CVE-2018-16865) and set limits on the
+ process' command line length (CVE-2018-16864).
+
+ * $DBUS_SESSION_BUS_ADDRESS environment variable is set by pam_systemd
+ again.
+
+ * A new network device NamePolicy "keep" is implemented for link files,
+ and used by default in 99-default.link (the fallback configuration
+ provided by systemd). With this policy, if the network device name
+ was already set by userspace, the device will not be renamed again.
+ This matches the naming scheme that was implemented before
+ systemd-240. If naming-scheme < 240 is specified, the "keep" policy
+ is also enabled by default, even if not specified. Effectively, this
+ means that if naming-scheme >= 240 is specified, network devices will
+ be renamed according to the configuration, even if they have been
+ renamed already, if "keep" is not specified as the naming policy in
+ the .link file. The 99-default.link file provided by systemd includes
+ "keep" for backwards compatibility, but it is recommended for user
+ installed .link files to *not* include it.
+
+ The "kernel" policy, which keeps kernel names declared to be
+ "persistent", now works again as documented.
+
+ * kernel-install script now optionally takes the paths to one or more
+ initrd files, and passes them to all plugins.
+
+ * The mincore() system call has been dropped from the @system-service
+ system call filter group, as it is pretty exotic and may potentially
+ used for side-channel attacks.
+
+ * -fPIE is dropped from compiler and linker options. Please specify
+ -Db_pie=true option to meson to build position-independent
+ executables. Note that the meson option is supported since meson-0.49.
+
+ * The fs.protected_regular and fs.protected_fifos sysctls, which were
+ added in Linux 4.19 to make some data spoofing attacks harder, are
+ now enabled by default. While this will hopefully improve the
+ security of most installations, it is technically a backwards
+ incompatible change; to disable these sysctls again, place the
+ following lines in /etc/sysctl.d/60-protected.conf or a similar file:
+
+ fs.protected_regular = 0
+ fs.protected_fifos = 0
+
+ Note that the similar hardlink and symlink protection has been
+ enabled since v199, and may be disabled likewise.
+
+ * The files read from the EnvironmentFile= setting in unit files now
+ parse backslashes inside quotes literally, matching the behaviour of
+ POSIX shells.
+
+ * udevadm trigger, udevadm control, udevadm settle and udevadm monitor
+ now automatically become NOPs when run in a chroot() environment.
+
+ * The tmpfiles.d/ "C" line type will now copy directory trees not only
+ when the destination is so far missing, but also if it already exists
+ as a directory and is empty. This is useful to cater for systems
+ where directory trees are put together from multiple separate mount
+ points but otherwise empty.
+
+ * A new function sd_bus_close_unref() (and the associated
+ sd_bus_close_unrefp()) has been added to libsystemd, that combines
+ sd_bus_close() and sd_bus_unref() in one.
+
+ * udevadm control learnt a new option for --ping for testing whether a
+ systemd-udevd instance is running and reacting.
+
+ Contributions from: Aaron Plattner, Alberts Muktupāvels, Alex Mayer,
+ Ayman Bagabas, Beniamino Galvani, Burt P, Chris Down, Chris Lamb, Chris
+ Morin, Christian Hesse, Claudius Ellsel, dana, Daniel Axtens, Daniele
+ Medri, Dave Reisner, David Santamaría Rogado, Diego Canuhe, Dimitri
+ John Ledkov, Evgeny Vereshchagin, Fabrice Fontaine, Filipe
+ Brandenburger, Franck Bui, Frantisek Sumsal, govwin, Hans de Goede,
+ James Hilliard, Jan Engelhardt, Jani Uusitalo, Jan Janssen, Jan
+ Synacek, Jonathan McDowell, Jonathan Roemer, Jonathon Kowalski, Joost
+ Heitbrink, Jörg Thalheim, Lance, Lennart Poettering, Louis Taylor,
+ Lucas Werkmeister, Mantas Mikulėnas, Marc-Antoine Perennou,
+ marvelousblack, Michael Biebl, Michael Sloan, Michal Sekletar, Mike
+ Auty, Mike Gilbert, Mikhail Kasimov, Neil Brown, Niklas Hambüchen,
+ Patrick Williams, Paul Seyfert, Peter Hutterer, Philip Withnall, Roger
+ James, Ronnie P. Thomas, Ryan Gonzalez, Sam Morris, Stephan Edel,
+ Stephan Gerhold, Susant Sahani, Taro Yamada, Thomas Haller, Topi
+ Miettinen, YiFei Zhu, YmrDtnJu, YunQiang Su, Yu Watanabe, Zbigniew
+ Jędrzejewski-Szmek, zsergeant77, Дамјан Георгиевски
+
+ — Berlin, 2018-02-14
+
CHANGES WITH 240:
* NoNewPrivileges=yes has been set for all long-running services
@@ -17,6 +120,8 @@ CHANGES WITH 240:
by systemd-sysusers again. Distributors or system administrators
may need to create these users and groups if they not exist (or need
to re-enable DynamicUser= for those units) while upgrading systemd.
+ Also, the clock file for systemd-timesyncd may need to move from
+ /var/lib/private/systemd/timesync/clock to /var/lib/systemd/timesync/clock.
* When unit files are loaded from disk, previously systemd would
sometimes (depending on the unit loading order) load units from the
@@ -100,7 +205,7 @@ CHANGES WITH 240:
file descriptors currently enforced (fs.file-max, fs.nr_open,
RLIMIT_NOFILE hard, RLIMIT_NOFILE soft) we turn off the first two,
and keep only the latter two. A set of build-time options
- (-Dbump-proc-sys-fs-file-max=no and -Dbump-proc-sys-fs-nr-open=no)
+ (-Dbump-proc-sys-fs-file-max=false and -Dbump-proc-sys-fs-nr-open=false)
has been added to revert this change in behaviour, which might be
an option for systems that turn off memcg in the kernel.
@@ -133,13 +238,13 @@ CHANGES WITH 240:
* The new "MemoryMin=" unit file property may now be used to set the
memory usage protection limit of processes invoked by the unit. This
- controls the cgroupsv2 memory.min attribute. Similarly, the new
+ controls the cgroup v2 memory.min attribute. Similarly, the new
"IODeviceLatencyTargetSec=" property has been added, wrapping the new
- cgroupsv2 io.latency cgroup property for configuring per-service I/O
+ cgroup v2 io.latency cgroup property for configuring per-service I/O
latency.
- * systemd now supports the cgroupsv2 devices BPF logic, as counterpart
- to the cgroupsv1 "devices" cgroup controller.
+ * systemd now supports the cgroup v2 devices BPF logic, as counterpart
+ to the cgroup v1 "devices" cgroup controller.
* systemd-escape now is able to combine --unescape with --template. It
also learnt a new option --instance for extracting and unescaping the
@@ -355,7 +460,7 @@ CHANGES WITH 240:
* The JoinControllers= option in system.conf is no longer supported, as
it didn't work correctly, is hard to support properly, is legacy (as
- the concept only exists on cgroupsv1) and apparently wasn't used.
+ the concept only exists on cgroup v1) and apparently wasn't used.
* Journal messages that are generated whenever a unit enters the failed
state are now tagged with a unique MESSAGE_ID. Similarly, messages
@@ -453,6 +558,22 @@ CHANGES WITH 240:
notified about this userspace breakage quickly, but they chose to
ignore it.
+ * PermissionsStartOnly= setting is deprecated (but is still supported
+ for backwards compatibility). The same functionality is provided by
+ the more flexible "+", "!", and "!!" prefixes to ExecStart= and other
+ commands.
+
+ * $DBUS_SESSION_BUS_ADDRESS environment variable is not set by
+ pam_systemd anymore.
+
+ * The naming scheme for network devices was changed to always rename
+ devices, even if they were already renamed by userspace. The "kernel"
+ policy was changed to only apply as a fallback, if no other naming
+ policy took effect.
+
+ * The requirements to build systemd is bumped to meson-0.46 and
+ python-3.5.
+
Contributions from: afg, Alan Jenkins, Aleksei Timofeyev, Alexander
Filippov, Alexander Kurtz, Alexey Bogdanenko, Andreas Henriksson,
Andrew Jorgensen, Anita Zhang, apnix-uk, Arkan49, Arseny Maslennikov,
@@ -866,6 +987,8 @@ CHANGES WITH 239:
allows ordering services before the service that executes the actual
update process in a generic way.
+ * Systemd now emits warnings whenever .include syntax is used.
+
Contributions from: Adam Duskett, Alan Jenkins, Alessandro Casale,
Alexander Kurtz, Alex Gartrell, Anssi Hannula, Arnaud Rebillout, Brian
J. Murrell, Bruno Vernay, Chris Lamb, Chris Lesiak, Christian Brauner,
@@ -992,7 +1115,7 @@ CHANGES WITH 238:
instance to migrate processes if it itself gets the request to
migrate processes and the kernel refuses this due to access
restrictions. Thanks to this "systemd-run --scope --user …" works
- again in pure cgroups v2 environments when invoked from the user
+ again in pure cgroup v2 environments when invoked from the user
session scope.
* A new TemporaryFileSystem= setting can be used to mask out part of
@@ -2708,7 +2831,7 @@ CHANGES WITH 231:
desired options.
* systemd now supports the "memory" cgroup controller also on
- cgroupsv2.
+ cgroup v2.
* The systemd-cgtop tool now optionally takes a control group path as
command line argument. If specified, the control group list shown is
@@ -6235,6 +6358,9 @@ CHANGES WITH 210:
IFUNC. Please make sure to use --enable-compat-libs only
during a transitional period!
+ * The .include syntax has been deprecated and is not documented
+ anymore. Drop-in files in .d directories should be used instead.
+
Contributions from: Andreas Fuchs, Armin K., Colin Walters,
Daniel Mack, Dave Reisner, David Herrmann, Djalal Harouni,
Holger Schurig, Jason A. Donenfeld, Jason St. John, Jasper
diff --git a/README b/README
index 4439be11f0..419f0adb73 100644
--- a/README
+++ b/README
@@ -163,14 +163,16 @@ REQUIREMENTS:
docbook-xsl (optional, required for documentation)
xsltproc (optional, required for documentation)
python-lxml (optional, required to build the indices)
- python >= 3.5, meson >= 0.46, ninja
+ python >= 3.5
+ meson >= 0.46 (>= 0.49 is required to build position-independent executables)
+ ninja
gcc, awk, sed, grep, m4, and similar tools
During runtime, you need the following additional
dependencies:
util-linux >= v2.27.1 required
- dbus >= 1.9.14 (strictly speaking optional, but recommended)
+ dbus >= 1.4.0 (strictly speaking optional, but recommended)
NOTE: If using dbus < 1.9.18, you should override the default
policy directory (--with-dbuspolicydir=/etc/dbus-1/system.d).
dracut (optional)
diff --git a/README.md b/README.md
index 72484f620c..31d530733a 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,6 @@
<a href="https://in.waw.pl/systemd-github-state/systemd-systemd-issues.svg"><img align="right" src="https://in.waw.pl/systemd-github-state/systemd-systemd-issues-small.svg" alt="Count of open issues over time"></a>
<a href="https://in.waw.pl/systemd-github-state/systemd-systemd-pull-requests.svg"><img align="right" src="https://in.waw.pl/systemd-github-state/systemd-systemd-pull-requests-small.svg" alt="Count of open pull requests over time"></a>
[![Semaphore CI Build Status](https://semaphoreci.com/api/v1/projects/28a5a3ca-3c56-4078-8b5e-7ed6ef912e14/443470/shields_badge.svg)](https://semaphoreci.com/systemd/systemd)<br/>
-[![Coverity Scan Status](https://scan.coverity.com/projects/350/badge.svg)](https://scan.coverity.com/projects/350)<br/>
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/1369/badge)](https://bestpractices.coreinfrastructure.org/projects/1369)<br/>
[![Travis CI Build Status](https://travis-ci.org/systemd/systemd.svg?branch=master)](https://travis-ci.org/systemd/systemd)<br/>
[![Language Grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/systemd/systemd.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/systemd/systemd/context:cpp)<br/>
diff --git a/TODO b/TODO
index 24ec98416a..462db57a3a 100644
--- a/TODO
+++ b/TODO
@@ -58,7 +58,7 @@ Features:
* when a socket unit is spawned with an AF_UNIX path in /var/run, complain and
patch it to use /run instead
-* set memory.oom.group in cgroupsv2 for all leaf cgroups (kernel v4.19+)
+* set memory.oom.group in cgroup v2 for all leaf cgroups (kernel v4.19+)
* add a new syscall group "@esoteric" for more esoteric stuff such as bpf() and
usefaultd() and make systemd-analyze check for it.
@@ -1114,3 +1114,5 @@ Regularly:
* use secure_getenv() instead of getenv() where appropriate
* link up selected blog stories from man pages and unit files Documentation= fields
+String is not UTF-8 clean, ignoring assignment
+ timedatex.service: Consumed 26ms CPU time.
diff --git a/docs/AUTOMATIC_BOOT_ASSESSMENT.md b/docs/AUTOMATIC_BOOT_ASSESSMENT.md
index 83acdab446..6f7182a4b3 100644
--- a/docs/AUTOMATIC_BOOT_ASSESSMENT.md
+++ b/docs/AUTOMATIC_BOOT_ASSESSMENT.md
@@ -1,3 +1,7 @@
+---
+title: Automatic Boot Assessment
+---
+
# Automatic Boot Assessment
systemd provides support for automatically reverting back to the previous
diff --git a/docs/BLOCK_DEVICE_LOCKING.md b/docs/BLOCK_DEVICE_LOCKING.md
index ceb060c0c9..58178ad2f7 100644
--- a/docs/BLOCK_DEVICE_LOCKING.md
+++ b/docs/BLOCK_DEVICE_LOCKING.md
@@ -1,3 +1,7 @@
+---
+title: Locking Block Device Access
+---
+
# Locking Block Device Access
*TL;DR: Use BSD file locks
diff --git a/docs/BOOT_LOADER_INTERFACE.md b/docs/BOOT_LOADER_INTERFACE.md
index a0c7f39970..50488ee97a 100644
--- a/docs/BOOT_LOADER_INTERFACE.md
+++ b/docs/BOOT_LOADER_INTERFACE.md
@@ -1,3 +1,7 @@
+---
+title: The Boot Loader Interface
+---
+
# The Boot Loader Interface
systemd can interface with the boot loader to receive performance data and
diff --git a/docs/BOOT_LOADER_SPECIFICATION.md b/docs/BOOT_LOADER_SPECIFICATION.md
index 3724f78a80..3612ff1d33 100644
--- a/docs/BOOT_LOADER_SPECIFICATION.md
+++ b/docs/BOOT_LOADER_SPECIFICATION.md
@@ -1,3 +1,7 @@
+---
+title: The Boot Loader Specification
+---
+
# The Boot Loader Specification
_TL;DR: Currently there's little cooperation between multiple distributions in dual-boot (or triple, ... multi-boot) setups, and we'd like to improve this situation by getting everybody to commit to a single boot configuration format that is based on drop-in files, and thus is robust, simple, works without rewriting configuration files and is free of namespace clashes._
diff --git a/docs/CGROUP_DELEGATION.md b/docs/CGROUP_DELEGATION.md
index ed23a0a142..8bf1b698fc 100644
--- a/docs/CGROUP_DELEGATION.md
+++ b/docs/CGROUP_DELEGATION.md
@@ -1,3 +1,7 @@
+---
+title: Control Group APIs and Delegation
+---
+
# Control Group APIs and Delegation
*Intended audience: hackers working on userspace subsystems that require direct
@@ -17,7 +21,7 @@ container managers.
Before you read on, please make sure you read the low-level [kernel
documentation about
-cgroupsv2](https://www.kernel.org/doc/Documentation/cgroup-v2.txt). This
+cgroup v2](https://www.kernel.org/doc/Documentation/cgroup-v2.txt). This
documentation then adds in the higher-level view from systemd.
This document augments the existing documentation we already have:
@@ -34,8 +38,8 @@ wiki documentation into this very document, too.)
## Two Key Design Rules
Much of the philosophy behind these concepts is based on a couple of basic
-design ideas of cgroupsv2 (which we however try to adapt as far as we can to
-cgroupsv1 too). Specifically two cgroupsv2 rules are the most relevant:
+design ideas of cgroup v2 (which we however try to adapt as far as we can to
+cgroup v1 too). Specifically two cgroup v2 rules are the most relevant:
1. The **no-processes-in-inner-nodes** rule: this means that it's not permitted
to have processes directly attached to a cgroup that also has child cgroups and
@@ -58,45 +62,45 @@ your container manager creates and manages cgroups in the system's root cgroup
you violate rule #2, as the root cgroup is managed by systemd and hence off
limits to everybody else.
-Note that rule #1 is generally enforced by the kernel if cgroupsv2 is used: as
+Note that rule #1 is generally enforced by the kernel if cgroup v2 is used: as
soon as you add a process to a cgroup it is ensured the rule is not
-violated. On cgroupsv1 this rule didn't exist, and hence isn't enforced, even
+violated. On cgroup v1 this rule didn't exist, and hence isn't enforced, even
though it's a good thing to follow it then too. Rule #2 is not enforced on
-either cgroupsv1 nor cgroupsv2 (this is UNIX after all, in the general case
+either cgroup v1 nor cgroup v2 (this is UNIX after all, in the general case
root can do anything, modulo SELinux and friends), but if you ignore it you'll
be in constant pain as various pieces of software will fight over cgroup
ownership.
-Note that cgroupsv1 is currently the most deployed implementation, even though
+Note that cgroup v1 is currently the most deployed implementation, even though
it's semantically broken in many ways, and in many cases doesn't actually do
-what people think it does. cgroupsv2 is where things are going, and most new
-kernel features in this area are only added to cgroupsv2, and not cgroupsv1
-anymore. For example cgroupsv2 provides proper cgroup-empty notifications, has
+what people think it does. cgroup v2 is where things are going, and most new
+kernel features in this area are only added to cgroup v2, and not cgroup v1
+anymore. For example cgroup v2 provides proper cgroup-empty notifications, has
support for all kinds of per-cgroup BPF magic, supports secure delegation of
cgroup trees to less privileged processes and so on, which all are not
-available on cgroupsv1.
+available on cgroup v1.
## Three Different Tree Setups 🌳
systemd supports three different modes how cgroups are set up. Specifically:
-1. **Unified** — this is the simplest mode, and exposes a pure cgroupsv2
+1. **Unified** — this is the simplest mode, and exposes a pure cgroup v2
logic. In this mode `/sys/fs/cgroup` is the only mounted cgroup API file system
and all available controllers are exclusively exposed through it.
-2. **Legacy** — this is the traditional cgroupsv1 mode. In this mode the
+2. **Legacy** — this is the traditional cgroup v1 mode. In this mode the
various controllers each get their own cgroup file system mounted to
`/sys/fs/cgroup/<controller>/`. On top of that systemd manages its own cgroup
hierarchy for managing purposes as `/sys/fs/cgroup/systemd/`.
3. **Hybrid** — this is a hybrid between the unified and legacy mode. It's set
up mostly like legacy, except that there's also an additional hierarchy
-`/sys/fs/cgroup/unified/` that contains the cgroupsv2 hierarchy. (Note that in
+`/sys/fs/cgroup/unified/` that contains the cgroup v2 hierarchy. (Note that in
this mode the unified hierarchy won't have controllers attached, the
controllers are all mounted as separate hierarchies as in legacy mode,
-i.e. `/sys/fs/cgroup/unified/` is purely and exclusively about core cgroupsv2
+i.e. `/sys/fs/cgroup/unified/` is purely and exclusively about core cgroup v2
functionality and not about resource management.) In this mode compatibility
-with cgroupsv1 is retained while some cgroupsv2 features are available
+with cgroup v1 is retained while some cgroup v2 features are available
too. This mode is a stopgap. Don't bother with this too much unless you have
too much free time.
@@ -116,7 +120,7 @@ to talk of one specific cgroup and actually mean the same cgroup in all
available controller hierarchies. E.g. if we talk about the cgroup `/foo/bar/`
then we actually mean `/sys/fs/cgroup/cpu/foo/bar/` as well as
`/sys/fs/cgroup/memory/foo/bar/`, `/sys/fs/cgroup/pids/foo/bar/`, and so on.
-Note that in cgroupsv2 the controller hierarchies aren't orthogonal, hence
+Note that in cgroup v2 the controller hierarchies aren't orthogonal, hence
thinking about them as orthogonal won't help you in the long run anyway.
If you wonder how to detect which of these three modes is currently used, use
@@ -168,7 +172,7 @@ cgroup `/foo.slice/foo-bar.slice/foo-bar-baz.slice/quux.service/`.
By default systemd sets up four slice units:
1. `-.slice` is the root slice. i.e. the parent of everything else. On the host
- system it maps directly to the top-level directory of cgroupsv2.
+ system it maps directly to the top-level directory of cgroup v2.
2. `system.slice` is where system services are by default placed, unless
configured otherwise.
@@ -187,8 +191,8 @@ above are just the defaults.
Container managers and suchlike often want to control cgroups directly using
the raw kernel APIs. That's entirely fine and supported, as long as proper
-*delegation* is followed. Delegation is a concept we inherited from cgroupsv2,
-but we expose it on cgroupsv1 too. Delegation means that some parts of the
+*delegation* is followed. Delegation is a concept we inherited from cgroup v2,
+but we expose it on cgroup v1 too. Delegation means that some parts of the
cgroup tree may be managed by different managers than others. As long as it is
clear which manager manages which part of the tree each one can do within its
sub-graph of the tree whatever it wants.
@@ -217,7 +221,7 @@ guarantees:
hierarchy (in unified and hybrid mode) as well as on systemd's own private
hierarchy (in legacy and hybrid mode). It won't pass ownership of the legacy
controller hierarchies. Delegation to less privileges processes is not safe
- in cgroupsv1 (as a limitation of the kernel), hence systemd won't facilitate
+ in cgroup v1 (as a limitation of the kernel), hence systemd won't facilitate
access to it.
3. Any BPF IP filter programs systemd installs will be installed with
@@ -322,19 +326,19 @@ to work on that, and widen your horizon a bit. You are welcome.
systemd supports a number of controllers (but not all). Specifically, supported
are:
-* on cgroupsv1: `cpu`, `cpuacct`, `blkio`, `memory`, `devices`, `pids`
-* on cgroupsv2: `cpu`, `io`, `memory`, `pids`
+* on cgroup v1: `cpu`, `cpuacct`, `blkio`, `memory`, `devices`, `pids`
+* on cgroup v2: `cpu`, `io`, `memory`, `pids`
-It is our intention to natively support all cgroupsv2 controllers as they are
-added to the kernel. However, regarding cgroupsv1: at this point we will not
+It is our intention to natively support all cgroup v2 controllers as they are
+added to the kernel. However, regarding cgroup v1: at this point we will not
add support for any other controllers anymore. This means systemd currently
-does not and will never manage the following controllers on cgroupsv1:
+does not and will never manage the following controllers on cgroup v1:
`freezer`, `cpuset`, `net_cls`, `perf_event`, `net_prio`, `hugetlb`. Why not?
Depending on the case, either their API semantics or implementations aren't
-really usable, or it's very clear they have no future on cgroupsv2, and we
+really usable, or it's very clear they have no future on cgroup v2, and we
won't add new code for stuff that clearly has no future.
-Effectively this means that all those mentioned cgroupsv1 controllers are up
+Effectively this means that all those mentioned cgroup v1 controllers are up
for grabs: systemd won't manage them, and hence won't delegate them to your
code (however, systemd will still mount their hierarchies, simply because it
mounts all controller hierarchies it finds available in the kernel). If you
@@ -355,9 +359,9 @@ cgroups in them — from previous runs, and be extra careful with them as they
might still carry settings that might not be valid anymore.
Note a particular asymmetry here: if your systemd version doesn't support a
-specific controller on cgroupsv1 you can still make use of it for delegation,
+specific controller on cgroup v1 you can still make use of it for delegation,
by directly fiddling with its hierarchy and replicating the cgroup tree there
-as necessary (as suggested above). However, on cgroupsv2 this is different:
+as necessary (as suggested above). However, on cgroup v2 this is different:
separately mounted hierarchies are not available, and delegation has always to
happen through systemd itself. This means: when you update your kernel and it
adds a new, so far unseen controller, and you want to use it for delegation,
@@ -417,7 +421,7 @@ unified you (of course, I guess) need to provide only `/sys/fs/cgroup/` itself.
arbitrary naming, you might need to escape some of the names (for example,
you really don't want to create a cgroup named `tasks`, just because the
user created a container by that name, because `tasks` after all is a magic
- attribute in cgroupsv1, and your `mkdir()` will hence fail with `EEXIST`. In
+ attribute in cgroup v1, and your `mkdir()` will hence fail with `EEXIST`. In
systemd we do escaping by prefixing names that might collide with a kernel
attribute name with an underscore. You might want to do the same, but this
is really up to you how you do it. Just do it, and be careful.
@@ -462,9 +466,9 @@ unified you (of course, I guess) need to provide only `/sys/fs/cgroup/` itself.
to get the cgroup for a unit. The method `GetUnitByControlGroup()` may be
used to get the unit for a cgroup.)
-6. ⚡ Think twice before delegating cgroupsv1 controllers to less privileged
+6. ⚡ Think twice before delegating cgroup v1 controllers to less privileged
containers. It's not safe, you basically allow your containers to freeze the
- system with that and worse. Delegation is a strongpoint of cgroupsv2 though,
+ system with that and worse. Delegation is a strongpoint of cgroup v2 though,
and there it's safe to treat delegation boundaries as privilege boundaries.
And that's it for now. If you have further questions, refer to the systemd
diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md
index b3b46cd6d8..da290ecda3 100644
--- a/docs/CODE_OF_CONDUCT.md
+++ b/docs/CODE_OF_CONDUCT.md
@@ -1,3 +1,7 @@
+---
+title: The systemd Community Conduct Guidelines
+---
+
# The systemd Community Conduct Guidelines
This document provides community guidelines for a safe, respectful, productive, and collaborative place for any person who is willing to contribute to systemd. It applies to all “collaborative spaces”, which is defined as community communications channels (such as mailing lists, submitted patches, commit comments, etc.).
diff --git a/docs/CODE_QUALITY.md b/docs/CODE_QUALITY.md
index be0e13f653..18363f0f1b 100644
--- a/docs/CODE_QUALITY.md
+++ b/docs/CODE_QUALITY.md
@@ -1,3 +1,7 @@
+---
+title: Code Quality Tools
+---
+
# Code Quality Tools
The systemd project has a number of code quality tools set up in the source
diff --git a/docs/CODING_STYLE.md b/docs/CODING_STYLE.md
index a91e119c4a..7bad3f5d2e 100644
--- a/docs/CODING_STYLE.md
+++ b/docs/CODING_STYLE.md
@@ -1,3 +1,7 @@
+---
+title: Coding Style
+---
+
# Coding Style
- 8ch indent, no tabs, except for files in `man/` which are 2ch indent,
@@ -126,8 +130,8 @@
}
```
-- Unless you allocate an array, `double` is always the better choice
- than `float`. Processors speak `double` natively anyway, so this is
+- Unless you allocate an array, `double` is always a better choice
+ than `float`. Processors speak `double` natively anyway, so there is
no speed benefit, and on calls like `printf()` `float`s get promoted
to `double`s anyway, so there is no point.
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
index 6cfdd6f179..f40d9a010a 100644
--- a/docs/CONTRIBUTING.md
+++ b/docs/CONTRIBUTING.md
@@ -1,3 +1,7 @@
+---
+title: Contributing
+---
+
# Contributing
We welcome contributions from everyone. However, please follow the following guidelines when posting a GitHub Pull Request or filing a GitHub Issue on the systemd project:
diff --git a/docs/DISTRO_PORTING.md b/docs/DISTRO_PORTING.md
index bcb093fbdc..f8b98bcbae 100644
--- a/docs/DISTRO_PORTING.md
+++ b/docs/DISTRO_PORTING.md
@@ -1,3 +1,7 @@
+---
+title: Porting systemd To New Distributions
+---
+
# Porting systemd To New Distributions
## HOWTO
diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md
index 619a57eb3f..99b5b03b68 100644
--- a/docs/ENVIRONMENT.md
+++ b/docs/ENVIRONMENT.md
@@ -1,3 +1,7 @@
+---
+title: Known Environment Variables
+---
+
# Known Environment Variables
A number of systemd components take additional runtime parameters via
diff --git a/docs/HACKING.md b/docs/HACKING.md
index 17136060ce..b14be72128 100644
--- a/docs/HACKING.md
+++ b/docs/HACKING.md
@@ -1,3 +1,7 @@
+---
+title: Hacking on systemd
+---
+
# Hacking on systemd
We welcome all contributions to systemd. If you notice a bug or a missing
diff --git a/docs/PORTABLE_SERVICES.md b/docs/PORTABLE_SERVICES.md
index 4b37a19455..5b6c085af0 100644
--- a/docs/PORTABLE_SERVICES.md
+++ b/docs/PORTABLE_SERVICES.md
@@ -1,3 +1,7 @@
+---
+title: Portable Services Introduction
+---
+
# Portable Services Introduction
This systemd version includes a preview of the "portable service"
@@ -85,8 +89,9 @@ If you have portable service image, maybe in a raw disk image called
This command does the following:
-1. It dissects the image, checks and validates the `/etc/os-release` data of
- the image, and looks for all included unit files.
+1. It dissects the image, checks and validates the `/etc/os-release`
+ (or `/usr/lib/os-release`, see below) data of the image, and looks for
+ all included unit files.
2. It copies out all unit files with a suffix of `.service`, `.socket`,
`.target`, `.timer` and `.path`. whose name begins with the image's name
@@ -166,8 +171,11 @@ requirements are made for an image that can be attached/detached with
image. (The implementation will check a couple of other paths too, but it's
recommended to use these two paths.)
-4. The image must contain an os-release file, either in /etc/os-release or
- /usr/lib/os-release. The file should follow the standard format.
+4. The image must contain an os-release file, either in `/etc/os-release` or
+ `/usr/lib/os-release`. The file should follow the standard format.
+
+5. The image must contain the files `/etc/resolv.conf` and `/etc/machine-id`
+ (empty files are ok), they will be bind mounted from the host at runtime.
Note that generally images created by tools such as `debootstrap`, `dnf
--installroot=` or `mkosi` qualify for all of the above in one way or
diff --git a/docs/PREDICTABLE_INTERFACE_NAMES.md b/docs/PREDICTABLE_INTERFACE_NAMES.md
index 73d60477cd..b29016f93d 100644
--- a/docs/PREDICTABLE_INTERFACE_NAMES.md
+++ b/docs/PREDICTABLE_INTERFACE_NAMES.md
@@ -1,3 +1,7 @@
+---
+title: Predictable Network Interface Names
+---
+
# Predictable Network Interface Names
Starting with v197 systemd/udev will automatically assign predictable, stable network interface names for all local Ethernet, WLAN and WWAN interfaces. This is a departure from the traditional interface naming scheme ("eth0", "eth1", "wlan0", ...), but should fix real problems.
diff --git a/docs/RELEASE.md b/docs/RELEASE.md
index 11794aae63..4bf5ab8dc1 100644
--- a/docs/RELEASE.md
+++ b/docs/RELEASE.md
@@ -1,3 +1,7 @@
+---
+title: Steps to a Successful Release
+---
+
# Steps to a Successful Release
1. Add all items to NEWS
diff --git a/docs/TRANSIENT-SETTINGS.md b/docs/TRANSIENT-SETTINGS.md
index 89a185b527..0ac77f0497 100644
--- a/docs/TRANSIENT-SETTINGS.md
+++ b/docs/TRANSIENT-SETTINGS.md
@@ -1,3 +1,7 @@
+---
+title: What settings are currently available for transient units?
+---
+
# What settings are currently available for transient units?
Our intention is to make all settings that are available as unit file settings
diff --git a/docs/TRANSLATORS.md b/docs/TRANSLATORS.md
index 9c45453083..d155c1c875 100644
--- a/docs/TRANSLATORS.md
+++ b/docs/TRANSLATORS.md
@@ -1,3 +1,7 @@
+---
+title: Notes for Translators
+---
+
# Notes for Translators
systemd depends on the `gettext` package for multilingual support.
diff --git a/docs/UIDS-GIDS.md b/docs/UIDS-GIDS.md
index c59fefc5cd..25345a918f 100644
--- a/docs/UIDS-GIDS.md
+++ b/docs/UIDS-GIDS.md
@@ -1,3 +1,7 @@
+---
+title: Users, Groups, UIDs and GIDs on `systemd` Systems
+---
+
# Users, Groups, UIDs and GIDs on `systemd` Systems
Here's a summary of the requirements `systemd` (and Linux) make on UID/GID
diff --git a/docs/index.md b/docs/index.md
index 2140253674..ffb30b9634 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,20 +1,11 @@
+---
+title: systemd Documentation
+---
+
# systemd Documentation
-* [Automatic Boot Assessment](https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT)
-* [Locking Block Device Access](https://systemd.io/BLOCK_DEVICE_LOCKING)
-* [The Boot Loader Interface](https://systemd.io/BOOT_LOADER_INTERFACE)
-* [The Boot Loader Specification](https://systemd.io/BOOT_LOADER_SPECIFICATION)
-* [Control Group APIs and Delegation](https://systemd.io/CGROUP_DELEGATION)
-* [The systemd Community Conduct Guidelines](https://github.com/systemd/systemd/blob/master/docs/CODE_OF_CONDUCT.md)
-* [Code Quality Tools](https://systemd.io/CODE_QUALITY)
-* [Coding Style](https://systemd.io/CODING_STYLE)
-* [Contributing](https://github.com/systemd/systemd/blob/master/docs/CONTRIBUTING.md)
-* [Porting systemd To New Distributions](https://systemd.io/DISTRO_PORTING)
-* [Predictable Network Interface Names](https://systemd.io/PREDICTABLE_INTERFACE_NAMES)
-* [Known Environment Variables](https://systemd.io/ENVIRONMENT)
-* [Hacking on systemd](https://systemd.io/HACKING)
-* [Portable Services Introduction](https://systemd.io/PORTABLE_SERVICES)
-* [Steps to a Successful Release](https://systemd.io/RELEASE)
-* [What settings are currently available for transient units?](https://systemd.io/TRANSIENT-SETTINGS)
-* [Notes for Translators](https://systemd.io/TRANSLATORS)
-* [Users, Groups, UIDs and GIDs on `systemd` Systems](https://systemd.io/UIDS-GIDS)
+{% for p in site.pages %}
+ {% if p.url != page.url and p.title %}
+* [{{ p.title }}]({{ p.url | relative_url }})
+ {% endif %}
+{% endfor %}
diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
index c1f3e30e90..d65cd6dc40 100644
--- a/hwdb/20-OUI.hwdb
+++ b/hwdb/20-OUI.hwdb
@@ -2364,7 +2364,7 @@ OUI:000311*
ID_OUI_FROM_DATABASE=Micro Technology Co., Ltd.
OUI:000312*
- ID_OUI_FROM_DATABASE=TR-Systemtechnik GmbH
+ ID_OUI_FROM_DATABASE=TRsystems GmbH
OUI:000313*
ID_OUI_FROM_DATABASE=Access Media SPA
@@ -5754,7 +5754,7 @@ OUI:00077B*
ID_OUI_FROM_DATABASE=Millimetrix Broadband Networks
OUI:00077C*
- ID_OUI_FROM_DATABASE=Westermo Teleindustri AB
+ ID_OUI_FROM_DATABASE=Westermo Network Technologies AB
OUI:00077D*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -13518,7 +13518,7 @@ OUI:0011B3*
ID_OUI_FROM_DATABASE=YOSHIMIYA CO.,LTD.
OUI:0011B4*
- ID_OUI_FROM_DATABASE=Westermo Teleindustri AB
+ ID_OUI_FROM_DATABASE=Westermo Network Technologies AB
OUI:0011B5*
ID_OUI_FROM_DATABASE=Shenzhen Powercom Co.,Ltd
@@ -18516,7 +18516,7 @@ OUI:001835*
ID_OUI_FROM_DATABASE=Thoratec / ITC
OUI:001836*
- ID_OUI_FROM_DATABASE=Reliance Electric Limited
+ ID_OUI_FROM_DATABASE=REJ Co.,Ltd
OUI:001837*
ID_OUI_FROM_DATABASE=Universal ABIT Co., Ltd.
@@ -19551,7 +19551,7 @@ OUI:00198E*
ID_OUI_FROM_DATABASE=Oticon A/S
OUI:00198F*
- ID_OUI_FROM_DATABASE=Alcatel Bell N.V.
+ ID_OUI_FROM_DATABASE=Nokia Bell N.V.
OUI:001990*
ID_OUI_FROM_DATABASE=ELM DATA Co., Ltd.
@@ -26415,7 +26415,7 @@ OUI:0021B6*
ID_OUI_FROM_DATABASE=Triacta Power Technologies Inc.
OUI:0021B7*
- ID_OUI_FROM_DATABASE=Lexmark International Inc.
+ ID_OUI_FROM_DATABASE=LEXMARK INTERNATIONAL, INC.
OUI:0021B8*
ID_OUI_FROM_DATABASE=Inphi Corporation
@@ -27045,7 +27045,7 @@ OUI:002288*
ID_OUI_FROM_DATABASE=Sagrad, Inc.
OUI:002289*
- ID_OUI_FROM_DATABASE=Optosecurity Inc.
+ ID_OUI_FROM_DATABASE=Vandelrande APC inc.
OUI:00228A*
ID_OUI_FROM_DATABASE=Teratronik elektronische systeme gmbh
@@ -27159,7 +27159,7 @@ OUI:0022AE*
ID_OUI_FROM_DATABASE=Mattel Inc.
OUI:0022AF*
- ID_OUI_FROM_DATABASE=Safety Vision
+ ID_OUI_FROM_DATABASE=Safety Vision, LLC
OUI:0022B0*
ID_OUI_FROM_DATABASE=D-Link Corporation
@@ -36159,7 +36159,7 @@ OUI:00A0AF*
ID_OUI_FROM_DATABASE=WMS INDUSTRIES
OUI:00A0B0*
- ID_OUI_FROM_DATABASE=I-O DATA DEVICE, INC.
+ ID_OUI_FROM_DATABASE=I-O DATA DEVICE,INC.
OUI:00A0B1*
ID_OUI_FROM_DATABASE=FIRST VIRTUAL CORPORATION
@@ -39920,6 +39920,9 @@ OUI:04E536*
OUI:04E548*
ID_OUI_FROM_DATABASE=Cohda Wireless Pty Ltd
+OUI:04E56E*
+ ID_OUI_FROM_DATABASE=THUB Co., ltd.
+
OUI:04E598*
ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
@@ -40781,6 +40784,9 @@ OUI:08A12B*
OUI:08A5C8*
ID_OUI_FROM_DATABASE=Sunnovo International Limited
+OUI:08A6BC*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
OUI:08A8A1*
ID_OUI_FROM_DATABASE=Cyclotronics Power Concepts, Inc
@@ -41633,6 +41639,9 @@ OUI:0CE82F*
OUI:0CE936*
ID_OUI_FROM_DATABASE=ELIMOS srl
+OUI:0CE99A*
+ ID_OUI_FROM_DATABASE=ATLS ALTEC
+
OUI:0CEAC9*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
@@ -41978,6 +41987,9 @@ OUI:103B59*
OUI:103D0A*
ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+OUI:103D3E*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
OUI:103DEA*
ID_OUI_FROM_DATABASE=HFC Technology (Beijing) Ltd. Co.
@@ -42182,6 +42194,9 @@ OUI:108EE0*
OUI:109266*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:109397*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:1093E9*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -42362,6 +42377,9 @@ OUI:10D542*
OUI:10DA43*
ID_OUI_FROM_DATABASE=NETGEAR
+OUI:10DC4A*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:10DDB1*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -42644,6 +42662,9 @@ OUI:14373B*
OUI:143AEA*
ID_OUI_FROM_DATABASE=Dynapower Company LLC
+OUI:143CC3*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:143DF2*
ID_OUI_FROM_DATABASE=Beijing Shidai Hongyuan Network Communication Co.,Ltd
@@ -42743,6 +42764,9 @@ OUI:144FD7D*
OUI:144FD7E*
ID_OUI_FROM_DATABASE=Edan Instruments, Inc.
+OUI:145290*
+ ID_OUI_FROM_DATABASE=KNS Group LLC (YADRO Company)
+
OUI:145412*
ID_OUI_FROM_DATABASE=Entis Co., Ltd.
@@ -42947,6 +42971,9 @@ OUI:14B31F*
OUI:14B370*
ID_OUI_FROM_DATABASE=Gigaset Digital Technology (Shenzhen) Co., Ltd.
+OUI:14B457*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
OUI:14B484*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -43103,6 +43130,9 @@ OUI:1801E3*
OUI:1801F1*
ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+OUI:18022D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:180373*
ID_OUI_FROM_DATABASE=Dell Inc.
@@ -43187,6 +43217,9 @@ OUI:18204C*
OUI:1820A6*
ID_OUI_FROM_DATABASE=Sage Co., Ltd.
+OUI:1820D5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:182195*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -43253,6 +43286,9 @@ OUI:183919*
OUI:18396E*
ID_OUI_FROM_DATABASE=SUNSEA TELECOMMUNICATIONS CO.,LTD.
+OUI:18399C*
+ ID_OUI_FROM_DATABASE=Skorpios Technologies
+
OUI:183A2D*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -43262,6 +43298,9 @@ OUI:183A48*
OUI:183BD2*
ID_OUI_FROM_DATABASE=BYD Precision Manufacture Company Ltd.
+OUI:183D5E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:183DA2*
ID_OUI_FROM_DATABASE=Intel Corporate
@@ -43286,6 +43325,9 @@ OUI:1844E6*
OUI:184617*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:184644*
+ ID_OUI_FROM_DATABASE=Home Control Singapore Pte Ltd
+
OUI:1848D8*
ID_OUI_FROM_DATABASE=Fastback Networks
@@ -43700,6 +43742,9 @@ OUI:18D717*
OUI:18D949*
ID_OUI_FROM_DATABASE=Qvis Labs, LLC
+OUI:18D9EF*
+ ID_OUI_FROM_DATABASE=Shuttle Inc.
+
OUI:18DBF2*
ID_OUI_FROM_DATABASE=Dell Inc.
@@ -43751,6 +43796,9 @@ OUI:18F0E4*
OUI:18F145*
ID_OUI_FROM_DATABASE=NetComm Wireless Limited
+OUI:18F18E*
+ ID_OUI_FROM_DATABASE=ChipER Technology co. ltd
+
OUI:18F1D8*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -43928,6 +43976,9 @@ OUI:1C24EB*
OUI:1C25E1*
ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
+OUI:1C2704*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:1C27DD*
ID_OUI_FROM_DATABASE=Datang Gohighsec(zhejiang)Information Technology Co.,Ltd.
@@ -44087,6 +44138,9 @@ OUI:1C66AA*
OUI:1C6758*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:1C697A*
+ ID_OUI_FROM_DATABASE=EliteGroup Computer Systems Co., LTD
+
OUI:1C69A5*
ID_OUI_FROM_DATABASE=BlackBerry RTS
@@ -44153,6 +44207,9 @@ OUI:1C7E51*
OUI:1C7EE5*
ID_OUI_FROM_DATABASE=D-Link International
+OUI:1C7F2C*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:1C8341*
ID_OUI_FROM_DATABASE=Hefei Bitland Information Technology Co.Ltd
@@ -44489,6 +44546,9 @@ OUI:1CB17F*
OUI:1CB243*
ID_OUI_FROM_DATABASE=TDC A/S
+OUI:1CB3E9*
+ ID_OUI_FROM_DATABASE=Shenzhen Zhongke United Communication Technology
+
OUI:1CB72C*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
@@ -44510,6 +44570,9 @@ OUI:1CBD0E*
OUI:1CBDB9*
ID_OUI_FROM_DATABASE=D-Link International
+OUI:1CBFCE*
+ ID_OUI_FROM_DATABASE=Shenzhen Century Xinyang Technology Co., Ltd
+
OUI:1CC035*
ID_OUI_FROM_DATABASE=PLANEX COMMUNICATIONS INC.
@@ -44645,6 +44708,9 @@ OUI:1CDA27*
OUI:1CDDEA*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+OUI:1CDE57*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:1CDEA7*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -44963,6 +45029,9 @@ OUI:205721*
OUI:2057AF*
ID_OUI_FROM_DATABASE=Shenzhen FH-NET OPTOELECTRONICS CO.,LTD
+OUI:205869*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
OUI:2059A0*
ID_OUI_FROM_DATABASE=Paragon Technologies Inc.
@@ -44993,6 +45062,9 @@ OUI:20635F*
OUI:206432*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
+OUI:20658E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:20677C*
ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
@@ -45095,6 +45167,9 @@ OUI:2091D9*
OUI:20934D*
ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD
+OUI:20968A*
+ ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co., Ltd.
+
OUI:209AE9*
ID_OUI_FROM_DATABASE=Volacomm Co., Ltd
@@ -45242,6 +45317,9 @@ OUI:20D80B*
OUI:20D906*
ID_OUI_FROM_DATABASE=Iota, Inc.
+OUI:20DA22*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:20DBAB*
ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd.
@@ -45449,6 +45527,9 @@ OUI:242E90*
OUI:242FFA*
ID_OUI_FROM_DATABASE=Toshiba Global Commerce Solutions
+OUI:243154*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:243184*
ID_OUI_FROM_DATABASE=SHARP Corporation
@@ -45614,6 +45695,9 @@ OUI:246C8A*
OUI:246E96*
ID_OUI_FROM_DATABASE=Dell Inc.
+OUI:246F28*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
OUI:247189*
ID_OUI_FROM_DATABASE=Texas Instruments
@@ -45632,6 +45716,9 @@ OUI:247703*
OUI:24792A*
ID_OUI_FROM_DATABASE=Ruckus Wireless
+OUI:2479F3*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
OUI:2479F8*
ID_OUI_FROM_DATABASE=KUPSON spol. s r.o.
@@ -45842,6 +45929,9 @@ OUI:24D921*
OUI:24DA11*
ID_OUI_FROM_DATABASE=NO NDA Inc
+OUI:24DA33*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:24DA9B*
ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
@@ -47144,6 +47234,9 @@ OUI:2C5731*
OUI:2C584F*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:2C58E8*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:2C598A*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
@@ -47912,6 +48005,9 @@ OUI:304EC3*
OUI:304F75*
ID_OUI_FROM_DATABASE=DASAN Network Solutions
+OUI:3050FD*
+ ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
+
OUI:3051F8*
ID_OUI_FROM_DATABASE=BYK-Gardner GmbH
@@ -48032,6 +48128,9 @@ OUI:3087D9*
OUI:308841*
ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+OUI:308944*
+ ID_OUI_FROM_DATABASE=DEVA Broadcast Ltd.
+
OUI:308976*
ID_OUI_FROM_DATABASE=DALIAN LAMBA TECHNOLOGY CO.,LTD
@@ -48209,6 +48308,9 @@ OUI:30E48E*
OUI:30E4DB*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:30EA26*
+ ID_OUI_FROM_DATABASE=Sycada BV
+
OUI:30EB1F*
ID_OUI_FROM_DATABASE=Skylab M&C Technology Co.,Ltd
@@ -48665,6 +48767,9 @@ OUI:346AC2*
OUI:346B46*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+OUI:346B5B*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
OUI:346BD3*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -48690,7 +48795,7 @@ OUI:3475C7*
ID_OUI_FROM_DATABASE=Avaya Inc
OUI:3476C5*
- ID_OUI_FROM_DATABASE=I-O DATA DEVICE, INC.
+ ID_OUI_FROM_DATABASE=I-O DATA DEVICE,INC.
OUI:347877*
ID_OUI_FROM_DATABASE=O-Net Communications (Shenzhen) Limited
@@ -49040,6 +49145,51 @@ OUI:34E0D7*
OUI:34E12D*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:34E1D10*
+ ID_OUI_FROM_DATABASE=Tianjin Sublue Ocean Science & Technology Co., Ltd
+
+OUI:34E1D11*
+ ID_OUI_FROM_DATABASE=SAMA NextGen PTE Limited
+
+OUI:34E1D12*
+ ID_OUI_FROM_DATABASE=Teton Camera LLC
+
+OUI:34E1D13*
+ ID_OUI_FROM_DATABASE=Rinco Ultrasonics AG
+
+OUI:34E1D14*
+ ID_OUI_FROM_DATABASE=ASA Innovation & Technology Ltd.
+
+OUI:34E1D15*
+ ID_OUI_FROM_DATABASE=Doki Technologies Limited
+
+OUI:34E1D16*
+ ID_OUI_FROM_DATABASE=Ningbo Hua Gao Mdt Info Tech Ltd
+
+OUI:34E1D17*
+ ID_OUI_FROM_DATABASE=Genius Pros
+
+OUI:34E1D18*
+ ID_OUI_FROM_DATABASE=Hubitat Inc.
+
+OUI:34E1D19*
+ ID_OUI_FROM_DATABASE=Apart Audio NV
+
+OUI:34E1D1A*
+ ID_OUI_FROM_DATABASE=OrCam Technologies
+
+OUI:34E1D1B*
+ ID_OUI_FROM_DATABASE=APG Cash Drawer, LLC
+
+OUI:34E1D1C*
+ ID_OUI_FROM_DATABASE=CREW by True Rowing, Inc.
+
+OUI:34E1D1D*
+ ID_OUI_FROM_DATABASE=HI-TECH.ORG
+
+OUI:34E1D1E*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
OUI:34E2FD*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -49778,6 +49928,9 @@ OUI:38D135*
OUI:38D269*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:38D2CA*
+ ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
+
OUI:38D40B*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -49862,6 +50015,9 @@ OUI:38F135*
OUI:38F23E*
ID_OUI_FROM_DATABASE=Microsoft Mobile Oy
+OUI:38F32E*
+ ID_OUI_FROM_DATABASE=Skullcandy
+
OUI:38F33F*
ID_OUI_FROM_DATABASE=TATSUNO CORPORATION
@@ -49988,6 +50144,9 @@ OUI:3C096D*
OUI:3C0C48*
ID_OUI_FROM_DATABASE=Servergy, Inc.
+OUI:3C0C7D*
+ ID_OUI_FROM_DATABASE=Tiny Mesh AS
+
OUI:3C0CDB*
ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
@@ -50843,6 +51002,9 @@ OUI:401D59*
OUI:4022ED*
ID_OUI_FROM_DATABASE=Digital Projection Ltd
+OUI:402343*
+ ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
+
OUI:4025C2*
ID_OUI_FROM_DATABASE=Intel Corporate
@@ -51201,7 +51363,7 @@ OUI:40A36B5*
ID_OUI_FROM_DATABASE=National Research Council of Canada
OUI:40A36B6*
- ID_OUI_FROM_DATABASE=Bixi Systems Ltd.
+ ID_OUI_FROM_DATABASE=Securiton AG
OUI:40A36B7*
ID_OUI_FROM_DATABASE=Pella Corporation
@@ -51716,6 +51878,9 @@ OUI:444AB0*
OUI:444B5D*
ID_OUI_FROM_DATABASE=GE Healthcare
+OUI:444B7E*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:444C0C*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -51926,6 +52091,9 @@ OUI:44A42D*
OUI:44A466*
ID_OUI_FROM_DATABASE=GROUPE LDLC
+OUI:44A61E*
+ ID_OUI_FROM_DATABASE=INGRAM MICRO SERVICES
+
OUI:44A689*
ID_OUI_FROM_DATABASE=PROMAX ELECTRONICA SA
@@ -52286,6 +52454,9 @@ OUI:483C0C*
OUI:483D32*
ID_OUI_FROM_DATABASE=Syscor Controls &amp; Automation
+OUI:483FE9*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:48435A*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -52370,6 +52541,9 @@ OUI:485D36*
OUI:485D60*
ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+OUI:485DEB*
+ ID_OUI_FROM_DATABASE=Just Add Power
+
OUI:485F99*
ID_OUI_FROM_DATABASE=Cloud Network Technology (Samoa) Limited
@@ -52493,6 +52667,9 @@ OUI:4886E8*
OUI:48872D*
ID_OUI_FROM_DATABASE=SHEN ZHEN DA XIA LONG QUE TECHNOLOGY CO.,LTD
+OUI:488764*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
OUI:488803*
ID_OUI_FROM_DATABASE=ManTechnology Inc.
@@ -52691,6 +52868,9 @@ OUI:48D845*
OUI:48D855*
ID_OUI_FROM_DATABASE=Telvent
+OUI:48D875*
+ ID_OUI_FROM_DATABASE=China TransInfo Technology Co., Ltd
+
OUI:48D8FE*
ID_OUI_FROM_DATABASE=ClarIDy Solutions, Inc.
@@ -52778,6 +52958,9 @@ OUI:48F7F1*
OUI:48F8B3*
ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
+OUI:48F8DB*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:48F8E1*
ID_OUI_FROM_DATABASE=Nokia
@@ -52844,6 +53027,9 @@ OUI:4C0FC7*
OUI:4C1159*
ID_OUI_FROM_DATABASE=Vision Information & Communications
+OUI:4C11AE*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
OUI:4C11BF*
ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
@@ -52868,6 +53054,9 @@ OUI:4C16F1*
OUI:4C16FC*
ID_OUI_FROM_DATABASE=Juniper Networks
+OUI:4C1744*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
OUI:4C17EB*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
@@ -53075,6 +53264,9 @@ OUI:4C6AF6*
OUI:4C6E6E*
ID_OUI_FROM_DATABASE=Comnect Technology CO.,LTD
+OUI:4C6F9C*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
OUI:4C72B9*
ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
@@ -53153,6 +53345,9 @@ OUI:4C8FA5*
OUI:4C910C*
ID_OUI_FROM_DATABASE=Lanix Internacional, S.A. de C.V.
+OUI:4C9157*
+ ID_OUI_FROM_DATABASE=Fujian LANDI Commercial Equipment Co.,Ltd
+
OUI:4C917A0*
ID_OUI_FROM_DATABASE=Shenzhen Dangs Science & Technology CO.,LTD
@@ -53282,6 +53477,9 @@ OUI:4CBB58*
OUI:4CBC42*
ID_OUI_FROM_DATABASE=Shenzhen Hangsheng Electronics Co.,Ltd.
+OUI:4CBC48*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:4CBC980*
ID_OUI_FROM_DATABASE=Charge-Amps AB
@@ -53597,6 +53795,9 @@ OUI:500FF5*
OUI:5011EB*
ID_OUI_FROM_DATABASE=SilverNet Ltd
+OUI:501395*
+ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+
OUI:501479*
ID_OUI_FROM_DATABASE=iRobot Corporation
@@ -53729,6 +53930,9 @@ OUI:503F98*
OUI:504061*
ID_OUI_FROM_DATABASE=Nokia
+OUI:5041B9*
+ ID_OUI_FROM_DATABASE=I-O DATA DEVICE,INC.
+
OUI:5045F7*
ID_OUI_FROM_DATABASE=Liuhe Intelligence Technology Ltd.
@@ -53765,6 +53969,9 @@ OUI:505065*
OUI:5050CE*
ID_OUI_FROM_DATABASE=Hangzhou Dianyixia Communication Technology Co. Ltd.
+OUI:5051A9*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:5052D2*
ID_OUI_FROM_DATABASE=Hangzhou Telin Technologies Co., Limited
@@ -53879,6 +54086,9 @@ OUI:507224*
OUI:50724D*
ID_OUI_FROM_DATABASE=BEG Brueck Electronic GmbH
+OUI:5075F1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:507691*
ID_OUI_FROM_DATABASE=Tekpea, Inc.
@@ -53891,6 +54101,9 @@ OUI:5076AF*
OUI:507705*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:5078B3*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:50795B*
ID_OUI_FROM_DATABASE=Interexport Telecomunicaciones S.A.
@@ -54101,6 +54314,9 @@ OUI:50C006*
OUI:50C271*
ID_OUI_FROM_DATABASE=SECURETECH INC
+OUI:50C4DD*
+ ID_OUI_FROM_DATABASE=BUFFALO.INC
+
OUI:50C58D*
ID_OUI_FROM_DATABASE=Juniper Networks
@@ -54581,6 +54797,9 @@ OUI:54833A*
OUI:54847B*
ID_OUI_FROM_DATABASE=Digital Devices GmbH
+OUI:5486BC*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:54880E*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
@@ -55211,6 +55430,9 @@ OUI:58920D*
OUI:589396*
ID_OUI_FROM_DATABASE=Ruckus Wireless
+OUI:5893D8*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:58946B*
ID_OUI_FROM_DATABASE=Intel Corporate
@@ -55592,6 +55814,9 @@ OUI:5C18B5*
OUI:5C1A6F*
ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd.
+OUI:5C1CB9*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
OUI:5C1DD9*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -55631,6 +55856,9 @@ OUI:5C2ED2*
OUI:5C313E*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:5C32C5*
+ ID_OUI_FROM_DATABASE=Teracom Ltd.
+
OUI:5C3327*
ID_OUI_FROM_DATABASE=Spazio Italia srl
@@ -56174,6 +56402,9 @@ OUI:600810*
OUI:600837*
ID_OUI_FROM_DATABASE=ivvi Scientific(Nanchang)Co.Ltd
+OUI:6009C3*
+ ID_OUI_FROM_DATABASE=u-blox AG
+
OUI:600B03*
ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
@@ -56465,6 +56696,9 @@ OUI:608C2B*
OUI:608C4A*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:608CDF*
+ ID_OUI_FROM_DATABASE=Private
+
OUI:608CE6*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
@@ -56486,6 +56720,9 @@ OUI:6091F3*
OUI:609217*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:6092F5*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:609620*
ID_OUI_FROM_DATABASE=Private
@@ -56537,6 +56774,9 @@ OUI:60A8FE*
OUI:60A9B0*
ID_OUI_FROM_DATABASE=Merchandising Technologies, Inc
+OUI:60AB67*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
OUI:60ACC8*
ID_OUI_FROM_DATABASE=KunTeng Inc.
@@ -56639,6 +56879,9 @@ OUI:60D262*
OUI:60D2B9*
ID_OUI_FROM_DATABASE=REALAND BIO CO., LTD.
+OUI:60D2DD*
+ ID_OUI_FROM_DATABASE=Shenzhen Baitong Putian Technology Co.,Ltd.
+
OUI:60D30A*
ID_OUI_FROM_DATABASE=Quatius Limited
@@ -57296,6 +57539,9 @@ OUI:64CB5D*
OUI:64CBA3*
ID_OUI_FROM_DATABASE=Pointmobile
+OUI:64CC22*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
OUI:64CC2E*
ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
@@ -57710,6 +57956,9 @@ OUI:687CD5*
OUI:687F74*
ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
+OUI:6882F2*
+ ID_OUI_FROM_DATABASE=grandcentrix GmbH
+
OUI:68831A*
ID_OUI_FROM_DATABASE=Pandora Mobility Corporation
@@ -58127,6 +58376,9 @@ OUI:6C22AB*
OUI:6C23B9*
ID_OUI_FROM_DATABASE=Sony Mobile Communications Inc
+OUI:6C23CB*
+ ID_OUI_FROM_DATABASE=Wattty Corporation
+
OUI:6C2483*
ID_OUI_FROM_DATABASE=Microsoft Mobile Oy
@@ -58203,7 +58455,7 @@ OUI:6C4008*
ID_OUI_FROM_DATABASE=Apple, Inc.
OUI:6C40C6*
- ID_OUI_FROM_DATABASE=Nimbus Data Systems, Inc.
+ ID_OUI_FROM_DATABASE=Nimbus Data, Inc.
OUI:6C416A*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -58379,6 +58631,9 @@ OUI:6C8814*
OUI:6C8B2F*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:6C8BD3*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:6C8CDB*
ID_OUI_FROM_DATABASE=Otus Technologies Ltd
@@ -58823,6 +59078,9 @@ OUI:702DD1*
OUI:702E22*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:702E80*
+ ID_OUI_FROM_DATABASE=DIEHL Connectivity Solutions
+
OUI:702ED9*
ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronics Co., Ltd.
@@ -59306,6 +59564,9 @@ OUI:70B3D5009*
OUI:70B3D500A*
ID_OUI_FROM_DATABASE=FUJICOM Co.,Ltd.
+OUI:70B3D500C*
+ ID_OUI_FROM_DATABASE=EXARA Group
+
OUI:70B3D500D*
ID_OUI_FROM_DATABASE=Scrona AG
@@ -59468,6 +59729,9 @@ OUI:70B3D5052*
OUI:70B3D5054*
ID_OUI_FROM_DATABASE=Groupeer Technologies
+OUI:70B3D5056*
+ ID_OUI_FROM_DATABASE=MIRAE INFORMATION TECHNOLOGY CO., LTD.
+
OUI:70B3D5058*
ID_OUI_FROM_DATABASE=Telink Semiconductor CO, Limtied, Taiwan
@@ -59669,6 +59933,9 @@ OUI:70B3D50AB*
OUI:70B3D50AC*
ID_OUI_FROM_DATABASE=RoboCore Tecnologia
+OUI:70B3D50AD*
+ ID_OUI_FROM_DATABASE=Vega-Absolute
+
OUI:70B3D50AE*
ID_OUI_FROM_DATABASE=Norsat International Inc.
@@ -59816,6 +60083,9 @@ OUI:70B3D50EA*
OUI:70B3D50EC*
ID_OUI_FROM_DATABASE=ACS MOTION CONTROL
+OUI:70B3D50ED*
+ ID_OUI_FROM_DATABASE=Lupa Tecnologia e Sistemas Ltda
+
OUI:70B3D50EE*
ID_OUI_FROM_DATABASE=Picture Elements, Inc.
@@ -59828,6 +60098,9 @@ OUI:70B3D50F0*
OUI:70B3D50F1*
ID_OUI_FROM_DATABASE=Beijing One City Science & Technology Co., LTD
+OUI:70B3D50F2*
+ ID_OUI_FROM_DATABASE=TrexEdge, Inc.
+
OUI:70B3D50F3*
ID_OUI_FROM_DATABASE=MonsoonRF, Inc.
@@ -60446,6 +60719,9 @@ OUI:70B3D5216*
OUI:70B3D5217*
ID_OUI_FROM_DATABASE=Tecnint HTE SRL
+OUI:70B3D521A*
+ ID_OUI_FROM_DATABASE=Acutronic Link Robotics AG
+
OUI:70B3D521B*
ID_OUI_FROM_DATABASE=Lab241 Co.,Ltd.
@@ -60650,6 +60926,9 @@ OUI:70B3D5273*
OUI:70B3D5274*
ID_OUI_FROM_DATABASE=Stercom Power Solutions GmbH
+OUI:70B3D5275*
+ ID_OUI_FROM_DATABASE=INTERNET PROTOCOLO LOGICA SL
+
OUI:70B3D5276*
ID_OUI_FROM_DATABASE=TELL Software Hungaria Kft.
@@ -60761,6 +61040,9 @@ OUI:70B3D52A4*
OUI:70B3D52A5*
ID_OUI_FROM_DATABASE=Taitotekniikka
+OUI:70B3D52A6*
+ ID_OUI_FROM_DATABASE=GSI Technology
+
OUI:70B3D52A7*
ID_OUI_FROM_DATABASE=Plasmability, LLC
@@ -60947,6 +61229,9 @@ OUI:70B3D52F9*
OUI:70B3D52FA*
ID_OUI_FROM_DATABASE=Toray Medical Co.,Ltd
+OUI:70B3D52FC*
+ ID_OUI_FROM_DATABASE=Loanguard T/A SE Controls
+
OUI:70B3D52FD*
ID_OUI_FROM_DATABASE=Special Projects Group, Inc
@@ -61067,6 +61352,9 @@ OUI:70B3D533C*
OUI:70B3D533E*
ID_OUI_FROM_DATABASE=Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
+OUI:70B3D533F*
+ ID_OUI_FROM_DATABASE=XANTIA SA
+
OUI:70B3D5340*
ID_OUI_FROM_DATABASE=Renesas Electronics
@@ -61238,6 +61526,9 @@ OUI:70B3D5384*
OUI:70B3D5387*
ID_OUI_FROM_DATABASE=GWF MessSysteme AG
+OUI:70B3D5388*
+ ID_OUI_FROM_DATABASE=Xitron
+
OUI:70B3D5389*
ID_OUI_FROM_DATABASE=Private
@@ -61685,6 +61976,9 @@ OUI:70B3D546B*
OUI:70B3D546C*
ID_OUI_FROM_DATABASE=SHANGHAI CHENZHU INSTRUMENT CO., LTD.
+OUI:70B3D546E*
+ ID_OUI_FROM_DATABASE=Zamir Recognition Systems Ltd.
+
OUI:70B3D546F*
ID_OUI_FROM_DATABASE=serva transport systems GmbH
@@ -61703,6 +61997,9 @@ OUI:70B3D5475*
OUI:70B3D5476*
ID_OUI_FROM_DATABASE=FR-Team International SA
+OUI:70B3D5477*
+ ID_OUI_FROM_DATABASE=digitrol limited
+
OUI:70B3D5478*
ID_OUI_FROM_DATABASE=Touchnet/OneCard
@@ -61748,6 +62045,9 @@ OUI:70B3D548E*
OUI:70B3D548F*
ID_OUI_FROM_DATABASE=Seiwa Giken
+OUI:70B3D5490*
+ ID_OUI_FROM_DATABASE=Xiamen Beogold Technology Co. Ltd.
+
OUI:70B3D5492*
ID_OUI_FROM_DATABASE=Jiangsu Jinheng Information Technology Co.,Ltd.
@@ -61760,6 +62060,9 @@ OUI:70B3D5494*
OUI:70B3D5495*
ID_OUI_FROM_DATABASE=Fiem Industries Ltd.
+OUI:70B3D5497*
+ ID_OUI_FROM_DATABASE=ALBIRAL DISPLAY SOLUTIONS SL
+
OUI:70B3D5498*
ID_OUI_FROM_DATABASE=XGEM SAS
@@ -62081,6 +62384,9 @@ OUI:70B3D5532*
OUI:70B3D5533*
ID_OUI_FROM_DATABASE=Nippon Marine Enterprises, Ltd.
+OUI:70B3D5535*
+ ID_OUI_FROM_DATABASE=SITA Messtechnik GmbH
+
OUI:70B3D5538*
ID_OUI_FROM_DATABASE=sydetion UG (h.b.)
@@ -62150,6 +62456,9 @@ OUI:70B3D5555*
OUI:70B3D5557*
ID_OUI_FROM_DATABASE=HEITEC AG
+OUI:70B3D5558*
+ ID_OUI_FROM_DATABASE=Multiple Access Communications Ltd
+
OUI:70B3D5559*
ID_OUI_FROM_DATABASE=Eagle Mountain Technology
@@ -62216,6 +62525,9 @@ OUI:70B3D557C*
OUI:70B3D557D*
ID_OUI_FROM_DATABASE=WICOM1 GmbH
+OUI:70B3D557F*
+ ID_OUI_FROM_DATABASE=MBio Diagnostics, Inc.
+
OUI:70B3D5580*
ID_OUI_FROM_DATABASE=Private
@@ -62546,6 +62858,9 @@ OUI:70B3D561E*
OUI:70B3D561F*
ID_OUI_FROM_DATABASE=Labotect Labor-Technik-Göttingen GmbH
+OUI:70B3D5620*
+ ID_OUI_FROM_DATABASE=Orlaco Products B.V.
+
OUI:70B3D5623*
ID_OUI_FROM_DATABASE=Beijing HuaLian Technology Co, Ltd.
@@ -62553,7 +62868,7 @@ OUI:70B3D5625*
ID_OUI_FROM_DATABASE=VX Instruments GmbH
OUI:70B3D5628*
- ID_OUI_FROM_DATABASE=MECT S.R.L.
+ ID_OUI_FROM_DATABASE=MECT SRL
OUI:70B3D562B*
ID_OUI_FROM_DATABASE=Silicann Systems GmbH
@@ -62564,6 +62879,9 @@ OUI:70B3D5630*
OUI:70B3D5631*
ID_OUI_FROM_DATABASE=SENSO2ME
+OUI:70B3D5633*
+ ID_OUI_FROM_DATABASE=OBSERVER FOUNDATION
+
OUI:70B3D5634*
ID_OUI_FROM_DATABASE=idaqs Co.,Ltd.
@@ -62690,6 +63008,9 @@ OUI:70B3D566A*
OUI:70B3D566B*
ID_OUI_FROM_DATABASE=Innitive B.V.
+OUI:70B3D566D*
+ ID_OUI_FROM_DATABASE=Sanmina Israel
+
OUI:70B3D5670*
ID_OUI_FROM_DATABASE=Particle sizing systems
@@ -62768,6 +63089,9 @@ OUI:70B3D5696*
OUI:70B3D5697*
ID_OUI_FROM_DATABASE=Alazar Technologies Inc.
+OUI:70B3D569A*
+ ID_OUI_FROM_DATABASE=Altaneos
+
OUI:70B3D569C*
ID_OUI_FROM_DATABASE=Keepen
@@ -62831,6 +63155,9 @@ OUI:70B3D56B7*
OUI:70B3D56B8*
ID_OUI_FROM_DATABASE=BT9
+OUI:70B3D56BA*
+ ID_OUI_FROM_DATABASE=Integrotech sp. z o.o.
+
OUI:70B3D56BB*
ID_OUI_FROM_DATABASE=LUCEO
@@ -62882,6 +63209,9 @@ OUI:70B3D56D9*
OUI:70B3D56DA*
ID_OUI_FROM_DATABASE=Enovative Networks, Inc.
+OUI:70B3D56DE*
+ ID_OUI_FROM_DATABASE=Ametek Solidstate Controls
+
OUI:70B3D56DF*
ID_OUI_FROM_DATABASE=Mango DSP, Inc.
@@ -62924,6 +63254,9 @@ OUI:70B3D56ED*
OUI:70B3D56F0*
ID_OUI_FROM_DATABASE=iTelaSoft Pvt Ltd
+OUI:70B3D56F1*
+ ID_OUI_FROM_DATABASE=Discover Battery
+
OUI:70B3D56F2*
ID_OUI_FROM_DATABASE=P&C Micro's Pty Ltd
@@ -63146,6 +63479,9 @@ OUI:70B3D5751*
OUI:70B3D5753*
ID_OUI_FROM_DATABASE=HCH. Kündig & CIE. AG
+OUI:70B3D5754*
+ ID_OUI_FROM_DATABASE=COSMOIT.CO.LTD
+
OUI:70B3D5755*
ID_OUI_FROM_DATABASE=LandmarkTech Systems Technology Co.,Ltd.
@@ -63308,6 +63644,9 @@ OUI:70B3D579A*
OUI:70B3D579B*
ID_OUI_FROM_DATABASE=Soniclean Pty Ltd
+OUI:70B3D579D*
+ ID_OUI_FROM_DATABASE=Editech Co., Ltd
+
OUI:70B3D579E*
ID_OUI_FROM_DATABASE=CW2. Gmbh & Co. KG
@@ -63383,6 +63722,12 @@ OUI:70B3D57B8*
OUI:70B3D57B9*
ID_OUI_FROM_DATABASE=QIAGEN Instruments AG
+OUI:70B3D57BA*
+ ID_OUI_FROM_DATABASE=Decentlab GmbH
+
+OUI:70B3D57BC*
+ ID_OUI_FROM_DATABASE=FIRST RF Corporation
+
OUI:70B3D57BF*
ID_OUI_FROM_DATABASE=Stone Three
@@ -63398,6 +63743,9 @@ OUI:70B3D57C2*
OUI:70B3D57C3*
ID_OUI_FROM_DATABASE=Flexim Security Oy
+OUI:70B3D57C4*
+ ID_OUI_FROM_DATABASE=MECT SRL
+
OUI:70B3D57C7*
ID_OUI_FROM_DATABASE=Sicon srl
@@ -63548,6 +63896,9 @@ OUI:70B3D5805*
OUI:70B3D5807*
ID_OUI_FROM_DATABASE=Camsat Przemysław Gralak
+OUI:70B3D5808*
+ ID_OUI_FROM_DATABASE=Becton Dickinson
+
OUI:70B3D5809*
ID_OUI_FROM_DATABASE=Tecnint HTE SRL
@@ -63881,6 +64232,9 @@ OUI:70B3D58A6*
OUI:70B3D58A8*
ID_OUI_FROM_DATABASE=megatec electronic GmbH
+OUI:70B3D58A9*
+ ID_OUI_FROM_DATABASE=WoKa-Elektronik GmbH
+
OUI:70B3D58AB*
ID_OUI_FROM_DATABASE=EMAC, Inc.
@@ -64181,6 +64535,9 @@ OUI:70B3D5943*
OUI:70B3D5945*
ID_OUI_FROM_DATABASE=Symboticware Incorporated
+OUI:70B3D5946*
+ ID_OUI_FROM_DATABASE=GREATWALL Infotech Co., Ltd.
+
OUI:70B3D5947*
ID_OUI_FROM_DATABASE=Checkbill Co,Ltd.
@@ -64388,6 +64745,9 @@ OUI:70B3D59A2*
OUI:70B3D59A7*
ID_OUI_FROM_DATABASE=Honeywell
+OUI:70B3D59A9*
+ ID_OUI_FROM_DATABASE=PABLO AIR Co., LTD
+
OUI:70B3D59AA*
ID_OUI_FROM_DATABASE=Tecsys do Brasil Industrial Ltda
@@ -64418,6 +64778,9 @@ OUI:70B3D59B5*
OUI:70B3D59B6*
ID_OUI_FROM_DATABASE=Intercomp S.p.A.
+OUI:70B3D59B7*
+ ID_OUI_FROM_DATABASE=Itronics Ltd
+
OUI:70B3D59B8*
ID_OUI_FROM_DATABASE=Loma Systems
@@ -64430,6 +64793,9 @@ OUI:70B3D59BA*
OUI:70B3D59BD*
ID_OUI_FROM_DATABASE=Signal Processing Devices Sweden AB
+OUI:70B3D59BE*
+ ID_OUI_FROM_DATABASE=Izome
+
OUI:70B3D59C0*
ID_OUI_FROM_DATABASE=Schneider Displaytechnik GmbH
@@ -64460,6 +64826,9 @@ OUI:70B3D59CA*
OUI:70B3D59CB*
ID_OUI_FROM_DATABASE=Alligator Communications
+OUI:70B3D59CC*
+ ID_OUI_FROM_DATABASE=Zaxcom Inc
+
OUI:70B3D59CE*
ID_OUI_FROM_DATABASE=Terragene S.A
@@ -65306,6 +65675,9 @@ OUI:70B3D5B4A*
OUI:70B3D5B4D*
ID_OUI_FROM_DATABASE=Avidbots Corporation
+OUI:70B3D5B50*
+ ID_OUI_FROM_DATABASE=iGrid T&D
+
OUI:70B3D5B51*
ID_OUI_FROM_DATABASE=Critical Link LLC
@@ -65468,9 +65840,15 @@ OUI:70B3D5BA3*
OUI:70B3D5BA4*
ID_OUI_FROM_DATABASE=EIWA GIKEN INC.
+OUI:70B3D5BA6*
+ ID_OUI_FROM_DATABASE=Gluon Solutions Inc.
+
OUI:70B3D5BA7*
ID_OUI_FROM_DATABASE=Digital Yacht Ltd
+OUI:70B3D5BA8*
+ ID_OUI_FROM_DATABASE=Controlled Power Company
+
OUI:70B3D5BA9*
ID_OUI_FROM_DATABASE=Alma
@@ -65540,6 +65918,9 @@ OUI:70B3D5BC3*
OUI:70B3D5BC4*
ID_OUI_FROM_DATABASE=Digital Media Professionals
+OUI:70B3D5BC5*
+ ID_OUI_FROM_DATABASE=U&R GmbH Hardware- und Systemdesign
+
OUI:70B3D5BC6*
ID_OUI_FROM_DATABASE=Hatteland Display AS
@@ -65570,6 +65951,9 @@ OUI:70B3D5BD2*
OUI:70B3D5BD3*
ID_OUI_FROM_DATABASE=FOTONA D.D.
+OUI:70B3D5BD4*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+
OUI:70B3D5BD5*
ID_OUI_FROM_DATABASE=Synics AG
@@ -65618,6 +66002,9 @@ OUI:70B3D5BEC*
OUI:70B3D5BED*
ID_OUI_FROM_DATABASE=Itrinegy Ltd.
+OUI:70B3D5BEE*
+ ID_OUI_FROM_DATABASE=Sicon srl
+
OUI:70B3D5BEF*
ID_OUI_FROM_DATABASE=Sensortech Systems Inc.
@@ -65663,6 +66050,9 @@ OUI:70B3D5C06*
OUI:70B3D5C07*
ID_OUI_FROM_DATABASE=ARECO
+OUI:70B3D5C08*
+ ID_OUI_FROM_DATABASE=Talleres de Escoriaza SA
+
OUI:70B3D5C0A*
ID_OUI_FROM_DATABASE=Infosocket Co., Ltd.
@@ -65822,6 +66212,9 @@ OUI:70B3D5C4F*
OUI:70B3D5C53*
ID_OUI_FROM_DATABASE=S Labs sp. z o.o.
+OUI:70B3D5C54*
+ ID_OUI_FROM_DATABASE=Flexsolution APS
+
OUI:70B3D5C55*
ID_OUI_FROM_DATABASE=Intelligent Energy Ltd
@@ -66005,6 +66398,9 @@ OUI:70B3D5CAC*
OUI:70B3D5CAE*
ID_OUI_FROM_DATABASE=THEMA
+OUI:70B3D5CB1*
+ ID_OUI_FROM_DATABASE=RADAR
+
OUI:70B3D5CB2*
ID_OUI_FROM_DATABASE=SECLAB
@@ -66029,6 +66425,9 @@ OUI:70B3D5CBA*
OUI:70B3D5CBC*
ID_OUI_FROM_DATABASE=Procon Electronics Pty Ltd
+OUI:70B3D5CBD*
+ ID_OUI_FROM_DATABASE=Preo Industries Far East Limited
+
OUI:70B3D5CBE*
ID_OUI_FROM_DATABASE=Ensura Solutions BV
@@ -66260,6 +66659,9 @@ OUI:70B3D5D37*
OUI:70B3D5D38*
ID_OUI_FROM_DATABASE=Vista Research, Inc.
+OUI:70B3D5D3A*
+ ID_OUI_FROM_DATABASE=PROMOMED RUS LLC
+
OUI:70B3D5D3B*
ID_OUI_FROM_DATABASE=NimbeLink Corp
@@ -66548,6 +66950,9 @@ OUI:70B3D5DB7*
OUI:70B3D5DB8*
ID_OUI_FROM_DATABASE=SISTEM SA
+OUI:70B3D5DBC*
+ ID_OUI_FROM_DATABASE=Gamber Johnson-LLC
+
OUI:70B3D5DBE*
ID_OUI_FROM_DATABASE=Hiber
@@ -66599,6 +67004,9 @@ OUI:70B3D5DD7*
OUI:70B3D5DD8*
ID_OUI_FROM_DATABASE=EMSCAN Corp.
+OUI:70B3D5DD9*
+ ID_OUI_FROM_DATABASE=MaNima Technologies BV
+
OUI:70B3D5DDB*
ID_OUI_FROM_DATABASE=Intra Corporation
@@ -66683,6 +67091,9 @@ OUI:70B3D5DFD*
OUI:70B3D5DFF*
ID_OUI_FROM_DATABASE=Spanawave Corporation
+OUI:70B3D5E00*
+ ID_OUI_FROM_DATABASE=Jeaway CCTV Security Ltd,.
+
OUI:70B3D5E02*
ID_OUI_FROM_DATABASE=YEHL & JORDAN LLC
@@ -66710,6 +67121,9 @@ OUI:70B3D5E0D*
OUI:70B3D5E0F*
ID_OUI_FROM_DATABASE=Vtron Pty Ltd
+OUI:70B3D5E15*
+ ID_OUI_FROM_DATABASE=Benetel
+
OUI:70B3D5E16*
ID_OUI_FROM_DATABASE=China Entropy Co., Ltd.
@@ -66752,12 +67166,18 @@ OUI:70B3D5E27*
OUI:70B3D5E28*
ID_OUI_FROM_DATABASE=iotec GmbH
+OUI:70B3D5E29*
+ ID_OUI_FROM_DATABASE=Invent Vision - iVision Sistemas de Imagem e Visão S.A.
+
OUI:70B3D5E2B*
ID_OUI_FROM_DATABASE=Guan Show Technologe Co., Ltd.
OUI:70B3D5E2C*
ID_OUI_FROM_DATABASE=Fourth Frontier Technologies Private Limited
+OUI:70B3D5E2D*
+ ID_OUI_FROM_DATABASE=Private
+
OUI:70B3D5E2E*
ID_OUI_FROM_DATABASE=Merz s.r.o.
@@ -66767,6 +67187,9 @@ OUI:70B3D5E30*
OUI:70B3D5E32*
ID_OUI_FROM_DATABASE=HERUTU ELECTRONICS CORPORATION
+OUI:70B3D5E33*
+ ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
+
OUI:70B3D5E35*
ID_OUI_FROM_DATABASE=Nanospeed Technologies Limited
@@ -67238,6 +67661,9 @@ OUI:70B3D5F19*
OUI:70B3D5F1A*
ID_OUI_FROM_DATABASE=Sator Controls s.r.o.
+OUI:70B3D5F1C*
+ ID_OUI_FROM_DATABASE=Bavaria Digital Technik GmbH
+
OUI:70B3D5F1D*
ID_OUI_FROM_DATABASE=Critical Link LLC
@@ -67304,9 +67730,15 @@ OUI:70B3D5F3B*
OUI:70B3D5F3C*
ID_OUI_FROM_DATABASE=Gigaray
+OUI:70B3D5F3F*
+ ID_OUI_FROM_DATABASE=comtac AG
+
OUI:70B3D5F42*
ID_OUI_FROM_DATABASE=Matsuhisa Corporation
+OUI:70B3D5F43*
+ ID_OUI_FROM_DATABASE=Divelbiss Corporation
+
OUI:70B3D5F45*
ID_OUI_FROM_DATABASE=Norbit ODM AS
@@ -67319,6 +67751,9 @@ OUI:70B3D5F4D*
OUI:70B3D5F4F*
ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L.
+OUI:70B3D5F50*
+ ID_OUI_FROM_DATABASE=Vectology,Inc
+
OUI:70B3D5F51*
ID_OUI_FROM_DATABASE=IoT Routers Limited
@@ -67439,6 +67874,9 @@ OUI:70B3D5F87*
OUI:70B3D5F88*
ID_OUI_FROM_DATABASE=ODAWARAKIKI AUTO-MACHINE MFG.CO.,LTD
+OUI:70B3D5F89*
+ ID_OUI_FROM_DATABASE=Soehnle Industrial Solutions GmbH
+
OUI:70B3D5F8A*
ID_OUI_FROM_DATABASE=FRS GmbH & Co. KG
@@ -67529,6 +67967,9 @@ OUI:70B3D5FAF*
OUI:70B3D5FB0*
ID_OUI_FROM_DATABASE=Rohde&Schwarz Topex SA
+OUI:70B3D5FB2*
+ ID_OUI_FROM_DATABASE=KJ3 Elektronik AB
+
OUI:70B3D5FB3*
ID_OUI_FROM_DATABASE=3PS Inc
@@ -67625,6 +68066,9 @@ OUI:70B3D5FDA*
OUI:70B3D5FDB*
ID_OUI_FROM_DATABASE=Design SHIFT
+OUI:70B3D5FDC*
+ ID_OUI_FROM_DATABASE=Tapdn
+
OUI:70B3D5FDD*
ID_OUI_FROM_DATABASE=Laser Imagineering Vertriebs GmbH
@@ -67679,6 +68123,9 @@ OUI:70B3D5FF0*
OUI:70B3D5FF1*
ID_OUI_FROM_DATABASE=Data Strategy Limited
+OUI:70B3D5FF2*
+ ID_OUI_FROM_DATABASE=tiga.eleven GmbH
+
OUI:70B3D5FF3*
ID_OUI_FROM_DATABASE=Aplex Technology Inc.
@@ -67799,6 +68246,9 @@ OUI:70DB98*
OUI:70DDA1*
ID_OUI_FROM_DATABASE=Tellabs
+OUI:70DDA8*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
OUI:70DEE2*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -67877,6 +68327,9 @@ OUI:70F35A*
OUI:70F395*
ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
+OUI:70F754*
+ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
+
OUI:70F8E70*
ID_OUI_FROM_DATABASE=SHENZHEN Xin JiuNing Electronics Co Ltd
@@ -68906,6 +69359,9 @@ OUI:7829ED*
OUI:782BCB*
ID_OUI_FROM_DATABASE=Dell Inc.
+OUI:782C29*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
OUI:782D7E*
ID_OUI_FROM_DATABASE=TRENDnet, Inc.
@@ -69149,6 +69605,9 @@ OUI:788C4D*
OUI:788C54*
ID_OUI_FROM_DATABASE=Ping Communication
+OUI:788C77*
+ ID_OUI_FROM_DATABASE=LEXMARK INTERNATIONAL, INC.
+
OUI:788DF7*
ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
@@ -69530,6 +69989,9 @@ OUI:78DAA2*
OUI:78DAB3*
ID_OUI_FROM_DATABASE=GBO Technology
+OUI:78DB2F*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:78DD08*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
@@ -69548,6 +70010,9 @@ OUI:78DEE4*
OUI:78E103*
ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+OUI:78E2BD*
+ ID_OUI_FROM_DATABASE=Vodafone Automotive S.p.A.
+
OUI:78E3B5*
ID_OUI_FROM_DATABASE=Hewlett Packard
@@ -69887,6 +70352,9 @@ OUI:7C4FB5*
OUI:7C5049*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:7C50DA*
+ ID_OUI_FROM_DATABASE=Private
+
OUI:7C5259*
ID_OUI_FROM_DATABASE=Sichuan Jiuzhou Electronic Technology Co., Ltd.
@@ -70394,6 +70862,9 @@ OUI:7CD1C3*
OUI:7CD30A*
ID_OUI_FROM_DATABASE=INVENTEC CORPORATION
+OUI:7CD661*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
OUI:7CD762*
ID_OUI_FROM_DATABASE=Freestyle Technology Pty Ltd
@@ -70622,6 +71093,9 @@ OUI:801F12*
OUI:8020AF*
ID_OUI_FROM_DATABASE=Trade FIDES, a.s.
+OUI:8020DA*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
OUI:802275*
ID_OUI_FROM_DATABASE=Beijing Beny Wave Technology Co Ltd
@@ -70976,6 +71450,9 @@ OUI:80A1AB*
OUI:80A1D7*
ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co.,Ltd
+OUI:80A235*
+ ID_OUI_FROM_DATABASE=Edgecore Networks Corporation
+
OUI:80A589*
ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
@@ -71087,6 +71564,9 @@ OUI:80CF41*
OUI:80D019*
ID_OUI_FROM_DATABASE=Embed, Inc
+OUI:80D04A*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
OUI:80D065*
ID_OUI_FROM_DATABASE=CKS Corporation
@@ -71117,6 +71597,12 @@ OUI:80D605*
OUI:80D733*
ID_OUI_FROM_DATABASE=QSR Automations, Inc.
+OUI:80DA13*
+ ID_OUI_FROM_DATABASE=eero inc.
+
+OUI:80DABC*
+ ID_OUI_FROM_DATABASE=Megafone Limited
+
OUI:80DB31*
ID_OUI_FROM_DATABASE=Power Quotient International Co., Ltd.
@@ -71765,6 +72251,12 @@ OUI:84B59C*
OUI:84B802*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:84B866*
+ ID_OUI_FROM_DATABASE=Beijing XiaoLu technology co. LTD
+
+OUI:84B8B8*
+ ID_OUI_FROM_DATABASE=Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+
OUI:84BA3B*
ID_OUI_FROM_DATABASE=CANON INC.
@@ -71786,6 +72278,9 @@ OUI:84C3E8*
OUI:84C727*
ID_OUI_FROM_DATABASE=Gnodal Ltd
+OUI:84C78F*
+ ID_OUI_FROM_DATABASE=STORDIS GmbH
+
OUI:84C7A9*
ID_OUI_FROM_DATABASE=C3PO S.A.
@@ -71918,6 +72413,9 @@ OUI:84E629*
OUI:84E714*
ID_OUI_FROM_DATABASE=Liang Herng Enterprise,Co.Ltd.
+OUI:84E892*
+ ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
+
OUI:84EA99*
ID_OUI_FROM_DATABASE=Vieworks
@@ -71954,6 +72452,9 @@ OUI:84FCAC*
OUI:84FCFE*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:84FDD1*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:84FE9E*
ID_OUI_FROM_DATABASE=RTC Industries, Inc.
@@ -72422,6 +72923,9 @@ OUI:8896B6*
OUI:8896F2*
ID_OUI_FROM_DATABASE=Valeo Schalter und Sensoren GmbH
+OUI:889746*
+ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+
OUI:889765*
ID_OUI_FROM_DATABASE=exands
@@ -72557,6 +73061,9 @@ OUI:88B8D0*
OUI:88BA7F*
ID_OUI_FROM_DATABASE=Qfiednet Co., Ltd.
+OUI:88BCC1*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:88BD45*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -72641,6 +73148,9 @@ OUI:88D962*
OUI:88DA1A*
ID_OUI_FROM_DATABASE=Redpine Signals, Inc.
+OUI:88DA33*
+ ID_OUI_FROM_DATABASE=Beijing Xiaoyuer Network Technology Co., Ltd
+
OUI:88DC96*
ID_OUI_FROM_DATABASE=SENAO Networks, Inc.
@@ -72677,6 +73187,9 @@ OUI:88E603*
OUI:88E628*
ID_OUI_FROM_DATABASE=Shenzhen Kezhonglong Optoelectronic Technology Co.,Ltd
+OUI:88E64B*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
OUI:88E712*
ID_OUI_FROM_DATABASE=Whirlpool Corporation
@@ -72722,6 +73235,9 @@ OUI:88F7BF*
OUI:88F7C7*
ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+OUI:88F872*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:88FD15*
ID_OUI_FROM_DATABASE=LINEEYE CO., LTD
@@ -72764,6 +73280,9 @@ OUI:8C0F6F*
OUI:8C0F83*
ID_OUI_FROM_DATABASE=Angie Hospitality LLC
+OUI:8C0FA0*
+ ID_OUI_FROM_DATABASE=di-soric GmbH & Co. KG
+
OUI:8C10D4*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
@@ -72983,6 +73502,9 @@ OUI:8C41F2*
OUI:8C41F4*
ID_OUI_FROM_DATABASE=IPmotion GmbH
+OUI:8C426D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:8C4435*
ID_OUI_FROM_DATABASE=Shanghai BroadMobi Communication Technology Co., Ltd.
@@ -73124,6 +73646,9 @@ OUI:8C78D7*
OUI:8C7967*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:8C79F5*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:8C7B9D*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -73178,6 +73703,9 @@ OUI:8C897A*
OUI:8C89A5*
ID_OUI_FROM_DATABASE=Micro-Star INT'L CO., LTD
+OUI:8C89FA*
+ ID_OUI_FROM_DATABASE=Zhejiang Hechuan Technology Co., Ltd.
+
OUI:8C8A6E*
ID_OUI_FROM_DATABASE=ESTUN AUTOMATION TECHNOLOY CO., LTD
@@ -73673,6 +74201,9 @@ OUI:904CE5*
OUI:904D4A*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+OUI:904DC3*
+ ID_OUI_FROM_DATABASE=Flonidan A/S
+
OUI:904E2B*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -73751,6 +74282,9 @@ OUI:905851*
OUI:9059AF*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:905C34*
+ ID_OUI_FROM_DATABASE=Sirius Electronic Systems Srl
+
OUI:905C44*
ID_OUI_FROM_DATABASE=Compal Broadband Networks, Inc.
@@ -73817,6 +74351,9 @@ OUI:907240*
OUI:907282*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+OUI:907841*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:907910*
ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
@@ -74630,6 +75167,9 @@ OUI:94C038*
OUI:94C150*
ID_OUI_FROM_DATABASE=2Wire Inc
+OUI:94C2BD*
+ ID_OUI_FROM_DATABASE=TECNOBIT
+
OUI:94C3E4*
ID_OUI_FROM_DATABASE=Atlas Copco IAS GmbH
@@ -74771,6 +75311,9 @@ OUI:94EB2C*
OUI:94EBCD*
ID_OUI_FROM_DATABASE=BlackBerry RTS
+OUI:94EE9F*
+ ID_OUI_FROM_DATABASE=HMD Global Oy
+
OUI:94F128*
ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
@@ -74939,6 +75482,9 @@ OUI:981DFA*
OUI:981E0F*
ID_OUI_FROM_DATABASE=Jeelan (Shanghai Jeelan Technology Information Inc
+OUI:981E19*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
OUI:981FB1*
ID_OUI_FROM_DATABASE=Shenzhen Lemon Network Technology Co.,Ltd
@@ -75203,6 +75749,9 @@ OUI:988744*
OUI:9889ED*
ID_OUI_FROM_DATABASE=Anadem Information Inc.
+OUI:988B0A*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
OUI:988B5D*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
@@ -75314,6 +75863,9 @@ OUI:98B039*
OUI:98B6E9*
ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+OUI:98B8BA*
+ ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+
OUI:98B8E3*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -75605,6 +76157,9 @@ OUI:9C216A*
OUI:9C220E*
ID_OUI_FROM_DATABASE=TASCAN Systems GmbH
+OUI:9C25BE*
+ ID_OUI_FROM_DATABASE=Wildlife Acoustics, Inc.
+
OUI:9C2840*
ID_OUI_FROM_DATABASE=Discovery Technology,LTD..
@@ -75725,6 +76280,9 @@ OUI:9C44A6*
OUI:9C4563*
ID_OUI_FROM_DATABASE=DIMEP Sistemas
+OUI:9C497F*
+ ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
+
OUI:9C4A7B*
ID_OUI_FROM_DATABASE=Nokia Corporation
@@ -76772,6 +77330,9 @@ OUI:A090DE*
OUI:A09169*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+OUI:A091A2*
+ ID_OUI_FROM_DATABASE=OnePlus Electronics (Shenzhen) Co., Ltd.
+
OUI:A091C8*
ID_OUI_FROM_DATABASE=zte corporation
@@ -77708,6 +78269,9 @@ OUI:A4934C*
OUI:A49426*
ID_OUI_FROM_DATABASE=Elgama-Elektronika Ltd.
+OUI:A4975C*
+ ID_OUI_FROM_DATABASE=VTech Telecommunications Ltd.
+
OUI:A497BB*
ID_OUI_FROM_DATABASE=Hitachi Industrial Equipment Systems Co.,Ltd
@@ -78473,6 +79037,9 @@ OUI:A89FEC*
OUI:A8A089*
ID_OUI_FROM_DATABASE=Tactical Communications
+OUI:A8A159*
+ ID_OUI_FROM_DATABASE=ASRock Incorporation
+
OUI:A8A198*
ID_OUI_FROM_DATABASE=TCT mobile ltd
@@ -78590,6 +79157,9 @@ OUI:A8D88A*
OUI:A8DA01*
ID_OUI_FROM_DATABASE=Shenzhen NUOLIJIA Digital Technology Co.,Ltd
+OUI:A8DB03*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
OUI:A8E018*
ID_OUI_FROM_DATABASE=Nokia Corporation
@@ -78602,6 +79172,9 @@ OUI:A8E3EE*
OUI:A8E539*
ID_OUI_FROM_DATABASE=Moimstone Co.,Ltd
+OUI:A8E544*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:A8E552*
ID_OUI_FROM_DATABASE=JUWEL Aquarium AG & Co. KG
@@ -78662,6 +79235,9 @@ OUI:AA0003*
OUI:AA0004*
ID_OUI_FROM_DATABASE=DIGITAL EQUIPMENT CORPORATION
+OUI:AC00D0*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:AC0142*
ID_OUI_FROM_DATABASE=Uriel Technologies SIA
@@ -78830,6 +79406,9 @@ OUI:AC3613*
OUI:AC3743*
ID_OUI_FROM_DATABASE=HTC Corporation
+OUI:AC37C9*
+ ID_OUI_FROM_DATABASE=RAID Incorporated
+
OUI:AC3870*
ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd.
@@ -79028,6 +79607,9 @@ OUI:AC6FBB*
OUI:AC6FD9*
ID_OUI_FROM_DATABASE=Valueplus Inc.
+OUI:AC710C*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
OUI:AC7236*
ID_OUI_FROM_DATABASE=Lexking Technology Co., Ltd.
@@ -79148,6 +79730,9 @@ OUI:ACA31E*
OUI:ACA430*
ID_OUI_FROM_DATABASE=Peerless AV
+OUI:ACA46E*
+ ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
+
OUI:ACA667*
ID_OUI_FROM_DATABASE=Electronic Systems Protection, Inc.
@@ -79499,9 +80084,15 @@ OUI:B02628*
OUI:B02680*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:B02A1F*
+ ID_OUI_FROM_DATABASE=Wingtech Group (HongKong)Limited
+
OUI:B02A43*
ID_OUI_FROM_DATABASE=Google, Inc.
+OUI:B03055*
+ ID_OUI_FROM_DATABASE=China Mobile IOT Company Limited
+
OUI:B033A6*
ID_OUI_FROM_DATABASE=Juniper Networks
@@ -79643,6 +80234,9 @@ OUI:B06EBF*
OUI:B06FE0*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:B0700D*
+ ID_OUI_FROM_DATABASE=Nokia
+
OUI:B0702D*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -79796,6 +80390,9 @@ OUI:B0AA36*
OUI:B0AA77*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+OUI:B0AAD2*
+ ID_OUI_FROM_DATABASE=Sichuan tianyi kanghe communications co., LTD
+
OUI:B0ACD2*
ID_OUI_FROM_DATABASE=zte corporation
@@ -80063,6 +80660,27 @@ OUI:B0FC0D*
OUI:B0FC36*
ID_OUI_FROM_DATABASE=CyberTAN Technology Inc.
+OUI:B0FD0B2*
+ ID_OUI_FROM_DATABASE=Vista Manufacturing
+
+OUI:B0FD0B3*
+ ID_OUI_FROM_DATABASE=DMAC Security LLC
+
+OUI:B0FD0B8*
+ ID_OUI_FROM_DATABASE=eSenseLab Ltd.
+
+OUI:B0FD0BA*
+ ID_OUI_FROM_DATABASE=TEMCO JAPAN CO., LTD.
+
+OUI:B0FD0BB*
+ ID_OUI_FROM_DATABASE=MartinLogan, Ltd.
+
+OUI:B0FD0BC*
+ ID_OUI_FROM_DATABASE=Haltian Products Oy
+
+OUI:B0FD0BD*
+ ID_OUI_FROM_DATABASE=Habana Labs LTD
+
OUI:B0FEBD*
ID_OUI_FROM_DATABASE=Private
@@ -80591,6 +81209,9 @@ OUI:B4C810*
OUI:B4CB57*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+OUI:B4CC04*
+ ID_OUI_FROM_DATABASE=Piranti
+
OUI:B4CCE9*
ID_OUI_FROM_DATABASE=PROSYST
@@ -81230,6 +81851,9 @@ OUI:B8D49D*
OUI:B8D50B*
ID_OUI_FROM_DATABASE=Sunitec Enterprise Co.,Ltd
+OUI:B8D526*
+ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+
OUI:B8D7AF*
ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
@@ -82454,6 +83078,9 @@ OUI:C09F05*
OUI:C09F42*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:C09FE1*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:C0A00D*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
@@ -82700,6 +83327,9 @@ OUI:C0F945*
OUI:C0F991*
ID_OUI_FROM_DATABASE=GME Standard Communications P/L
+OUI:C0FD84*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:C0FFD4*
ID_OUI_FROM_DATABASE=NETGEAR
@@ -82976,6 +83606,9 @@ OUI:C464B7*
OUI:C464E3*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:C46516*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
OUI:C46699*
ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
@@ -83195,6 +83828,9 @@ OUI:C4AE12*
OUI:C4B301*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:C4B36A*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:C4B512*
ID_OUI_FROM_DATABASE=General Electric Digital Energy
@@ -83228,6 +83864,9 @@ OUI:C4BED4*
OUI:C4C0AE*
ID_OUI_FROM_DATABASE=MIDORI ELECTRONIC CO., LTD.
+OUI:C4C138*
+ ID_OUI_FROM_DATABASE=OWLink Technology Inc
+
OUI:C4C19F*
ID_OUI_FROM_DATABASE=National Oilwell Varco Instrumentation, Monitoring, and Optimization (NOV IMO)
@@ -83279,6 +83918,9 @@ OUI:C4E032*
OUI:C4E17C*
ID_OUI_FROM_DATABASE=U2S co.
+OUI:C4E39F*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
OUI:C4E506*
ID_OUI_FROM_DATABASE=Piper Networks, Inc.
@@ -83480,6 +84122,9 @@ OUI:C8208E*
OUI:C82158*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:C821DA*
+ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
+
OUI:C825E1*
ID_OUI_FROM_DATABASE=Lemobile Information Technology (Beijing) Co., Ltd
@@ -83492,6 +84137,51 @@ OUI:C8292A*
OUI:C82A14*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:C82C2B0*
+ ID_OUI_FROM_DATABASE=Fungible, Inc.
+
+OUI:C82C2B1*
+ ID_OUI_FROM_DATABASE=Galgus
+
+OUI:C82C2B2*
+ ID_OUI_FROM_DATABASE=Repp Health
+
+OUI:C82C2B3*
+ ID_OUI_FROM_DATABASE=RF Engineering and Energy Resource
+
+OUI:C82C2B4*
+ ID_OUI_FROM_DATABASE=iWave Systems Tech Pvt Ltd
+
+OUI:C82C2B5*
+ ID_OUI_FROM_DATABASE=DALCO AG
+
+OUI:C82C2B6*
+ ID_OUI_FROM_DATABASE=Grav I.T.
+
+OUI:C82C2B7*
+ ID_OUI_FROM_DATABASE=Merpa Bilgi Islem Ltd.Sti
+
+OUI:C82C2B8*
+ ID_OUI_FROM_DATABASE=Verifone Systems (China),lnc.
+
+OUI:C82C2B9*
+ ID_OUI_FROM_DATABASE=BIOT Sp. z o.o.
+
+OUI:C82C2BA*
+ ID_OUI_FROM_DATABASE=Shiftall Inc.
+
+OUI:C82C2BB*
+ ID_OUI_FROM_DATABASE=Kunshan SVL Electric Co.,Ltd
+
+OUI:C82C2BC*
+ ID_OUI_FROM_DATABASE=Smart Wires Inc
+
+OUI:C82C2BD*
+ ID_OUI_FROM_DATABASE=UBITRON Co.,LTD
+
+OUI:C82C2BE*
+ ID_OUI_FROM_DATABASE=Fränkische Rohrwerke Gebr. Kirchner GmbH & Co. KG
+
OUI:C82E47*
ID_OUI_FROM_DATABASE=Suzhou SmartChip Semiconductor Co., LTD
@@ -83600,6 +84290,45 @@ OUI:C85B76*
OUI:C86000*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+OUI:C863140*
+ ID_OUI_FROM_DATABASE=Western Reserve Controls, Inc.
+
+OUI:C863141*
+ ID_OUI_FROM_DATABASE=Autonics Co., Ltd.
+
+OUI:C863142*
+ ID_OUI_FROM_DATABASE=Tymphany Acoustic Technology (Huizhou) Co., Ltd.
+
+OUI:C863143*
+ ID_OUI_FROM_DATABASE=TrackMan
+
+OUI:C863144*
+ ID_OUI_FROM_DATABASE=Shenzhen Zero Zero Infinity Technology Co.,Ltd.
+
+OUI:C863145*
+ ID_OUI_FROM_DATABASE=Meyer Electronics Limited
+
+OUI:C863146*
+ ID_OUI_FROM_DATABASE=GRINBI PARTNERS
+
+OUI:C863147*
+ ID_OUI_FROM_DATABASE=Shenzhen Wesion Technology Co., Ltd
+
+OUI:C863148*
+ ID_OUI_FROM_DATABASE=Thinci, Inc.
+
+OUI:C863149*
+ ID_OUI_FROM_DATABASE=Maxcom S.A.
+
+OUI:C86314A*
+ ID_OUI_FROM_DATABASE=Optictimes Co.,Ltd
+
+OUI:C86314B*
+ ID_OUI_FROM_DATABASE=Shenzhen Lihewei Electronics Co.,Ltd.Hunan Branch
+
+OUI:C86314D*
+ ID_OUI_FROM_DATABASE=Telematix AG
+
OUI:C863F1*
ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
@@ -83825,6 +84554,9 @@ OUI:C8B21E*
OUI:C8B373*
ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
+OUI:C8B422*
+ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
+
OUI:C8B5AD*
ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
@@ -83864,6 +84596,9 @@ OUI:C8C2FA*
OUI:C8C50E*
ID_OUI_FROM_DATABASE=Shenzhen Primestone Network Technologies.Co., Ltd.
+OUI:C8C64A*
+ ID_OUI_FROM_DATABASE=Flextronics Tech.(Ind) Pvt Ltd
+
OUI:C8C791*
ID_OUI_FROM_DATABASE=Zero1.tv GmbH
@@ -84261,7 +84996,7 @@ OUI:CC355A*
ID_OUI_FROM_DATABASE=SecuGen Corporation
OUI:CC37AB*
- ID_OUI_FROM_DATABASE=Edgecore Networks Corportation
+ ID_OUI_FROM_DATABASE=Edgecore Networks Corporation
OUI:CC398C*
ID_OUI_FROM_DATABASE=Shiningtek
@@ -84524,6 +85259,9 @@ OUI:CC9F7A*
OUI:CCA0E5*
ID_OUI_FROM_DATABASE=DZG Metering GmbH
+OUI:CCA12B*
+ ID_OUI_FROM_DATABASE=TCL King Electrical Appliances (Huizhou) Co., Ltd
+
OUI:CCA219*
ID_OUI_FROM_DATABASE=SHENZHEN ALONG INVESTMENT CO.,LTD
@@ -84896,6 +85634,9 @@ OUI:D0176A*
OUI:D017C2*
ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+OUI:D0196A*
+ ID_OUI_FROM_DATABASE=Ciena Corporation
+
OUI:D01AA7*
ID_OUI_FROM_DATABASE=UniPrint
@@ -84995,12 +85736,18 @@ OUI:D03972*
OUI:D039B3*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:D039EA*
+ ID_OUI_FROM_DATABASE=NetApp
+
OUI:D03DC3*
ID_OUI_FROM_DATABASE=AQ Corporation
OUI:D03E5C*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:D041C9*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:D0431E*
ID_OUI_FROM_DATABASE=Dell Inc.
@@ -85295,6 +86042,9 @@ OUI:D09B05*
OUI:D09C30*
ID_OUI_FROM_DATABASE=Foster Electric Company, Limited
+OUI:D09C7A*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
OUI:D09D0A*
ID_OUI_FROM_DATABASE=LINKCOM
@@ -85625,6 +86375,9 @@ OUI:D41F0C*
OUI:D4206D*
ID_OUI_FROM_DATABASE=HTC Corporation
+OUI:D420B0*
+ ID_OUI_FROM_DATABASE=Mist Systems, Inc.
+
OUI:D42122*
ID_OUI_FROM_DATABASE=Sercomm Corporation.
@@ -85712,6 +86465,9 @@ OUI:D43260*
OUI:D43266*
ID_OUI_FROM_DATABASE=Fike Corporation
+OUI:D4351D*
+ ID_OUI_FROM_DATABASE=Technicolor
+
OUI:D43639*
ID_OUI_FROM_DATABASE=Texas Instruments
@@ -85772,6 +86528,9 @@ OUI:D44C9C*
OUI:D44CA7*
ID_OUI_FROM_DATABASE=Informtekhnika & Communication, LLC
+OUI:D44DA4*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+
OUI:D44F80*
ID_OUI_FROM_DATABASE=Kemper Digital GmbH
@@ -85871,6 +86630,9 @@ OUI:D468BA*
OUI:D469A5*
ID_OUI_FROM_DATABASE=Miura Systems Ltd.
+OUI:D46A35*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:D46A6A*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
@@ -85916,6 +86678,9 @@ OUI:D476EA*
OUI:D47856*
ID_OUI_FROM_DATABASE=Avaya Inc
+OUI:D4789B*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:D479C3*
ID_OUI_FROM_DATABASE=Cameronet GmbH & Co. KG
@@ -86069,6 +86834,9 @@ OUI:D49CDD*
OUI:D49CF4*
ID_OUI_FROM_DATABASE=Palo Alto Networks
+OUI:D49DC0*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:D49E05*
ID_OUI_FROM_DATABASE=zte corporation
@@ -86198,6 +86966,9 @@ OUI:D4D184*
OUI:D4D249*
ID_OUI_FROM_DATABASE=Power Ethernet
+OUI:D4D252*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:D4D2E5*
ID_OUI_FROM_DATABASE=BKAV Corporation
@@ -86798,6 +87569,9 @@ OUI:D8B90E*
OUI:D8BB2C*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:D8BC59*
+ ID_OUI_FROM_DATABASE=Shenzhen DAPU Microelectronics Co., Ltd
+
OUI:D8BF4C*
ID_OUI_FROM_DATABASE=Victory Concept Electronics Limited
@@ -86843,6 +87617,9 @@ OUI:D8CE3A*
OUI:D8CF9C*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:D8D090*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
OUI:D8D1CB*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -87065,6 +87842,9 @@ OUI:DC293A*
OUI:DC2A14*
ID_OUI_FROM_DATABASE=Shanghai Longjing Technology Co.
+OUI:DC2AA1*
+ ID_OUI_FROM_DATABASE=MedHab LLC
+
OUI:DC2B2A*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -87263,6 +88043,9 @@ OUI:DC6672*
OUI:DC6723*
ID_OUI_FROM_DATABASE=barox Kommunikation GmbH
+OUI:DC680C*
+ ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
+
OUI:DC68EB*
ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
@@ -87281,6 +88064,9 @@ OUI:DC6F08*
OUI:DC7014*
ID_OUI_FROM_DATABASE=Private
+OUI:DC7137*
+ ID_OUI_FROM_DATABASE=zte corporation
+
OUI:DC7144*
ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
@@ -87314,6 +88100,9 @@ OUI:DC86D8*
OUI:DC8B28*
ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:DC8C37*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
OUI:DC9088*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -87389,6 +88178,9 @@ OUI:DCAF68*
OUI:DCB058*
ID_OUI_FROM_DATABASE=Bürkert Werke GmbH
+OUI:DCB082*
+ ID_OUI_FROM_DATABASE=Nokia
+
OUI:DCB3B4*
ID_OUI_FROM_DATABASE=Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.
@@ -87398,6 +88190,9 @@ OUI:DCB4AC*
OUI:DCB4C4*
ID_OUI_FROM_DATABASE=Microsoft XCG
+OUI:DCB808*
+ ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
+
OUI:DCBE7A*
ID_OUI_FROM_DATABASE=Zhejiang Nurotron Biotechnology Co.
@@ -87623,12 +88418,18 @@ OUI:DCFAD5*
OUI:DCFB02*
ID_OUI_FROM_DATABASE=BUFFALO.INC
+OUI:DCFB48*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
OUI:DCFE07*
ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
OUI:DCFE18*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+OUI:E002A5*
+ ID_OUI_FROM_DATABASE=ABB Robotics
+
OUI:E00370*
ID_OUI_FROM_DATABASE=ShenZhen Continental Wireless Technology Co., Ltd.
@@ -88100,6 +88901,9 @@ OUI:E0B2F1*
OUI:E0B52D*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:E0B655*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co., Ltd.
+
OUI:E0B6F50*
ID_OUI_FROM_DATABASE=BeSTAR Corporation
@@ -88217,6 +89021,9 @@ OUI:E0CBBC*
OUI:E0CBEE*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:E0CC7A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:E0CDFD*
ID_OUI_FROM_DATABASE=Beijing E3Control Technology Co, LTD
@@ -88268,6 +89075,9 @@ OUI:E0DB88*
OUI:E0DCA0*
ID_OUI_FROM_DATABASE=Siemens Industrial Automation Products Ltd Chengdu
+OUI:E0DCFF*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
OUI:E0DDC0*
ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
@@ -88361,6 +89171,48 @@ OUI:E41C4B*
OUI:E41D2D*
ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
+OUI:E41E0A0*
+ ID_OUI_FROM_DATABASE=Zavod № 423
+
+OUI:E41E0A1*
+ ID_OUI_FROM_DATABASE=Connected Cars A/S
+
+OUI:E41E0A2*
+ ID_OUI_FROM_DATABASE=IDvaco Private Limited
+
+OUI:E41E0A3*
+ ID_OUI_FROM_DATABASE=Avast Software s.r.o.
+
+OUI:E41E0A4*
+ ID_OUI_FROM_DATABASE=XPR Group
+
+OUI:E41E0A6*
+ ID_OUI_FROM_DATABASE=SFC Energy AG
+
+OUI:E41E0A7*
+ ID_OUI_FROM_DATABASE=Tritium Pty Ltd
+
+OUI:E41E0A8*
+ ID_OUI_FROM_DATABASE=SAGE Glass
+
+OUI:E41E0A9*
+ ID_OUI_FROM_DATABASE=B METERS S.R.L.
+
+OUI:E41E0AA*
+ ID_OUI_FROM_DATABASE=FireAngel Safety Technology Ltd
+
+OUI:E41E0AB*
+ ID_OUI_FROM_DATABASE=Safety Vision, LLC
+
+OUI:E41E0AC*
+ ID_OUI_FROM_DATABASE=TELETASK BELGIUM
+
+OUI:E41E0AD*
+ ID_OUI_FROM_DATABASE=ROMO Wind A/S
+
+OUI:E41E0AE*
+ ID_OUI_FROM_DATABASE=Shanghai LeXiang Technology Co., Ltd
+
OUI:E41F13*
ID_OUI_FROM_DATABASE=IBM Corp
@@ -88922,6 +89774,9 @@ OUI:E4F365*
OUI:E4F3E3*
ID_OUI_FROM_DATABASE=Shanghai iComhome Co.,Ltd.
+OUI:E4F3E8*
+ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+
OUI:E4F3F5*
ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
@@ -88967,6 +89822,9 @@ OUI:E4FFDD*
OUI:E80036*
ID_OUI_FROM_DATABASE=Befs co,. ltd
+OUI:E8018D*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:E8039A*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -89376,7 +90234,7 @@ OUI:E8A364*
ID_OUI_FROM_DATABASE=Signal Path International / Peachtree Audio
OUI:E8A4C1*
- ID_OUI_FROM_DATABASE=Deep Sea Electronics PLC
+ ID_OUI_FROM_DATABASE=Deep Sea Electronics Ltd
OUI:E8A788*
ID_OUI_FROM_DATABASE=XIAMEN LEELEN TECHNOLOGY CO., LTD
@@ -89444,6 +90302,9 @@ OUI:E8C229*
OUI:E8C320*
ID_OUI_FROM_DATABASE=Austco Communication Systems Pty Ltd
+OUI:E8C417*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
OUI:E8C57A*
ID_OUI_FROM_DATABASE=Ufispace Co., LTD.
@@ -89471,6 +90332,9 @@ OUI:E8D099*
OUI:E8D0FA*
ID_OUI_FROM_DATABASE=MKS Instruments Deutschland GmbH
+OUI:E8D0FC*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
OUI:E8D11B*
ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP
@@ -89537,6 +90401,9 @@ OUI:E8E776*
OUI:E8E875*
ID_OUI_FROM_DATABASE=iS5 Communications Inc.
+OUI:E8E8B7*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+
OUI:E8EA6A*
ID_OUI_FROM_DATABASE=StarTech.com
@@ -89546,6 +90413,9 @@ OUI:E8EADA*
OUI:E8EB11*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:E8ECA3*
+ ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co.Ltd
+
OUI:E8ED05*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
@@ -89783,6 +90653,9 @@ OUI:EC542E*
OUI:EC55F9*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:EC5623*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:EC58EA*
ID_OUI_FROM_DATABASE=Ruckus Wireless
@@ -90002,6 +90875,9 @@ OUI:ECAAA0*
OUI:ECADB8*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:ECADE0*
+ ID_OUI_FROM_DATABASE=D-Link International
+
OUI:ECAF97*
ID_OUI_FROM_DATABASE=GIT
@@ -90743,6 +91619,9 @@ OUI:F0B5D1*
OUI:F0B6EB*
ID_OUI_FROM_DATABASE=Poslab Technology Co., Ltd.
+OUI:F0B968*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
OUI:F0BCC8*
ID_OUI_FROM_DATABASE=MaxID (Pty) Ltd
@@ -90806,6 +91685,9 @@ OUI:F0D4E2*
OUI:F0D4F6*
ID_OUI_FROM_DATABASE=Lars Thrane A/S
+OUI:F0D4F7*
+ ID_OUI_FROM_DATABASE=varram system
+
OUI:F0D5BF*
ID_OUI_FROM_DATABASE=Intel Corporate
@@ -90929,6 +91811,9 @@ OUI:F0FDA0*
OUI:F0FE6B*
ID_OUI_FROM_DATABASE=Shanghai High-Flying Electronics Technology Co., Ltd
+OUI:F40270*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
OUI:F40304*
ID_OUI_FROM_DATABASE=Google, Inc.
@@ -91079,12 +91964,18 @@ OUI:F42B48*
OUI:F42C56*
ID_OUI_FROM_DATABASE=SENOR TECH CO LTD
+OUI:F42E7F*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
OUI:F430B9*
ID_OUI_FROM_DATABASE=Hewlett Packard
OUI:F431C3*
ID_OUI_FROM_DATABASE=Apple, Inc.
+OUI:F4323D*
+ ID_OUI_FROM_DATABASE=Sichuan tianyi kanghe communications co., LTD
+
OUI:F436E1*
ID_OUI_FROM_DATABASE=Abilis Systems SARL
@@ -91253,6 +92144,9 @@ OUI:F473CA*
OUI:F47626*
ID_OUI_FROM_DATABASE=Viltechmeda UAB
+OUI:F47960*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:F47A4E*
ID_OUI_FROM_DATABASE=Woojeon&Handan
@@ -91802,6 +92696,9 @@ OUI:F82F6A*
OUI:F82FA8*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:F83002*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:F83094*
ID_OUI_FROM_DATABASE=Alcatel-Lucent Telecom Limited
@@ -91859,6 +92756,9 @@ OUI:F8472D*
OUI:F84897*
ID_OUI_FROM_DATABASE=Hitachi, Ltd.
+OUI:F848FD*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
OUI:F84A73*
ID_OUI_FROM_DATABASE=EUMTECH CO., LTD
@@ -92102,6 +93002,9 @@ OUI:F89910*
OUI:F89955*
ID_OUI_FROM_DATABASE=Fortress Technology Inc
+OUI:F89A78*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:F89D0D*
ID_OUI_FROM_DATABASE=Control Technology Inc.
@@ -92207,6 +93110,9 @@ OUI:F8B568E*
OUI:F8B599*
ID_OUI_FROM_DATABASE=Guangzhou CHNAVS Digital Technology Co.,Ltd
+OUI:F8B797*
+ ID_OUI_FROM_DATABASE=NEC Platforms, Ltd.
+
OUI:F8B7E2*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -92327,6 +93233,9 @@ OUI:F8DF15*
OUI:F8DFA8*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:F8DFE1*
+ ID_OUI_FROM_DATABASE=MyLight Systems
+
OUI:F8E079*
ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
@@ -92336,6 +93245,9 @@ OUI:F8E44E*
OUI:F8E4FB*
ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
+OUI:F8E5CF*
+ ID_OUI_FROM_DATABASE=CGI IT UK LIMITED
+
OUI:F8E61A*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -92546,6 +93458,9 @@ OUI:FC2FEF*
OUI:FC3288*
ID_OUI_FROM_DATABASE=CELOT Wireless Co., Ltd
+OUI:FC3342*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
OUI:FC335F*
ID_OUI_FROM_DATABASE=Polyera
@@ -92801,6 +93716,9 @@ OUI:FCAA14*
OUI:FCAAB6*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:FCAB90*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:FCAD0F*
ID_OUI_FROM_DATABASE=QTS NETWORKS
@@ -92876,24 +93794,48 @@ OUI:FCCF62*
OUI:FCD2B60*
ID_OUI_FROM_DATABASE=CG POWER AND INDUSTRIAL SOLUTIONS LTD
+OUI:FCD2B61*
+ ID_OUI_FROM_DATABASE=LINK (FAR-EAST) CORPORATION
+
OUI:FCD2B62*
ID_OUI_FROM_DATABASE=Soma GmbH
OUI:FCD2B63*
ID_OUI_FROM_DATABASE=Coet Costruzioni Elettrotecniche
+OUI:FCD2B64*
+ ID_OUI_FROM_DATABASE=SHEN ZHEN XIN HAO YUAN PRECISION TECHNOLOGY CO.,L TD
+
OUI:FCD2B65*
ID_OUI_FROM_DATABASE=Grandway Technology (Shenzhen) Limited
+OUI:FCD2B66*
+ ID_OUI_FROM_DATABASE=Cirque Audio Technology Co.,Ltd
+
+OUI:FCD2B67*
+ ID_OUI_FROM_DATABASE=Teamly Digital
+
+OUI:FCD2B68*
+ ID_OUI_FROM_DATABASE=Oviss Labs Inc.
+
+OUI:FCD2B69*
+ ID_OUI_FROM_DATABASE=Winglet Systems Inc.
+
OUI:FCD2B6A*
ID_OUI_FROM_DATABASE=NREAL TECHNOLOGY LIMITED
OUI:FCD2B6B*
ID_OUI_FROM_DATABASE=T CHIP DIGITAL TECHNOLOGY CO.LTD
+OUI:FCD2B6C*
+ ID_OUI_FROM_DATABASE=Silicon (Shenzhen) Electronic Technology Co.,Ltd.
+
OUI:FCD2B6D*
ID_OUI_FROM_DATABASE=Bee Smart(Changzhou) Information Technology Co., Ltd
+OUI:FCD2B6E*
+ ID_OUI_FROM_DATABASE=Univer S.p.A.
+
OUI:FCD4F2*
ID_OUI_FROM_DATABASE=The Coca Cola Company
diff --git a/hwdb/20-acpi-vendor.hwdb b/hwdb/20-acpi-vendor.hwdb
index 3a857eb586..9628207720 100644
--- a/hwdb/20-acpi-vendor.hwdb
+++ b/hwdb/20-acpi-vendor.hwdb
@@ -24,6 +24,9 @@ acpi:AMDI*:
acpi:AMPC*:
ID_VENDOR_FROM_DATABASE=Ampere Computing
+acpi:AMZN*:
+ ID_VENDOR_FROM_DATABASE=Amazon Corporation
+
acpi:APMC*:
ID_VENDOR_FROM_DATABASE=Applied Micro Circuits Corporation
@@ -120,6 +123,9 @@ acpi:HTLM*:
acpi:HWPE*:
ID_VENDOR_FROM_DATABASE=Hewlett Packard Enterprise
+acpi:HXTS*:
+ ID_VENDOR_FROM_DATABASE=Guizhou Huaxintong Semiconductor Technology Co., Ltd
+
acpi:IBMX*:
ID_VENDOR_FROM_DATABASE=IBM
@@ -1947,6 +1953,9 @@ acpi:DMC*:
acpi:DMM*:
ID_VENDOR_FROM_DATABASE=Dimond Multimedia Systems Inc
+acpi:DMN*:
+ ID_VENDOR_FROM_DATABASE=Dimension Engineering LLC
+
acpi:DMO*:
ID_VENDOR_FROM_DATABASE=Data Modul AG
@@ -5547,6 +5556,9 @@ acpi:QLC*:
acpi:QQQ*:
ID_VENDOR_FROM_DATABASE=Chuomusen Co., Ltd.
+acpi:QSC*:
+ ID_VENDOR_FROM_DATABASE=QSC, LLC
+
acpi:QSI*:
ID_VENDOR_FROM_DATABASE=Quantum Solutions, Inc.
diff --git a/hwdb/20-acpi-vendor.hwdb.patch b/hwdb/20-acpi-vendor.hwdb.patch
index 88af2cb401..4a3588189b 100644
--- a/hwdb/20-acpi-vendor.hwdb.patch
+++ b/hwdb/20-acpi-vendor.hwdb.patch
@@ -1,5 +1,5 @@
---- 20-acpi-vendor.hwdb.base 2018-12-20 16:29:34.999977602 +0100
-+++ 20-acpi-vendor.hwdb 2018-12-20 16:29:35.022977859 +0100
+--- 20-acpi-vendor.hwdb.base 2019-02-14 10:59:47.388792656 +0100
++++ 20-acpi-vendor.hwdb 2019-02-14 10:59:47.398792674 +0100
@@ -3,6 +3,8 @@
# Data imported from:
# http://www.uefi.org/uefi-pnp-export
@@ -19,7 +19,7 @@
acpi:AMDI*:
ID_VENDOR_FROM_DATABASE=AMD
-@@ -271,6 +270,9 @@
+@@ -277,6 +276,9 @@
acpi:AAA*:
ID_VENDOR_FROM_DATABASE=Avolites Ltd
@@ -29,7 +29,7 @@
acpi:AAE*:
ID_VENDOR_FROM_DATABASE=Anatek Electronics Inc.
-@@ -298,6 +300,9 @@
+@@ -304,6 +306,9 @@
acpi:ABO*:
ID_VENDOR_FROM_DATABASE=D-Link Systems Inc
@@ -39,7 +39,7 @@
acpi:ABS*:
ID_VENDOR_FROM_DATABASE=Abaco Systems, Inc.
-@@ -343,7 +348,7 @@
+@@ -349,7 +354,7 @@
acpi:ACO*:
ID_VENDOR_FROM_DATABASE=Allion Computer Inc.
@@ -48,7 +48,7 @@
ID_VENDOR_FROM_DATABASE=Aspen Tech Inc
acpi:ACR*:
-@@ -616,6 +621,9 @@
+@@ -622,6 +627,9 @@
acpi:AMT*:
ID_VENDOR_FROM_DATABASE=AMT International Industry
@@ -58,7 +58,7 @@
acpi:AMX*:
ID_VENDOR_FROM_DATABASE=AMX LLC
-@@ -664,6 +672,9 @@
+@@ -670,6 +678,9 @@
acpi:AOA*:
ID_VENDOR_FROM_DATABASE=AOpen Inc.
@@ -68,7 +68,7 @@
acpi:AOE*:
ID_VENDOR_FROM_DATABASE=Advanced Optics Electronics, Inc.
-@@ -673,6 +684,9 @@
+@@ -679,6 +690,9 @@
acpi:AOT*:
ID_VENDOR_FROM_DATABASE=Alcatel
@@ -78,7 +78,7 @@
acpi:APC*:
ID_VENDOR_FROM_DATABASE=American Power Conversion
-@@ -848,7 +862,7 @@
+@@ -854,7 +868,7 @@
ID_VENDOR_FROM_DATABASE=Alps Electric Inc
acpi:AUO*:
@@ -87,7 +87,7 @@
acpi:AUR*:
ID_VENDOR_FROM_DATABASE=Aureal Semiconductor
-@@ -928,6 +942,9 @@
+@@ -934,6 +948,9 @@
acpi:AXE*:
ID_VENDOR_FROM_DATABASE=Axell Corporation
@@ -97,7 +97,7 @@
acpi:AXI*:
ID_VENDOR_FROM_DATABASE=American Magnetics
-@@ -1075,6 +1092,9 @@
+@@ -1081,6 +1098,9 @@
acpi:BML*:
ID_VENDOR_FROM_DATABASE=BIOMED Lab
@@ -107,7 +107,7 @@
acpi:BMS*:
ID_VENDOR_FROM_DATABASE=BIOMEDISYS
-@@ -1087,6 +1107,9 @@
+@@ -1093,6 +1113,9 @@
acpi:BNO*:
ID_VENDOR_FROM_DATABASE=Bang & Olufsen
@@ -117,7 +117,7 @@
acpi:BNS*:
ID_VENDOR_FROM_DATABASE=Boulder Nonlinear Systems
-@@ -1327,6 +1350,9 @@
+@@ -1333,6 +1356,9 @@
acpi:CHA*:
ID_VENDOR_FROM_DATABASE=Chase Research PLC
@@ -127,7 +127,7 @@
acpi:CHD*:
ID_VENDOR_FROM_DATABASE=ChangHong Electric Co.,Ltd
-@@ -1480,6 +1506,9 @@
+@@ -1486,6 +1512,9 @@
acpi:COD*:
ID_VENDOR_FROM_DATABASE=CODAN Pty. Ltd.
@@ -137,7 +137,7 @@
acpi:COI*:
ID_VENDOR_FROM_DATABASE=Codec Inc.
-@@ -1883,7 +1912,7 @@
+@@ -1889,7 +1918,7 @@
ID_VENDOR_FROM_DATABASE=Dragon Information Technology
acpi:DJE*:
@@ -146,7 +146,7 @@
acpi:DJP*:
ID_VENDOR_FROM_DATABASE=Maygay Machines, Ltd
-@@ -2206,6 +2235,9 @@
+@@ -2215,6 +2244,9 @@
acpi:EIN*:
ID_VENDOR_FROM_DATABASE=Elegant Invention
@@ -156,7 +156,7 @@
acpi:EKA*:
ID_VENDOR_FROM_DATABASE=MagTek Inc.
-@@ -2464,6 +2496,9 @@
+@@ -2473,6 +2505,9 @@
acpi:FCG*:
ID_VENDOR_FROM_DATABASE=First International Computer Ltd
@@ -166,7 +166,7 @@
acpi:FCS*:
ID_VENDOR_FROM_DATABASE=Focus Enhancements, Inc.
-@@ -2834,7 +2869,7 @@
+@@ -2843,7 +2878,7 @@
ID_VENDOR_FROM_DATABASE=General Standards Corporation
acpi:GSM*:
@@ -175,7 +175,7 @@
acpi:GSN*:
ID_VENDOR_FROM_DATABASE=Grandstream Networks, Inc.
-@@ -2935,6 +2970,9 @@
+@@ -2944,6 +2979,9 @@
acpi:HEC*:
ID_VENDOR_FROM_DATABASE=Hisense Electric Co., Ltd.
@@ -185,7 +185,7 @@
acpi:HEL*:
ID_VENDOR_FROM_DATABASE=Hitachi Micro Systems Europe Ltd
-@@ -3064,6 +3102,9 @@
+@@ -3073,6 +3111,9 @@
acpi:HSD*:
ID_VENDOR_FROM_DATABASE=HannStar Display Corp
@@ -195,7 +195,7 @@
acpi:HSM*:
ID_VENDOR_FROM_DATABASE=AT&T Microelectronics
-@@ -3187,6 +3228,9 @@
+@@ -3196,6 +3237,9 @@
acpi:ICI*:
ID_VENDOR_FROM_DATABASE=Infotek Communication Inc
@@ -205,7 +205,7 @@
acpi:ICM*:
ID_VENDOR_FROM_DATABASE=Intracom SA
-@@ -3280,6 +3324,9 @@
+@@ -3289,6 +3333,9 @@
acpi:IKE*:
ID_VENDOR_FROM_DATABASE=Ikegami Tsushinki Co. Ltd.
@@ -215,7 +215,7 @@
acpi:IKS*:
ID_VENDOR_FROM_DATABASE=Ikos Systems Inc
-@@ -3325,6 +3372,9 @@
+@@ -3334,6 +3381,9 @@
acpi:IMT*:
ID_VENDOR_FROM_DATABASE=Inmax Technology Corporation
@@ -225,7 +225,7 @@
acpi:INA*:
ID_VENDOR_FROM_DATABASE=Inventec Corporation
-@@ -3832,6 +3882,9 @@
+@@ -3841,6 +3891,9 @@
acpi:LAN*:
ID_VENDOR_FROM_DATABASE=Sodeman Lancom Inc
@@ -235,7 +235,7 @@
acpi:LAS*:
ID_VENDOR_FROM_DATABASE=LASAT Comm. A/S
-@@ -3877,6 +3930,9 @@
+@@ -3886,6 +3939,9 @@
acpi:LED*:
ID_VENDOR_FROM_DATABASE=Long Engineering Design Inc
@@ -245,7 +245,7 @@
acpi:LEG*:
ID_VENDOR_FROM_DATABASE=Legerity, Inc
-@@ -3892,6 +3948,9 @@
+@@ -3901,6 +3957,9 @@
acpi:LGC*:
ID_VENDOR_FROM_DATABASE=Logic Ltd
@@ -255,7 +255,7 @@
acpi:LGI*:
ID_VENDOR_FROM_DATABASE=Logitech Inc
-@@ -3943,6 +4002,9 @@
+@@ -3952,6 +4011,9 @@
acpi:LND*:
ID_VENDOR_FROM_DATABASE=Land Computer Company Ltd
@@ -265,7 +265,7 @@
acpi:LNK*:
ID_VENDOR_FROM_DATABASE=Link Tech Inc
-@@ -3977,7 +4039,7 @@
+@@ -3986,7 +4048,7 @@
ID_VENDOR_FROM_DATABASE=Design Technology
acpi:LPL*:
@@ -274,7 +274,7 @@
acpi:LSC*:
ID_VENDOR_FROM_DATABASE=LifeSize Communications
-@@ -4153,6 +4215,9 @@
+@@ -4162,6 +4224,9 @@
acpi:MCX*:
ID_VENDOR_FROM_DATABASE=Millson Custom Solutions Inc.
@@ -284,7 +284,7 @@
acpi:MDA*:
ID_VENDOR_FROM_DATABASE=Media4 Inc
-@@ -4384,6 +4449,9 @@
+@@ -4393,6 +4458,9 @@
acpi:MOM*:
ID_VENDOR_FROM_DATABASE=Momentum Data Systems
@@ -294,7 +294,7 @@
acpi:MOS*:
ID_VENDOR_FROM_DATABASE=Moses Corporation
-@@ -4609,6 +4677,9 @@
+@@ -4618,6 +4686,9 @@
acpi:NAL*:
ID_VENDOR_FROM_DATABASE=Network Alchemy
@@ -304,7 +304,7 @@
acpi:NAT*:
ID_VENDOR_FROM_DATABASE=NaturalPoint Inc.
-@@ -5113,6 +5184,9 @@
+@@ -5122,6 +5193,9 @@
acpi:PCX*:
ID_VENDOR_FROM_DATABASE=PC Xperten
@@ -314,7 +314,7 @@
acpi:PDM*:
ID_VENDOR_FROM_DATABASE=Psion Dacom Plc.
-@@ -5176,9 +5250,6 @@
+@@ -5185,9 +5259,6 @@
acpi:PHE*:
ID_VENDOR_FROM_DATABASE=Philips Medical Systems Boeblingen GmbH
@@ -324,7 +324,7 @@
acpi:PHL*:
ID_VENDOR_FROM_DATABASE=Philips Consumer Electronics Company
-@@ -5263,9 +5334,6 @@
+@@ -5272,9 +5343,6 @@
acpi:PNL*:
ID_VENDOR_FROM_DATABASE=Panelview, Inc.
@@ -334,7 +334,7 @@
acpi:PNR*:
ID_VENDOR_FROM_DATABASE=Planar Systems, Inc.
-@@ -5401,15 +5469,9 @@
+@@ -5410,15 +5478,9 @@
acpi:PTS*:
ID_VENDOR_FROM_DATABASE=Plain Tree Systems Inc
@@ -350,7 +350,7 @@
acpi:PVG*:
ID_VENDOR_FROM_DATABASE=Proview Global Co., Ltd
-@@ -5722,9 +5784,6 @@
+@@ -5734,9 +5796,6 @@
acpi:RTI*:
ID_VENDOR_FROM_DATABASE=Rancho Tech Inc
@@ -360,7 +360,7 @@
acpi:RTL*:
ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Company Ltd
-@@ -5890,9 +5949,6 @@
+@@ -5902,9 +5961,6 @@
acpi:SEE*:
ID_VENDOR_FROM_DATABASE=SeeColor Corporation
@@ -370,7 +370,7 @@
acpi:SEI*:
ID_VENDOR_FROM_DATABASE=Seitz & Associates Inc
-@@ -6346,6 +6402,9 @@
+@@ -6358,6 +6414,9 @@
acpi:SVD*:
ID_VENDOR_FROM_DATABASE=SVD Computer
@@ -380,7 +380,7 @@
acpi:SVI*:
ID_VENDOR_FROM_DATABASE=Sun Microsystems
-@@ -6430,6 +6489,9 @@
+@@ -6442,6 +6501,9 @@
acpi:SZM*:
ID_VENDOR_FROM_DATABASE=Shenzhen MTC Co., Ltd
@@ -390,7 +390,7 @@
acpi:TAA*:
ID_VENDOR_FROM_DATABASE=Tandberg
-@@ -6520,6 +6582,9 @@
+@@ -6532,6 +6594,9 @@
acpi:TDG*:
ID_VENDOR_FROM_DATABASE=Six15 Technologies
@@ -400,7 +400,7 @@
acpi:TDM*:
ID_VENDOR_FROM_DATABASE=Tandem Computer Europe Inc
-@@ -6562,6 +6627,9 @@
+@@ -6574,6 +6639,9 @@
acpi:TEV*:
ID_VENDOR_FROM_DATABASE=Televés, S.A.
@@ -410,7 +410,7 @@
acpi:TEZ*:
ID_VENDOR_FROM_DATABASE=Tech Source Inc.
-@@ -6676,9 +6744,6 @@
+@@ -6688,9 +6756,6 @@
acpi:TNC*:
ID_VENDOR_FROM_DATABASE=TNC Industrial Company Ltd
@@ -420,7 +420,7 @@
acpi:TNM*:
ID_VENDOR_FROM_DATABASE=TECNIMAGEN SA
-@@ -6985,14 +7050,14 @@
+@@ -6997,14 +7062,14 @@
acpi:UNC*:
ID_VENDOR_FROM_DATABASE=Unisys Corporation
@@ -441,7 +441,7 @@
acpi:UNI*:
ID_VENDOR_FROM_DATABASE=Uniform Industry Corp.
-@@ -7027,6 +7092,9 @@
+@@ -7039,6 +7104,9 @@
acpi:USA*:
ID_VENDOR_FROM_DATABASE=Utimaco Safeware AG
@@ -451,7 +451,7 @@
acpi:USD*:
ID_VENDOR_FROM_DATABASE=U.S. Digital Corporation
-@@ -7267,9 +7335,6 @@
+@@ -7279,9 +7347,6 @@
acpi:WAL*:
ID_VENDOR_FROM_DATABASE=Wave Access
@@ -461,7 +461,7 @@
acpi:WAV*:
ID_VENDOR_FROM_DATABASE=Wavephore
-@@ -7391,7 +7456,7 @@
+@@ -7403,7 +7468,7 @@
ID_VENDOR_FROM_DATABASE=WyreStorm Technologies LLC
acpi:WYS*:
@@ -470,7 +470,7 @@
acpi:WYT*:
ID_VENDOR_FROM_DATABASE=Wooyoung Image & Information Co.,Ltd.
-@@ -7405,9 +7470,6 @@
+@@ -7417,9 +7482,6 @@
acpi:XDM*:
ID_VENDOR_FROM_DATABASE=XDM Ltd.
@@ -480,7 +480,7 @@
acpi:XES*:
ID_VENDOR_FROM_DATABASE=Extreme Engineering Solutions, Inc.
-@@ -7438,9 +7500,6 @@
+@@ -7450,9 +7512,6 @@
acpi:XNT*:
ID_VENDOR_FROM_DATABASE=XN Technologies, Inc.
@@ -490,7 +490,7 @@
acpi:XQU*:
ID_VENDOR_FROM_DATABASE=SHANGHAI SVA-DAV ELECTRONICS CO., LTD
-@@ -7507,6 +7566,9 @@
+@@ -7519,6 +7578,9 @@
acpi:ZBX*:
ID_VENDOR_FROM_DATABASE=Zebax Technologies
diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
index 47508fa903..9ca2c7bd71 100644
--- a/hwdb/20-pci-vendor-model.hwdb
+++ b/hwdb/20-pci-vendor-model.hwdb
@@ -102,7 +102,7 @@ pci:v000000A7*
ID_VENDOR_FROM_DATABASE=Teles AG (Wrong ID)
pci:v00000100*
- ID_VENDOR_FROM_DATABASE=Thales e-Security
+ ID_VENDOR_FROM_DATABASE=nCipher Security
pci:v00000123*
ID_VENDOR_FROM_DATABASE=General Dynamics
@@ -737,6 +737,9 @@ pci:v00001000d00000014sv00008086sd00009480*
pci:v00001000d00000015*
ID_MODEL_FROM_DATABASE=MegaRAID Tri-Mode SAS3416
+pci:v00001000d00000015sv00001D49sd00000503*
+ ID_MODEL_FROM_DATABASE=MegaRAID Tri-Mode SAS3416 (ThinkSystem RAID 530-16i PCIe 12Gb Adapter)
+
pci:v00001000d00000016*
ID_MODEL_FROM_DATABASE=MegaRAID Tri-Mode SAS3508
@@ -758,9 +761,6 @@ pci:v00001000d00000016sv00001D49sd00000601*
pci:v00001000d00000016sv00001D49sd00000603*
ID_MODEL_FROM_DATABASE=MegaRAID Tri-Mode SAS3508 (ThinkSystem RAID 930-24i 4GB Flash PCIe 12Gb Adapter)
-pci:v00001000d00000016sv00001D49sd00000604*
- ID_MODEL_FROM_DATABASE=MegaRAID Tri-Mode SAS3508 (ThinkSystem RAID 930-8e 4GB Flash PCIe 12Gb Adapter)
-
pci:v00001000d00000016sv00008086sd0000352E*
ID_MODEL_FROM_DATABASE=MegaRAID Tri-Mode SAS3508 (Integrated RAID Module RMSP3CD080F)
@@ -1247,6 +1247,9 @@ pci:v00001000d0000005Fsv00001054sd0000306A*
pci:v00001000d0000005Fsv00001D49sd000004DB*
ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3008 [Fury] (ServeRAID M1210 SAS/SATA Controller)
+pci:v00001000d0000005Fsv00001D49sd00000504*
+ ID_MODEL_FROM_DATABASE=MegaRAID SAS-3 3008 [Fury] (ThinkSystem RAID 520-8i PCIe 12Gb Adapter)
+
pci:v00001000d00000060*
ID_MODEL_FROM_DATABASE=MegaRAID SAS 1078
@@ -1370,6 +1373,12 @@ pci:v00001000d00000071*
pci:v00001000d00000072*
ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon]
+pci:v00001000d00000072sv00001000sd00003040*
+ ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (9210-8i)
+
+pci:v00001000d00000072sv00001000sd00003080*
+ ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA])
+
pci:v00001000d00000072sv00001000sd000030B0*
ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA])
@@ -1389,7 +1398,7 @@ pci:v00001000d00000072sv00001028sd00001F20*
ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (PERC H200 Embedded)
pci:v00001000d00000072sv00001028sd00001F22*
- ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (Internal Tape Adapter)
+ ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (PERC H200 Internal Tape Adapter)
pci:v00001000d00000072sv00008086sd0000350F*
ID_MODEL_FROM_DATABASE=SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon] (RMS2LL040 RAID Controller)
@@ -1433,6 +1442,9 @@ pci:v00001000d00000073sv00001028sd00001F53*
pci:v00001000d00000073sv00001028sd00001F54*
ID_MODEL_FROM_DATABASE=MegaRAID SAS 2008 [Falcon] (PERC H310 Reserved)
+pci:v00001000d00000073sv00001028sd00001F78*
+ ID_MODEL_FROM_DATABASE=MegaRAID SAS 2008 [Falcon] (PERC H310)
+
pci:v00001000d00000073sv00001054sd00003035*
ID_MODEL_FROM_DATABASE=MegaRAID SAS 2008 [Falcon] (LSI MegaRAID SAS 9240-8i)
@@ -1685,6 +1697,9 @@ pci:v00001000d00000087*
pci:v00001000d00000087sv00001000sd00003020*
ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (9207-8i SAS2.1 HBA)
+pci:v00001000d00000087sv00001000sd00003030*
+ ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (SAS9207-4i4e)
+
pci:v00001000d00000087sv00001000sd00003040*
ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (9207-8e SAS2.1 HBA)
@@ -1775,6 +1790,9 @@ pci:v00001000d00000097sv00001028sd00001FD2*
pci:v00001000d00000097sv00001028sd00001FD3*
ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (HBA330 MMZ)
+pci:v00001000d00000097sv000015D9sd00000808*
+ ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (AOC-S3008L-L8e)
+
pci:v00001000d00000097sv00001BD4sd00000011*
ID_MODEL_FROM_DATABASE=SAS3008 PCI-Express Fusion-MPT SAS-3 (Inspur 12Gb 8i-3008 IT SAS HBA)
@@ -2303,6 +2321,24 @@ pci:v00001002d0000131C*
pci:v00001002d0000131D*
ID_MODEL_FROM_DATABASE=Kaveri [Radeon R6 Graphics]
+pci:v00001002d000013E9*
+ ID_MODEL_FROM_DATABASE=Ariel
+
+pci:v00001002d0000154C*
+ ID_MODEL_FROM_DATABASE=Kryptos
+
+pci:v00001002d0000154E*
+ ID_MODEL_FROM_DATABASE=Garfield
+
+pci:v00001002d00001551*
+ ID_MODEL_FROM_DATABASE=Arlene
+
+pci:v00001002d00001552*
+ ID_MODEL_FROM_DATABASE=Pooky
+
+pci:v00001002d00001561*
+ ID_MODEL_FROM_DATABASE=Anubis
+
pci:v00001002d000015D8*
ID_MODEL_FROM_DATABASE=Picasso
@@ -2315,8 +2351,20 @@ pci:v00001002d000015DDsv0000103Csd000083C6*
pci:v00001002d000015DDsv00001458sd0000D000*
ID_MODEL_FROM_DATABASE=Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series] (Radeon RX Vega 11)
+pci:v00001002d000015DE*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2/Fenghuang HDMI/DP Audio Controller
+
+pci:v00001002d000015DF*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2/Fenghuang/Renoir Cryptographic Coprocessor
+
pci:v00001002d000015FF*
- ID_MODEL_FROM_DATABASE=Vega 11 [Radeon Vega 28 Mobile]
+ ID_MODEL_FROM_DATABASE=Fenghuang [Zhongshan Subor Z+]
+
+pci:v00001002d00001607*
+ ID_MODEL_FROM_DATABASE=Arden
+
+pci:v00001002d00001636*
+ ID_MODEL_FROM_DATABASE=Renoir
pci:v00001002d00001714*
ID_MODEL_FROM_DATABASE=BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
@@ -2324,6 +2372,9 @@ pci:v00001002d00001714*
pci:v00001002d00001714sv0000103Csd0000168B*
ID_MODEL_FROM_DATABASE=BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series] (ProBook 4535s)
+pci:v00001002d00002191*
+ ID_MODEL_FROM_DATABASE=TU116M
+
pci:v00001002d00003150*
ID_MODEL_FROM_DATABASE=RV380/M24 [Mobility Radeon X600]
@@ -2562,28 +2613,34 @@ pci:v00001002d00004337sv0000103Csd00000850*
ID_MODEL_FROM_DATABASE=RS200M [Radeon IGP 330M/340M/345M/350M] (Radeon IGP 345M)
pci:v00001002d00004341*
- ID_MODEL_FROM_DATABASE=IXP150 AC'97 Audio Controller
+ ID_MODEL_FROM_DATABASE=SB200 AC97 Audio Controller
pci:v00001002d00004342*
- ID_MODEL_FROM_DATABASE=IXP200 3COM 3C920B Ethernet Controller
+ ID_MODEL_FROM_DATABASE=SB200 PCI to PCI Bridge
pci:v00001002d00004345*
- ID_MODEL_FROM_DATABASE=EHCI USB Controller
+ ID_MODEL_FROM_DATABASE=SB200 EHCI USB Controller
+
+pci:v00001002d00004346*
+ ID_MODEL_FROM_DATABASE=Crayola 6 [XENOS Parent Die (XBOX 360)]
pci:v00001002d00004347*
- ID_MODEL_FROM_DATABASE=OHCI USB Controller #1
+ ID_MODEL_FROM_DATABASE=SB200 OHCI USB Controller #1
pci:v00001002d00004348*
- ID_MODEL_FROM_DATABASE=OHCI USB Controller #2
+ ID_MODEL_FROM_DATABASE=SB200 OHCI USB Controller #2
pci:v00001002d00004349*
- ID_MODEL_FROM_DATABASE=Dual Channel Bus Master PCI IDE Controller
+ ID_MODEL_FROM_DATABASE=SB200 IDE Controller
+
+pci:v00001002d0000434C*
+ ID_MODEL_FROM_DATABASE=SB200 PCI to LPC Bridge
pci:v00001002d0000434D*
- ID_MODEL_FROM_DATABASE=IXP AC'97 Modem
+ ID_MODEL_FROM_DATABASE=SB200 AC97 Modem Controller
pci:v00001002d00004353*
- ID_MODEL_FROM_DATABASE=SMBus
+ ID_MODEL_FROM_DATABASE=SB200 SMBus Controller
pci:v00001002d00004354*
ID_MODEL_FROM_DATABASE=215CT [Mach64 CT PCI]
@@ -2592,13 +2649,34 @@ pci:v00001002d00004358*
ID_MODEL_FROM_DATABASE=Mach64 CX [Graphics Xpression]
pci:v00001002d00004361*
- ID_MODEL_FROM_DATABASE=IXP SB300 AC'97 Audio Controller
+ ID_MODEL_FROM_DATABASE=SB300 AC'97 Audio Controller
+
+pci:v00001002d00004362*
+ ID_MODEL_FROM_DATABASE=SB300 PCI to PCI Bridge
pci:v00001002d00004363*
- ID_MODEL_FROM_DATABASE=SMBus
+ ID_MODEL_FROM_DATABASE=SB300 SMBus Controller
+
+pci:v00001002d00004365*
+ ID_MODEL_FROM_DATABASE=SB300 USB Controller (EHCI)
+
+pci:v00001002d00004367*
+ ID_MODEL_FROM_DATABASE=SB300 USB Controller (EHCI)
+
+pci:v00001002d00004368*
+ ID_MODEL_FROM_DATABASE=SB300 USB Controller (EHCI)
+
+pci:v00001002d00004369*
+ ID_MODEL_FROM_DATABASE=SB300 IDE Controller
+
+pci:v00001002d0000436C*
+ ID_MODEL_FROM_DATABASE=SB300 PCI to LPC Bridge
+
+pci:v00001002d0000436D*
+ ID_MODEL_FROM_DATABASE=SB300 AC97 Modem Controller
pci:v00001002d0000436E*
- ID_MODEL_FROM_DATABASE=436E Serial ATA Controller
+ ID_MODEL_FROM_DATABASE=SB300 Serial ATA Controller
pci:v00001002d00004370*
ID_MODEL_FROM_DATABASE=IXP SB400 AC'97 Audio Controller
@@ -3035,6 +3113,9 @@ pci:v00001002d00004391sv00001043sd000082EF*
pci:v00001002d00004391sv00001043sd00008443*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] (M5A88-V EVO)
+pci:v00001002d00004391sv00001043sd000084DD*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] (M5A99X EVO (R1.0) SB950)
+
pci:v00001002d00004391sv0000105Bsd00000E13*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode] (N15235/A74MX mainboard / AMD SB700)
@@ -3140,6 +3221,9 @@ pci:v00001002d00004399sv0000174Bsd00001001*
pci:v00001002d0000439C*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 IDE Controller
+pci:v00001002d0000439Csv00001002sd00004392*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 IDE Controller (MSI MS-7713 motherboard)
+
pci:v00001002d0000439Csv00001019sd00002120*
ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 IDE Controller (A785GM-M)
@@ -3188,6 +3272,12 @@ pci:v00001002d00004437*
pci:v00001002d00004554*
ID_MODEL_FROM_DATABASE=210888ET [Mach64 ET]
+pci:v00001002d00004630*
+ ID_MODEL_FROM_DATABASE=XENOS Parent Die (XBOX 360)
+
+pci:v00001002d00004631*
+ ID_MODEL_FROM_DATABASE=XENOS Daughter Die (XBOX 360)
+
pci:v00001002d00004654*
ID_MODEL_FROM_DATABASE=Mach64 VT
@@ -3428,6 +3518,168 @@ pci:v00001002d0000475Asv00001002sd00000087*
pci:v00001002d0000475Asv00001002sd0000475A*
ID_MODEL_FROM_DATABASE=3D Rage IIC AGP (Rage IIC AGP)
+pci:v00001002d00004845*
+ ID_MODEL_FROM_DATABASE=Xilleon 220 HBIU for HDTV2
+
+pci:v00001002d00004846*
+ ID_MODEL_FROM_DATABASE=Xilleon 220 IDE for HDTV2
+
+pci:v00001002d00004847*
+ ID_MODEL_FROM_DATABASE=Xilleon 220 USB for HDTV2
+
+pci:v00001002d00004848*
+ ID_MODEL_FROM_DATABASE=Xilleon 220 DAIO-0 for HDTV2
+
+pci:v00001002d00004849*
+ ID_MODEL_FROM_DATABASE=Xilleon 220 DAIO-1 for HDTV2
+
+pci:v00001002d0000484A*
+ ID_MODEL_FROM_DATABASE=Xilleon 220 LPC for HDTV2
+
+pci:v00001002d00004850*
+ ID_MODEL_FROM_DATABASE=Xilleon 215 HBIU for X215
+
+pci:v00001002d00004851*
+ ID_MODEL_FROM_DATABASE=Xilleon 215 IDE for X215
+
+pci:v00001002d00004852*
+ ID_MODEL_FROM_DATABASE=Xilleon 215 USB for X215
+
+pci:v00001002d00004853*
+ ID_MODEL_FROM_DATABASE=Xilleon 215 DAIO-0 for X215
+
+pci:v00001002d00004854*
+ ID_MODEL_FROM_DATABASE=Xilleon 215 DAIO-1 for X215
+
+pci:v00001002d00004855*
+ ID_MODEL_FROM_DATABASE=Xilleon 225 HBIU for X225
+
+pci:v00001002d00004856*
+ ID_MODEL_FROM_DATABASE=Xilleon 225 IDE for X225
+
+pci:v00001002d00004857*
+ ID_MODEL_FROM_DATABASE=Xilleon 225 USB for X225
+
+pci:v00001002d00004858*
+ ID_MODEL_FROM_DATABASE=Xilleon 225 DAIO-0 for X225
+
+pci:v00001002d00004859*
+ ID_MODEL_FROM_DATABASE=Xilleon 225 DAIO-1 for X225
+
+pci:v00001002d00004860*
+ ID_MODEL_FROM_DATABASE=Xilleon 210 HBIU for X210
+
+pci:v00001002d00004861*
+ ID_MODEL_FROM_DATABASE=Xilleon 210 IDE for X210
+
+pci:v00001002d00004862*
+ ID_MODEL_FROM_DATABASE=Xilleon 210 USB for X210
+
+pci:v00001002d00004863*
+ ID_MODEL_FROM_DATABASE=Xilleon 210 DAIO-0 for X210
+
+pci:v00001002d00004864*
+ ID_MODEL_FROM_DATABASE=Xilleon 210 DAIO-1 for X210
+
+pci:v00001002d00004865*
+ ID_MODEL_FROM_DATABASE=Xilleon 226 HBIU for X226
+
+pci:v00001002d00004866*
+ ID_MODEL_FROM_DATABASE=Xilleon 226 IDE for X226
+
+pci:v00001002d00004867*
+ ID_MODEL_FROM_DATABASE=Xilleon 226 USB for X226
+
+pci:v00001002d00004868*
+ ID_MODEL_FROM_DATABASE=Xilleon 226 DAIO-0 for X226
+
+pci:v00001002d00004869*
+ ID_MODEL_FROM_DATABASE=Xilleon 226 DAIO-1 for X226
+
+pci:v00001002d0000486A*
+ ID_MODEL_FROM_DATABASE=Xilleon 240S HBIU for X240S
+
+pci:v00001002d0000486B*
+ ID_MODEL_FROM_DATABASE=Xilleon 240H HBIU for X240H
+
+pci:v00001002d0000486C*
+ ID_MODEL_FROM_DATABASE=Xilleon 240S USB for X240S
+
+pci:v00001002d0000486D*
+ ID_MODEL_FROM_DATABASE=Xilleon 240H USB for X240H
+
+pci:v00001002d0000486E*
+ ID_MODEL_FROM_DATABASE=Xilleon 250 USB 1.1 for X250
+
+pci:v00001002d0000486F*
+ ID_MODEL_FROM_DATABASE=Xilleon 260 USB 1.1 for X260
+
+pci:v00001002d00004870*
+ ID_MODEL_FROM_DATABASE=Xilleon 250 HBIU for X250
+
+pci:v00001002d00004871*
+ ID_MODEL_FROM_DATABASE=Xilleon 250 IDE for X250
+
+pci:v00001002d00004872*
+ ID_MODEL_FROM_DATABASE=Xilleon 234/235 HBIU for X234/X235
+
+pci:v00001002d00004873*
+ ID_MODEL_FROM_DATABASE=Xilleon 244/245 HBIU for X244/X245
+
+pci:v00001002d00004874*
+ ID_MODEL_FROM_DATABASE=Xilleon 234/235 USB 1.1 for X234/X235
+
+pci:v00001002d00004875*
+ ID_MODEL_FROM_DATABASE=Xilleon 260 HBIU for X260
+
+pci:v00001002d00004876*
+ ID_MODEL_FROM_DATABASE=Xilleon 260 IDE for X260
+
+pci:v00001002d00004877*
+ ID_MODEL_FROM_DATABASE=Xilleon 244/245 USB 1.1 for X244/X245
+
+pci:v00001002d00004878*
+ ID_MODEL_FROM_DATABASE=Xilleon 270 HBIU for X270
+
+pci:v00001002d0000487B*
+ ID_MODEL_FROM_DATABASE=Xilleon 242 HBIU for X242
+
+pci:v00001002d0000487D*
+ ID_MODEL_FROM_DATABASE=Xilleon 242 USB 1.1 for X242
+
+pci:v00001002d00004880*
+ ID_MODEL_FROM_DATABASE=Xilleon 254 HBIU for X254
+
+pci:v00001002d00004881*
+ ID_MODEL_FROM_DATABASE=Xilleon 254 USB 1.1 for X254
+
+pci:v00001002d00004882*
+ ID_MODEL_FROM_DATABASE=Xilleon 255 HBIU for X255
+
+pci:v00001002d00004883*
+ ID_MODEL_FROM_DATABASE=Xilleon 255 USB 1.1 for X255
+
+pci:v00001002d00004884*
+ ID_MODEL_FROM_DATABASE=Xilleon 243 HBIU for X243
+
+pci:v00001002d00004885*
+ ID_MODEL_FROM_DATABASE=Xilleon 243 USB 1.1 for X243
+
+pci:v00001002d00004886*
+ ID_MODEL_FROM_DATABASE=Xilleon 233 HBIU for X233
+
+pci:v00001002d00004887*
+ ID_MODEL_FROM_DATABASE=Xilleon 233 USB 1.1 for X233
+
+pci:v00001002d00004888*
+ ID_MODEL_FROM_DATABASE=Xilleon 143 HBIU for X143
+
+pci:v00001002d00004889*
+ ID_MODEL_FROM_DATABASE=Xilleon 143 HBIU for X143L
+
+pci:v00001002d0000488A*
+ ID_MODEL_FROM_DATABASE=Xilleon 143 HBIU for X143S
+
pci:v00001002d00004966*
ID_MODEL_FROM_DATABASE=RV250 [Radeon 9000 Series]
@@ -4844,12 +5096,6 @@ pci:v00001002d00006601*
pci:v00001002d00006601sv0000103Csd00002100*
ID_MODEL_FROM_DATABASE=Mars [Radeon HD 8730M] (FirePro M4100)
-pci:v00001002d00006602*
- ID_MODEL_FROM_DATABASE=Mars
-
-pci:v00001002d00006603*
- ID_MODEL_FROM_DATABASE=Mars
-
pci:v00001002d00006604*
ID_MODEL_FROM_DATABASE=Opal XT [Radeon R7 M265/M365X/M465]
@@ -4946,15 +5192,6 @@ pci:v00001002d00006613sv0000148Csd00007340*
pci:v00001002d00006613sv00001682sd00007240*
ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340] (R7 240 2048 MB)
-pci:v00001002d00006620*
- ID_MODEL_FROM_DATABASE=Mars
-
-pci:v00001002d00006621*
- ID_MODEL_FROM_DATABASE=Mars PRO
-
-pci:v00001002d00006623*
- ID_MODEL_FROM_DATABASE=Mars
-
pci:v00001002d00006631*
ID_MODEL_FROM_DATABASE=Oland
@@ -5070,40 +5307,40 @@ pci:v00001002d0000665Fsv00001682sd00007360*
ID_MODEL_FROM_DATABASE=Tobago PRO [Radeon R7 360 / R9 360 OEM] (Radeon R7 360)
pci:v00001002d00006660*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520]
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile]
pci:v00001002d00006660sv00001028sd000005EA*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon HD 8670M)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon HD 8670M)
pci:v00001002d00006660sv00001028sd000006BF*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon R5 M335)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon R5 M335)
pci:v00001002d00006660sv0000103Csd00001970*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon HD 8670M)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon HD 8670M)
pci:v00001002d00006660sv0000103Csd000080BE*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon R5 M330)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon R5 M330)
pci:v00001002d00006660sv0000103Csd00008136*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon R5 M330)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon R5 M330)
pci:v00001002d00006660sv0000103Csd00008329*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon R7 M520)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon R7 M520)
pci:v00001002d00006660sv000017AAsd00003633*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon R5 A330)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon R5 A330)
pci:v00001002d00006660sv000017AAsd00003804*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon R5 M330)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon R5 M330)
pci:v00001002d00006660sv000017AAsd00003809*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon R5 M330)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon R5 M330)
pci:v00001002d00006660sv000017AAsd0000381A*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon R5 M430)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon R5 M430)
pci:v00001002d00006660sv000017AAsd0000390C*
- ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520] (Radeon R5 M330)
+ ID_MODEL_FROM_DATABASE=Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile] (Radeon R5 M330)
pci:v00001002d00006663*
ID_MODEL_FROM_DATABASE=Sun PRO [Radeon HD 8570A/8570M]
@@ -5118,10 +5355,13 @@ pci:v00001002d00006664*
ID_MODEL_FROM_DATABASE=Jet XT [Radeon R5 M240]
pci:v00001002d00006665*
- ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230]
+ ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520 Mobile]
+
+pci:v00001002d00006665sv000017AAsd00001309*
+ ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520 Mobile] (Radeon R7 M260DX)
pci:v00001002d00006665sv000017AAsd0000368F*
- ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230] (Radeon R5 A230)
+ ID_MODEL_FROM_DATABASE=Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520 Mobile] (Radeon R5 A230)
pci:v00001002d00006667*
ID_MODEL_FROM_DATABASE=Jet ULT [Radeon R5 M230]
@@ -5145,7 +5385,7 @@ pci:v00001002d000066A7*
ID_MODEL_FROM_DATABASE=Vega 20 [Radeon Pro Vega 20]
pci:v00001002d000066AF*
- ID_MODEL_FROM_DATABASE=Vega 20
+ ID_MODEL_FROM_DATABASE=Vega 20 [Radeon VII]
pci:v00001002d00006704*
ID_MODEL_FROM_DATABASE=Cayman PRO GL [FirePro V7900]
@@ -7785,7 +8025,7 @@ pci:v00001002d00006867*
ID_MODEL_FROM_DATABASE=Vega 10 XL [Radeon Pro Vega 56]
pci:v00001002d00006868*
- ID_MODEL_FROM_DATABASE=Vega 10 [Radeon PRO WX 8100]
+ ID_MODEL_FROM_DATABASE=Vega 10 [Radeon PRO WX 8100/8200]
pci:v00001002d0000686C*
ID_MODEL_FROM_DATABASE=Vega 10 [Radeon Instinct MI25 MxGPU]
@@ -9330,11 +9570,14 @@ pci:v00001002d00006939sv0000174Bsd0000E308*
ID_MODEL_FROM_DATABASE=Tonga PRO [Radeon R9 285/380] (Radeon R9 380 Nitro 4G D5)
pci:v00001002d0000694C*
- ID_MODEL_FROM_DATABASE=Polaris 22 [Radeon RX Vega M GH]
+ ID_MODEL_FROM_DATABASE=Polaris 22 XT [Radeon RX Vega M GH]
pci:v00001002d0000694E*
ID_MODEL_FROM_DATABASE=Polaris 22 XL [Radeon RX Vega M GL]
+pci:v00001002d0000694F*
+ ID_MODEL_FROM_DATABASE=Polaris 22 MGL XL [Radeon Pro WX Vega M GL]
+
pci:v00001002d00006980*
ID_MODEL_FROM_DATABASE=Polaris12
@@ -9378,7 +9621,7 @@ pci:v00001002d000069A3*
ID_MODEL_FROM_DATABASE=Vega 12
pci:v00001002d000069AF*
- ID_MODEL_FROM_DATABASE=Vega 12
+ ID_MODEL_FROM_DATABASE=Vega 12 [Radeon Pro Vega 20]
pci:v00001002d00006FDF*
ID_MODEL_FROM_DATABASE=Polaris 20 XL [Radeon RX 580 2048SP]
@@ -10673,6 +10916,12 @@ pci:v00001002d00009874sv000017AAsd00005116*
pci:v00001002d00009874sv000017AAsd00005118*
ID_MODEL_FROM_DATABASE=Wani [Radeon R5/R6/R7 Graphics] (Radeon R5 Graphics)
+pci:v00001002d00009890*
+ ID_MODEL_FROM_DATABASE=Amur
+
+pci:v00001002d000098C0*
+ ID_MODEL_FROM_DATABASE=Nolan
+
pci:v00001002d000098E4*
ID_MODEL_FROM_DATABASE=Stoney [Radeon R2/R3/R4/R5 Graphics]
@@ -10754,12 +11003,30 @@ pci:v00001002d00009918*
pci:v00001002d00009919*
ID_MODEL_FROM_DATABASE=Trinity [Radeon HD 7500G]
+pci:v00001002d0000991E*
+ ID_MODEL_FROM_DATABASE=Bishop
+
pci:v00001002d00009920*
ID_MODEL_FROM_DATABASE=Liverpool [Playstation 4 APU]
pci:v00001002d00009921*
ID_MODEL_FROM_DATABASE=Liverpool HDMI/DP Audio Controller
+pci:v00001002d00009922*
+ ID_MODEL_FROM_DATABASE=Starshp
+
+pci:v00001002d00009923*
+ ID_MODEL_FROM_DATABASE=Starsha2 [Kingston/Clayton]
+
+pci:v00001002d00009924*
+ ID_MODEL_FROM_DATABASE=Gladius
+
+pci:v00001002d00009925*
+ ID_MODEL_FROM_DATABASE=Kingston/Clayton/Jupiter/Gladius/Montego HDMI Controller
+
+pci:v00001002d00009926*
+ ID_MODEL_FROM_DATABASE=Jupiter
+
pci:v00001002d00009990*
ID_MODEL_FROM_DATABASE=Trinity 2 [Radeon HD 7520G]
@@ -10893,7 +11160,7 @@ pci:v00001002d0000AAA0*
ID_MODEL_FROM_DATABASE=Tahiti HDMI Audio [Radeon HD 7870 XT / 7950/7970]
pci:v00001002d0000AAB0*
- ID_MODEL_FROM_DATABASE=Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series]
+ ID_MODEL_FROM_DATABASE=Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000 Series]
pci:v00001002d0000AAC0*
ID_MODEL_FROM_DATABASE=Tobago HDMI Audio [Radeon R7 360 / R9 360 OEM]
@@ -10914,14 +11181,77 @@ pci:v00001002d0000AAE8*
ID_MODEL_FROM_DATABASE=Fiji HDMI/DP Audio [Radeon R9 Nano / FURY/FURY X]
pci:v00001002d0000AAF0*
- ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 570/580]
+ ID_MODEL_FROM_DATABASE=Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590]
+
+pci:v00001002d0000AAF8*
+ ID_MODEL_FROM_DATABASE=Vega 10 HDMI Audio [Radeon Vega 56/64]
+
+pci:v00001002d0000AB00*
+ ID_MODEL_FROM_DATABASE=Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X]
+
+pci:v00001002d0000AB08*
+ ID_MODEL_FROM_DATABASE=Polaris 22 HDMI Audio
+
+pci:v00001002d0000AB10*
+ ID_MODEL_FROM_DATABASE=Lexa HDMI Audio
+
+pci:v00001002d0000AB18*
+ ID_MODEL_FROM_DATABASE=Vega 12 HDMI Audio
+
+pci:v00001002d0000AB20*
+ ID_MODEL_FROM_DATABASE=Vega 20 HDMI Audio [Radeon VII]
+
+pci:v00001002d0000AB38*
+ ID_MODEL_FROM_DATABASE=Navi 10 HDMI Audio
pci:v00001002d0000AC00*
- ID_MODEL_FROM_DATABASE=Theater 600 Pro
+ ID_MODEL_FROM_DATABASE=Theater 506 World-Wide Analog Decoder
+
+pci:v00001002d0000AC01*
+ ID_MODEL_FROM_DATABASE=Theater 506 World-Wide Analog Decoder
pci:v00001002d0000AC02*
ID_MODEL_FROM_DATABASE=TV Wonder HD 600 PCIe
+pci:v00001002d0000AC03*
+ ID_MODEL_FROM_DATABASE=Theater 506 PCIe
+
+pci:v00001002d0000AC04*
+ ID_MODEL_FROM_DATABASE=Theater 506 USB
+
+pci:v00001002d0000AC05*
+ ID_MODEL_FROM_DATABASE=Theater 506 USB
+
+pci:v00001002d0000AC06*
+ ID_MODEL_FROM_DATABASE=Theater 506 External USB
+
+pci:v00001002d0000AC07*
+ ID_MODEL_FROM_DATABASE=Theater 506 External USB
+
+pci:v00001002d0000AC08*
+ ID_MODEL_FROM_DATABASE=Theater 506A World-Wide Analog Decoder + Demodulator
+
+pci:v00001002d0000AC09*
+ ID_MODEL_FROM_DATABASE=Theater 506A World-Wide Analog Decoder + Demodulator
+
+pci:v00001002d0000AC0A*
+ ID_MODEL_FROM_DATABASE=Theater 506A PCIe
+
+pci:v00001002d0000AC0B*
+ ID_MODEL_FROM_DATABASE=Theater 506A PCIe
+
+pci:v00001002d0000AC0C*
+ ID_MODEL_FROM_DATABASE=Theater 506A USB
+
+pci:v00001002d0000AC0D*
+ ID_MODEL_FROM_DATABASE=Theater 506A USB
+
+pci:v00001002d0000AC0E*
+ ID_MODEL_FROM_DATABASE=Theater 506A External USB
+
+pci:v00001002d0000AC0F*
+ ID_MODEL_FROM_DATABASE=Theater 506A External USB
+
pci:v00001002d0000AC12*
ID_MODEL_FROM_DATABASE=Theater HD T507 (DVB-T) TV tuner/capture device
@@ -12446,6 +12776,93 @@ pci:v00001022d00001303*
pci:v00001022d00001304*
ID_MODEL_FROM_DATABASE=Family 11h Processor Link Control
+pci:v00001022d00001305*
+ ID_MODEL_FROM_DATABASE=Griffin Function 5
+
+pci:v00001022d00001306*
+ ID_MODEL_FROM_DATABASE=Griffin Function 6
+
+pci:v00001022d00001307*
+ ID_MODEL_FROM_DATABASE=Griffin Function 7
+
+pci:v00001022d00001308*
+ ID_MODEL_FROM_DATABASE=Kaveri Audio Controller
+
+pci:v00001022d00001314*
+ ID_MODEL_FROM_DATABASE=Wrestler/Bheem/Ontario/Krishna Audio Controller
+
+pci:v00001022d000013E0*
+ ID_MODEL_FROM_DATABASE=Ariel Root Complex
+
+pci:v00001022d000013E1*
+ ID_MODEL_FROM_DATABASE=Ariel IOMMU
+
+pci:v00001022d000013E2*
+ ID_MODEL_FROM_DATABASE=Ariel PCIe Dummy Host Bridge
+
+pci:v00001022d000013E3*
+ ID_MODEL_FROM_DATABASE=Ariel PCIe GPP Bridge
+
+pci:v00001022d000013E4*
+ ID_MODEL_FROM_DATABASE=Ariel PCIe Dummy Host Bridge
+
+pci:v00001022d000013E5*
+ ID_MODEL_FROM_DATABASE=Ariel Internal PCIe GPP Bridge 0 to Bus A
+
+pci:v00001022d000013E6*
+ ID_MODEL_FROM_DATABASE=Ariel Internal PCIe GPP Bridge 0 to Bus B
+
+pci:v00001022d000013E7*
+ ID_MODEL_FROM_DATABASE=Ariel SMBus Controller
+
+pci:v00001022d000013E8*
+ ID_MODEL_FROM_DATABASE=Ariel LPC Bridge
+
+pci:v00001022d000013E9*
+ ID_MODEL_FROM_DATABASE=Ariel Internal GPU
+
+pci:v00001022d000013EA*
+ ID_MODEL_FROM_DATABASE=Ariel HD Audio Controller
+
+pci:v00001022d000013EB*
+ ID_MODEL_FROM_DATABASE=Ariel HD Audio Coprocessor
+
+pci:v00001022d000013EC*
+ ID_MODEL_FROM_DATABASE=Ariel Cryptographic Coprocessor
+
+pci:v00001022d000013ED*
+ ID_MODEL_FROM_DATABASE=Ariel USB 3.1 Type C: Gen2 x 1port + DP Alt Mode
+
+pci:v00001022d000013EE*
+ ID_MODEL_FROM_DATABASE=Ariel USB 3.1 Type A: Gen2 x 2 ports
+
+pci:v00001022d000013EF*
+ ID_MODEL_FROM_DATABASE=Ariel ZCN/MP4
+
+pci:v00001022d000013F0*
+ ID_MODEL_FROM_DATABASE=Ariel Device 24: Function 0
+
+pci:v00001022d000013F1*
+ ID_MODEL_FROM_DATABASE=Ariel Device 24: Function 1
+
+pci:v00001022d000013F2*
+ ID_MODEL_FROM_DATABASE=Ariel Device 24: Function 2
+
+pci:v00001022d000013F3*
+ ID_MODEL_FROM_DATABASE=Ariel Device 24: Function 3
+
+pci:v00001022d000013F4*
+ ID_MODEL_FROM_DATABASE=Ariel Device 24: Function 4
+
+pci:v00001022d000013F5*
+ ID_MODEL_FROM_DATABASE=Ariel Device 24: Function 5
+
+pci:v00001022d000013F6*
+ ID_MODEL_FROM_DATABASE=Ariel Device 24: Function 6
+
+pci:v00001022d000013F7*
+ ID_MODEL_FROM_DATABASE=Ariel Device 24: Function 7
+
pci:v00001022d00001400*
ID_MODEL_FROM_DATABASE=Family 15h (Models 10h-1fh) Processor Function 0
@@ -12527,23 +12944,32 @@ pci:v00001022d00001423*
pci:v00001022d00001424*
ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) Processor Root Port
+pci:v00001022d00001425*
+ ID_MODEL_FROM_DATABASE=Kaveri P2P Bridge for GFX PCIe Port [1:0]
+
pci:v00001022d00001426*
ID_MODEL_FROM_DATABASE=Family 15h (Models 30h-3fh) Processor Root Port
pci:v00001022d0000142E*
- ID_MODEL_FROM_DATABASE=Liverpool Processor Function 0
+ ID_MODEL_FROM_DATABASE=Liverpool Processor HT configuration
pci:v00001022d0000142F*
- ID_MODEL_FROM_DATABASE=Liverpool Processor Function 1
+ ID_MODEL_FROM_DATABASE=Liverpool Processor Address Maps
pci:v00001022d00001430*
- ID_MODEL_FROM_DATABASE=Liverpool Processor Function 2
+ ID_MODEL_FROM_DATABASE=Liverpool Processor DRAM configuration
pci:v00001022d00001431*
- ID_MODEL_FROM_DATABASE=Liverpool Processor Function 3
+ ID_MODEL_FROM_DATABASE=Liverpool Processor Misc configuration
pci:v00001022d00001432*
- ID_MODEL_FROM_DATABASE=Liverpool Processor Function 4
+ ID_MODEL_FROM_DATABASE=Liverpool Processor PM configuration
+
+pci:v00001022d00001433*
+ ID_MODEL_FROM_DATABASE=Liverpool Processor NB Performance Monitor
+
+pci:v00001022d00001434*
+ ID_MODEL_FROM_DATABASE=Liverpool Processor SPLL Configuration
pci:v00001022d00001436*
ID_MODEL_FROM_DATABASE=Liverpool Processor Root Complex
@@ -12557,6 +12983,60 @@ pci:v00001022d00001438*
pci:v00001022d00001439*
ID_MODEL_FROM_DATABASE=Family 16h Processor Functions 5:1
+pci:v00001022d0000143A*
+ ID_MODEL_FROM_DATABASE=Kingston/Clayton/Gladius/Montego Root Complex
+
+pci:v00001022d0000143B*
+ ID_MODEL_FROM_DATABASE=Kingston/Clayton/Gladius/Montego P2P Bridge for UMI Link
+
+pci:v00001022d00001440*
+ ID_MODEL_FROM_DATABASE=Matisse Device 24: Function 0
+
+pci:v00001022d00001441*
+ ID_MODEL_FROM_DATABASE=Matisse Device 24: Function 1
+
+pci:v00001022d00001442*
+ ID_MODEL_FROM_DATABASE=Matisse Device 24: Function 2
+
+pci:v00001022d00001443*
+ ID_MODEL_FROM_DATABASE=Matisse Device 24: Function 3
+
+pci:v00001022d00001444*
+ ID_MODEL_FROM_DATABASE=Matisse Device 24: Function 4
+
+pci:v00001022d00001445*
+ ID_MODEL_FROM_DATABASE=Matisse Device 24: Function 5
+
+pci:v00001022d00001446*
+ ID_MODEL_FROM_DATABASE=Matisse Device 24: Function 6
+
+pci:v00001022d00001447*
+ ID_MODEL_FROM_DATABASE=Matisse Device 24: Function 7
+
+pci:v00001022d00001448*
+ ID_MODEL_FROM_DATABASE=Renoir Device 24: Function 0
+
+pci:v00001022d00001449*
+ ID_MODEL_FROM_DATABASE=Renoir Device 24: Function 1
+
+pci:v00001022d0000144A*
+ ID_MODEL_FROM_DATABASE=Renoir Device 24: Function 2
+
+pci:v00001022d0000144B*
+ ID_MODEL_FROM_DATABASE=Renoir Device 24: Function 3
+
+pci:v00001022d0000144C*
+ ID_MODEL_FROM_DATABASE=Renoir Device 24: Function 4
+
+pci:v00001022d0000144D*
+ ID_MODEL_FROM_DATABASE=Renoir Device 24: Function 5
+
+pci:v00001022d0000144E*
+ ID_MODEL_FROM_DATABASE=Renoir Device 24: Function 6
+
+pci:v00001022d0000144F*
+ ID_MODEL_FROM_DATABASE=Renoir Device 24: Function 7
+
pci:v00001022d00001450*
ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) Root Complex
@@ -12564,7 +13044,7 @@ pci:v00001022d00001451*
ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) I/O Memory Management Unit
pci:v00001022d00001452*
- ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) PCIe Dummy Host Bridge
+ ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
pci:v00001022d00001453*
ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) PCIe GPP Bridge
@@ -12572,18 +13052,30 @@ pci:v00001022d00001453*
pci:v00001022d00001454*
ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B
+pci:v00001022d00001455*
+ ID_MODEL_FROM_DATABASE=Zeppelin/Renoir PCIe Dummy Function
+
pci:v00001022d00001456*
ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) Platform Security Processor
pci:v00001022d00001457*
ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) HD Audio Controller
+pci:v00001022d0000145A*
+ ID_MODEL_FROM_DATABASE=Zeppelin/Raven/Raven2 PCIe Dummy Function
+
pci:v00001022d0000145B*
ID_MODEL_FROM_DATABASE=Zeppelin Non-Transparent Bridge
pci:v00001022d0000145C*
ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) USB 3.0 Host Controller
+pci:v00001022d0000145D*
+ ID_MODEL_FROM_DATABASE=Zeppelin Switch Upstream (PCIE SW.US)
+
+pci:v00001022d0000145E*
+ ID_MODEL_FROM_DATABASE=Zeppelin Switch Downstream (PCIE SW.DS)
+
pci:v00001022d0000145F*
ID_MODEL_FROM_DATABASE=USB 3.0 Host controller
@@ -12611,6 +13103,96 @@ pci:v00001022d00001466*
pci:v00001022d00001467*
ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 7
+pci:v00001022d00001468*
+ ID_MODEL_FROM_DATABASE=Zeppelin Cryptographic Coprocessor NTBCCP
+
+pci:v00001022d00001480*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse Root Complex
+
+pci:v00001022d00001481*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse IOMMU
+
+pci:v00001022d00001482*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse PCIe Dummy Host Bridge
+
+pci:v00001022d00001483*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse GPP Bridge
+
+pci:v00001022d00001484*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]
+
+pci:v00001022d00001485*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse Reserved SPP
+
+pci:v00001022d00001486*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse Cryptographic Coprocessor PSPCPP
+
+pci:v00001022d00001487*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse HD Audio Controller
+
+pci:v00001022d00001488*
+ ID_MODEL_FROM_DATABASE=Starship Reserved SSP
+
+pci:v00001022d00001489*
+ ID_MODEL_FROM_DATABASE=Starship Reserved SSP
+
+pci:v00001022d0000148A*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse PCIe Dummy Function
+
+pci:v00001022d0000148B*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse Non-Transparent Bridge
+
+pci:v00001022d0000148C*
+ ID_MODEL_FROM_DATABASE=Starship USB 3.0 Host Controller
+
+pci:v00001022d0000148D*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse Switch Upstream (PCIE SW.US)
+
+pci:v00001022d0000148E*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse Switch Downstream (PCIE SW.DS)
+
+pci:v00001022d0000148F*
+ ID_MODEL_FROM_DATABASE=Starship Reserved SSP
+
+pci:v00001022d00001490*
+ ID_MODEL_FROM_DATABASE=Starship Device 24; Function 0
+
+pci:v00001022d00001491*
+ ID_MODEL_FROM_DATABASE=Starship Device 24; Function 1
+
+pci:v00001022d00001492*
+ ID_MODEL_FROM_DATABASE=Starship Device 24; Function 2
+
+pci:v00001022d00001493*
+ ID_MODEL_FROM_DATABASE=Starship Device 24; Function 3
+
+pci:v00001022d00001494*
+ ID_MODEL_FROM_DATABASE=Starship Device 24; Function 4
+
+pci:v00001022d00001495*
+ ID_MODEL_FROM_DATABASE=Starship Device 24; Function 5
+
+pci:v00001022d00001496*
+ ID_MODEL_FROM_DATABASE=Starship Device 24; Function 6
+
+pci:v00001022d00001497*
+ ID_MODEL_FROM_DATABASE=Starship Device 24; Function 7
+
+pci:v00001022d00001498*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse PTDMA
+
+pci:v00001022d00001499*
+ ID_MODEL_FROM_DATABASE=Starship/Matisse NVMe
+
+pci:v00001022d0000149A*
+ ID_MODEL_FROM_DATABASE=Starship PCIe GPP Bridge [1:0]
+
+pci:v00001022d0000149B*
+ ID_MODEL_FROM_DATABASE=Starship Reserved SSP
+
+pci:v00001022d0000149C*
+ ID_MODEL_FROM_DATABASE=Matisse USB 3.0 Host Controller
+
pci:v00001022d00001510*
ID_MODEL_FROM_DATABASE=Family 14h Processor Root Complex
@@ -12653,9 +13235,87 @@ pci:v00001022d00001535*
pci:v00001022d00001536*
ID_MODEL_FROM_DATABASE=Family 16h Processor Root Complex
+pci:v00001022d00001537*
+ ID_MODEL_FROM_DATABASE=Kabini/Mullins PSP-Platform Security Processor
+
pci:v00001022d00001538*
ID_MODEL_FROM_DATABASE=Family 16h Processor Function 0
+pci:v00001022d00001539*
+ ID_MODEL_FROM_DATABASE=Kabini P2P Bridge for PCIe Ports[4:0]
+
+pci:v00001022d00001540*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky HT Configuration
+
+pci:v00001022d00001541*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Address Maps
+
+pci:v00001022d00001542*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky DRAM Configuration
+
+pci:v00001022d00001543*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Miscellaneous Configuration
+
+pci:v00001022d00001544*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky PM Configuration
+
+pci:v00001022d00001545*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky NB Performance Monitor
+
+pci:v00001022d00001546*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Root Complex
+
+pci:v00001022d00001547*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky IOMMU
+
+pci:v00001022d00001548*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky UMI PCIe Dummy Host Bridge
+
+pci:v00001022d00001549*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+ P2P Bridge for PCIe Port [3:0]
+
+pci:v00001022d0000154A*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Audio Processor
+
+pci:v00001022d0000154B*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Security Processor
+
+pci:v00001022d0000154D*
+ ID_MODEL_FROM_DATABASE=Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky/Anubis HDMI Controller
+
+pci:v00001022d0000154F*
+ ID_MODEL_FROM_DATABASE=Anubis Audio Processor
+
+pci:v00001022d00001550*
+ ID_MODEL_FROM_DATABASE=Garfield+/Arlene/Pooky/Anubis SPLL Configuration
+
+pci:v00001022d00001553*
+ ID_MODEL_FROM_DATABASE=Arlene/Pooky P2P Bridge for PCIE (3:0)
+
+pci:v00001022d0000155B*
+ ID_MODEL_FROM_DATABASE=Anubis Root Complex
+
+pci:v00001022d0000155C*
+ ID_MODEL_FROM_DATABASE=Anubis IOMMU
+
+pci:v00001022d0000155D*
+ ID_MODEL_FROM_DATABASE=Anubis UMI PCIe Dummy Bridge
+
+pci:v00001022d0000155E*
+ ID_MODEL_FROM_DATABASE=Anubis P2P Bridge for PCIe Ports [4:0]
+
+pci:v00001022d00001560*
+ ID_MODEL_FROM_DATABASE=Anubis Security Processor
+
+pci:v00001022d00001566*
+ ID_MODEL_FROM_DATABASE=Family 16h (Models 30h-3fh) Processor Root Complex
+
+pci:v00001022d00001567*
+ ID_MODEL_FROM_DATABASE=Mullins IOMMU
+
+pci:v00001022d0000156B*
+ ID_MODEL_FROM_DATABASE=Family 16h (Models 30h-3fh) Host Bridge
+
pci:v00001022d00001570*
ID_MODEL_FROM_DATABASE=Family 15h (Models 60h-6fh) Processor Function 0
@@ -12680,6 +13340,12 @@ pci:v00001022d00001576*
pci:v00001022d00001577*
ID_MODEL_FROM_DATABASE=Family 15h (Models 60h-6fh) I/O Memory Management Unit
+pci:v00001022d00001578*
+ ID_MODEL_FROM_DATABASE=Carrizo Platform Security Processor
+
+pci:v00001022d00001579*
+ ID_MODEL_FROM_DATABASE=Carrizo Audio Processor
+
pci:v00001022d0000157A*
ID_MODEL_FROM_DATABASE=Family 15h (Models 60h-6fh) Audio Controller
@@ -12689,6 +13355,213 @@ pci:v00001022d0000157B*
pci:v00001022d0000157C*
ID_MODEL_FROM_DATABASE=Family 15h (Models 60h-6fh) Processor Root Port
+pci:v00001022d0000157D*
+ ID_MODEL_FROM_DATABASE=Carrizo Audio Dummy Host Bridge
+
+pci:v00001022d0000157E*
+ ID_MODEL_FROM_DATABASE=Carrizo Audio Controller
+
+pci:v00001022d00001580*
+ ID_MODEL_FROM_DATABASE=Family 16h (Models 30h-3fh) Processor Function 0
+
+pci:v00001022d00001581*
+ ID_MODEL_FROM_DATABASE=Family 16h (Models 30h-3fh) Processor Function 1
+
+pci:v00001022d00001582*
+ ID_MODEL_FROM_DATABASE=Family 16h (Models 30h-3fh) Processor Function 2
+
+pci:v00001022d00001583*
+ ID_MODEL_FROM_DATABASE=Family 16h (Models 30h-3fh) Processor Function 3
+
+pci:v00001022d00001584*
+ ID_MODEL_FROM_DATABASE=Family 16h (Models 30h-3fh) Processor Function 4
+
+pci:v00001022d00001585*
+ ID_MODEL_FROM_DATABASE=Family 16h (Models 30h-3fh) Processor Function 5
+
+pci:v00001022d00001590*
+ ID_MODEL_FROM_DATABASE=Amur/Nolan HT Configuration
+
+pci:v00001022d00001591*
+ ID_MODEL_FROM_DATABASE=Amur/Nolan Address Maps
+
+pci:v00001022d00001592*
+ ID_MODEL_FROM_DATABASE=Amur/Nolan DRAM Configuration
+
+pci:v00001022d00001593*
+ ID_MODEL_FROM_DATABASE=Amur/Nolan Miscellaneous Configuration
+
+pci:v00001022d00001594*
+ ID_MODEL_FROM_DATABASE=Amur/Nolan PM Configuration
+
+pci:v00001022d00001595*
+ ID_MODEL_FROM_DATABASE=Amur/Nolan NB Performance Monitor
+
+pci:v00001022d00001596*
+ ID_MODEL_FROM_DATABASE=Amur/Nolan Root Complex
+
+pci:v00001022d00001597*
+ ID_MODEL_FROM_DATABASE=Amur/Nolan IOMMU
+
+pci:v00001022d00001598*
+ ID_MODEL_FROM_DATABASE=Amur/Nolan Platform Security Processor
+
+pci:v00001022d00001599*
+ ID_MODEL_FROM_DATABASE=Amur/Nolan PCIe Dummy Host Bridge
+
+pci:v00001022d0000159D*
+ ID_MODEL_FROM_DATABASE=Amur Function 6: Gasket
+
+pci:v00001022d000015B0*
+ ID_MODEL_FROM_DATABASE=Stoney HT Configuration
+
+pci:v00001022d000015B1*
+ ID_MODEL_FROM_DATABASE=Stoney Address Maps
+
+pci:v00001022d000015B2*
+ ID_MODEL_FROM_DATABASE=Stoney DRAM Configuration
+
+pci:v00001022d000015B3*
+ ID_MODEL_FROM_DATABASE=Stoney Miscellaneous Configuration
+
+pci:v00001022d000015B4*
+ ID_MODEL_FROM_DATABASE=Stoney PM Configuration
+
+pci:v00001022d000015B5*
+ ID_MODEL_FROM_DATABASE=Stoney NB Performance Monitor
+
+pci:v00001022d000015BC*
+ ID_MODEL_FROM_DATABASE=Stoney PCIe [GFX,GPP] Bridge [4:0]
+
+pci:v00001022d000015BE*
+ ID_MODEL_FROM_DATABASE=Stoney Audio Processor
+
+pci:v00001022d000015D0*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Root Complex
+
+pci:v00001022d000015D1*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 IOMMU
+
+pci:v00001022d000015D2*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 PCIe Dummy Host Bridge
+
+pci:v00001022d000015D3*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 PCIe GPP Bridge [6:0]
+
+pci:v00001022d000015D4*
+ ID_MODEL_FROM_DATABASE=FireFlight USB 3.1
+
+pci:v00001022d000015D5*
+ ID_MODEL_FROM_DATABASE=FireFlight USB 3.1
+
+pci:v00001022d000015DA*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 PCIe Dummy Host Bridge
+
+pci:v00001022d000015DB*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus A
+
+pci:v00001022d000015DC*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus B
+
+pci:v00001022d000015DE*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2/FireFlight HD Audio Controller
+
+pci:v00001022d000015DF*
+ ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) Platform Security Processor
+
+pci:v00001022d000015E0*
+ ID_MODEL_FROM_DATABASE=Raven USB 3.1
+
+pci:v00001022d000015E1*
+ ID_MODEL_FROM_DATABASE=Raven USB 3.1
+
+pci:v00001022d000015E2*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2/FireFlight/Renoir Audio Processor
+
+pci:v00001022d000015E3*
+ ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) HD Audio Controller
+
+pci:v00001022d000015E4*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2/Renoir Sensor Fusion Hub
+
+pci:v00001022d000015E5*
+ ID_MODEL_FROM_DATABASE=Raven2 USB 3.1
+
+pci:v00001022d000015E6*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2/Renoir Non-Sensor Fusion Hub KMDF driver
+
+pci:v00001022d000015E8*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Device 24: Function 0
+
+pci:v00001022d000015E9*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Device 24: Function 1
+
+pci:v00001022d000015EA*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Device 24: Function 2
+
+pci:v00001022d000015EB*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Device 24: Function 3
+
+pci:v00001022d000015EC*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Device 24: Function 4
+
+pci:v00001022d000015ED*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Device 24: Function 5
+
+pci:v00001022d000015EE*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Device 24: Function 6
+
+pci:v00001022d000015EF*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Device 24: Function 7
+
+pci:v00001022d000015F0*
+ ID_MODEL_FROM_DATABASE=FireFlight Device 24: Function 0
+
+pci:v00001022d000015F1*
+ ID_MODEL_FROM_DATABASE=FireFlight Device 24: Function 1
+
+pci:v00001022d000015F2*
+ ID_MODEL_FROM_DATABASE=FireFlight Device 24: Function 2
+
+pci:v00001022d000015F3*
+ ID_MODEL_FROM_DATABASE=FireFlight Device 24: Function 3
+
+pci:v00001022d000015F4*
+ ID_MODEL_FROM_DATABASE=FireFlight Device 24: Function 4
+
+pci:v00001022d000015F5*
+ ID_MODEL_FROM_DATABASE=FireFlight Device 24: Function 5
+
+pci:v00001022d000015F6*
+ ID_MODEL_FROM_DATABASE=FireFlight Device 24: Function 6
+
+pci:v00001022d000015F7*
+ ID_MODEL_FROM_DATABASE=FireFlight Device 24: Function 7
+
+pci:v00001022d000015F8*
+ ID_MODEL_FROM_DATABASE=FireFlight Root Complex
+
+pci:v00001022d000015F9*
+ ID_MODEL_FROM_DATABASE=FireFlight IOMMU
+
+pci:v00001022d000015FA*
+ ID_MODEL_FROM_DATABASE=FireFlight PCIe Dummy Host Bridge
+
+pci:v00001022d000015FB*
+ ID_MODEL_FROM_DATABASE=FireFlight PCIe GPP Bride 3:0
+
+pci:v00001022d000015FC*
+ ID_MODEL_FROM_DATABASE=FireFlight PCIe Dummy Host Bridge
+
+pci:v00001022d000015FD*
+ ID_MODEL_FROM_DATABASE=FireFlight Internal PCIe GPP Bridge 0 to Bus A
+
+pci:v00001022d000015FE*
+ ID_MODEL_FROM_DATABASE=FireFlight Internal PCIe GPP Bridge 0 to Bus B
+
+pci:v00001022d000015FF*
+ ID_MODEL_FROM_DATABASE=FireFlight Bus A; Device 0: Function 0: Internal GPU
+
pci:v00001022d00001600*
ID_MODEL_FROM_DATABASE=Family 15h Processor Function 0
@@ -12707,6 +13580,105 @@ pci:v00001022d00001604*
pci:v00001022d00001605*
ID_MODEL_FROM_DATABASE=Family 15h Processor Function 5
+pci:v00001022d00001606*
+ ID_MODEL_FROM_DATABASE=Arden Security Processor
+
+pci:v00001022d00001608*
+ ID_MODEL_FROM_DATABASE=Arden Device 18h: Function 0
+
+pci:v00001022d00001609*
+ ID_MODEL_FROM_DATABASE=Arden Device 18h: Function 1
+
+pci:v00001022d0000160A*
+ ID_MODEL_FROM_DATABASE=Arden Device 18h: Function 2
+
+pci:v00001022d0000160B*
+ ID_MODEL_FROM_DATABASE=Arden Device 18h: Function 3
+
+pci:v00001022d0000160C*
+ ID_MODEL_FROM_DATABASE=Arden Device 18h: Function 4
+
+pci:v00001022d0000160D*
+ ID_MODEL_FROM_DATABASE=Arden Device 18h: Function 5
+
+pci:v00001022d0000160E*
+ ID_MODEL_FROM_DATABASE=Arden Device 18h: Function 6
+
+pci:v00001022d0000160F*
+ ID_MODEL_FROM_DATABASE=Arden Device 18h: Function 7
+
+pci:v00001022d00001620*
+ ID_MODEL_FROM_DATABASE=Anubis HT Configuration
+
+pci:v00001022d00001621*
+ ID_MODEL_FROM_DATABASE=Anubis Address Maps
+
+pci:v00001022d00001622*
+ ID_MODEL_FROM_DATABASE=Anubis DRAM Configuration
+
+pci:v00001022d00001623*
+ ID_MODEL_FROM_DATABASE=Anubis Miscellaneous Configuration
+
+pci:v00001022d00001624*
+ ID_MODEL_FROM_DATABASE=Anubis PM Configuration
+
+pci:v00001022d00001625*
+ ID_MODEL_FROM_DATABASE=Anubis NB Performance Monitor
+
+pci:v00001022d00001626*
+ ID_MODEL_FROM_DATABASE=Arden Root Complex
+
+pci:v00001022d00001627*
+ ID_MODEL_FROM_DATABASE=Arden IOMMU
+
+pci:v00001022d00001628*
+ ID_MODEL_FROM_DATABASE=Arden PCIe Dummy Host Bridge
+
+pci:v00001022d00001629*
+ ID_MODEL_FROM_DATABASE=Arden PCIe GPP Bridge
+
+pci:v00001022d0000162A*
+ ID_MODEL_FROM_DATABASE=Arden Internal PCIe GPP Bridge 0 to bus X
+
+pci:v00001022d0000162B*
+ ID_MODEL_FROM_DATABASE=Arden PCIe Non-Transparent Bridge
+
+pci:v00001022d00001630*
+ ID_MODEL_FROM_DATABASE=Renoir Root Complex
+
+pci:v00001022d00001631*
+ ID_MODEL_FROM_DATABASE=Renoir IOMMU
+
+pci:v00001022d00001632*
+ ID_MODEL_FROM_DATABASE=Renoir PCIe Dummy Host Bridge
+
+pci:v00001022d00001633*
+ ID_MODEL_FROM_DATABASE=Renoir PCIe GPP Bridge
+
+pci:v00001022d00001634*
+ ID_MODEL_FROM_DATABASE=Renoir PCIe GPP Bridge
+
+pci:v00001022d00001635*
+ ID_MODEL_FROM_DATABASE=Renoir Internal PCIe GPP Bridge to Bus
+
+pci:v00001022d00001637*
+ ID_MODEL_FROM_DATABASE=Renoir HD Audio Controller
+
+pci:v00001022d00001639*
+ ID_MODEL_FROM_DATABASE=Renoir USB 3.1
+
+pci:v00001022d00001641*
+ ID_MODEL_FROM_DATABASE=Renoir 10GbE Controller Port 0 (XGBE0/1)
+
+pci:v00001022d00001642*
+ ID_MODEL_FROM_DATABASE=Renoir WLAN
+
+pci:v00001022d00001643*
+ ID_MODEL_FROM_DATABASE=Renoir BT
+
+pci:v00001022d00001644*
+ ID_MODEL_FROM_DATABASE=Renoir I2S
+
pci:v00001022d00001700*
ID_MODEL_FROM_DATABASE=Family 12h/14h Processor Function 0
@@ -12725,6 +13697,9 @@ pci:v00001022d00001704*
pci:v00001022d00001705*
ID_MODEL_FROM_DATABASE=Family 12h Processor Root Complex
+pci:v00001022d00001706*
+ ID_MODEL_FROM_DATABASE=Llano P2P Bridge to external GPU
+
pci:v00001022d00001707*
ID_MODEL_FROM_DATABASE=Family 12h Processor Root Port
@@ -12932,6 +13907,18 @@ pci:v00001022d000043BA*
pci:v00001022d000043BB*
ID_MODEL_FROM_DATABASE=300 Series Chipset USB 3.1 xHCI Controller
+pci:v00001022d000043C6*
+ ID_MODEL_FROM_DATABASE=400 Series Chipset PCIe Bridge
+
+pci:v00001022d000043C7*
+ ID_MODEL_FROM_DATABASE=400 Series Chipset PCIe Port
+
+pci:v00001022d000043C8*
+ ID_MODEL_FROM_DATABASE=400 Series Chipset SATA Controller
+
+pci:v00001022d000043D5*
+ ID_MODEL_FROM_DATABASE=400 Series Chipset USB 3.1 XHCI Controller
+
pci:v00001022d00007006*
ID_MODEL_FROM_DATABASE=AMD-751 [Irongate] System Controller
@@ -13148,6 +14135,9 @@ pci:v00001022d00007809*
pci:v00001022d00007809sv0000103Csd0000194E*
ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller (ProBook 455 G1 Notebook)
+pci:v00001022d0000780A*
+ ID_MODEL_FROM_DATABASE=Kabini/Mullins SATA Raid/AHCI Mode (DotHill driver)
+
pci:v00001022d0000780B*
ID_MODEL_FROM_DATABASE=FCH SMBus Controller
@@ -15806,6 +16796,9 @@ pci:v0000103Cd0000127B*
pci:v0000103Cd0000127C*
ID_MODEL_FROM_DATABASE=sx1000 I/O Controller
+pci:v0000103Cd0000128D*
+ ID_MODEL_FROM_DATABASE=Diva [GSP] Management Board
+
pci:v0000103Cd00001290*
ID_MODEL_FROM_DATABASE=Auxiliary Diva Serial Port
@@ -26672,9 +27665,6 @@ pci:v000010DEd0000018C*
pci:v000010DEd0000018D*
ID_MODEL_FROM_DATABASE=NV18M [GeForce4 448 Go]
-pci:v000010DEd0000018F*
- ID_MODEL_FROM_DATABASE=NV18
-
pci:v000010DEd00000190*
ID_MODEL_FROM_DATABASE=G80 [GeForce 8800 GTS / 8800 GTX]
@@ -28980,13 +29970,13 @@ pci:v000010DEd0000063F*
ID_MODEL_FROM_DATABASE=G94 [GeForce 9600 GE]
pci:v000010DEd00000640*
- ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GT]
+ ID_MODEL_FROM_DATABASE=G96C [GeForce 9500 GT]
pci:v000010DEd00000641*
- ID_MODEL_FROM_DATABASE=G96 [GeForce 9400 GT]
+ ID_MODEL_FROM_DATABASE=G96C [GeForce 9400 GT]
pci:v000010DEd00000641sv00001682sd00004009*
- ID_MODEL_FROM_DATABASE=G96 [GeForce 9400 GT] (PV-T94G-ZAFG)
+ ID_MODEL_FROM_DATABASE=G96C [GeForce 9400 GT] (PV-T94G-ZAFG)
pci:v000010DEd00000642*
ID_MODEL_FROM_DATABASE=G96 [D9M-10]
@@ -29001,22 +29991,22 @@ pci:v000010DEd00000644sv0000174Bsd00009600*
ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GS] (Geforce 9500GS 512M DDR2 V/D/HDMI)
pci:v000010DEd00000645*
- ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GS]
+ ID_MODEL_FROM_DATABASE=G96C [GeForce 9500 GS]
pci:v000010DEd00000646*
- ID_MODEL_FROM_DATABASE=G96 [GeForce GT 120]
+ ID_MODEL_FROM_DATABASE=G96C [GeForce GT 120]
pci:v000010DEd00000647*
- ID_MODEL_FROM_DATABASE=G96M [GeForce 9600M GT]
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce 9600M GT]
pci:v000010DEd00000648*
- ID_MODEL_FROM_DATABASE=G96M [GeForce 9600M GS]
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce 9600M GS]
pci:v000010DEd00000649*
- ID_MODEL_FROM_DATABASE=G96M [GeForce 9600M GT]
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce 9600M GT]
pci:v000010DEd00000649sv00001043sd0000202D*
- ID_MODEL_FROM_DATABASE=G96M [GeForce 9600M GT] (GeForce GT 220M)
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce 9600M GT] (GeForce GT 220M)
pci:v000010DEd0000064A*
ID_MODEL_FROM_DATABASE=G96M [GeForce 9700M GT]
@@ -29025,52 +30015,49 @@ pci:v000010DEd0000064B*
ID_MODEL_FROM_DATABASE=G96M [GeForce 9500M G]
pci:v000010DEd0000064C*
- ID_MODEL_FROM_DATABASE=G96M [GeForce 9650M GT]
-
-pci:v000010DEd0000064D*
- ID_MODEL_FROM_DATABASE=G96 [GeForce 9600 GT]
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce 9650M GT]
pci:v000010DEd0000064E*
- ID_MODEL_FROM_DATABASE=G96 [GeForce 9600 GT / 9800 GT]
+ ID_MODEL_FROM_DATABASE=G96C [GeForce 9600 GSO / 9800 GT]
pci:v000010DEd00000651*
- ID_MODEL_FROM_DATABASE=G96M [GeForce G 110M]
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce G 110M]
pci:v000010DEd00000652*
- ID_MODEL_FROM_DATABASE=G96M [GeForce GT 130M]
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce GT 130M]
pci:v000010DEd00000652sv0000152Dsd00000850*
- ID_MODEL_FROM_DATABASE=G96M [GeForce GT 130M] (GeForce GT 240M LE)
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce GT 130M] (GeForce GT 240M LE)
pci:v000010DEd00000653*
- ID_MODEL_FROM_DATABASE=G96M [GeForce GT 120M]
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce GT 120M]
pci:v000010DEd00000654*
- ID_MODEL_FROM_DATABASE=G96M [GeForce GT 220M]
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce GT 220M]
pci:v000010DEd00000654sv00001043sd000014A2*
- ID_MODEL_FROM_DATABASE=G96M [GeForce GT 220M] (GeForce GT 320M)
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce GT 220M] (GeForce GT 320M)
pci:v000010DEd00000654sv00001043sd000014D2*
- ID_MODEL_FROM_DATABASE=G96M [GeForce GT 220M] (GeForce GT 320M)
+ ID_MODEL_FROM_DATABASE=G96CM [GeForce GT 220M] (GeForce GT 320M)
pci:v000010DEd00000655*
- ID_MODEL_FROM_DATABASE=G96 [GeForce GT 120]
+ ID_MODEL_FROM_DATABASE=G96 [GeForce GT 120 Mac Edition]
pci:v000010DEd00000656*
- ID_MODEL_FROM_DATABASE=G96 [GeForce 9650 S]
+ ID_MODEL_FROM_DATABASE=G96 [GeForce GT 120 Mac Edition]
pci:v000010DEd00000658*
ID_MODEL_FROM_DATABASE=G96GL [Quadro FX 380]
pci:v000010DEd00000659*
- ID_MODEL_FROM_DATABASE=G96GL [Quadro FX 580]
+ ID_MODEL_FROM_DATABASE=G96CGL [Quadro FX 580]
pci:v000010DEd0000065A*
ID_MODEL_FROM_DATABASE=G96GLM [Quadro FX 1700M]
pci:v000010DEd0000065B*
- ID_MODEL_FROM_DATABASE=G96 [GeForce 9400 GT]
+ ID_MODEL_FROM_DATABASE=G96C [GeForce 9400 GT]
pci:v000010DEd0000065C*
ID_MODEL_FROM_DATABASE=G96GLM [Quadro FX 770M]
@@ -29079,7 +30066,7 @@ pci:v000010DEd0000065D*
ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GA / 9600 GT / GTS 250]
pci:v000010DEd0000065F*
- ID_MODEL_FROM_DATABASE=G96 [GeForce G210]
+ ID_MODEL_FROM_DATABASE=G96C [GeForce G210]
pci:v000010DEd000006C0*
ID_MODEL_FROM_DATABASE=GF100 [GeForce GTX 480]
@@ -33282,7 +34269,7 @@ pci:v000010DEd00001B00*
ID_MODEL_FROM_DATABASE=GP102 [TITAN X]
pci:v000010DEd00001B01*
- ID_MODEL_FROM_DATABASE=GP102
+ ID_MODEL_FROM_DATABASE=GP102 [GeForce GTX 1080 Ti 10GB]
pci:v000010DEd00001B02*
ID_MODEL_FROM_DATABASE=GP102 [TITAN Xp]
@@ -33347,6 +34334,12 @@ pci:v000010DEd00001BA1sv00001558sd00009501*
pci:v000010DEd00001BA2*
ID_MODEL_FROM_DATABASE=GP104M [GeForce GTX 1070 Mobile]
+pci:v000010DEd00001BA9*
+ ID_MODEL_FROM_DATABASE=GP104M
+
+pci:v000010DEd00001BAA*
+ ID_MODEL_FROM_DATABASE=GP104M
+
pci:v000010DEd00001BAD*
ID_MODEL_FROM_DATABASE=GP104 [GeForce GTX 1070 Engineering Sample]
@@ -33449,6 +34442,9 @@ pci:v000010DEd00001C23*
pci:v000010DEd00001C23sv00001414sd00000020*
ID_MODEL_FROM_DATABASE=GP106M [GeForce GTX 1060 Mobile Rev. 2] (GTX 1060 Mobile)
+pci:v000010DEd00001C2D*
+ ID_MODEL_FROM_DATABASE=GP106M
+
pci:v000010DEd00001C30*
ID_MODEL_FROM_DATABASE=GP106GL [Quadro P2000]
@@ -33557,15 +34553,24 @@ pci:v000010DEd00001D10*
pci:v000010DEd00001D10sv000017AAsd0000225E*
ID_MODEL_FROM_DATABASE=GP108M [GeForce MX150] (ThinkPad T480)
+pci:v000010DEd00001D11*
+ ID_MODEL_FROM_DATABASE=GP108M [GeForce MX230]
+
pci:v000010DEd00001D12*
ID_MODEL_FROM_DATABASE=GP108M [GeForce MX150]
pci:v000010DEd00001D12sv00001D72sd00001701*
ID_MODEL_FROM_DATABASE=GP108M [GeForce MX150] (Mi Notebook Pro [GeForce MX150])
+pci:v000010DEd00001D13*
+ ID_MODEL_FROM_DATABASE=GP108M [GeForce MX250]
+
pci:v000010DEd00001D33*
ID_MODEL_FROM_DATABASE=GP108GLM [Quadro P500 Mobile]
+pci:v000010DEd00001D52*
+ ID_MODEL_FROM_DATABASE=GP108BM [GeForce MX250]
+
pci:v000010DEd00001D81*
ID_MODEL_FROM_DATABASE=GV100 [TITAN V]
@@ -33573,7 +34578,7 @@ pci:v000010DEd00001DB1*
ID_MODEL_FROM_DATABASE=GV100GL [Tesla V100 SXM2 16GB]
pci:v000010DEd00001DB2*
- ID_MODEL_FROM_DATABASE=GV100 [Tesla V100-DGXS-16GB]
+ ID_MODEL_FROM_DATABASE=GV100GL [Tesla V100-DGXS-16GB]
pci:v000010DEd00001DB3*
ID_MODEL_FROM_DATABASE=GV100GL [Tesla V100 FHHL 16GB]
@@ -33615,7 +34620,13 @@ pci:v000010DEd00001E2E*
ID_MODEL_FROM_DATABASE=TU102B
pci:v000010DEd00001E30*
- ID_MODEL_FROM_DATABASE=TU102GL [Quadro RTX 6000]
+ ID_MODEL_FROM_DATABASE=TU102GL [Quadro RTX 6000/8000]
+
+pci:v000010DEd00001E30sv000010DEsd0000129E*
+ ID_MODEL_FROM_DATABASE=TU102GL [Quadro RTX 6000/8000] (Quadro RTX 8000)
+
+pci:v000010DEd00001E30sv000010DEsd000012BA*
+ ID_MODEL_FROM_DATABASE=TU102GL [Quadro RTX 6000/8000] (Quadro RTX 6000)
pci:v000010DEd00001E38*
ID_MODEL_FROM_DATABASE=TU102GL
@@ -33635,9 +34646,12 @@ pci:v000010DEd00001E82*
pci:v000010DEd00001E87*
ID_MODEL_FROM_DATABASE=TU104 [GeForce RTX 2080 Rev. A]
-pci:v000010DEd00001EAB*
+pci:v000010DEd00001E90*
ID_MODEL_FROM_DATABASE=TU104M [GeForce RTX 2080 Mobile]
+pci:v000010DEd00001EAB*
+ ID_MODEL_FROM_DATABASE=TU104M
+
pci:v000010DEd00001EAE*
ID_MODEL_FROM_DATABASE=TU104M
@@ -33650,6 +34664,9 @@ pci:v000010DEd00001EB1*
pci:v000010DEd00001EB8*
ID_MODEL_FROM_DATABASE=TU104GL [Tesla T4]
+pci:v000010DEd00001ED0*
+ ID_MODEL_FROM_DATABASE=TU104M [GeForce RTX 2080 Mobile]
+
pci:v000010DEd00001F02*
ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2070]
@@ -33663,11 +34680,50 @@ pci:v000010DEd00001F07*
ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2070 Rev. A]
pci:v000010DEd00001F08*
- ID_MODEL_FROM_DATABASE=TU106
+ ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2060 Rev. A]
+
+pci:v000010DEd00001F10*
+ ID_MODEL_FROM_DATABASE=TU106M [GeForce RTX 2070 Mobile]
+
+pci:v000010DEd00001F11*
+ ID_MODEL_FROM_DATABASE=TU106M [GeForce RTX 2060 Mobile]
+
+pci:v000010DEd00001F2E*
+ ID_MODEL_FROM_DATABASE=TU106M
+
+pci:v000010DEd00001F50*
+ ID_MODEL_FROM_DATABASE=TU106M [GeForce RTX 2070 Mobile]
+
+pci:v000010DEd00001F51*
+ ID_MODEL_FROM_DATABASE=TU106M [GeForce RTX 2060 Mobile]
pci:v000010DEd00001F82*
ID_MODEL_FROM_DATABASE=TU107
+pci:v000010DEd00001F92*
+ ID_MODEL_FROM_DATABASE=TU107M
+
+pci:v000010DEd00001FBF*
+ ID_MODEL_FROM_DATABASE=TU107GL
+
+pci:v000010DEd00002182*
+ ID_MODEL_FROM_DATABASE=TU116 [GeForce GTX 1660 Ti Rev. A]
+
+pci:v000010DEd00002183*
+ ID_MODEL_FROM_DATABASE=TU116
+
+pci:v000010DEd00002184*
+ ID_MODEL_FROM_DATABASE=TU116 [GeForce GTX 1660]
+
+pci:v000010DEd00002191*
+ ID_MODEL_FROM_DATABASE=TU116M
+
+pci:v000010DEd000021AE*
+ ID_MODEL_FROM_DATABASE=TU116GL
+
+pci:v000010DEd000021BF*
+ ID_MODEL_FROM_DATABASE=TU116GL
+
pci:v000010DF*
ID_VENDOR_FROM_DATABASE=Emulex Corporation
@@ -45986,6 +47042,9 @@ pci:v000012D8*
pci:v000012D8d000001A7*
ID_MODEL_FROM_DATABASE=7C21P100 2-port PCI-X to PCI-X Bridge
+pci:v000012D8d00002304*
+ ID_MODEL_FROM_DATABASE=PI7C9X2G304 EL/SL PCIe2 3-Port/4-Lane Packet Switch
+
pci:v000012D8d00002608*
ID_MODEL_FROM_DATABASE=PI7C9X2G608GP PCIe2 6-Port/8-Lane Packet Switch
@@ -48464,6 +49523,9 @@ pci:v000013F6d00008788sv00001043sd00008467*
pci:v000013F6d00008788sv00001043sd00008521*
ID_MODEL_FROM_DATABASE=CMI8788 [Oxygen HD Audio] (CMI8786 (Xonar DGX))
+pci:v000013F6d00008788sv00001043sd00008522*
+ ID_MODEL_FROM_DATABASE=CMI8788 [Oxygen HD Audio] (Xonar DSX)
+
pci:v000013F6d00008788sv00001043sd000085F4*
ID_MODEL_FROM_DATABASE=CMI8788 [Oxygen HD Audio] (Virtuoso 100 (Xonar Essence STX II))
@@ -48551,6 +49613,9 @@ pci:v000013FEd00001603*
pci:v000013FEd00001604*
ID_MODEL_FROM_DATABASE=PCI-1604 2-port RS-232
+pci:v000013FEd00001680*
+ ID_MODEL_FROM_DATABASE=PCI-1680 Rev.A1 2-port CAN-bus with isolation protection
+
pci:v000013FEd000016FF*
ID_MODEL_FROM_DATABASE=PCI-16xx series PCI multiport serial board (function 1: RX/TX steering CPLD)
@@ -48566,6 +49631,9 @@ pci:v000013FEd000016FFsv00001612sd00000000*
pci:v000013FEd00001711*
ID_MODEL_FROM_DATABASE=PCI-1711 16-channel data acquisition card 12-bit, 100kS/s
+pci:v000013FEd00001713*
+ ID_MODEL_FROM_DATABASE=PCI-1713 32-channel isolated analog input card
+
pci:v000013FEd00001733*
ID_MODEL_FROM_DATABASE=PCI-1733 32-channel isolated digital input card
@@ -48581,6 +49649,9 @@ pci:v000013FEd00001754*
pci:v000013FEd00001756*
ID_MODEL_FROM_DATABASE=PCI-1756 64-ch Isolated Digital I/O PCI Card
+pci:v000013FEd0000A004*
+ ID_MODEL_FROM_DATABASE=PCI-1612 4-port RS-232/422/485
+
pci:v000013FEd0000C302*
ID_MODEL_FROM_DATABASE=MIOe-3680 2-Port CAN-Bus MIOe Module with Isolation Protection
@@ -54542,6 +55613,9 @@ pci:v000014E4d0000B842*
pci:v000014E4d0000B850*
ID_MODEL_FROM_DATABASE=Broadcom BCM56850 Switch ASIC
+pci:v000014E4d0000B880*
+ ID_MODEL_FROM_DATABASE=BCM56880 Switch ASIC
+
pci:v000014E4d0000B960*
ID_MODEL_FROM_DATABASE=Broadcom BCM56960 Switch ASIC
@@ -54551,6 +55625,9 @@ pci:v000014E4d0000D802*
pci:v000014E4d0000D802sv000014E4sd00008021*
ID_MODEL_FROM_DATABASE=BCM58802 Stingray 50Gb Ethernet SoC (Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w16GB DRAM (Part No BCM958802A8046C))
+pci:v000014E4d0000D802sv000014E4sd00008023*
+ ID_MODEL_FROM_DATABASE=BCM58802 Stingray 50Gb Ethernet SoC (PS410T-H04 NetXtreme-S 4x10G 10GBaseT PCIe SmartNIC)
+
pci:v000014E4d0000D802sv000014E4sd00008024*
ID_MODEL_FROM_DATABASE=BCM58802 Stingray 50Gb Ethernet SoC (Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w4GB DRAM (Part No BCM958802A8044C))
@@ -56513,6 +57590,9 @@ pci:v000015B3d00000211*
pci:v000015B3d00000212*
ID_MODEL_FROM_DATABASE=MT2892 Family [ConnectX-6 Dx Flash Recovery]
+pci:v000015B3d00000213*
+ ID_MODEL_FROM_DATABASE=MT2892 Family [ConnectX-6 Dx Secure Flash Recovery]
+
pci:v000015B3d0000024E*
ID_MODEL_FROM_DATABASE=MT53100 [Spectrum-2, Flash recovery mode]
@@ -57011,6 +58091,9 @@ pci:v000015B7d00005001*
pci:v000015B7d00005002*
ID_MODEL_FROM_DATABASE=WD Black 2018/PC SN720 NVMe SSD
+pci:v000015B7d00005003*
+ ID_MODEL_FROM_DATABASE=WD Black 2018/PC SN520 NVMe SSD
+
pci:v000015B8*
ID_VENDOR_FROM_DATABASE=ADDI-DATA GmbH
@@ -58682,6 +59765,15 @@ pci:v000016BE*
pci:v000016C3*
ID_VENDOR_FROM_DATABASE=Synopsys, Inc.
+pci:v000016C3d0000ABCD*
+ ID_MODEL_FROM_DATABASE=DWC_usb3
+
+pci:v000016C3d0000ABCE*
+ ID_MODEL_FROM_DATABASE=DWC_usb3
+
+pci:v000016C3d0000ABCF*
+ ID_MODEL_FROM_DATABASE=DWC_usb31
+
pci:v000016C3d0000EDDA*
ID_MODEL_FROM_DATABASE=EPMockUp
@@ -59021,6 +60113,18 @@ pci:v000016D5d00007043*
pci:v000016D5d00007044*
ID_MODEL_FROM_DATABASE=AP484 Counter Timer Module with RS422 Input/Output
+pci:v000016D5d00007051*
+ ID_MODEL_FROM_DATABASE=APA7-501 Reconfigurable Artix-7 52,160 Cell FPGA module 48 TTL channels
+
+pci:v000016D5d00007052*
+ ID_MODEL_FROM_DATABASE=APA7-502 Reconfigurable Artix-7 52,160 Cell FPGA module 24 RS485 channels
+
+pci:v000016D5d00007053*
+ ID_MODEL_FROM_DATABASE=APA7-503 Reconfigurable Artix-7 52,160 Cell FPGA module 24 TTL & 12 RS485 channels
+
+pci:v000016D5d00007054*
+ ID_MODEL_FROM_DATABASE=APA7-504 Reconfigurable Artix-7 52,160 Cell FPGA module 24 LVDS channels
+
pci:v000016DA*
ID_VENDOR_FROM_DATABASE=Advantech Co., Ltd.
@@ -59243,6 +60347,9 @@ pci:v00001760d00000217*
pci:v00001760d00000303*
ID_MODEL_FROM_DATABASE=PCD-7006C Digital Input & Output PCI Card
+pci:v00001760d0000FF00*
+ ID_MODEL_FROM_DATABASE=CTU CAN FD PCIe Card
+
pci:v00001761*
ID_VENDOR_FROM_DATABASE=Pickering Interfaces Ltd
@@ -59250,7 +60357,7 @@ pci:v00001771*
ID_VENDOR_FROM_DATABASE=InnoVISION Multimedia Ltd.
pci:v00001775*
- ID_VENDOR_FROM_DATABASE=GE Intelligent Platforms
+ ID_VENDOR_FROM_DATABASE=General Electric
pci:v0000177D*
ID_VENDOR_FROM_DATABASE=Cavium, Inc.
@@ -59573,6 +60680,21 @@ pci:v00001796d00000005*
pci:v00001796d00000006*
ID_MODEL_FROM_DATABASE=AMCC HOTlink
+pci:v00001796d00000007*
+ ID_MODEL_FROM_DATABASE=LVD Cable Bus
+
+pci:v00001796d00000008*
+ ID_MODEL_FROM_DATABASE=100MHz, 64bit Sequence Generator based on VirtexII
+
+pci:v00001796d00000009*
+ ID_MODEL_FROM_DATABASE=double 14bit-ADC
+
+pci:v00001796d0000000A*
+ ID_MODEL_FROM_DATABASE=SIS1100 with N110 TDC
+
+pci:v00001796d0000000B*
+ ID_MODEL_FROM_DATABASE=double 14bit-ADC with memory
+
pci:v00001796d0000000D*
ID_MODEL_FROM_DATABASE=Synchronisation Slave
@@ -59591,9 +60713,39 @@ pci:v00001796d00000011*
pci:v00001796d00000012*
ID_MODEL_FROM_DATABASE=SIS1100-e quad link
+pci:v00001796d00000013*
+ ID_MODEL_FROM_DATABASE=4x2.5GHz SFP to 4 lane PCIe bridge
+
+pci:v00001796d00000014*
+ ID_MODEL_FROM_DATABASE=SIS1100 with GPX piggy back
+
pci:v00001796d00000015*
ID_MODEL_FROM_DATABASE=SIS8100 [Gigabit link, MicroTCA]
+pci:v00001796d00000016*
+ ID_MODEL_FROM_DATABASE=SIS1100e with 4 lanes
+
+pci:v00001796d00000017*
+ ID_MODEL_FROM_DATABASE=Quad 14bit, 50MHz ADC with 2.5GHz SFP
+
+pci:v00001796d00000018*
+ ID_MODEL_FROM_DATABASE=SIS8300 4-lane PCI Express, Micro TCA for Physics ADC
+
+pci:v00001796d00000019*
+ ID_MODEL_FROM_DATABASE=SIS SIS8300-Lx MTCA.4 Digitizer
+
+pci:v00001796d0000001A*
+ ID_MODEL_FROM_DATABASE=100MHz, 64bit Sequence Generator based on VirtexII
+
+pci:v00001796d0000001C*
+ ID_MODEL_FROM_DATABASE=Quad 16bit, 150MHz ADC with 2.5GHz SFP
+
+pci:v00001796d00000030*
+ ID_MODEL_FROM_DATABASE=100MHz, 64bit Sequence Generator based on Spartan6
+
+pci:v00001796d00000031*
+ ID_MODEL_FROM_DATABASE=200MHz 64bit Sequence Generator based on Spartan7
+
pci:v00001797*
ID_VENDOR_FROM_DATABASE=Intersil Techwell
@@ -60164,6 +61316,15 @@ pci:v000017F3*
pci:v000017F3d00001010*
ID_MODEL_FROM_DATABASE=R1010 IDE Controller
+pci:v000017F3d00001011*
+ ID_MODEL_FROM_DATABASE=R1011 IDE Controller
+
+pci:v000017F3d00001012*
+ ID_MODEL_FROM_DATABASE=R1012 IDE Controller
+
+pci:v000017F3d00001031*
+ ID_MODEL_FROM_DATABASE=PCI/PCI-X to PCI-E Bridge
+
pci:v000017F3d00002012*
ID_MODEL_FROM_DATABASE=M2012/R3308 VGA-compatible graphics adapter
@@ -62240,6 +63401,12 @@ pci:v00001982d000016FF*
pci:v00001987*
ID_VENDOR_FROM_DATABASE=Phison Electronics Corporation
+pci:v00001987d00005007*
+ ID_MODEL_FROM_DATABASE=E7 NVMe Controller
+
+pci:v00001987d00005012*
+ ID_MODEL_FROM_DATABASE=E12 NVMe Controller
+
pci:v00001989*
ID_VENDOR_FROM_DATABASE=Montilio Inc.
@@ -62469,11 +63636,23 @@ pci:v000019E5d00000123sv000019E5sd00003036*
ID_MODEL_FROM_DATABASE=ES3000 V3 NVMe PCIe SSD (NVMe SSD ES3600C V3 3200GB HHHL AIC)
pci:v000019E5d00000200*
- ID_MODEL_FROM_DATABASE=Hi1822 Family (2*25GE)
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (2*100GE)
-pci:v000019E5d00000201*
+pci:v000019E5d00000202*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (2*32G FC)
+
+pci:v000019E5d00000203*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (2*16G FC)
+
+pci:v000019E5d00000205*
ID_MODEL_FROM_DATABASE=Hi1822 Family (2*100GE)
+pci:v000019E5d00000210*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (4*25GE)
+
+pci:v000019E5d00000212*
+ ID_MODEL_FROM_DATABASE=Hi1822 Family (2*8G FC)
+
pci:v000019E5d00001710*
ID_MODEL_FROM_DATABASE=iBMA Virtual Network Adapter
@@ -62615,6 +63794,9 @@ pci:v00001A03d00002000*
pci:v00001A03d00002000sv000015D9sd00000832*
ID_MODEL_FROM_DATABASE=ASPEED Graphics Family (X10SRL-F)
+pci:v00001A05*
+ ID_VENDOR_FROM_DATABASE=deltaww
+
pci:v00001A07*
ID_VENDOR_FROM_DATABASE=Kvaser AB
@@ -63929,6 +65111,12 @@ pci:v00001C8C*
pci:v00001CB1*
ID_VENDOR_FROM_DATABASE=Collion UG & Co.KG
+pci:v00001CB5*
+ ID_VENDOR_FROM_DATABASE=Focusrite Audio Engineering Ltd
+
+pci:v00001CB5d00000002*
+ ID_MODEL_FROM_DATABASE=Clarett
+
pci:v00001CB8*
ID_VENDOR_FROM_DATABASE=Dawning Information Industry Co., Ltd.
@@ -64040,6 +65228,9 @@ pci:v00001D0Fd0000CD01*
pci:v00001D0Fd0000EC20*
ID_MODEL_FROM_DATABASE=Elastic Network Adapter (ENA)
+pci:v00001D0Fd0000EFA0*
+ ID_MODEL_FROM_DATABASE=Elastic Fabric Adapter (EFA)
+
pci:v00001D17*
ID_VENDOR_FROM_DATABASE=Zhaoxin
@@ -64373,6 +65564,9 @@ pci:v00001D82*
pci:v00001D87*
ID_VENDOR_FROM_DATABASE=Fuzhou Rockchip Electronics Co., Ltd
+pci:v00001D87d00000100*
+ ID_MODEL_FROM_DATABASE=RK3399 PCI Express Root Port
+
pci:v00001D87d00001808*
ID_MODEL_FROM_DATABASE=RK1808 Neural Network Processor Card
@@ -64380,7 +65574,7 @@ pci:v00001D8F*
ID_VENDOR_FROM_DATABASE=Enyx
pci:v00001D94*
- ID_VENDOR_FROM_DATABASE=Chengdu Higon IC Design Co.Ltd
+ ID_VENDOR_FROM_DATABASE=Chengdu Haiguang IC Design Co., Ltd.
pci:v00001D94d00001450*
ID_MODEL_FROM_DATABASE=Root Complex
@@ -64544,6 +65738,51 @@ pci:v00001DEFd0000E00B*
pci:v00001DEFd0000E00C*
ID_MODEL_FROM_DATABASE=eMAG PCI Express Root Port 7
+pci:v00001DF3*
+ ID_VENDOR_FROM_DATABASE=Ethernity Networks
+
+pci:v00001DF3d00000201*
+ ID_MODEL_FROM_DATABASE=ACE-NIC40 Programmable Network Accelerator
+
+pci:v00001DF3d00000201sv00001DF3sd00000001*
+ ID_MODEL_FROM_DATABASE=ACE-NIC40 Programmable Network Accelerator (ENA1040)
+
+pci:v00001DF3d00000201sv00001DF3sd00000002*
+ ID_MODEL_FROM_DATABASE=ACE-NIC40 Programmable Network Accelerator (ENA1044)
+
+pci:v00001DF3d00000201sv00001DF3sd00000003*
+ ID_MODEL_FROM_DATABASE=ACE-NIC40 Programmable Network Accelerator (ENA1044S)
+
+pci:v00001DF3d00000202*
+ ID_MODEL_FROM_DATABASE=ACE-NIC50 Programmable Network Accelerator
+
+pci:v00001DF3d00000202sv00001DF3sd00000001*
+ ID_MODEL_FROM_DATABASE=ACE-NIC50 Programmable Network Accelerator (ENA2050F)
+
+pci:v00001DF3d00000202sv00001DF3sd00000002*
+ ID_MODEL_FROM_DATABASE=ACE-NIC50 Programmable Network Accelerator (ENA2050FS)
+
+pci:v00001DF3d00000203*
+ ID_MODEL_FROM_DATABASE=ACE-NIC100 Programmable Network Accelerator
+
+pci:v00001DF3d00000203sv00001DF3sd00000001*
+ ID_MODEL_FROM_DATABASE=ACE-NIC100 Programmable Network Accelerator (ENA2080F)
+
+pci:v00001DF3d00000203sv00001DF3sd00000002*
+ ID_MODEL_FROM_DATABASE=ACE-NIC100 Programmable Network Accelerator (ENA2080FS)
+
+pci:v00001DF3d00000203sv00001DF3sd00000003*
+ ID_MODEL_FROM_DATABASE=ACE-NIC100 Programmable Network Accelerator (ENA2100F)
+
+pci:v00001DF3d00000204*
+ ID_MODEL_FROM_DATABASE=ACE-NIC-NID Programmable Network Accelerator
+
+pci:v00001DF3d00000204sv00001DF3sd00000001*
+ ID_MODEL_FROM_DATABASE=ACE-NIC-NID Programmable Network Accelerator (ENA1020Z)
+
+pci:v00001DF3d00000204sv00001DF3sd00000002*
+ ID_MODEL_FROM_DATABASE=ACE-NIC-NID Programmable Network Accelerator (ENA1020ZS)
+
pci:v00001DF7*
ID_VENDOR_FROM_DATABASE=opencpi.org
@@ -64577,6 +65816,12 @@ pci:v00001E24d0000021F*
pci:v00001E24d00001525*
ID_MODEL_FROM_DATABASE=Xilinx BCU-1525
+pci:v00001E38*
+ ID_VENDOR_FROM_DATABASE=Thinci, Inc
+
+pci:v00001E3D*
+ ID_VENDOR_FROM_DATABASE=Burlywood, Inc
+
pci:v00001FC0*
ID_VENDOR_FROM_DATABASE=Ascom (Finland) Oy
@@ -68621,6 +69866,15 @@ pci:v00008086d00000C7E*
pci:v00008086d00000C7F*
ID_MODEL_FROM_DATABASE=Atom Processor S1200 Internal
+pci:v00008086d00000CF8*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+
+pci:v00008086d00000CF8sv00008086sd00000000*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+
+pci:v00008086d00000CF8sv00008086sd00000001*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+
pci:v00008086d00000D00*
ID_MODEL_FROM_DATABASE=Crystal Well DRAM Controller
@@ -68648,6 +69902,15 @@ pci:v00008086d00000D26*
pci:v00008086d00000D36*
ID_MODEL_FROM_DATABASE=Crystal Well Integrated Graphics Controller
+pci:v00008086d00000D58*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+
+pci:v00008086d00000D58sv00008086sd00000000*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+
+pci:v00008086d00000D58sv00008086sd00000001*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+
pci:v00008086d00000E00*
ID_MODEL_FROM_DATABASE=Xeon E7 v2/Xeon E5 v2/Core i7 DMI2
@@ -71690,6 +72953,9 @@ pci:v00008086d00001521sv00008086sd00005001*
pci:v00008086d00001521sv00008086sd00005002*
ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Ethernet Server Adapter I350-T2)
+pci:v00008086d00001521sv00008086sd00005003*
+ ID_MODEL_FROM_DATABASE=I350 Gigabit Network Connection (Ethernet 1G 4P I350-t OCP)
+
pci:v00008086d00001522*
ID_MODEL_FROM_DATABASE=I350 Gigabit Fiber Network Connection
@@ -71849,6 +73115,9 @@ pci:v00008086d0000152F*
pci:v00008086d00001530*
ID_MODEL_FROM_DATABASE=X540 Virtual Function
+pci:v00008086d00001531*
+ ID_MODEL_FROM_DATABASE=I210 Gigabit Unprogrammed
+
pci:v00008086d00001533*
ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection
@@ -72188,6 +73457,15 @@ pci:v00008086d00001572sv00008086sd0000000F*
pci:v00008086d00001572sv00008086sd00000010*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Converged Network Adapter X710)
+pci:v00008086d00001572sv00008086sd00000013*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet 10G 2P X710 OCP)
+
+pci:v00008086d00001572sv00008086sd00000014*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet 10G 4P X710 OCP)
+
+pci:v00008086d00001572sv00008086sd00000015*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet Server Adapter X710-DA2 for OCP)
+
pci:v00008086d00001572sv00008086sd00004005*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+
@@ -72605,6 +73883,9 @@ pci:v00008086d000015D9*
pci:v00008086d000015DA*
ID_MODEL_FROM_DATABASE=JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
+pci:v00008086d000015DB*
+ ID_MODEL_FROM_DATABASE=JHL6340 Thunderbolt 3 USB 3.1 Controller (C step) [Alpine Ridge 2C 2016]
+
pci:v00008086d000015DF*
ID_MODEL_FROM_DATABASE=Ethernet Connection (8) I219-LM
@@ -72650,9 +73931,24 @@ pci:v00008086d000015EF*
pci:v00008086d000015F0*
ID_MODEL_FROM_DATABASE=JHL7540 Thunderbolt 3 USB Controller [Titan Ridge DD 2018]
+pci:v00008086d000015F6*
+ ID_MODEL_FROM_DATABASE=I210 Gigabit Ethernet Connection
+
pci:v00008086d000015FF*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T
+pci:v00008086d000015FFsv00008086sd00000005*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet 10G 2P X710-T2L-t Adapter)
+
+pci:v00008086d000015FFsv00008086sd00000006*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet 10G 4P X710-T4L-t Adapter)
+
+pci:v00008086d000015FFsv00008086sd00000007*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet 10G 2P X710-T2L-t OCP)
+
+pci:v00008086d000015FFsv00008086sd00000008*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet 10G 4P X710-T4L-t OCP)
+
pci:v00008086d00001600*
ID_MODEL_FROM_DATABASE=Broadwell-U Host Bridge -OPI
@@ -74390,6 +75686,12 @@ pci:v00008086d00002021*
pci:v00008086d00002024*
ID_MODEL_FROM_DATABASE=Sky Lake-E MM/Vt-d Configuration Registers
+pci:v00008086d00002025*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E RAS
+
+pci:v00008086d00002026*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E IOAPIC
+
pci:v00008086d00002030*
ID_MODEL_FROM_DATABASE=Sky Lake-E PCI Express Root Port A
@@ -74402,9 +75704,51 @@ pci:v00008086d00002032*
pci:v00008086d00002033*
ID_MODEL_FROM_DATABASE=Sky Lake-E PCI Express Root Port D
+pci:v00008086d00002034*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E VT-d
+
pci:v00008086d00002035*
ID_MODEL_FROM_DATABASE=Sky Lake-E RAS Configuration Registers
+pci:v00008086d00002036*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E IOxAPIC Configuration Registers
+
+pci:v00008086d00002040*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Integrated Memory Controller
+
+pci:v00008086d00002041*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Integrated Memory Controller
+
+pci:v00008086d00002042*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Integrated Memory Controller
+
+pci:v00008086d00002043*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Integrated Memory Controller
+
+pci:v00008086d00002044*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Integrated Memory Controller
+
+pci:v00008086d00002045*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E LM Channel 1
+
+pci:v00008086d00002046*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E LMS Channel 1
+
+pci:v00008086d00002047*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E LMDP Channel 1
+
+pci:v00008086d00002048*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E DECS Channel 2
+
+pci:v00008086d00002049*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E LM Channel 2
+
+pci:v00008086d0000204A*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E LMS Channel 2
+
+pci:v00008086d0000204B*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E LMDP Channel 2
+
pci:v00008086d0000204C*
ID_MODEL_FROM_DATABASE=Sky Lake-E M3KTI Registers
@@ -74426,6 +75770,15 @@ pci:v00008086d00002056*
pci:v00008086d00002057*
ID_MODEL_FROM_DATABASE=Sky Lake-E CHA Registers
+pci:v00008086d00002058*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E KTI 0
+
+pci:v00008086d00002059*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E UPI Registers
+
+pci:v00008086d00002066*
+ ID_MODEL_FROM_DATABASE=Sky Lake-E Integrated Memory Controller
+
pci:v00008086d00002068*
ID_MODEL_FROM_DATABASE=Sky Lake-E DDRIO Registers
@@ -79325,6 +80678,9 @@ pci:v00008086d000027E2*
pci:v00008086d000027E2sv00001775sd000011CC*
ID_MODEL_FROM_DATABASE=82801GR/GH/GHM (ICH7 Family) PCI Express Port 6 (CC11/CL11)
+pci:v00008086d0000280B*
+ ID_MODEL_FROM_DATABASE=Intel(R) Display Audio
+
pci:v00008086d00002810*
ID_MODEL_FROM_DATABASE=82801HB/HR (ICH8/R) LPC Interface Controller
@@ -82502,6 +83858,9 @@ pci:v00008086d0000318C*
pci:v00008086d0000318E*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor NorthPeak
+pci:v00008086d00003197*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor PCI-default ISA-bridge
+
pci:v00008086d0000319A*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Trusted Execution Engine Interface
@@ -82529,6 +83888,9 @@ pci:v00008086d000031C4*
pci:v00008086d000031C6*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO SPI Host Controller
+pci:v00008086d000031CC*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor SDA Standard Compliant SD Host Controller
+
pci:v00008086d000031D4*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Gaussian Mixture Model
@@ -84590,11 +85952,17 @@ pci:v00008086d00003CF5*
pci:v00008086d00003CF6*
ID_MODEL_FROM_DATABASE=Xeon E5/Core i7 System Address Decoder
+pci:v00008086d00003E10*
+ ID_MODEL_FROM_DATABASE=8th Gen Core 4-core Processor Host Bridge/DRAM Registers [Coffee Lake H]
+
pci:v00008086d00003E18*
- ID_MODEL_FROM_DATABASE=8th Gen Core Processor Host Bridge/DRAM Registers
+ ID_MODEL_FROM_DATABASE=8th Gen Core 4-core Workstation Processor Host Bridge/DRAM Registers [Coffee Lake S]
pci:v00008086d00003E1F*
- ID_MODEL_FROM_DATABASE=8th Gen Core Processor Host Bridge/DRAM Registers
+ ID_MODEL_FROM_DATABASE=8th Gen Core 4-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S]
+
+pci:v00008086d00003E30*
+ ID_MODEL_FROM_DATABASE=8th Gen Core 8-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S]
pci:v00008086d00003E81*
ID_MODEL_FROM_DATABASE=8th Gen Core Processor PCIe Controller (x16)
@@ -84611,6 +85979,9 @@ pci:v00008086d00003E91*
pci:v00008086d00003E92*
ID_MODEL_FROM_DATABASE=UHD Graphics 630 (Desktop)
+pci:v00008086d00003E93*
+ ID_MODEL_FROM_DATABASE=UHD Graphics 610
+
pci:v00008086d00003E9B*
ID_MODEL_FROM_DATABASE=UHD Graphics 630 (Mobile)
@@ -87542,6 +88913,9 @@ pci:v00008086d00009D3Asv000017AAsd0000225D*
pci:v00008086d00009D3Asv000017AAsd0000382A*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1 (B51-80 Laptop)
+pci:v00008086d00009D3D*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Active Management Technology - SOL
+
pci:v00008086d00009D43*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller
@@ -87558,10 +88932,13 @@ pci:v00008086d00009D48sv00001028sd000006F3*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller (Latitude 3570)
pci:v00008086d00009D4E*
- ID_MODEL_FROM_DATABASE=Intel(R) 100 Series Chipset Family LPC Controller/eSPI Controller - 9D4E
+ ID_MODEL_FROM_DATABASE=Sunrise Point LPC Controller/eSPI Controller
pci:v00008086d00009D4Esv000017AAsd0000225D*
- ID_MODEL_FROM_DATABASE=Intel(R) 100 Series Chipset Family LPC Controller/eSPI Controller - 9D4E (ThinkPad T480)
+ ID_MODEL_FROM_DATABASE=Sunrise Point LPC Controller/eSPI Controller (ThinkPad T480)
+
+pci:v00008086d00009D50*
+ ID_MODEL_FROM_DATABASE=Sunrise Point LPC Controller
pci:v00008086d00009D56*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller
@@ -87623,6 +89000,48 @@ pci:v00008086d00009D71*
pci:v00008086d00009D71sv000017AAsd0000225D*
ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio (ThinkPad T480)
+pci:v00008086d00009D84*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP LPC Controller
+
+pci:v00008086d00009DA3*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP SMBus Controller
+
+pci:v00008086d00009DA4*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP SPI Controller
+
+pci:v00008086d00009DB0*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP PCI Express Root Port #9
+
+pci:v00008086d00009DB6*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP PCI Express Root Port #15
+
+pci:v00008086d00009DB8*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP PCI Express Root Port #1
+
+pci:v00008086d00009DBC*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP PCI Express Root Port #5
+
+pci:v00008086d00009DC8*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP High Definition Audio Controller
+
+pci:v00008086d00009DD3*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP SATA Controller [AHCI Mode]
+
+pci:v00008086d00009DE0*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP MEI Controller #1
+
+pci:v00008086d00009DED*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP USB 3.1 xHCI Controller
+
+pci:v00008086d00009DEF*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP Shared SRAM
+
+pci:v00008086d00009DF0*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP CNVi [Wireless-AC]
+
+pci:v00008086d00009DF9*
+ ID_MODEL_FROM_DATABASE=Cannon Point-LP Thermal Controller
+
pci:v00008086d0000A000*
ID_MODEL_FROM_DATABASE=Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge
@@ -88337,6 +89756,15 @@ pci:v00008086d0000A2F0*
pci:v00008086d0000A304*
ID_MODEL_FROM_DATABASE=H370 Chipset LPC/eSPI Controller
+pci:v00008086d0000A305*
+ ID_MODEL_FROM_DATABASE=Z390 Chipset LPC/eSPI Controller
+
+pci:v00008086d0000A306*
+ ID_MODEL_FROM_DATABASE=Q370 Chipset LPC/eSPI Controller
+
+pci:v00008086d0000A30C*
+ ID_MODEL_FROM_DATABASE=QM370 Chipset LPC/eSPI Controller
+
pci:v00008086d0000A323*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH SMBus Controller
@@ -88421,12 +89849,27 @@ pci:v00008086d0000A348*
pci:v00008086d0000A352*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH SATA AHCI Controller
+pci:v00008086d0000A353*
+ ID_MODEL_FROM_DATABASE=Cannon Lake Mobile PCH SATA AHCI Controller
+
pci:v00008086d0000A360*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH HECI Controller
pci:v00008086d0000A363*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH Active Management Technology - SOL
+pci:v00008086d0000A368*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH Serial IO I2C Controller #0
+
+pci:v00008086d0000A369*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH Serial IO I2C Controller #1
+
+pci:v00008086d0000A36A*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH Serial IO I2C Controller #2
+
+pci:v00008086d0000A36B*
+ ID_MODEL_FROM_DATABASE=Cannon Lake PCH Serial IO I2C Controller #3
+
pci:v00008086d0000A36D*
ID_MODEL_FROM_DATABASE=Cannon Lake PCH USB 3.1 xHCI Host Controller
@@ -90278,6 +91721,12 @@ pci:v0000CAFEd00000003*
pci:v0000CAFEd00000006*
ID_MODEL_FROM_DATABASE=Luna PCI-e 3000 Hardware Security Module
+pci:v0000CAFEd00000007*
+ ID_MODEL_FROM_DATABASE=Luna K6 Hardware Security Module
+
+pci:v0000CAFEd00000008*
+ ID_MODEL_FROM_DATABASE=Luna K7 Hardware Security Module
+
pci:v0000CC53*
ID_VENDOR_FROM_DATABASE=ScaleFlux Inc.
@@ -90893,6 +92342,9 @@ pci:v0000F043*
pci:v0000F05B*
ID_VENDOR_FROM_DATABASE=Foxconn International, Inc. (Wrong ID)
+pci:v0000F15E*
+ ID_VENDOR_FROM_DATABASE=SiFive, Inc.
+
pci:v0000F1D0*
ID_VENDOR_FROM_DATABASE=AJA Video
@@ -90926,6 +92378,9 @@ pci:v0000F1D0d0000DFEE*
pci:v0000F1D0d0000EB0E*
ID_MODEL_FROM_DATABASE=Corvid 44
+pci:v0000F1D0d0000EB1D*
+ ID_MODEL_FROM_DATABASE=Kona 5
+
pci:v0000F1D0d0000EFAC*
ID_MODEL_FROM_DATABASE=Xena SD-MM/SD-22-MM
diff --git a/hwdb/20-sdio-classes.hwdb b/hwdb/20-sdio-classes.hwdb
index 72cce9d898..eceb773ae3 100644
--- a/hwdb/20-sdio-classes.hwdb
+++ b/hwdb/20-sdio-classes.hwdb
@@ -3,7 +3,7 @@
# Data imported from: hwdb/sdio.ids
sdio:c00v*d*
- ID_SDIO_CLASS_FROM_DATABASE=Not a SDIO standard interface
+ ID_SDIO_CLASS_FROM_DATABASE=Non-standard SDIO interface
sdio:c01v*d*
ID_SDIO_CLASS_FROM_DATABASE=UART standard interface
diff --git a/hwdb/20-sdio-vendor-model.hwdb b/hwdb/20-sdio-vendor-model.hwdb
index 6c4dbe8ac4..489dab433e 100644
--- a/hwdb/20-sdio-vendor-model.hwdb
+++ b/hwdb/20-sdio-vendor-model.hwdb
@@ -110,6 +110,9 @@ sdio:c*v02D0dA94D*
sdio:c*v02D0dA962*
ID_MODEL_FROM_DATABASE=BCM43362 WLAN card
+sdio:c*v02D0dA9A6*
+ ID_MODEL_FROM_DATABASE=BCM43438 combo WLAN and Bluetooth Low Energy (BLE) # As in RPi3B
+
sdio:c*v02DB*
ID_VENDOR_FROM_DATABASE=SyChip Inc.
diff --git a/hwdb/20-usb-vendor-model.hwdb b/hwdb/20-usb-vendor-model.hwdb
index 44e8b7875b..f14aa703d1 100644
--- a/hwdb/20-usb-vendor-model.hwdb
+++ b/hwdb/20-usb-vendor-model.hwdb
@@ -158,6 +158,9 @@ usb:v03E7*
usb:v03E7p2150*
ID_MODEL_FROM_DATABASE=Myriad VPU [Movidius Neural Compute Stick]
+usb:v03E7p2485*
+ ID_MODEL_FROM_DATABASE=Movidius MyriadX
+
usb:v03E8*
ID_VENDOR_FROM_DATABASE=EndPoints, Inc.
@@ -1292,6 +1295,9 @@ usb:v03F0p3011*
usb:v03F0p3017*
ID_MODEL_FROM_DATABASE=Printing Support
+usb:v03F0p304A*
+ ID_MODEL_FROM_DATABASE=Slim Keyboard
+
usb:v03F0p3102*
ID_MODEL_FROM_DATABASE=PhotoSmart P1100 Printer w/ Card Reader
@@ -2267,6 +2273,9 @@ usb:v0403p6014*
usb:v0403p6015*
ID_MODEL_FROM_DATABASE=Bridge(I2C/SPI/UART/FIFO)
+usb:v0403p6F70*
+ ID_MODEL_FROM_DATABASE=HB-RF-USB
+
usb:v0403p8028*
ID_MODEL_FROM_DATABASE=Dev board JTAG (FT232H based)
@@ -2600,6 +2609,9 @@ usb:v0403pF0C9*
usb:v0403pF0E9*
ID_MODEL_FROM_DATABASE=Tagsys L-P101
+usb:v0403pF0EE*
+ ID_MODEL_FROM_DATABASE=Tagsys Medio P200x
+
usb:v0403pF1A0*
ID_MODEL_FROM_DATABASE=Asix PRESTO Programmer
@@ -2609,6 +2621,9 @@ usb:v0403pF208*
usb:v0403pF3C0*
ID_MODEL_FROM_DATABASE=4N-GALAXY Serial Converter
+usb:v0403pF458*
+ ID_MODEL_FROM_DATABASE=ABACUS ELECTRICS Optical Probe
+
usb:v0403pF608*
ID_MODEL_FROM_DATABASE=CTI USB-485-Mini
@@ -2771,6 +2786,9 @@ usb:v0408p030C*
usb:v0408p03B2*
ID_MODEL_FROM_DATABASE=HP Webcam
+usb:v0408p03F4*
+ ID_MODEL_FROM_DATABASE=HP Webcam
+
usb:v0408p1030*
ID_MODEL_FROM_DATABASE=FV TouchCam N1 (Video)
@@ -3839,6 +3857,9 @@ usb:v041D*
usb:v041E*
ID_VENDOR_FROM_DATABASE=Creative Technology, Ltd
+usb:v041Ep0414*
+ ID_MODEL_FROM_DATABASE=HS-720 Headset
+
usb:v041Ep1002*
ID_MODEL_FROM_DATABASE=Nomad II
@@ -4781,6 +4802,9 @@ usb:v0424p2640*
usb:v0424p2660*
ID_MODEL_FROM_DATABASE=Hub
+usb:v0424p2744*
+ ID_MODEL_FROM_DATABASE=Hub
+
usb:v0424p274D*
ID_MODEL_FROM_DATABASE=HTC Hub Controller
@@ -4802,6 +4826,9 @@ usb:v0424p5434*
usb:v0424p5534*
ID_MODEL_FROM_DATABASE=Hub
+usb:v0424p5744*
+ ID_MODEL_FROM_DATABASE=Hub
+
usb:v0424p7500*
ID_MODEL_FROM_DATABASE=LAN7500 Ethernet 10/100/1000 Adapter
@@ -5669,6 +5696,12 @@ usb:v044FpB324*
usb:v044FpB326*
ID_MODEL_FROM_DATABASE=Gamepad GP XID
+usb:v044FpB351*
+ ID_MODEL_FROM_DATABASE=F16 MFD 1
+
+usb:v044FpB352*
+ ID_MODEL_FROM_DATABASE=F16 MFD 2
+
usb:v044FpB603*
ID_MODEL_FROM_DATABASE=force feedback Wheel
@@ -5687,6 +5720,9 @@ usb:v044FpB654*
usb:v044FpB678*
ID_MODEL_FROM_DATABASE=T.Flight Rudder Pedals
+usb:v044FpB679*
+ ID_MODEL_FROM_DATABASE=T-Rudder
+
usb:v044FpB687*
ID_MODEL_FROM_DATABASE=TWCS Throttle
@@ -6260,6 +6296,9 @@ usb:v045B*
usb:v045Bp0053*
ID_MODEL_FROM_DATABASE=RX610 RX-Stick
+usb:v045Bp0229*
+ ID_MODEL_FROM_DATABASE=mSATA Adapter [renkforce Pi-102]
+
usb:v045D*
ID_VENDOR_FROM_DATABASE=Nortel Networks, Ltd
@@ -7370,6 +7409,9 @@ usb:v0461p4D91*
usb:v0461p4D92*
ID_MODEL_FROM_DATABASE=Optical mouse M-D17DR
+usb:v0461p4DB1*
+ ID_MODEL_FROM_DATABASE=Dell Laptop Integrated Webcam 2Mpix
+
usb:v0461p4DE3*
ID_MODEL_FROM_DATABASE=HP 5-Button Optical Comfort Mouse
@@ -8162,6 +8204,9 @@ usb:v046DpC07D*
usb:v046DpC07E*
ID_MODEL_FROM_DATABASE=G402 Gaming Mouse
+usb:v046DpC080*
+ ID_MODEL_FROM_DATABASE=G303 Gaming Mouse
+
usb:v046DpC083*
ID_MODEL_FROM_DATABASE=G403 Prodigy Gaming Mouse
@@ -9494,6 +9539,9 @@ usb:v0480p0100*
usb:v0480p0200*
ID_MODEL_FROM_DATABASE=External Disk
+usb:v0480p0820*
+ ID_MODEL_FROM_DATABASE=Canvio Advance Disk
+
usb:v0480pA006*
ID_MODEL_FROM_DATABASE=External Disk 1.5TB
@@ -12506,6 +12554,9 @@ usb:v04A9p32B1*
usb:v04A9p32B2*
ID_MODEL_FROM_DATABASE=PowerShot G9 X
+usb:v04A9p32B3*
+ ID_MODEL_FROM_DATABASE=PowerShot G5 X
+
usb:v04A9p32B4*
ID_MODEL_FROM_DATABASE=EOS Rebel T6
@@ -13586,6 +13637,12 @@ usb:v04B8p0892*
usb:v04B8p0893*
ID_MODEL_FROM_DATABASE=EP-774A
+usb:v04B8p1114*
+ ID_MODEL_FROM_DATABASE=XP-440 [Expression Home Small-in-One Printer]
+
+usb:v04B8p1129*
+ ID_MODEL_FROM_DATABASE=ET-4750 [WorkForce ET-4750 EcoTank All-in-One]
+
usb:v04B9*
ID_VENDOR_FROM_DATABASE=Rainbow Technologies, Inc.
@@ -13919,12 +13976,21 @@ usb:v04C5p10FE*
usb:v04C5p1104*
ID_MODEL_FROM_DATABASE=KD02906 Line Thermal Printer
+usb:v04C5p114F*
+ ID_MODEL_FROM_DATABASE=fi-6130
+
usb:v04C5p1150*
ID_MODEL_FROM_DATABASE=fi-6230
+usb:v04C5p11F3*
+ ID_MODEL_FROM_DATABASE=fi-6130Z
+
usb:v04C5p125A*
ID_MODEL_FROM_DATABASE=PalmSecure Sensor Device - MP
+usb:v04C5p132E*
+ ID_MODEL_FROM_DATABASE=fi-7160
+
usb:v04C5p200F*
ID_MODEL_FROM_DATABASE=Sigma DP2 (Mass Storage)
@@ -15830,6 +15896,9 @@ usb:v04E8p7081*
usb:v04E8p8001*
ID_MODEL_FROM_DATABASE=Handheld
+usb:v04E8pD003*
+ ID_MODEL_FROM_DATABASE=GT-I9003
+
usb:v04E8pE020*
ID_MODEL_FROM_DATABASE=SERI E02 SCOM 6200 UMTS Phone
@@ -19550,6 +19619,18 @@ usb:v054Cp0BA0*
usb:v054Cp0BB5*
ID_MODEL_FROM_DATABASE=Headset MDR-1000X
+usb:v054Cp0C02*
+ ID_MODEL_FROM_DATABASE=ILCE-7M3 [A7III] in Mass Storage mode
+
+usb:v054Cp0C03*
+ ID_MODEL_FROM_DATABASE=ILCE-7M3 [A7III] in MTP mode
+
+usb:v054Cp0C34*
+ ID_MODEL_FROM_DATABASE=ILCE-7M3 [A7III] in PC Remote mode
+
+usb:v054Cp0CDA*
+ ID_MODEL_FROM_DATABASE=PlayStation Classic controller
+
usb:v054Cp1000*
ID_MODEL_FROM_DATABASE=Wireless Buzz! Receiver
@@ -20519,6 +20600,9 @@ usb:v056Ap038E*
usb:v056Ap038F*
ID_MODEL_FROM_DATABASE=DTH-3220 [Cintiq Pro 32] internal hub
+usb:v056Ap0390*
+ ID_MODEL_FROM_DATABASE=DTK-1660 [Cintiq 16]
+
usb:v056Ap0400*
ID_MODEL_FROM_DATABASE=PenPartner 4x5
@@ -20613,7 +20697,10 @@ usb:v056Ep0074*
ID_MODEL_FROM_DATABASE=Optical mouse M-FW1UL
usb:v056Ep0075*
- ID_MODEL_FROM_DATABASE=M-FW2DL Mouse
+ ID_MODEL_FROM_DATABASE=Laser mouse M-FW2DL
+
+usb:v056Ep0077*
+ ID_MODEL_FROM_DATABASE=Laser mouse M-LY2UL
usb:v056Ep2003*
ID_MODEL_FROM_DATABASE=JC-U3613M
@@ -46071,59 +46158,257 @@ usb:v1203p0140*
ID_MODEL_FROM_DATABASE=TTP-245C
usb:v1209*
- ID_VENDOR_FROM_DATABASE=InterBiometrics
+ ID_VENDOR_FROM_DATABASE=Generic
+
+usb:v1209p0001*
+ ID_MODEL_FROM_DATABASE=pid.codes Test PID
+
+usb:v1209p01C0*
+ ID_MODEL_FROM_DATABASE=Input Club Kiibohd Device
+
+usb:v1209p01CB*
+ ID_MODEL_FROM_DATABASE=Input Club Kiibohd Device Bootloader
+
+usb:v1209p0256*
+ ID_MODEL_FROM_DATABASE=Schwalm & Tate LLC pISO Raspberry Pi Hat
+
+usb:v1209p053A*
+ ID_MODEL_FROM_DATABASE=Hackerspace San Salvador HSSV SAMR21-Mote
+
+usb:v1209p0CBD*
+ ID_MODEL_FROM_DATABASE=Andrzej Szombierski kuku.eu.org keyboard
+
+usb:v1209p0D32*
+ ID_MODEL_FROM_DATABASE=ODrive Robotics ODrive v3
usb:v1209p1001*
- ID_MODEL_FROM_DATABASE=USB Hub
+ ID_MODEL_FROM_DATABASE=InterBiometrics Hub
usb:v1209p1002*
- ID_MODEL_FROM_DATABASE=USB Relais
+ ID_MODEL_FROM_DATABASE=InterBiometrics Relais
usb:v1209p1003*
- ID_MODEL_FROM_DATABASE=IBSecureCam-P
+ ID_MODEL_FROM_DATABASE=InterBiometrics IBSecureCam-P
usb:v1209p1004*
- ID_MODEL_FROM_DATABASE=IBSecureCam-O
+ ID_MODEL_FROM_DATABASE=InterBiometrics IBSecureCam-O
usb:v1209p1005*
- ID_MODEL_FROM_DATABASE=IBSecureCam-N
+ ID_MODEL_FROM_DATABASE=InterBiometrics IBSecureCam-N
usb:v1209p1006*
- ID_MODEL_FROM_DATABASE=Mini IO-Board
+ ID_MODEL_FROM_DATABASE=InterBiometrics Mini IO-Board
+
+usb:v1209p1007*
+ ID_MODEL_FROM_DATABASE=e-radionica.com Croduino SAMD
+
+usb:v1209p1986*
+ ID_MODEL_FROM_DATABASE=dgrubb Jaguar Tap
usb:v1209p1AB5*
ID_MODEL_FROM_DATABASE=Arachnid Labs Tsunami
+usb:v1209p1AB6*
+ ID_MODEL_FROM_DATABASE=Arachnid Labs Tsunami Bootloader
+
usb:v1209p2000*
ID_MODEL_FROM_DATABASE=Zygmunt Krynicki Lantern Brightness Sensor
+usb:v1209p2001*
+ ID_MODEL_FROM_DATABASE=OSHEC Pi-pilot opensource and openhardware autopilot system
+
+usb:v1209p2002*
+ ID_MODEL_FROM_DATABASE=Peter Lawrence PIC16F1-USB-DFU-Bootloader
+
+usb:v1209p2003*
+ ID_MODEL_FROM_DATABASE=Peter Lawrence SAMDx1-USB-DFU-Bootloader
+
+usb:v1209p2004*
+ ID_MODEL_FROM_DATABASE=GCBASIC Serial CDC Stack
+
+usb:v1209p2005*
+ ID_MODEL_FROM_DATABASE=GCBASIC OakTree Stack
+
+usb:v1209p2006*
+ ID_MODEL_FROM_DATABASE=GCBASIC Simulation Stack
+
+usb:v1209p2016*
+ ID_MODEL_FROM_DATABASE=Cupkee
+
+usb:v1209p2017*
+ ID_MODEL_FROM_DATABASE=Benjamin Shockley Mini SAM
+
+usb:v1209p2020*
+ ID_MODEL_FROM_DATABASE=Captain Credible Gate Crystal
+
usb:v1209p2048*
ID_MODEL_FROM_DATABASE=Housedillon.com MRF49XA Transciever
+usb:v1209p2100*
+ ID_MODEL_FROM_DATABASE=TinyFPGA B1 and B2 Boards
+
+usb:v1209p2101*
+ ID_MODEL_FROM_DATABASE=TinyFPGA A-Series Programmer
+
+usb:v1209p2200*
+ ID_MODEL_FROM_DATABASE=Dygma Shortcut Bootloader
+
+usb:v1209p2201*
+ ID_MODEL_FROM_DATABASE=Dygma Shortcut Keyboard
+
usb:v1209p2222*
ID_MODEL_FROM_DATABASE=LabConnect Signalgenerator
usb:v1209p2300*
- ID_MODEL_FROM_DATABASE=Keyboardio Keyboardio Model 01 Bootloader
+ ID_MODEL_FROM_DATABASE=Keyboardio Model 01 Bootloader
usb:v1209p2301*
- ID_MODEL_FROM_DATABASE=Keyboardio Keyboardio Model 01
+ ID_MODEL_FROM_DATABASE=Keyboardio Model 01
+
+usb:v1209p2323*
+ ID_MODEL_FROM_DATABASE=bytewerk.org candleLight
usb:v1209p2327*
- ID_MODEL_FROM_DATABASE=K.T.E.C.Bootloader Device
+ ID_MODEL_FROM_DATABASE=K.T.E.C. Bootloader Device
usb:v1209p2328*
ID_MODEL_FROM_DATABASE=K.T.E.C. Keyboard Device
+usb:v1209p2333*
+ ID_MODEL_FROM_DATABASE=Kai Ryu Kimera
+
+usb:v1209p2334*
+ ID_MODEL_FROM_DATABASE=Kai Ryu Staryu
+
+usb:v1209p2335*
+ ID_MODEL_FROM_DATABASE=Portwell Sense8
+
+usb:v1209p2336*
+ ID_MODEL_FROM_DATABASE=Portwell Sense8
+
usb:v1209p2337*
- ID_MODEL_FROM_DATABASE=/Dev or SlashDev /Net
+ ID_MODEL_FROM_DATABASE=/Dev /Net
+
+usb:v1209p2342*
+ ID_MODEL_FROM_DATABASE=Andreas Bogk Big Red Button
+
+usb:v1209p2345*
+ ID_MODEL_FROM_DATABASE=VV-Soft Simple Generic HID IO
+
+usb:v1209p2357*
+ ID_MODEL_FROM_DATABASE=KarolKucza TinyPassword
+
+usb:v1209p2400*
+ ID_MODEL_FROM_DATABASE=phooky Snap-Pad
+
+usb:v1209p2488*
+ ID_MODEL_FROM_DATABASE=Peter Lawrence CMSIS-DAP Dapper Miser
+
+usb:v1209p2552*
+ ID_MODEL_FROM_DATABASE=ProjectIota Electrolink
+
+usb:v1209p2600*
+ ID_MODEL_FROM_DATABASE=Majenko Technologies chipKIT Lenny
+
+usb:v1209p2635*
+ ID_MODEL_FROM_DATABASE=Sevinz GameBot
+
+usb:v1209p2800*
+ ID_MODEL_FROM_DATABASE=Entropic Engineering Triangulation
+
+usb:v1209p2801*
+ ID_MODEL_FROM_DATABASE=Entropic Engineering Object Manipulation
+
+usb:v1209p2A00*
+ ID_MODEL_FROM_DATABASE=mooware Wii adapter
+
+usb:v1209p2A01*
+ ID_MODEL_FROM_DATABASE=mooware SNES adapter
usb:v1209p3000*
ID_MODEL_FROM_DATABASE=lloyd3000
+usb:v1209p3100*
+ ID_MODEL_FROM_DATABASE=OpenSimHardware Pedals & Buttons Controller
+
+usb:v1209p317E*
+ ID_MODEL_FROM_DATABASE=Codecrete Wirekite
+
+usb:v1209p3210*
+ ID_MODEL_FROM_DATABASE=OSH Lab, LLC Magic Keys
+
usb:v1209p3333*
ID_MODEL_FROM_DATABASE=LabConnect Digitalnetzteil
+usb:v1209p3690*
+ ID_MODEL_FROM_DATABASE=Kigakudoh TouchMIDI32
+
+usb:v1209p4096*
+ ID_MODEL_FROM_DATABASE=CynaraKrewe Cynara
+
+usb:v1209p414C*
+ ID_MODEL_FROM_DATABASE=Adi Linden
+
+usb:v1209p414D*
+ ID_MODEL_FROM_DATABASE=Adi Linden
+
+usb:v1209p4242*
+ ID_MODEL_FROM_DATABASE=Komakallio Astrophotography Community KomaHub Remote Power Switch
+
+usb:v1209p4256*
+ ID_MODEL_FROM_DATABASE=CuVoodoo BusVoodoo multi-protocol debugging adapter
+
+usb:v1209p4321*
+ ID_MODEL_FROM_DATABASE=mooltipass Offline Password Keeper Bootloader
+
+usb:v1209p4322*
+ ID_MODEL_FROM_DATABASE=mooltipass Arduino Sketch
+
+usb:v1209p4356*
+ ID_MODEL_FROM_DATABASE=CuVoodoo firmware
+
+usb:v1209p4443*
+ ID_MODEL_FROM_DATABASE=j1rie IRMP_STM32 Bootloader
+
+usb:v1209p4444*
+ ID_MODEL_FROM_DATABASE=j1rie IRMP_STM32
+
+usb:v1209p4545*
+ ID_MODEL_FROM_DATABASE=SlothCo Enterprises Teletype Adapter
+
+usb:v1209p4646*
+ ID_MODEL_FROM_DATABASE=SmartPID SPC1000
+
+usb:v1209p4748*
+ ID_MODEL_FROM_DATABASE=Kate Gray GHETT-iO Bootloader
+
+usb:v1209p4750*
+ ID_MODEL_FROM_DATABASE=Chris Pavlina (c4757p) C4-x computer (development interface)
+
+usb:v1209p4757*
+ ID_MODEL_FROM_DATABASE=Chris Pavlina (c4757p) WCP52 Gain/Phase Analyzer
+
+usb:v1209p4801*
+ ID_MODEL_FROM_DATABASE=Wojciech Krutnik NVMemProg
+
+usb:v1209p4C60*
+ ID_MODEL_FROM_DATABASE=MightyPork GEX module
+
+usb:v1209p4C61*
+ ID_MODEL_FROM_DATABASE=MightyPork GEX wireless dongle
+
+usb:v1209p4D53*
+ ID_MODEL_FROM_DATABASE=mindsensors.com NXTCam5
+
+usb:v1209p5038*
+ ID_MODEL_FROM_DATABASE=frotz.net mdebug rswd protocol
+
+usb:v1209p5039*
+ ID_MODEL_FROM_DATABASE=frotz.net lpcboot protocol
+
+usb:v1209p5050*
+ ID_MODEL_FROM_DATABASE=trebb ISO50
+
usb:v1209p5222*
ID_MODEL_FROM_DATABASE=telavivmakers attami
@@ -46133,54 +46418,480 @@ usb:v1209p53C0*
usb:v1209p53C1*
ID_MODEL_FROM_DATABASE=SatoshiLabs TREZOR
+usb:v1209p5432*
+ ID_MODEL_FROM_DATABASE=Open Programmer
+
+usb:v1209p5457*
+ ID_MODEL_FROM_DATABASE=Openlab.Taipei Taiwanduino
+
+usb:v1209p571C*
+ ID_MODEL_FROM_DATABASE=StreetoArcade PancadariaStick
+
usb:v1209p5A22*
ID_MODEL_FROM_DATABASE=ikari_01 sd2snes
+usb:v1209p6000*
+ ID_MODEL_FROM_DATABASE=Pulsar Heavy Industries Cenx4
+
+usb:v1209p600D*
+ ID_MODEL_FROM_DATABASE=Makdaam N93 Interface
+
+usb:v1209p6464*
+ ID_MODEL_FROM_DATABASE=Electric Exploits Shinewave
+
+usb:v1209p6502*
+ ID_MODEL_FROM_DATABASE=jj1bdx avrhwrng v2rev1
+
+usb:v1209p6570*
+ ID_MODEL_FROM_DATABASE=Iowa Scaled Engineering, LLC CKT-AVRPROGRAMMER
+
+usb:v1209p6666*
+ ID_MODEL_FROM_DATABASE=Talpa Chen VSFLogic
+
+usb:v1209p6667*
+ ID_MODEL_FROM_DATABASE=SensePost Universal Serial aBUSe - Generic HID
+
+usb:v1209p6742*
+ ID_MODEL_FROM_DATABASE=NPK Cubitel Atomic Force Microscope
+
+usb:v1209p6809*
+ ID_MODEL_FROM_DATABASE=Tach Radio Doppelganger
+
+usb:v1209p6948*
+ ID_MODEL_FROM_DATABASE=MySensors Sensebender Gateway BootLoader
+
+usb:v1209p6949*
+ ID_MODEL_FROM_DATABASE=MySensors Sensebender Gateway
+
+usb:v1209p6BCF*
+ ID_MODEL_FROM_DATABASE=blaste Gameboy Cart Flasher
+
+usb:v1209p7000*
+ ID_MODEL_FROM_DATABASE=Secalot Dongle
+
+usb:v1209p7001*
+ ID_MODEL_FROM_DATABASE=Secalot Bootloader
+
+usb:v1209p70B1*
+ ID_MODEL_FROM_DATABASE=Sutajio Ko-Usagi (Kosagi) Tomu
+
+usb:v1209p7331*
+ ID_MODEL_FROM_DATABASE=Dangerous Prototypes Bus Pirate Next Gen CDC
+
+usb:v1209p7332*
+ ID_MODEL_FROM_DATABASE=Dangerous Prototypes Bus Pirate Next Gen Logic Analyzer
+
+usb:v1209p7401*
+ ID_MODEL_FROM_DATABASE=Beststream-jp Tool_CDC
+
usb:v1209p7530*
- ID_MODEL_FROM_DATABASE=Refflion - IoT Board - Bootloader
+ ID_MODEL_FROM_DATABASE=PotentialLabs Refflion - IoT Development Board - Bootloader
usb:v1209p7531*
- ID_MODEL_FROM_DATABASE=Refflion - IoT Board - Sketch
+ ID_MODEL_FROM_DATABASE=PotentialLabs Refflion - IoT Development Board - Sketch
+
+usb:v1209p7551*
+ ID_MODEL_FROM_DATABASE=The Tessel Project Tessel 2
+
+usb:v1209p7777*
+ ID_MODEL_FROM_DATABASE=circuitvalley IO Board V3
+
+usb:v1209p7778*
+ ID_MODEL_FROM_DATABASE=circuitvalley IO Board V3 Bootloader
usb:v1209p7BD0*
ID_MODEL_FROM_DATABASE=pokey9000 Tiny Bit Dingus
-usb:v1209pABD0*
- ID_MODEL_FROM_DATABASE=tibounise ADB converter
+usb:v1209p8000*
+ ID_MODEL_FROM_DATABASE=Autonomii NODii 2
+
+usb:v1209p8086*
+ ID_MODEL_FROM_DATABASE=MisfitTech Nano Zero Bootloader
+
+usb:v1209p8087*
+ ID_MODEL_FROM_DATABASE=MisfitTech Nano Zero
+
+usb:v1209p8123*
+ ID_MODEL_FROM_DATABASE=Danyboard M0 bootloader
+
+usb:v1209p812A*
+ ID_MODEL_FROM_DATABASE=Danyboard M0
+
+usb:v1209p813A*
+ ID_MODEL_FROM_DATABASE=MickMad HACK Bootloader
+
+usb:v1209p813B*
+ ID_MODEL_FROM_DATABASE=MickMad HACK Sketch
+
+usb:v1209p8242*
+ ID_MODEL_FROM_DATABASE=Tom Wimmenhove Electronics NBS-DAC 192/24 UAC1
+
+usb:v1209p8243*
+ ID_MODEL_FROM_DATABASE=Tom Wimmenhove Electronics NBS-DAC 192/24 UAC2
+
+usb:v1209p8472*
+ ID_MODEL_FROM_DATABASE=Shantea Controls OpenDeck
+
+usb:v1209p8661*
+ ID_MODEL_FROM_DATABASE=ProgHQ TL866 programmer
+
+usb:v1209p8844*
+ ID_MODEL_FROM_DATABASE=munia.io MUNIA
+
+usb:v1209p8888*
+ ID_MODEL_FROM_DATABASE=Blinkinlabs POV Pendant
+
+usb:v1209p8889*
+ ID_MODEL_FROM_DATABASE=Blinkinlabs POV Pendant (bootloader)
+
+usb:v1209p8B00*
+ ID_MODEL_FROM_DATABASE=ReSwitched Libtransistor Serial Console
+
+usb:v1209p9021*
+ ID_MODEL_FROM_DATABASE=Connected Community Hackerspace ESPlant
+
+usb:v1209p9317*
+ ID_MODEL_FROM_DATABASE=Sutajio Ko-Usagi (Kosagi) Palawan-Tx
+
+usb:v1209p9999*
+ ID_MODEL_FROM_DATABASE=Sandeepan Sengupta CodeBridge Infineo
+
+usb:v1209p9DB5*
+ ID_MODEL_FROM_DATABASE=PD Buddy Sink
+
+usb:v1209pA033*
+ ID_MODEL_FROM_DATABASE=area0x33 Memtype
+
+usb:v1209pA100*
+ ID_MODEL_FROM_DATABASE=KB LES Narsil analog breakout
+
+usb:v1209pA10C*
+ ID_MODEL_FROM_DATABASE=KB LES Aminoacid Synthesizer
+
+usb:v1209pA1E5*
+ ID_MODEL_FROM_DATABASE=Atreus Keyboards Atreus Keyboard
+
+usb:v1209pA3A4*
+ ID_MODEL_FROM_DATABASE=MK::Box MK::Kbd
+
+usb:v1209pA3A5*
+ ID_MODEL_FROM_DATABASE=MK::Box MK::Kbd Bootloader
+
+usb:v1209pA55A*
+ ID_MODEL_FROM_DATABASE=Forever Young Software ATTINY2313
+
+usb:v1209pA602*
+ ID_MODEL_FROM_DATABASE=Robotips RTBoard
+
+usb:v1209pA7EA*
+ ID_MODEL_FROM_DATABASE=area3001 Knixx SW04
+
+usb:v1209pA800*
+ ID_MODEL_FROM_DATABASE=sowbug.com WebLight
+
+usb:v1209pA8B0*
+ ID_MODEL_FROM_DATABASE=Intelectron BootWare
+
+usb:v1209pA8B1*
+ ID_MODEL_FROM_DATABASE=Intelectron FrameWare
+
+usb:v1209pAA00*
+ ID_MODEL_FROM_DATABASE=Serg Oskin LinuxCNC HID Extender
+
+usb:v1209pAA0B*
+ ID_MODEL_FROM_DATABASE=Open Bionics
+
+usb:v1209pAB3D*
+ ID_MODEL_FROM_DATABASE=3DArtists Alligator board
+
+usb:v1209pABBA*
+ ID_MODEL_FROM_DATABASE=CoinWISE SafeWISE
+
+usb:v1209pABC0*
+ ID_MODEL_FROM_DATABASE=Omzlo controller
+
+usb:v1209pABCD*
+ ID_MODEL_FROM_DATABASE=Sandeepan Sengupta CodeBridge
+
+usb:v1209pABD1*
+ ID_MODEL_FROM_DATABASE=OpenMV Cam
+
+usb:v1209pACDC*
+ ID_MODEL_FROM_DATABASE=Gediminas Zukaitis midi-grid
+
+usb:v1209pACE5*
+ ID_MODEL_FROM_DATABASE=SimAces Panel Ace
usb:v1209pACED*
- ID_MODEL_FROM_DATABASE=Open Lighting Project - Ja Rule Device
+ ID_MODEL_FROM_DATABASE=Open Lighting Project Ja Rule Device
usb:v1209pACEE*
- ID_MODEL_FROM_DATABASE=Open Lighting Project - Ja Rule Bootloader
+ ID_MODEL_FROM_DATABASE=Open Lighting Project Ja Rule Bootloader
+
+usb:v1209pADB0*
+ ID_MODEL_FROM_DATABASE=tibounise ADB converter
+
+usb:v1209pADDA*
+ ID_MODEL_FROM_DATABASE=MicroPython Boards
+
+usb:v1209pB007*
+ ID_MODEL_FROM_DATABASE=Konsgn Global_Boot
+
+usb:v1209pB00B*
+ ID_MODEL_FROM_DATABASE=CrapLab Random Device
+
+usb:v1209pB010*
+ ID_MODEL_FROM_DATABASE=IObitZ CodeBridge
+
+usb:v1209pB01D*
+ ID_MODEL_FROM_DATABASE=WyoLum VeloKey
+
+usb:v1209pB058*
+ ID_MODEL_FROM_DATABASE=Model B, LLC Holoseat
+
+usb:v1209pB0B0*
+ ID_MODEL_FROM_DATABASE=Monero Hardware Monero Bootloader
+
+usb:v1209pB100*
+ ID_MODEL_FROM_DATABASE=ptrandem iBizi
+
+usb:v1209pB101*
+ ID_MODEL_FROM_DATABASE=IObitZ Infineo
+
+usb:v1209pB195*
+ ID_MODEL_FROM_DATABASE=flehrad Big Switch PCB
+
+usb:v1209pBAB1*
+ ID_MODEL_FROM_DATABASE=ElectronicCats Meow Meow
+
+usb:v1209pBABE*
+ ID_MODEL_FROM_DATABASE=brunofreitas.com STM32 HID Bootloader
+
+usb:v1209pBAD1*
+ ID_MODEL_FROM_DATABASE=Gregory POTEAU CommLinkUSB
+
+usb:v1209pBAD2*
+ ID_MODEL_FROM_DATABASE=Gregory POTEAU XLinkUSB
+
+usb:v1209pBADE*
+ ID_MODEL_FROM_DATABASE=Semarme SemarmeHID
+
+usb:v1209pBB00*
+ ID_MODEL_FROM_DATABASE=keyplus split keyboard firmware
+
+usb:v1209pBB01*
+ ID_MODEL_FROM_DATABASE=keyplus xusb bootloader
+
+usb:v1209pBB02*
+ ID_MODEL_FROM_DATABASE=keyplus nRF24 wireless keyboard dongle
+
+usb:v1209pBB03*
+ ID_MODEL_FROM_DATABASE=keyplus nrf24lu1p-512 bootloader
+
+usb:v1209pBB05*
+ ID_MODEL_FROM_DATABASE=keyplus kp_boot_32u4 bootloader
+
+usb:v1209pBEBA*
+ ID_MODEL_FROM_DATABASE=serasidis.gr STM32 HID Bootloader
usb:v1209pBEEF*
ID_MODEL_FROM_DATABASE=Modal MC-USB
+usb:v1209pC001*
+ ID_MODEL_FROM_DATABASE=Cynteract Alpha
+
+usb:v1209pC0C0*
+ ID_MODEL_FROM_DATABASE=Geppetto_Electronics Orthrus
+
+usb:v1209pC0C1*
+ ID_MODEL_FROM_DATABASE=Michael Bemmerl cookie-mouse
+
+usb:v1209pC0CA*
+ ID_MODEL_FROM_DATABASE=Jean THOMAS DirtyJTAG
+
+usb:v1209pC0D3*
+ ID_MODEL_FROM_DATABASE=Samy Kamkar USBdriveby
+
+usb:v1209pC0DA*
+ ID_MODEL_FROM_DATABASE=Monero Hardware Monero Firmware
+
+usb:v1209pC0DE*
+ ID_MODEL_FROM_DATABASE=KMRH Labs SBL Brain
+
usb:v1209pC0F5*
ID_MODEL_FROM_DATABASE=unethi PERswitch
+usb:v1209pC1AA*
+ ID_MODEL_FROM_DATABASE=Proyecto CIAA Computadora Industrial Abierta Argentina
+
+usb:v1209pC1B1*
+ ID_MODEL_FROM_DATABASE=Chibitronics Love-to-Code
+
+usb:v1209pC311*
+ ID_MODEL_FROM_DATABASE=bg nerilex GB-USB-Link
+
usb:v1209pCA1C*
- ID_MODEL_FROM_DATABASE=KnightOS Hub
+ ID_MODEL_FROM_DATABASE=KnightOS Generic Hub
usb:v1209pCA1D*
ID_MODEL_FROM_DATABASE=KnightOS MTP Device
+usb:v1209pCAEA*
+ ID_MODEL_FROM_DATABASE=Open Music Kontrollers Chimaera
+
usb:v1209pCAFE*
ID_MODEL_FROM_DATABASE=ii iigadget
+usb:v1209pCC14*
+ ID_MODEL_FROM_DATABASE=trebb NaN-15
+
+usb:v1209pCC86*
+ ID_MODEL_FROM_DATABASE=Manfred's Technologies Anastasia Bootloader
+
+usb:v1209pCEB0*
+ ID_MODEL_FROM_DATABASE=KG4LNE GE-FlashUSB
+
+usb:v1209pCF20*
+ ID_MODEL_FROM_DATABASE=Smart Citizen SCK 2.0
+
+usb:v1209pD00D*
+ ID_MODEL_FROM_DATABASE=Monero Hardware Monero Developer
+
+usb:v1209pD017*
+ ID_MODEL_FROM_DATABASE=empiriKit empiriKit Controller
+
+usb:v1209pD11D*
+ ID_MODEL_FROM_DATABASE=Koi Science DI-Lambda AVR
+
+usb:v1209pD3D8*
+ ID_MODEL_FROM_DATABASE=Duet3d Duet 0.8.5
+
+usb:v1209pD706*
+ ID_MODEL_FROM_DATABASE=SkyBean SkyDrop
+
+usb:v1209pDA42*
+ ID_MODEL_FROM_DATABASE=Devan Lai dap42 debug access probe
+
+usb:v1209pDAA0*
+ ID_MODEL_FROM_DATABASE=darknao btClubSportWheel
+
usb:v1209pDADA*
ID_MODEL_FROM_DATABASE=Rebel Technology OWL
+usb:v1209pDB42*
+ ID_MODEL_FROM_DATABASE=Devan Lai dapboot DFU bootloader
+
+usb:v1209pDC21*
+ ID_MODEL_FROM_DATABASE=FPGA-Computer Dual Charger
+
+usb:v1209pDDDD*
+ ID_MODEL_FROM_DATABASE=Stephan Electronics OpenCVMeter
+
usb:v1209pDEAD*
ID_MODEL_FROM_DATABASE=chaosfield.at AVR-Ruler
+usb:v1209pDEAF*
+ ID_MODEL_FROM_DATABASE=CrapLab 4chord MIDI
+
+usb:v1209pDED1*
+ ID_MODEL_FROM_DATABASE=ManCave Made Quark One
+
+usb:v1209pDF00*
+ ID_MODEL_FROM_DATABASE=D.F.Mac. @TripArts Music mi:muz:tuch
+
+usb:v1209pDF01*
+ ID_MODEL_FROM_DATABASE=D.F.Mac. @TripArts Music mi:muz:can
+
+usb:v1209pDF02*
+ ID_MODEL_FROM_DATABASE=D.F.Mac. @TripArts Music mi:muz:can-lite
+
+usb:v1209pE116*
+ ID_MODEL_FROM_DATABASE=Elijah Motornyy open-oscilloscope-stm32f3
+
+usb:v1209pE1EC*
+ ID_MODEL_FROM_DATABASE=FreeSRP
+
+usb:v1209pE4EE*
+ ID_MODEL_FROM_DATABASE=trebb keytee
+
+usb:v1209pE500*
+ ID_MODEL_FROM_DATABASE=GitleMikkelsen Helios Laser DAC
+
+usb:v1209pEAEA*
+ ID_MODEL_FROM_DATABASE=Pinscape Controller
+
+usb:v1209pEB01*
+ ID_MODEL_FROM_DATABASE=RobotMaker.club EB1
+
+usb:v1209pEBA7*
+ ID_MODEL_FROM_DATABASE=VictorGrigoryev USBscope
+
+usb:v1209pEE00*
+ ID_MODEL_FROM_DATABASE=Explore Embedded SODA(SWD OpenSource Debug Adapter)
+
+usb:v1209pEE02*
+ ID_MODEL_FROM_DATABASE=Explore Embedded Explore M3 VCOM
+
+usb:v1209pEE03*
+ ID_MODEL_FROM_DATABASE=Explore Embedded Explore M3 DFU
+
+usb:v1209pEE2C*
+ ID_MODEL_FROM_DATABASE=jaka USB2RS485
+
+usb:v1209pEFFA*
+ ID_MODEL_FROM_DATABASE=EffigyLabs atmega32u4-USB-LUFA-Bootloader
+
+usb:v1209pEFFE*
+ ID_MODEL_FROM_DATABASE=EffigyLabs Control Pedal
+
+usb:v1209pF000*
+ ID_MODEL_FROM_DATABASE=Uniti ARC
+
+usb:v1209pF00D*
+ ID_MODEL_FROM_DATABASE=RomanStepanov Shifter/Pedals Adapter
+
+usb:v1209pF12E*
+ ID_MODEL_FROM_DATABASE=Michael Bemmerl Feuermelder
+
+usb:v1209pF16A*
+ ID_MODEL_FROM_DATABASE=uri_ba Cougar TQS adapter
+
+usb:v1209pF16C*
+ ID_MODEL_FROM_DATABASE=uri_ba adapter for Vipercore's FCC3 Force Sensing Module
+
+usb:v1209pF380*
+ ID_MODEL_FROM_DATABASE=Windsor Schmidt MD-380 Open Radio Firmware
+
+usb:v1209pF3FC*
+ ID_MODEL_FROM_DATABASE=dRonin Flight controller-Lumenier Lux
+
+usb:v1209pF49A*
+ ID_MODEL_FROM_DATABASE=TimVideos.us & HDMI2USB.tv Projects FPGA Programmer & UART Bridge (PIC based Firmware)
+
usb:v1209pFA11*
ID_MODEL_FROM_DATABASE=moonglow OpenXHC
+usb:v1209pFA57*
+ ID_MODEL_FROM_DATABASE=3DRacers Pilot Board
+
+usb:v1209pFA58*
+ ID_MODEL_FROM_DATABASE=3DRacers Pilot Board (Bootloader)
+
+usb:v1209pFAB1*
+ ID_MODEL_FROM_DATABASE=PAP Mechatronic Technology LamDiNao
+
+usb:v1209pFACE*
+ ID_MODEL_FROM_DATABASE=Protean Synth Craft
+
+usb:v1209pFADE*
+ ID_MODEL_FROM_DATABASE=Open Collector dude
+
usb:v1209pFEED*
ID_MODEL_FROM_DATABASE=ProgramGyar AVR-IR Sender
+usb:v1209pFFFF*
+ ID_MODEL_FROM_DATABASE=Life2Device Smart House
+
usb:v120E*
ID_VENDOR_FROM_DATABASE=Hudson Soft Co., Ltd
@@ -57257,6 +57968,12 @@ usb:v3016*
usb:v3016p0001*
ID_MODEL_FROM_DATABASE=Nitrogen Bootloader
+usb:v30EE*
+ ID_VENDOR_FROM_DATABASE=Fujitsu Connected Technologies Limited
+
+usb:v30EEp1001*
+ ID_MODEL_FROM_DATABASE=F-01L
+
usb:v3125*
ID_VENDOR_FROM_DATABASE=Eagletron
diff --git a/hwdb/60-evdev.hwdb b/hwdb/60-evdev.hwdb
index dcabb18d3e..3ebdeb6564 100644
--- a/hwdb/60-evdev.hwdb
+++ b/hwdb/60-evdev.hwdb
@@ -147,6 +147,17 @@ evdev:name:Elan Touchpad:dmi:*:svnASUSTeKCOMPUTERINC.:pnUX305UA:*
EVDEV_ABS_36=0:2119:33
#########################################
+# Bangho
+#########################################
+
+# Bangho Cloud Pro
+evdev:name:SYNA3602:00 0911:5288 Touchpad:dmi:*svnBANGHO:pnCLOUDPRO:*
+ EVDEV_ABS_00=52:1747:17
+ EVDEV_ABS_01=45:954:14
+ EVDEV_ABS_35=52:1747:17
+ EVDEV_ABS_36=45:954:14
+
+#########################################
# Dell
#########################################
@@ -442,6 +453,13 @@ evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pn*02173BG*:*pvrThinkPadEd
EVDEV_ABS_35=916:6077:55
EVDEV_ABS_36=653:5395:116
+# Lenovo Yoga 500-14IBD, 80N4
+evdev:name:AlpsPS/2 ALPS GlidePoint:dmi:*svnLENOVO:*pvrLenovoYoga500-14IBD*
+ EVDEV_ABS_00=117:3952:36
+ EVDEV_ABS_01=105:1960:26
+ EVDEV_ABS_35=117:3952:36
+ EVDEV_ABS_36=105:1960:26
+
#########################################
# Razer
#########################################
diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
index 0d9c31678b..355544030b 100644
--- a/hwdb/60-keyboard.hwdb
+++ b/hwdb/60-keyboard.hwdb
@@ -431,6 +431,13 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnGIGABYTE:pnU2442:*
KEYBOARD_KEY_a0=! # mute
###########################################################
+# Gemini
+###########################################################
+
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnGeminiDevices:pnNC14V1006:*
+ KEYBOARD_KEY_9c=enter
+
+###########################################################
# Genius
###########################################################
@@ -618,6 +625,31 @@ evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHP*ProBook*645*G4*
KEYBOARD_KEY_73=slash # Slash key
KEYBOARD_KEY_f8=wlan # Wireless HW switch button
+# HP Stream 7
+# The ACPI tables contains a gpio-keys entry for a non connected GPIO
+# causing spurious events, map this to unknown to disable it
+# older kernels use "ev:23" newer kernels "ev:3"
+evdev:name:gpio-keys:phys:gpio-keys/input0:ev:3:dmi:*:svnHewlett-Packard:pnHPStream7Tablet:*
+evdev:name:gpio-keys:phys:gpio-keys/input0:ev:23:dmi:*:svnHewlett-Packard:pnHPStream7Tablet:*
+ KEYBOARD_KEY_0=unknown
+
+##########################################################
+# Huawei
+##########################################################
+
+# Huawei WMI hotkeys driver
+evdev:name:Huawei WMI hotkeys:dmi:bvn*:bvr*:bd*:svnHUAWEI*
+ KEYBOARD_KEY_287=f20 # Microphone mute button, should be micmute
+
+# Huawei MACH-WX9
+evdev:atkbd:dmi:bvn*:bvr*:svnHUAWEI*:pnMACH-WX9:pvr*
+ KEYBOARD_KEY_f7=unknown
+ KEYBOARD_KEY_f8=fn
+
+evdev:name:Huawei WMI hotkeys:dmi:bvn*:bvr*:bd*:svnHUAWEI*:pnMACH-WX9:pvr*
+ KEYBOARD_KEY_281=unknown # Brightness Down, also emitted by acpi-video, ignore
+ KEYBOARD_KEY_282=unknown # Brightness Up, also emitted by acpi-video, ignore
+
###########################################################
# IBM
###########################################################
@@ -982,10 +1014,6 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*PR200*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnU90/U100:*
KEYBOARD_KEY_e4=reserved
-# MSI GS65 Stealth Thin has a physical backslash key next to the space bar
-evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pnGS65StealthThin*:pvr*
- KEYBOARD_KEY_56=backslash
-
###########################################################
# MSI
###########################################################
@@ -1106,6 +1134,10 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnPurism*:pn*Librem13v2*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnPurism*:pn*Librem13v3*:pvr*
KEYBOARD_KEY_56=backslash
+# Purism Librem 13 V4
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnPurism*:pn*Librem13v4*:pvr*
+ KEYBOARD_KEY_56=backslash
+
###########################################################
# Quanta
###########################################################
diff --git a/hwdb/60-sensor.hwdb b/hwdb/60-sensor.hwdb
index 5bce467a24..b916addcad 100644
--- a/hwdb/60-sensor.hwdb
+++ b/hwdb/60-sensor.hwdb
@@ -107,6 +107,9 @@ sensor:modalias:acpi:INVN6500*:dmi:*svn*ASUSTeK*:*pn*TP300LA*
sensor:modalias:acpi:INVN6500*:dmi:*svn*ASUSTeK*:*pn*TP300LD*
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+sensor:modalias:acpi:KXJ2109*:dmi:*:svnASUSTeK*:pnME176C*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+
sensor:modalias:acpi:SMO8500*:dmi:*svn*ASUSTeK*:*pn*TP300LJ*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
@@ -214,6 +217,14 @@ sensor:modalias:acpi:SMO8500*:dmi:*svn*DEXP*:*pn*DEXPOEM*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
#########################################
+# DIGMA
+#########################################
+
+# Digma CITI E203
+sensor:modalias:acpi:BOSC0200*:dmi:*:svnDigma:pnCITIE203ES2010EW:*
+ ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+
+#########################################
# Endless
#########################################
sensor:modalias:acpi:ACCE0001*:dmi:*svnEndless*:*pnELT-NL3*
@@ -314,6 +325,10 @@ sensor:modalias:acpi:BMA250E*:dmi:bvnLENOVO:*:pvrLenovoMIIX3-1030:*
sensor:modalias:acpi:SMO8500*:dmi:bvnLENOVO:*:pvrLenovoMIIX3-830:*
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+# IdeaPad D330
+sensor:modalias:acpi:BOSC0200*:dmi:*:svnLENOVO:pn81H3:*
+ ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
+
# IdeaPad Miix 310 note this only is for BIOS version (bvr) 1HCN4?WW and 1HCN2?WW, which has
# a portrait LCD panel, versions with bvr 1HCN3?WW have a landscape panel
sensor:modalias:acpi:KIOX000A*:dmi:bvnLENOVO:bvr1HCN4?WW:*:svnLENOVO:pn80SG:*
@@ -352,9 +367,15 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnMicro-StarInternationalCo.,Ltd.:pnS100:*
#########################################
# Nuvision (TMax)
#########################################
+
+# Nuvision/TMAX 8" Windows signature edition. TM800W560L
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTMAX:pnTM800W560L:*
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+# Nuvision Solo 10 Draw. TM101W610L
+sensor:modalias:acpi:KIOX000A*:dmi:*:svnTMAX:pnTM101W610L:*
+ ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
+
#########################################
# Onda
#########################################
@@ -423,6 +444,10 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnProwise:pnPT301:*
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTECLAST:pnX80Pro:*
ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+#Teclast X80 PLUS (H5C5)
+sensor:modalias:acpi:KIOX000A*:dmi:*:svnTECLAST:pnDefaultstring:*
+ ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+
sensor:modalias:acpi:KIOX000A*:dmi:*:svnTECLAST:pnX98PlusII:*
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
diff --git a/hwdb/70-mouse.hwdb b/hwdb/70-mouse.hwdb
index 07364c2c64..98549039f3 100644
--- a/hwdb/70-mouse.hwdb
+++ b/hwdb/70-mouse.hwdb
@@ -310,6 +310,8 @@ mouse:usb:v17efp6050:name:Lenovo Precision USB Mouse:
# Lenovo MOBGUL
mouse:usb:v17efp601d:name:Primax Lenovo Laser Mouse:
+ MOUSE_DPI=1600@125
+
# Lenovo MOBGULA
mouse:usb:v17efp6045:name:Lenovo USB Laser Mouse:
MOUSE_DPI=1600@125
@@ -331,6 +333,8 @@ mouse:usb:v17efp6044:name:ThinkPad USB Laser Mouse:
# Logitech G5 Laser Mouse
mouse:usb:v046dpc049:name:Logitech USB Gaming Mouse:
+ MOUSE_DPI=400@500 *800@500 2000@500
+
# Logitech G500s Laser Gaming Mouse
mouse:usb:v046dpc24e:name:Logitech G500s Laser Gaming Mouse:
MOUSE_DPI=400@500 *800@500 2000@500
@@ -384,8 +388,12 @@ mouse:usb:v046dpc539:name:Logitech USB Receiver Mouse:
# Logitech Wireless Mouse M185
mouse:usb:v046dp4008:name:Logitech M185:
mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:4008:
+ MOUSE_DPI=1000@125
+
# Logitech Wireless Mouse M510
mouse:usb:v046dp1025:name:Logitech M510:
+ MOUSE_DPI=1000@125
+
# Logitech M705 (marathon mouse)
mouse:usb:v046dp101b:name:Logitech M705:
mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:101b:
@@ -431,12 +439,15 @@ mouse:bluetooth:v046dpb003:name:Logitech MX1000 mouse:
# Logitech Anywhere MX
mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:1017:
mouse:usb:v046dp1017:name:Logitech Anywhere MX:
+ MOUSE_WHEEL_CLICK_ANGLE=20
+
# Logitech Anywhere MX 2S
mouse:usb:v046dp406a:name:Logitech MX Anywhere 2S:
MOUSE_WHEEL_CLICK_ANGLE=20
# Logitech MX Master
# Horiz wheel has 14 stops, angle is rounded up
+mouse:usb:v046dp4060:name:Logitech MX Master:
mouse:usb:v046dp4041:name:Logitech MX Master:
MOUSE_DPI=1000@166
MOUSE_WHEEL_CLICK_ANGLE=15
@@ -466,12 +477,20 @@ mouse:bluetooth:v046dpb019:name:MX Master 2S Mouse:
# Logitech M-BJ58 Optical Mouse
mouse:usb:v046dpc00e:name:Logitech USB-PS/2 Optical Mouse:
+ MOUSE_DPI=400@125
+
# Logitech Mini Optical Mouse
mouse:usb:v046dpc016:name:Logitech Optical USB Mouse:
+ MOUSE_DPI=400@125
+
# Logitech MX310 Optical Mouse
mouse:usb:v046dpc01b:name:Logitech USB-PS/2 Optical Mouse:
+ MOUSE_DPI=400@125
+
# Logitech USB-PS/2 M-BT58
mouse:usb:v046dpc03e:name:Logitech USB-PS/2 Optical Mouse:
+ MOUSE_DPI=400@125
+
# Logitech TrackMan Marble Wheel USB
mouse:usb:v046dpc401:name:Logitech USB-PS/2 Trackball:
MOUSE_DPI=400@125
@@ -486,10 +505,16 @@ mouse:usb:v046dpc045:name:Logitech USB-PS/2 Optical Mouse:
# Logitech MX400 Performance Laser Mouse
mouse:usb:v046dpc043:name:Logitech USB-PS/2 Optical Mouse:
+ MOUSE_DPI=800@125
+
# Logitech MX1000 Laser Cordless Mouse
mouse:usb:v046dpc50e:name:Logitech USB RECEIVER:
+ MOUSE_DPI=800@125
+
# Logitech Cordless Click! Plus
mouse:usb:v046dpc50e:name:Logitech USB Receiver:
+ MOUSE_DPI=800@125
+
# Logitech, Inc. RX 300 Optical Mouse
mouse:usb:v046dpc040:name:Logitech USB-PS/2 Optical Mouse:
MOUSE_DPI=800@125
@@ -510,14 +535,24 @@ mouse:usb:v046dpc517:name:Logitech USB Receiver:
# Logitech RX1000 Laser Mouse
mouse:usb:v046dpc046:name:Logitech USB Optical Mouse:
+ MOUSE_DPI=1000@125
+
# Logitech M100 Optical Mouse
mouse:usb:v046dpc05a:name:Logitech USB Optical Mouse:
+ MOUSE_DPI=1000@125
+
# Logitech USB Laser Mouse M-U0011-O rebranded as "terra Laser"
mouse:usb:v046dpc065:name:Logitech USB Laser Mouse:
+ MOUSE_DPI=1000@125
+
# Logitech USB Laser Mouse M-U0007 [M500]
mouse:usb:v046dpc069:name:Logitech USB Laser Mouse:
+ MOUSE_DPI=1000@125
+
# Logitech V500 Cordless Notebook Mouse
mouse:usb:v046dpc510:name:Logitech USB Receiver:
+ MOUSE_DPI=1000@125
+
# Logitech M560 Wireless Mouse
mouse:usb:v046dp402d:name:Logitech M560:
mouse:usb:v046dpc52b:name:Logitech Unifying Device. Wireless PID:402d:
@@ -577,6 +612,8 @@ mouse:usb:v045ep076c:name:Microsoft Microsoft® Comfort Mouse 4500:
# Microsoft Wireless Mobile Mouse 4000
mouse:usb:v045ep0745:name:Microsoft Microsoft® Nano Transceiver v2.0:
+ MOUSE_DPI=1000@142
+
# Microsoft Sculpt Ergonomic Mouse
mouse:usb:v045ep07a5:name:Microsoft Microsoft® 2.4GHz Transceiver v9.0:
MOUSE_DPI=1000@142
diff --git a/hwdb/acpi_id_registry.html b/hwdb/acpi_id_registry.html
index 46256ff138..73511032da 100644
--- a/hwdb/acpi_id_registry.html
+++ b/hwdb/acpi_id_registry.html
@@ -92,6 +92,8 @@
<tr class="even"><td>COMHEAR, INC.</td><td>CMHR</td><td>08/02/2018</td> </tr>
<tr class="odd"><td>Sensel, Inc.</td><td>SNSL</td><td>08/20/2018</td> </tr>
<tr class="even"><td>G2touch Co., LTD</td><td>GTCH</td><td>12/04/2018</td> </tr>
+ <tr class="odd"><td>Guizhou Huaxintong Semiconductor Technology Co., Ltd</td><td>HXTS</td><td>01/18/2019</td> </tr>
+ <tr class="even"><td>Amazon Corporation</td><td>AMZN</td><td>02/06/2019</td> </tr>
</tbody>
</table>
</body>
diff --git a/hwdb/ma-large.txt b/hwdb/ma-large.txt
index 630a8f5a1d..044e9db966 100644
--- a/hwdb/ma-large.txt
+++ b/hwdb/ma-large.txt
@@ -1238,9 +1238,6 @@ C4ADF1 (base 16) GOPEACE Inc.
Shanghai 200092
CN
-00-84-ED (hex) Private
-0084ED (base 16) Private
-
DC-DC-07 (hex) TRP Systems BV
DCDC07 (base 16) TRP Systems BV
Televisieweg 159 1322 BH Almere
@@ -1697,12 +1694,6 @@ C8C50E (base 16) Shenzhen Primestone Network Technologies.Co., Ltd.
Jungwon-gu Seongnam-si Gyeonggi-do, 462726
KR
-5C-5B-35 (hex) Mist Systems, Inc.
-5C5B35 (base 16) Mist Systems, Inc.
- 4410 El Camino Real
- Los Altos CA 94022
- US
-
E8-07-BF (hex) SHENZHEN BOOMTECH INDUSTRY CO.,LTD
E807BF (base 16) SHENZHEN BOOMTECH INDUSTRY CO.,LTD
Floor 6 East, Bldg 6, Yusheng Industrial Area, Xixiang, Bao'an District
@@ -10376,12 +10367,6 @@ A8CE90 (base 16) CVC
Taipei 114
TW
-00-19-8F (hex) Alcatel Bell N.V.
-00198F (base 16) Alcatel Bell N.V.
- Copernicuslaan 50
- Antwerp B-2018
- BE
-
00-19-E8 (hex) Cisco Systems, Inc
0019E8 (base 16) Cisco Systems, Inc
80 West Tasman Drive
@@ -12566,12 +12551,6 @@ A8CE90 (base 16) CVC
Wohlen AG 5610
CH
-00-12-2A (hex) VTech Telecommunications Ltd.
-00122A (base 16) VTech Telecommunications Ltd.
- 23/F, Tai Ping Industrial Centre, Block 1
-
- HK
-
00-12-2E (hex) Signal Technology - AISD
00122E (base 16) Signal Technology - AISD
1820 Preston Park Blvd.
@@ -22286,12 +22265,6 @@ B47443 (base 16) Samsung Electronics Co.,Ltd
San Jose CA 94568
US
-00-A0-B8 (hex) NetApp
-00A0B8 (base 16) NetApp
- 2001 Danfield Ct.
- Fort Collins CO 80525
- US
-
9C-D4-8B (hex) Innolux Technology Europe BV
9CD48B (base 16) Innolux Technology Europe BV
Stationstraat 39G
@@ -26306,12 +26279,6 @@ B430C0 (base 16) York Instruments Ltd
York North Yorkshire YO10 5NY
GB
-C4-68-D0 (hex) VTech Telecommunications Ltd.
-C468D0 (base 16) VTech Telecommunications Ltd.
- 23/F, Tai Ping Industrial Centre, Block 1,
- HONG KONG NA 000000
- HK
-
48-D6-D5 (hex) Google, Inc.
48D6D5 (base 16) Google, Inc.
1600 Amphitheatre Parkway
@@ -28832,42 +28799,6 @@ D05157 (base 16) LEAX Arkivator Telecom
Roseville CA 95747
US
-00-1F-90 (hex) Actiontec Electronics, Inc
-001F90 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-20-76-00 (hex) Actiontec Electronics, Inc
-207600 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-F8-E4-FB (hex) Actiontec Electronics, Inc
-F8E4FB (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-18-1B-EB (hex) Actiontec Electronics, Inc
-181BEB (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-E8-6F-F2 (hex) Actiontec Electronics, Inc
-E86FF2 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-FC-2B-B2 (hex) Actiontec Electronics, Inc
-FC2BB2 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
50-00-84 (hex) Siemens Canada
500084 (base 16) Siemens Canada
300 Applewood Crescent
@@ -30725,18 +30656,18 @@ E89E0C (base 16) Private
Gumi Gyeongbuk 730-350
KR
-A8-34-6A (hex) Samsung Electronics Co.,Ltd
-A8346A (base 16) Samsung Electronics Co.,Ltd
- #94-1, Imsoo-Dong
- Gumi Gyeongbuk 730-350
- KR
-
E4-4C-C7 (hex) IEEE Registration Authority
E44CC7 (base 16) IEEE Registration Authority
445 Hoes Lane
Piscataway NJ 08554
US
+A8-34-6A (hex) Samsung Electronics Co.,Ltd
+A8346A (base 16) Samsung Electronics Co.,Ltd
+ #94-1, Imsoo-Dong
+ Gumi Gyeongbuk 730-350
+ KR
+
B0-6F-E0 (hex) Samsung Electronics Co.,Ltd
B06FE0 (base 16) Samsung Electronics Co.,Ltd
#94-1, Imsoo-Dong
@@ -30761,18 +30692,18 @@ B06FE0 (base 16) Samsung Electronics Co.,Ltd
Kaohsiung 80673
TW
-74-5B-C5 (hex) IEEE Registration Authority
-745BC5 (base 16) IEEE Registration Authority
- 445 Hoes Lane
- Piscataway NJ 08554
- US
-
A4-C3-F0 (hex) Intel Corporate
A4C3F0 (base 16) Intel Corporate
Lot 8, Jalan Hi-Tech 2/3
Kulim Kedah 09000
MY
+74-5B-C5 (hex) IEEE Registration Authority
+745BC5 (base 16) IEEE Registration Authority
+ 445 Hoes Lane
+ Piscataway NJ 08554
+ US
+
80-FD-7A (hex) BLU Products Inc
80FD7A (base 16) BLU Products Inc
10814 NW 33rd Street
@@ -30803,12 +30734,6 @@ A089E4 (base 16) Skyworth Digital Technology(Shenzhen) Co.,Ltd
Shenzhen Guangdong 518057
CN
-2C-18-75 (hex) Skyworth Digital Technology(Shenzhen) Co.,Ltd
-2C1875 (base 16) Skyworth Digital Technology(Shenzhen) Co.,Ltd
- 7F,Block A,Skyworth Building,
- Shenzhen Guangdong 518057
- CN
-
90-F8-91 (hex) Kaonmedia CO., LTD.
90F891 (base 16) Kaonmedia CO., LTD.
884-3, Seongnam-daero, Bundang-gu
@@ -30821,12 +30746,48 @@ A089E4 (base 16) Skyworth Digital Technology(Shenzhen) Co.,Ltd
shenzhen guangdong 518110
CN
+2C-18-75 (hex) Skyworth Digital Technology(Shenzhen) Co.,Ltd
+2C1875 (base 16) Skyworth Digital Technology(Shenzhen) Co.,Ltd
+ 7F,Block A,Skyworth Building,
+ Shenzhen Guangdong 518057
+ CN
+
98-9B-CB (hex) AVM Audiovisuelles Marketing und Computersysteme GmbH
989BCB (base 16) AVM Audiovisuelles Marketing und Computersysteme GmbH
Alt-Moabit 95
Berlin Berlin 10559
DE
+6C-A9-28 (hex) HMD Global Oy
+6CA928 (base 16) HMD Global Oy
+ Bertel Jungin aukio 9
+ Espoo 02600
+ FI
+
+70-AC-D7 (hex) Shenzhen YOUHUA Technology Co., Ltd
+70ACD7 (base 16) Shenzhen YOUHUA Technology Co., Ltd
+ Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+ Shenzhen Guangdong 518055
+ CN
+
+90-A3-65 (hex) HMD Global Oy
+90A365 (base 16) HMD Global Oy
+ Bertel Jungin aukio 9
+ Espoo 02600
+ FI
+
+BC-02-4A (hex) HMD Global Oy
+BC024A (base 16) HMD Global Oy
+ Bertel Jungin aukio 9
+ Espoo 02600
+ FI
+
+6C-C4-D5 (hex) HMD Global Oy
+6CC4D5 (base 16) HMD Global Oy
+ Bertel Jungin aukio 9
+ Espoo 02600
+ FI
+
60-03-A6 (hex) Inteno Broadband Technology AB
6003A6 (base 16) Inteno Broadband Technology AB
Stensätravägen 13
@@ -30845,24 +30806,6 @@ B0BB8B (base 16) WAVETEL TECHNOLOGY LIMITED
Moscow 115324
RU
-6C-C4-D5 (hex) HMD Global Oy
-6CC4D5 (base 16) HMD Global Oy
- Bertel Jungin aukio 9
- Espoo 02600
- FI
-
-6C-A9-28 (hex) HMD Global Oy
-6CA928 (base 16) HMD Global Oy
- Bertel Jungin aukio 9
- Espoo 02600
- FI
-
-70-AC-D7 (hex) Shenzhen YOUHUA Technology Co., Ltd
-70ACD7 (base 16) Shenzhen YOUHUA Technology Co., Ltd
- Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
- Shenzhen Guangdong 518055
- CN
-
98-46-0A (hex) Apple, Inc.
98460A (base 16) Apple, Inc.
1 Infinite Loop
@@ -30875,42 +30818,12 @@ AC88FD (base 16) Apple, Inc.
Cupertino CA 95014
US
-90-A3-65 (hex) HMD Global Oy
-90A365 (base 16) HMD Global Oy
- Bertel Jungin aukio 9
- Espoo 02600
- FI
-
-BC-02-4A (hex) HMD Global Oy
-BC024A (base 16) HMD Global Oy
- Bertel Jungin aukio 9
- Espoo 02600
- FI
-
14-9D-99 (hex) Apple, Inc.
149D99 (base 16) Apple, Inc.
1 Infinite Loop
Cupertino CA 95014
US
-D8-FE-E3 (hex) D-Link International
-D8FEE3 (base 16) D-Link International
- 1 Internal Business Park, #03-12,The Synergy, Singapore
- Singapore Singapore 609917
- SG
-
-C4-A8-1D (hex) D-Link International
-C4A81D (base 16) D-Link International
- 1 Internal Business Park, #03-12,
- SINGAPORE Singapore 609917
- SG
-
-1C-7E-E5 (hex) D-Link International
-1C7EE5 (base 16) D-Link International
- 1 International Business Park, #03-12, The Synergy
- SINGAPORE 609917
- SG
-
28-10-7B (hex) D-Link International
28107B (base 16) D-Link International
1 International Business Park, #03-12, The Synergy
@@ -30941,6 +30854,12 @@ C4A81D (base 16) D-Link International
Singapore Singapore 609917
SG
+D8-FE-E3 (hex) D-Link International
+D8FEE3 (base 16) D-Link International
+ 1 Internal Business Park, #03-12,The Synergy, Singapore
+ Singapore Singapore 609917
+ SG
+
C0-A0-BB (hex) D-Link International
C0A0BB (base 16) D-Link International
1 Internal Business Park, #03-12,The Synergy, Singapore
@@ -30953,6 +30872,18 @@ B0C554 (base 16) D-Link International
Singapore Singapore 609917
SG
+C4-A8-1D (hex) D-Link International
+C4A81D (base 16) D-Link International
+ 1 Internal Business Park, #03-12,
+ SINGAPORE Singapore 609917
+ SG
+
+1C-7E-E5 (hex) D-Link International
+1C7EE5 (base 16) D-Link International
+ 1 International Business Park, #03-12, The Synergy
+ SINGAPORE 609917
+ SG
+
6C-19-8F (hex) D-Link International
6C198F (base 16) D-Link International
1 Internal Business Park, #03-12,The Synergy, Singapore
@@ -30977,12 +30908,6 @@ F8E903 (base 16) D-Link International
Singapore Singapore 609917
SG
-00-87-64 (hex) Cisco Systems, Inc
-008764 (base 16) Cisco Systems, Inc
- 80 West Tasman Drive
- San Jose CA 94568
- US
-
8C-E7-48 (hex) Private
8CE748 (base 16) Private
@@ -31010,6 +30935,318 @@ D4F527 (base 16) SIEMENS AG
Woonsocket RI 02895
US
+00-87-64 (hex) Cisco Systems, Inc
+008764 (base 16) Cisco Systems, Inc
+ 80 West Tasman Drive
+ San Jose CA 94568
+ US
+
+E0-DC-FF (hex) Xiaomi Communications Co Ltd
+E0DCFF (base 16) Xiaomi Communications Co Ltd
+ The Rainbow City of China Resources
+ NO.68, Qinghe Middle Street Haidian District, Beijing 100085
+ CN
+
+94-C2-BD (hex) TECNOBIT
+94C2BD (base 16) TECNOBIT
+ C/ FUDRE, 18
+ VALDEPEÑAS CIUDAD REAL 13300
+ ES
+
+60-8C-DF (hex) Private
+608CDF (base 16) Private
+
+D0-41-C9 (hex) Fiberhome Telecommunication Technologies Co.,LTD
+D041C9 (base 16) Fiberhome Telecommunication Technologies Co.,LTD
+ No.5 DongXin Road
+ Wuhan Hubei 430074
+ CN
+
+E8-01-8D (hex) Fiberhome Telecommunication Technologies Co.,LTD
+E8018D (base 16) Fiberhome Telecommunication Technologies Co.,LTD
+ No.5 DongXin Road
+ Wuhan Hubei 430074
+ CN
+
+60-AB-67 (hex) Xiaomi Communications Co Ltd
+60AB67 (base 16) Xiaomi Communications Co Ltd
+ The Rainbow City of China Resources
+ NO.68, Qinghe Middle Street Haidian District, Beijing 100085
+ CN
+
+18-3D-5E (hex) HUAWEI TECHNOLOGIES CO.,LTD
+183D5E (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+88-BC-C1 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+88BCC1 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+6C-23-CB (hex) Wattty Corporation
+6C23CB (base 16) Wattty Corporation
+ 2-15-31 takaokanishi nakaku
+ hamamatsushi shizuokaken 4338118
+ JP
+
+00-12-2A (hex) VTech Telecommunications Ltd.
+00122A (base 16) VTech Telecommunications Ltd.
+ 23/F, Tai Ping Industrial Centre, Block 1
+
+ HK
+
+C4-68-D0 (hex) VTech Telecommunications Ltd.
+C468D0 (base 16) VTech Telecommunications Ltd.
+ 23/F, Tai Ping Industrial Centre, Block 1,
+ HONG KONG NA 000000
+ HK
+
+50-51-A9 (hex) Texas Instruments
+5051A9 (base 16) Texas Instruments
+ 12500 TI Blvd
+ Dallas TX 75243
+ US
+
+98-1E-19 (hex) Sagemcom Broadband SAS
+981E19 (base 16) Sagemcom Broadband SAS
+ 250, route de l'Empereur
+ Rueil Malmaison Cedex hauts de seine 92848
+ FR
+
+C4-C1-38 (hex) OWLink Technology Inc
+C4C138 (base 16) OWLink Technology Inc
+ 760 Roosevelt
+ Irvine CA 92620
+ US
+
+18-F1-8E (hex) ChipER Technology co. ltd
+18F18E (base 16) ChipER Technology co. ltd
+ 907 University Ave#299
+ Middleton WI 53562
+ US
+
+B8-D5-26 (hex) Zyxel Communications Corporation
+B8D526 (base 16) Zyxel Communications Corporation
+ No. 6 Innovation Road II, Science Park
+ Hsichu Taiwan 300
+ TW
+
+F4-2E-7F (hex) Aruba, a Hewlett Packard Enterprise Company
+F42E7F (base 16) Aruba, a Hewlett Packard Enterprise Company
+ 3333 Scott Blvd
+ Santa Clara CA 95054
+ US
+
+00-84-ED (hex) Private
+0084ED (base 16) Private
+
+00-19-8F (hex) Nokia Bell N.V.
+00198F (base 16) Nokia Bell N.V.
+ Copernicuslaan 50
+ Antwerp B-2018
+ BE
+
+0C-E9-9A (hex) ATLS ALTEC
+0CE99A (base 16) ATLS ALTEC
+ 3 RUE DE LA GUIVERNONE ZI DU VERT GALANT
+ ST OUEN L AUMONE 95310
+ FR
+
+8C-89-FA (hex) Zhejiang Hechuan Technology Co., Ltd.
+8C89FA (base 16) Zhejiang Hechuan Technology Co., Ltd.
+ No. 9, Fucai Road, Longyou Industrial Zone
+ Quzhou Zhejiang 324000
+ CN
+
+40-23-43 (hex) CHONGQING FUGUI ELECTRONICS CO.,LTD.
+402343 (base 16) CHONGQING FUGUI ELECTRONICS CO.,LTD.
+ Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District
+ Chongqing Chongqing 401332
+ CN
+
+F8-48-FD (hex) China Mobile Group Device Co.,Ltd.
+F848FD (base 16) China Mobile Group Device Co.,Ltd.
+ 32 Xuanwumen West Street,Xicheng District
+ Beijing 100053
+ CN
+
+14-3C-C3 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+143CC3 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+EC-56-23 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+EC5623 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+24-31-54 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+243154 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+48-3F-E9 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+483FE9 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+FC-2B-B2 (hex) Actiontec Electronics, Inc
+FC2BB2 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+34-6B-5B (hex) New H3C Technologies Co., Ltd
+346B5B (base 16) New H3C Technologies Co., Ltd
+ 466 Changhe Road, Binjiang District
+ Hangzhou Zhejiang 310052
+ CN
+
+F8-E4-FB (hex) Actiontec Electronics, Inc
+F8E4FB (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+20-76-00 (hex) Actiontec Electronics, Inc
+207600 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+00-1F-90 (hex) Actiontec Electronics, Inc
+001F90 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+E8-6F-F2 (hex) Actiontec Electronics, Inc
+E86FF2 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+18-1B-EB (hex) Actiontec Electronics, Inc
+181BEB (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+94-EE-9F (hex) HMD Global Oy
+94EE9F (base 16) HMD Global Oy
+ Bertel Jungin aukio 9
+ Espoo 02600
+ FI
+
+AC-A4-6E (hex) SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ACA46E (base 16) SHENZHEN GONGJIN ELECTRONICS CO.,LT
+ SONGGANG
+ SHENZHEN GUANGDONG 518105
+ CN
+
+80-DA-BC (hex) Megafone Limited
+80DABC (base 16) Megafone Limited
+ Unit 702,7/F,Bankok Bank Building,NO.18 Bonham Strand West
+ Hong Kong 999077
+ HK
+
+50-75-F1 (hex) ARRIS Group, Inc.
+5075F1 (base 16) ARRIS Group, Inc.
+ 6450 Sequence Drive
+ San Diego CA 92121
+ US
+
+00-A0-B8 (hex) NetApp
+00A0B8 (base 16) NetApp
+ 1395 Crossman Ave
+ Sunnyvale, CA 94089
+ US
+
+30-50-FD (hex) Skyworth Digital Technology(Shenzhen) Co.,Ltd
+3050FD (base 16) Skyworth Digital Technology(Shenzhen) Co.,Ltd
+ 7F,Block A,Skyworth Building,
+ Shenzhen Guangdong 518057
+ CN
+
+80-D0-4A (hex) Technicolor CH USA Inc.
+80D04A (base 16) Technicolor CH USA Inc.
+ 5030 Sugarloaf Parkway Bldg 6
+ Lawrenceville GA 30044
+ US
+
+4C-17-44 (hex) Amazon Technologies Inc.
+4C1744 (base 16) Amazon Technologies Inc.
+ P.O. Box 8102
+ Reno NV 89507
+ US
+
+4C-91-57 (hex) Fujian LANDI Commercial Equipment Co.,Ltd
+4C9157 (base 16) Fujian LANDI Commercial Equipment Co.,Ltd
+ Building 17,the 1st Section ,Fuzhou Software Park
+ No.89 Software Road Fuzhou ,Fujian 350003
+ CN
+
+50-13-95 (hex) Sichuan AI-Link Technology Co., Ltd.
+501395 (base 16) Sichuan AI-Link Technology Co., Ltd.
+ Anzhou,Industrial Park
+ Anzhou,Industrial Park Sichuan 621000
+ CN
+
+88-DA-33 (hex) Beijing Xiaoyuer Network Technology Co., Ltd
+88DA33 (base 16) Beijing Xiaoyuer Network Technology Co., Ltd
+ Block K1, North American International Business Centre, 86 Beiyuan Road, Chaoyang District
+ Beijing Beijing 100012
+ CN
+
+5C-1C-B9 (hex) vivo Mobile Communication Co., Ltd.
+5C1CB9 (base 16) vivo Mobile Communication Co., Ltd.
+ #283,BBK Road
+ Wusha,Chang'An DongGuan City,Guangdong, 523860
+ CN
+
+DC-B0-82 (hex) Nokia
+DCB082 (base 16) Nokia
+ 600 March Road
+ Kanata Ontario K2K 2E6
+ CA
+
+5C-5B-35 (hex) Mist Systems, Inc.
+5C5B35 (base 16) Mist Systems, Inc.
+ 1601 South De Anza Blvd, Suite 248
+ Cupertino CA 95014
+ US
+
+84-FD-D1 (hex) Intel Corporate
+84FDD1 (base 16) Intel Corporate
+ Lot 8, Jalan Hi-Tech 2/3
+ Kulim Kedah 09000
+ MY
+
+D0-19-6A (hex) Ciena Corporation
+D0196A (base 16) Ciena Corporation
+ 7035 Ridge Road
+ Hanover MD 21076
+ US
+
+D4-35-1D (hex) Technicolor
+D4351D (base 16) Technicolor
+ Prins Boudewijnlaan 47
+ Edegem - Belgium B-2650
+ BE
+
+60-09-C3 (hex) u-blox AG
+6009C3 (base 16) u-blox AG
+ Zuercherstrasse 68
+ Thalwil 8800
+ CH
+
0C-6F-9C (hex) Shaw Communications Inc.
0C6F9C (base 16) Shaw Communications Inc.
Suite 900, 630 3rd Avenue S.W.
@@ -32384,12 +32621,6 @@ A47B85 (base 16) ULTIMEDIA Co Ltd,
Seoul 152770
KR
-CC-37-AB (hex) Edgecore Networks Corportation
-CC37AB (base 16) Edgecore Networks Corportation
- 1 Creation Road 3.
- Hsinchu Hsinchu 30077
- TW
-
F8-0D-60 (hex) CANON INC.
F80D60 (base 16) CANON INC.
30-2 Shimomaruko 3-chome,
@@ -35450,12 +35681,6 @@ BC811F (base 16) Ingate Systems
shenzhen guangdong 518057
CN
-6C-40-C6 (hex) Nimbus Data Systems, Inc.
-6C40C6 (base 16) Nimbus Data Systems, Inc.
- 701 Gateway Blvd
- South San Francisco CA 94080
- US
-
50-3F-56 (hex) Syncmold Enterprise Corp
503F56 (base 16) Syncmold Enterprise Corp
9F., No.168, Jiankang Rd., Zhonghe Dist.
@@ -61184,12 +61409,6 @@ C02250 (base 16) Koss Corporation
Milwaukee WI 53212
US
-10-9E-3A (hex) Zhejiang Tmall Technology Co., Ltd.
-109E3A (base 16) Zhejiang Tmall Technology Co., Ltd.
- Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District,
- Shenzhen Guangdong 518000
- CN
-
2C-1C-F6 (hex) Alien Green LLC
2C1CF6 (base 16) Alien Green LLC
A. Kazbegi Ave., No24g, apt 227
@@ -61430,24 +61649,6 @@ CC70ED (base 16) Cisco Systems, Inc
San Jose CA 94568
US
-A8-39-44 (hex) Actiontec Electronics, Inc
-A83944 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-00-24-7B (hex) Actiontec Electronics, Inc
-00247B (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-70-F2-20 (hex) Actiontec Electronics, Inc
-70F220 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
D4-3D-39 (hex) FCI. Inc
D43D39 (base 16) FCI. Inc
B-7F, SiliconPark, 35, Pangyo-ro 255beon-gil, Bundang-gu
@@ -61940,6 +62141,12 @@ F8CA59 (base 16) NetComm Wireless
Shenzhen Guangdong 518057
CN
+04-F1-28 (hex) HMD Global Oy
+04F128 (base 16) HMD Global Oy
+ Bertel Jungin aukio 9
+ Espoo 02600
+ FI
+
80-4A-14 (hex) Apple, Inc.
804A14 (base 16) Apple, Inc.
1 Infinite Loop
@@ -61970,12 +62177,6 @@ B85D0A (base 16) Apple, Inc.
Cupertino CA 95014
US
-04-F1-28 (hex) HMD Global Oy
-04F128 (base 16) HMD Global Oy
- Bertel Jungin aukio 9
- Espoo 02600
- FI
-
AC-57-75 (hex) HMD Global Oy
AC5775 (base 16) HMD Global Oy
Bertel Jungin aukio 9
@@ -62000,16 +62201,22 @@ AC8FF8 (base 16) Nokia
Shenzhen Shenzhen 518104
CN
-FC-75-16 (hex) D-Link International
-FC7516 (base 16) D-Link International
- 1 International Business Park, #03-12, The Synergy
- SINGAPORE 609917
+78-32-1B (hex) D-Link International
+78321B (base 16) D-Link International
+ 1 Internal Business Park, #03-12,The Synergy, Singapore
+ Singapore Singapore 609917
SG
-AC-F1-DF (hex) D-Link International
-ACF1DF (base 16) D-Link International
- 1 International Business Park, #03-12, The Synergy
- SINGAPORE 609917
+00-AD-24 (hex) D-Link International
+00AD24 (base 16) D-Link International
+ 1 Internal Business Park, #03-12,The Synergy, Singapore
+ Singapore Singapore 609917
+ SG
+
+F4-8C-EB (hex) D-Link International
+F48CEB (base 16) D-Link International
+ 1 Internal Business Park, #03-12,The Synergy, Singapore
+ Singapore Singapore 609917
SG
A0-AB-1B (hex) D-Link International
@@ -62024,10 +62231,16 @@ A0AB1B (base 16) D-Link International
Singapore Singapore 609917
SG
-78-32-1B (hex) D-Link International
-78321B (base 16) D-Link International
- 1 Internal Business Park, #03-12,The Synergy, Singapore
- Singapore Singapore 609917
+FC-75-16 (hex) D-Link International
+FC7516 (base 16) D-Link International
+ 1 International Business Park, #03-12, The Synergy
+ SINGAPORE 609917
+ SG
+
+AC-F1-DF (hex) D-Link International
+ACF1DF (base 16) D-Link International
+ 1 International Business Park, #03-12, The Synergy
+ SINGAPORE 609917
SG
9C-D6-43 (hex) D-Link International
@@ -62042,35 +62255,41 @@ ACEE70 (base 16) Fontem Ventures BV
Amsterdam Noord-Holland 1043NT
NL
-00-AD-24 (hex) D-Link International
-00AD24 (base 16) D-Link International
- 1 Internal Business Park, #03-12,The Synergy, Singapore
- Singapore Singapore 609917
- SG
-
-F4-8C-EB (hex) D-Link International
-F48CEB (base 16) D-Link International
- 1 Internal Business Park, #03-12,The Synergy, Singapore
- Singapore Singapore 609917
- SG
-
FC-D2-B6 (hex) IEEE Registration Authority
FCD2B6 (base 16) IEEE Registration Authority
445 Hoes Lane
Piscataway NJ 08554
US
+60-61-DF (hex) Z-meta Research LLC
+6061DF (base 16) Z-meta Research LLC
+ 8365 Quay Drive
+ Arvada CO 80003
+ US
+
00-B6-00 (hex) VOIM Co., Ltd.
00B600 (base 16) VOIM Co., Ltd.
70, Seotan-ro, Jinwi-myeon
Pyeongtaek-si Gyeonggi-do 17706
KR
-60-61-DF (hex) Z-meta Research LLC
-6061DF (base 16) Z-meta Research LLC
- 8365 Quay Drive
- Arvada CO 80003
- US
+48-83-B4 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4883B4 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ NO.18 HAIBIN ROAD,
+ DONG GUAN GUANG DONG 523860
+ CN
+
+28-23-F5 (hex) China Mobile (Hangzhou) Information Technology Co., Ltd.
+2823F5 (base 16) China Mobile (Hangzhou) Information Technology Co., Ltd.
+ No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+ Hangzhou Zhejiang 310000
+ CN
+
+20-2A-C5 (hex) Petite-En
+202AC5 (base 16) Petite-En
+ 1, Gwanak-ro, Gwanak-gu
+ Seoul 08826
+ KR
DC-96-2C (hex) NST Audio Ltd
DC962C (base 16) NST Audio Ltd
@@ -62084,24 +62303,276 @@ DC962C (base 16) NST Audio Ltd
Bengaluru Karnataka 560100
IN
-48-83-B4 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-4883B4 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+F4-79-60 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+F47960 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+20-65-8E (hex) HUAWEI TECHNOLOGIES CO.,LTD
+20658E (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+08-A6-BC (hex) Amazon Technologies Inc.
+08A6BC (base 16) Amazon Technologies Inc.
+ P.O Box 8102
+ Reno NV 89507
+ US
+
+EC-AD-E0 (hex) D-Link International
+ECADE0 (base 16) D-Link International
+ 1 Internal Business Park, #03-12,The Synergy, Singapore
+ Singapore Singapore 609917
+ SG
+
+F0-B9-68 (hex) ITEL MOBILE LIMITED
+F0B968 (base 16) ITEL MOBILE LIMITED
+ RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K
+ Hong Kong KOWLOON 999077
+ HK
+
+98-8B-0A (hex) Hangzhou Hikvision Digital Technology Co.,Ltd.
+988B0A (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd.
+ No.555 Qianmo Road, Binjiang District
+ Hangzhou Zhejiang 310052
+ CN
+
+1C-BF-CE (hex) Shenzhen Century Xinyang Technology Co., Ltd
+1CBFCE (base 16) Shenzhen Century Xinyang Technology Co., Ltd
+ 3F, North Building, Bantian High-tech industrial Zone, No. 2 of Bell Road
+ Shenzhen Guangdong 518129
+ CN
+
+F8-30-02 (hex) Texas Instruments
+F83002 (base 16) Texas Instruments
+ 12500 TI Blvd
+ Dallas TX 75243
+ US
+
+B0-2A-1F (hex) Wingtech Group (HongKong)Limited
+B02A1F (base 16) Wingtech Group (HongKong)Limited
+ FLAT/RM 1903 19/F PODIUM PLAZA 5HANOI ROAD TSIM SHA TSUI
+ Hong Kong Hong Kong 999077
+ HK
+
+1C-B3-E9 (hex) Shenzhen Zhongke United Communication Technology
+1CB3E9 (base 16) Shenzhen Zhongke United Communication Technology
+ 6C jiajiahao commercial building, Shennan avenue
+ Shenzhen Guangdong 518000
+ CN
+
+34-E1-D1 (hex) IEEE Registration Authority
+34E1D1 (base 16) IEEE Registration Authority
+ 445 Hoes Lane
+ Piscataway NJ 08554
+ US
+
+DC-FB-48 (hex) Intel Corporate
+DCFB48 (base 16) Intel Corporate
+ Lot 8, Jalan Hi-Tech 2/3
+ Kulim Kedah 09000
+ MY
+
+6C-40-C6 (hex) Nimbus Data, Inc.
+6C40C6 (base 16) Nimbus Data, Inc.
+ 5151 California Ave, Ste 100
+ Irvine CA 92617
+ US
+
+A8-DB-03 (hex) SAMSUNG ELECTRO-MECHANICS(THAILAND)
+A8DB03 (base 16) SAMSUNG ELECTRO-MECHANICS(THAILAND)
+ 93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE
+ Bangpakong Chachoengsao 24180
+ TH
+
+44-A6-1E (hex) INGRAM MICRO SERVICES
+44A61E (base 16) INGRAM MICRO SERVICES
+ 100 CHEMIN DE BAILLOT
+ MONTAUBAN 82000
+ FR
+
+8C-0F-A0 (hex) di-soric GmbH & Co. KG
+8C0FA0 (base 16) di-soric GmbH & Co. KG
+ Steinbeisstrasse 6
+ Urbach 73660
+ DE
+
+90-78-41 (hex) Intel Corporate
+907841 (base 16) Intel Corporate
+ Lot 8, Jalan Hi-Tech 2/3
+ Kulim Kedah 09000
+ MY
+
+10-9E-3A (hex) Zhejiang Tmall Technology Co., Ltd.
+109E3A (base 16) Zhejiang Tmall Technology Co., Ltd.
+ Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District,
+ Shenzhen Guangdong 518000
+ CN
+
+CC-37-AB (hex) Edgecore Networks Corporation
+CC37AB (base 16) Edgecore Networks Corporation
+ 1 Creation Road 3.
+ Hsinchu Hsinchu 30077
+ TW
+
+24-79-F3 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+2479F3 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
NO.18 HAIBIN ROAD,
DONG GUAN GUANG DONG 523860
CN
-28-23-F5 (hex) China Mobile (Hangzhou) Information Technology Co., Ltd.
-2823F5 (base 16) China Mobile (Hangzhou) Information Technology Co., Ltd.
- No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
- Hangzhou Zhejiang 310000
+20-58-69 (hex) Ruckus Wireless
+205869 (base 16) Ruckus Wireless
+ 350 West Java Drive
+ Sunnyvale CA 94089
+ US
+
+60-D2-DD (hex) Shenzhen Baitong Putian Technology Co.,Ltd.
+60D2DD (base 16) Shenzhen Baitong Putian Technology Co.,Ltd.
+ 501,5/F,Building 1,No.2,Lianwei Street,Hualian Community,Longhua Street Longhua District
+ Shenzhen Guangdong 518109
CN
-20-2A-C5 (hex) Petite-En
-202AC5 (base 16) Petite-En
- 1, Gwanak-ro, Gwanak-gu
- Seoul 08826
+FC-AB-90 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+FCAB90 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+20-DA-22 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+20DA22 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+88-F8-72 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+88F872 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+70-F2-20 (hex) Actiontec Electronics, Inc
+70F220 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+00-24-7B (hex) Actiontec Electronics, Inc
+00247B (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+A8-39-44 (hex) Actiontec Electronics, Inc
+A83944 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+88-E6-4B (hex) Juniper Networks
+88E64B (base 16) Juniper Networks
+ 1133 Innovation Way
+ Sunnyvale CA 94089
+ US
+
+48-D8-75 (hex) China TransInfo Technology Co., Ltd
+48D875 (base 16) China TransInfo Technology Co., Ltd
+ Qianfang Building, Phase I, Zhongguancun Software Park, 8 Wangxi Road, Haidian District
+ Beijing 100085
+ CN
+
+CC-A1-2B (hex) TCL King Electrical Appliances (Huizhou) Co., Ltd
+CCA12B (base 16) TCL King Electrical Appliances (Huizhou) Co., Ltd
+ 10F, TCL Multimedia Building, TCL International E City, No.1001 Zhongshanyuan Rd., Nanshan District
+ Shenzhen Guangdong 518052
+ CN
+
+4C-BC-48 (hex) Cisco Systems, Inc
+4CBC48 (base 16) Cisco Systems, Inc
+ 80 West Tasman Drive
+ San Jose CA 94568
+ US
+
+D4-6A-35 (hex) Cisco Systems, Inc
+D46A35 (base 16) Cisco Systems, Inc
+ 80 West Tasman Drive
+ San Jose CA 94568
+ US
+
+E4-F3-E8 (hex) Shenzhen SuperElectron Technology Co.,Ltd.
+E4F3E8 (base 16) Shenzhen SuperElectron Technology Co.,Ltd.
+ 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city
+ Shenzhen Guangdong 518000
+ CN
+
+B0-30-55 (hex) China Mobile IOT Company Limited
+B03055 (base 16) China Mobile IOT Company Limited
+ NO.8 Yu Ma Road, NanAn Area
+ Chongqing Chongqing 401336
+ CN
+
+E8-D0-FC (hex) Liteon Technology Corporation
+E8D0FC (base 16) Liteon Technology Corporation
+ 4F, 90, Chien 1 Road
+ New Taipei City Taiwan 23585
+ TW
+
+C0-9F-E1 (hex) zte corporation
+C09FE1 (base 16) zte corporation
+ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ shenzhen guangdong 518057
+ CN
+
+AC-00-D0 (hex) zte corporation
+AC00D0 (base 16) zte corporation
+ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ shenzhen guangdong 518057
+ CN
+
+10-DC-4A (hex) Fiberhome Telecommunication Technologies Co.,LTD
+10DC4A (base 16) Fiberhome Telecommunication Technologies Co.,LTD
+ No.5 DongXin Road
+ Wuhan Hubei 430074
+ CN
+
+44-4B-7E (hex) Fiberhome Telecommunication Technologies Co.,LTD
+444B7E (base 16) Fiberhome Telecommunication Technologies Co.,LTD
+ No.5 DongXin Road
+ Wuhan Hubei 430074
+ CN
+
+84-C7-8F (hex) STORDIS GmbH
+84C78F (base 16) STORDIS GmbH
+ Rosenwiesstr. 17
+ Stuttgart 70567
+ DE
+
+78-2C-29 (hex) New H3C Technologies Co., Ltd
+782C29 (base 16) New H3C Technologies Co., Ltd
+ 466 Changhe Road, Binjiang District
+ Hangzhou Zhejiang 310052
+ CN
+
+98-B8-BA (hex) LG Electronics (Mobile Communications)
+98B8BA (base 16) LG Electronics (Mobile Communications)
+ 60-39, Gasan-dong, Geumcheon-gu
+ Seoul 153-801
KR
+D4-9D-C0 (hex) Samsung Electronics Co.,Ltd
+D49DC0 (base 16) Samsung Electronics Co.,Ltd
+ 129, Samsung-ro, Youngtongl-Gu
+ Suwon Gyeonggi-Do 16677
+ KR
+
+D4-D2-52 (hex) Intel Corporate
+D4D252 (base 16) Intel Corporate
+ Lot 8, Jalan Hi-Tech 2/3
+ Kulim Kedah 09000
+ MY
+
58-46-E1 (hex) Baxter International Inc
5846E1 (base 16) Baxter International Inc
One Baxter Parkway
@@ -66473,12 +66944,6 @@ EC1A59 (base 16) Belkin International Inc.
Wohlen AG 5610
CH
-34-76-C5 (hex) I-O DATA DEVICE, INC.
-3476C5 (base 16) I-O DATA DEVICE, INC.
- 3-10, SAKURADA-MACHI
- KANAZAWA ISHIKAWA 920-8512
- JP
-
40-70-74 (hex) Life Technology (China) Co., Ltd
407074 (base 16) Life Technology (China) Co., Ltd
No.1, 2F, Nanshan Digital Culture Industrial base (East Tower Podium) 10128 Shennan Blvd, Nanshan Dist.
@@ -70421,12 +70886,6 @@ A893E6 (base 16) JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LT
Paris 75015
FR
-00-22-89 (hex) Optosecurity Inc.
-002289 (base 16) Optosecurity Inc.
- 505, Boul. du Parc Technologique
- Quebec G1P 4S9
- CA
-
00-22-82 (hex) 8086 Consultancy
002282 (base 16) 8086 Consultancy
17 Lowfield Lane
@@ -70931,12 +71390,6 @@ A893E6 (base 16) JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LT
ANNABA 23000
DZ
-00-21-B7 (hex) Lexmark International Inc.
-0021B7 (base 16) Lexmark International Inc.
- 740 West New Circle Road
- Lexington KY 40550
- US
-
00-21-B0 (hex) Tyco Telecommunications
0021B0 (base 16) Tyco Telecommunications
1011 Pawtucket Blvd
@@ -72842,12 +73295,6 @@ A893E6 (base 16) JIANGXI JINGGANGSHAN CKING COMMUNICATION TECHNOLOGY CO.,LT
Taipei City 106
TW
-00-18-36 (hex) Reliance Electric Limited
-001836 (base 16) Reliance Electric Limited
- 2-3-2 Fukuura, Kanazawa-ku
- Yokohama Kanagawa 236-8641
- JP
-
00-17-59 (hex) Cisco Systems, Inc
001759 (base 16) Cisco Systems, Inc
80 West Tasman Drive
@@ -83837,12 +84284,6 @@ B8A175 (base 16) Roku, Inc.
Saratoga CA 95070
US
-00-80-E5 (hex) NetApp
-0080E5 (base 16) NetApp
- 3718 N. Rock Road
- Wichita KS 67226-1397
- US
-
00-23-40 (hex) MiXTelematics
002340 (base 16) MiXTelematics
Blaauwklip Office Park 2
@@ -84233,12 +84674,6 @@ A4E597 (base 16) Gessler GmbH
Guangzhou Guangdong 510530
CN
-00-A0-B0 (hex) I-O DATA DEVICE, INC.
-00A0B0 (base 16) I-O DATA DEVICE, INC.
- 24-1, SAKURADA-MACHI
- KANAZAWA, ISHIKAWA 920
- JP
-
00-E0-CF (hex) INTEGRATED DEVICE
00E0CF (base 16) INTEGRATED DEVICE
6024 Silver Creek Valley Road
@@ -87638,12 +88073,6 @@ BC54FC (base 16) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
Piscataway NJ 08554
US
-18-BC-5A (hex) Zhejiang Tmall Technology Co., Ltd.
-18BC5A (base 16) Zhejiang Tmall Technology Co., Ltd.
- Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District,
- Shenzhen Guangdong 518000
- CN
-
00-86-9C (hex) Palo Alto Networks
00869C (base 16) Palo Alto Networks
4401 Great America Parkway
@@ -90689,12 +91118,6 @@ C4518D (base 16) Shenzhen YOUHUA Technology Co., Ltd
Shenzhen Guangdong 518055
CN
-78-DA-07 (hex) Zhejiang Tmall Technology Co., Ltd.
-78DA07 (base 16) Zhejiang Tmall Technology Co., Ltd.
- Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District,
- Shenzhen Guangdong 518000
- CN
-
00-13-A3 (hex) Siemens Home & Office Comm. Devices
0013A3 (base 16) Siemens Home & Office Comm. Devices
4849 Alpha Road
@@ -91739,30 +92162,6 @@ E09F2A (base 16) Iton Technology Corp.
Ulsan 44922
KR
-00-1E-A7 (hex) Actiontec Electronics, Inc
-001EA7 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-10-5F-06 (hex) Actiontec Electronics, Inc
-105F06 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-70-F1-96 (hex) Actiontec Electronics, Inc
-70F196 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-00-26-B8 (hex) Actiontec Electronics, Inc
-0026B8 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
64-25-5E (hex) Observint Technologies, Inc.
64255E (base 16) Observint Technologies, Inc.
11000 N Mopac Expressway Suite 300
@@ -92501,6 +92900,336 @@ E8CC18 (base 16) D-Link International
Beijing Beijing 100085
CN
+14-B4-57 (hex) Silicon Laboratories
+14B457 (base 16) Silicon Laboratories
+ 7000 W. William Cannon Dr.
+ Austin TX 78735
+ US
+
+18-39-9C (hex) Skorpios Technologies
+18399C (base 16) Skorpios Technologies
+ 7401 Snaproll St NE
+ Albuquerque NM 87109
+ US
+
+AC-71-0C (hex) China Mobile Group Device Co.,Ltd.
+AC710C (base 16) China Mobile Group Device Co.,Ltd.
+ 32 Xuanwumen West Street,Xicheng District
+ Beijing 100053
+ CN
+
+D8-BC-59 (hex) Shenzhen DAPU Microelectronics Co., Ltd
+D8BC59 (base 16) Shenzhen DAPU Microelectronics Co., Ltd
+ Room B 503, No.2 Building, Tian’an Digital New Town, Huangge Middle Road, Longgang District
+ Shenzhen Guangdong 518100
+ CN
+
+84-B8-B8 (hex) Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+84B8B8 (base 16) Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
+ No.19, Gaoxin 4th Road, Wuhan East Lake High-tech Zone, Wuhan
+ Wuhan Hubei 430000
+ CN
+
+1C-DE-57 (hex) Fiberhome Telecommunication Technologies Co.,LTD
+1CDE57 (base 16) Fiberhome Telecommunication Technologies Co.,LTD
+ No.5 DongXin Road
+ Wuhan Hubei 430074
+ CN
+
+1C-7F-2C (hex) HUAWEI TECHNOLOGIES CO.,LTD
+1C7F2C (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+E0-CC-7A (hex) HUAWEI TECHNOLOGIES CO.,LTD
+E0CC7A (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+8C-42-6D (hex) HUAWEI TECHNOLOGIES CO.,LTD
+8C426D (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+18-02-2D (hex) HUAWEI TECHNOLOGIES CO.,LTD
+18022D (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+E8-EC-A3 (hex) Dongguan Liesheng Electronic Co.Ltd
+E8ECA3 (base 16) Dongguan Liesheng Electronic Co.Ltd
+ 13th Floor South Building, Gosun Science Park, Hongtu Rd
+ Dongguan Dongguan 523073
+ CN
+
+1C-27-04 (hex) zte corporation
+1C2704 (base 16) zte corporation
+ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ shenzhen guangdong 518057
+ CN
+
+20-96-8A (hex) China Mobile (Hangzhou) Information Technology Co., Ltd.
+20968A (base 16) China Mobile (Hangzhou) Information Technology Co., Ltd.
+ No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District
+ Hangzhou Zhejiang 310000
+ CN
+
+F0-D4-F7 (hex) varram system
+F0D4F7 (base 16) varram system
+ 57, TECHNO 11-RO,YUSEONG-GU, DAEJEON, KOREA
+ DAEJEON 34036
+ KR
+
+04-E5-6E (hex) THUB Co., ltd.
+04E56E (base 16) THUB Co., ltd.
+ #607 2, Busandaehak-ro 63beon-gil, Geumjeong-gu
+ Busan 46241
+ KR
+
+A8-A1-59 (hex) ASRock Incorporation
+A8A159 (base 16) ASRock Incorporation
+ 2F., No. 37, Sec. 2, Jhongyang S. Rd., Beitou District,
+ Taipei 112
+ TW
+
+70-F7-54 (hex) AMPAK Technology,Inc.
+70F754 (base 16) AMPAK Technology,Inc.
+ 3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,
+ Hsinchu Hsinchu,Taiwan R.O.C. 30352
+ TW
+
+F4-02-70 (hex) Dell Inc.
+F40270 (base 16) Dell Inc.
+ One Dell Way
+ Round Rock TX 78682
+ US
+
+DC-B8-08 (hex) Extreme Networks, Inc.
+DCB808 (base 16) Extreme Networks, Inc.
+ 6480 Via Del Oro
+ San Jose CA 95119
+ US
+
+C8-C6-4A (hex) Flextronics Tech.(Ind) Pvt Ltd
+C8C64A (base 16) Flextronics Tech.(Ind) Pvt Ltd
+ SURVEYNO.381, PADUR ROAD, KUTHAMBAKKAM VILLAGE, 602107 POONAMALLEE TALUK, THIRUVALLUR DISTRIC
+ Chennai 602107
+ IN
+
+38-D2-CA (hex) Zhejiang Tmall Technology Co., Ltd.
+38D2CA (base 16) Zhejiang Tmall Technology Co., Ltd.
+ Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province
+ Shenzhen GuangDong 518000
+ CN
+
+18-BC-5A (hex) Zhejiang Tmall Technology Co., Ltd.
+18BC5A (base 16) Zhejiang Tmall Technology Co., Ltd.
+ Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District,
+ Shenzhen Guangdong 518000
+ CN
+
+78-DA-07 (hex) Zhejiang Tmall Technology Co., Ltd.
+78DA07 (base 16) Zhejiang Tmall Technology Co., Ltd.
+ Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District,
+ Shenzhen Guangdong 518000
+ CN
+
+00-18-36 (hex) REJ Co.,Ltd
+001836 (base 16) REJ Co.,Ltd
+ 2-3-2 Fukuura, Kanazawa-ku
+ Yokohama Kanagawa 236-8641
+ JP
+
+C4-E3-9F (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+C4E39F (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ NO.18 HAIBIN ROAD,
+ DONG GUAN GUANG DONG 523860
+ CN
+
+00-21-B7 (hex) LEXMARK INTERNATIONAL, INC.
+0021B7 (base 16) LEXMARK INTERNATIONAL, INC.
+ 740 West New Circle Road
+ Lexington KY 40550
+ US
+
+34-76-C5 (hex) I-O DATA DEVICE,INC.
+3476C5 (base 16) I-O DATA DEVICE,INC.
+ 3-10, SAKURADA-MACHI
+ KANAZAWA ISHIKAWA 920-8512
+ JP
+
+00-A0-B0 (hex) I-O DATA DEVICE,INC.
+00A0B0 (base 16) I-O DATA DEVICE,INC.
+ 24-1, SAKURADA-MACHI
+ KANAZAWA, ISHIKAWA 920 na
+ JP
+
+AC-37-C9 (hex) RAID Incorporated
+AC37C9 (base 16) RAID Incorporated
+ 200 Brickstone Square
+ Andover MA 01810
+ US
+
+A8-E5-44 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+A8E544 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+54-86-BC (hex) Cisco Systems, Inc
+5486BC (base 16) Cisco Systems, Inc
+ 80 West Tasman Drive
+ San Jose CA 94568
+ US
+
+24-DA-33 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+24DA33 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+D4-78-9B (hex) Cisco Systems, Inc
+D4789B (base 16) Cisco Systems, Inc
+ 80 West Tasman Drive
+ San Jose CA 94568
+ US
+
+00-26-B8 (hex) Actiontec Electronics, Inc
+0026B8 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+70-F1-96 (hex) Actiontec Electronics, Inc
+70F196 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+10-5F-06 (hex) Actiontec Electronics, Inc
+105F06 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+00-1E-A7 (hex) Actiontec Electronics, Inc
+001EA7 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+50-C4-DD (hex) BUFFALO.INC
+50C4DD (base 16) BUFFALO.INC
+ AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku
+ Nagoya Aichi Pref. 460-8315
+ JP
+
+C4-65-16 (hex) Hewlett Packard
+C46516 (base 16) Hewlett Packard
+ 11445 Compaq Center Drive
+ Houston TX 77070
+ US
+
+D8-D0-90 (hex) Dell Inc.
+D8D090 (base 16) Dell Inc.
+ One Dell Way
+ Round Rock TX 78682
+ US
+
+F8-DF-E1 (hex) MyLight Systems
+F8DFE1 (base 16) MyLight Systems
+ 290 rue Ferdinand Perrier
+ Saint Priest 69800
+ FR
+
+F4-32-3D (hex) Sichuan tianyi kanghe communications co., LTD
+F4323D (base 16) Sichuan tianyi kanghe communications co., LTD
+ No.198, section 1, xueshan avenue, jinyuan town, dayi county, sichuan province
+ chengdu sichuan 611330
+ CN
+
+D0-39-EA (hex) NetApp
+D039EA (base 16) NetApp
+ 1395 Crossman Ave
+ Sunnyvale, CA 94089
+ US
+
+00-80-E5 (hex) NetApp
+0080E5 (base 16) NetApp
+ 1395 Crossman Ave
+ Sunnyvale, CA 94089
+ US
+
+DC-2A-A1 (hex) MedHab LLC
+DC2AA1 (base 16) MedHab LLC
+ 3501 North US Highway 67
+ San Angelo TX 76905
+ US
+
+90-5C-34 (hex) Sirius Electronic Systems Srl
+905C34 (base 16) Sirius Electronic Systems Srl
+ via Robinie, 33
+ Gravellona Toce VB 28883
+ IT
+
+50-41-B9 (hex) I-O DATA DEVICE,INC.
+5041B9 (base 16) I-O DATA DEVICE,INC.
+ 3-10,Sakurada-machi
+ Kanazawa Ishikawa 920-8512
+ JP
+
+00-22-89 (hex) Vandelrande APC inc.
+002289 (base 16) Vandelrande APC inc.
+ 1280 Lebourgneuf Blvd.
+ Quebec G2K 0H1
+ CA
+
+7C-D6-61 (hex) Xiaomi Communications Co Ltd
+7CD661 (base 16) Xiaomi Communications Co Ltd
+ The Rainbow City of China Resources
+ NO.68, Qinghe Middle Street Haidian District, Beijing 100085
+ CN
+
+18-D9-EF (hex) Shuttle Inc.
+18D9EF (base 16) Shuttle Inc.
+ No. 30 Lane 76, Rei Kuang Rd
+ Taipei 114
+ TW
+
+F8-E5-CF (hex) CGI IT UK LIMITED
+F8E5CF (base 16) CGI IT UK LIMITED
+ 20 Fenchurch Street, 14th Floor
+ London EC3M 3BY
+ GB
+
+70-DD-A8 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+70DDA8 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ NO.18 HAIBIN ROAD,
+ DONG GUAN GUANG DONG 523860
+ CN
+
+B0-FD-0B (hex) IEEE Registration Authority
+B0FD0B (base 16) IEEE Registration Authority
+ 445 Hoes Lane
+ Piscataway NJ 08554
+ US
+
+D4-20-B0 (hex) Mist Systems, Inc.
+D420B0 (base 16) Mist Systems, Inc.
+ 1601 South De Anza Blvd, Suite 248
+ Cupertino CA 95014
+ US
+
+68-82-F2 (hex) grandcentrix GmbH
+6882F2 (base 16) grandcentrix GmbH
+ Holzmarkt 1
+ Cologne NW 50676
+ DE
+
D8-6C-E9 (hex) Sagemcom Broadband SAS
D86CE9 (base 16) Sagemcom Broadband SAS
250 route de l'Empereur
@@ -93959,12 +94688,6 @@ F46A92 (base 16) SHENZHEN FAST TECHNOLOGIES CO.,LTD
Shenzhen Guangdong 518057
CN
-14-AE-DB (hex) VTech Telecommunications Ltd.
-14AEDB (base 16) VTech Telecommunications Ltd.
- 23/F, Tai Ping Industrial Centre, Block 1,
- HONG KONG NA 000000
- HK
-
B8-C3-BF (hex) Henan Chengshi NetWork Technology Co.,Ltd
B8C3BF (base 16) Henan Chengshi NetWork Technology Co.,Ltd
Ruhe Road South,Kunlun Road West,Zhongyuan District,Zhengzhou,Henan,P.R.China,450007
@@ -94025,12 +94748,6 @@ F4E9D4 (base 16) QLogic Corporation
Aliso Viejo California
US
-14-22-DB (hex) eero inc.
-1422DB (base 16) eero inc.
- 230 9th St.
- San Francisco CA 94103
- US
-
0C-41-3E (hex) Microsoft Corporation
0C413E (base 16) Microsoft Corporation
1 Microsoft Way
@@ -105368,12 +106085,6 @@ EC3091 (base 16) Cisco Systems, Inc
Billerica MA 02460
US
-00-11-B4 (hex) Westermo Teleindustri AB
-0011B4 (base 16) Westermo Teleindustri AB
- Stora Sundby
- SE-640 40
- SE
-
00-11-B9 (hex) Inner Range Pty. Ltd.
0011B9 (base 16) Inner Range Pty. Ltd.
1 Millenium Court
@@ -109061,12 +109772,6 @@ EC3091 (base 16) Cisco Systems, Inc
Austin TX 78731
US
-00-03-12 (hex) TR-Systemtechnik GmbH
-000312 (base 16) TR-Systemtechnik GmbH
- Eglishalde 6
-
- DE
-
00-04-47 (hex) Acrowave Systems Co., Ltd.
000447 (base 16) Acrowave Systems Co., Ltd.
Maru B/D 86-6, Nonhyun-Dong
@@ -111998,12 +112703,6 @@ EC3091 (base 16) Cisco Systems, Inc
FOSTER CITY CA 94404-1138
US
-00-A0-98 (hex) NetApp
-00A098 (base 16) NetApp
- 495 East Java Drive
- Sunnyvale, CA 94089
- US
-
00-A0-A8 (hex) RENEX CORPORATION
00A0A8 (base 16) RENEX CORPORATION
2750 KILLARNEY DRIVE
@@ -122801,18 +123500,6 @@ D43A2E (base 16) SHENZHEN MTC CO LTD
Shenzhen Guangdong 518100
CN
-10-9F-A9 (hex) Actiontec Electronics, Inc
-109FA9 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-00-20-E0 (hex) Actiontec Electronics, Inc
-0020E0 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
AC-43-30 (hex) Versa Networks
AC4330 (base 16) Versa Networks
6001 America center Drive, Suite 400
@@ -123206,6 +123893,12 @@ DCED84 (base 16) Haverford Systems Inc
A4-68-BC (hex) Private
A468BC (base 16) Private
+AC-2D-A9 (hex) TECNO MOBILE LIMITED
+AC2DA9 (base 16) TECNO MOBILE LIMITED
+ ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
+ Hong Kong Hong Kong 999077
+ HK
+
D4-E8-80 (hex) Cisco Systems, Inc
D4E880 (base 16) Cisco Systems, Inc
80 West Tasman Drive
@@ -123215,12 +123908,6 @@ D4E880 (base 16) Cisco Systems, Inc
10-AE-60 (hex) Private
10AE60 (base 16) Private
-AC-2D-A9 (hex) TECNO MOBILE LIMITED
-AC2DA9 (base 16) TECNO MOBILE LIMITED
- ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG
- Hong Kong Hong Kong 999077
- HK
-
AC-F6-F7 (hex) LG Electronics (Mobile Communications)
ACF6F7 (base 16) LG Electronics (Mobile Communications)
60-39, Gasan-dong, Geumcheon-gu
@@ -123311,14 +123998,14 @@ E8B2FE (base 16) HUMAX Co., Ltd.
Jinan Shandong 250100
CN
-20-39-56 (hex) HMD Global Oy
-203956 (base 16) HMD Global Oy
+A8-3E-0E (hex) HMD Global Oy
+A83E0E (base 16) HMD Global Oy
Bertel Jungin aukio 9
Espoo 02600
FI
-A8-3E-0E (hex) HMD Global Oy
-A83E0E (base 16) HMD Global Oy
+20-39-56 (hex) HMD Global Oy
+203956 (base 16) HMD Global Oy
Bertel Jungin aukio 9
Espoo 02600
FI
@@ -123347,12 +124034,6 @@ B8B2F8 (base 16) Apple, Inc.
Cupertino CA 95014
US
-CC-D2-81 (hex) Apple, Inc.
-CCD281 (base 16) Apple, Inc.
- 1 Infinite Loop
- Cupertino CA 95014
- US
-
34-DB-9C (hex) Sagemcom Broadband SAS
34DB9C (base 16) Sagemcom Broadband SAS
250, route de l'Empereur
@@ -123371,6 +124052,12 @@ CCD281 (base 16) Apple, Inc.
Cupertino CA 95014
US
+CC-D2-81 (hex) Apple, Inc.
+CCD281 (base 16) Apple, Inc.
+ 1 Infinite Loop
+ Cupertino CA 95014
+ US
+
14-7B-AC (hex) Nokia
147BAC (base 16) Nokia
600 March Road
@@ -123383,24 +124070,6 @@ CCD281 (base 16) Apple, Inc.
Eldorado do Sul Rio Grande do Sul 92990-000
BR
-70-62-B8 (hex) D-Link International
-7062B8 (base 16) D-Link International
- 1 Internal Business Park, #03-12,The Synergy, Singapore
- Singapore Singapore 609917
- SG
-
-3C-1E-04 (hex) D-Link International
-3C1E04 (base 16) D-Link International
- 1 Internal Business Park, #03-12,The Synergy, Singapore
- Singapore Singapore 609917
- SG
-
-54-B8-0A (hex) D-Link International
-54B80A (base 16) D-Link International
- 1 Internal Business Park, #03-12,The Synergy, Singapore
- Singapore Singapore 609917
- SG
-
C4-12-F5 (hex) D-Link International
C412F5 (base 16) D-Link International
1 Internal Business Park, #03-12,The Synergy, Singapore
@@ -123419,12 +124088,6 @@ B8A386 (base 16) D-Link International
SINGAPORE 609917
SG
-1C-AF-F7 (hex) D-Link International
-1CAFF7 (base 16) D-Link International
- 1 INTERNATIONAL BUSINESS PARK,
- SINGAPORE 609917
- SG
-
28-3B-82 (hex) D-Link International
283B82 (base 16) D-Link International
1 Internal Business Park, #03-12,The Synergy, Singapore
@@ -123437,12 +124100,36 @@ B8A386 (base 16) D-Link International
Singapore Singapore 609917
SG
+3C-1E-04 (hex) D-Link International
+3C1E04 (base 16) D-Link International
+ 1 Internal Business Park, #03-12,The Synergy, Singapore
+ Singapore Singapore 609917
+ SG
+
+54-B8-0A (hex) D-Link International
+54B80A (base 16) D-Link International
+ 1 Internal Business Park, #03-12,The Synergy, Singapore
+ Singapore Singapore 609917
+ SG
+
80-26-89 (hex) D-Link International
802689 (base 16) D-Link International
1 Internal Business Park, #03-12,The Synergy, Singapore
Singapore Singapore 609917
SG
+70-62-B8 (hex) D-Link International
+7062B8 (base 16) D-Link International
+ 1 Internal Business Park, #03-12,The Synergy, Singapore
+ Singapore Singapore 609917
+ SG
+
+1C-AF-F7 (hex) D-Link International
+1CAFF7 (base 16) D-Link International
+ 1 INTERNATIONAL BUSINESS PARK,
+ SINGAPORE 609917
+ SG
+
10-A3-B8 (hex) Iskratel d.o.o.
10A3B8 (base 16) Iskratel d.o.o.
Ljubljanska cesta 24a
@@ -123461,6 +124148,228 @@ B8A386 (base 16) D-Link International
Hangzhou Zhejiang 310052
CN
+14-AE-DB (hex) VTech Telecommunications Ltd.
+14AEDB (base 16) VTech Telecommunications Ltd.
+ 23/F, Tai Ping Industrial Centre, Block 1,
+ HONG KONG NA 000000
+ HK
+
+78-DB-2F (hex) Texas Instruments
+78DB2F (base 16) Texas Instruments
+ 12500 TI Blvd
+ Dallas TX 75243
+ US
+
+58-93-D8 (hex) Texas Instruments
+5893D8 (base 16) Texas Instruments
+ 12500 TI Blvd
+ Dallas TX 75243
+ US
+
+DC-71-37 (hex) zte corporation
+DC7137 (base 16) zte corporation
+ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ shenzhen guangdong 518057
+ CN
+
+DC-68-0C (hex) Hewlett Packard Enterprise
+DC680C (base 16) Hewlett Packard Enterprise
+ 8000 Foothills Blvd.
+ Roseville CA 95747
+ US
+
+FC-33-42 (hex) Juniper Networks
+FC3342 (base 16) Juniper Networks
+ 1133 Innovation Way
+ Sunnyvale CA 94089
+ US
+
+6C-8B-D3 (hex) Cisco Systems, Inc
+6C8BD3 (base 16) Cisco Systems, Inc
+ 80 West Tasman Drive
+ San Jose CA 94568
+ US
+
+80-DA-13 (hex) eero inc.
+80DA13 (base 16) eero inc.
+ 660 3rd Street
+ San Francisco CA 94107
+ US
+
+14-22-DB (hex) eero inc.
+1422DB (base 16) eero inc.
+ 230 9th St.
+ San Francisco CA 94103
+ US
+
+00-11-B4 (hex) Westermo Network Technologies AB
+0011B4 (base 16) Westermo Network Technologies AB
+ Stora Sundby
+ Sweden SE-640 40
+ SE
+
+30-89-44 (hex) DEVA Broadcast Ltd.
+308944 (base 16) DEVA Broadcast Ltd.
+ Alexander Stamboliyski 65
+ Burgas Burgas 8000
+ BG
+
+84-B8-66 (hex) Beijing XiaoLu technology co. LTD
+84B866 (base 16) Beijing XiaoLu technology co. LTD
+ Room 002, floor 2, building 1, yard 4, BeiTuCheng East Road, ChaoYang district, Beijing
+ Beijing 100102
+ CN
+
+80-A2-35 (hex) Edgecore Networks Corporation
+80A235 (base 16) Edgecore Networks Corporation
+ 1 Creation RD 3.
+ Hsinchu 30077
+ TW
+
+E0-B6-55 (hex) Beijing Xiaomi Electronics Co., Ltd.
+E0B655 (base 16) Beijing Xiaomi Electronics Co., Ltd.
+ Building C, QingHe ShunShiJiaYe Technology Park, #66 ZhuFang Rd, HaiDian District
+ Beijing Beijing 10085
+ CN
+
+B4-CC-04 (hex) Piranti
+B4CC04 (base 16) Piranti
+ 126, Beolmal-ro
+ Dongan-gu, Anyang-si, Gyeonggi-do 14057
+ KR
+
+5C-32-C5 (hex) Teracom Ltd.
+5C32C5 (base 16) Teracom Ltd.
+ 11 Vasil Levski blvd.
+ Ruse 7019
+ BG
+
+C8-63-14 (hex) IEEE Registration Authority
+C86314 (base 16) IEEE Registration Authority
+ 445 Hoes Lane
+ Piscataway NJ 08554
+ US
+
+3C-0C-7D (hex) Tiny Mesh AS
+3C0C7D (base 16) Tiny Mesh AS
+ Elisabeth von Hübschs gate 6
+ MOSS 1534
+ NO
+
+C8-21-DA (hex) Shenzhen YOUHUA Technology Co., Ltd
+C821DA (base 16) Shenzhen YOUHUA Technology Co., Ltd
+ Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District
+ Shenzhen Guangdong 518055
+ CN
+
+78-E2-BD (hex) Vodafone Automotive S.p.A.
+78E2BD (base 16) Vodafone Automotive S.p.A.
+ via Astico 41
+ Varese Italy/VA 21100
+ IT
+
+4C-11-AE (hex) Espressif Inc.
+4C11AE (base 16) Espressif Inc.
+ Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+ Shanghai Shanghai 201203
+ CN
+
+E4-1E-0A (hex) IEEE Registration Authority
+E41E0A (base 16) IEEE Registration Authority
+ 445 Hoes Lane
+ Piscataway NJ 08554
+ US
+
+00-20-E0 (hex) Actiontec Electronics, Inc
+0020E0 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+A0-91-A2 (hex) OnePlus Electronics (Shenzhen) Co., Ltd.
+A091A2 (base 16) OnePlus Electronics (Shenzhen) Co., Ltd.
+ Room 201, Block A, No.1, 1st Qian Wan Road, Qianhai Shenzhen-Hong Kong Cooperation Zone, Shenzhen, China.
+ Shenzhen Guangdong 518000
+ CN
+
+10-9F-A9 (hex) Actiontec Electronics, Inc
+109FA9 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+60-92-F5 (hex) ARRIS Group, Inc.
+6092F5 (base 16) ARRIS Group, Inc.
+ 6450 Sequence Drive
+ San Diego CA 92121
+ US
+
+18-20-D5 (hex) ARRIS Group, Inc.
+1820D5 (base 16) ARRIS Group, Inc.
+ 6450 Sequence Drive
+ San Diego CA 92121
+ US
+
+00-03-12 (hex) TRsystems GmbH
+000312 (base 16) TRsystems GmbH
+ Eglishalde 16
+ Trossingen Baden-Wuerttemberg D-78647
+ DE
+
+9C-25-BE (hex) Wildlife Acoustics, Inc.
+9C25BE (base 16) Wildlife Acoustics, Inc.
+ 3 Mill and Main Place, Suite 210
+ MAYNARD MA 01754
+ US
+
+00-A0-98 (hex) NetApp
+00A098 (base 16) NetApp
+ 1395 Crossman Ave
+ Sunnyvale, CA 94089
+ US
+
+1C-69-7A (hex) EliteGroup Computer Systems Co., LTD
+1C697A (base 16) EliteGroup Computer Systems Co., LTD
+ No.239, Sec. 2, TiDing Blvd. Nei-Hu Dist.
+ Taipei Taiwan 11439
+ TW
+
+D0-9C-7A (hex) Xiaomi Communications Co Ltd
+D09C7A (base 16) Xiaomi Communications Co Ltd
+ The Rainbow City of China Resources
+ NO.68, Qinghe Middle Street Haidian District, Beijing 100085
+ CN
+
+48-87-64 (hex) vivo Mobile Communication Co., Ltd.
+488764 (base 16) vivo Mobile Communication Co., Ltd.
+ #283,BBK Road
+ Wusha,Chang'An DongGuan City,Guangdong, 523860
+ CN
+
+C8-2C-2B (hex) IEEE Registration Authority
+C82C2B (base 16) IEEE Registration Authority
+ 445 Hoes Lane
+ Piscataway NJ 08554
+ US
+
+C0-FD-84 (hex) zte corporation
+C0FD84 (base 16) zte corporation
+ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ shenzhen guangdong 518057
+ CN
+
+4C-6F-9C (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+4C6F9C (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+ NO.18 HAIBIN ROAD,
+ DONG GUAN GUANG DONG 523860
+ CN
+
+D4-4D-A4 (hex) Murata Manufacturing Co., Ltd.
+D44DA4 (base 16) Murata Manufacturing Co., Ltd.
+ 1-10-1, Higashikotari
+ Nagaokakyo-shi Kyoto 617-8555
+ JP
+
2C-39-96 (hex) Sagemcom Broadband SAS
2C3996 (base 16) Sagemcom Broadband SAS
250 route de l'Empereur
@@ -131183,12 +132092,6 @@ A4DE50 (base 16) Total Walther GmbH
Munich 80807
DE
-E8-A4-C1 (hex) Deep Sea Electronics PLC
-E8A4C1 (base 16) Deep Sea Electronics PLC
- Highfield House
- Hunmanby North Yorkshire YO14 0PH
- GB
-
70-1A-ED (hex) ADVAS CO., LTD.
701AED (base 16) ADVAS CO., LTD.
3-8-8 Shin-yokohama, Kohoku-ku
@@ -132179,12 +133082,6 @@ DC3350 (base 16) TechSAT GmbH
Geumcheon-Gu Seoul 153-782
KR
-00-22-AF (hex) Safety Vision
-0022AF (base 16) Safety Vision
- 6100 W. Sam Houston Pkwy. North
- Houston Texas 77041
- US
-
00-22-A2 (hex) Xtramus Technologies
0022A2 (base 16) Xtramus Technologies
5th Fl., No. 102, Lide St.,
@@ -138635,12 +139532,6 @@ DC3350 (base 16) TechSAT GmbH
Irvine CA 92618
US
-00-07-7C (hex) Westermo Teleindustri AB
-00077C (base 16) Westermo Teleindustri AB
- SE-640 40
- Stora Sundby
- SE
-
00-07-76 (hex) Federal APD
000776 (base 16) Federal APD
42775 Nine Mile Rd.
@@ -149216,12 +150107,6 @@ C87765 (base 16) Tiesse SpA
Ivrea TO 10015
IT
-60-5F-8D (hex) eero inc.
-605F8D (base 16) eero inc.
- 500 Howard Street, Suite 900
- SAN FRANCISCO CA 94105
- US
-
B4-DE-DF (hex) zte corporation
B4DEDF (base 16) zte corporation
12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
@@ -150818,12 +151703,6 @@ E48399 (base 16) ARRIS Group, Inc.
Osterode 37520
DE
-F8-BB-BF (hex) eero inc.
-F8BBBF (base 16) eero inc.
- 500 Howard St Suite 900
- San Francisco CA 94105
- US
-
70-6D-EC (hex) Wifi-soft LLC
706DEC (base 16) Wifi-soft LLC
616, West Monroe
@@ -153632,78 +154511,12 @@ F46E95 (base 16) Extreme Networks, Inc.
San Jose 95119
US
-00-0F-B3 (hex) Actiontec Electronics, Inc
-000FB3 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-00-15-05 (hex) Actiontec Electronics, Inc
-001505 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-00-18-01 (hex) Actiontec Electronics, Inc
-001801 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
28-80-88 (hex) NETGEAR
288088 (base 16) NETGEAR
350 East Plumeria Drive
San Jose CA 95134
US
-00-7F-28 (hex) Actiontec Electronics, Inc
-007F28 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-40-8B-07 (hex) Actiontec Electronics, Inc
-408B07 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-4C-8B-30 (hex) Actiontec Electronics, Inc
-4C8B30 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-A0-A3-E2 (hex) Actiontec Electronics, Inc
-A0A3E2 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-0C-61-27 (hex) Actiontec Electronics, Inc
-0C6127 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-00-26-62 (hex) Actiontec Electronics, Inc
-002662 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-10-78-5B (hex) Actiontec Electronics, Inc
-10785B (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
-9C-1E-95 (hex) Actiontec Electronics, Inc
-9C1E95 (base 16) Actiontec Electronics, Inc
- 301 Olcott St
- Santa Clara CA 95054
- US
-
9C-69-B4 (hex) IEEE Registration Authority
9C69B4 (base 16) IEEE Registration Authority
445 Hoes Lane
@@ -154372,3 +155185,288 @@ B0E71D (base 16) Shanghai Maigantech Co.,Ltd
Room 2211,No.88 Caoxi North Rd,Xuhui District
Shanghai Shanghai 200030
CN
+
+88-97-46 (hex) Sichuan AI-Link Technology Co., Ltd.
+889746 (base 16) Sichuan AI-Link Technology Co., Ltd.
+ Anzhou,Industrial Park
+ Anzhou,Industrial Park Sichuan 621000
+ CN
+
+14-52-90 (hex) KNS Group LLC (YADRO Company)
+145290 (base 16) KNS Group LLC (YADRO Company)
+ Spartakovskaya sq., 14, bl. 1
+ Moscow 105082
+ RU
+
+8C-79-F5 (hex) Samsung Electronics Co.,Ltd
+8C79F5 (base 16) Samsung Electronics Co.,Ltd
+ 129, Samsung-ro, Youngtongl-Gu
+ Suwon Gyeonggi-Do 16677
+ KR
+
+48-F8-DB (hex) HUAWEI TECHNOLOGIES CO.,LTD
+48F8DB (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+2C-58-E8 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+2C58E8 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+A4-97-5C (hex) VTech Telecommunications Ltd.
+A4975C (base 16) VTech Telecommunications Ltd.
+ 23/F,Tai Ping Industrial Centre ,Block 1
+ Hong Kong 000000
+ CN
+
+50-78-B3 (hex) zte corporation
+5078B3 (base 16) zte corporation
+ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China
+ shenzhen guangdong 518057
+ CN
+
+24-6F-28 (hex) Espressif Inc.
+246F28 (base 16) Espressif Inc.
+ Room 204, Building 2, 690 Bibo Rd, Pudong New Area
+ Shanghai Shanghai 201203
+ CN
+
+C4-B3-6A (hex) Cisco Systems, Inc
+C4B36A (base 16) Cisco Systems, Inc
+ 80 West Tasman Drive
+ San Jose CA 94568
+ US
+
+F8-BB-BF (hex) eero inc.
+F8BBBF (base 16) eero inc.
+ 500 Howard St Suite 900
+ San Francisco CA 94105
+ US
+
+60-5F-8D (hex) eero inc.
+605F8D (base 16) eero inc.
+ 500 Howard Street, Suite 900
+ SAN FRANCISCO CA 94105
+ US
+
+00-07-7C (hex) Westermo Network Technologies AB
+00077C (base 16) Westermo Network Technologies AB
+ Stora Sundby
+ Sweden SE-640 40
+ SE
+
+90-4D-C3 (hex) Flonidan A/S
+904DC3 (base 16) Flonidan A/S
+ Islandsvej 29
+ Horsens 8700
+ DK
+
+30-EA-26 (hex) Sycada BV
+30EA26 (base 16) Sycada BV
+ Burgemeester Stramanweg 105B
+ Amsterdam 1101 AA
+ NL
+
+9C-49-7F (hex) Integrated Device Technology (Malaysia) Sdn. Bhd.
+9C497F (base 16) Integrated Device Technology (Malaysia) Sdn. Bhd.
+ Phase 3, Bayan Lepas FIZ
+ Bayan Lepas Penang 11900
+ MY
+
+78-8C-77 (hex) LEXMARK INTERNATIONAL, INC.
+788C77 (base 16) LEXMARK INTERNATIONAL, INC.
+ 740 NEW CIRCLE ROAD
+ LEXINGTON KY 40550
+ US
+
+E0-02-A5 (hex) ABB Robotics
+E002A5 (base 16) ABB Robotics
+ Hydrovägen 10
+ Västerås 721 68
+ SE
+
+F8-9A-78 (hex) HUAWEI TECHNOLOGIES CO.,LTD
+F89A78 (base 16) HUAWEI TECHNOLOGIES CO.,LTD
+ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park
+ Dongguan 523808
+ CN
+
+9C-1E-95 (hex) Actiontec Electronics, Inc
+9C1E95 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+10-78-5B (hex) Actiontec Electronics, Inc
+10785B (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+00-26-62 (hex) Actiontec Electronics, Inc
+002662 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+0C-61-27 (hex) Actiontec Electronics, Inc
+0C6127 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+A0-A3-E2 (hex) Actiontec Electronics, Inc
+A0A3E2 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+4C-8B-30 (hex) Actiontec Electronics, Inc
+4C8B30 (base 16) Actiontec Electronics, Inc
+ 3301 Olcott St.
+ Santa Clara CA 95054
+ US
+
+00-22-AF (hex) Safety Vision, LLC
+0022AF (base 16) Safety Vision, LLC
+ 6100 W. Sam Houston Pkwy. North
+ Houston Texas 77041
+ US
+
+C8-B4-22 (hex) ASKEY COMPUTER CORP
+C8B422 (base 16) ASKEY COMPUTER CORP
+ 10F,No.119,JIANKANG RD,ZHONGHE DIST
+ NEW TAIPEI TAIWAN 23585
+ TW
+
+40-8B-07 (hex) Actiontec Electronics, Inc
+408B07 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+00-7F-28 (hex) Actiontec Electronics, Inc
+007F28 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+00-18-01 (hex) Actiontec Electronics, Inc
+001801 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+00-15-05 (hex) Actiontec Electronics, Inc
+001505 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+00-0F-B3 (hex) Actiontec Electronics, Inc
+000FB3 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+84-E8-92 (hex) Actiontec Electronics, Inc
+84E892 (base 16) Actiontec Electronics, Inc
+ 301 Olcott St
+ Santa Clara CA 95054
+ US
+
+10-93-97 (hex) ARRIS Group, Inc.
+109397 (base 16) ARRIS Group, Inc.
+ 6450 Sequence Drive
+ San Diego CA 92121
+ US
+
+10-3D-3E (hex) China Mobile Group Device Co.,Ltd.
+103D3E (base 16) China Mobile Group Device Co.,Ltd.
+ 32 Xuanwumen West Street,Xicheng District
+ Beijing 100053
+ CN
+
+64-CC-22 (hex) Arcadyan Corporation
+64CC22 (base 16) Arcadyan Corporation
+ No.8, Sec.2, Guangfu Rd.
+ Hsinchu City Hsinchu 30071
+ TW
+
+38-F3-2E (hex) Skullcandy
+38F32E (base 16) Skullcandy
+ 6301 N. LANDMARK DRIVE
+ Park City 84098
+ US
+
+E8-E8-B7 (hex) Murata Manufacturing Co., Ltd.
+E8E8B7 (base 16) Murata Manufacturing Co., Ltd.
+ 1-10-1, Higashikotari
+ Nagaokakyo-shi Kyoto 617-8555
+ JP
+
+80-20-DA (hex) Sagemcom Broadband SAS
+8020DA (base 16) Sagemcom Broadband SAS
+ 250, route de l'Empereur
+ Rueil Malmaison Cedex hauts de seine 92848
+ FR
+
+18-46-44 (hex) Home Control Singapore Pte Ltd
+184644 (base 16) Home Control Singapore Pte Ltd
+ 151 Lorong Chuan
+ Singapore 556741
+ SG
+
+E8-C4-17 (hex) Fiberhome Telecommunication Technologies Co.,LTD
+E8C417 (base 16) Fiberhome Telecommunication Technologies Co.,LTD
+ No.5 DongXin Road
+ Wuhan Hubei 430074
+ CN
+
+48-5D-EB (hex) Just Add Power
+485DEB (base 16) Just Add Power
+ 12505 STARKEY RD STE A
+ LARGO FL 33773
+ US
+
+F8-B7-97 (hex) NEC Platforms, Ltd.
+F8B797 (base 16) NEC Platforms, Ltd.
+ 2-3 Kandatsukasamachi
+ Chiyodaku Tokyo 101-8532
+ JP
+
+B0-AA-D2 (hex) Sichuan tianyi kanghe communications co., LTD
+B0AAD2 (base 16) Sichuan tianyi kanghe communications co., LTD
+ No.198, section 1, xueshan avenue, jinyuan town, dayi county, sichuan province
+ chengdu sichuan 611330
+ CN
+
+E8-A4-C1 (hex) Deep Sea Electronics Ltd
+E8A4C1 (base 16) Deep Sea Electronics Ltd
+ Highfield House
+ Hunmanby North Yorkshire YO14 0PH
+ GB
+
+B0-70-0D (hex) Nokia
+B0700D (base 16) Nokia
+ 600 March Road
+ Kanata Ontario K2K 2E6
+ CA
+
+DC-8C-37 (hex) Cisco Systems, Inc
+DC8C37 (base 16) Cisco Systems, Inc
+ 80 West Tasman Drive
+ San Jose CA 94568
+ US
+
+70-2E-80 (hex) DIEHL Connectivity Solutions
+702E80 (base 16) DIEHL Connectivity Solutions
+ Stephanstraße 49
+ Nürnberg Bayern 90478
+ DE
+
+7C-50-DA (hex) Private
+7C50DA (base 16) Private
diff --git a/hwdb/ma-medium.txt b/hwdb/ma-medium.txt
index 4e78bb65b7..3090a958f9 100644
--- a/hwdb/ma-medium.txt
+++ b/hwdb/ma-medium.txt
@@ -56,12 +56,6 @@ D00000-DFFFFF (base 16) Qivivo
Hamburg 22143
DE
-40-A3-6B (hex) Bixi Systems Ltd.
-600000-6FFFFF (base 16) Bixi Systems Ltd.
- Grossfeldstrasse 3
- Mels 8887
- CH
-
70-88-6B (hex) Beijing Strongleader Science & Technology Co., Ltd.
B00000-BFFFFF (base 16) Beijing Strongleader Science & Technology Co., Ltd.
No. 12 Yard, Zhong Guan Cun South St.
@@ -2168,9 +2162,6 @@ C00000-CFFFFF (base 16) Shenzhen Samchung Video Technology Co., Ltd.
D0-76-50 (hex) Private
F00000-FFFFFF (base 16) Private
-1C-CA-E3 (hex) Private
-F00000-FFFFFF (base 16) Private
-
3C-39-E7 (hex) Private
F00000-FFFFFF (base 16) Private
@@ -2777,6 +2768,12 @@ E4-4C-C7 (hex) Channel Enterprises (HK) Ltd.
Landau Deutschland (DEU) 76829
DE
+FC-D2-B6 (hex) Soma GmbH
+200000-2FFFFF (base 16) Soma GmbH
+ Gewerbering 9
+ Schalksmühle NRW 58579
+ DE
+
90-C6-82 (hex) Private
F00000-FFFFFF (base 16) Private
@@ -2786,12 +2783,117 @@ FC-D2-B6 (hex) Grandway Technology (Shenzhen) Limited
Ping Shan District Shenzhen 518118
CN
-FC-D2-B6 (hex) Soma GmbH
-200000-2FFFFF (base 16) Soma GmbH
- Gewerbering 9
- Schalksmühle NRW 58579
+40-A3-6B (hex) Securiton AG
+600000-6FFFFF (base 16) Securiton AG
+ Alpenstrasse 20, P.O. Box 127
+ Zollikofen CH-3052
+ CH
+
+FC-D2-B6 (hex) Oviss Labs Inc.
+800000-8FFFFF (base 16) Oviss Labs Inc.
+ 46259 Warm Springs Blvd
+ Fremont CA 94539
+ US
+
+34-E1-D1 (hex) Hubitat Inc.
+800000-8FFFFF (base 16) Hubitat Inc.
+ 20343 N Hayden Rd, Suite 105-280
+ Scottsdale AZ 85255
+ US
+
+34-E1-D1 (hex) Ningbo Hua Gao Mdt Info Tech Ltd
+600000-6FFFFF (base 16) Ningbo Hua Gao Mdt Info Tech Ltd
+ NO.655,Xueshi Road, Yinzhou District, Ningbo, Zhejiang,China
+ Ningbo Zhejiang 315100
+ CN
+
+34-E1-D1 (hex) SAMA NextGen PTE Limited
+100000-1FFFFF (base 16) SAMA NextGen PTE Limited
+ 16 Collyer Quay, #21-00 Income AT Raffels, Singapore 049318
+ Singapore 049318
+ SG
+
+34-E1-D1 (hex) Genius Pros
+700000-7FFFFF (base 16) Genius Pros
+ Floor 13, Building B, NO. 859 West Shixiang Road, Xihu District, Hangzhou City
+ Hangzhou 310012
+ CN
+
+C8-63-14 (hex) Shenzhen Zero Zero Infinity Technology Co.,Ltd.
+400000-4FFFFF (base 16) Shenzhen Zero Zero Infinity Technology Co.,Ltd.
+ 309 Rainbow Technology Building, 36 Gaoxin North 6th Road, Xili Street
+ Shenzhen Guangdong 518000
+ CN
+
+C8-63-14 (hex) Meyer Electronics Limited
+500000-5FFFFF (base 16) Meyer Electronics Limited
+ 382 Kwun Tong Road
+ Hong Kong 0000
+ HK
+
+C8-63-14 (hex) Tymphany Acoustic Technology (Huizhou) Co., Ltd.
+200000-2FFFFF (base 16) Tymphany Acoustic Technology (Huizhou) Co., Ltd.
+ Tymphany Industrial Area, Xin Lian Village, XinXu Town, HuiYang District
+ Huizhou Guangdong 516223
+ CN
+
+E4-1E-0A (hex) Avast Software s.r.o.
+300000-3FFFFF (base 16) Avast Software s.r.o.
+ Pikrtova 1737/1a
+ Prague 4 14000
+ CZ
+
+C8-2C-2B (hex) Fungible, Inc.
+000000-0FFFFF (base 16) Fungible, Inc.
+ 3201 Scott Blvd., 2nd floor
+ Santa Clara CA 95054
+ US
+
+E4-1E-0A (hex) Shanghai LeXiang Technology Co., Ltd
+E00000-EFFFFF (base 16) Shanghai LeXiang Technology Co., Ltd
+ Floor 6,Building 8,Yanjiaqiao Road,Pudong Area ,Shanghai ,China
+ shanghai 200125
+ CN
+
+E4-1E-0A (hex) SFC Energy AG
+600000-6FFFFF (base 16) SFC Energy AG
+ Eugen-Saenger-Ring 7
+ Brunnthal 85649
DE
+C8-2C-2B (hex) RF Engineering and Energy Resource
+300000-3FFFFF (base 16) RF Engineering and Energy Resource
+ 4460 Commercial Ave.
+ Portage MI 49002
+ US
+
+C8-2C-2B (hex) Repp Health
+200000-2FFFFF (base 16) Repp Health
+ 1919 14th Street , Suite 700
+ Boulder CO 80302
+ US
+
+C8-2C-2B (hex) DALCO AG
+500000-5FFFFF (base 16) DALCO AG
+ Industriestr. 28
+ Volketswil ZH 8604
+ CH
+
+B0-FD-0B (hex) DMAC Security LLC
+300000-3FFFFF (base 16) DMAC Security LLC
+ 833 Shotgun Road
+ Sunrise FL 33326
+ US
+
+B0-FD-0B (hex) eSenseLab Ltd.
+800000-8FFFFF (base 16) eSenseLab Ltd.
+ 1 Chervena stena Str., Office 1
+ Sofia Sofia-grad 1421
+ BG
+
+1C-CA-E3 (hex) Private
+F00000-FFFFFF (base 16) Private
+
1C-87-76 (hex) Strone Technology
C00000-CFFFFF (base 16) Strone Technology
13 Ellis Street
@@ -5492,6 +5594,78 @@ B00000-BFFFFF (base 16) T CHIP DIGITAL TECHNOLOGY CO.LTD
SHENZHEN Guangdong 518000
CN
+FC-D2-B6 (hex) SHEN ZHEN XIN HAO YUAN PRECISION TECHNOLOGY CO.,L TD
+400000-4FFFFF (base 16) SHEN ZHEN XIN HAO YUAN PRECISION TECHNOLOGY CO.,L TD
+ 1,2,3 Building,XinHaoYuan Industrial Area,HeYi Community,Shajing Street,BaoAn District.Shenzhen
+ shenzhen guangdongsheng 518000
+ CN
+
+FC-D2-B6 (hex) Winglet Systems Inc.
+900000-9FFFFF (base 16) Winglet Systems Inc.
+ 4-6, Shinyokohama 2-chome, Kohoku-ku
+ Yokohama Kanagawa 222-0033
+ JP
+
+34-E1-D1 (hex) Doki Technologies Limited
+500000-5FFFFF (base 16) Doki Technologies Limited
+ Unit 601,Tower One, Silvercord, 30 Canton Road, Tsim Sha Tsui
+ Kowloon 00000
+ HK
+
+34-E1-D1 (hex) HI-TECH.ORG
+D00000-DFFFFF (base 16) HI-TECH.ORG
+ Volgogradskiy prospekt, 43, k.3, room XXVI
+ Moscow 109316
+ RU
+
+34-E1-D1 (hex) Tianjin Sublue Ocean Science & Technology Co., Ltd
+000000-0FFFFF (base 16) Tianjin Sublue Ocean Science & Technology Co., Ltd
+ No.29 Factory No.156 Nanhai Road,TEDA
+ Tianjin 300050
+ CN
+
+34-E1-D1 (hex) CREW by True Rowing, Inc.
+C00000-CFFFFF (base 16) CREW by True Rowing, Inc.
+ 14 Arrow St, Floor 4
+ Cambridge MA 02138
+ US
+
+34-E1-D1 (hex) Annapurna labs
+E00000-EFFFFF (base 16) Annapurna labs
+ Matam Scientific Industries Center, Building 8.2
+ Mail box 15123 Haifa 3508409
+ IL
+
+C8-63-14 (hex) Autonics Co., Ltd.
+100000-1FFFFF (base 16) Autonics Co., Ltd.
+ 4-14-26, Shimo-Muneoka
+ Shiki Saitama 3530003
+ JP
+
+C8-63-14 (hex) GRINBI PARTNERS
+600000-6FFFFF (base 16) GRINBI PARTNERS
+ 222, Dogok-ro, Gangnam-gu
+ Seoul 06272
+ KR
+
+E4-1E-0A (hex) Safety Vision, LLC
+B00000-BFFFFF (base 16) Safety Vision, LLC
+ 6100 West Sam Houston Parkway North
+ Houston TX 77041-5113
+ US
+
+E4-1E-0A (hex) Zavod № 423
+000000-0FFFFF (base 16) Zavod № 423
+ 2B, Zavodskoy proezd
+ Bogoroditsk Tula 301830
+ RU
+
+C8-2C-2B (hex) Verifone Systems (China),lnc.
+800000-8FFFFF (base 16) Verifone Systems (China),lnc.
+ 2nd Floor,No.39,Region C, Tongpan Road,Gulou District
+ fuzhou fujian 350004
+ CN
+
1C-87-76 (hex) Zhuhai MYZR Technology Co.,Ltd
500000-5FFFFF (base 16) Zhuhai MYZR Technology Co.,Ltd
Room 302,Area D2,National Hi-tech Zone,NO.1,Software Park Road
@@ -8411,6 +8585,96 @@ FC-D2-B6 (hex) CG POWER AND INDUSTRIAL SOLUTIONS LTD
NASHIK MAHARASHTRA 422010
IN
+FC-D2-B6 (hex) LINK (FAR-EAST) CORPORATION
+100000-1FFFFF (base 16) LINK (FAR-EAST) CORPORATION
+ No.192, Lian-Cheng Rd., Chung-Ho, Taipei,Taiwan 23553
+ Taipei Taiwan 23553
+ TW
+
+FC-D2-B6 (hex) Univer S.p.A.
+E00000-EFFFFF (base 16) Univer S.p.A.
+ Via Eraclito 31
+ Milan 20128
+ IT
+
+34-E1-D1 (hex) APG Cash Drawer, LLC
+B00000-BFFFFF (base 16) APG Cash Drawer, LLC
+ 5250 Industrial Blvd NE
+ Minneapolis MN 55421
+ US
+
+C8-63-14 (hex) TrackMan
+300000-3FFFFF (base 16) TrackMan
+ Stubbeled 2
+ Vedbaek 2950
+ DK
+
+C8-63-14 (hex) Shenzhen Wesion Technology Co., Ltd
+700000-7FFFFF (base 16) Shenzhen Wesion Technology Co., Ltd
+ A511, Mingyou Purchasing Center, Baoyuan Road, Xixiang Street
+ Shenzhen Guangdong 518102
+ CN
+
+C8-63-14 (hex) Thinci, Inc.
+800000-8FFFFF (base 16) Thinci, Inc.
+ 2105 S. Bascom Avenue, Suite 318
+ Campbell CA 95008
+ US
+
+E4-1E-0A (hex) SAGE Glass
+800000-8FFFFF (base 16) SAGE Glass
+ Two Sage Way
+ Faribault MN 55021
+ US
+
+E4-1E-0A (hex) IDvaco Private Limited
+200000-2FFFFF (base 16) IDvaco Private Limited
+ Aljunied road, 627A,06-02
+ singapore singapore 389842
+ SG
+
+E4-1E-0A (hex) B METERS S.R.L.
+900000-9FFFFF (base 16) B METERS S.R.L.
+ VIA FRIULI 3
+ GONARS UDINE 33050
+ IT
+
+E4-1E-0A (hex) TELETASK BELGIUM
+C00000-CFFFFF (base 16) TELETASK BELGIUM
+ Ottergemsesteenweg-zuid 729
+ GENT Oost-Vlaanderen 9000
+ BE
+
+E4-1E-0A (hex) Connected Cars A/S
+100000-1FFFFF (base 16) Connected Cars A/S
+ Park Allé 355
+ Brøndby 2605
+ DK
+
+C8-63-14 (hex) Optictimes Co.,Ltd
+A00000-AFFFFF (base 16) Optictimes Co.,Ltd
+ Hangzhou City, Zhejiang Province
+ Hangzhou Zhejiang 310023
+ CN
+
+C8-2C-2B (hex) Kunshan SVL Electric Co.,Ltd
+B00000-BFFFFF (base 16) Kunshan SVL Electric Co.,Ltd
+ No. 568, JuJin Road, Zhangpu Town
+ SuZhou 215300
+ CN
+
+B0-FD-0B (hex) Habana Labs LTD
+D00000-DFFFFF (base 16) Habana Labs LTD
+ 5 Tarshish St,
+ Caesarea 3079821
+ IL
+
+B0-FD-0B (hex) Vista Manufacturing
+200000-2FFFFF (base 16) Vista Manufacturing
+ 53345 Columbia Drive
+ Elkhart IN 46514
+ US
+
1C-87-76 (hex) Hekatron Vertriebs GmbH
B00000-BFFFFF (base 16) Hekatron Vertriebs GmbH
Brühlmatten 9
@@ -10520,9 +10784,6 @@ B00000-BFFFFF (base 16) Shanghai Visteon Automotive Electronics System CO.
Chicago IL 60607
US
-F0-23-B9 (hex) Private
-D00000-DFFFFF (base 16) Private
-
34-D0-B8 (hex) Kongqiguanjia (Beijing)Technology co.,ltd
E00000-EFFFFF (base 16) Kongqiguanjia (Beijing)Technology co.,ltd
Room 1201,Block A,Building of Fesco,Xidawang Road,Chaoyang district
@@ -10679,9 +10940,6 @@ B00000-BFFFFF (base 16) Popit Oy
Shenzhen Guangdong 518000
CN
-8C-14-7D (hex) Private
-100000-1FFFFF (base 16) Private
-
64-FB-81 (hex) Private
F00000-FFFFFF (base 16) Private
@@ -11204,6 +11462,78 @@ D00000-DFFFFF (base 16) Bee Smart(Changzhou) Information Technology Co., Lt
Changzhou Jiangsu 213100
CN
+FC-D2-B6 (hex) Cirque Audio Technology Co.,Ltd
+600000-6FFFFF (base 16) Cirque Audio Technology Co.,Ltd
+ No.2 Road BeiYiHeng,HuangJiaBao Industrial Park,ShiPai Town,DongGuan City,GuangDong,China
+ DongGuan GuangDong 523000
+ CN
+
+FC-D2-B6 (hex) Teamly Digital
+700000-7FFFFF (base 16) Teamly Digital
+ 11-13 Avenue de Friedland
+ Paris Ile de France 75008
+ FR
+
+34-E1-D1 (hex) Apart Audio NV
+900000-9FFFFF (base 16) Apart Audio NV
+ Industriepark Brechtsebaan 8 bus 1
+ Schoten 2900
+ BE
+
+34-E1-D1 (hex) Rinco Ultrasonics AG
+300000-3FFFFF (base 16) Rinco Ultrasonics AG
+ Industriestrasse 4
+ Romanshorn Thurgau 8590
+ CH
+
+34-E1-D1 (hex) ASA Innovation & Technology Ltd.
+400000-4FFFFF (base 16) ASA Innovation & Technology Ltd.
+ Room 506, 5/F, Enterprise Place, No. 5 Science Park West Ave., Hong Kong Science Park
+ Shatin NT 00000
+ HK
+
+C8-63-14 (hex) Maxcom S.A.
+900000-9FFFFF (base 16) Maxcom S.A.
+ Towarowa 23A
+ Tychy 43-100
+ PL
+
+E4-1E-0A (hex) FireAngel Safety Technology Ltd
+A00000-AFFFFF (base 16) FireAngel Safety Technology Ltd
+ Sir William Lyons Road, Vanguard Centre
+ Coventry Warwickshire CV4 7EZ
+ GB
+
+E4-1E-0A (hex) XPR Group
+400000-4FFFFF (base 16) XPR Group
+ Drève Richelle 161 - WOP G
+ Waterloo 1410
+ BE
+
+C8-2C-2B (hex) Galgus
+100000-1FFFFF (base 16) Galgus
+ Italica 1, 1st floor
+ Camas Seville 41900
+ ES
+
+C8-2C-2B (hex) Fränkische Rohrwerke Gebr. Kirchner GmbH & Co. KG
+E00000-EFFFFF (base 16) Fränkische Rohrwerke Gebr. Kirchner GmbH & Co. KG
+ Hellinger Str. 1
+ Königsberg/Bayern 97486
+ DE
+
+B0-FD-0B (hex) Haltian Products Oy
+C00000-CFFFFF (base 16) Haltian Products Oy
+ Yrttipellontie 1D
+ Oulu 90230
+ FI
+
+F0-23-B9 (hex) Private
+D00000-DFFFFF (base 16) Private
+
+8C-14-7D (hex) Private
+100000-1FFFFF (base 16) Private
+
1C-87-74 (hex) Philips Personal Health Solutions
000000-0FFFFF (base 16) Philips Personal Health Solutions
High Tech Campus, HTC37 floor 0
@@ -13376,9 +13706,6 @@ E00000-EFFFFF (base 16) Electronic Controlled Systems, Inc.
Bloomington MN 55438
US
-80-7B-85 (hex) Private
-F00000-FFFFFF (base 16) Private
-
F0-AC-D7 (hex) Sercomm Corporation.
400000-4FFFFF (base 16) Sercomm Corporation.
3F,No.81,Yu-Yih Rd.,Chu-Nan Chen
@@ -13958,18 +14285,18 @@ B00000-BFFFFF (base 16) Dongguan SmartAction Technology Co.,Ltd
8C-C8-F4 (hex) Private
700000-7FFFFF (base 16) Private
-4C-BC-98 (hex) JSC NIC
-100000-1FFFFF (base 16) JSC NIC
- Nauchny proezd, 6
- Moscow 117246
- RU
-
E4-4C-C7 (hex) Ottomate International Pvt. Ltd.
900000-9FFFFF (base 16) Ottomate International Pvt. Ltd.
Awfis Building, 5th Floor, Plot # 7, Sector-44
Gurgaon Haryana 122003
IN
+4C-BC-98 (hex) JSC NIC
+100000-1FFFFF (base 16) JSC NIC
+ Nauchny proezd, 6
+ Moscow 117246
+ RU
+
E4-4C-C7 (hex) Doowon Electronics & Telecom Co.,Ltd
200000-2FFFFF (base 16) Doowon Electronics & Telecom Co.,Ltd
IT 301-408, Ssangyong 3Cha, Bucheon Technopark, 397, Seokcheon-ro, Ojeong-gu
@@ -14017,3 +14344,108 @@ A00000-AFFFFF (base 16) NREAL TECHNOLOGY LIMITED
RM 1901,19/F LEE GARDEN ONE 33 HYSAN AVENUE CAUSEWAY BAY
HONG KONG 999077
HK
+
+FC-D2-B6 (hex) Silicon (Shenzhen) Electronic Technology Co.,Ltd.
+C00000-CFFFFF (base 16) Silicon (Shenzhen) Electronic Technology Co.,Ltd.
+ 5F, Block A,No. 9 Yuexing 3rd Road, Yuehai Subdistrict Office, Nanshan District
+ Shenzhen Guangdong 518000
+ CN
+
+34-E1-D1 (hex) Teton Camera LLC
+200000-2FFFFF (base 16) Teton Camera LLC
+ PO BOX 648
+ PINEDALE WY 82941-0648
+ US
+
+C8-63-14 (hex) Telematix AG
+D00000-DFFFFF (base 16) Telematix AG
+ Freiburgstrasse 251
+ Bern Bern 3018
+ CH
+
+34-E1-D1 (hex) OrCam Technologies
+A00000-AFFFFF (base 16) OrCam Technologies
+ Kiryat Hamada 3
+ JERUSALEM 97775603
+ IL
+
+C8-63-14 (hex) Shenzhen Lihewei Electronics Co.,Ltd.Hunan Branch
+B00000-BFFFFF (base 16) Shenzhen Lihewei Electronics Co.,Ltd.Hunan Branch
+ Room 501,Room 502,Building 2,Xinggong Technology Park,No.100 Luyun Road, High-tech Development Zone
+ Changsha Hunan 410000
+ CN
+
+C8-63-14 (hex) Western Reserve Controls, Inc.
+000000-0FFFFF (base 16) Western Reserve Controls, Inc.
+ 1485 Exeter Dr.
+ Akron OH 44306
+ US
+
+E4-1E-0A (hex) Tritium Pty Ltd
+700000-7FFFFF (base 16) Tritium Pty Ltd
+ 1/31 Archimedes PL.
+ Murarrie QLD 4172
+ AU
+
+E4-1E-0A (hex) ROMO Wind A/S
+D00000-DFFFFF (base 16) ROMO Wind A/S
+ Olof Palmes Allé 47
+ Aarhus N 8200
+ DK
+
+C8-2C-2B (hex) UBITRON Co.,LTD
+D00000-DFFFFF (base 16) UBITRON Co.,LTD
+ Sinbuk-Ro
+ Chuncheon City Gangwon 24206
+ KR
+
+C8-2C-2B (hex) Merpa Bilgi Islem Ltd.Sti
+700000-7FFFFF (base 16) Merpa Bilgi Islem Ltd.Sti
+ Oztekin CD NO:26
+ Istanbul Bayrampasa 34040
+ TR
+
+C8-2C-2B (hex) Shiftall Inc.
+A00000-AFFFFF (base 16) Shiftall Inc.
+ 4F TokyoDaiwa Bldg., 2-6-10 Nihonbashibakurocho,
+ Chuo, Tokyo 1030002
+ JP
+
+C8-2C-2B (hex) iWave Systems Tech Pvt Ltd
+400000-4FFFFF (base 16) iWave Systems Tech Pvt Ltd
+ 7/B 29th Main, BTM Layout 2nd Stage
+ Bengalore Kamataka 560076
+ IN
+
+C8-2C-2B (hex) BIOT Sp. z o.o.
+900000-9FFFFF (base 16) BIOT Sp. z o.o.
+ Nowy Kisielin-Nowa 7
+ Zielona Góra Lubuskie 66-002
+ PL
+
+C8-2C-2B (hex) Smart Wires Inc
+C00000-CFFFFF (base 16) Smart Wires Inc
+ 3292 Whipple Road
+ Union City CA 94587
+ US
+
+C8-2C-2B (hex) Grav I.T.
+600000-6FFFFF (base 16) Grav I.T.
+ 601 1st Ave NW
+ Gravette AR 72736
+ US
+
+B0-FD-0B (hex) MartinLogan, Ltd.
+B00000-BFFFFF (base 16) MartinLogan, Ltd.
+ 2101 Delware St
+ Lawrence KS 66046
+ US
+
+B0-FD-0B (hex) TEMCO JAPAN CO., LTD.
+A00000-AFFFFF (base 16) TEMCO JAPAN CO., LTD.
+ 2-21-4 HONAN
+ SUGINAMI KU Tokyo-to 168-0062
+ JP
+
+80-7B-85 (hex) Private
+F00000-FFFFFF (base 16) Private
diff --git a/hwdb/ma-small.txt b/hwdb/ma-small.txt
index c1131adff3..abafe21669 100644
--- a/hwdb/ma-small.txt
+++ b/hwdb/ma-small.txt
@@ -176,12 +176,6 @@ B28000-B28FFF (base 16) HUSTY M.Styczen J.Hupert sp.j.
Natrona Heights PA 15065
US
-70-B3-D5 (hex) Orlaco Products B.V.
-EAE000-EAEFFF (base 16) Orlaco Products B.V.
- Albert Plesmanstraat 42
- Barneveld 3772MN
- NL
-
70-B3-D5 (hex) WICOM1 GmbH
57D000-57DFFF (base 16) WICOM1 GmbH
Im Frauental 15
@@ -3458,6 +3452,60 @@ AB2000-AB2FFF (base 16) Power Electronics Espana, S.L.
Wuhan Hubei 430000
CN
+70-B3-D5 (hex) PABLO AIR Co., LTD
+9A9000-9A9FFF (base 16) PABLO AIR Co., LTD
+ #E-1606, 30, Songdomirae-ro, Yeonsu-gu
+ Incheon 21990
+ KR
+
+70-B3-D5 (hex) tiga.eleven GmbH
+FF2000-FF2FFF (base 16) tiga.eleven GmbH
+ Stallburggasse 2/37
+ Viennna 1010
+ AT
+
+70-B3-D5 (hex) SITA Messtechnik GmbH
+535000-535FFF (base 16) SITA Messtechnik GmbH
+ Gostritzer Str. 63
+ Dresden 01217
+ DE
+
+70-B3-D5 (hex) Preo Industries Far East Limited
+CBD000-CBDFFF (base 16) Preo Industries Far East Limited
+ 31-39 Wo Tong Tsui Street
+ Hong Kong 999077
+ HK
+
+70-B3-D5 (hex) GSI Technology
+2A6000-2A6FFF (base 16) GSI Technology
+ Raul Walenberg 18
+ Tel Aviv IL 6971915
+ IL
+
+70-B3-D5 (hex) Discover Battery
+6F1000-6F1FFF (base 16) Discover Battery
+ #4 - 13511 Crestwood Place
+ Richmond BC v6v 2e9
+ CA
+
+70-B3-D5 (hex) Jeaway CCTV Security Ltd,.
+E00000-E00FFF (base 16) Jeaway CCTV Security Ltd,.
+ No. 24, Yifa St., Sanmin Dist.
+ Kaohsiung 807
+ TW
+
+70-B3-D5 (hex) Orlaco Products B.V.
+EAE000-EAEFFF (base 16) Orlaco Products B.V.
+ Albert Plesmanstraat 42
+ Barneveld 3772MN
+ NL
+
+70-B3-D5 (hex) Izome
+9BE000-9BEFFF (base 16) Izome
+ route de chaudron
+ Montrevault sur Evre Maine et Loire 49110
+ FR
+
70-B3-D5 (hex) Flintab AB
D60000-D60FFF (base 16) Flintab AB
Kabelvägen 4
@@ -7169,6 +7217,87 @@ C93000-C93FFF (base 16) GMI Ltd
TOYONAKASHI OSAKA 561-0841
JP
+70-B3-D5 (hex) OBSERVER FOUNDATION
+633000-633FFF (base 16) OBSERVER FOUNDATION
+ Narva mnt 5
+ Tallinn city Harju county 10117
+ EE
+
+70-B3-D5 (hex) MECT SRL
+7C4000-7C4FFF (base 16) MECT SRL
+ VIA E. FERMI 57/59
+ ALPIGNANO 10091
+ IT
+
+70-B3-D5 (hex) Benetel
+E15000-E15FFF (base 16) Benetel
+ Guinness Enterprise Centre, Taylors Lane,
+ Dublin D08 XV25
+ IE
+
+70-B3-D5 (hex) XANTIA SA
+33F000-33FFFF (base 16) XANTIA SA
+ Chemin du Longchamps 99
+ Bienne 2504
+ CH
+
+70-B3-D5 (hex) Divelbiss Corporation
+F43000-F43FFF (base 16) Divelbiss Corporation
+ 9778 Mount Gilead Road
+ Fredericktown OH 43019
+ US
+
+70-B3-D5 (hex) INTERNET PROTOCOLO LOGICA SL
+275000-275FFF (base 16) INTERNET PROTOCOLO LOGICA SL
+ Sector Foresta 43, local 26
+ Tres Cantos Madrid 28760
+ ES
+
+70-B3-D5 (hex) Integrotech sp. z o.o.
+6BA000-6BAFFF (base 16) Integrotech sp. z o.o.
+ plac Zwyciestwa 2 bud. D
+ Lodz lodzkie 90-312
+ PL
+
+70-B3-D5 (hex) Invent Vision - iVision Sistemas de Imagem e Visão S.A.
+E29000-E29FFF (base 16) Invent Vision - iVision Sistemas de Imagem e Visão S.A.
+ R. Prof. José Vieira de Mendonça, 770, 2° andar - BHTEC, Parque Tecnológico de Belo Horizonte
+ Belo Horizonte Minas Gerais 31310-260
+ BR
+
+70-B3-D5 (hex) Altaneos
+69A000-69AFFF (base 16) Altaneos
+ Chaussée Verte, 93B
+ Saint-Georges 4470
+ BE
+
+70-B3-D5 (hex) Sicon srl
+BEE000-BEEFFF (base 16) Sicon srl
+ Via Sila 1/3
+ Isola Vicentina Vicenza 36033
+ IT
+
+70-B3-D5 (hex) Private
+E2D000-E2DFFF (base 16) Private
+
+70-B3-D5 (hex) Flexsolution APS
+C54000-C54FFF (base 16) Flexsolution APS
+ Østervangsvej 39
+ Esbjerg N Jylland 6715
+ DK
+
+70-B3-D5 (hex) EXARA Group
+00C000-00CFFF (base 16) EXARA Group
+ Andropova pr. 18 1
+ Moscow 115432
+ RU
+
+70-B3-D5 (hex) Orlaco Products B.V.
+620000-620FFF (base 16) Orlaco Products B.V.
+ Albert Plesmanstraat 42
+ Barneveld 3772MN
+ NL
+
70-B3-D5 (hex) Schildknecht AG
494000-494FFF (base 16) Schildknecht AG
Haugweg 26
@@ -9839,9 +9968,6 @@ FFF000-FFFFFF (base 16) Private
Colorado Springs CO 80918
US
-70-B3-D5 (hex) Private
-4F8000-4F8FFF (base 16) Private
-
70-B3-D5 (hex) ENTEC Electric & Electronic Co., LTD.
92B000-92BFFF (base 16) ENTEC Electric & Electronic Co., LTD.
78-2 Buncheon-ri, Bongdam-eup
@@ -10178,9 +10304,6 @@ A9F000-A9FFFF (base 16) Private
Littleton MA 01460
US
-70-B3-D5 (hex) Private
-30E000-30EFFF (base 16) Private
-
70-B3-D5 (hex) Moduware PTY LTD
FC8000-FC8FFF (base 16) Moduware PTY LTD
502/37 Swanston Street
@@ -10640,6 +10763,12 @@ EDE000-EDEFFF (base 16) Agrident GmbH
Fontaneto d'Agogna Novara 28010
IT
+70-B3-D5 (hex) Airity Technologies Inc.
+545000-545FFF (base 16) Airity Technologies Inc.
+ 1505 Woodside Rd
+ Redwood City CA 94061
+ US
+
70-B3-D5 (hex) IMP-Computer Systems
354000-354FFF (base 16) IMP-Computer Systems
Volgina 15
@@ -10658,12 +10787,6 @@ C24000-C24FFF (base 16) Elbit Systems of America
Bad Oldesloe D-23843
DE
-70-B3-D5 (hex) Airity Technologies Inc.
-545000-545FFF (base 16) Airity Technologies Inc.
- 1505 Woodside Rd
- Redwood City CA 94061
- US
-
70-B3-D5 (hex) Shenzhen Wesion Technology Co., Ltd
863000-863FFF (base 16) Shenzhen Wesion Technology Co., Ltd
A511, Mingyou Purchasing Center, Baoyuan Road, Xixiang Street
@@ -10697,6 +10820,12 @@ BCD000-BCDFFF (base 16) Sasken Technologies Ltd
Bangalore 560071
IN
+70-B3-D5 (hex) Slan
+788000-788FFF (base 16) Slan
+ 11 rue de la Senette
+ Carrieres sous Poissy 78955
+ FR
+
70-B3-D5 (hex) Beijing Huanyu Zhilian Science &Technology Co., Ltd.
DF5000-DF5FFF (base 16) Beijing Huanyu Zhilian Science &Technology Co., Ltd.
2/F 202-030, Building 2, No. 1, Gaolizhang Road, Haidian District,Beijing
@@ -10709,12 +10838,6 @@ DF5000-DF5FFF (base 16) Beijing Huanyu Zhilian Science &Technology Co., Ltd
Yokosuka Kanagawa 2380004
JP
-70-B3-D5 (hex) Slan
-788000-788FFF (base 16) Slan
- 11 rue de la Senette
- Carrieres sous Poissy 78955
- FR
-
70-B3-D5 (hex) Fiber Optika Technologies Pvt. Ltd.
47E000-47EFFF (base 16) Fiber Optika Technologies Pvt. Ltd.
#38, 22nd Main, 14th Cross, Padmanabhanagar
@@ -10751,6 +10874,66 @@ AEC000-AECFFF (base 16) Paratec Ltd.
Haifa 3103402
IL
+70-B3-D5 (hex) Gamber Johnson-LLC
+DBC000-DBCFFF (base 16) Gamber Johnson-LLC
+ 3001 Borham Ave
+ Stevens Point WI 54481
+ US
+
+70-B3-D5 (hex) Zaxcom Inc
+9CC000-9CCFFF (base 16) Zaxcom Inc
+ 230 West Parkway STE 9
+ Pompton Plains NJ 07444
+ US
+
+70-B3-D5 (hex) Xiamen Beogold Technology Co. Ltd.
+490000-490FFF (base 16) Xiamen Beogold Technology Co. Ltd.
+ 11F Amoy Institute of Technovation,Jimei District
+ Xiamen Fujian 361021
+ CN
+
+70-B3-D5 (hex) Becton Dickinson
+808000-808FFF (base 16) Becton Dickinson
+ 7 Loveton Circle
+ Sparks MD 21152
+ US
+
+70-B3-D5 (hex) COSMOIT.CO.LTD
+754000-754FFF (base 16) COSMOIT.CO.LTD
+ 14Fl., Ace Twin Tower II, 273, Digital-ro, Guro-gu
+ Seoul 08381
+ KR
+
+70-B3-D5 (hex) Controlled Power Company
+BA8000-BA8FFF (base 16) Controlled Power Company
+ 1955 Stephenston Hwy
+ Troy MI 48083
+ US
+
+70-B3-D5 (hex) Private
+30E000-30EFFF (base 16) Private
+
+70-B3-D5 (hex) Private
+4F8000-4F8FFF (base 16) Private
+
+70-B3-D5 (hex) Vega-Absolute
+0AD000-0ADFFF (base 16) Vega-Absolute
+ Kirova 113/1
+ Novosibirsk 630008
+ RU
+
+70-B3-D5 (hex) MaNima Technologies BV
+DD9000-DD9FFF (base 16) MaNima Technologies BV
+ Hastelweg 260B
+ Eindhoven Noord-Brabant 5652CN
+ NL
+
+70-B3-D5 (hex) digitrol limited
+477000-477FFF (base 16) digitrol limited
+ CORONET WAY, ENTERPRISE PARK
+ SWANSEA WEST GLAMORGAN SA6 8RH
+ GB
+
70-B3-D5 (hex) Innitive B.V.
66B000-66BFFF (base 16) Innitive B.V.
Brouwerijstraat 20
@@ -14411,9 +14594,6 @@ E1F000-E1FFFF (base 16) THETA432
Groningen Groningen 9723 JP
NL
-70-B3-D5 (hex) Private
-1D7000-1D7FFF (base 16) Private
-
70-B3-D5 (hex) Wuhan Xingtuxinke ELectronic Co.,Ltd
70E000-70EFFF (base 16) Wuhan Xingtuxinke ELectronic Co.,Ltd
NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China
@@ -14438,6 +14618,75 @@ BBA000-BBAFFF (base 16) Samriddi Automations Pvt. Ltd.
Freiburg 79111
DE
+70-B3-D5 (hex) DEUTA-WERKE GmbH
+E33000-E33FFF (base 16) DEUTA-WERKE GmbH
+ Paffrather Str. 140
+ Bergisch Gladbach North Rhine-Westphalia 51465
+ DE
+
+70-B3-D5 (hex) comtac AG
+F3F000-F3FFFF (base 16) comtac AG
+ Allenwindenstrasse 1
+ Flurlingen 8247
+ CH
+
+70-B3-D5 (hex) Sanmina Israel
+66D000-66DFFF (base 16) Sanmina Israel
+ Koren Industrial Zone , POBox 102
+ Maalot Israel 2101002
+ IL
+
+70-B3-D5 (hex) RADAR
+CB1000-CB1FFF (base 16) RADAR
+ 547 W 27th St.
+ NEW YORK NY 10001-5670
+ US
+
+70-B3-D5 (hex) Gluon Solutions Inc.
+BA6000-BA6FFF (base 16) Gluon Solutions Inc.
+ 6951 Southfront Road
+ Livermore CA 94551
+ US
+
+70-B3-D5 (hex) U&R GmbH Hardware- und Systemdesign
+BC5000-BC5FFF (base 16) U&R GmbH Hardware- und Systemdesign
+ In den Wiesen 2
+ Erbach 89155
+ DE
+
+70-B3-D5 (hex) Private
+1D7000-1D7FFF (base 16) Private
+
+70-B3-D5 (hex) WoKa-Elektronik GmbH
+8A9000-8A9FFF (base 16) WoKa-Elektronik GmbH
+ Fulder Tor 30
+ Alsfeld Hessen 36304
+ DE
+
+70-B3-D5 (hex) FIRST RF Corporation
+7BC000-7BCFFF (base 16) FIRST RF Corporation
+ 6150 Lookout Rd
+ Boulder CO 80301
+ US
+
+70-B3-D5 (hex) PROMOMED RUS LLC
+D3A000-D3AFFF (base 16) PROMOMED RUS LLC
+ UL. POCHTOVAYA M., D. 2/2,C.1,P.iK2 I, K.2
+ Moscow 129090
+ RU
+
+70-B3-D5 (hex) Multiple Access Communications Ltd
+558000-558FFF (base 16) Multiple Access Communications Ltd
+ Delta House, Southampton Science Park
+ Southampton Hampshire SO16 7NS
+ GB
+
+70-B3-D5 (hex) MIRAE INFORMATION TECHNOLOGY CO., LTD.
+056000-056FFF (base 16) MIRAE INFORMATION TECHNOLOGY CO., LTD.
+ GYEONGGI-DO
+ SEONGNAM-SI JUNGWON-GU 13376
+ KR
+
70-B3-D5 (hex) EMAC, Inc.
8AB000-8ABFFF (base 16) EMAC, Inc.
2390 EMAC Way
@@ -14678,12 +14927,6 @@ C21000-C21FFF (base 16) Aplex Technology Inc.
Shenzhen Guangdong 518055
CN
-70-B3-D5 (hex) MECT S.R.L.
-628000-628FFF (base 16) MECT S.R.L.
- VIA E. FERMI 57/59
- ALPIGNANO TORINO 10093
- IT
-
70-B3-D5 (hex) Movidius SRL
32F000-32FFFF (base 16) Movidius SRL
Str Gh Lazar, Nb24
@@ -17897,6 +18140,12 @@ EA1000-EA1FFF (base 16) Qntra Technology
Sofia Sofia 1505
BG
+70-B3-D5 (hex) COMPAL ELECTRONICS, INC.
+4F2000-4F2FFF (base 16) COMPAL ELECTRONICS, INC.
+ No.500, Ruiguang Rd., Neihu District,
+ Taipei 11492
+ TW
+
70-B3-D5 (hex) GETRALINE
FD4000-FD4FFF (base 16) GETRALINE
15 RUE D'ANGIVILLER
@@ -17909,12 +18158,6 @@ FD4000-FD4FFF (base 16) GETRALINE
New Taipei City, Taiwan 22101
TW
-70-B3-D5 (hex) COMPAL ELECTRONICS, INC.
-4F2000-4F2FFF (base 16) COMPAL ELECTRONICS, INC.
- No.500, Ruiguang Rd., Neihu District,
- Taipei 11492
- TW
-
70-B3-D5 (hex) Cloud Intelligence Pty Ltd
574000-574FFF (base 16) Cloud Intelligence Pty Ltd
43/10 Gladstone Rd
@@ -17927,14 +18170,146 @@ FD4000-FD4FFF (base 16) GETRALINE
SILEA TREVISO 31057
IT
+70-B3-D5 (hex) vision systems safety tech
+98A000-98AFFF (base 16) vision systems safety tech
+ Route d’Irigny – ZI NORD - BP 32
+ Brignais Rhone alpes auverne 69530
+ FR
+
70-B3-D5 (hex) Acrodea, Inc.
E79000-E79FFF (base 16) Acrodea, Inc.
3F, Daisan Yamada Bldg., 22 Aizumi-cho
Shinjuku-ku Tokyo 1600005
JP
-70-B3-D5 (hex) vision systems safety tech
-98A000-98AFFF (base 16) vision systems safety tech
- Route d’Irigny – ZI NORD - BP 32
- Brignais Rhone alpes auverne 69530
- FR
+70-B3-D5 (hex) ALBIRAL DISPLAY SOLUTIONS SL
+497000-497FFF (base 16) ALBIRAL DISPLAY SOLUTIONS SL
+ Fàtima 25
+ Sant Hipòlit de Voltregà Barcelona 08512
+ ES
+
+70-B3-D5 (hex) MBio Diagnostics, Inc.
+57F000-57FFFF (base 16) MBio Diagnostics, Inc.
+ 5603 Arapahoe Avenue, Suite 1
+ BOULDER CO 80303
+ US
+
+70-B3-D5 (hex) Lupa Tecnologia e Sistemas Ltda
+0ED000-0EDFFF (base 16) Lupa Tecnologia e Sistemas Ltda
+ Rua Viscondessa de Cavalcanti, 50 - Poço Rico
+ Juiz de Fora Minas Gerais 36020-070
+ BR
+
+70-B3-D5 (hex) Talleres de Escoriaza SA
+C08000-C08FFF (base 16) Talleres de Escoriaza SA
+ Barrio Ventas, 35
+ Irun Gipuzkoa 20305
+ ES
+
+70-B3-D5 (hex) Soehnle Industrial Solutions GmbH
+F89000-F89FFF (base 16) Soehnle Industrial Solutions GmbH
+ Gaildorfer Strasse 6
+ Backnang 71522
+ DE
+
+70-B3-D5 (hex) MECT SRL
+628000-628FFF (base 16) MECT SRL
+ VIA E. FERMI 57/59
+ ALPIGNANO TORINO 10093
+ IT
+
+70-B3-D5 (hex) Loanguard T/A SE Controls
+2FC000-2FCFFF (base 16) Loanguard T/A SE Controls
+ Wellington Crescent
+ Lichfield Staffordshire WS13 8RZ
+ GB
+
+70-B3-D5 (hex) Tapdn
+FDC000-FDCFFF (base 16) Tapdn
+ 840 Apollo St Suite 100
+ El Segundo CA 90245
+ US
+
+70-B3-D5 (hex) Decentlab GmbH
+7BA000-7BAFFF (base 16) Decentlab GmbH
+ Ueberlandstrasse 129
+ Duebendorf 8600
+ CH
+
+70-B3-D5 (hex) Itronics Ltd
+9B7000-9B7FFF (base 16) Itronics Ltd
+ 8a Triton Dr, Rosedale
+ Auckland 0632
+ NZ
+
+70-B3-D5 (hex) Acutronic Link Robotics AG
+21A000-21AFFF (base 16) Acutronic Link Robotics AG
+ Calle Venta de la Estrella, 6 Pab. 130
+ VITORIA-GASTEIZ ALAVA 01003
+ ES
+
+70-B3-D5 (hex) Editech Co., Ltd
+79D000-79DFFF (base 16) Editech Co., Ltd
+ 284, Gongdan-ro
+ Gunpo-si Gyeonggi-do 15809
+ KR
+
+70-B3-D5 (hex) Bavaria Digital Technik GmbH
+F1C000-F1CFFF (base 16) Bavaria Digital Technik GmbH
+ Rehbichler Weg 26
+ Pfronten Bayern 87459
+ DE
+
+70-B3-D5 (hex) Vectology,Inc
+F50000-F50FFF (base 16) Vectology,Inc
+ UU bld 4F 2-5-2 Shinyokohama
+ Kouhoku-ku Yokohama Kanagawa 2220033
+ JP
+
+70-B3-D5 (hex) Xitron
+388000-388FFF (base 16) Xitron
+ 4750 Venture Drive
+ Ann Arbor MI 48108
+ US
+
+70-B3-D5 (hex) TrexEdge, Inc.
+0F2000-0F2FFF (base 16) TrexEdge, Inc.
+ 1-2-2 Osaki
+ Shinagawa Tokyo 1410032
+ JP
+
+70-B3-D5 (hex) iGrid T&D
+B50000-B50FFF (base 16) iGrid T&D
+ C. Marie Curie, 8-14
+ Barcelona Catalonia 08042
+ ES
+
+70-B3-D5 (hex) Ametek Solidstate Controls
+6DE000-6DEFFF (base 16) Ametek Solidstate Controls
+ 875 DEARBORN DR
+ COLUMBUS OH 43085-1586
+ US
+
+70-B3-D5 (hex) KJ3 Elektronik AB
+FB2000-FB2FFF (base 16) KJ3 Elektronik AB
+ Fornåsa 110
+ Fornåsa 59033
+ SE
+
+70-B3-D5 (hex) Zamir Recognition Systems Ltd.
+46E000-46EFFF (base 16) Zamir Recognition Systems Ltd.
+ Manachat Tech Park 1/22
+ Jerusalem 96951
+ IL
+
+70-B3-D5 (hex) YUYAMA MFG Co.,Ltd
+BD4000-BD4FFF (base 16) YUYAMA MFG Co.,Ltd
+ 3-3-1
+ TOYONAKASHI OSAKA 561-0841
+ JP
+
+70-B3-D5 (hex) GREATWALL Infotech Co., Ltd.
+946000-946FFF (base 16) GREATWALL Infotech Co., Ltd.
+ 7F, No. 143, Sec. 3, Cheng Gong Road,, Neihu District
+ Taipei Taiwan 114
+ TW
diff --git a/hwdb/pci.ids b/hwdb/pci.ids
index 757750ea33..c986f78e02 100644
--- a/hwdb/pci.ids
+++ b/hwdb/pci.ids
@@ -1,8 +1,8 @@
#
# List of PCI ID's
#
-# Version: 2018.12.20
-# Date: 2018-12-20 03:15:02
+# Version: 2019.02.13
+# Date: 2019-02-13 03:15:01
#
# Maintained by Albert Pool, Martin Mares, and other volunteers from
# the PCI ID Project at https://pci-ids.ucw.cz/.
@@ -57,8 +57,7 @@
0680 Ultra ATA/133 IDE RAID CONTROLLER CARD
# Wrong ID used in subsystem ID of the TELES.S0/PCI 2.x ISDN adapter
00a7 Teles AG (Wrong ID)
-# nee nCipher
-0100 Thales e-Security
+0100 nCipher Security
0123 General Dynamics
0128 Dell (wrong ID)
# 018a is not LevelOne but there is a board misprogrammed
@@ -274,6 +273,7 @@
8086 9460 RAID Controller RSP3TD160F
8086 9480 RAID Controller RSP3MD088F
0015 MegaRAID Tri-Mode SAS3416
+ 1d49 0503 ThinkSystem RAID 530-16i PCIe 12Gb Adapter
0016 MegaRAID Tri-Mode SAS3508
1028 1fc9 PERC H840 Adapter
1028 1fcb PERC H740P Adapter
@@ -281,7 +281,6 @@
1028 1fcf PERC H740P Mini
1d49 0601 ThinkSystem RAID 930-8i 2GB Flash PCIe 12Gb Adapter
1d49 0603 ThinkSystem RAID 930-24i 4GB Flash PCIe 12Gb Adapter
- 1d49 0604 ThinkSystem RAID 930-8e 4GB Flash PCIe 12Gb Adapter
8086 352e Integrated RAID Module RMSP3CD080F
8086 352f Integrated RAID Module RMSP3HD080E
8086 9461 RAID Controller RSP3DD080F
@@ -445,6 +444,7 @@
1028 1f4d PERC H330 Embedded (for monolithic)
1054 306a SAS 3004 iMR ROMB
1d49 04db ServeRAID M1210 SAS/SATA Controller
+ 1d49 0504 ThinkSystem RAID 520-8i PCIe 12Gb Adapter
0060 MegaRAID SAS 1078
1000 1006 MegaRAID SAS 8888ELP
1000 100a MegaRAID SAS 8708ELP
@@ -486,13 +486,15 @@
1000 3010 SAS9211-4i
0071 MR SAS HBA 2004
0072 SAS2008 PCI-Express Fusion-MPT SAS-2 [Falcon]
+ 1000 3040 9210-8i
+ 1000 3080 9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA]
1000 30b0 9200-8e [LSI SAS 6Gb/s SAS/SATA PCIe x8 External HBA]
1028 1f1c 6Gbps SAS HBA Adapter
1028 1f1d PERC H200 Adapter
1028 1f1e PERC H200 Integrated
1028 1f1f PERC H200 Modular
1028 1f20 PERC H200 Embedded
- 1028 1f22 Internal Tape Adapter
+ 1028 1f22 PERC H200 Internal Tape Adapter
8086 350f RMS2LL040 RAID Controller
8086 3700 SSD 910 Series
0073 MegaRAID SAS 2008 [Falcon]
@@ -507,6 +509,7 @@
1028 1f52 PERC H310 Embedded1
1028 1f53 PERC H310 Embedded2
1028 1f54 PERC H310 Reserved
+ 1028 1f78 PERC H310
1054 3035 LSI MegaRAID SAS 9240-8i
1137 0072 2004 iMR ROMB
1137 0073 2008 ROMB
@@ -591,6 +594,7 @@
15d9 0691 Onboard SAS2308 PCI-Express Fusion-MPT SAS-2
0087 SAS2308 PCI-Express Fusion-MPT SAS-2
1000 3020 9207-8i SAS2.1 HBA
+ 1000 3030 SAS9207-4i4e
1000 3040 9207-8e SAS2.1 HBA
1000 3050 SAS9217-8i
1014 0472 N2125 External Host Bus Adapter
@@ -621,6 +625,8 @@
1028 1f53 HBA330 Mini
1028 1fd2 HBA330 MX
1028 1fd3 HBA330 MMZ
+# Supermicro AOC-S3008L-L8e uses 0808 for their SAS3008 SAS controller
+ 15d9 0808 AOC-S3008L-L8e
1bd4 0011 Inspur 12Gb 8i-3008 IT SAS HBA
00ab SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC)
8086 3530 Integrated RAID Module RMSP3JD160J
@@ -798,13 +804,24 @@
131b Kaveri [Radeon R4 Graphics]
131c Kaveri [Radeon R7 Graphics]
131d Kaveri [Radeon R6 Graphics]
+ 13e9 Ariel
+ 154c Kryptos
+ 154e Garfield
+ 1551 Arlene
+ 1552 Pooky
+ 1561 Anubis
15d8 Picasso
15dd Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series]
103c 83c6 Radeon Vega 8 Mobile
1458 d000 Radeon RX Vega 11
- 15ff Vega 11 [Radeon Vega 28 Mobile]
+ 15de Raven/Raven2/Fenghuang HDMI/DP Audio Controller
+ 15df Raven/Raven2/Fenghuang/Renoir Cryptographic Coprocessor
+ 15ff Fenghuang [Zhongshan Subor Z+]
+ 1607 Arden
+ 1636 Renoir
1714 BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
103c 168b ProBook 4535s
+ 2191 TU116M
3150 RV380/M24 [Mobility Radeon X600]
103c 0934 nx8220
3151 RV380 GL [FireMV 2400]
@@ -884,19 +901,28 @@
4337 RS200M [Radeon IGP 330M/340M/345M/350M]
1014 053a ThinkPad R40e
103c 0850 Radeon IGP 345M
- 4341 IXP150 AC'97 Audio Controller
- 4342 IXP200 3COM 3C920B Ethernet Controller
- 4345 EHCI USB Controller
- 4347 OHCI USB Controller #1
- 4348 OHCI USB Controller #2
- 4349 Dual Channel Bus Master PCI IDE Controller
- 434d IXP AC'97 Modem
- 4353 SMBus
+ 4341 SB200 AC97 Audio Controller
+ 4342 SB200 PCI to PCI Bridge
+ 4345 SB200 EHCI USB Controller
+ 4346 Crayola 6 [XENOS Parent Die (XBOX 360)]
+ 4347 SB200 OHCI USB Controller #1
+ 4348 SB200 OHCI USB Controller #2
+ 4349 SB200 IDE Controller
+ 434c SB200 PCI to LPC Bridge
+ 434d SB200 AC97 Modem Controller
+ 4353 SB200 SMBus Controller
4354 215CT [Mach64 CT PCI]
4358 Mach64 CX [Graphics Xpression]
- 4361 IXP SB300 AC'97 Audio Controller
- 4363 SMBus
- 436e 436E Serial ATA Controller
+ 4361 SB300 AC'97 Audio Controller
+ 4362 SB300 PCI to PCI Bridge
+ 4363 SB300 SMBus Controller
+ 4365 SB300 USB Controller (EHCI)
+ 4367 SB300 USB Controller (EHCI)
+ 4368 SB300 USB Controller (EHCI)
+ 4369 SB300 IDE Controller
+ 436c SB300 PCI to LPC Bridge
+ 436d SB300 AC97 Modem Controller
+ 436e SB300 Serial ATA Controller
4370 IXP SB400 AC'97 Audio Controller
1025 0079 Aspire 5024WLMMi
1025 0091 Aspire 5032WXMi
@@ -1042,6 +1068,7 @@
103c 1611 Pavilion DM1Z-3000
1043 82ef M3A78-EH Motherboard
1043 8443 M5A88-V EVO
+ 1043 84dd M5A99X EVO (R1.0) SB950
105b 0e13 N15235/A74MX mainboard / AMD SB700
174b 1001 PURE Fusion Mini
4392 SB7x0/SB8x0/SB9x0 SATA Controller [Non-RAID5 mode]
@@ -1077,6 +1104,7 @@
105b 0e13 N15235/A74MX mainboard / AMD SB700
174b 1001 PURE Fusion Mini
439c SB7x0/SB8x0/SB9x0 IDE Controller
+ 1002 4392 MSI MS-7713 motherboard
1019 2120 A785GM-M
1043 82ef M3A78-EH Motherboard
105b 0e13 N15235/A74MX mainboard / AMD SB700
@@ -1093,6 +1121,8 @@
43a3 SB900 PCI to PCI bridge (PCIE port 3)
4437 RS250 [Mobility Radeon 7000 IGP]
4554 210888ET [Mach64 ET]
+ 4630 XENOS Parent Die (XBOX 360)
+ 4631 XENOS Daughter Die (XBOX 360)
4654 Mach64 VT
4742 Rage 3 [3D Rage PRO AGP 2X]
1002 0040 Rage Pro Turbo AGP 2X
@@ -1173,6 +1203,60 @@
1002 0084 Rage 3D Pro AGP 2x XPERT 98
1002 0087 Rage 3D IIC
1002 475a Rage IIC AGP
+ 4845 Xilleon 220 HBIU for HDTV2
+ 4846 Xilleon 220 IDE for HDTV2
+ 4847 Xilleon 220 USB for HDTV2
+ 4848 Xilleon 220 DAIO-0 for HDTV2
+ 4849 Xilleon 220 DAIO-1 for HDTV2
+ 484a Xilleon 220 LPC for HDTV2
+ 4850 Xilleon 215 HBIU for X215
+ 4851 Xilleon 215 IDE for X215
+ 4852 Xilleon 215 USB for X215
+ 4853 Xilleon 215 DAIO-0 for X215
+ 4854 Xilleon 215 DAIO-1 for X215
+ 4855 Xilleon 225 HBIU for X225
+ 4856 Xilleon 225 IDE for X225
+ 4857 Xilleon 225 USB for X225
+ 4858 Xilleon 225 DAIO-0 for X225
+ 4859 Xilleon 225 DAIO-1 for X225
+ 4860 Xilleon 210 HBIU for X210
+ 4861 Xilleon 210 IDE for X210
+ 4862 Xilleon 210 USB for X210
+ 4863 Xilleon 210 DAIO-0 for X210
+ 4864 Xilleon 210 DAIO-1 for X210
+ 4865 Xilleon 226 HBIU for X226
+ 4866 Xilleon 226 IDE for X226
+ 4867 Xilleon 226 USB for X226
+ 4868 Xilleon 226 DAIO-0 for X226
+ 4869 Xilleon 226 DAIO-1 for X226
+ 486a Xilleon 240S HBIU for X240S
+ 486b Xilleon 240H HBIU for X240H
+ 486c Xilleon 240S USB for X240S
+ 486d Xilleon 240H USB for X240H
+ 486e Xilleon 250 USB 1.1 for X250
+ 486f Xilleon 260 USB 1.1 for X260
+ 4870 Xilleon 250 HBIU for X250
+ 4871 Xilleon 250 IDE for X250
+ 4872 Xilleon 234/235 HBIU for X234/X235
+ 4873 Xilleon 244/245 HBIU for X244/X245
+ 4874 Xilleon 234/235 USB 1.1 for X234/X235
+ 4875 Xilleon 260 HBIU for X260
+ 4876 Xilleon 260 IDE for X260
+ 4877 Xilleon 244/245 USB 1.1 for X244/X245
+ 4878 Xilleon 270 HBIU for X270
+ 487b Xilleon 242 HBIU for X242
+ 487d Xilleon 242 USB 1.1 for X242
+ 4880 Xilleon 254 HBIU for X254
+ 4881 Xilleon 254 USB 1.1 for X254
+ 4882 Xilleon 255 HBIU for X255
+ 4883 Xilleon 255 USB 1.1 for X255
+ 4884 Xilleon 243 HBIU for X243
+ 4885 Xilleon 243 USB 1.1 for X243
+ 4886 Xilleon 233 HBIU for X233
+ 4887 Xilleon 233 USB 1.1 for X233
+ 4888 Xilleon 143 HBIU for X143
+ 4889 Xilleon 143 HBIU for X143L
+ 488a Xilleon 143 HBIU for X143S
4966 RV250 [Radeon 9000 Series]
10f1 0002 RV250 If [Tachyon G9000 PRO]
148c 2039 RV250 If [Radeon 9000 Pro "Evil Commando"]
@@ -1647,8 +1731,6 @@
103c 1952 ProBook 455 G1
6601 Mars [Radeon HD 8730M]
103c 2100 FirePro M4100
- 6602 Mars
- 6603 Mars
6604 Opal XT [Radeon R7 M265/M365X/M465]
1025 0776 Aspire V5 Radeon R7 M265
103c 8006 FirePro M4170
@@ -1681,9 +1763,6 @@
6613 Oland PRO [Radeon R7 240/340]
148c 7340 Radeon R7 340
1682 7240 R7 240 2048 MB
- 6620 Mars
- 6621 Mars PRO
- 6623 Mars
6631 Oland
6640 Saturn XT [FirePro M6100]
106b 014b Tropo XT [Radeon R9 M380 Mac Edition]
@@ -1725,7 +1804,7 @@
1462 2938 Radeon R9 360 OEM
1462 3271 Radeon R9 360 OEM
1682 7360 Radeon R7 360
- 6660 Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / R7 M520]
+ 6660 Sun XT [Radeon HD 8670A/8670M/8690M / R5 M330 / M430 / Radeon 520 Mobile]
1028 05ea Radeon HD 8670M
1028 06bf Radeon R5 M335
103c 1970 Radeon HD 8670M
@@ -1741,7 +1820,8 @@
1025 0846 Radeon HD 8570A
17aa 3805 Radeon HD 8570M
6664 Jet XT [Radeon R5 M240]
- 6665 Jet PRO [Radeon R5 M230]
+ 6665 Jet PRO [Radeon R5 M230 / R7 M260DX / Radeon 520 Mobile]
+ 17aa 1309 Radeon R7 M260DX
17aa 368f Radeon R5 A230
6667 Jet ULT [Radeon R5 M230]
666f Sun LE [Radeon HD 8550M / R5 M230]
@@ -1750,7 +1830,7 @@
66a2 Vega 20
66a3 Vega 20
66a7 Vega 20 [Radeon Pro Vega 20]
- 66af Vega 20
+ 66af Vega 20 [Radeon VII]
6704 Cayman PRO GL [FirePro V7900]
6707 Cayman LE GL [FirePro V5900]
6718 Cayman XT [Radeon HD 6970]
@@ -2634,7 +2714,7 @@
6863 Vega 10 XTX [Radeon Vega Frontier Edition]
6864 Vega
6867 Vega 10 XL [Radeon Pro Vega 56]
- 6868 Vega 10 [Radeon PRO WX 8100]
+ 6868 Vega 10 [Radeon PRO WX 8100/8200]
686c Vega 10 [Radeon Instinct MI25 MxGPU]
687f Vega 10 XL/XT [Radeon RX Vega 56/64]
6880 Lexington [Radeon HD 6550M]
@@ -3152,8 +3232,9 @@
148c 9380 Radeon R9 380
# Make naming scheme consistent
174b e308 Radeon R9 380 Nitro 4G D5
- 694c Polaris 22 [Radeon RX Vega M GH]
+ 694c Polaris 22 XT [Radeon RX Vega M GH]
694e Polaris 22 XL [Radeon RX Vega M GL]
+ 694f Polaris 22 MGL XL [Radeon Pro WX Vega M GL]
6980 Polaris12
6981 Polaris12
6985 Lexa XT [Radeon PRO WX 3100]
@@ -3168,7 +3249,7 @@
69a1 Vega 12
69a2 Vega 12
69a3 Vega 12
- 69af Vega 12
+ 69af Vega 12 [Radeon Pro Vega 20]
6fdf Polaris 20 XL [Radeon RX 580 2048SP]
700f RS100 AGP Bridge
7010 RS200/RS250 AGP Bridge
@@ -3606,6 +3687,8 @@
17aa 5113 Radeon R6 Graphics
17aa 5116 Radeon R6 Graphics
17aa 5118 Radeon R5 Graphics
+ 9890 Amur
+ 98c0 Nolan
98e4 Stoney [Radeon R2/R3/R4/R5 Graphics]
9900 Trinity [Radeon HD 7660G]
103c 1985 Pavilion 17-e163sg Notebook PC
@@ -3634,8 +3717,14 @@
9917 Trinity [Radeon HD 7620G]
9918 Trinity [Radeon HD 7600G]
9919 Trinity [Radeon HD 7500G]
+ 991e Bishop
9920 Liverpool [Playstation 4 APU]
9921 Liverpool HDMI/DP Audio Controller
+ 9922 Starshp
+ 9923 Starsha2 [Kingston/Clayton]
+ 9924 Gladius
+ 9925 Kingston/Clayton/Jupiter/Gladius/Montego HDMI Controller
+ 9926 Jupiter
9990 Trinity 2 [Radeon HD 7520G]
9991 Trinity 2 [Radeon HD 7540D]
9992 Trinity 2 [Radeon HD 7420G]
@@ -3682,17 +3771,37 @@
aa98 Caicos HDMI Audio [Radeon HD 6450 / 7450/8450/8490 OEM / R5 230/235/235X OEM]
174b aa98 Radeon HD 6450 1GB DDR3
aaa0 Tahiti HDMI Audio [Radeon HD 7870 XT / 7950/7970]
- aab0 Cape Verde/Pitcairn HDMI Audio [Radeon HD 7700/7800 Series]
+ aab0 Oland/Hainan/Cape Verde/Pitcairn HDMI Audio [Radeon HD 7000 Series]
aac0 Tobago HDMI Audio [Radeon R7 360 / R9 360 OEM]
aac8 Hawaii HDMI Audio [Radeon R9 290/290X / 390/390X]
-# I have a Tonga card and this is the HDMI Audio part
aad8 Tonga HDMI Audio [Radeon R9 285/380]
174b aad8 Radeon R9 285/380 HDMI Audio
aae0 Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X]
aae8 Fiji HDMI/DP Audio [Radeon R9 Nano / FURY/FURY X]
- aaf0 Ellesmere [Radeon RX 570/580]
- ac00 Theater 600 Pro
+ aaf0 Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590]
+ aaf8 Vega 10 HDMI Audio [Radeon Vega 56/64]
+ ab00 Baffin HDMI/DP Audio [Radeon RX 550 640SP / RX 560/560X]
+ ab08 Polaris 22 HDMI Audio
+ ab10 Lexa HDMI Audio
+ ab18 Vega 12 HDMI Audio
+ ab20 Vega 20 HDMI Audio [Radeon VII]
+ ab38 Navi 10 HDMI Audio
+ ac00 Theater 506 World-Wide Analog Decoder
+ ac01 Theater 506 World-Wide Analog Decoder
ac02 TV Wonder HD 600 PCIe
+ ac03 Theater 506 PCIe
+ ac04 Theater 506 USB
+ ac05 Theater 506 USB
+ ac06 Theater 506 External USB
+ ac07 Theater 506 External USB
+ ac08 Theater 506A World-Wide Analog Decoder + Demodulator
+ ac09 Theater 506A World-Wide Analog Decoder + Demodulator
+ ac0a Theater 506A PCIe
+ ac0b Theater 506A PCIe
+ ac0c Theater 506A USB
+ ac0d Theater 506A USB
+ ac0e Theater 506A External USB
+ ac0f Theater 506A External USB
ac12 Theater HD T507 (DVB-T) TV tuner/capture device
cab0 RS100 Host Bridge
cab2 RS200 Host Bridge
@@ -4204,6 +4313,35 @@
1302 Family 11h Processor DRAM Controller
1303 Family 11h Processor Miscellaneous Control
1304 Family 11h Processor Link Control
+ 1305 Griffin Function 5
+ 1306 Griffin Function 6
+ 1307 Griffin Function 7
+ 1308 Kaveri Audio Controller
+ 1314 Wrestler/Bheem/Ontario/Krishna Audio Controller
+ 13e0 Ariel Root Complex
+ 13e1 Ariel IOMMU
+ 13e2 Ariel PCIe Dummy Host Bridge
+ 13e3 Ariel PCIe GPP Bridge
+ 13e4 Ariel PCIe Dummy Host Bridge
+ 13e5 Ariel Internal PCIe GPP Bridge 0 to Bus A
+ 13e6 Ariel Internal PCIe GPP Bridge 0 to Bus B
+ 13e7 Ariel SMBus Controller
+ 13e8 Ariel LPC Bridge
+ 13e9 Ariel Internal GPU
+ 13ea Ariel HD Audio Controller
+ 13eb Ariel HD Audio Coprocessor
+ 13ec Ariel Cryptographic Coprocessor
+ 13ed Ariel USB 3.1 Type C: Gen2 x 1port + DP Alt Mode
+ 13ee Ariel USB 3.1 Type A: Gen2 x 2 ports
+ 13ef Ariel ZCN/MP4
+ 13f0 Ariel Device 24: Function 0
+ 13f1 Ariel Device 24: Function 1
+ 13f2 Ariel Device 24: Function 2
+ 13f3 Ariel Device 24: Function 3
+ 13f4 Ariel Device 24: Function 4
+ 13f5 Ariel Device 24: Function 5
+ 13f6 Ariel Device 24: Function 6
+ 13f7 Ariel Device 24: Function 7
1400 Family 15h (Models 10h-1fh) Processor Function 0
1401 Family 15h (Models 10h-1fh) Processor Function 1
1402 Family 15h (Models 10h-1fh) Processor Function 2
@@ -4231,25 +4369,50 @@
1422 Family 15h (Models 30h-3fh) Processor Root Complex
1423 Family 15h (Models 30h-3fh) I/O Memory Management Unit
1424 Family 15h (Models 30h-3fh) Processor Root Port
+ 1425 Kaveri P2P Bridge for GFX PCIe Port [1:0]
1426 Family 15h (Models 30h-3fh) Processor Root Port
- 142e Liverpool Processor Function 0
- 142f Liverpool Processor Function 1
- 1430 Liverpool Processor Function 2
- 1431 Liverpool Processor Function 3
- 1432 Liverpool Processor Function 4
+ 142e Liverpool Processor HT configuration
+ 142f Liverpool Processor Address Maps
+ 1430 Liverpool Processor DRAM configuration
+ 1431 Liverpool Processor Misc configuration
+ 1432 Liverpool Processor PM configuration
+ 1433 Liverpool Processor NB Performance Monitor
+ 1434 Liverpool Processor SPLL Configuration
1436 Liverpool Processor Root Complex
1437 Liverpool I/O Memory Management Unit
1438 Liverpool Processor Root Port
1439 Family 16h Processor Functions 5:1
+ 143a Kingston/Clayton/Gladius/Montego Root Complex
+ 143b Kingston/Clayton/Gladius/Montego P2P Bridge for UMI Link
+ 1440 Matisse Device 24: Function 0
+ 1441 Matisse Device 24: Function 1
+ 1442 Matisse Device 24: Function 2
+ 1443 Matisse Device 24: Function 3
+ 1444 Matisse Device 24: Function 4
+ 1445 Matisse Device 24: Function 5
+ 1446 Matisse Device 24: Function 6
+ 1447 Matisse Device 24: Function 7
+ 1448 Renoir Device 24: Function 0
+ 1449 Renoir Device 24: Function 1
+ 144a Renoir Device 24: Function 2
+ 144b Renoir Device 24: Function 3
+ 144c Renoir Device 24: Function 4
+ 144d Renoir Device 24: Function 5
+ 144e Renoir Device 24: Function 6
+ 144f Renoir Device 24: Function 7
1450 Family 17h (Models 00h-0fh) Root Complex
1451 Family 17h (Models 00h-0fh) I/O Memory Management Unit
- 1452 Family 17h (Models 00h-0fh) PCIe Dummy Host Bridge
+ 1452 Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
1453 Family 17h (Models 00h-0fh) PCIe GPP Bridge
1454 Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B
+ 1455 Zeppelin/Renoir PCIe Dummy Function
1456 Family 17h (Models 00h-0fh) Platform Security Processor
1457 Family 17h (Models 00h-0fh) HD Audio Controller
+ 145a Zeppelin/Raven/Raven2 PCIe Dummy Function
145b Zeppelin Non-Transparent Bridge
145c Family 17h (Models 00h-0fh) USB 3.0 Host Controller
+ 145d Zeppelin Switch Upstream (PCIE SW.US)
+ 145e Zeppelin Switch Downstream (PCIE SW.DS)
145f USB 3.0 Host controller
1460 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 0
1461 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 1
@@ -4259,6 +4422,36 @@
1465 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 5
1466 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 6
1467 Family 17h (Models 00h-0fh) Data Fabric: Device 18h; Function 7
+ 1468 Zeppelin Cryptographic Coprocessor NTBCCP
+ 1480 Starship/Matisse Root Complex
+ 1481 Starship/Matisse IOMMU
+ 1482 Starship/Matisse PCIe Dummy Host Bridge
+ 1483 Starship/Matisse GPP Bridge
+ 1484 Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B]
+ 1485 Starship/Matisse Reserved SPP
+ 1486 Starship/Matisse Cryptographic Coprocessor PSPCPP
+ 1487 Starship/Matisse HD Audio Controller
+ 1488 Starship Reserved SSP
+ 1489 Starship Reserved SSP
+ 148a Starship/Matisse PCIe Dummy Function
+ 148b Starship/Matisse Non-Transparent Bridge
+ 148c Starship USB 3.0 Host Controller
+ 148d Starship/Matisse Switch Upstream (PCIE SW.US)
+ 148e Starship/Matisse Switch Downstream (PCIE SW.DS)
+ 148f Starship Reserved SSP
+ 1490 Starship Device 24; Function 0
+ 1491 Starship Device 24; Function 1
+ 1492 Starship Device 24; Function 2
+ 1493 Starship Device 24; Function 3
+ 1494 Starship Device 24; Function 4
+ 1495 Starship Device 24; Function 5
+ 1496 Starship Device 24; Function 6
+ 1497 Starship Device 24; Function 7
+ 1498 Starship/Matisse PTDMA
+ 1499 Starship/Matisse NVMe
+ 149a Starship PCIe GPP Bridge [1:0]
+ 149b Starship Reserved SSP
+ 149c Matisse USB 3.0 Host Controller
1510 Family 14h Processor Root Complex
174b 1001 PURE Fusion Mini
1512 Family 14h Processor Root Port
@@ -4273,7 +4466,33 @@
1534 Family 16h Processor Function 4
1535 Family 16h Processor Function 5
1536 Family 16h Processor Root Complex
+ 1537 Kabini/Mullins PSP-Platform Security Processor
1538 Family 16h Processor Function 0
+ 1539 Kabini P2P Bridge for PCIe Ports[4:0]
+ 1540 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky HT Configuration
+ 1541 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Address Maps
+ 1542 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky DRAM Configuration
+ 1543 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Miscellaneous Configuration
+ 1544 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky PM Configuration
+ 1545 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky NB Performance Monitor
+ 1546 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Root Complex
+ 1547 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky IOMMU
+ 1548 Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky UMI PCIe Dummy Host Bridge
+ 1549 Kryptos/Cato/Garfield/Garfield+ P2P Bridge for PCIe Port [3:0]
+ 154a Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Audio Processor
+ 154b Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky Security Processor
+ 154d Kryptos/Cato/Garfield/Garfield+/Arlene/Pooky/Anubis HDMI Controller
+ 154f Anubis Audio Processor
+ 1550 Garfield+/Arlene/Pooky/Anubis SPLL Configuration
+ 1553 Arlene/Pooky P2P Bridge for PCIE (3:0)
+ 155b Anubis Root Complex
+ 155c Anubis IOMMU
+ 155d Anubis UMI PCIe Dummy Bridge
+ 155e Anubis P2P Bridge for PCIe Ports [4:0]
+ 1560 Anubis Security Processor
+ 1566 Family 16h (Models 30h-3fh) Processor Root Complex
+ 1567 Mullins IOMMU
+ 156b Family 16h (Models 30h-3fh) Host Bridge
1570 Family 15h (Models 60h-6fh) Processor Function 0
1571 Family 15h (Models 60h-6fh) Processor Function 1
1572 Family 15h (Models 60h-6fh) Processor Function 2
@@ -4282,21 +4501,126 @@
1575 Family 15h (Models 60h-6fh) Processor Function 5
1576 Family 15h (Models 60h-6fh) Processor Root Complex
1577 Family 15h (Models 60h-6fh) I/O Memory Management Unit
+ 1578 Carrizo Platform Security Processor
+ 1579 Carrizo Audio Processor
157a Family 15h (Models 60h-6fh) Audio Controller
157b Family 15h (Models 60h-6fh) Host Bridge
157c Family 15h (Models 60h-6fh) Processor Root Port
+ 157d Carrizo Audio Dummy Host Bridge
+ 157e Carrizo Audio Controller
+ 1580 Family 16h (Models 30h-3fh) Processor Function 0
+ 1581 Family 16h (Models 30h-3fh) Processor Function 1
+ 1582 Family 16h (Models 30h-3fh) Processor Function 2
+ 1583 Family 16h (Models 30h-3fh) Processor Function 3
+ 1584 Family 16h (Models 30h-3fh) Processor Function 4
+ 1585 Family 16h (Models 30h-3fh) Processor Function 5
+ 1590 Amur/Nolan HT Configuration
+ 1591 Amur/Nolan Address Maps
+ 1592 Amur/Nolan DRAM Configuration
+ 1593 Amur/Nolan Miscellaneous Configuration
+ 1594 Amur/Nolan PM Configuration
+ 1595 Amur/Nolan NB Performance Monitor
+ 1596 Amur/Nolan Root Complex
+ 1597 Amur/Nolan IOMMU
+ 1598 Amur/Nolan Platform Security Processor
+ 1599 Amur/Nolan PCIe Dummy Host Bridge
+ 159d Amur Function 6: Gasket
+ 15b0 Stoney HT Configuration
+ 15b1 Stoney Address Maps
+ 15b2 Stoney DRAM Configuration
+ 15b3 Stoney Miscellaneous Configuration
+ 15b4 Stoney PM Configuration
+ 15b5 Stoney NB Performance Monitor
+ 15bc Stoney PCIe [GFX,GPP] Bridge [4:0]
+ 15be Stoney Audio Processor
+ 15d0 Raven/Raven2 Root Complex
+ 15d1 Raven/Raven2 IOMMU
+ 15d2 Raven/Raven2 PCIe Dummy Host Bridge
+ 15d3 Raven/Raven2 PCIe GPP Bridge [6:0]
+ 15d4 FireFlight USB 3.1
+ 15d5 FireFlight USB 3.1
+ 15da Raven/Raven2 PCIe Dummy Host Bridge
+ 15db Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus A
+ 15dc Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus B
+ 15de Raven/Raven2/FireFlight HD Audio Controller
+ 15df Family 17h (Models 10h-1fh) Platform Security Processor
+ 15e0 Raven USB 3.1
+ 15e1 Raven USB 3.1
+ 15e2 Raven/Raven2/FireFlight/Renoir Audio Processor
+ 15e3 Family 17h (Models 10h-1fh) HD Audio Controller
+ 15e4 Raven/Raven2/Renoir Sensor Fusion Hub
+ 15e5 Raven2 USB 3.1
+ 15e6 Raven/Raven2/Renoir Non-Sensor Fusion Hub KMDF driver
+ 15e8 Raven/Raven2 Device 24: Function 0
+ 15e9 Raven/Raven2 Device 24: Function 1
+ 15ea Raven/Raven2 Device 24: Function 2
+ 15eb Raven/Raven2 Device 24: Function 3
+ 15ec Raven/Raven2 Device 24: Function 4
+ 15ed Raven/Raven2 Device 24: Function 5
+ 15ee Raven/Raven2 Device 24: Function 6
+ 15ef Raven/Raven2 Device 24: Function 7
+ 15f0 FireFlight Device 24: Function 0
+ 15f1 FireFlight Device 24: Function 1
+ 15f2 FireFlight Device 24: Function 2
+ 15f3 FireFlight Device 24: Function 3
+ 15f4 FireFlight Device 24: Function 4
+ 15f5 FireFlight Device 24: Function 5
+ 15f6 FireFlight Device 24: Function 6
+ 15f7 FireFlight Device 24: Function 7
+ 15f8 FireFlight Root Complex
+ 15f9 FireFlight IOMMU
+ 15fa FireFlight PCIe Dummy Host Bridge
+ 15fb FireFlight PCIe GPP Bride 3:0
+ 15fc FireFlight PCIe Dummy Host Bridge
+ 15fd FireFlight Internal PCIe GPP Bridge 0 to Bus A
+ 15fe FireFlight Internal PCIe GPP Bridge 0 to Bus B
+ 15ff FireFlight Bus A; Device 0: Function 0: Internal GPU
1600 Family 15h Processor Function 0
1601 Family 15h Processor Function 1
1602 Family 15h Processor Function 2
1603 Family 15h Processor Function 3
1604 Family 15h Processor Function 4
1605 Family 15h Processor Function 5
+ 1606 Arden Security Processor
+ 1608 Arden Device 18h: Function 0
+ 1609 Arden Device 18h: Function 1
+ 160a Arden Device 18h: Function 2
+ 160b Arden Device 18h: Function 3
+ 160c Arden Device 18h: Function 4
+ 160d Arden Device 18h: Function 5
+ 160e Arden Device 18h: Function 6
+ 160f Arden Device 18h: Function 7
+ 1620 Anubis HT Configuration
+ 1621 Anubis Address Maps
+ 1622 Anubis DRAM Configuration
+ 1623 Anubis Miscellaneous Configuration
+ 1624 Anubis PM Configuration
+ 1625 Anubis NB Performance Monitor
+ 1626 Arden Root Complex
+ 1627 Arden IOMMU
+ 1628 Arden PCIe Dummy Host Bridge
+ 1629 Arden PCIe GPP Bridge
+ 162a Arden Internal PCIe GPP Bridge 0 to bus X
+ 162b Arden PCIe Non-Transparent Bridge
+ 1630 Renoir Root Complex
+ 1631 Renoir IOMMU
+ 1632 Renoir PCIe Dummy Host Bridge
+ 1633 Renoir PCIe GPP Bridge
+ 1634 Renoir PCIe GPP Bridge
+ 1635 Renoir Internal PCIe GPP Bridge to Bus
+ 1637 Renoir HD Audio Controller
+ 1639 Renoir USB 3.1
+ 1641 Renoir 10GbE Controller Port 0 (XGBE0/1)
+ 1642 Renoir WLAN
+ 1643 Renoir BT
+ 1644 Renoir I2S
1700 Family 12h/14h Processor Function 0
1701 Family 12h/14h Processor Function 1
1702 Family 12h/14h Processor Function 2
1703 Family 12h/14h Processor Function 3
1704 Family 12h/14h Processor Function 4
1705 Family 12h Processor Root Complex
+ 1706 Llano P2P Bridge to external GPU
1707 Family 12h Processor Root Port
1708 Family 12h Processor Root Port
1709 Family 12h Processor Root Port
@@ -4366,6 +4690,10 @@
1849 43d0 Fatal1ty X370 Professional Gaming
43ba X399 Series Chipset USB 3.1 xHCI Controller
43bb 300 Series Chipset USB 3.1 xHCI Controller
+ 43c6 400 Series Chipset PCIe Bridge
+ 43c7 400 Series Chipset PCIe Port
+ 43c8 400 Series Chipset SATA Controller
+ 43d5 400 Series Chipset USB 3.1 XHCI Controller
7006 AMD-751 [Irongate] System Controller
7007 AMD-751 [Irongate] AGP Bridge
700a AMD-IGR4 AGP Host to PCI Bridge
@@ -4438,6 +4766,7 @@
103c 1985 Pavilion 17-e163sg Notebook PC
7809 FCH USB OHCI Controller
103c 194e ProBook 455 G1 Notebook
+ 780a Kabini/Mullins SATA Raid/AHCI Mode (DotHill driver)
780b FCH SMBus Controller
103c 194e ProBook 455 G1 Notebook
103c 1985 Pavilion 17-e163sg Notebook PC
@@ -5330,6 +5659,7 @@
122e PCI-X Local Bus Adapter
127b sx1000 System Bus Adapter
127c sx1000 I/O Controller
+ 128d Diva [GSP] Management Board
1290 Auxiliary Diva Serial Port
103c 1291 Diva SP2
1291 Auxiliary Diva Serial Port
@@ -8990,7 +9320,6 @@
018b NV18GL [Quadro4 380 XGL]
018c NV18GL [Quadro NVS 50 PCI]
018d NV18M [GeForce4 448 Go]
- 018f NV18
0190 G80 [GeForce 8800 GTS / 8800 GTX]
0191 G80 [GeForce 8800 GTX]
0192 G80 [GeForce 8800 GTS]
@@ -9763,40 +10092,39 @@
0638 G94GL [Quadro FX 1800]
063a G94GLM [Quadro FX 2700M]
063f G94 [GeForce 9600 GE]
- 0640 G96 [GeForce 9500 GT]
- 0641 G96 [GeForce 9400 GT]
+ 0640 G96C [GeForce 9500 GT]
+ 0641 G96C [GeForce 9400 GT]
1682 4009 PV-T94G-ZAFG
0642 G96 [D9M-10]
0643 G96 [GeForce 9500 GT]
0644 G96 [GeForce 9500 GS]
174b 9600 Geforce 9500GS 512M DDR2 V/D/HDMI
- 0645 G96 [GeForce 9500 GS]
- 0646 G96 [GeForce GT 120]
- 0647 G96M [GeForce 9600M GT]
- 0648 G96M [GeForce 9600M GS]
- 0649 G96M [GeForce 9600M GT]
+ 0645 G96C [GeForce 9500 GS]
+ 0646 G96C [GeForce GT 120]
+ 0647 G96CM [GeForce 9600M GT]
+ 0648 G96CM [GeForce 9600M GS]
+ 0649 G96CM [GeForce 9600M GT]
1043 202d GeForce GT 220M
064a G96M [GeForce 9700M GT]
064b G96M [GeForce 9500M G]
- 064c G96M [GeForce 9650M GT]
- 064d G96 [GeForce 9600 GT]
- 064e G96 [GeForce 9600 GT / 9800 GT]
- 0651 G96M [GeForce G 110M]
- 0652 G96M [GeForce GT 130M]
+ 064c G96CM [GeForce 9650M GT]
+ 064e G96C [GeForce 9600 GSO / 9800 GT]
+ 0651 G96CM [GeForce G 110M]
+ 0652 G96CM [GeForce GT 130M]
152d 0850 GeForce GT 240M LE
- 0653 G96M [GeForce GT 120M]
- 0654 G96M [GeForce GT 220M]
+ 0653 G96CM [GeForce GT 120M]
+ 0654 G96CM [GeForce GT 220M]
1043 14a2 GeForce GT 320M
1043 14d2 GeForce GT 320M
- 0655 G96 [GeForce GT 120]
- 0656 G96 [GeForce 9650 S]
+ 0655 G96 [GeForce GT 120 Mac Edition]
+ 0656 G96 [GeForce GT 120 Mac Edition]
0658 G96GL [Quadro FX 380]
- 0659 G96GL [Quadro FX 580]
+ 0659 G96CGL [Quadro FX 580]
065a G96GLM [Quadro FX 1700M]
- 065b G96 [GeForce 9400 GT]
+ 065b G96C [GeForce 9400 GT]
065c G96GLM [Quadro FX 770M]
065d G96 [GeForce 9500 GA / 9600 GT / GTS 250]
- 065f G96 [GeForce G210]
+ 065f G96C [GeForce G210]
06c0 GF100 [GeForce GTX 480]
06c4 GF100 [GeForce GTX 465]
06ca GF100M [GeForce GTX 480M]
@@ -11210,7 +11538,7 @@
1adb TU106 USB Type-C Port Policy Controller
1043 8673 TURBO-RTX2070-8G
1b00 GP102 [TITAN X]
- 1b01 GP102
+ 1b01 GP102 [GeForce GTX 1080 Ti 10GB]
1b02 GP102 [TITAN Xp]
1b04 GP102
1b06 GP102 [GeForce GTX 1080 Ti]
@@ -11232,6 +11560,8 @@
1462 11e9 GeForce GTX 1070 Max-Q
1558 9501 GeForce GTX 1070 Max-Q
1ba2 GP104M [GeForce GTX 1070 Mobile]
+ 1ba9 GP104M
+ 1baa GP104M
1bad GP104 [GeForce GTX 1070 Engineering Sample]
1bb0 GP104GL [Quadro P5000]
1bb1 GP104GL [Quadro P4000]
@@ -11266,6 +11596,7 @@
1c22 GP106M [GeForce GTX 1050 Mobile]
1c23 GP106M [GeForce GTX 1060 Mobile Rev. 2]
1414 0020 GTX 1060 Mobile
+ 1c2d GP106M
1c30 GP106GL [Quadro P2000]
1c35 GP106
1c60 GP106BM [GeForce GTX 1060 Mobile 6GB]
@@ -11302,12 +11633,15 @@
1d01 GP108 [GeForce GT 1030]
1d10 GP108M [GeForce MX150]
17aa 225e ThinkPad T480
+ 1d11 GP108M [GeForce MX230]
1d12 GP108M [GeForce MX150]
1d72 1701 Mi Notebook Pro [GeForce MX150]
+ 1d13 GP108M [GeForce MX250]
1d33 GP108GLM [Quadro P500 Mobile]
+ 1d52 GP108BM [GeForce MX250]
1d81 GV100 [TITAN V]
1db1 GV100GL [Tesla V100 SXM2 16GB]
- 1db2 GV100 [Tesla V100-DGXS-16GB]
+ 1db2 GV100GL [Tesla V100-DGXS-16GB]
1db3 GV100GL [Tesla V100 FHHL 16GB]
1db4 GV100GL [Tesla V100 PCIe 16GB]
1db5 GV100GL [Tesla V100 SXM2 32GB]
@@ -11321,24 +11655,41 @@
1462 3715 RTX 2080 Ti GAMING X TRIO
1e2d TU102B
1e2e TU102B
- 1e30 TU102GL [Quadro RTX 6000]
+ 1e30 TU102GL [Quadro RTX 6000/8000]
+ 10de 129e Quadro RTX 8000
+ 10de 12ba Quadro RTX 6000
1e38 TU102GL
1e3c TU102GL
1e3d TU102GL
1e3e TU102GL
1e82 TU104 [GeForce RTX 2080]
1e87 TU104 [GeForce RTX 2080 Rev. A]
- 1eab TU104M [GeForce RTX 2080 Mobile]
+ 1e90 TU104M [GeForce RTX 2080 Mobile]
+ 1eab TU104M
1eae TU104M
1eb0 TU104GL [Quadro RTX 5000]
1eb1 TU104GL [Quadro RTX 4000]
1eb8 TU104GL [Tesla T4]
+ 1ed0 TU104M [GeForce RTX 2080 Mobile]
1f02 TU106 [GeForce RTX 2070]
1043 8673 TURBO RTX 2070
1f04 TU106
1f07 TU106 [GeForce RTX 2070 Rev. A]
- 1f08 TU106
+ 1f08 TU106 [GeForce RTX 2060 Rev. A]
+ 1f10 TU106M [GeForce RTX 2070 Mobile]
+ 1f11 TU106M [GeForce RTX 2060 Mobile]
+ 1f2e TU106M
+ 1f50 TU106M [GeForce RTX 2070 Mobile]
+ 1f51 TU106M [GeForce RTX 2060 Mobile]
1f82 TU107
+ 1f92 TU107M
+ 1fbf TU107GL
+ 2182 TU116 [GeForce GTX 1660 Ti Rev. A]
+ 2183 TU116
+ 2184 TU116 [GeForce GTX 1660]
+ 2191 TU116M
+ 21ae TU116GL
+ 21bf TU116GL
10df Emulex Corporation
0720 OneConnect NIC (Skyhawk)
103c 1934 FlexFabric 20Gb 2-port 650M Adapter
@@ -15502,8 +15853,10 @@
1000 BSP15
12d6 Analogic Corp
12d7 Biotronic SRL
+# acquired by Diodes Inc.
12d8 Pericom Semiconductor
01a7 7C21P100 2-port PCI-X to PCI-X Bridge
+ 2304 PI7C9X2G304 EL/SL PCIe2 3-Port/4-Lane Packet Switch
2608 PI7C9X2G608GP PCIe2 6-Port/8-Lane Packet Switch
400a PI7C9X442SL PCI Express Bridge Port
400e PI7C9X442SL USB OHCI Controller
@@ -16333,6 +16686,7 @@
1043 8428 Virtuoso 100 (Xonar Xense)
1043 8467 CMI8786 (Xonar DG)
1043 8521 CMI8786 (Xonar DGX)
+ 1043 8522 Xonar DSX
1043 85f4 Virtuoso 100 (Xonar Essence STX II)
13f6 8782 PCI 2.0 HD Audio
13f6 ffff CMI8787-HG2PCI
@@ -16364,16 +16718,19 @@
1612 0004 PCI-1612 4-port RS-232/422/485
1603 PCI-1603 2-port isolated RS-232/current loop
1604 PCI-1604 2-port RS-232
+ 1680 PCI-1680 Rev.A1 2-port CAN-bus with isolation protection
16ff PCI-16xx series PCI multiport serial board (function 1: RX/TX steering CPLD)
1601 0000 PCI-1601 2-port unisolated RS-422/485 PCI communications card
1602 0000 PCI-1602 2-port isolated RS-422/485
1612 0000 PCI-1612 4-port RS-232/422/485
1711 PCI-1711 16-channel data acquisition card 12-bit, 100kS/s
+ 1713 PCI-1713 32-channel isolated analog input card
1733 PCI-1733 32-channel isolated digital input card
1734 PCI-1734 32-channel isolated digital output card
1752 PCI-1752 64-channel Isolated Digital Output Card
1754 PCI-1754 64-channel Isolated Digital Input Card
1756 PCI-1756 64-ch Isolated Digital I/O PCI Card
+ a004 PCI-1612 4-port RS-232/422/485
# FPGA bridge to two SJA1000
c302 MIOe-3680 2-Port CAN-Bus MIOe Module with Isolation Protection
13ff Silicon Spice Inc
@@ -18383,10 +18740,12 @@
b842 BCM56842 Trident 10GE Switch Controller
# Trident2
b850 Broadcom BCM56850 Switch ASIC
+ b880 BCM56880 Switch ASIC
# Tomahawk
b960 Broadcom BCM56960 Switch ASIC
d802 BCM58802 Stingray 50Gb Ethernet SoC
14e4 8021 Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w16GB DRAM (Part No BCM958802A8046C)
+ 14e4 8023 PS410T-H04 NetXtreme-S 4x10G 10GBaseT PCIe SmartNIC
14e4 8024 Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w4GB DRAM (Part No BCM958802A8044C)
14e4 8028 Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w8GB DRAM (Part No BCM958802A8048C)
d804 BCM58804 Stingray 100Gb Ethernet SoC
@@ -19048,6 +19407,7 @@
0210 MT28908A0 Family [ConnectX-6 Secure Flash Recovery]
0211 MT416842 Family [BlueField SoC Flash Recovery]
0212 MT2892 Family [ConnectX-6 Dx Flash Recovery]
+ 0213 MT2892 Family [ConnectX-6 Dx Secure Flash Recovery]
024e MT53100 [Spectrum-2, Flash recovery mode]
024f MT53100 [Spectrum-2, Secure Flash recovery mode]
0262 MT27710 [ConnectX-4 Lx Programmable] EN
@@ -19219,6 +19579,7 @@
2001 Skyhawk Series NVME SSD
5001 WD Black NVMe SSD
5002 WD Black 2018/PC SN720 NVMe SSD
+ 5003 WD Black 2018/PC SN520 NVMe SSD
15b8 ADDI-DATA GmbH
1001 APCI1516 SP controller (16 digi outputs)
1003 APCI1032 SP controller (32 digi inputs w/ opto coupler)
@@ -19788,6 +20149,9 @@
16b8 Sonnet Technologies, Inc.
16be Creatix Polymedia GmbH
16c3 Synopsys, Inc.
+ abcd DWC_usb3
+ abce DWC_usb3
+ abcf DWC_usb31
edda EPMockUp
16c6 Micrel-Kendin
8695 Centaur KS8695 ARM processor
@@ -19902,6 +20266,10 @@
7042 AP482 Counter Timer Module with TTL Level Input/Output
7043 AP483 Counter Timer Module with TTL Level and RS422 Input/Output
7044 AP484 Counter Timer Module with RS422 Input/Output
+ 7051 APA7-501 Reconfigurable Artix-7 52,160 Cell FPGA module 48 TTL channels
+ 7052 APA7-502 Reconfigurable Artix-7 52,160 Cell FPGA module 24 RS485 channels
+ 7053 APA7-503 Reconfigurable Artix-7 52,160 Cell FPGA module 24 TTL & 12 RS485 channels
+ 7054 APA7-504 Reconfigurable Artix-7 52,160 Cell FPGA module 24 LVDS channels
16da Advantech Co., Ltd.
0011 INES GPIB-PCI
16df PIKA Technologies Inc.
@@ -19978,10 +20346,10 @@
0216 PCT-7424E (F0) PC card with standard counters
0217 PCT-7424E (F1) PC card with standard counters
0303 PCD-7006C Digital Input & Output PCI Card
+ ff00 CTU CAN FD PCIe Card
1761 Pickering Interfaces Ltd
1771 InnoVISION Multimedia Ltd.
-# nee SBS Technologies
-1775 GE Intelligent Platforms
+1775 General Electric
177d Cavium, Inc.
0001 Nitrox XL N1
0003 Nitrox XL N1 Lite
@@ -20091,13 +20459,28 @@
0004 CAMAC Controller
0005 PROFIBUS
0006 AMCC HOTlink
+ 0007 LVD Cable Bus
+ 0008 100MHz, 64bit Sequence Generator based on VirtexII
+ 0009 double 14bit-ADC
+ 000a SIS1100 with N110 TDC
+ 000b double 14bit-ADC with memory
000d Synchronisation Slave
000e SIS1100-eCMC
000f TDC (GPX)
0010 PCIe Counter Timer
0011 SIS1100-e single link
0012 SIS1100-e quad link
+ 0013 4x2.5GHz SFP to 4 lane PCIe bridge
+ 0014 SIS1100 with GPX piggy back
0015 SIS8100 [Gigabit link, MicroTCA]
+ 0016 SIS1100e with 4 lanes
+ 0017 Quad 14bit, 50MHz ADC with 2.5GHz SFP
+ 0018 SIS8300 4-lane PCI Express, Micro TCA for Physics ADC
+ 0019 SIS SIS8300-Lx MTCA.4 Digitizer
+ 001a 100MHz, 64bit Sequence Generator based on VirtexII
+ 001c Quad 16bit, 150MHz ADC with 2.5GHz SFP
+ 0030 100MHz, 64bit Sequence Generator based on Spartan6
+ 0031 200MHz 64bit Sequence Generator based on Spartan7
# nee Techwell, Inc.
1797 Intersil Techwell
5864 TW5864 multimedia video controller
@@ -20298,6 +20681,9 @@
17f2 Albatron Corp.
17f3 RDC Semiconductor, Inc.
1010 R1010 IDE Controller
+ 1011 R1011 IDE Controller
+ 1012 R1012 IDE Controller
+ 1031 PCI/PCI-X to PCI-E Bridge
2012 M2012/R3308 VGA-compatible graphics adapter
6020 R6020 North Bridge
6021 R6021 Host Bridge
@@ -21016,6 +21402,8 @@
1600 OX16C954 HOST-A
16ff OX16C954 HOST-B
1987 Phison Electronics Corporation
+ 5007 E7 NVMe Controller
+ 5012 E12 NVMe Controller
1989 Montilio Inc.
0001 RapidFile Bridge
8001 RapidFile
@@ -21097,8 +21485,12 @@
19e5 3033 NVMe SSD ES3600C V3 1200GB HHHL AIC
19e5 3034 NVMe SSD ES3600C V3 1600GB HHHL AIC
19e5 3036 NVMe SSD ES3600C V3 3200GB HHHL AIC
- 0200 Hi1822 Family (2*25GE)
- 0201 Hi1822 Family (2*100GE)
+ 0200 Hi1822 Family (2*100GE)
+ 0202 Hi1822 Family (2*32G FC)
+ 0203 Hi1822 Family (2*16G FC)
+ 0205 Hi1822 Family (2*100GE)
+ 0210 Hi1822 Family (4*25GE)
+ 0212 Hi1822 Family (2*8G FC)
1710 iBMA Virtual Network Adapter
1711 Hi1710 [iBMC Intelligent Management system chip w/VGA support]
1822 Hi1822 Family (4*25GE)
@@ -21146,6 +21538,7 @@
1150 AST1150 PCI-to-PCI Bridge
2000 ASPEED Graphics Family
15d9 0832 X10SRL-F
+1a05 deltaww
1a07 Kvaser AB
0006 CAN interface PC104+ HS/HS
0007 CAN interface PCIcanx II HS or HS/HS
@@ -21615,6 +22008,8 @@
0001 Hunter PCI Express
1c8c Mobiveil, Inc.
1cb1 Collion UG & Co.KG
+1cb5 Focusrite Audio Engineering Ltd
+ 0002 Clarett
1cb8 Dawning Information Industry Co., Ltd.
1cc5 Embedded Intelligence, Inc.
0100 CAN-PCIe-02
@@ -21652,6 +22047,7 @@
1d0f Amazon.com, Inc.
cd01 NVMe SSD Controller
ec20 Elastic Network Adapter (ENA)
+ efa0 Elastic Fabric Adapter (EFA)
1d17 Zhaoxin
070f ZX-100 PCI Express Root Port
0710 ZX-100/ZX-200 PCI Express Root Port
@@ -21764,9 +22160,10 @@
1d7c Aerotech, Inc.
1d82 NETINT Technologies Inc.
1d87 Fuzhou Rockchip Electronics Co., Ltd
+ 0100 RK3399 PCI Express Root Port
1808 RK1808 Neural Network Processor Card
1d8f Enyx
-1d94 Chengdu Higon IC Design Co.Ltd
+1d94 Chengdu Haiguang IC Design Co., Ltd.
1450 Root Complex
1451 I/O Memory Management Unit
1452 PCIe Dummy Host Bridge
@@ -21821,6 +22218,21 @@
e00a eMAG PCI Express Root Port 5
e00b eMAG PCI Express Root Port 6
e00c eMAG PCI Express Root Port 7
+1df3 Ethernity Networks
+ 0201 ACE-NIC40 Programmable Network Accelerator
+ 1df3 0001 ENA1040
+ 1df3 0002 ENA1044
+ 1df3 0003 ENA1044S
+ 0202 ACE-NIC50 Programmable Network Accelerator
+ 1df3 0001 ENA2050F
+ 1df3 0002 ENA2050FS
+ 0203 ACE-NIC100 Programmable Network Accelerator
+ 1df3 0001 ENA2080F
+ 1df3 0002 ENA2080FS
+ 1df3 0003 ENA2100F
+ 0204 ACE-NIC-NID Programmable Network Accelerator
+ 1df3 0001 ENA1020Z
+ 1df3 0002 ENA1020ZS
1df7 opencpi.org
0001 ml605
0002 alst4
@@ -21832,6 +22244,8 @@
0215 Acorn CLE-215
021f Acorn CLE-215+
1525 Xilinx BCU-1525
+1e38 Thinci, Inc
+1e3d Burlywood, Inc
# nee Tumsan Oy
1fc0 Ascom (Finland) Oy
0300 E2200 Dual E1/Rawpipe Card
@@ -23330,6 +23744,9 @@
0c7d Atom Processor S1200 Internal
0c7e Atom Processor S1200 Internal
0c7f Atom Processor S1200 Internal
+ 0cf8 Ethernet Controller X710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+ 8086 0000 Ethernet Controller X710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+ 8086 0001 Ethernet Controller X710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
0d00 Crystal Well DRAM Controller
0d01 Crystal Well PCI Express x16 Controller
0d04 Crystal Well DRAM Controller
@@ -23339,6 +23756,9 @@
0d16 Crystal Well Integrated Graphics Controller
0d26 Crystal Well Integrated Graphics Controller
0d36 Crystal Well Integrated Graphics Controller
+ 0d58 Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+ 8086 0000 Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
+ 8086 0001 Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking
0e00 Xeon E7 v2/Xeon E5 v2/Core i7 DMI2
1028 04f7 Xeon E5 v2 on PowerEdge R320 server
15d9 066b X9SRL-F
@@ -24354,6 +24774,7 @@
8086 00a2 Ethernet Server Adapter I350-T2
8086 5001 Ethernet Server Adapter I350-T4
8086 5002 Ethernet Server Adapter I350-T2
+ 8086 5003 Ethernet 1G 4P I350-t OCP
1522 I350 Gigabit Fiber Network Connection
108e 7b17 Quad Port GbE PCIe 2.0 ExpressModule, MMF
108e 7b19 Dual Port GbE PCIe 2.0 Low Profile Adapter, MMF
@@ -24407,6 +24828,7 @@
152e 82599 Virtual Function
152f I350 Virtual Function
1530 X540 Virtual Function
+ 1531 I210 Gigabit Unprogrammed
1533 I210 Gigabit Network Connection
103c 0003 Ethernet I210-T1 GbE NIC
1093 7706 Compact Vision System Ethernet Adapter
@@ -24520,6 +24942,9 @@
8086 000e Ethernet Server Adapter OCP X710-2
8086 000f Ethernet Server Adapter OCP X710-2
8086 0010 Ethernet Converged Network Adapter X710
+ 8086 0013 Ethernet 10G 2P X710 OCP
+ 8086 0014 Ethernet 10G 4P X710 OCP
+ 8086 0015 Ethernet Server Adapter X710-DA2 for OCP
8086 4005 Ethernet Controller X710 for 10GbE SFP+
8086 4006 Ethernet Controller X710 for 10GbE SFP+
8086 4007 Ethernet Controller X710 for 10GbE SFP+
@@ -24659,6 +25084,7 @@
17aa 225d ThinkPad T480
15d9 JHL6340 Thunderbolt 3 NHI (C step) [Alpine Ridge 2C 2016]
15da JHL6340 Thunderbolt 3 Bridge (C step) [Alpine Ridge 2C 2016]
+ 15db JHL6340 Thunderbolt 3 USB 3.1 Controller (C step) [Alpine Ridge 2C 2016]
15df Ethernet Connection (8) I219-LM
15e0 Ethernet Connection (8) I219-V
15e1 Ethernet Connection (9) I219-LM
@@ -24674,7 +25100,12 @@
15ec JHL7540 Thunderbolt 3 USB Controller [Titan Ridge 4C 2018]
15ef JHL7540 Thunderbolt 3 Bridge [Titan Ridge DD 2018]
15f0 JHL7540 Thunderbolt 3 USB Controller [Titan Ridge DD 2018]
+ 15f6 I210 Gigabit Ethernet Connection
15ff Ethernet Controller X710 for 10GBASE-T
+ 8086 0005 Ethernet 10G 2P X710-T2L-t Adapter
+ 8086 0006 Ethernet 10G 4P X710-T4L-t Adapter
+ 8086 0007 Ethernet 10G 2P X710-T2L-t OCP
+ 8086 0008 Ethernet 10G 4P X710-T4L-t OCP
1600 Broadwell-U Host Bridge -OPI
1601 Broadwell-U PCI Express x16 Controller
1602 Broadwell-U Integrated Graphics
@@ -25255,11 +25686,27 @@
15d9 095d X11SPM-TF
2021 Sky Lake-E CBDMA Registers
2024 Sky Lake-E MM/Vt-d Configuration Registers
+ 2025 Sky Lake-E RAS
+ 2026 Sky Lake-E IOAPIC
2030 Sky Lake-E PCI Express Root Port A
2031 Sky Lake-E PCI Express Root Port B
2032 Sky Lake-E PCI Express Root Port C
2033 Sky Lake-E PCI Express Root Port D
+ 2034 Sky Lake-E VT-d
2035 Sky Lake-E RAS Configuration Registers
+ 2036 Sky Lake-E IOxAPIC Configuration Registers
+ 2040 Sky Lake-E Integrated Memory Controller
+ 2041 Sky Lake-E Integrated Memory Controller
+ 2042 Sky Lake-E Integrated Memory Controller
+ 2043 Sky Lake-E Integrated Memory Controller
+ 2044 Sky Lake-E Integrated Memory Controller
+ 2045 Sky Lake-E LM Channel 1
+ 2046 Sky Lake-E LMS Channel 1
+ 2047 Sky Lake-E LMDP Channel 1
+ 2048 Sky Lake-E DECS Channel 2
+ 2049 Sky Lake-E LM Channel 2
+ 204a Sky Lake-E LMS Channel 2
+ 204b Sky Lake-E LMDP Channel 2
204c Sky Lake-E M3KTI Registers
204d Sky Lake-E M3KTI Registers
204e Sky Lake-E M3KTI Registers
@@ -25267,6 +25714,9 @@
2055 Sky Lake-E CHA Registers
2056 Sky Lake-E CHA Registers
2057 Sky Lake-E CHA Registers
+ 2058 Sky Lake-E KTI 0
+ 2059 Sky Lake-E UPI Registers
+ 2066 Sky Lake-E Integrated Memory Controller
2068 Sky Lake-E DDRIO Registers
2069 Sky Lake-E DDRIO Registers
206a Sky Lake-E IOxAPIC Configuration Registers
@@ -26906,6 +27356,7 @@
1775 11cc CC11/CL11
27e2 82801GR/GH/GHM (ICH7 Family) PCI Express Port 6
1775 11cc CC11/CL11
+ 280b Intel(R) Display Audio
2810 82801HB/HR (ICH8/R) LPC Interface Controller
1043 81ec P5B
2811 82801HEM (ICH8M-E) LPC Interface Controller
@@ -27967,6 +28418,7 @@
3184 UHD Graphics 605
318c Celeron/Pentium Silver Processor Dynamic Platform and Thermal Framework Processor Participant
318e Celeron/Pentium Silver Processor NorthPeak
+ 3197 Celeron/Pentium Silver Processor PCI-default ISA-bridge
319a Celeron/Pentium Silver Processor Trusted Execution Engine Interface
31ac Celeron/Pentium Silver Processor Serial IO I2C Host Controller
31ae Celeron/Pentium Silver Processor Serial IO I2C Host Controller
@@ -27976,6 +28428,7 @@
31c2 Celeron/Pentium Silver Processor Serial IO SPI Host Controller
31c4 Celeron/Pentium Silver Processor Serial IO SPI Host Controller
31c6 Celeron/Pentium Silver Processor Serial IO SPI Host Controller
+ 31cc Celeron/Pentium Silver Processor SDA Standard Compliant SD Host Controller
31d4 Celeron/Pentium Silver Processor Gaussian Mixture Model
31ee Celeron/Pentium Silver Processor Serial IO UART Host Controller
3200 GD31244 PCI-X SATA HBA
@@ -28663,13 +29116,16 @@
3cf4 Xeon E5/Core i7 Integrated Memory Controller System Address Decoder 0
3cf5 Xeon E5/Core i7 Integrated Memory Controller System Address Decoder 1
3cf6 Xeon E5/Core i7 System Address Decoder
- 3e18 8th Gen Core Processor Host Bridge/DRAM Registers
- 3e1f 8th Gen Core Processor Host Bridge/DRAM Registers
+ 3e10 8th Gen Core 4-core Processor Host Bridge/DRAM Registers [Coffee Lake H]
+ 3e18 8th Gen Core 4-core Workstation Processor Host Bridge/DRAM Registers [Coffee Lake S]
+ 3e1f 8th Gen Core 4-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S]
+ 3e30 8th Gen Core 8-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S]
3e81 8th Gen Core Processor PCIe Controller (x16)
3e85 8th Gen Core Processor PCIe Controller (x8)
3e89 8th Gen Core Processor PCIe Controller (x4)
3e91 8th Gen Core Processor Gaussian Mixture Model
3e92 UHD Graphics 630 (Desktop)
+ 3e93 UHD Graphics 610
3e9b UHD Graphics 630 (Mobile)
3ea0 UHD Graphics 620 (Whiskey Lake)
3ea5 Iris Plus Graphics 655
@@ -29647,13 +30103,15 @@
17aa 224f ThinkPad X1 Carbon 5th Gen
17aa 225d ThinkPad T480
17aa 382a B51-80 Laptop
+ 9d3d Sunrise Point-LP Active Management Technology - SOL
9d43 Sunrise Point-LP LPC Controller
17aa 382a B51-80 Laptop
9d48 Sunrise Point-LP LPC Controller
1028 06dc Latitude E7470
1028 06f3 Latitude 3570
- 9d4e Intel(R) 100 Series Chipset Family LPC Controller/eSPI Controller - 9D4E
+ 9d4e Sunrise Point LPC Controller/eSPI Controller
17aa 225d ThinkPad T480
+ 9d50 Sunrise Point LPC Controller
9d56 Sunrise Point-LP LPC Controller
9d58 Sunrise Point-LP LPC Controller
17aa 2247 ThinkPad T570
@@ -29674,6 +30132,20 @@
17aa 382a B51-80 Laptop
9d71 Sunrise Point-LP HD Audio
17aa 225d ThinkPad T480
+ 9d84 Cannon Point-LP LPC Controller
+ 9da3 Cannon Point-LP SMBus Controller
+ 9da4 Cannon Point-LP SPI Controller
+ 9db0 Cannon Point-LP PCI Express Root Port #9
+ 9db6 Cannon Point-LP PCI Express Root Port #15
+ 9db8 Cannon Point-LP PCI Express Root Port #1
+ 9dbc Cannon Point-LP PCI Express Root Port #5
+ 9dc8 Cannon Point-LP High Definition Audio Controller
+ 9dd3 Cannon Point-LP SATA Controller [AHCI Mode]
+ 9de0 Cannon Point-LP MEI Controller #1
+ 9ded Cannon Point-LP USB 3.1 xHCI Controller
+ 9def Cannon Point-LP Shared SRAM
+ 9df0 Cannon Point-LP CNVi [Wireless-AC]
+ 9df9 Cannon Point-LP Thermal Controller
a000 Atom Processor D4xx/D5xx/N4xx/N5xx DMI Bridge
1458 5000 GA-D525TUD
8086 4f4d DeskTop Board D510MO
@@ -29912,6 +30384,9 @@
a2ee 200 Series PCH PCI Express Root Port #24
a2f0 200 Series PCH HD Audio
a304 H370 Chipset LPC/eSPI Controller
+ a305 Z390 Chipset LPC/eSPI Controller
+ a306 Q370 Chipset LPC/eSPI Controller
+ a30c QM370 Chipset LPC/eSPI Controller
a323 Cannon Lake PCH SMBus Controller
a324 Cannon Lake PCH SPI Controller
a32c Cannon Lake PCH PCI Express Root Port #21
@@ -29940,8 +30415,13 @@
a343 Cannon Lake PCH PCI Express Root Port #20
a348 Cannon Lake PCH cAVS
a352 Cannon Lake PCH SATA AHCI Controller
+ a353 Cannon Lake Mobile PCH SATA AHCI Controller
a360 Cannon Lake PCH HECI Controller
a363 Cannon Lake PCH Active Management Technology - SOL
+ a368 Cannon Lake PCH Serial IO I2C Controller #0
+ a369 Cannon Lake PCH Serial IO I2C Controller #1
+ a36a Cannon Lake PCH Serial IO I2C Controller #2
+ a36b Cannon Lake PCH Serial IO I2C Controller #3
a36d Cannon Lake PCH USB 3.1 xHCI Host Controller
a36f Cannon Lake PCH Shared SRAM
a370 Wireless-AC 9560 [Jefferson Peak]
@@ -30116,7 +30596,7 @@
9004 7888 AHA-2930UW SCSI Controller
8b78 ABA-1030
ec78 AHA-4944W/UW
-# Acquired by Microsemi
+# Acquired by Microchip Technology
9005 Adaptec
0010 AHA-2940U2/U2W
9005 2180 AHA-2940U2 SCSI Controller
@@ -30573,6 +31053,8 @@ caed Canny Edge
cafe Chrysalis-ITS
0003 Luna K3 Hardware Security Module
0006 Luna PCI-e 3000 Hardware Security Module
+ 0007 Luna K6 Hardware Security Module
+ 0008 Luna K7 Hardware Security Module
cc53 ScaleFlux Inc.
cccc Catapult Communications
ccec Curtiss-Wright Controls Embedded Computing
@@ -30784,6 +31266,7 @@ edd8 ARK Logic Inc
# Found on M2N68-AM Motherboard
f043 ASUSTeK Computer Inc. (Wrong ID)
f05b Foxconn International, Inc. (Wrong ID)
+f15e SiFive, Inc.
f1d0 AJA Video
c0fe Xena HS/HD-R
c0ff Kona/Xena 2
@@ -30795,6 +31278,7 @@ f1d0 AJA Video
dcaf Kona HD
dfee Xena HD-DA
eb0e Corvid 44
+ eb1d Kona 5
efac Xena SD-MM/SD-22-MM
facd Xena HD-MM
f5f5 F5 Networks, Inc.
diff --git a/hwdb/pnp_id_registry.html b/hwdb/pnp_id_registry.html
index 77bb0271f9..bab4262ec5 100644
--- a/hwdb/pnp_id_registry.html
+++ b/hwdb/pnp_id_registry.html
@@ -2442,6 +2442,8 @@
<tr class="even"><td>Convergent Engineering, Inc.</td><td>CIE</td><td>09/05/2018</td> </tr>
<tr class="odd"><td>WyreStorm Technologies LLC </td><td>WYR</td><td>09/05/2018</td> </tr>
<tr class="even"><td>Astro HQ LLC</td><td>AHQ </td><td>09/05/2018</td> </tr>
+ <tr class="odd"><td>QSC, LLC</td><td>QSC</td><td>01/18/2019</td> </tr>
+ <tr class="even"><td>Dimension Engineering LLC</td><td>DMN</td><td>02/06/2019</td> </tr>
</tbody>
</table>
</body>
diff --git a/hwdb/sdio.ids b/hwdb/sdio.ids
index d61729744e..9c706c0ea2 100644
--- a/hwdb/sdio.ids
+++ b/hwdb/sdio.ids
@@ -35,6 +35,7 @@
02d0 Broadcom Corp.
044b Nintendo Wii WLAN daughter card
a887 BCM43143 WLAN card
+ a9a6 BCM43438 combo WLAN and Bluetooth Low Energy (BLE) # As in RPi3B
4324 BCM43241 WLAN card
4329 BCM4329 WLAN card
4330 BCM4330 WLAN card
@@ -82,7 +83,7 @@
# Syntax:
# C class class_name
-C 00 Not a SDIO standard interface
+C 00 Non-standard SDIO interface
C 01 UART standard interface
C 02 Bluetooth Type-A standard interface
C 03 Bluetooth Type-B standard interface
diff --git a/hwdb/usb.ids b/hwdb/usb.ids
index 52239c4580..a27679a21b 100644
--- a/hwdb/usb.ids
+++ b/hwdb/usb.ids
@@ -9,8 +9,8 @@
# The latest version can be obtained from
# http://www.linux-usb.org/usb.ids
#
-# Version: 2018.12.04
-# Date: 2018-12-04 20:34:05
+# Version: 2019.01.17
+# Date: 2019-01-17 20:34:05
#
# Vendors, devices and interfaces. Please keep sorted.
@@ -72,6 +72,7 @@
0002 HD44780 LCD interface
03e7 Intel
2150 Myriad VPU [Movidius Neural Compute Stick]
+ 2485 Movidius MyriadX
03e8 EndPoints, Inc.
0004 SE401 Webcam
0008 101 Ethernet [klsi]
@@ -450,6 +451,7 @@
3005 ScanJet 4670v
3011 PSC 1100 series
3017 Printing Support
+ 304a Slim Keyboard
3102 PhotoSmart P1100 Printer w/ Card Reader
3104 DeskJet 960c
3111 OfficeJet 4100 series
@@ -775,6 +777,7 @@
6011 FT4232H Quad HS USB-UART/FIFO IC
6014 FT232H Single HS USB-UART/FIFO IC
6015 Bridge(I2C/SPI/UART/FIFO)
+ 6f70 HB-RF-USB
8028 Dev board JTAG (FT232H based)
8040 4 Port Hub
8070 7 Port Hub
@@ -886,9 +889,11 @@
f0c8 SPROG Decoder Programmer
f0c9 SPROG-DCC CAN-USB
f0e9 Tagsys L-P101
+ f0ee Tagsys Medio P200x
f1a0 Asix PRESTO Programmer
f208 Papenmeier Braille-Display
f3c0 4N-GALAXY Serial Converter
+ f458 ABACUS ELECTRICS Optical Probe
f608 CTI USB-485-Mini
f60b CTI USB-Nano-485
f680 Suunto Sports Instrument
@@ -943,6 +948,7 @@
0103 FV TouchCam N1 (Audio)
030c HP Webcam
03b2 HP Webcam
+ 03f4 HP Webcam
1030 FV TouchCam N1 (Video)
3000 Optical dual-touch panel
3001 Optical Touch Screen
@@ -1299,6 +1305,7 @@
041b d'TV
041d S3, Inc.
041e Creative Technology, Ltd
+ 0414 HS-720 Headset
1002 Nomad II
1003 Blaster GamePad Cobra
1050 GamePad Cobra
@@ -1613,6 +1620,7 @@
2602 USB 2.0 Hub
2640 USB 2.0 Hub
2660 Hub
+ 2744 Hub
274d HTC Hub Controller
3fcc RME MADIface
4041 Hub and media card controller
@@ -1620,6 +1628,7 @@
4064 Ultra Fast Media Reader
5434 Hub
5534 Hub
+ 5744 Hub
7500 LAN7500 Ethernet 10/100/1000 Adapter
9500 LAN9500/LAN9500i
9512 SMC9512/9514 USB Hub
@@ -1909,12 +1918,15 @@
b323 Dual Trigger 3-in-1 (PC Mode)
b324 Dual Trigger 3-in-1 (PS3 Mode)
b326 Gamepad GP XID
+ b351 F16 MFD 1
+ b352 F16 MFD 2
b603 force feedback Wheel
b605 force feedback Racing Wheel
b651 Ferrari GT Rumble Force Wheel
b653 RGT Force Feedback Clutch Racing Wheel
b654 Ferrari GT Force Feedback Wheel
b678 T.Flight Rudder Pedals
+ b679 T-Rudder
b687 TWCS Throttle
b700 Tacticalboard
0450 DFI, Inc.
@@ -2106,6 +2118,7 @@
5221 Rio Eigen
045b Hitachi, Ltd
0053 RX610 RX-Stick
+ 0229 mSATA Adapter [renkforce Pi-102]
045d Nortel Networks, Ltd
045e Microsoft Corp.
0007 SideWinder Game Pad
@@ -2476,6 +2489,7 @@
4d81 Dell N889 Optical Mouse
4d91 Laser mouse M-D16DL
4d92 Optical mouse M-D17DR
+ 4db1 Dell Laptop Integrated Webcam 2Mpix
4de3 HP 5-Button Optical Comfort Mouse
4de7 webcam
4e04 Lenovo Keyboard KB1021
@@ -2740,6 +2754,7 @@
c07c M-R0017 [G700s Rechargeable Gaming Mouse]
c07d G502 Mouse
c07e G402 Gaming Mouse
+ c080 G303 Gaming Mouse
c083 G403 Prodigy Gaming Mouse
c084 G203 Gaming Mouse
c101 UltraX Media Remote
@@ -3184,6 +3199,7 @@
0014 InTouch Module
0100 Stor.E Slim USB 3.0
0200 External Disk
+ 0820 Canvio Advance Disk
a006 External Disk 1.5TB
a007 External Disk USB 3.0
a009 Stor.E Basics
@@ -4188,6 +4204,7 @@
32ad PowerShot SX410 IS
32b1 SELPHY CP1200
32b2 PowerShot G9 X
+ 32b3 PowerShot G5 X
32b4 EOS Rebel T6
32bb EOS M5
32bf PowerShot SX420 IS
@@ -4548,6 +4565,8 @@
0891 Stylus Office BX535WD
0892 Stylus Office BX935FWD
0893 EP-774A
+ 1114 XP-440 [Expression Home Small-in-One Printer]
+ 1129 ET-4750 [WorkForce ET-4750 EcoTank All-in-One]
04b9 Rainbow Technologies, Inc.
0300 SafeNet USB SuperPro/UltraPro
1000 iKey 1000 Token
@@ -4659,8 +4678,11 @@
10e7 fi-5900C
10fe S500
1104 KD02906 Line Thermal Printer
+ 114f fi-6130
1150 fi-6230
+ 11f3 fi-6130Z
125a PalmSecure Sensor Device - MP
+ 132e fi-7160
200f Sigma DP2 (Mass Storage)
2010 Sigma DP2 (PictBridge)
201d SATA 3.0 6Gbit/s Adaptor [GROOVY]
@@ -5296,6 +5318,7 @@
7080 Anycall SCH-W580
7081 Human Interface Device
8001 Handheld
+ d003 GT-I9003
e020 SERI E02 SCOM 6200 UMTS Phone
e021 SERI E02 SCOM 6200 Virtual UARTs
e022 SERI E02 SCOM 6200 Flash Load Disk
@@ -6536,6 +6559,10 @@
09cc DualShock 4 [CUH-ZCT2x]
0ba0 Dualshock4 Wireless Adaptor
0bb5 Headset MDR-1000X
+ 0c02 ILCE-7M3 [A7III] in Mass Storage mode
+ 0c03 ILCE-7M3 [A7III] in MTP mode
+ 0c34 ILCE-7M3 [A7III] in PC Remote mode
+ 0cda PlayStation Classic controller
1000 Wireless Buzz! Receiver
054d Try Corp.
054e Proside Corp.
@@ -6859,6 +6886,7 @@
038d DTH-3220 [Cintiq Pro 32] internal hub
038e DTH-3220 [Cintiq Pro 32] external hub
038f DTH-3220 [Cintiq Pro 32] internal hub
+ 0390 DTK-1660 [Cintiq 16]
0400 PenPartner 4x5
4001 TPC4001
4004 TPC4004
@@ -6890,7 +6918,8 @@
0072 Laser mouse M-LS6UL
0073 Laser mouse M-LS7UL
0074 Optical mouse M-FW1UL
- 0075 M-FW2DL Mouse
+ 0075 Laser mouse M-FW2DL
+ 0077 Laser mouse M-LY2UL
2003 JC-U3613M
2004 JC-U3613M
200c LD-USB/TX
@@ -15377,43 +15406,251 @@
02df Serial cable (v2) for TD-10 Mobile Phone
1203 TSC Auto ID Technology Co., Ltd
0140 TTP-245C
-1209 InterBiometrics
- 1001 USB Hub
- 1002 USB Relais
- 1003 IBSecureCam-P
- 1004 IBSecureCam-O
- 1005 IBSecureCam-N
- 1006 Mini IO-Board
+1209 Generic
+ 0001 pid.codes Test PID
+ 01c0 Input Club Kiibohd Device
+ 01cb Input Club Kiibohd Device Bootloader
+ 0256 Schwalm & Tate LLC pISO Raspberry Pi Hat
+ 053a Hackerspace San Salvador HSSV SAMR21-Mote
+ 0cbd Andrzej Szombierski kuku.eu.org keyboard
+ 0d32 ODrive Robotics ODrive v3
+ 1001 InterBiometrics Hub
+ 1002 InterBiometrics Relais
+ 1003 InterBiometrics IBSecureCam-P
+ 1004 InterBiometrics IBSecureCam-O
+ 1005 InterBiometrics IBSecureCam-N
+ 1006 InterBiometrics Mini IO-Board
+ 1007 e-radionica.com Croduino SAMD
+ 1986 dgrubb Jaguar Tap
1ab5 Arachnid Labs Tsunami
+ 1ab6 Arachnid Labs Tsunami Bootloader
2000 Zygmunt Krynicki Lantern Brightness Sensor
+ 2001 OSHEC Pi-pilot opensource and openhardware autopilot system
+ 2002 Peter Lawrence PIC16F1-USB-DFU-Bootloader
+ 2003 Peter Lawrence SAMDx1-USB-DFU-Bootloader
+ 2004 GCBASIC Serial CDC Stack
+ 2005 GCBASIC OakTree Stack
+ 2006 GCBASIC Simulation Stack
+ 2016 Cupkee
+ 2017 Benjamin Shockley Mini SAM
+ 2020 Captain Credible Gate Crystal
2048 Housedillon.com MRF49XA Transciever
+ 2100 TinyFPGA B1 and B2 Boards
+ 2101 TinyFPGA A-Series Programmer
+ 2200 Dygma Shortcut Bootloader
+ 2201 Dygma Shortcut Keyboard
2222 LabConnect Signalgenerator
- 2300 Keyboardio Keyboardio Model 01 Bootloader
- 2301 Keyboardio Keyboardio Model 01
- 2327 K.T.E.C.Bootloader Device
+ 2300 Keyboardio Model 01 Bootloader
+ 2301 Keyboardio Model 01
+ 2323 bytewerk.org candleLight
+ 2327 K.T.E.C. Bootloader Device
2328 K.T.E.C. Keyboard Device
- 2337 /Dev or SlashDev /Net
+ 2333 Kai Ryu Kimera
+ 2334 Kai Ryu Staryu
+ 2335 Portwell Sense8
+ 2336 Portwell Sense8
+ 2337 /Dev /Net
+ 2342 Andreas Bogk Big Red Button
+ 2345 VV-Soft Simple Generic HID IO
+ 2357 KarolKucza TinyPassword
+ 2400 phooky Snap-Pad
+ 2488 Peter Lawrence CMSIS-DAP Dapper Miser
+ 2552 ProjectIota Electrolink
+ 2600 Majenko Technologies chipKIT Lenny
+ 2635 Sevinz GameBot
+ 2800 Entropic Engineering Triangulation
+ 2801 Entropic Engineering Object Manipulation
+ 2a00 mooware Wii adapter
+ 2a01 mooware SNES adapter
3000 lloyd3000
+ 3100 OpenSimHardware Pedals & Buttons Controller
+ 317e Codecrete Wirekite
+ 3210 OSH Lab, LLC Magic Keys
3333 LabConnect Digitalnetzteil
+ 3690 Kigakudoh TouchMIDI32
+ 4096 CynaraKrewe Cynara
+ 414c Adi Linden
+ 414d Adi Linden
+ 4242 Komakallio Astrophotography Community KomaHub Remote Power Switch
+ 4256 CuVoodoo BusVoodoo multi-protocol debugging adapter
+ 4321 mooltipass Offline Password Keeper Bootloader
+ 4322 mooltipass Arduino Sketch
+ 4356 CuVoodoo firmware
+ 4443 j1rie IRMP_STM32 Bootloader
+ 4444 j1rie IRMP_STM32
+ 4545 SlothCo Enterprises Teletype Adapter
+ 4646 SmartPID SPC1000
+ 4748 Kate Gray GHETT-iO Bootloader
+ 4750 Chris Pavlina (c4757p) C4-x computer (development interface)
+ 4757 Chris Pavlina (c4757p) WCP52 Gain/Phase Analyzer
+ 4801 Wojciech Krutnik NVMemProg
+ 4c60 MightyPork GEX module
+ 4c61 MightyPork GEX wireless dongle
+ 4d53 mindsensors.com NXTCam5
+ 5038 frotz.net mdebug rswd protocol
+ 5039 frotz.net lpcboot protocol
+ 5050 trebb ISO50
5222 telavivmakers attami
53c0 SatoshiLabs TREZOR Bootloader
53c1 SatoshiLabs TREZOR
+ 5432 Open Programmer
+ 5457 Openlab.Taipei Taiwanduino
+ 571c StreetoArcade PancadariaStick
5a22 ikari_01 sd2snes
- 7530 Refflion - IoT Board - Bootloader
- 7531 Refflion - IoT Board - Sketch
+ 6000 Pulsar Heavy Industries Cenx4
+ 600d Makdaam N93 Interface
+ 6464 Electric Exploits Shinewave
+ 6502 jj1bdx avrhwrng v2rev1
+ 6570 Iowa Scaled Engineering, LLC CKT-AVRPROGRAMMER
+ 6666 Talpa Chen VSFLogic
+ 6667 SensePost Universal Serial aBUSe - Generic HID
+ 6742 NPK Cubitel Atomic Force Microscope
+ 6809 Tach Radio Doppelganger
+ 6948 MySensors Sensebender Gateway BootLoader
+ 6949 MySensors Sensebender Gateway
+ 6bcf blaste Gameboy Cart Flasher
+ 7000 Secalot Dongle
+ 7001 Secalot Bootloader
+ 70b1 Sutajio Ko-Usagi (Kosagi) Tomu
+ 7331 Dangerous Prototypes Bus Pirate Next Gen CDC
+ 7332 Dangerous Prototypes Bus Pirate Next Gen Logic Analyzer
+ 7401 Beststream-jp Tool_CDC
+ 7530 PotentialLabs Refflion - IoT Development Board - Bootloader
+ 7531 PotentialLabs Refflion - IoT Development Board - Sketch
+ 7551 The Tessel Project Tessel 2
+ 7777 circuitvalley IO Board V3
+ 7778 circuitvalley IO Board V3 Bootloader
7bd0 pokey9000 Tiny Bit Dingus
- abd0 tibounise ADB converter
- aced Open Lighting Project - Ja Rule Device
- acee Open Lighting Project - Ja Rule Bootloader
+ 8000 Autonomii NODii 2
+ 8086 MisfitTech Nano Zero Bootloader
+ 8087 MisfitTech Nano Zero
+ 8123 Danyboard M0 bootloader
+ 812a Danyboard M0
+ 813a MickMad HACK Bootloader
+ 813b MickMad HACK Sketch
+ 8242 Tom Wimmenhove Electronics NBS-DAC 192/24 UAC1
+ 8243 Tom Wimmenhove Electronics NBS-DAC 192/24 UAC2
+ 8472 Shantea Controls OpenDeck
+ 8661 ProgHQ TL866 programmer
+ 8844 munia.io MUNIA
+ 8888 Blinkinlabs POV Pendant
+ 8889 Blinkinlabs POV Pendant (bootloader)
+ 8b00 ReSwitched Libtransistor Serial Console
+ 9021 Connected Community Hackerspace ESPlant
+ 9317 Sutajio Ko-Usagi (Kosagi) Palawan-Tx
+ 9999 Sandeepan Sengupta CodeBridge Infineo
+ 9db5 PD Buddy Sink
+ a033 area0x33 Memtype
+ a100 KB LES Narsil analog breakout
+ a10c KB LES Aminoacid Synthesizer
+ a1e5 Atreus Keyboards Atreus Keyboard
+ a3a4 MK::Box MK::Kbd
+ a3a5 MK::Box MK::Kbd Bootloader
+ a55a Forever Young Software ATTINY2313
+ a602 Robotips RTBoard
+ a7ea area3001 Knixx SW04
+ a800 sowbug.com WebLight
+ a8b0 Intelectron BootWare
+ a8b1 Intelectron FrameWare
+ aa00 Serg Oskin LinuxCNC HID Extender
+ aa0b Open Bionics
+ ab3d 3DArtists Alligator board
+ abba CoinWISE SafeWISE
+ abc0 Omzlo controller
+ abcd Sandeepan Sengupta CodeBridge
+ abd1 OpenMV Cam
+ acdc Gediminas Zukaitis midi-grid
+ ace5 SimAces Panel Ace
+ aced Open Lighting Project Ja Rule Device
+ acee Open Lighting Project Ja Rule Bootloader
+ adb0 tibounise ADB converter
+ adda MicroPython Boards
+ b007 Konsgn Global_Boot
+ b00b CrapLab Random Device
+ b010 IObitZ CodeBridge
+ b01d WyoLum VeloKey
+ b058 Model B, LLC Holoseat
+ b0b0 Monero Hardware Monero Bootloader
+ b100 ptrandem iBizi
+ b101 IObitZ Infineo
+ b195 flehrad Big Switch PCB
+ bab1 ElectronicCats Meow Meow
+ babe brunofreitas.com STM32 HID Bootloader
+ bad1 Gregory POTEAU CommLinkUSB
+ bad2 Gregory POTEAU XLinkUSB
+ bade Semarme SemarmeHID
+ bb00 keyplus split keyboard firmware
+ bb01 keyplus xusb bootloader
+ bb02 keyplus nRF24 wireless keyboard dongle
+ bb03 keyplus nrf24lu1p-512 bootloader
+ bb05 keyplus kp_boot_32u4 bootloader
+ beba serasidis.gr STM32 HID Bootloader
beef Modal MC-USB
+ c001 Cynteract Alpha
+ c0c0 Geppetto_Electronics Orthrus
+ c0c1 Michael Bemmerl cookie-mouse
+ c0ca Jean THOMAS DirtyJTAG
+ c0d3 Samy Kamkar USBdriveby
+ c0da Monero Hardware Monero Firmware
+ c0de KMRH Labs SBL Brain
c0f5 unethi PERswitch
- ca1c KnightOS Hub
+ c1aa Proyecto CIAA Computadora Industrial Abierta Argentina
+ c1b1 Chibitronics Love-to-Code
+ c311 bg nerilex GB-USB-Link
+ ca1c KnightOS Generic Hub
ca1d KnightOS MTP Device
+ caea Open Music Kontrollers Chimaera
cafe ii iigadget
+ cc14 trebb NaN-15
+ cc86 Manfred's Technologies Anastasia Bootloader
+ ceb0 KG4LNE GE-FlashUSB
+ cf20 Smart Citizen SCK 2.0
+ d00d Monero Hardware Monero Developer
+ d017 empiriKit empiriKit Controller
+ d11d Koi Science DI-Lambda AVR
+ d3d8 Duet3d Duet 0.8.5
+ d706 SkyBean SkyDrop
+ da42 Devan Lai dap42 debug access probe
+ daa0 darknao btClubSportWheel
dada Rebel Technology OWL
+ db42 Devan Lai dapboot DFU bootloader
+ dc21 FPGA-Computer Dual Charger
+ dddd Stephan Electronics OpenCVMeter
dead chaosfield.at AVR-Ruler
+ deaf CrapLab 4chord MIDI
+ ded1 ManCave Made Quark One
+ df00 D.F.Mac. @TripArts Music mi:muz:tuch
+ df01 D.F.Mac. @TripArts Music mi:muz:can
+ df02 D.F.Mac. @TripArts Music mi:muz:can-lite
+ e116 Elijah Motornyy open-oscilloscope-stm32f3
+ e1ec FreeSRP
+ e4ee trebb keytee
+ e500 GitleMikkelsen Helios Laser DAC
+ eaea Pinscape Controller
+ eb01 RobotMaker.club EB1
+ eba7 VictorGrigoryev USBscope
+ ee00 Explore Embedded SODA(SWD OpenSource Debug Adapter)
+ ee02 Explore Embedded Explore M3 VCOM
+ ee03 Explore Embedded Explore M3 DFU
+ ee2c jaka USB2RS485
+ effa EffigyLabs atmega32u4-USB-LUFA-Bootloader
+ effe EffigyLabs Control Pedal
+ f000 Uniti ARC
+ f00d RomanStepanov Shifter/Pedals Adapter
+ f12e Michael Bemmerl Feuermelder
+ f16a uri_ba Cougar TQS adapter
+ f16c uri_ba adapter for Vipercore's FCC3 Force Sensing Module
+ f380 Windsor Schmidt MD-380 Open Radio Firmware
+ f3fc dRonin Flight controller-Lumenier Lux
+ f49a TimVideos.us & HDMI2USB.tv Projects FPGA Programmer & UART Bridge (PIC based Firmware)
fa11 moonglow OpenXHC
+ fa57 3DRacers Pilot Board
+ fa58 3DRacers Pilot Board (Bootloader)
+ fab1 PAP Mechatronic Technology LamDiNao
+ face Protean Synth Craft
+ fade Open Collector dude
feed ProgramGyar AVR-IR Sender
+ ffff Life2Device Smart House
120e Hudson Soft Co., Ltd
120f Magellan
524e RoadMate 1475T
@@ -19106,6 +19343,8 @@
2fb2 Fujitsu, Ltd
3016 Boundary Devices, LLC
0001 Nitrogen Bootloader
+30ee Fujitsu Connected Technologies Limited
+ 1001 F-01L
3125 Eagletron
0001 TrackerPod Camera Stand
3136 Navini Networks
diff --git a/man/coredump.conf.xml b/man/coredump.conf.xml
index ee3c1b6919..4ccc174bbc 100644
--- a/man/coredump.conf.xml
+++ b/man/coredump.conf.xml
@@ -54,7 +54,7 @@
<para>All options are configured in the
<literal>[Coredump]</literal> section:</para>
- <variablelist>
+ <variablelist class='config-directives'>
<varlistentry>
<term><varname>Storage=</varname></term>
diff --git a/man/journal-remote.conf.xml b/man/journal-remote.conf.xml
index acc1817cd8..8fa557c0ba 100644
--- a/man/journal-remote.conf.xml
+++ b/man/journal-remote.conf.xml
@@ -51,7 +51,7 @@
<para>All options are configured in the
<literal>[Remote]</literal> section:</para>
- <variablelist>
+ <variablelist class='config-directives'>
<varlistentry>
<term><varname>Seal=</varname></term>
diff --git a/man/journal-upload.conf.xml b/man/journal-upload.conf.xml
index c3bfa47950..3dda3019b5 100644
--- a/man/journal-upload.conf.xml
+++ b/man/journal-upload.conf.xml
@@ -48,7 +48,7 @@
<para>All options are configured in the <literal>[Upload]</literal> section:</para>
- <variablelist>
+ <variablelist class='config-directives'>
<varlistentry>
<term><varname>URL=</varname></term>
diff --git a/man/journalctl.xml b/man/journalctl.xml
index 58f3aa205a..7ff0a479e0 100644
--- a/man/journalctl.xml
+++ b/man/journalctl.xml
@@ -118,8 +118,8 @@
<para>When outputting to a tty, lines are colored according to
priority: lines of level ERROR and higher are colored red; lines
- of level NOTICE and higher are highlighted; other lines are
- displayed normally.</para>
+ of level NOTICE and higher are highlighted; lines of level DEBUG
+ are colored lighter grey; other lines are displayed normally.</para>
</refsect1>
<refsect1>
diff --git a/man/journald.conf.xml b/man/journald.conf.xml
index ed874aace9..2791678a4f 100644
--- a/man/journald.conf.xml
+++ b/man/journald.conf.xml
@@ -50,7 +50,7 @@
<para>All options are configured in the
<literal>[Journal]</literal> section:</para>
- <variablelist>
+ <variablelist class='config-directives'>
<varlistentry>
<term><varname>Storage=</varname></term>
@@ -258,7 +258,7 @@
<listitem><para>The maximum time to store journal entries.
This controls whether journal files containing entries older
- then the specified time span are deleted. Normally, time-based
+ than the specified time span are deleted. Normally, time-based
deletion of old journal files should not be required as
size-based deletion with options such as
<varname>SystemMaxUse=</varname> should be sufficient to
diff --git a/man/kernel-command-line.xml b/man/kernel-command-line.xml
index 9d86bdf203..43dfc1073b 100644
--- a/man/kernel-command-line.xml
+++ b/man/kernel-command-line.xml
@@ -428,6 +428,7 @@
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry project='man-pages'><refentrytitle>bootparam</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry project='man-pages'><refentrytitle>dracut.cmdline</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-debug-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
diff --git a/man/kernel-install.xml b/man/kernel-install.xml
index 83e50c8d70..50e1320105 100644
--- a/man/kernel-install.xml
+++ b/man/kernel-install.xml
@@ -28,7 +28,8 @@
<command>kernel-install</command>
<arg choice="plain">COMMAND</arg>
<arg choice="plain"><replaceable>KERNEL-VERSION</replaceable></arg>
- <arg choice="opt"><replaceable>KERNEL-IMAGE</replaceable></arg>
+ <arg choice="plain"><replaceable>KERNEL-IMAGE</replaceable></arg>
+ <arg choice="opt" rep="repeat"><replaceable>INITRD-FILE</replaceable></arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -61,7 +62,7 @@
<para>The following commands are understood:</para>
<variablelist>
<varlistentry>
- <term><command>add <replaceable>KERNEL-VERSION</replaceable> <replaceable>KERNEL-IMAGE</replaceable></command></term>
+ <term><command>add <replaceable>KERNEL-VERSION</replaceable> <replaceable>KERNEL-IMAGE</replaceable> [<replaceable>INITRD-FILE</replaceable> ...]</command></term>
<listitem>
<para>This command expects a kernel version string and a path to a kernel image file as
arguments. <command>kernel-install</command> creates the directory
@@ -69,7 +70,7 @@
and calls the executables from <filename>/usr/lib/kernel/install.d/*.install</filename> and
<filename>/etc/kernel/install.d/*.install</filename> with the following arguments:
- <programlisting>add <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename> <replaceable>KERNEL-IMAGE</replaceable></programlisting>
+ <programlisting>add <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename> <replaceable>KERNEL-IMAGE</replaceable> [<replaceable>INITRD-FILE</replaceable> ...]</programlisting>
</para>
<para>Two default plugins execute the following operations in this case:</para>
@@ -83,14 +84,15 @@
<listitem><para><filename>90-loaderentry.install</filename> copies <replaceable>KERNEL-IMAGE</replaceable>
to
<filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/linux</filename>.
+ If an <replaceable>INITRD-FILE</replaceable> is provided, it also copies <replaceable>INITRD-FILE</replaceable>
+ to
+ <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL_VERSION</replaceable>/<replaceable>INITRD-FILE</replaceable></filename>.
It also creates a boot loader entry according to the <ulink
url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink> in
<filename>/boot/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename>.
The title of the entry is the <replaceable>PRETTY_NAME</replaceable> parameter specified in
<filename>/etc/os-release</filename> or <filename>/usr/lib/os-release</filename> (if the former is
- missing), or "Linux <replaceable>KERNEL-VERSION</replaceable>", if unset. If the file
- <filename>initrd</filename> is found next to the kernel image file, the initrd will be added to the
- configuration.</para></listitem>
+ missing), or "Linux <replaceable>KERNEL-VERSION</replaceable>", if unset.</para></listitem>
</itemizedlist>
</listitem>
</varlistentry>
diff --git a/man/logind.conf.xml b/man/logind.conf.xml
index a407858957..ac8032ab4d 100644
--- a/man/logind.conf.xml
+++ b/man/logind.conf.xml
@@ -51,7 +51,7 @@
<para>All options are configured in the
<literal>[Login]</literal> section:</para>
- <variablelist>
+ <variablelist class='config-directives'>
<varlistentry>
<term><varname>NAutoVTs=</varname></term>
diff --git a/man/machine-info.xml b/man/machine-info.xml
index 476996ce5f..5a268c9f36 100644
--- a/man/machine-info.xml
+++ b/man/machine-info.xml
@@ -58,7 +58,7 @@
<para>The following machine metadata parameters may be set using
<filename>/etc/machine-info</filename>:</para>
- <variablelist>
+ <variablelist class='environment-variables'>
<varlistentry>
<term><varname>PRETTY_HOSTNAME=</varname></term>
diff --git a/man/os-release.xml b/man/os-release.xml
index ea71b36c1e..6de0cd7148 100644
--- a/man/os-release.xml
+++ b/man/os-release.xml
@@ -90,7 +90,7 @@
<para>The following OS identifications parameters may be set using
<filename>os-release</filename>:</para>
- <variablelist>
+ <variablelist class='environment-variables'>
<varlistentry>
<term><varname>NAME=</varname></term>
diff --git a/man/pam_systemd.xml b/man/pam_systemd.xml
index 3ce3b282bd..e5e14c12d7 100644
--- a/man/pam_systemd.xml
+++ b/man/pam_systemd.xml
@@ -82,7 +82,7 @@
<variablelist class='pam-directives'>
<varlistentry>
- <term><option>class=</option></term>
+ <term><varname>class=</varname></term>
<listitem><para>Takes a string argument which sets the session class. The <varname>XDG_SESSION_CLASS</varname>
environment variable (see below) takes precedence. One of <literal>user</literal>, <literal>greeter</literal>,
@@ -92,7 +92,7 @@
</varlistentry>
<varlistentry>
- <term><option>type=</option></term>
+ <term><varname>type=</varname></term>
<listitem><para>Takes a string argument which sets the session type. The <varname>XDG_SESSION_TYPE</varname>
environment variable (see below) takes precedence. One of <literal>unspecified</literal>,
@@ -102,7 +102,7 @@
</varlistentry>
<varlistentry>
- <term><option>desktop=</option></term>
+ <term><varname>desktop=</varname></term>
<listitem><para>Takes a single, short identifier string for the desktop environment. The
<varname>XDG_SESSION_DESKTOP</varname> environment variable (see below) takes precedence. This may be used to
@@ -117,7 +117,7 @@
</varlistentry>
<varlistentry>
- <term><option>debug<optional>=</optional></option></term>
+ <term><varname>debug</varname><optional>=</optional></term>
<listitem><para>Takes an optional boolean argument. If yes or without the argument, the module will log
debugging information as it operates.</para></listitem>
@@ -186,21 +186,21 @@
<varlistentry>
<term><varname>$XDG_SESSION_TYPE</varname></term>
- <listitem><para>The session type. This may be used instead of <option>session=</option> on the module parameter
+ <listitem><para>The session type. This may be used instead of <varname>session=</varname> on the module parameter
line, and is usually preferred.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>$XDG_SESSION_CLASS</varname></term>
- <listitem><para>The session class. This may be used instead of <option>class=</option> on the module parameter
+ <listitem><para>The session class. This may be used instead of <varname>class=</varname> on the module parameter
line, and is usually preferred.</para></listitem>
</varlistentry>
<varlistentry>
<term><varname>$XDG_SESSION_DESKTOP</varname></term>
- <listitem><para>The desktop identifier. This may be used instead of <option>desktop=</option> on the module
+ <listitem><para>The desktop identifier. This may be used instead of <varname>desktop=</varname> on the module
parameter line, and is usually preferred.</para></listitem>
</varlistentry>
@@ -242,7 +242,7 @@
the context objects.
</para>
- <variablelist>
+ <variablelist class='pam-directives'>
<varlistentry>
<term><varname>systemd.memory_max</varname></term>
diff --git a/man/sd-bus-errors.xml b/man/sd-bus-errors.xml
index c896511541..a94022c025 100644
--- a/man/sd-bus-errors.xml
+++ b/man/sd-bus-errors.xml
@@ -112,7 +112,7 @@
<variablelist>
<varlistentry>
- <term><varname>SD_BUS_ERROR_FAILED</varname></term>
+ <term><constant>SD_BUS_ERROR_FAILED</constant></term>
<listitem><para>A generic error indication. See the error
message for further details. This error name should be
avoided, in favor of a more expressive error
@@ -120,134 +120,134 @@
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_NO_MEMORY</varname></term>
+ <term><constant>SD_BUS_ERROR_NO_MEMORY</constant></term>
<listitem><para>A memory allocation failed, and the requested
operation could not be completed.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_SERVICE_UNKNOWN</varname></term>
+ <term><constant>SD_BUS_ERROR_SERVICE_UNKNOWN</constant></term>
<listitem><para>The contacted bus service is unknown and
cannot be activated.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_NAME_HAS_NO_OWNER</varname></term>
+ <term><constant>SD_BUS_ERROR_NAME_HAS_NO_OWNER</constant></term>
<listitem><para>The specified bus service name currently has
no owner.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_NO_REPLY</varname></term>
+ <term><constant>SD_BUS_ERROR_NO_REPLY</constant></term>
<listitem><para>A message did not receive a reply. This error
is usually generated after a timeout.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_IO_ERROR</varname></term>
+ <term><constant>SD_BUS_ERROR_IO_ERROR</constant></term>
<listitem><para>Generic input/output error, for example when
accessing a socket or other I/O context.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_BAD_ADDRESS</varname></term>
+ <term><constant>SD_BUS_ERROR_BAD_ADDRESS</constant></term>
<listitem><para>The specified D-Bus bus address string is
malformed.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_NOT_SUPPORTED</varname></term>
+ <term><constant>SD_BUS_ERROR_NOT_SUPPORTED</constant></term>
<listitem><para>The requested operation is not supported on
the local system.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_LIMITS_EXCEEDED</varname></term>
+ <term><constant>SD_BUS_ERROR_LIMITS_EXCEEDED</constant></term>
<listitem><para>Some limited resource has been
exhausted.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_ACCESS_DENIED</varname></term>
+ <term><constant>SD_BUS_ERROR_ACCESS_DENIED</constant></term>
<listitem><para>Access to a resource has been denied due to security restrictions.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_AUTH_FAILED</varname></term>
+ <term><constant>SD_BUS_ERROR_AUTH_FAILED</constant></term>
<listitem><para>Authentication did not complete successfully.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_NO_SERVER</varname></term>
+ <term><constant>SD_BUS_ERROR_NO_SERVER</constant></term>
<listitem><para>Unable to connect to the specified server.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_TIMEOUT</varname></term>
+ <term><constant>SD_BUS_ERROR_TIMEOUT</constant></term>
<listitem><para>An operation timed out. Note that method calls
which timeout generate a
- <varname>SD_BUS_ERROR_NO_REPLY</varname>.</para></listitem>
+ <constant>SD_BUS_ERROR_NO_REPLY</constant>.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_NO_NETWORK</varname></term>
+ <term><constant>SD_BUS_ERROR_NO_NETWORK</constant></term>
<listitem><para>No network available to execute requested network operation on.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_ADDRESS_IN_USE</varname></term>
+ <term><constant>SD_BUS_ERROR_ADDRESS_IN_USE</constant></term>
<listitem><para>The specified network address is already being listened on.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_DISCONNECTED</varname></term>
+ <term><constant>SD_BUS_ERROR_DISCONNECTED</constant></term>
<listitem><para>The connection has been terminated.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_INVALID_ARGS</varname></term>
+ <term><constant>SD_BUS_ERROR_INVALID_ARGS</constant></term>
<listitem><para>One or more invalid arguments have been passed.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_FILE_NOT_FOUND</varname></term>
+ <term><constant>SD_BUS_ERROR_FILE_NOT_FOUND</constant></term>
<listitem><para>The requested file could not be found.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_FILE_EXISTS</varname></term>
+ <term><constant>SD_BUS_ERROR_FILE_EXISTS</constant></term>
<listitem><para>The requested file already exists.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_UNKNOWN_METHOD</varname></term>
+ <term><constant>SD_BUS_ERROR_UNKNOWN_METHOD</constant></term>
<listitem><para>The requested method does not exist in the selected interface.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_UNKNOWN_OBJECT</varname></term>
+ <term><constant>SD_BUS_ERROR_UNKNOWN_OBJECT</constant></term>
<listitem><para>The requested object does not exist in the selected service.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_UNKNOWN_INTERFACE</varname></term>
+ <term><constant>SD_BUS_ERROR_UNKNOWN_INTERFACE</constant></term>
<listitem><para>The requested interface does not exist on the selected object.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_UNKNOWN_PROPERTY</varname></term>
+ <term><constant>SD_BUS_ERROR_UNKNOWN_PROPERTY</constant></term>
<listitem><para>The requested property does not exist in the selected interface.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_PROPERTY_READ_ONLY</varname></term>
+ <term><constant>SD_BUS_ERROR_PROPERTY_READ_ONLY</constant></term>
<listitem><para>A write operation was requested on a read-only property.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_UNIX_PROCESS_ID_UNKNOWN</varname></term>
+ <term><constant>SD_BUS_ERROR_UNIX_PROCESS_ID_UNKNOWN</constant></term>
<listitem><para>The requested PID is not known.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_INVALID_SIGNATURE</varname></term>
+ <term><constant>SD_BUS_ERROR_INVALID_SIGNATURE</constant></term>
<listitem><para>The specified message signature is not
valid.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_INCONSISTENT_MESSAGE</varname></term>
+ <term><constant>SD_BUS_ERROR_INCONSISTENT_MESSAGE</constant></term>
<listitem><para>The passed message does not validate
correctly.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_MATCH_RULE_NOT_FOUND</varname></term>
+ <term><constant>SD_BUS_ERROR_MATCH_RULE_NOT_FOUND</constant></term>
<listitem><para>The specified match rule does not exist.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_MATCH_RULE_INVALID</varname></term>
+ <term><constant>SD_BUS_ERROR_MATCH_RULE_INVALID</constant></term>
<listitem><para>The specified match rule is invalid.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED</varname></term>
+ <term><constant>SD_BUS_ERROR_INTERACTIVE_AUTHORIZATION_REQUIRED</constant></term>
<listitem><para>Access to the requested operation is not
permitted. However, it might be available after interactive
authentication. This is usually returned by method calls
diff --git a/man/sd-login.xml b/man/sd-login.xml
index 83ef0b7307..374395726f 100644
--- a/man/sd-login.xml
+++ b/man/sd-login.xml
@@ -148,7 +148,7 @@
<para>Assignment of hardware devices to seats is managed inside the udev database, via
settings on the devices:</para>
- <variablelist>
+ <variablelist class='udev-directives'>
<varlistentry>
<term>Tag <literal>seat</literal></term>
diff --git a/man/sd_bus_new.xml b/man/sd_bus_new.xml
index 1bc011d70a..cc08e6be17 100644
--- a/man/sd_bus_new.xml
+++ b/man/sd_bus_new.xml
@@ -23,6 +23,8 @@
<refname>sd_bus_ref</refname>
<refname>sd_bus_unref</refname>
<refname>sd_bus_unrefp</refname>
+ <refname>sd_bus_close_unref</refname>
+ <refname>sd_bus_close_unrefp</refname>
<refname>sd_bus_flush_close_unref</refname>
<refname>sd_bus_flush_close_unrefp</refname>
@@ -49,8 +51,8 @@
</funcprototype>
<funcprototype>
- <funcdef>void <function>sd_bus_unrefp</function></funcdef>
- <paramdef>sd_bus **<parameter>busp</parameter></paramdef>
+ <funcdef>sd_bus *<function>sd_bus_close_unref</function></funcdef>
+ <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
</funcprototype>
<funcprototype>
@@ -59,6 +61,16 @@
</funcprototype>
<funcprototype>
+ <funcdef>void <function>sd_bus_unrefp</function></funcdef>
+ <paramdef>sd_bus **<parameter>busp</parameter></paramdef>
+ </funcprototype>
+
+ <funcprototype>
+ <funcdef>void <function>sd_bus_close_unrefp</function></funcdef>
+ <paramdef>sd_bus **<parameter>busp</parameter></paramdef>
+ </funcprototype>
+
+ <funcprototype>
<funcdef>void <function>sd_bus_flush_close_unrefp</function></funcdef>
<paramdef>sd_bus **<parameter>busp</parameter></paramdef>
</funcprototype>
@@ -124,17 +136,25 @@
execute no operation if <emphasis>that</emphasis> is <constant>NULL</constant>.
</para>
- <para><function>sd_bus_flush_close_unref()</function> is similar to <function>sd_bus_unref()</function>, but first
- executes <citerefentry><refentrytitle>sd_bus_flush</refentrytitle><manvolnum>3</manvolnum></citerefentry> as well
- as <citerefentry><refentrytitle>sd_bus_close</refentrytitle><manvolnum>3</manvolnum></citerefentry>, ensuring that
- any pending messages are properly flushed out before the reference to the connection is dropped and possibly the
- object freed. This call is particularly useful immediately before exiting from a program as it ensures that any
- pending outgoing messages are written out, and unprocessed but queued incoming messages released before the
- connection is terminated and released.</para>
-
- <para><function>sd_bus_flush_close_unrefp()</function> is similar to
- <function>sd_bus_flush_close_unref()</function>, but may be used in GCC's and LLVM's Clean-up Variable Attribute,
- see above.</para>
+ <para><function>sd_bus_close_unref()</function> is similar to <function>sd_bus_unref()</function>, but
+ first executes
+ <citerefentry><refentrytitle>sd_bus_close</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+ ensuring that the connection is terminated before the reference to the connection is dropped and possibly
+ the object freed.</para>
+
+ <para><function>sd_bus_flush_close_unref()</function> is similar to <function>sd_bus_unref()</function>,
+ but first executes
+ <citerefentry><refentrytitle>sd_bus_flush</refentrytitle><manvolnum>3</manvolnum></citerefentry> as well
+ as <citerefentry><refentrytitle>sd_bus_close</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+ ensuring that any pending messages are synchronously flushed out before the reference to the connection
+ is dropped and possibly the object freed. This call is particularly useful immediately before exiting
+ from a program as it ensures that any pending outgoing messages are written out, and unprocessed but
+ queued incoming messages released before the connection is terminated and released.</para>
+
+ <para><function>sd_bus_close_unrefp()</function> is similar to
+ <function>sd_bus_close_unref()</function>, but may be used in GCC's and LLVM's Clean-up Variable
+ Attribute, see above. Similarly, <function>sd_bus_flush_close_unrefp()</function> is similar to
+ <function>sd_bus_flush_close_unref()</function>.</para>
</refsect1>
<refsect1>
diff --git a/man/sd_bus_request_name.xml b/man/sd_bus_request_name.xml
index 3c98b60c6a..cf0b552116 100644
--- a/man/sd_bus_request_name.xml
+++ b/man/sd_bus_request_name.xml
@@ -74,23 +74,23 @@
<variablelist>
<varlistentry>
- <term><varname>SD_BUS_NAME_ALLOW_REPLACEMENT</varname></term>
+ <term><constant>SD_BUS_NAME_ALLOW_REPLACEMENT</constant></term>
<listitem><para>After acquiring the name successfully, permit other peers to take over the name when they try
- to acquire it with the <varname>SD_BUS_NAME_REPLACE_EXISTING</varname> flag set. If
- <varname>SD_BUS_NAME_ALLOW_REPLACEMENT</varname> is not set on the original request, such a request by other
+ to acquire it with the <constant>SD_BUS_NAME_REPLACE_EXISTING</constant> flag set. If
+ <constant>SD_BUS_NAME_ALLOW_REPLACEMENT</constant> is not set on the original request, such a request by other
peers will be denied.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_NAME_REPLACE_EXISTING</varname></term>
+ <term><constant>SD_BUS_NAME_REPLACE_EXISTING</constant></term>
<listitem><para>Take over the name if it is already acquired by another peer, and that other peer has permitted
- takeover by setting <varname>SD_BUS_NAME_ALLOW_REPLACEMENT</varname> while acquiring it.</para></listitem>
+ takeover by setting <constant>SD_BUS_NAME_ALLOW_REPLACEMENT</constant> while acquiring it.</para></listitem>
</varlistentry>
<varlistentry>
- <term><varname>SD_BUS_NAME_QUEUE</varname></term>
+ <term><constant>SD_BUS_NAME_QUEUE</constant></term>
<listitem><para>Queue the acquisition of the name when the name is already taken.</para></listitem>
</varlistentry>
@@ -130,7 +130,7 @@
<para>On success, these calls return 0 or a positive integer. On failure, these calls return a negative errno-style
error code.</para>
- <para>If <varname>SD_BUS_NAME_QUEUE</varname> is specified, <function>sd_bus_request_name()</function> will return
+ <para>If <constant>SD_BUS_NAME_QUEUE</constant> is specified, <function>sd_bus_request_name()</function> will return
0 when the name is already taken by another peer and the client has been added to the queue for the name. In that
case, the caller can subscribe to <literal>NameOwnerChanged</literal> signals to be notified when the name is
successfully acquired. <function>sd_bus_request_name()</function> returns &gt; 0 when the name has immediately
diff --git a/man/sd_event_wait.xml b/man/sd_event_wait.xml
index 884996291c..f01d18e94e 100644
--- a/man/sd_event_wait.xml
+++ b/man/sd_event_wait.xml
@@ -157,7 +157,7 @@
<listitem><para>An event source is currently being prepared,
i.e. the preparation handler is currently being executed, as
set with
- <citerefentry><refentrytitle>sd_event_set_prepare</refentrytitle><manvolnum>3</manvolnum></citerefentry>. This
+ <citerefentry><refentrytitle>sd_event_source_set_prepare</refentrytitle><manvolnum>3</manvolnum></citerefentry>. This
state is only seen in the event source preparation handler
that is invoked from the
<function>sd_event_prepare()</function> call and is
diff --git a/man/sd_id128_get_machine.xml b/man/sd_id128_get_machine.xml
index 0884838324..0bfe1b5002 100644
--- a/man/sd_id128_get_machine.xml
+++ b/man/sd_id128_get_machine.xml
@@ -122,8 +122,8 @@
<function>sd_id128_get_machine()</function>,
<function>sd_id128_get_machine_app_specific()</function>, and
<function>sd_id128_get_boot_app_specific()</function> return <constant>-ENOENT</constant> if
- <filename>/etc/machine-id</filename> is missing, and <constant>-ENOMEDIUM</constant> if is empty
- or all zeros.</para>
+ <filename>/etc/machine-id</filename> is missing, and <constant>-ENOMEDIUM</constant> if
+ <filename>/etc/machine-id</filename> is empty or all zeros.</para>
</refsect1>
<xi:include href="libsystemd-pkgconfig.xml" />
diff --git a/man/systemctl.xml b/man/systemctl.xml
index b9077c55a1..08aacd8f41 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -136,6 +136,10 @@
<para>When listing units with <command>list-dependencies</command>, recursively show
dependencies of all dependent units (by default only dependencies of target units are
shown).</para>
+
+ <para>When used with <command>status</command>, show journal messages in full, even if they include
+ unprintable characters or are very long. By default, fields with unprintable characters are
+ abbreviated as "blob data". (Note that the pager may escape unprintable characters again.)</para>
</listitem>
</varlistentry>
diff --git a/man/systemd-boot.xml b/man/systemd-boot.xml
index 44b0f61f22..4c914e6156 100644
--- a/man/systemd-boot.xml
+++ b/man/systemd-boot.xml
@@ -243,7 +243,7 @@
UUID <literal>4a67b082-0a4c-41cf-b6c7-440b29bb8c4</literal>, for communication between the OS and the boot
loader:</para>
- <variablelist>
+ <variablelist class='efi-variables'>
<varlistentry>
<term><varname>LoaderBootCountPath</varname></term>
<listitem><para>If boot counting is enabled, contains the path to the file in whose name the boot counters are
diff --git a/man/systemd-cat.xml b/man/systemd-cat.xml
index 72cd196c4e..446fa4ba31 100644
--- a/man/systemd-cat.xml
+++ b/man/systemd-cat.xml
@@ -93,6 +93,29 @@
</varlistentry>
<varlistentry>
+ <term><option>--stderr-priority=</option></term>
+
+ <listitem><para>Specifies the default priority level for
+ messages from the process's standard error output (stderr).
+ Usage of this option is the same as the
+ <option>--priority=</option> option, above, and both can be
+ used at once. When both are used, <option>--priority=</option>
+ will specify the default priority for standard output (stdout).
+ </para>
+
+ <para>If <option>--stderr-priority=</option> is not specified,
+ messages from stderr will still be logged, with the same
+ default priority level as stdout.</para>
+
+ <para>Also, note that when stdout and stderr use the same
+ default priority, the messages will be strictly ordered,
+ because one channel is used for both. When the default priority
+ differs, two channels are used, and so stdout messages will not
+ be strictly ordered with respect to stderr messages - though
+ they will tend to be approximately ordered.</para></listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><option>--level-prefix=</option></term>
<listitem><para>Controls whether lines read are parsed for
diff --git a/man/systemd-sleep.conf.xml b/man/systemd-sleep.conf.xml
index 96e6d5e452..af61947c5c 100644
--- a/man/systemd-sleep.conf.xml
+++ b/man/systemd-sleep.conf.xml
@@ -112,7 +112,7 @@
<filename>/etc/systemd/sleep.conf</filename> or a
<filename>sleep.conf.d</filename> file:</para>
- <variablelist class='systemd-directives'>
+ <variablelist class='config-directives'>
<varlistentry>
<term><varname>AllowSuspend=</varname></term>
<term><varname>AllowHibernation=</varname></term>
diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
index 35da82ab1a..27242b3a56 100644
--- a/man/systemd-system.conf.xml
+++ b/man/systemd-system.conf.xml
@@ -63,7 +63,7 @@
<para>All options are configured in the
<literal>[Manager]</literal> section:</para>
- <variablelist class='systemd-directives'>
+ <variablelist class='config-directives'>
<varlistentry>
<term><varname>LogLevel=</varname></term>
@@ -251,7 +251,9 @@
<varname>TimeoutStopSec=</varname> and
<varname>RestartSec=</varname> (for services, see
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- for details on the per-unit settings). For non-service units,
+ for details on the per-unit settings). Disabled by default, when
+ service with <varname>Type=oneshot</varname> is used.
+ For non-service units,
<varname>DefaultTimeoutStartSec=</varname> sets the default
<varname>TimeoutSec=</varname>
value. <varname>DefaultTimeoutStartSec=</varname> and
diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml
index 6419bee499..0248c3a8e0 100644
--- a/man/systemd.exec.xml
+++ b/man/systemd.exec.xml
@@ -393,7 +393,7 @@ CapabilityBoundingSet=~CAP_B CAP_C</programlisting>
<refsect1>
<title>Mandatory Access Control</title>
- <variablelist>
+ <variablelist class='unit-directives'>
<varlistentry>
<term><varname>SELinuxContext=</varname></term>
@@ -436,7 +436,7 @@ CapabilityBoundingSet=~CAP_B CAP_C</programlisting>
<refsect1>
<title>Process Properties</title>
- <variablelist>
+ <variablelist class='unit-directives'>
<varlistentry>
<term><varname>LimitCPU=</varname></term>
@@ -671,7 +671,7 @@ CapabilityBoundingSet=~CAP_B CAP_C</programlisting>
<refsect1>
<title>Scheduling</title>
- <variablelist>
+ <variablelist class='unit-directives'>
<varlistentry>
<term><varname>Nice=</varname></term>
@@ -764,7 +764,7 @@ CapabilityBoundingSet=~CAP_B CAP_C</programlisting>
(such as <varname>ProtectSystem=</varname>) are not available, as the underlying kernel functionality is only
accessible to privileged processes.</para>
- <variablelist>
+ <variablelist class='unit-directives'>
<varlistentry>
<term><varname>ProtectSystem=</varname></term>
@@ -820,7 +820,7 @@ CapabilityBoundingSet=~CAP_B CAP_C</programlisting>
names must be relative, and may not include <literal>..</literal>. If set, one or more
directories by the specified names will be created (including their parents) below the locations
defined in the following table, when the unit is started. Also, the corresponding environment variable
- is defined with the full path of directories. If multiple directories are set, then int the environment variable
+ is defined with the full path of directories. If multiple directories are set, then in the environment variable
the paths are concatenated with colon (<literal>:</literal>).</para>
<table>
<title>Automatic directory creation and environment variables</title>
@@ -1279,13 +1279,19 @@ RestrictNamespaces=~cgroup net</programlisting>
<constant>SHM_EXEC</constant> set. Note that this option is incompatible with programs and libraries that
generate program code dynamically at runtime, including JIT execution engines, executable stacks, and code
"trampoline" feature of various C compilers. This option improves service security, as it makes harder for
- software exploits to change running code dynamically. Note that this feature is fully available on x86-64, and
- partially on x86. Specifically, the <function>shmat()</function> protection is not available on x86. Note that
- on systems supporting multiple ABIs (such as x86/x86-64) it is recommended to turn off alternative ABIs for
- services, so that they cannot be used to circumvent the restrictions of this option. Specifically, it is
- recommended to combine this option with <varname>SystemCallArchitectures=native</varname> or similar. If
- running in user mode, or in system mode, but without the <constant>CAP_SYS_ADMIN</constant> capability
- (e.g. setting <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname> is implied.</para></listitem>
+ software exploits to change running code dynamically. However, the protection can be circumvented, if
+ the service can write to a filesystem, which is not mounted with <constant>noexec</constant> (such as
+ <filename>/dev/shm</filename>), or it can use <function>memfd_create()</function>. This can be
+ prevented by making such file systems inaccessible to the service
+ (e.g. <varname>InaccessiblePaths=/dev/shm</varname>) and installing further system call filters
+ (<varname>SystemCallFilter=~memfd_create</varname>). Note that this feature is fully available on
+ x86-64, and partially on x86. Specifically, the <function>shmat()</function> protection is not
+ available on x86. Note that on systems supporting multiple ABIs (such as x86/x86-64) it is
+ recommended to turn off alternative ABIs for services, so that they cannot be used to circumvent the
+ restrictions of this option. Specifically, it is recommended to combine this option with
+ <varname>SystemCallArchitectures=native</varname> or similar. If running in user mode, or in system
+ mode, but without the <constant>CAP_SYS_ADMIN</constant> capability (e.g. setting
+ <varname>User=</varname>), <varname>NoNewPrivileges=yes</varname> is implied.</para></listitem>
</varlistentry>
<varlistentry>
@@ -1382,7 +1388,7 @@ RestrictNamespaces=~cgroup net</programlisting>
<refsect1>
<title>System Call Filtering</title>
- <variablelist>
+ <variablelist class='unit-directives'>
<varlistentry>
<term><varname>SystemCallFilter=</varname></term>
@@ -1621,7 +1627,7 @@ SystemCallErrorNumber=EPERM</programlisting>
<refsect1>
<title>Environment</title>
- <variablelist>
+ <variablelist class='unit-directives'>
<varlistentry>
<term><varname>Environment=</varname></term>
@@ -1736,7 +1742,7 @@ SystemCallErrorNumber=EPERM</programlisting>
<refsect1>
<title>Logging and Standard Input/Output</title>
- <variablelist>
+ <variablelist class='unit-directives'>
<varlistentry>
<term><varname>StandardInput=</varname></term>
@@ -1810,7 +1816,7 @@ SystemCallErrorNumber=EPERM</programlisting>
<option>syslog</option>, <option>kmsg</option>, <option>journal+console</option>,
<option>syslog+console</option>, <option>kmsg+console</option>,
<option>file:<replaceable>path</replaceable></option>, <option>append:<replaceable>path</replaceable></option>,
- <option>socket</option> or<option>fd:<replaceable>name</replaceable></option>.</para>
+ <option>socket</option> or <option>fd:<replaceable>name</replaceable></option>.</para>
<para><option>inherit</option> duplicates the file descriptor of standard input for standard output.</para>
@@ -2078,7 +2084,7 @@ StandardInputData=SWNrIHNpdHplIGRhIHVuJyBlc3NlIEtsb3BzLAp1ZmYgZWVtYWwga2xvcHAncy
<refsect1>
<title>System V Compatibility</title>
- <variablelist>
+ <variablelist class='unit-directives'>
<varlistentry>
<term><varname>UtmpIdentifier=</varname></term>
@@ -2878,7 +2884,8 @@ StandardInputData=SWNrIHNpdHplIGRhIHVuJyBlc3NlIEtsb3BzLAp1ZmYgZWVtYWwga2xvcHAncy
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd-analyze</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/systemd.kill.xml b/man/systemd.kill.xml
index 9b264ecbf5..1b4a4a84a0 100644
--- a/man/systemd.kill.xml
+++ b/man/systemd.kill.xml
@@ -176,7 +176,7 @@
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
- <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>journalctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/systemd.link.xml b/man/systemd.link.xml
index f74edd0186..178f9b81af 100644
--- a/man/systemd.link.xml
+++ b/man/systemd.link.xml
@@ -50,27 +50,21 @@
same name pointing to <filename>/dev/null</filename> disables the
configuration file entirely (it is "masked").</para>
- <para>The link file contains a <literal>[Match]</literal> section,
- which determines if a given link file may be applied to a given
- device, as well as a <literal>[Link]</literal> section specifying
- how the device should be configured. The first (in lexical order)
- of the link files that matches a given device is applied. Note
- that a default file <filename>99-default.link</filename> is
- shipped by the system. Any user-supplied
- <filename>.link</filename> should hence have a lexically earlier
- name to be considered at all.</para>
-
- <para>See
- <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry>
- for diagnosing problems with <filename>.link</filename> files.</para>
+ <para>The link file contains a [Match] section, which determines if a given link file may be applied to a
+ given device, as well as a [Link] section specifying how the device should be configured. The first (in
+ lexical order) of the link files that matches a given device is applied. Note that a default file
+ <filename>99-default.link</filename> is shipped by the system. Any user-supplied
+ <filename>.link</filename> should hence have a lexically earlier name to be considered at all.</para>
+
+ <para>See <citerefentry><refentrytitle>udevadm</refentrytitle><manvolnum>8</manvolnum></citerefentry> for
+ diagnosing problems with <filename>.link</filename> files.</para>
</refsect1>
<refsect1>
<title>[Match] Section Options</title>
- <para>A link file is said to match a device if each of the entries
- in the <literal>[Match]</literal> section matches, or if the
- section is empty. The following keys are accepted:</para>
+ <para>A link file is said to match a device if each of the entries in the [Match] section matches, or if
+ the section is empty. The following keys are accepted:</para>
<variablelist class='network-directives'>
<varlistentry>
@@ -100,18 +94,15 @@
<listitem>
<para>A whitespace-separated list of shell-style globs matching
the persistent path, as exposed by the udev property
- <literal>ID_PATH</literal>.</para>
+ <varname>ID_PATH</varname>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Driver=</varname></term>
<listitem>
- <para>A whitespace-separated list of shell-style globs matching
- the driver currently bound to the device,
- as exposed by the udev property <literal>DRIVER</literal>
- of its parent device, or if that is not set, the
- driver as exposed by <literal>ethtool -i</literal>
- of the device itself.</para>
+ <para>A whitespace-separated list of shell-style globs matching the driver currently bound to the
+ device, as exposed by the udev property <varname>DRIVER</varname> of its parent device, or if that
+ is not set, the driver as exposed by <command>ethtool -i</command> of the device itself.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -119,14 +110,14 @@
<listitem>
<para>A whitespace-separated list of shell-style globs matching
the device type, as exposed by the udev
- property <literal>DEVTYPE</literal>.</para>
+ property <varname>DEVTYPE</varname>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Host=</varname></term>
<listitem>
<para>Matches against the hostname or machine
- ID of the host. See <literal>ConditionHost=</literal> in
+ ID of the host. See <varname>ConditionHost=</varname> in
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details.</para>
</listitem>
@@ -137,7 +128,7 @@
<para>Checks whether the system is executed in
a virtualized environment and optionally test
whether it is a specific implementation. See
- <literal>ConditionVirtualization=</literal> in
+ <varname>ConditionVirtualization=</varname> in
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details.</para>
</listitem>
@@ -147,7 +138,7 @@
<listitem>
<para>Checks whether a specific kernel command line option
is set (or if prefixed with the exclamation mark unset). See
- <literal>ConditionKernelCommandLine=</literal> in
+ <varname>ConditionKernelCommandLine=</varname> in
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details.</para>
</listitem>
@@ -157,7 +148,7 @@
<listitem>
<para>Checks whether the kernel version (as reported by <command>uname -r</command>) matches a certain
expression (or if prefixed with the exclamation mark does not match it). See
- <literal>ConditionKernelVersion=</literal> in
+ <varname>ConditionKernelVersion=</varname> in
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
details.
</para>
@@ -167,7 +158,7 @@
<term><varname>Architecture=</varname></term>
<listitem>
<para>Checks whether the system is running on a specific
- architecture. See <literal>ConditionArchitecture=</literal>
+ architecture. See <varname>ConditionArchitecture=</varname>
in
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for details.</para>
@@ -180,7 +171,7 @@
<refsect1>
<title>[Link] Section Options</title>
- <para>The <literal>[Link]</literal> section accepts the following
+ <para>The [Link] section accepts the following
keys:</para>
<variablelist class='network-directives'>
@@ -193,8 +184,7 @@
<varlistentry>
<term><varname>Alias=</varname></term>
<listitem>
- <para>The <literal>ifalias</literal> is set to this
- value.</para>
+ <para>The <varname>ifalias</varname> interface property is set to this value.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -206,7 +196,7 @@
<variablelist>
<varlistentry>
- <term><literal>persistent</literal></term>
+ <term><option>persistent</option></term>
<listitem>
<para>If the hardware has a persistent MAC address, as
most hardware should, and if it is used by the kernel,
@@ -220,7 +210,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>random</literal></term>
+ <term><option>random</option></term>
<listitem>
<para>If the kernel is using a random MAC address,
nothing is done. Otherwise, a new address is randomly
@@ -231,7 +221,7 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>none</literal></term>
+ <term><option>none</option></term>
<listitem>
<para>Keeps the MAC address assigned by the kernel.</para>
</listitem>
@@ -243,28 +233,23 @@
<term><varname>MACAddress=</varname></term>
<listitem>
<para>The MAC address to use, if no
- <literal>MACAddressPolicy=</literal>
+ <varname>MACAddressPolicy=</varname>
is specified.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>NamePolicy=</varname></term>
<listitem>
- <para>An ordered, space-separated list of policies by which
- the interface name should be set.
- <literal>NamePolicy</literal> may be disabled by specifying
- <literal>net.ifnames=0</literal> on the kernel command line.
- Each of the policies may fail, and the first successful one
- is used. The name is not set directly, but is exported to
- udev as the property <literal>ID_NET_NAME</literal>, which
- is, by default, used by a udev rule to set
- <literal>NAME</literal>. If the name has already been set by
- userspace, no renaming is performed. The available policies
- are:</para>
+ <para>An ordered, space-separated list of policies by which the interface name should be set.
+ <varname>NamePolicy=</varname> may be disabled by specifying <option>net.ifnames=0</option> on the
+ kernel command line. Each of the policies may fail, and the first successful one is used. The name
+ is not set directly, but is exported to udev as the property <option>ID_NET_NAME</option>, which
+ is, by default, used by a udev rule to set <varname>NAME</varname>. The available policies are:
+ </para>
<variablelist>
<varlistentry>
- <term><literal>kernel</literal></term>
+ <term><option>kernel</option></term>
<listitem>
<para>If the kernel claims that the name it has set
for a device is predictable, then no renaming is
@@ -272,46 +257,53 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>database</literal></term>
+ <term><option>database</option></term>
<listitem>
<para>The name is set based on entries in the udev's
Hardware Database with the key
- <literal>ID_NET_NAME_FROM_DATABASE</literal>.
+ <varname>ID_NET_NAME_FROM_DATABASE</varname>.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>onboard</literal></term>
+ <term><option>onboard</option></term>
<listitem>
<para>The name is set based on information given by
the firmware for on-board devices, as exported by the
- udev property <literal>ID_NET_NAME_ONBOARD</literal>.
+ udev property <varname>ID_NET_NAME_ONBOARD</varname>.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>slot</literal></term>
+ <term><option>slot</option></term>
<listitem>
<para>The name is set based on information given by
the firmware for hot-plug devices, as exported by the
- udev property <literal>ID_NET_NAME_SLOT</literal>.
+ udev property <varname>ID_NET_NAME_SLOT</varname>.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>path</literal></term>
+ <term><option>path</option></term>
<listitem>
<para>The name is set based on the device's physical
location, as exported by the udev property
- <literal>ID_NET_NAME_PATH</literal>.</para>
+ <varname>ID_NET_NAME_PATH</varname>.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>mac</literal></term>
+ <term><option>mac</option></term>
<listitem>
<para>The name is set based on the device's persistent
MAC address, as exported by the udev property
- <literal>ID_NET_NAME_MAC</literal>.</para>
+ <varname>ID_NET_NAME_MAC</varname>.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><option>keep</option></term>
+ <listitem>
+ <para>If the device already had a name given by userspace (as part of creation of the device
+ or a rename), keep it.</para>
</listitem>
</varlistentry>
</variablelist>
@@ -356,9 +348,8 @@
<varlistentry>
<term><varname>Duplex=</varname></term>
<listitem>
- <para>The duplex mode to set for the device. The accepted
- values are <literal>half</literal> and
- <literal>full</literal>.</para>
+ <para>The duplex mode to set for the device. The accepted values are <option>half</option> and
+ <option>full</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -369,8 +360,8 @@
common transmission parameters, such as speed, duplex mode, and flow control.
When unset, the kernel's default will be used.</para>
- <para>Note that if autonegotiation is enabled, speed, duplex and advertise settings are
- read-only. If autonegotation is disabled, speed, duplex and advertise settings are writable
+ <para>Note that if autonegotiation is enabled, speed and duplex settings are
+ read-only. If autonegotation is disabled, speed and duplex settings are writable
if the driver supports multiple link modes.</para>
</listitem>
</varlistentry>
@@ -382,58 +373,58 @@
<variablelist>
<varlistentry>
- <term><literal>phy</literal></term>
+ <term><option>phy</option></term>
<listitem>
<para>Wake on PHY activity.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>unicast</literal></term>
+ <term><option>unicast</option></term>
<listitem>
<para>Wake on unicast messages.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>multicast</literal></term>
+ <term><option>multicast</option></term>
<listitem>
<para>Wake on multicast messages.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>broadcast</literal></term>
+ <term><option>broadcast</option></term>
<listitem>
<para>Wake on broadcast messages.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>arp</literal></term>
+ <term><option>arp</option></term>
<listitem>
<para>Wake on ARP.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>magic</literal></term>
+ <term><option>magic</option></term>
<listitem>
<para>Wake on receipt of a magic packet.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>secureon</literal></term>
+ <term><option>secureon</option></term>
<listitem>
<para>Enable secureon(tm) password for MagicPacket(tm).
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>off</literal></term>
+ <term><option>off</option></term>
<listitem>
<para>Never wake.</para>
</listitem>
</varlistentry>
</variablelist>
- <para>Defaults to <literal>off</literal>.</para>
+ <para>Defaults to <option>off</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -444,32 +435,32 @@
<variablelist>
<varlistentry>
- <term><literal>tp</literal></term>
+ <term><option>tp</option></term>
<listitem>
<para>An Ethernet interface using Twisted-Pair cable as the medium.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>aui</literal></term>
+ <term><option>aui</option></term>
<listitem>
<para>Attachment Unit Interface (AUI). Normally used with hubs.
</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>bnc</literal></term>
+ <term><option>bnc</option></term>
<listitem>
<para>An Ethernet interface using BNC connectors and co-axial cable.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>mii</literal></term>
+ <term><option>mii</option></term>
<listitem>
<para>An Ethernet interface using a Media Independent Interface (MII).</para>
</listitem>
</varlistentry>
<varlistentry>
- <term><literal>fibre</literal></term>
+ <term><option>fibre</option></term>
<listitem>
<para>An Ethernet interface using Optical Fibre as the medium.</para>
</listitem>
@@ -481,7 +472,7 @@
<term><varname>Advertise=</varname></term>
<listitem>
<para>This sets what speeds and duplex modes of operation are advertised for auto-negotiation.
- The supported values are:
+ This implies <literal>AutoNegotiation=yes</literal>. The supported values are:
<table>
<title>Supported advertise values</title>
@@ -496,47 +487,46 @@
<entry>Duplex Mode</entry>
</row></thead>
<tbody>
-
- <row><entry><literal>10baset-half</literal></entry>
+ <row><entry><option>10baset-half</option></entry>
<entry>10</entry><entry>half</entry></row>
- <row><entry><literal>10baset-full</literal></entry>
+ <row><entry><option>10baset-full</option></entry>
<entry>10</entry><entry>full</entry></row>
- <row><entry><literal>100baset-half</literal></entry>
+ <row><entry><option>100baset-half</option></entry>
<entry>100</entry><entry>half</entry></row>
- <row><entry><literal>100baset-full</literal></entry>
+ <row><entry><option>100baset-full</option></entry>
<entry>100</entry><entry>full</entry></row>
- <row><entry><literal>1000baset-half</literal></entry>
+ <row><entry><option>1000baset-half</option></entry>
<entry>1000</entry><entry>half</entry></row>
- <row><entry><literal>1000baset-full</literal></entry>
+ <row><entry><option>1000baset-full</option></entry>
<entry>1000</entry><entry>full</entry></row>
- <row><entry><literal>10000baset-full</literal></entry>
+ <row><entry><option>10000baset-full</option></entry>
<entry>10000</entry><entry>full</entry></row>
- <row><entry><literal>2500basex-full</literal></entry>
+ <row><entry><option>2500basex-full</option></entry>
<entry>2500</entry><entry>full</entry></row>
- <row><entry><literal>1000basekx-full</literal></entry>
+ <row><entry><option>1000basekx-full</option></entry>
<entry>1000</entry><entry>full</entry></row>
- <row><entry><literal>10000basekx4-full</literal></entry>
+ <row><entry><option>10000basekx4-full</option></entry>
<entry>10000</entry><entry>full</entry></row>
- <row><entry><literal>10000basekr-full</literal></entry>
+ <row><entry><option>10000basekr-full</option></entry>
<entry>10000</entry><entry>full</entry></row>
- <row><entry><literal>10000baser-fec</literal></entry>
+ <row><entry><option>10000baser-fec</option></entry>
<entry>10000</entry><entry>full</entry></row>
- <row><entry><literal>20000basemld2-full</literal></entry>
+ <row><entry><option>20000basemld2-full</option></entry>
<entry>20000</entry><entry>full</entry></row>
- <row><entry><literal>20000basekr2-full</literal></entry>
+ <row><entry><option>20000basekr2-full</option></entry>
<entry>20000</entry><entry>full</entry></row>
</tbody>
</tgroup>
diff --git a/man/systemd.mount.xml b/man/systemd.mount.xml
index 6d8c873ca5..61e97b14f2 100644
--- a/man/systemd.mount.xml
+++ b/man/systemd.mount.xml
@@ -131,11 +131,15 @@
<filename>umount.target</filename> in order to be stopped during shutdown.</para></listitem>
<listitem><para>Mount units referring to local file systems automatically gain
- an <varname>After=</varname> dependency on <filename>local-fs-pre.target</filename>.</para></listitem>
+ an <varname>After=</varname> dependency on <filename>local-fs-pre.target</filename>, and a
+ <varname>Before=</varname> dependency on <filename>local-fs.target</filename> unless
+ <option>nofail</option> mount option is set.</para></listitem>
<listitem><para>Network mount units
automatically acquire <varname>After=</varname> dependencies on <filename>remote-fs-pre.target</filename>,
- <filename>network.target</filename> and <filename>network-online.target</filename>. Towards the latter a
+ <filename>network.target</filename> and <filename>network-online.target</filename>, and gain a
+ <varname>Before=</varname> dependency on <filename>remote-fs.target</filename> unless
+ <option>nofail</option> mount option is set. Towards the latter a
<varname>Wants=</varname> unit is added as well.</para></listitem>
</itemizedlist>
@@ -506,9 +510,9 @@
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>.)
Takes a unit-less value in seconds, or a time span value such
as "5min 20s". Pass 0 to disable the timeout logic. The
- default value is set from the manager configuration file's
- <varname>DefaultTimeoutStartSec=</varname>
- variable.</para></listitem>
+ default value is set from <varname>DefaultTimeoutStartSec=</varname> option in
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para></listitem>
</varlistentry>
</variablelist>
@@ -524,6 +528,7 @@
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
index e17c1e3fbe..74281f2d0b 100644
--- a/man/systemd.netdev.xml
+++ b/man/systemd.netdev.xml
@@ -287,15 +287,15 @@
<varlistentry>
<term><varname>MACAddress=</varname></term>
<listitem>
- <para>The MAC address to use for the device. If none is
- given, one is generated based on the interface name and
- the
- <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
- For <literal>tun</literal> or <literal>tap</literal> devices, <varname>MACAddress=</varname> setting
- is not currently supported in <literal>[NetDev]</literal> section. Please specify it in
- <literal>[Link]</literal> section of corresponding
+ <para>The MAC address to use for the device. For <literal>tun</literal> or <literal>tap</literal>
+ devices, setting <varname>MACAddress=</varname> in the <literal>[NetDev]</literal> section is not
+ supported. Please specify it in <literal>[Link]</literal> section of the corresponding
<citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
- files.</para>
+ file. If this option is not set, <literal>vlan</literal> devices inherit the MAC address of the
+ physical interface. For other kind of netdevs, if this option is not set, then MAC address is
+ generated based on the interface name and the
+ <citerefentry><refentrytitle>machine-id</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
+ </para>
</listitem>
</varlistentry>
</variablelist>
@@ -899,15 +899,15 @@
<varlistentry>
<term><varname>FOUDestinationPort=</varname></term>
<listitem>
- <para>The <varname>FOUDestinationPort=</varname> specifies the UDP destination port for encapsulation.
+ <para>This setting specifies the UDP destination port for encapsulation.
This field is mandatory and is not set by default.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>FOUSourcePort=</varname></term>
<listitem>
- <para>The <constant>FOUSourcePort=</constant> specifies the UDP source port for encapsulation. Defaults to <varname>0</varname>,
- that is, the source port for packets is left to the network stack to decide.</para>
+ <para>This setting specifies the UDP source port for encapsulation. Defaults to <constant>0</constant>
+ — that is, the source port for packets is left to the network stack to decide.</para>
</listitem>
</varlistentry>
<varlistentry>
diff --git a/man/systemd.nspawn.xml b/man/systemd.nspawn.xml
index f978fef235..7924641df9 100644
--- a/man/systemd.nspawn.xml
+++ b/man/systemd.nspawn.xml
@@ -112,7 +112,7 @@
<para>Settings files may include an <literal>[Exec]</literal>
section, which carries various execution parameters:</para>
- <variablelist>
+ <variablelist class='nspawn-directives'>
<varlistentry>
<term><varname>Boot=</varname></term>
@@ -374,7 +374,7 @@
section, which carries various parameters configuring the file
system of the container:</para>
- <variablelist>
+ <variablelist class='nspawn-directives'>
<varlistentry>
<term><varname>ReadOnly=</varname></term>
@@ -458,7 +458,7 @@
section, which carries various parameters configuring the network
connectivity of the container:</para>
- <variablelist>
+ <variablelist class='nspawn-directives'>
<varlistentry>
<term><varname>Private=</varname></term>
diff --git a/man/systemd.resource-control.xml b/man/systemd.resource-control.xml
index aa7d9bcd59..a4d793c32e 100644
--- a/man/systemd.resource-control.xml
+++ b/man/systemd.resource-control.xml
@@ -907,6 +907,7 @@
<title>See Also</title>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/systemd.service.xml b/man/systemd.service.xml
index ad04efeb34..f0f9aee154 100644
--- a/man/systemd.service.xml
+++ b/man/systemd.service.xml
@@ -1416,6 +1416,7 @@ WantedBy=multi-user.target</programlisting>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/systemd.socket.xml b/man/systemd.socket.xml
index fb51ef6658..7547071e9e 100644
--- a/man/systemd.socket.xml
+++ b/man/systemd.socket.xml
@@ -853,6 +853,7 @@
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/systemd.swap.xml b/man/systemd.swap.xml
index 073c2b3a27..cf00451501 100644
--- a/man/systemd.swap.xml
+++ b/man/systemd.swap.xml
@@ -245,6 +245,7 @@
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index 7e1b3cb7eb..f21f9eae44 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -1842,6 +1842,7 @@ PrivateTmp=yes</programlisting>
<para>
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+ <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.special</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
<citerefentry><refentrytitle>systemd.socket</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
diff --git a/man/systemd.xml b/man/systemd.xml
index 49a29f9651..5287bdaba8 100644
--- a/man/systemd.xml
+++ b/man/systemd.xml
@@ -396,7 +396,7 @@
loaded into memory are those for which at least one of the following conditions is true:</para>
<orderedlist>
- <listitem><para>It is in an active, activating, deactivating or failed state (i.e. in any unit state except for <literal>dead</literal>)</para></listitem>
+ <listitem><para>It is in an active, activating, deactivating or failed state (i.e. in any unit state except for <literal>inactive</literal>)</para></listitem>
<listitem><para>It has a job queued for it</para></listitem>
<listitem><para>It is a dependency of some sort of at least one other unit that is loaded into memory</para></listitem>
<listitem><para>It has some form of resource still allocated (e.g. a service unit that is inactive but for which
@@ -453,6 +453,17 @@
verify that it makes sense, fixing it if possible, and only
failing if it really cannot work.</para>
+ <para>Note that transactions are generated independently of a unit's
+ state at runtime, hence, for example, if a start job is requested on an
+ already started unit, it will still generate a transaction and wake up any
+ inactive dependencies (and cause propagation of other jobs as per the
+ defined relationships). This is because the enqueued job is at the time of
+ execution compared to the target unit's state and is marked successful and
+ complete when both satisfy. However, this job also pulls in other
+ dependencies due to the defined relationships and thus leads to, in our
+ our example, start jobs for any of those inactive units getting queued as
+ well.</para>
+
<para>systemd contains native implementations of various tasks
that need to be executed as part of the boot process. For example,
it sets the hostname or configures the loopback network device. It
diff --git a/man/timedatectl.xml b/man/timedatectl.xml
index a62902423a..b75b4cc72a 100644
--- a/man/timedatectl.xml
+++ b/man/timedatectl.xml
@@ -82,7 +82,7 @@
<varlistentry>
<term><option>-a</option></term>
- <term><option>-all</option></term>
+ <term><option>--all</option></term>
<listitem><para>When showing properties of
<citerefentry><refentrytitle>systemd-timesyncd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
diff --git a/man/tmpfiles.d.xml b/man/tmpfiles.d.xml
index 5d393f3984..3f2ef7ee97 100644
--- a/man/tmpfiles.d.xml
+++ b/man/tmpfiles.d.xml
@@ -282,11 +282,11 @@ L /tmp/foobar - - - - /dev/null</programlisting>
<varlistentry>
<term><varname>C</varname></term>
<listitem><para>Recursively copy a file or directory, if the
- destination files or directories do not exist yet. Note that
- this command will not descend into subdirectories if the
- destination directory already exists. Instead, the entire
- copy operation is skipped. If the argument is omitted, files
- from the source directory
+ destination files or directories do not exist yet or the
+ destination directory is empty. Note that this command will not
+ descend into subdirectories if the destination directory already
+ exists and is not empty. Instead, the entire copy operation is
+ skipped. If the argument is omitted, files from the source directory
<filename>/usr/share/factory/</filename> with the same name
are copied. Does not follow symlinks.</para></listitem>
</varlistentry>
@@ -420,7 +420,7 @@ L /tmp/foobar - - - - /dev/null</programlisting>
</varlistentry>
</variablelist>
- <para>If the exclamation mark is used, this line is only safe of
+ <para>If the exclamation mark is used, this line is only safe to
execute during boot, and can break a running system. Lines
without the exclamation mark are presumed to be safe to execute
at any time, e.g. on package upgrades.
diff --git a/man/udev.conf.xml b/man/udev.conf.xml
index 23a4595fa9..d1878f8c6f 100644
--- a/man/udev.conf.xml
+++ b/man/udev.conf.xml
@@ -40,7 +40,7 @@
ignored. The following variables can be set:
</para>
- <variablelist>
+ <variablelist class='config-directives'>
<varlistentry>
<term><varname>udev_log=</varname></term>
diff --git a/man/udev.xml b/man/udev.xml
index 08fedfc86c..74aab8e024 100644
--- a/man/udev.xml
+++ b/man/udev.xml
@@ -566,6 +566,18 @@
<para>Disable the watching of a device node with inotify.</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>db_persist</option></term>
+ <listitem>
+ <para>Set the flag (sticky bit) on the udev database entry
+ of the event device. Device properties are then kept in the
+ database even when
+ <command>udevadm info --cleanup-db</command> is called.
+ This option can be useful in certain cases
+ (e.g. Device Mapper devices) for persisting device state
+ on the transition from initramfs.</para>
+ </listitem>
+ </varlistentry>
</variablelist>
</listitem>
</varlistentry>
diff --git a/man/udev_device_has_tag.xml b/man/udev_device_has_tag.xml
index f34ae9ed37..e27b770215 100644
--- a/man/udev_device_has_tag.xml
+++ b/man/udev_device_has_tag.xml
@@ -109,12 +109,19 @@
<function>udev_device_get_property_value()</function> and
<function>udev_device_get_sysattr_value()</function> return a
pointer to a constant string of the requested value. On error,
- <constant>NULL</constant> is returned.</para>
+ <constant>NULL</constant> is returned. Attributes that may
+ contain <constant>NUL</constant> bytes should not be retrieved
+ with <function>udev_device_get_sysattr_value()</function>;
+ instead, read them directly from the files within the device's
+ <property>syspath</property>.</para>
<para>On success,
<function>udev_device_set_sysattr_value()</function> returns
an integer greater than, or equal to, <constant>0</constant>.
- On failure, a negative error code is returned.</para>
+ On failure, a negative error code is returned. Values that
+ contain <constant>NUL</constant> bytes should not be set with
+ this function; instead, write them directly to the files within
+ the device's <property>syspath</property>.</para>
<para>On success, <function>udev_device_has_tag()</function>
returns <constant>1</constant> or <constant>0</constant>,
diff --git a/man/udevadm.xml b/man/udevadm.xml
index 44be7b3f89..b7a2494f83 100644
--- a/man/udevadm.xml
+++ b/man/udevadm.xml
@@ -143,22 +143,25 @@
<term><option>-x</option></term>
<term><option>--export</option></term>
<listitem>
- <para>Print output as key/value pairs. Values are enclosed in single quotes.</para>
+ <para>Print output as key/value pairs. Values are enclosed in single quotes.
+ This takes effects only when <option>--query=property</option> or
+ <option>--device-id-of-file=<replaceable>FILE</replaceable></option> is specified.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-P</option></term>
<term><option>--export-prefix=<replaceable>NAME</replaceable></option></term>
<listitem>
- <para>Add a prefix to the key name of exported values.</para>
+ <para>Add a prefix to the key name of exported values.
+ This implies <option>--export</option>.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-d</option></term>
<term><option>--device-id-of-file=<replaceable>FILE</replaceable></option></term>
<listitem>
- <para>Print major/minor numbers of the underlying device, where the file
- lives on.</para>
+ <para>Print major/minor numbers of the underlying device, where the file lives on.
+ If this is specified, all positional arguments are ignored.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -182,11 +185,11 @@
<refsect2><title>udevadm trigger
<arg choice="opt"><replaceable>options</replaceable></arg>
- <arg choice="opt" rep="repeat"><replaceable>devpath</replaceable>|<replaceable>file</replaceable>|<replaceable>unit</replaceable></arg>
+ <arg choice="opt"><replaceable>devpath</replaceable>|<replaceable>file</replaceable>|<replaceable>unit</replaceable></arg>
</title>
<para>Request device events from the kernel. Primarily used to replay events at system coldplug time.</para>
- <para>Takes one or more device specifications as arguments. See the description of <command>info</command>
+ <para>Takes a device specification as a positional argument. See the description of <command>info</command>
above.</para>
<variablelist>
@@ -226,8 +229,9 @@
<term><option>--subsystem-match=<replaceable>SUBSYSTEM</replaceable></option></term>
<listitem>
<para>Trigger events for devices which belong to a
- matching subsystem. This option can be specified multiple
- times and supports shell style pattern matching.</para>
+ matching subsystem. This option supports shell style pattern matching.
+ When this option is specified more than once, then each matching result is ORed, that is,
+ all the devices in each subsystem are triggered.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -235,77 +239,74 @@
<term><option>--subsystem-nomatch=<replaceable>SUBSYSTEM</replaceable></option></term>
<listitem>
<para>Do not trigger events for devices which belong to a matching subsystem. This option
- can be specified multiple times and supports shell style pattern matching.</para>
+ supports shell style pattern matching. When this option is specified more than once,
+ then each matching result is ANDed, that is, devices which do not match all specified
+ subsystems are triggered.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-a</option></term>
<term><option>--attr-match=<replaceable>ATTRIBUTE</replaceable>=<replaceable>VALUE</replaceable></option></term>
<listitem>
- <para>Trigger events for devices with a matching sysfs
- attribute. If a value is specified along with the
- attribute name, the content of the attribute is matched
- against the given value using shell style pattern
- matching. If no value is specified, the existence of the
- sysfs attribute is checked. This option can be specified
- multiple times.</para>
+ <para>Trigger events for devices with a matching sysfs attribute. If a value is specified along
+ with the attribute name, the content of the attribute is matched against the given value using
+ shell style pattern matching. If no value is specified, the existence of the sysfs attribute is
+ checked. When this option is specified multiple times, then each matching result is ANDed,
+ that is, only devices which have all specified attributes are triggered.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-A</option></term>
<term><option>--attr-nomatch=<replaceable>ATTRIBUTE</replaceable>=<replaceable>VALUE</replaceable></option></term>
<listitem>
- <para>Do not trigger events for devices with a matching
- sysfs attribute. If a value is specified along with the
- attribute name, the content of the attribute is matched
- against the given value using shell style pattern
- matching. If no value is specified, the existence of the
- sysfs attribute is checked. This option can be specified
- multiple times.</para>
+ <para>Do not trigger events for devices with a matching sysfs attribute. If a value is specified
+ along with the attribute name, the content of the attribute is matched against the given value
+ using shell style pattern matching. If no value is specified, the existence of the sysfs attribute
+ is checked. When this option is specified multiple times, then each matching result is ANDed,
+ that is, only devices which have none of the specified attributes are triggered.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-p</option></term>
<term><option>--property-match=<replaceable>PROPERTY</replaceable>=<replaceable>VALUE</replaceable></option></term>
<listitem>
- <para>Trigger events for devices with a matching property
- value. This option can be specified multiple times and
- supports shell style pattern matching.</para>
+ <para>Trigger events for devices with a matching property value. This option supports shell style
+ pattern matching. When this option is specified more than once, then each matching result is ORed,
+ that is, devices which have one of the specified properties are triggered.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-g</option></term>
<term><option>--tag-match=<replaceable>PROPERTY</replaceable></option></term>
<listitem>
- <para>Trigger events for devices with a matching tag. This
- option can be specified multiple times.</para>
+ <para>Trigger events for devices with a matching tag. When this option is specified multiple times,
+ then each matching result is ANDed, that is, devices which have all specified tags are triggered.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-y</option></term>
- <term><option>--sysname-match=<replaceable>PATH</replaceable></option></term>
+ <term><option>--sysname-match=<replaceable>NAME</replaceable></option></term>
<listitem>
- <para>Trigger events for devices for which the last component
- (i.e. the filename) of the <filename>/sys</filename> path matches
- the specified <replaceable>PATH</replaceable>. This option can be
- specified multiple times and also supports shell style pattern
- matching.</para>
+ <para>Trigger events for devices for which the last component (i.e. the filename) of the
+ <filename>/sys</filename> path matches the specified <replaceable>PATH</replaceable>. This option
+ supports shell style pattern matching. When this option is specified more than once, then each
+ matching result is ORed, that is, all devices which have any of the specified
+ <replaceable>NAME</replaceable> are triggered.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>--name-match=<replaceable>NAME</replaceable></option></term>
<listitem>
- <para>Trigger events for devices with a matching
- device path. This option can be specified multiple
- times.</para>
+ <para>Trigger events for devices with a matching device path. When this option is specified more than once,
+ the last <replaceable>NAME</replaceable> is used.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-b</option></term>
<term><option>--parent-match=<replaceable>SYSPATH</replaceable></option></term>
<listitem>
- <para>Trigger events for all children of a given
- device.</para>
+ <para>Trigger events for all children of a given device. When this option is specified more than once,
+ the last <replaceable>NAME</replaceable> is used.</para>
</listitem>
</varlistentry>
<varlistentry>
@@ -319,12 +320,20 @@
the same command to finish.</para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>--wait-daemon[=<replaceable>SECONDS</replaceable>]</option></term>
+ <listitem>
+ <para>Before triggering uevents, wait for systemd-udevd daemon to be initialized.
+ Optionally takes timeout value. Default timeout is 5 seconds. This is equivalent to invoke
+ invoking <command>udevadm control --ping</command> before <command>udevadm trigger</command>.</para>
+ </listitem>
+ </varlistentry>
<xi:include href="standard-options.xml" xpointer="help" />
</variablelist>
- <para>In addition, optional positional arguments can be used
- to specify device names or sys paths. They must start with
+ <para>In addition, an optional positional argument can be used
+ to specify device name or sys path. It must start with
<filename>/dev</filename> or <filename>/sys</filename>
respectively.</para>
</refsect2>
@@ -363,7 +372,11 @@
<term><option>-e</option></term>
<term><option>--exit</option></term>
<listitem>
- <para>Signal and wait for systemd-udevd to exit.</para>
+ <para>Signal and wait for systemd-udevd to exit. Note that <filename>systemd-udevd.service</filename>
+ contains <option>Restart=always</option> and so as a result, this option restarts systemd-udevd.
+ If you want to stop <filename>systemd-udevd.service</filename>, please use the following:
+ <programlisting>systemctl stop systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-udevd.service</programlisting>
+ </para>
</listitem>
</varlistentry>
<varlistentry>
@@ -420,6 +433,13 @@
</listitem>
</varlistentry>
<varlistentry>
+ <term><option>--ping</option></term>
+ <listitem>
+ <para>Send a ping message to systemd-udevd and wait for the reply. This may be useful to check that
+ systemd-udevd daemon is running.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><option>-t</option></term>
<term><option>--timeout=</option><replaceable>seconds</replaceable></term>
<listitem>
@@ -464,14 +484,18 @@
<term><option>-s</option></term>
<term><option>--subsystem-match=<replaceable>string[/string]</replaceable></option></term>
<listitem>
- <para>Filter kernel uevents and udev events by subsystem[/devtype]. Only events with a matching subsystem value will pass.</para>
+ <para>Filter kernel uevents and udev events by subsystem[/devtype]. Only events with a matching subsystem value will pass.
+ When this option is specified more than once, then each matching result is ORed, that is, all devices in the specified
+ subsystems are monitored.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-t</option></term>
<term><option>--tag-match=<replaceable>string</replaceable></option></term>
<listitem>
- <para>Filter udev events by tag. Only udev events with a given tag attached will pass.</para>
+ <para>Filter udev events by tag. Only udev events with a given tag attached will pass.
+ When this option is specified more than once, then each matching result is ORed, that is, devices which have one of the
+ specified tags are monitored.</para>
</listitem>
</varlistentry>
diff --git a/man/vconsole.conf.xml b/man/vconsole.conf.xml
index fc8b2cb3ef..a0ca83507d 100644
--- a/man/vconsole.conf.xml
+++ b/man/vconsole.conf.xml
@@ -68,7 +68,7 @@
<para>The following options are understood:</para>
- <variablelist>
+ <variablelist class='environment-variables'>
<varlistentry>
<term><varname>KEYMAP=</varname></term>
diff --git a/meson.build b/meson.build
index b338886c38..56c98b9c1b 100644
--- a/meson.build
+++ b/meson.build
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: LGPL-2.1+
project('systemd', 'c',
- version : '240',
+ version : '241',
license : 'LGPLv2+',
default_options: [
'c_std=gnu99',
@@ -12,20 +12,19 @@ project('systemd', 'c',
meson_version : '>= 0.46',
)
-libsystemd_version = '0.24.0'
-libudev_version = '1.6.12'
+libsystemd_version = '0.25.0'
+libudev_version = '1.6.13'
# We need the same data in two different formats, ugh!
# Also, for hysterical reasons, we use different variable
# names, sometimes. Not all variables are included in every
# set. Ugh, ugh, ugh!
conf = configuration_data()
-conf.set_quoted('PACKAGE_STRING', meson.project_name() + ' ' + meson.project_version())
-conf.set_quoted('PACKAGE_VERSION', meson.project_version())
+conf.set('PROJECT_VERSION', meson.project_version())
substs = configuration_data()
-substs.set('PACKAGE_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
-substs.set('PACKAGE_VERSION', meson.project_version())
+substs.set('PROJECT_URL', 'https://www.freedesktop.org/wiki/Software/systemd')
+substs.set('PROJECT_VERSION', meson.project_version())
want_ossfuzz = get_option('oss-fuzz')
want_libfuzzer = get_option('llvm-fuzz')
@@ -287,10 +286,8 @@ want_tests = get_option('tests')
slow_tests = want_tests != 'false' and get_option('slow-tests')
install_tests = get_option('install-tests')
-cxx = find_program('c++', required : fuzzer_build)
-if cxx.found()
+if add_languages('cpp', required : fuzzer_build)
# Used only for tests
- add_languages('cpp')
cxx_cmd = ' '.join(meson.get_compiler('cpp').cmd_array())
else
cxx_cmd = ''
@@ -362,13 +359,6 @@ possible_link_flags = [
'-Wl,-z,now',
]
-# the oss-fuzz fuzzers are not built with -fPIE, so don't
-# enable it when we are linking against them
-if not fuzzer_build
- possible_cc_flags += '-fPIE'
- possible_link_flags += '-pie'
-endif
-
if cc.get_id() == 'clang'
possible_cc_flags += [
'-Wno-typedef-redefinition',
@@ -486,6 +476,7 @@ foreach decl : [['ETHTOOL_LINK_MODE_10baseT_Half_BIT', 'linux/ethtool.h'],
['IFLA_TARGET_NETNSID', 'linux/if_link.h'],
['IFLA_NEW_IFINDEX', 'linux/if_link.h'],
['IFLA_MAX_MTU', 'linux/if_link.h'],
+ ['IFLA_BOND_MODE', 'linux/if_link.h'],
['IFLA_BOND_ACTIVE_SLAVE', 'linux/if_link.h'],
['IFLA_BOND_AD_INFO', 'linux/if_link.h'],
['IFLA_BOND_AD_ACTOR_SYSTEM', 'linux/if_link.h'],
@@ -584,6 +575,18 @@ endif
#####################################################################
+vcs_tagger = [meson.source_root() + '/tools/meson-vcs-tag.sh',
+ meson.source_root(),
+ get_option('version-tag'),
+ meson.project_version()]
+
+version_h = vcs_tag(
+ input : 'src/version/version.h.in',
+ output : 'version.h',
+ command: vcs_tagger)
+
+versiondep = declare_dependency(sources: version_h)
+
sed = find_program('sed')
awk = find_program('awk')
m4 = find_program('m4')
@@ -830,6 +833,17 @@ ntp_servers = get_option('ntp-servers')
conf.set_quoted('NTP_SERVERS', ntp_servers)
substs.set('NTP_SERVERS', ntp_servers)
+default_locale = get_option('default-locale')
+if default_locale == ''
+ if not meson.is_cross_build()
+ choose_default_locale_sh = find_program('tools/choose-default-locale.sh')
+ default_locale = run_command(choose_default_locale_sh).stdout().strip()
+ else
+ default_locale = 'C.UTF-8'
+ endif
+endif
+conf.set_quoted('SYSTEMD_DEFAULT_LOCALE', default_locale)
+
conf.set_quoted('GETTEXT_PACKAGE', meson.project_name())
substs.set('SUSHELL', get_option('debug-shell'))
@@ -2387,6 +2401,9 @@ executable('systemd-sleep',
install : true,
install_dir : rootlibexecdir)
+install_data('src/sleep/sleep.conf',
+ install_dir : pkgsysconfdir)
+
exe = executable('systemd-sysctl',
'src/sysctl/sysctl.c',
include_directories : includes,
@@ -3045,10 +3062,6 @@ run_target(
depends : [man, libsystemd, libudev],
command : [meson_check_api_docs_sh, libsystemd.full_path(), libudev.full_path()])
-run_target(
- 'make-index-md',
- command : ['sh', '@0@/tools/make-index-md.sh'.format(meson.source_root()), meson.source_root()])
-
############################################################
status = [
@@ -3098,7 +3111,8 @@ status = [
'default DNS-over-TLS mode: @0@'.format(default_dns_over_tls),
'default cgroup hierarchy: @0@'.format(default_hierarchy),
'default net.naming-scheme setting: @0@'.format(default_net_naming_scheme),
- 'default KillUserProcesses setting: @0@'.format(kill_user_processes)]
+ 'default KillUserProcesses setting: @0@'.format(kill_user_processes),
+ 'default locale: @0@'.format(default_locale)]
alt_dns_servers = '\n '.join(dns_servers.split(' '))
alt_ntp_servers = '\n '.join(ntp_servers.split(' '))
diff --git a/meson_options.txt b/meson_options.txt
index 1423b8998e..044bb792b5 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,6 +1,9 @@
# -*- mode: meson -*-
# SPDX-License-Identifier: LGPL-2.1+
+option('version-tag', type : 'string',
+ description : 'override the git version string')
+
option('split-usr', type : 'combo', choices : ['auto', 'true', 'false'],
description : '''/bin, /sbin aren't symlinks into /usr''')
option('split-bin', type : 'combo', choices : ['auto', 'true', 'false'],
@@ -195,6 +198,8 @@ option('default-kill-user-processes', type : 'boolean',
description : 'the default value for KillUserProcesses= setting')
option('gshadow', type : 'boolean',
description : 'support for shadow group')
+option('default-locale', type : 'string', value : '',
+ description : 'default locale used when /etc/locale.conf does not exist')
option('default-dnssec', type : 'combo',
description : 'default DNSSEC mode',
diff --git a/network/99-default.link b/network/99-default.link
index 561bf329e4..92fcbe83ea 100644
--- a/network/99-default.link
+++ b/network/99-default.link
@@ -8,5 +8,5 @@
# (at your option) any later version.
[Link]
-NamePolicy=kernel database onboard slot path
+NamePolicy=keep kernel database onboard slot path
MACAddressPolicy=persistent
diff --git a/po/it.po b/po/it.po
index 40f87d6880..3c1213d8f7 100644
--- a/po/it.po
+++ b/po/it.po
@@ -2,14 +2,14 @@
#
# Italian translation for systemd package
# Traduzione in italiano per il pacchetto systemd
-# Daniele Medri <dmedri@gmail.com>, 2013-2018.
+# Daniele Medri <dmedri@gmail.com>, 2013-2019.
#
msgid ""
msgstr ""
"Project-Id-Version: systemd\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-08-30 13:50+0200\n"
-"PO-Revision-Date: 2018-08-30 14:15+0200\n"
+"Report-Msgid-Bugs-To: https://github.com/systemd/systemd/issues\n"
+"POT-Creation-Date: 2019-01-02 13:27+0100\n"
+"PO-Revision-Date: 2019-01-02 13:35+0100\n"
"Last-Translator: Daniele Medri <dmedri@gmail.com>\n"
"Language-Team: Italian\n"
"Language: it\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 2.0.9\n"
+"X-Generator: Poedit 2.2\n"
#: src/core/org.freedesktop.systemd1.policy.in:22
msgid "Send passphrase back to system"
@@ -491,11 +491,11 @@ msgstr ""
"Autenticazione richiesta per indicare al firmware di avviare l'interfaccia "
"di configurazione."
-#: src/login/org.freedesktop.login1.policy:351
+#: src/login/org.freedesktop.login1.policy:352
msgid "Set a wall message"
msgstr "Configura un messaggio per gli utenti"
-#: src/login/org.freedesktop.login1.policy:352
+#: src/login/org.freedesktop.login1.policy:353
msgid "Authentication is required to set a wall message"
msgstr "Autenticazione richiesta per configurare un messaggio per gli utenti"
@@ -678,8 +678,12 @@ msgid "Authentication is required to restart '$(unit)'."
msgstr "Autenticazione richiesta per riavviare '$(unit)'."
#: src/core/dbus-unit.c:437
-msgid "Authentication is required to kill '$(unit)'."
-msgstr "Autenticazione richiesta per terminare '$(unit)'."
+msgid ""
+"Authentication is required to send a UNIX signal to the processes of "
+"'$(unit)'."
+msgstr ""
+"Autenticazione richiesta per inviare un segnale UNIX ai processi di "
+"'$(unit)'."
#: src/core/dbus-unit.c:468
msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
diff --git a/po/uk.po b/po/uk.po
index 7674e54226..361c80e5c9 100644
--- a/po/uk.po
+++ b/po/uk.po
@@ -597,7 +597,7 @@ msgstr "Вкажіть RTC для локального часового пояс
msgid ""
"Authentication is required to control whether the RTC stores the local or "
"UTC time."
-msgstr "Потрібна автентифікація, щоб контролювати, чи RTC зберігає час, чи UTC."
+msgstr "Потрібна автентифікація, щоб контролювати, чи зберігає RTC локальний час або UTC."
#: src/timedate/org.freedesktop.timedate1.policy:54
msgid "Turn network time synchronization on or off"
diff --git a/semaphoreci/gcc-compilation.sh b/semaphoreci/gcc-compilation.sh
new file mode 100755
index 0000000000..0e0c83788a
--- /dev/null
+++ b/semaphoreci/gcc-compilation.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+set -ex
+
+meson build -Dtests=unsafe -Dsplit-usr=true -Dslow-tests=true
+ninja -C build
+ninja -C build test
+DESTDIR=/var/tmp/inst1 ninja -C build install
diff --git a/semaphoreci/setup.sh b/semaphoreci/setup.sh
new file mode 100755
index 0000000000..d9a7b50685
--- /dev/null
+++ b/semaphoreci/setup.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+set -ex
+
+sudo add-apt-repository ppa:upstream-systemd-ci/systemd-ci -y
+sudo rm -rf /etc/apt/sources.list.d/beineri* /etc/apt/sources.list.d/google-chrome* /etc/apt/sources.list.d/heroku* /etc/apt/sources.list.d/mongodb* /etc/apt/sources.list.d/webupd8team* /etc/apt/sources.list.d/rwky* /etc/apt/sources.list.d/rethinkdb* /etc/apt/sources.list.d/cassandra* /etc/apt/sources.list.d/cwchien* /etc/apt/sources.list.d/rabbitmq* /etc/apt/sources.list.d/docker* /home/runner/{.npm,.phpbrew,.phpunit,.kerl,.kiex,.lein,.nvm,.npm,.phpbrew,.rbenv}
+sudo bash -c "echo 'deb-src http://de.archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse' >>/etc/apt/sources.list"
+sudo apt-get update -qq
+sudo apt-get build-dep systemd -y
+sudo apt-get install --force-yes -y util-linux libmount-dev libblkid-dev liblzma-dev libqrencode-dev libmicrohttpd-dev iptables-dev liblz4-dev libcurl4-gnutls-dev unifont clang-3.6 libasan0 itstool kbd cryptsetup-bin net-tools isc-dhcp-client iputils-ping strace qemu-system-x86 linux-image-virtual mount libgpg-error-dev libxkbcommon-dev python-lxml python3-lxml python3-pip libcap-dev
+# curl -s https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
+# sudo add-apt-repository -y 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty main'
+# sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
+sudo apt-get update
+sudo apt-get install --force-yes -y gettext python3-evdev python3-pyparsing libmount-dev
+# sudo apt-get install -y clang-6.0
+sudo sh -c 'echo 01010101010101010101010101010101 >/etc/machine-id'
+sudo mount -t tmpfs none /tmp
+test -d /run/mount || sudo mkdir /run/mount
+sudo adduser --system --no-create-home nfsnobody
+sudo rm -f /etc/mtab
+git clone https://github.com/ninja-build/ninja
+cd ninja
+./configure.py --bootstrap
+sudo cp ninja /usr/bin/
+cd ..
+pip3 install --user 'meson == 0.46.1'
diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm
index 7b33839b1e..49db2904a4 100644
--- a/shell-completion/bash/udevadm
+++ b/shell-completion/bash/udevadm
@@ -50,12 +50,12 @@ _udevadm() {
[DEBUG]='-d --debug'
[INFO_STANDALONE]='-r --root -a --attribute-walk -x --export -e --export-db -c --cleanup-db'
[INFO_ARG]='-q --query -p --path -n --name -P --export-prefix -d --device-id-of-file'
- [TRIGGER_STANDALONE]='-v --verbose -n --dry-run -w --settle'
+ [TRIGGER_STANDALONE]='-v --verbose -n --dry-run -w --settle --wait-daemon'
[TRIGGER_ARG]='-t --type -c --action -s --subsystem-match -S --subsystem-nomatch
-a --attr-match -A --attr-nomatch -p --property-match
-g --tag-match -y --sysname-match --name-match -b --parent-match'
[SETTLE]='-t --timeout -E --exit-if-exists'
- [CONTROL_STANDALONE]='-e --exit -s --stop-exec-queue -S --start-exec-queue -R --reload'
+ [CONTROL_STANDALONE]='-e --exit -s --stop-exec-queue -S --start-exec-queue -R --reload --ping'
[CONTROL_ARG]='-l --log-priority -p --property -m --children-max -t --timeout'
[MONITOR_STANDALONE]='-k --kernel -u --udev -p --property'
[MONITOR_ARG]='-s --subsystem-match -t --tag-match'
diff --git a/shell-completion/zsh/_bootctl b/shell-completion/zsh/_bootctl
index f107005814..0ffef94e4a 100644
--- a/shell-completion/zsh/_bootctl
+++ b/shell-completion/zsh/_bootctl
@@ -1,7 +1,7 @@
#compdef bootctl
# SPDX-License-Identifier: LGPL-2.1+
-(( $+functions[_bootctl_command] )) || _bootctl_command()
+(( $+functions[_bootctl_commands] )) || _bootctl_commands()
{
local -a _bootctl_cmds
_bootctl_cmds=(
@@ -28,4 +28,4 @@ _arguments \
'--version[Prints a short version string and exits.]' \
'--path=[Path to the EFI System Partition (ESP)]:path:_directories' \
'--no-variables[Do not touch EFI variables]' \
- '*::bootctl command:_bootctl_command'
+ '*::bootctl command:_bootctl_commands'
diff --git a/shell-completion/zsh/_busctl b/shell-completion/zsh/_busctl
index 801ed48010..d66ff3e0ce 100644
--- a/shell-completion/zsh/_busctl
+++ b/shell-completion/zsh/_busctl
@@ -18,7 +18,7 @@
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
-(( $+functions[_busctl_command] )) || _busctl_command()
+(( $+functions[_busctl_commands] )) || _busctl_commands()
{
local -a _busctl_cmds
_busctl_cmds=(
@@ -68,4 +68,4 @@ _arguments \
'--allow-interactive-authorization=[Allow interactive authorization for operation]:boolean:(1 0)' \
'--timeout=[Maximum time to wait for method call completion]:timeout (seconds)' \
'--augment-creds=[Extend credential data with data read from /proc/$PID]:boolean:(1 0)' \
- '*::busctl command:_busctl_command'
+ '*::busctl command:_busctl_commands'
diff --git a/shell-completion/zsh/_coredumpctl b/shell-completion/zsh/_coredumpctl
index cf24f5b361..e446ad349c 100644
--- a/shell-completion/zsh/_coredumpctl
+++ b/shell-completion/zsh/_coredumpctl
@@ -1,7 +1,8 @@
#compdef coredumpctl
# SPDX-License-Identifier: LGPL-2.1+
-_coredumpctl_command(){
+(( $+functions[_coredumpctl_commands] )) ||
+_coredumpctl_commands(){
local -a _coredumpctl_cmds
_coredumpctl_cmds=(
'list:List available coredumps'
@@ -16,7 +17,7 @@ _coredumpctl_command(){
local -a _dumps
cmd="${${_coredumpctl_cmds[(r)$words[1]:*]%%:*}}"
if (( $#cmd )); then
- _dumps=( "${(f)$(coredumpctl list --no-legend | awk 'BEGIN{OFS=":"} {sub(/[[ \t]+/, ""); print $4,$0}' 2>/dev/null)}" )
+ _dumps=( "${(f)$(coredumpctl list -q --no-legend | awk 'BEGIN{OFS=":"} {sub(/[[ \t]+/, ""); print $4,$0}' 2>/dev/null)}" )
if [[ -n "$_dumps" ]]; then
_describe -V -t pids 'coredumps' _dumps
else
@@ -39,5 +40,7 @@ _arguments \
'--no-legend[Do not print the column headers]' \
{-h,--help}'[Show this help]' \
'--version[Show package version]' \
- '--debugger=[Use the given debugger]' \
- '*::coredumpctl commands:_coredumpctl_command'
+ '--debugger=[Use the given debugger]:debugger: _command_names -e' \
+ {-D,--directory=}'[Use the journal files in the specified dir]:directory: _directories' \
+ {-q,--quiet}'[Do not show info messages and privilege warning]' \
+ '*::coredumpctl commands:_coredumpctl_commands'
diff --git a/shell-completion/zsh/_hostnamectl b/shell-completion/zsh/_hostnamectl
index ea86863e5a..a5c89306d1 100644
--- a/shell-completion/zsh/_hostnamectl
+++ b/shell-completion/zsh/_hostnamectl
@@ -1,6 +1,7 @@
#compdef hostnamectl
# SPDX-License-Identifier: LGPL-2.1+
+(( $+functions[_hostnamectl_set-hostname] )) ||
_hostnamectl_set-hostname() {
if (( CURRENT <= 3 )); then
_message "new hostname"
@@ -9,6 +10,7 @@ _hostnamectl_set-hostname() {
fi
}
+(( $+functions[_hostnamectl_set-icon-name] )) ||
_hostnamectl_set-icon-name() {
if (( CURRENT <= 3 )); then
_message "new icon name"
@@ -17,6 +19,7 @@ _hostnamectl_set-icon-name() {
fi
}
+(( $+functions[_hostnamectl_set-chassis] )) ||
_hostnamectl_set-chassis() {
if (( CURRENT <= 3 )); then
_chassis=( desktop laptop convertible server tablet handset watch embedded vm container )
@@ -26,6 +29,7 @@ _hostnamectl_set-chassis() {
fi
}
+(( $+functions[_hostnamectl_set-deployment] )) ||
_hostnamectl_set-deployment() {
if (( CURRENT <= 3 )); then
_message "new environment"
@@ -34,6 +38,7 @@ _hostnamectl_set-deployment() {
fi
}
+(( $+functions[_hostnamectl_set-location] )) ||
_hostnamectl_set-location() {
if (( CURRENT <= 3 )); then
_message "new location"
@@ -42,7 +47,8 @@ _hostnamectl_set-location() {
fi
}
-_hostnamectl_command() {
+(( $+functions[_hostnamectl_commands] )) ||
+_hostnamectl_commands() {
local -a _hostnamectl_cmds
_hostnamectl_cmds=(
"status:Show current hostname settings"
@@ -78,4 +84,4 @@ _arguments -s \
'--no-ask-password[Do not prompt for password]' \
{-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
{-M+,--machine=}'[Operate on local container]:machines:_sd_machines' \
- '*::hostnamectl commands:_hostnamectl_command'
+ '*::hostnamectl commands:_hostnamectl_commands'
diff --git a/shell-completion/zsh/_journalctl b/shell-completion/zsh/_journalctl
index 4bffabba96..aa6ace0485 100644
--- a/shell-completion/zsh/_journalctl
+++ b/shell-completion/zsh/_journalctl
@@ -1,7 +1,8 @@
#compdef journalctl
# SPDX-License-Identifier: LGPL-2.1+
-_list_fields() {
+(( $+functions[_journalctl_fields] )) ||
+_journalctl_fields() {
local -a journal_fields
journal_fields=(MESSAGE{,_ID} PRIORITY CODE_{FILE,LINE,FUNC}
ERRNO SYSLOG_{FACILITY,IDENTIFIER,PID}
@@ -16,12 +17,13 @@ _list_fields() {
__CURSOR __{REALTIME,MONOTONIC}_TIMESTAMP)
case $_jrnl_none in
yes) _values -s '=' 'possible fields' \
- "${journal_fields[@]}:value:_journal_fields ${words[CURRENT]%%=*}" ;;
+ "${journal_fields[@]}:value:_journalctl_field_values ${words[CURRENT]%%=*}" ;;
*) _describe 'possible fields' journal_fields ;;
esac
}
-_journal_none() {
+(( $+functions[_journalctl_none] )) ||
+_journalctl_none() {
local -a _commands _files _jrnl_none
# Setting use-cache will slow this down considerably
_commands=( ${"$(_call_program commands "$service $_sys_service_mgr -F _EXE" 2>/dev/null)"} )
@@ -29,10 +31,11 @@ _journal_none() {
_alternative : \
'files:/dev files:_files -W /dev -P /dev/' \
"commands:commands:($_commands[@])" \
- 'fields:fields:_list_fields'
+ 'fields:fields:_journalctl_fields'
}
-_journal_fields() {
+(( $+functions[_journalctl_field_values] )) ||
+_journalctl_field_values() {
local -a _fields cmd
cmd=("journalctl $_sys_service_mgr" "-F ${@[-1]}" "2>/dev/null" )
_fields=$(_call_program fields $cmd[@])
@@ -43,7 +46,8 @@ _journal_fields() {
_describe 'possible values' _fields
}
-_journal_boots() {
+(( $+functions[_journalctl_boots] )) ||
+_journalctl_boots() {
local -a _bootid _previousboots
_bootid=( ${(f)"$(_call_program bootid "$service -F _BOOT_ID")"} )
_previousboots=( -{1..${#_bootid}} )
@@ -92,18 +96,18 @@ _arguments -s \
{-x,--catalog}'[Show explanatory texts with each log line]' \
{-q,--quiet}"[Don't show privilege warning]" \
{-m,--merge}'[Show entries from all available journals]' \
- {-b+,--boot=}'[Show data only from the specified boot or offset]::boot id or offset:_journal_boots' \
+ {-b+,--boot=}'[Show data only from the specified boot or offset]::boot id or offset:_journalctl_boots' \
'--list-boots[List boots ordered by time]' \
{-k,--dmesg}'[Show only kernel messages from the current boot]' \
- {-u+,--unit=}'[Show data only from the specified unit]:units:_journal_fields _SYSTEMD_UNIT' \
- '--user-unit=[Show data only from the specified user session unit]:units:_journal_fields USER_UNIT' \
- {-p+,--priority=}'[Show only messages within the specified priority range]:priority:_journal_fields PRIORITY' \
- {-t+,--identifier=}'[Show only messages with the specified syslog identifier]:identifier:_journal_fields SYSLOG_IDENTIFIER' \
- {-c+,--cursor=}'[Start showing entries from the specified cursor]:cursors:_journal_fields __CURSORS' \
- '--after-cursor=[Start showing entries from after the specified cursor]:cursors:_journal_fields __CURSORS' \
+ {-u+,--unit=}'[Show data only from the specified unit]:units:_journalctl_field_values _SYSTEMD_UNIT' \
+ '--user-unit=[Show data only from the specified user session unit]:units:_journalctl_field_values USER_UNIT' \
+ {-p+,--priority=}'[Show only messages within the specified priority range]:priority:_journalctl_field_values PRIORITY' \
+ {-t+,--identifier=}'[Show only messages with the specified syslog identifier]:identifier:_journalctl_field_values SYSLOG_IDENTIFIER' \
+ {-c+,--cursor=}'[Start showing entries from the specified cursor]:cursors:_journalctl_field_values __CURSORS' \
+ '--after-cursor=[Start showing entries from after the specified cursor]:cursors:_journalctl_field_values __CURSORS' \
'--since=[Start showing entries on or newer than the specified date]:YYYY-MM-DD HH\:MM\:SS' \
'--until=[Stop showing entries on or older than the specified date]:YYYY-MM-DD HH\:MM\:SS' \
- {-F,--field=}'[List all values a certain field takes]:Fields:_list_fields' \
+ {-F,--field=}'[List all values a certain field takes]:Fields:_journalctl_fields' \
'--system[Show system and kernel messages]' \
'--user[Show messages from user services]' \
'(--directory -D -M --machine --root --file)'{-M+,--machine=}'[Operate on local container]:machines:_sd_machines' \
@@ -121,4 +125,4 @@ _arguments -s \
'--interval=[Time interval for changing the FSS sealing key]:time interval' \
'--verify[Verify journal file consistency]' \
'--verify-key=[Specify FSS verification key]:FSS key' \
- '*::default: _journal_none'
+ '*::default: _journalctl_none'
diff --git a/shell-completion/zsh/_kernel-install b/shell-completion/zsh/_kernel-install
index 6358a64589..14793c2f3f 100644
--- a/shell-completion/zsh/_kernel-install
+++ b/shell-completion/zsh/_kernel-install
@@ -1,7 +1,8 @@
#compdef kernel-install
# SPDX-License-Identifier: LGPL-2.1+
-_images(){
+(( $+functions[_kernel-install_images] )) ||
+_kernel-install_images(){
if [[ "$words[2]" == "remove" ]]; then
_message 'No more options'
else
@@ -9,7 +10,8 @@ _images(){
fi
}
-_kernels(){
+(( $+functions[_kernel-install_kernels] )) ||
+_kernel-install_kernels(){
read _MACHINE_ID < /etc/machine-id
_kernel=( /lib/modules/[0-9]* )
if [[ "$cmd" == "remove" && -n "$_MACHINE_ID" ]]; then
@@ -21,7 +23,7 @@ _kernels(){
_arguments \
'1::add or remove:(add remove)' \
- '2::kernel versions:_kernels' \
- '3::kernel images:_images'
+ '2::kernel versions:_kernel-install_kernels' \
+ '3::kernel images:_kernel-install_images'
#vim: set ft=zsh sw=4 ts=4 et
diff --git a/shell-completion/zsh/_localectl b/shell-completion/zsh/_localectl
index e5ec65b53b..569f4f294c 100644
--- a/shell-completion/zsh/_localectl
+++ b/shell-completion/zsh/_localectl
@@ -1,6 +1,7 @@
#compdef localectl
# SPDX-License-Identifier: LGPL-2.1+
+(( $+functions[_localectl_set-locale] )) ||
_localectl_set-locale() {
local -a _locales locale_fields
locale_fields=(LANG LANGUAGE LC_CTYPE LC_NUMERIC LC_TIME \
@@ -21,6 +22,7 @@ _localectl_set-locale() {
fi
}
+(( $+functions[_localectl_set-keymap] )) ||
_localectl_set-keymap() {
local -a _keymaps
if (( CURRENT <= 3 )); then
@@ -31,6 +33,7 @@ _localectl_set-keymap() {
fi
}
+(( $+functions[_localectl_set-x11-keymap] )) ||
_localectl_set-x11-keymap() {
if (( $+commands[pkg-config] )); then
local -a _file _layout _model _variant _options
@@ -56,7 +59,8 @@ _localectl_set-x11-keymap() {
fi
}
-_localectl_command() {
+(( $+functions[_localectl_commands] )) ||
+_localectl_commands() {
local -a _localectl_cmds
_localectl_cmds=(
'status:Show current locale settings'
@@ -91,4 +95,4 @@ _arguments \
'--no-ask-password[Do not prompt for password]' \
{-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
{-M+,--machine=}'[Operate on local container]:machine' \
- '*::localectl commands:_localectl_command'
+ '*::localectl commands:_localectl_commands'
diff --git a/shell-completion/zsh/_loginctl b/shell-completion/zsh/_loginctl
index 03dde9a891..44d6d08c98 100644
--- a/shell-completion/zsh/_loginctl
+++ b/shell-completion/zsh/_loginctl
@@ -1,6 +1,7 @@
#compdef loginctl
# SPDX-License-Identifier: LGPL-2.1+
+(( $+functions[_loginctl_all_sessions] )) ||
_loginctl_all_sessions() {
local session description
loginctl --no-legend list-sessions | while read -r session description; do
@@ -9,6 +10,7 @@ _loginctl_all_sessions() {
done
}
+(( $+functions[_loginctl_all_users] )) ||
_loginctl_all_users() {
local uid description
loginctl --no-legend list-users | while read -r uid description; do
@@ -17,6 +19,7 @@ _loginctl_all_users() {
done
}
+(( $+functions[_loginctl_all_seats] )) ||
_loginctl_all_seats() {
local seat description
loginctl --no-legend list-seats | while read -r seat description; do
@@ -107,7 +110,7 @@ done
# no loginctl completion for:
# [STANDALONE]='list-sessions list-users list-seats flush-devices'
-(( $+functions[_loginctl_command] )) || _loginctl_command()
+(( $+functions[_loginctl_commands] )) || _loginctl_commands()
{
local -a _loginctl_cmds
_loginctl_cmds=(
@@ -170,4 +173,4 @@ _arguments -s \
'--no-ask-password[Do not ask for system passwords]' \
{-n+,--lines=}'[Number of journal entries to show]' \
{-o+,--output=}'[Change journal output mode]:output modes:_sd_outputmodes' \
- '*::loginctl command:_loginctl_command'
+ '*::loginctl command:_loginctl_commands'
diff --git a/shell-completion/zsh/_machinectl b/shell-completion/zsh/_machinectl
index a00fc91021..4561e4db75 100644
--- a/shell-completion/zsh/_machinectl
+++ b/shell-completion/zsh/_machinectl
@@ -1,13 +1,15 @@
#compdef machinectl
# SPDX-License-Identifier: LGPL-2.1+
-__get_available_machines () {
+(( $+functions[__machinectl_get_machines] )) ||
+__machinectl_get_machines () {
machinectl --no-legend list-images | {while read -r a b; do echo $a; done;}
}
-_available_machines() {
+(( $+functions[_machinectl_machines] )) ||
+_machinectl_machines() {
local -a _machines
- _machines=("${(fo)$(__get_available_machines)}")
+ _machines=("${(fo)$(__machinectl_get_machines)}")
typeset -U _machines
if [[ -n "$_machines" ]]; then
_describe 'machines' _machines
@@ -16,7 +18,7 @@ _available_machines() {
fi
}
-(( $+functions[_machinectl_command] )) || _machinectl_command()
+(( $+functions[_machinectl_commands] )) || _machinectl_commands()
{
local -a _machinectl_cmds
_machinectl_cmds=(
@@ -61,9 +63,9 @@ _available_machines() {
list*|cancel-transfer|pull-tar|pull-raw)
msg="no options" ;;
clone)
- _available_machines ;;
+ _machinectl_machines ;;
start)
- _available_machines ;;
+ _machinectl_machines ;;
*)
_sd_machines
esac
@@ -100,4 +102,4 @@ _arguments \
{-o+,--output=}'[Change journal output mode.]:output modes:_sd_outputmodes' \
'--verify=[Verification mode for downloaded images.]:verify:(no checksum signature)' \
'--force[Download image even if already exists.]' \
- '*::machinectl command:_machinectl_command'
+ '*::machinectl command:_machinectl_commands'
diff --git a/shell-completion/zsh/_networkctl b/shell-completion/zsh/_networkctl
index ea485d653c..ab62a6d9bf 100644
--- a/shell-completion/zsh/_networkctl
+++ b/shell-completion/zsh/_networkctl
@@ -1,7 +1,8 @@
#compdef networkctl
# SPDX-License-Identifier: LGPL-2.1+
-_networkctl_command(){
+(( $+functions[_networkctl_commands] )) ||
+_networkctl_commands(){
local -a _networkctl_cmds
_networkctl_cmds=(
'list:List existing links'
@@ -34,4 +35,4 @@ _arguments \
'--no-legend[Do not print the column headers]' \
{-h,--help}'[Show this help]' \
'--version[Show package version]' \
- '*::networkctl commands:_networkctl_command'
+ '*::networkctl commands:_networkctl_commands'
diff --git a/shell-completion/zsh/_sd_machines b/shell-completion/zsh/_sd_machines
index ab35cf84b3..e783620b97 100644
--- a/shell-completion/zsh/_sd_machines
+++ b/shell-completion/zsh/_sd_machines
@@ -1,11 +1,13 @@
#autoload
# SPDX-License-Identifier: LGPL-2.1+
-__get_machines () {
+
+(( $+functions[__sd_machines_get_machines] )) ||
+__sd_machines_get_machines () {
machinectl --full --no-legend --no-pager list | {while read -r a b; do echo $a; done;};
}
local -a _machines
-_machines=("${(fo)$(__get_machines)}")
+_machines=("${(fo)$(__sd_machines_get_machines)}")
typeset -U _machines
if [[ -n "$_machines" ]]; then
_describe 'machines' _machines
diff --git a/shell-completion/zsh/_systemctl.in b/shell-completion/zsh/_systemctl.in
index 782d243131..590fc49604 100644
--- a/shell-completion/zsh/_systemctl.in
+++ b/shell-completion/zsh/_systemctl.in
@@ -1,7 +1,7 @@
#compdef systemctl
# SPDX-License-Identifier: LGPL-2.1+
-(( $+functions[_systemctl_command] )) || _systemctl_command()
+(( $+functions[_systemctl_commands] )) || _systemctl_commands()
{
local -a _systemctl_cmds
_systemctl_cmds=(
@@ -95,6 +95,7 @@
fi
}
+# @todo _systemd-run has a helper with the same name, so we must redefine
__systemctl()
{
systemctl $_sys_service_mgr --full --no-legend --no-pager "$@" 2>/dev/null
@@ -102,6 +103,7 @@ __systemctl()
# Fills the unit list
+(( $+functions[_systemctl_all_units] )) ||
_systemctl_all_units()
{
if ( [[ ${+_sys_all_units} -eq 0 ]] || _cache_invalid SYS_ALL_UNITS$_sys_service_mgr ) ||
@@ -113,6 +115,7 @@ _systemctl_all_units()
}
# Fills the unit list including all file units
+(( $+functions[_systemctl_really_all_units] )) ||
_systemctl_really_all_units()
{
local -a all_unit_files;
@@ -128,6 +131,7 @@ _systemctl_really_all_units()
fi
}
+(( $+functions[_filter_units_by_property] )) ||
_filter_units_by_property() {
local property=$1 value=$2; shift 2
local -a units; units=("${(q-)@}")
@@ -136,16 +140,19 @@ _filter_units_by_property() {
echo -E - "${(@g:o:)${(k@)props[(Re)$property=$value]}#Id=}"
}
+(( $+functions[_systemctl_get_non_template_names] )) ||
_systemctl_get_non_template_names() { echo -E - ${^${(R)${(f)"$(
__systemctl $mode list-unit-files "$PREFIX*"
__systemctl $mode list-units --all "$PREFIX*"
)"}:#*@.*}%%[[:space:]]*} }
+(( $+functions[_systemctl_get_template_names] )) ||
_systemctl_get_template_names() { echo -E - ${^${(M)${(f)"$(__systemctl list-unit-files "$PREFIX*" )"}##*@.[^[:space:]]##}%%@.*}\@ }
-
+(( $+functions[_systemctl_active_units] )) ||
_systemctl_active_units() {_sys_active_units=( ${${(f)"$(__systemctl list-units "$PREFIX*" )"}%% *} )}
+(( $+functions[_systemctl_startable_units] )) ||
_systemctl_startable_units(){
_sys_startable_units=( $( _filter_units_by_property ActiveState inactive $(
_filter_units_by_property CanStart yes ${${${(f)"$(
@@ -155,6 +162,7 @@ _systemctl_startable_units(){
)) )
}
+(( $+functions[_systemctl_restartable_units] )) ||
_systemctl_restartable_units(){
_sys_restartable_units=( $( _filter_units_by_property CanStart yes ${${${(f)"$(
__systemctl $mode list-unit-files --state enabled,disabled,static "$PREFIX*"
@@ -162,7 +170,10 @@ _systemctl_restartable_units(){
)"}:#*@.*}%%[[:space:]]*} ) )
}
+(( $+functions[_systemctl_failed_units] )) ||
_systemctl_failed_units() {_sys_failed_units=( ${${(f)"$(__systemctl list-units --state=failed "$PREFIX*" )"}%% *} ) }
+
+(( $+functions[_systemctl_unit_state] )) ||
_systemctl_unit_state() { typeset -gA _sys_unit_state; _sys_unit_state=( $(__systemctl list-unit-files "$PREFIX*" ) ) }
local fun
@@ -316,6 +327,7 @@ done
# emergency exit halt kexec list-jobs list-units
# list-unit-files poweroff reboot rescue show-environment'
+(( $+functions[_systemctl_caching_policy] )) ||
_systemctl_caching_policy()
{
local _sysunits
@@ -336,19 +348,22 @@ _systemctl_caching_policy()
return 1
}
-_unit_states() {
+(( $+functions[_systemctl_unit_states] )) ||
+_systemctl_unit_states() {
local -a _states
_states=("${(fo)$(__systemctl --state=help)}")
_values -s , "${_states[@]}"
}
-_unit_types() {
+(( $+functions[_systemctl_unit_types] )) ||
+_systemctl_unit_types() {
local -a _types
_types=("${(fo)$(__systemctl -t help)}")
_values -s , "${_types[@]}"
}
-_unit_properties() {
+(( $+functions[_systemctl_unit_properties] )) ||
+_systemctl_unit_properties() {
if ( [[ ${+_sys_all_properties} -eq 0 ]] || _cache_invalid SYS_ALL_PROPERTIES$_sys_service_mgr ) ||
! _retrieve_cache SYS_ALL_PROPERTIES$_sys_service_mgr;
then
@@ -358,7 +373,8 @@ _unit_properties() {
_values -s , "${_sys_all_properties[@]}"
}
-_job_modes() {
+(( $+functions[_systemctl_job_modes] )) ||
+_systemctl_job_modes() {
local -a _modes
_modes=(fail replace replace-irreversibly isolate ignore-dependencies ignore-requirements flush)
_values -s , "${_modes[@]}"
@@ -371,10 +387,10 @@ local _sys_service_mgr=${${words:*_modes}[(R)(${(j.|.)_modes})]}
_arguments -s \
{-h,--help}'[Show help]' \
'--version[Show package version]' \
- {-t+,--type=}'[List only units of a particular type]:unit type:_unit_types' \
- '--state=[Display units in the specified state]:unit state:_unit_states' \
- '--job-mode=[Specify how to deal with other jobs]:mode:_job_modes' \
- {-p+,--property=}'[Show only properties by specific name]:unit property:_unit_properties' \
+ {-t+,--type=}'[List only units of a particular type]:unit type:_systemctl_unit_types' \
+ '--state=[Display units in the specified state]:unit state:_systemctl_unit_states' \
+ '--job-mode=[Specify how to deal with other jobs]:mode:_systemctl_job_modes' \
+ {-p+,--property=}'[Show only properties by specific name]:unit property:_systemctl_unit_properties' \
{-a,--all}'[Show all units/properties, including dead/empty ones]' \
'--reverse[Show reverse dependencies]' \
'--after[Show units ordered after]' \
@@ -404,4 +420,4 @@ _arguments -s \
'--firmware-setup[Tell the firmware to show the setup menu on next boot]' \
'--plain[When used with list-dependencies, print output as a list]' \
'--failed[Show failed units]' \
- '*::systemctl command:_systemctl_command'
+ '*::systemctl command:_systemctl_commands'
diff --git a/shell-completion/zsh/_systemd-analyze b/shell-completion/zsh/_systemd-analyze
index 56982e3d11..64d418e643 100644
--- a/shell-completion/zsh/_systemd-analyze
+++ b/shell-completion/zsh/_systemd-analyze
@@ -1,29 +1,34 @@
#compdef systemd-analyze
# SPDX-License-Identifier: LGPL-2.1+
-_systemd_analyze_log-level() {
+(( $+functions[_systemd-analyze_log-level] )) ||
+_systemd-analyze_log-level() {
local -a _levels
_levels=(debug info notice warning err crit alert emerg)
_describe -t level 'logging level' _levels || compadd "$@"
}
-_systemd_analyze_log-target() {
+(( $+functions[_systemd-analyze_log-target] )) ||
+_systemd-analyze_log-target() {
local -a _targets
_targets=(console journal kmsg journal-or-kmsg null)
_describe -t target 'logging target' _targets || compadd "$@"
}
-_systemd_analyze_verify() {
+(( $+functions[_systemd-analyze_verify] )) ||
+_systemd-analyze_verify() {
_sd_unit_files
}
-_systemd_analyze_service-watchdogs() {
+(( $+functions[_systemd-analyze_service-watchdogs] )) ||
+_systemd-analyze_service-watchdogs() {
local -a _states
_states=(on off)
_describe -t state 'state' _states || compadd "$@"
}
-_systemd_analyze_command(){
+(( $+functions[_systemd-analyze_commands] )) ||
+_systemd-analyze_commands(){
local -a _systemd_analyze_cmds
# Descriptions taken from systemd-analyze --help.
_systemd_analyze_cmds=(
@@ -48,8 +53,8 @@ _systemd_analyze_command(){
local curcontext="$curcontext"
cmd="${${_systemd_analyze_cmds[(r)$words[1]:*]%%:*}}"
if (( $#cmd )); then
- if (( $+functions[_systemd_analyze_$cmd] )) && (( CURRENT == 2 )); then
- _systemd_analyze_$cmd
+ if (( $+functions[_systemd-analyze_$cmd] )) && (( CURRENT == 2 )); then
+ _systemd-analyze_$cmd
else
_message "no more options"
fi
@@ -74,4 +79,4 @@ _arguments \
'--to-pattern=[When generating a dependency graph, filter only destinations]:GLOB' \
{-H+,--host=}'[Operate on remote host]:userathost:_sd_hosts_or_user_at_host' \
{-M+,--machine=}'[Operate on local container]:machine:_sd_machines' \
- '*::systemd-analyze commands:_systemd_analyze_command'
+ '*::systemd-analyze commands:_systemd-analyze_commands'
diff --git a/shell-completion/zsh/_systemd-delta b/shell-completion/zsh/_systemd-delta
index 44e4cb3791..e07bbc8b2b 100644
--- a/shell-completion/zsh/_systemd-delta
+++ b/shell-completion/zsh/_systemd-delta
@@ -1,7 +1,8 @@
#compdef systemd-delta
# SPDX-License-Identifier: LGPL-2.1+
-_delta_type() {
+(( $+functions[_systemd-delta_types] )) ||
+_systemd-delta_types() {
local -a _delta_types
_delta_types=(masked equivalent redirected overridden unchanged)
_values -s , "${_delta_types[@]}"
@@ -12,5 +13,5 @@ _arguments \
'--version[Show package version]' \
'--no-pager[Do not pipe output into a pager]' \
'--diff=[Show a diff when overridden files differ]:boolean:(1 0)' \
- {-t+,--type=}'[Only display a selected set of override types]:types:_delta_type' \
+ {-t+,--type=}'[Only display a selected set of override types]:types:_systemd-delta_types' \
':SUFFIX:(tmpfiles.d sysctl.d systemd/system)'
diff --git a/shell-completion/zsh/_systemd-inhibit b/shell-completion/zsh/_systemd-inhibit
index 764713e28a..7c40e49ae4 100644
--- a/shell-completion/zsh/_systemd-inhibit
+++ b/shell-completion/zsh/_systemd-inhibit
@@ -1,7 +1,8 @@
#compdef systemd-inhibit
# SPDX-License-Identifier: LGPL-2.1+
-_systemd_inhibit_command(){
+(( $+functions[_systemd-inhibit_commands] )) ||
+_systemd-inhibit_commands(){
if (( CURRENT == 1 )); then
compset -q
_normal
@@ -17,7 +18,8 @@ _systemd_inhibit_command(){
fi
}
-_inhibit_what() {
+(( $+functions[_systemd-inhibit_what] )) ||
+_systemd-inhibit_what() {
local _inhibit
_inhibit=(shutdown sleep idle handle-power-key handle-suspend-key handle-hibernate-key handle-lid-switch)
_values -s : "${_inhibit[@]}"
@@ -31,4 +33,4 @@ _arguments \
'--why=[A descriptive string why is being inhibited]:reason for the lock:' \
'--mode=[One of block or delay]:lock mode:( block delay )' \
'--list[List active inhibitors]' \
- '*:commands:_systemd_inhibit_command'
+ '*:commands:_systemd-inhibit_commands'
diff --git a/shell-completion/zsh/_systemd-nspawn b/shell-completion/zsh/_systemd-nspawn
index e0bedee2aa..abaabfc895 100644
--- a/shell-completion/zsh/_systemd-nspawn
+++ b/shell-completion/zsh/_systemd-nspawn
@@ -1,7 +1,8 @@
#compdef systemd-nspawn
# SPDX-License-Identifier: LGPL-2.1+
-_nspawn-caps(){
+(( $+functions[_systemd-nspawn_caps] )) ||
+_systemd-nspawn_caps(){
local -a _caps
_caps=( CAP_CHOWN CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH
CAP_FOWNER CAP_FSETID CAP_IPC_OWNER CAP_KILL CAP_LEASE CAP_LINUX_IMMUTABLE
@@ -33,8 +34,8 @@ _arguments \
{--port=,-p+}'[Expose a container IP port on the host.]: : _message port' \
{--selinux-context=,-Z+}'[Sets the SELinux security context to be used to label processes in the container.]: : _message "SELinux context"' \
{--selinux-apifs-context=,-L+}'[Sets the SELinux security context to be used to label files in the virtual API file systems in the container.]: : _message "SELinux context"' \
- '--capability=[List one or more additional capabilities to grant the container.]:capabilities:_nspawn-caps' \
- '--drop-capability=[Specify one or more additional capabilities to drop for the containerm]:capabilities:_nspawn-caps' \
+ '--capability=[List one or more additional capabilities to grant the container.]:capabilities:_systemd-nspawn_caps' \
+ '--drop-capability=[Specify one or more additional capabilities to drop for the containerm]:capabilities:_systemd-nspawn_caps' \
"--link-journal=[Control whether the container's journal shall be made visible to the host system.]:options:(no host guest auto)" \
'-j[Equivalent to --link-journal=guest.]' \
'--read-only[Mount the root file system read only for the container.]' \
diff --git a/shell-completion/zsh/_systemd-resolve b/shell-completion/zsh/_systemd-resolve
index b54d22f816..c4664422ec 100644
--- a/shell-completion/zsh/_systemd-resolve
+++ b/shell-completion/zsh/_systemd-resolve
@@ -17,24 +17,28 @@
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
-_dns_protocol() {
+(( $+functions[_systemd-resolve_protocols] )) ||
+_systemd-resolve_protocols() {
local -a _protocol
_protocol=( $(_call_program protocol ${service} --legend=no --protocol help; echo help) )
_values 'protocol' "$_protocol[@]"
}
-_dns_type() {
+(( $+functions[_systemd-resolve_types] )) ||
+_systemd-resolve_types() {
local -a _type
_type=( $(_call_program type ${service} --legend=no --type help; echo help) )
_values 'type' "$_type[@]"
}
-_dns_class() {
+(( $+functions[_systemd-resolve_classes] )) ||
+_systemd-resolve_classes() {
local -a _class
_class=( $(_call_program class ${service} --legend=no --class help; echo help) )
_values 'class' "$_class[@]"
}
+(( $+functions[_systemd-resolve_none] )) ||
_systemd-resolve_none() {
_alternative : \
'domain:DNS address:' \
@@ -48,9 +52,9 @@ _arguments \
'-4[Resolve IPv4 addresses]' \
'-6[Resolve IPv6 addresses]' \
{-i+,--interface=}'[Look on interface]:interface:_net_interfaces' \
- {-p+,--protocol=}'[Look via protocol]:protocol:_dns_protocol' \
- {-t+,--type=}'[Query RR with DNS type]:type:_dns_type' \
- {-c+,--class=}'[Query RR with DNS class]:class:_dns_class' \
+ {-p+,--protocol=}'[Look via protocol]:protocol:_systemd-resolve_protocols' \
+ {-t+,--type=}'[Query RR with DNS type]:type:_systemd-resolve_types' \
+ {-c+,--class=}'[Query RR with DNS class]:class:_systemd-resolve_classes' \
'--service[Resolve services]' \
'--service-address=no[Do not resolve address for services]' \
'--service-txt=no[Do not resolve TXT records for services]' \
diff --git a/shell-completion/zsh/_systemd-run b/shell-completion/zsh/_systemd-run
index a8a8e6fe34..81017180a7 100644
--- a/shell-completion/zsh/_systemd-run
+++ b/shell-completion/zsh/_systemd-run
@@ -1,20 +1,23 @@
#compdef systemd-run
# SPDX-License-Identifier: LGPL-2.1+
+# @todo _systemctl has a helper with the same name, so we must redefine
__systemctl() {
local -a _modes
_modes=("--user" "--system")
systemctl ${words:*_modes} --full --no-legend --no-pager "$@" 2>/dev/null
}
-__get_slices () {
+(( $+functions[__systemd-run_get_slices] )) ||
+__systemd-run_get_slices () {
__systemctl list-units --all -t slice \
| { while read -r a b; do echo $a; done; };
}
-__slices () {
+(( $+functions[__systemd-run_slices] )) ||
+__systemd-run_slices () {
local -a _slices
- _slices=(${(fo)"$(__get_slices)"})
+ _slices=(${(fo)"$(__systemd-run_get_slices)"})
typeset -U _slices
_describe 'slices' _slices
}
@@ -43,7 +46,7 @@ _arguments \
ProtectSystem= ProtectHome= RuntimeDirectory= PassEnvironment= \
))' \
'--description=[Description for unit]:description' \
- '--slice=[Run in the specified slice]:slices:__slices' \
+ '--slice=[Run in the specified slice]:slices:__systemd-run_slices' \
{-r,--remain-after-exit}'[Leave service around until explicitly stopped]' \
'--send-sighup[Send SIGHUP when terminating]' \
'--service-type=[Service type]:type:(simple forking oneshot dbus notify idle)' \
diff --git a/shell-completion/zsh/_udevadm b/shell-completion/zsh/_udevadm
index c6bd685aee..020759b006 100644
--- a/shell-completion/zsh/_udevadm
+++ b/shell-completion/zsh/_udevadm
@@ -1,6 +1,7 @@
#compdef udevadm
# SPDX-License-Identifier: LGPL-2.1+
+(( $+functions[_udevadm_info] )) ||
_udevadm_info(){
_arguments \
'--query=[Query the database for specified type of device data. It needs the --path or --name to identify the specified device.]:type:(name symlink path property all)' \
@@ -15,6 +16,7 @@ _udevadm_info(){
'--cleanup-db[Cleanup the udev database.]'
}
+(( $+functions[_udevadm_trigger] )) ||
_udevadm_trigger(){
_arguments \
'--verbose[Print the list of devices which will be triggered.]' \
@@ -31,6 +33,7 @@ _udevadm_trigger(){
'--parent-match=[Trigger events for all children of a given device.]'
}
+(( $+functions[_udevadm_settle] )) ||
_udevadm_settle(){
_arguments \
'--timeout=[Maximum number of seconds to wait for the event queue to become empty.]' \
@@ -41,6 +44,7 @@ _udevadm_settle(){
'--help[Print help text.]'
}
+(( $+functions[_udevadm_control] )) ||
_udevadm_control(){
_arguments \
'--exit[Signal and wait for systemd-udevd to exit.]' \
@@ -54,6 +58,7 @@ _udevadm_control(){
'--help[Print help text.]'
}
+(( $+functions[_udevadm_monitor] )) ||
_udevadm_monitor(){
_arguments \
'--kernel[Print the kernel uevents.]' \
@@ -64,6 +69,7 @@ _udevadm_monitor(){
'--help[Print help text.]'
}
+(( $+functions[_udevadm_test] )) ||
_udevadm_test(){
_arguments \
'--action=[The action string.]:actions:(add change remove)' \
@@ -72,6 +78,7 @@ _udevadm_test(){
'*::devpath:_files -P /sys/ -W /sys'
}
+(( $+functions[_udevadm_test-builtin] )) ||
_udevadm_test-builtin(){
if (( CURRENT == 2 )); then
_arguments \
@@ -87,6 +94,7 @@ _udevadm_test-builtin(){
fi
}
+(( $+functions[_udevadm_mounts] )) ||
_udevadm_mounts(){
local dev_tmp dpath_tmp mp_tmp mline
@@ -104,8 +112,8 @@ _udevadm_mounts(){
'directories:mount point:compadd -a mp_tmp'
}
-
-_udevadm_command(){
+(( $+functions[_udevadm_commands] )) ||
+_udevadm_commands(){
local -a _udevadm_cmds
_udevadm_cmds=(
'info:query sysfs or the udev database'
@@ -139,4 +147,4 @@ _arguments \
'--debug[Print debug messages to stderr]' \
'--version[Print version number]' \
'--help[Print help text]' \
- '*::udevadm commands:_udevadm_command'
+ '*::udevadm commands:_udevadm_commands'
diff --git a/src/analyze/analyze-security.c b/src/analyze/analyze-security.c
index 1fc3c1e02f..a007ed1da4 100644
--- a/src/analyze/analyze-security.c
+++ b/src/analyze/analyze-security.c
@@ -485,24 +485,24 @@ static bool syscall_names_in_filter(Set *s, bool whitelist, const SyscallFilterS
const char *syscall;
NULSTR_FOREACH(syscall, f->value) {
- bool b;
+ int id;
if (syscall[0] == '@') {
const SyscallFilterSet *g;
- assert_se(g = syscall_filter_set_find(syscall));
- b = syscall_names_in_filter(s, whitelist, g);
- } else {
- int id;
- /* Let's see if the system call actually exists on this platform, before complaining */
- id = seccomp_syscall_resolve_name(syscall);
- if (id < 0)
- continue;
+ assert_se(g = syscall_filter_set_find(syscall));
+ if (syscall_names_in_filter(s, whitelist, g))
+ return true; /* bad! */
- b = set_contains(s, syscall);
+ continue;
}
- if (whitelist == b) {
+ /* Let's see if the system call actually exists on this platform, before complaining */
+ id = seccomp_syscall_resolve_name(syscall);
+ if (id < 0)
+ continue;
+
+ if (set_contains(s, syscall) == whitelist) {
log_debug("Offending syscall filter item: %s", syscall);
return true; /* bad! */
}
@@ -1859,7 +1859,6 @@ static int acquire_security_info(sd_bus *bus, const char *name, struct security_
{ "PrivateNetwork", "b", NULL, offsetof(struct security_info, private_network) },
{ "PrivateTmp", "b", NULL, offsetof(struct security_info, private_tmp) },
{ "PrivateUsers", "b", NULL, offsetof(struct security_info, private_users) },
- { "PrivateUsers", "b", NULL, offsetof(struct security_info, private_users) },
{ "ProtectControlGroups", "b", NULL, offsetof(struct security_info, protect_control_groups) },
{ "ProtectHome", "s", NULL, offsetof(struct security_info, protect_home) },
{ "ProtectKernelModules", "b", NULL, offsetof(struct security_info, protect_kernel_modules) },
diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c
index 1f69b9fda1..3915b66739 100644
--- a/src/analyze/analyze.c
+++ b/src/analyze/analyze.c
@@ -14,6 +14,7 @@
#include "alloc-util.h"
#include "analyze-security.h"
#include "analyze-verify.h"
+#include "build.h"
#include "bus-error.h"
#include "bus-unit-util.h"
#include "bus-util.h"
@@ -696,7 +697,7 @@ static int analyze_plot(int argc, char *argv[], void *userdata) {
"<!-- that render these files properly but much slower are ImageMagick, -->\n"
"<!-- gimp, inkscape, etc. To display the files on your system, just -->\n"
"<!-- point your browser to this file. -->\n\n"
- "<!-- This plot was generated by systemd-analyze version %-16.16s -->\n\n", PACKAGE_VERSION);
+ "<!-- This plot was generated by systemd-analyze version %-16.16s -->\n\n", GIT_VERSION);
/* style sheet */
svg("<defs>\n <style type=\"text/css\">\n <![CDATA[\n"
diff --git a/src/basic/alloc-util.h b/src/basic/alloc-util.h
index ff7a46793a..893a1238ff 100644
--- a/src/basic/alloc-util.h
+++ b/src/basic/alloc-util.h
@@ -10,20 +10,28 @@
typedef void (*free_func_t)(void *p);
+/* If for some reason more than 4M are allocated on the stack, let's abort immediately. It's better than
+ * proceeding and smashing the stack limits. Note that by default RLIMIT_STACK is 8M on Linux. */
+#define ALLOCA_MAX (4U*1024U*1024U)
+
#define new(t, n) ((t*) malloc_multiply(sizeof(t), (n)))
#define new0(t, n) ((t*) calloc((n) ?: 1, sizeof(t)))
-#define newa(t, n) \
- ({ \
- assert(!size_multiply_overflow(sizeof(t), n)); \
- (t*) alloca(sizeof(t)*(n)); \
+#define newa(t, n) \
+ ({ \
+ size_t _n_ = n; \
+ assert(!size_multiply_overflow(sizeof(t), _n_)); \
+ assert(sizeof(t)*_n_ <= ALLOCA_MAX); \
+ (t*) alloca(sizeof(t)*_n_); \
})
-#define newa0(t, n) \
- ({ \
- assert(!size_multiply_overflow(sizeof(t), n)); \
- (t*) alloca0(sizeof(t)*(n)); \
+#define newa0(t, n) \
+ ({ \
+ size_t _n_ = n; \
+ assert(!size_multiply_overflow(sizeof(t), _n_)); \
+ assert(sizeof(t)*_n_ <= ALLOCA_MAX); \
+ (t*) alloca0(sizeof(t)*_n_); \
})
#define newdup(t, p, n) ((t*) memdup_multiply(p, sizeof(t), (n)))
@@ -51,16 +59,20 @@ void* memdup_suffix0(const void *p, size_t l) _alloc_(2);
#define memdupa(p, l) \
({ \
void *_q_; \
- _q_ = alloca(l); \
- memcpy(_q_, p, l); \
+ size_t _l_ = l; \
+ assert(_l_ <= ALLOCA_MAX); \
+ _q_ = alloca(_l_); \
+ memcpy(_q_, p, _l_); \
})
#define memdupa_suffix0(p, l) \
({ \
void *_q_; \
- _q_ = alloca(l + 1); \
- ((uint8_t*) _q_)[l] = 0; \
- memcpy(_q_, p, l); \
+ size_t _l_ = l; \
+ assert(_l_ <= ALLOCA_MAX); \
+ _q_ = alloca(_l_ + 1); \
+ ((uint8_t*) _q_)[_l_] = 0; \
+ memcpy(_q_, p, _l_); \
})
static inline void freep(void *p) {
@@ -116,6 +128,7 @@ void* greedy_realloc0(void **p, size_t *allocated, size_t need, size_t size);
({ \
char *_new_; \
size_t _len_ = n; \
+ assert(_len_ <= ALLOCA_MAX); \
_new_ = alloca(_len_); \
(void *) memset(_new_, 0, _len_); \
})
@@ -125,16 +138,18 @@ void* greedy_realloc0(void **p, size_t *allocated, size_t need, size_t size);
({ \
void *_ptr_; \
size_t _mask_ = (align) - 1; \
- _ptr_ = alloca((size) + _mask_); \
+ size_t _size_ = size; \
+ assert(_size_ <= ALLOCA_MAX); \
+ _ptr_ = alloca(_size_ + _mask_); \
(void*)(((uintptr_t)_ptr_ + _mask_) & ~_mask_); \
})
#define alloca0_align(size, align) \
({ \
void *_new_; \
- size_t _size_ = (size); \
- _new_ = alloca_align(_size_, (align)); \
- (void*)memset(_new_, 0, _size_); \
+ size_t _xsize_ = (size); \
+ _new_ = alloca_align(_xsize_, (align)); \
+ (void*)memset(_new_, 0, _xsize_); \
})
/* Takes inspiration from Rusts's Option::take() method: reads and returns a pointer, but at the same time resets it to
diff --git a/src/basic/btrfs-util.c b/src/basic/btrfs-util.c
index d08e7546d0..da4dd2a827 100644
--- a/src/basic/btrfs-util.c
+++ b/src/basic/btrfs-util.c
@@ -941,7 +941,7 @@ int btrfs_qgroup_destroy_recursive(int fd, uint64_t qgroupid) {
/* Destroys the specified qgroup, but unassigns it from all
* its parents first. Also, it recursively destroys all
- * qgroups it is assgined to that have the same id part of the
+ * qgroups it is assigned to that have the same id part of the
* qgroupid as the specified group. */
r = btrfs_qgroupid_split(qgroupid, NULL, &subvol_id);
diff --git a/src/basic/btrfs-util.h b/src/basic/btrfs-util.h
index 085aca4dbc..7d848a75d3 100644
--- a/src/basic/btrfs-util.h
+++ b/src/basic/btrfs-util.h
@@ -28,17 +28,17 @@ typedef struct BtrfsQuotaInfo {
} BtrfsQuotaInfo;
typedef enum BtrfsSnapshotFlags {
- BTRFS_SNAPSHOT_FALLBACK_COPY = 1, /* If the source isn't a subvolume, reflink everything */
- BTRFS_SNAPSHOT_READ_ONLY = 2,
- BTRFS_SNAPSHOT_RECURSIVE = 4,
- BTRFS_SNAPSHOT_QUOTA = 8,
- BTRFS_SNAPSHOT_FALLBACK_DIRECTORY = 16, /* If the destination doesn't support subvolumes, reflink/copy instead */
- BTRFS_SNAPSHOT_FALLBACK_IMMUTABLE = 32, /* When we can't create a subvolume, use the FS_IMMUTABLE attribute for indicating read-only */
+ BTRFS_SNAPSHOT_FALLBACK_COPY = 1 << 0, /* If the source isn't a subvolume, reflink everything */
+ BTRFS_SNAPSHOT_READ_ONLY = 1 << 1,
+ BTRFS_SNAPSHOT_RECURSIVE = 1 << 2,
+ BTRFS_SNAPSHOT_QUOTA = 1 << 3,
+ BTRFS_SNAPSHOT_FALLBACK_DIRECTORY = 1 << 4, /* If the destination doesn't support subvolumes, reflink/copy instead */
+ BTRFS_SNAPSHOT_FALLBACK_IMMUTABLE = 1 << 5, /* When we can't create a subvolume, use the FS_IMMUTABLE attribute for indicating read-only */
} BtrfsSnapshotFlags;
typedef enum BtrfsRemoveFlags {
- BTRFS_REMOVE_RECURSIVE = 1,
- BTRFS_REMOVE_QUOTA = 2,
+ BTRFS_REMOVE_RECURSIVE = 1 << 0,
+ BTRFS_REMOVE_QUOTA = 1 << 1,
} BtrfsRemoveFlags;
int btrfs_is_filesystem(int fd);
diff --git a/src/basic/build.h b/src/basic/build.h
index 2c46550300..7a59059080 100644
--- a/src/basic/build.h
+++ b/src/basic/build.h
@@ -1,6 +1,8 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#pragma once
+#include "version.h"
+
#if HAVE_PAM
#define _PAM_FEATURE_ "+PAM"
#else
diff --git a/src/basic/capability-util.c b/src/basic/capability-util.c
index a3f3ca9f52..b944ee6ea1 100644
--- a/src/basic/capability-util.c
+++ b/src/basic/capability-util.c
@@ -13,6 +13,7 @@
#include "fileio.h"
#include "log.h"
#include "macro.h"
+#include "missing_prctl.h"
#include "parse-util.h"
#include "user-util.h"
#include "util.h"
diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c
index 830a63c185..8ce7ccb960 100644
--- a/src/basic/cgroup-util.c
+++ b/src/basic/cgroup-util.c
@@ -872,7 +872,7 @@ int cg_set_access(
bool fatal;
};
- /* cgroupsv1, aka legacy/non-unified */
+ /* cgroup v1, aka legacy/non-unified */
static const struct Attribute legacy_attributes[] = {
{ "cgroup.procs", true },
{ "tasks", false },
@@ -880,7 +880,7 @@ int cg_set_access(
{},
};
- /* cgroupsv2, aka unified */
+ /* cgroup v2, aka unified */
static const struct Attribute unified_attributes[] = {
{ "cgroup.procs", true },
{ "cgroup.subtree_control", true },
@@ -2039,7 +2039,7 @@ int cg_get_keyed_attribute(
char **v;
int r;
- /* Reads one or more fields of a cgroupsv2 keyed attribute file. The 'keys' parameter should be an strv with
+ /* Reads one or more fields of a cgroup v2 keyed attribute file. The 'keys' parameter should be an strv with
* all keys to retrieve. The 'ret_values' parameter should be passed as string size with the same number of
* entries as 'keys'. On success each entry will be set to the value of the matching key.
*
@@ -2491,7 +2491,7 @@ int cg_kernel_controllers(Set **ret) {
static thread_local CGroupUnified unified_cache = CGROUP_UNIFIED_UNKNOWN;
-/* The hybrid mode was initially implemented in v232 and simply mounted cgroup v2 on /sys/fs/cgroup/systemd. This
+/* The hybrid mode was initially implemented in v232 and simply mounted cgroup2 on /sys/fs/cgroup/systemd. This
* unfortunately broke other tools (such as docker) which expected the v1 "name=systemd" hierarchy on
* /sys/fs/cgroup/systemd. From v233 and on, the hybrid mode mountnbs v2 on /sys/fs/cgroup/unified and maintains
* "name=systemd" hierarchy on /sys/fs/cgroup/systemd for compatibility with other tools.
@@ -2739,13 +2739,13 @@ bool cg_is_legacy_wanted(void) {
if (wanted >= 0)
return wanted;
- /* Check if we have cgroups2 already mounted. */
+ /* Check if we have cgroup v2 already mounted. */
if (cg_unified_flush() >= 0 &&
unified_cache == CGROUP_UNIFIED_ALL)
return (wanted = false);
/* Otherwise, assume that at least partial legacy is wanted,
- * since cgroups2 should already be mounted at this point. */
+ * since cgroup v2 should already be mounted at this point. */
return (wanted = true);
}
diff --git a/src/basic/cgroup-util.h b/src/basic/cgroup-util.h
index ea9a333290..119b493dc6 100644
--- a/src/basic/cgroup-util.h
+++ b/src/basic/cgroup-util.h
@@ -48,13 +48,13 @@ typedef enum CGroupMask {
CGROUP_MASK_BPF_FIREWALL = CGROUP_CONTROLLER_TO_MASK(CGROUP_CONTROLLER_BPF_FIREWALL),
CGROUP_MASK_BPF_DEVICES = CGROUP_CONTROLLER_TO_MASK(CGROUP_CONTROLLER_BPF_DEVICES),
- /* All real cgroupv1 controllers */
+ /* All real cgroup v1 controllers */
CGROUP_MASK_V1 = CGROUP_MASK_CPU|CGROUP_MASK_CPUACCT|CGROUP_MASK_BLKIO|CGROUP_MASK_MEMORY|CGROUP_MASK_DEVICES|CGROUP_MASK_PIDS,
- /* All real cgroupv2 controllers */
+ /* All real cgroup v2 controllers */
CGROUP_MASK_V2 = CGROUP_MASK_CPU|CGROUP_MASK_IO|CGROUP_MASK_MEMORY|CGROUP_MASK_PIDS,
- /* All cgroupv2 BPF pseudo-controllers */
+ /* All cgroup v2 BPF pseudo-controllers */
CGROUP_MASK_BPF = CGROUP_MASK_BPF_FIREWALL|CGROUP_MASK_BPF_DEVICES,
_CGROUP_MASK_ALL = CGROUP_CONTROLLER_TO_MASK(_CGROUP_CONTROLLER_MAX) - 1
@@ -162,9 +162,9 @@ int cg_enumerate_subgroups(const char *controller, const char *path, DIR **_d);
int cg_read_subgroup(DIR *d, char **fn);
typedef enum CGroupFlags {
- CGROUP_SIGCONT = 1,
- CGROUP_IGNORE_SELF = 2,
- CGROUP_REMOVE = 4,
+ CGROUP_SIGCONT = 1 << 0,
+ CGROUP_IGNORE_SELF = 1 << 1,
+ CGROUP_REMOVE = 1 << 2,
} CGroupFlags;
typedef void (*cg_kill_log_func_t)(pid_t pid, int sig, void *userdata);
diff --git a/src/basic/copy.c b/src/basic/copy.c
index 34e01ea1cf..46e02a3759 100644
--- a/src/basic/copy.c
+++ b/src/basic/copy.c
@@ -24,6 +24,7 @@
#include "macro.h"
#include "missing.h"
#include "mountpoint-util.h"
+#include "stat-util.h"
#include "string-util.h"
#include "strv.h"
#include "time-util.h"
@@ -501,7 +502,7 @@ static int fd_copy_directory(
_cleanup_close_ int fdf = -1, fdt = -1;
_cleanup_closedir_ DIR *d = NULL;
struct dirent *de;
- bool created;
+ bool exists, created;
int r;
assert(st);
@@ -522,13 +523,26 @@ static int fd_copy_directory(
return -errno;
fdf = -1;
- r = mkdirat(dt, to, st->st_mode & 07777);
- if (r >= 0)
- created = true;
- else if (errno == EEXIST && (copy_flags & COPY_MERGE))
+ exists = false;
+ if (copy_flags & COPY_MERGE_EMPTY) {
+ r = dir_is_empty_at(dt, to);
+ if (r < 0 && r != -ENOENT)
+ return r;
+ else if (r == 1)
+ exists = true;
+ }
+
+ if (exists)
created = false;
- else
- return -errno;
+ else {
+ r = mkdirat(dt, to, st->st_mode & 07777);
+ if (r >= 0)
+ created = true;
+ else if (errno == EEXIST && (copy_flags & COPY_MERGE))
+ created = false;
+ else
+ return -errno;
+ }
fdt = openat(dt, to, O_RDONLY|O_DIRECTORY|O_CLOEXEC|O_NOCTTY|O_NOFOLLOW);
if (fdt < 0)
diff --git a/src/basic/copy.h b/src/basic/copy.h
index a41b44c70a..f677021881 100644
--- a/src/basic/copy.h
+++ b/src/basic/copy.h
@@ -9,10 +9,11 @@
#include <sys/types.h>
typedef enum CopyFlags {
- COPY_REFLINK = 1 << 0, /* Try to reflink */
- COPY_MERGE = 1 << 1, /* Merge existing trees with our new one to copy */
- COPY_REPLACE = 1 << 2, /* Replace an existing file if there's one */
- COPY_SAME_MOUNT = 1 << 3, /* Don't descend recursively into other file systems, across mount point boundaries */
+ COPY_REFLINK = 1 << 0, /* Try to reflink */
+ COPY_MERGE = 1 << 1, /* Merge existing trees with our new one to copy */
+ COPY_REPLACE = 1 << 2, /* Replace an existing file if there's one */
+ COPY_SAME_MOUNT = 1 << 3, /* Don't descend recursively into other file systems, across mount point boundaries */
+ COPY_MERGE_EMPTY = 1 << 4, /* Merge an existing, empty directory with our new tree to copy */
} CopyFlags;
typedef int (*copy_progress_bytes_t)(uint64_t n_bytes, void *userdata);
diff --git a/src/basic/env-file.c b/src/basic/env-file.c
index 6a7d6746a1..7f10f9ad39 100644
--- a/src/basic/env-file.c
+++ b/src/basic/env-file.c
@@ -35,7 +35,6 @@ static int parse_env_file_internal(
VALUE,
VALUE_ESCAPE,
SINGLE_QUOTE_VALUE,
- SINGLE_QUOTE_VALUE_ESCAPE,
DOUBLE_QUOTE_VALUE,
DOUBLE_QUOTE_VALUE_ESCAPE,
COMMENT,
@@ -113,7 +112,7 @@ static int parse_env_file_internal(
} else if (c == '\'')
state = SINGLE_QUOTE_VALUE;
- else if (c == '\"')
+ else if (c == '"')
state = DOUBLE_QUOTE_VALUE;
else if (c == '\\')
state = VALUE_ESCAPE;
@@ -186,8 +185,6 @@ static int parse_env_file_internal(
case SINGLE_QUOTE_VALUE:
if (c == '\'')
state = PRE_VALUE;
- else if (c == '\\')
- state = SINGLE_QUOTE_VALUE_ESCAPE;
else {
if (!GREEDY_REALLOC(value, value_alloc, n_value+2))
return -ENOMEM;
@@ -197,19 +194,8 @@ static int parse_env_file_internal(
break;
- case SINGLE_QUOTE_VALUE_ESCAPE:
- state = SINGLE_QUOTE_VALUE;
-
- if (!strchr(NEWLINE, c)) {
- if (!GREEDY_REALLOC(value, value_alloc, n_value+2))
- return -ENOMEM;
-
- value[n_value++] = c;
- }
- break;
-
case DOUBLE_QUOTE_VALUE:
- if (c == '\"')
+ if (c == '"')
state = PRE_VALUE;
else if (c == '\\')
state = DOUBLE_QUOTE_VALUE_ESCAPE;
@@ -225,12 +211,17 @@ static int parse_env_file_internal(
case DOUBLE_QUOTE_VALUE_ESCAPE:
state = DOUBLE_QUOTE_VALUE;
- if (!strchr(NEWLINE, c)) {
+ if (c == '"') {
if (!GREEDY_REALLOC(value, value_alloc, n_value+2))
return -ENOMEM;
-
+ value[n_value++] = '"';
+ } else if (!strchr(NEWLINE, c)) {
+ if (!GREEDY_REALLOC(value, value_alloc, n_value+3))
+ return -ENOMEM;
+ value[n_value++] = '\\';
value[n_value++] = c;
}
+
break;
case COMMENT:
@@ -253,7 +244,6 @@ static int parse_env_file_internal(
VALUE,
VALUE_ESCAPE,
SINGLE_QUOTE_VALUE,
- SINGLE_QUOTE_VALUE_ESCAPE,
DOUBLE_QUOTE_VALUE,
DOUBLE_QUOTE_VALUE_ESCAPE)) {
@@ -527,7 +517,7 @@ static void write_env_var(FILE *f, const char *v) {
fwrite_unlocked(v, 1, p-v, f);
if (string_has_cc(p, NULL) || chars_intersect(p, WHITESPACE SHELL_NEED_QUOTES)) {
- fputc_unlocked('\"', f);
+ fputc_unlocked('"', f);
for (; *p; p++) {
if (strchr(SHELL_NEED_ESCAPE, *p))
@@ -536,7 +526,7 @@ static void write_env_var(FILE *f, const char *v) {
fputc_unlocked(*p, f);
}
- fputc_unlocked('\"', f);
+ fputc_unlocked('"', f);
} else
fputs_unlocked(p, f);
diff --git a/src/basic/env-util.c b/src/basic/env-util.c
index e494f65c98..fd449dcce0 100644
--- a/src/basic/env-util.c
+++ b/src/basic/env-util.c
@@ -339,7 +339,6 @@ char **strv_env_unset(char **l, const char *p) {
}
char **strv_env_unset_many(char **l, ...) {
-
char **f, **t;
if (!l)
@@ -408,7 +407,6 @@ int strv_env_replace(char ***l, char *p) {
}
char **strv_env_set(char **x, const char *p) {
-
_cleanup_strv_free_ char **ret = NULL;
size_t n, m;
char **k;
diff --git a/src/basic/env-util.h b/src/basic/env-util.h
index 4d21ea6bef..d54f99658b 100644
--- a/src/basic/env-util.h
+++ b/src/basic/env-util.h
@@ -13,9 +13,9 @@ bool env_value_is_valid(const char *e);
bool env_assignment_is_valid(const char *e);
enum {
- REPLACE_ENV_USE_ENVIRONMENT = 1u,
- REPLACE_ENV_ALLOW_BRACELESS = 2u,
- REPLACE_ENV_ALLOW_EXTENDED = 4u,
+ REPLACE_ENV_USE_ENVIRONMENT = 1 << 0,
+ REPLACE_ENV_ALLOW_BRACELESS = 1 << 1,
+ REPLACE_ENV_ALLOW_EXTENDED = 1 << 2,
};
char *replace_env_n(const char *format, size_t n, char **env, unsigned flags);
diff --git a/src/basic/extract-word.h b/src/basic/extract-word.h
index 8c63b7c306..705ebbe95b 100644
--- a/src/basic/extract-word.h
+++ b/src/basic/extract-word.h
@@ -4,12 +4,12 @@
#include "macro.h"
typedef enum ExtractFlags {
- EXTRACT_RELAX = 1,
- EXTRACT_CUNESCAPE = 2,
- EXTRACT_CUNESCAPE_RELAX = 4,
- EXTRACT_QUOTES = 8,
- EXTRACT_DONT_COALESCE_SEPARATORS = 16,
- EXTRACT_RETAIN_ESCAPE = 32,
+ EXTRACT_RELAX = 1 << 0,
+ EXTRACT_CUNESCAPE = 1 << 1,
+ EXTRACT_CUNESCAPE_RELAX = 1 << 2,
+ EXTRACT_QUOTES = 1 << 3,
+ EXTRACT_DONT_COALESCE_SEPARATORS = 1 << 4,
+ EXTRACT_RETAIN_ESCAPE = 1 << 5,
} ExtractFlags;
int extract_first_word(const char **p, char **ret, const char *separators, ExtractFlags flags);
diff --git a/src/basic/fd-util.c b/src/basic/fd-util.c
index c06f2fac7e..3e6ef5a06a 100644
--- a/src/basic/fd-util.c
+++ b/src/basic/fd-util.c
@@ -70,7 +70,7 @@ int safe_close(int fd) {
return -1;
}
-void safe_close_pair(int p[]) {
+void safe_close_pair(int p[static 2]) {
assert(p);
if (p[0] == p[1]) {
@@ -189,6 +189,27 @@ _pure_ static bool fd_in_set(int fd, const int fdset[], size_t n_fdset) {
return false;
}
+static int get_max_fd(void) {
+ struct rlimit rl;
+ rlim_t m;
+
+ /* Return the highest possible fd, based RLIMIT_NOFILE, but enforcing FD_SETSIZE-1 as lower boundary
+ * and INT_MAX as upper boundary. */
+
+ if (getrlimit(RLIMIT_NOFILE, &rl) < 0)
+ return -errno;
+
+ m = MAX(rl.rlim_cur, rl.rlim_max);
+ if (m < FD_SETSIZE) /* Let's always cover at least 1024 fds */
+ return FD_SETSIZE-1;
+
+ if (m == RLIM_INFINITY || m > INT_MAX) /* Saturate on overflow. After all fds are "int", hence can
+ * never be above INT_MAX */
+ return INT_MAX;
+
+ return (int) (m - 1);
+}
+
int close_all_fds(const int except[], size_t n_except) {
_cleanup_closedir_ DIR *d = NULL;
struct dirent *de;
@@ -198,20 +219,14 @@ int close_all_fds(const int except[], size_t n_except) {
d = opendir("/proc/self/fd");
if (!d) {
- struct rlimit rl;
int fd, max_fd;
- /* When /proc isn't available (for example in chroots) the fallback is brute forcing through the fd
- * table */
-
- assert_se(getrlimit(RLIMIT_NOFILE, &rl) >= 0);
-
- if (rl.rlim_max == 0)
- return -EINVAL;
+ /* When /proc isn't available (for example in chroots) the fallback is brute forcing through
+ * the fd table */
- /* Let's take special care if the resource limit is set to unlimited, or actually larger than the range
- * of 'int'. Let's avoid implicit overflows. */
- max_fd = (rl.rlim_max == RLIM_INFINITY || rl.rlim_max > INT_MAX) ? INT_MAX : (int) (rl.rlim_max - 1);
+ max_fd = get_max_fd();
+ if (max_fd < 0)
+ return max_fd;
for (fd = 3; fd >= 0; fd = fd < max_fd ? fd + 1 : -1) {
int q;
diff --git a/src/basic/fd-util.h b/src/basic/fd-util.h
index 00303a7e45..4085a244d2 100644
--- a/src/basic/fd-util.h
+++ b/src/basic/fd-util.h
@@ -14,7 +14,7 @@
int close_nointr(int fd);
int safe_close(int fd);
-void safe_close_pair(int p[]);
+void safe_close_pair(int p[static 2]);
static inline int safe_close_above_stdio(int fd) {
if (fd < 3) /* Don't close stdin/stdout/stderr, but still invalidate the fd by returning -1 */
diff --git a/src/basic/hashmap.c b/src/basic/hashmap.c
index 5a4bb37b82..66e9e0046b 100644
--- a/src/basic/hashmap.c
+++ b/src/basic/hashmap.c
@@ -345,7 +345,7 @@ static unsigned base_bucket_hash(HashmapBase *h, const void *p) {
}
#define bucket_hash(h, p) base_bucket_hash(HASHMAP_BASE(h), p)
-static inline void base_set_dirty(HashmapBase *h) {
+static void base_set_dirty(HashmapBase *h) {
h->dirty = true;
}
#define hashmap_set_dirty(h) base_set_dirty(HASHMAP_BASE(h))
@@ -888,7 +888,8 @@ void internal_hashmap_clear(HashmapBase *h, free_func_t default_free_key, free_f
* themselves from our hash table a second time, the entry is already gone. */
while (internal_hashmap_size(h) > 0) {
- void *v, *k;
+ void *k = NULL;
+ void *v;
v = internal_hashmap_first_key_and_value(h, true, &k);
@@ -1515,8 +1516,11 @@ void *internal_hashmap_first_key_and_value(HashmapBase *h, bool remove, void **r
unsigned idx;
idx = find_first_entry(h);
- if (idx == IDX_NIL)
+ if (idx == IDX_NIL) {
+ if (ret_key)
+ *ret_key = NULL;
return NULL;
+ }
e = bucket_at(h, idx);
key = (void*) e->key;
diff --git a/src/basic/hashmap.h b/src/basic/hashmap.h
index 5bf807a76f..e16a9f9e30 100644
--- a/src/basic/hashmap.h
+++ b/src/basic/hashmap.h
@@ -326,7 +326,6 @@ static inline void *ordered_hashmap_first_key_and_value(OrderedHashmap *h, void
return internal_hashmap_first_key_and_value(HASHMAP_BASE(h), false, ret);
}
-
static inline void *hashmap_steal_first(Hashmap *h) {
return internal_hashmap_first_key_and_value(HASHMAP_BASE(h), true, NULL);
}
diff --git a/src/basic/in-addr-util.c b/src/basic/in-addr-util.c
index 411efb242b..2bffe473ca 100644
--- a/src/basic/in-addr-util.c
+++ b/src/basic/in-addr-util.c
@@ -495,9 +495,8 @@ int in_addr_parse_prefixlen(int family, const char *p, unsigned char *ret) {
return 0;
}
-int in_addr_prefix_from_string_internal(
+int in_addr_prefix_from_string(
const char *p,
- bool use_default_prefixlen,
int family,
union in_addr_union *ret_prefix,
unsigned char *ret_prefixlen) {
@@ -531,13 +530,6 @@ int in_addr_prefix_from_string_internal(
r = in_addr_parse_prefixlen(family, e+1, &k);
if (r < 0)
return r;
- } else if (use_default_prefixlen) {
- if (family == AF_INET) {
- r = in4_addr_default_prefixlen(&buffer.in, &k);
- if (r < 0)
- return r;
- } else
- k = 0;
} else
k = FAMILY_ADDRESS_SIZE(family) * 8;
@@ -551,7 +543,7 @@ int in_addr_prefix_from_string_internal(
int in_addr_prefix_from_string_auto_internal(
const char *p,
- bool use_default_prefixlen,
+ InAddrPrefixLenMode mode,
int *ret_family,
union in_addr_union *ret_prefix,
unsigned char *ret_prefixlen) {
@@ -582,15 +574,24 @@ int in_addr_prefix_from_string_auto_internal(
r = in_addr_parse_prefixlen(family, e+1, &k);
if (r < 0)
return r;
- } else if (use_default_prefixlen) {
- if (family == AF_INET) {
- r = in4_addr_default_prefixlen(&buffer.in, &k);
- if (r < 0)
- return r;
- } else
- k = 0;
} else
- k = FAMILY_ADDRESS_SIZE(family) * 8;
+ switch (mode) {
+ case PREFIXLEN_FULL:
+ k = FAMILY_ADDRESS_SIZE(family) * 8;
+ break;
+ case PREFIXLEN_REFUSE:
+ return -ENOANO; /* To distinguish this error from others. */
+ case PREFIXLEN_LEGACY:
+ if (family == AF_INET) {
+ r = in4_addr_default_prefixlen(&buffer.in, &k);
+ if (r < 0)
+ return r;
+ } else
+ k = 0;
+ break;
+ default:
+ assert_not_reached("Invalid prefixlen mode");
+ }
if (ret_family)
*ret_family = family;
diff --git a/src/basic/in-addr-util.h b/src/basic/in-addr-util.h
index 5de85cc422..3069790519 100644
--- a/src/basic/in-addr-util.h
+++ b/src/basic/in-addr-util.h
@@ -45,19 +45,17 @@ int in4_addr_default_subnet_mask(const struct in_addr *addr, struct in_addr *mas
int in_addr_mask(int family, union in_addr_union *addr, unsigned char prefixlen);
int in_addr_prefix_covers(int family, const union in_addr_union *prefix, unsigned char prefixlen, const union in_addr_union *address);
int in_addr_parse_prefixlen(int family, const char *p, unsigned char *ret);
-int in_addr_prefix_from_string_internal(const char *p, bool use_default_prefixlen, int family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen);
-int in_addr_prefix_from_string_auto_internal(const char *p, bool use_default_prefixlen, int *ret_family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen);
-static inline int in_addr_prefix_from_string(const char *p, int family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen) {
- return in_addr_prefix_from_string_internal(p, false, family, ret_prefix, ret_prefixlen);
-}
+int in_addr_prefix_from_string(const char *p, int family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen);
+
+typedef enum InAddrPrefixLenMode {
+ PREFIXLEN_FULL, /* Default to prefixlen of address size, 32 for IPv4 or 128 for IPv6, if not specified. */
+ PREFIXLEN_REFUSE, /* Fail with -ENOANO if prefixlen is not specified. */
+ PREFIXLEN_LEGACY, /* Default to legacy default prefixlen calculation from address if not specified. */
+} InAddrPrefixLenMode;
+
+int in_addr_prefix_from_string_auto_internal(const char *p, InAddrPrefixLenMode mode, int *ret_family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen);
static inline int in_addr_prefix_from_string_auto(const char *p, int *ret_family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen) {
- return in_addr_prefix_from_string_auto_internal(p, false, ret_family, ret_prefix, ret_prefixlen);
-}
-static inline int in_addr_default_prefix_from_string(const char *p, int family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen) {
- return in_addr_prefix_from_string_internal(p, true, family, ret_prefix, ret_prefixlen);
-}
-static inline int in_addr_default_prefix_from_string_auto(const char *p, int *ret_family, union in_addr_union *ret_prefix, unsigned char *ret_prefixlen) {
- return in_addr_prefix_from_string_auto_internal(p, true, ret_family, ret_prefix, ret_prefixlen);
+ return in_addr_prefix_from_string_auto_internal(p, PREFIXLEN_FULL, ret_family, ret_prefix, ret_prefixlen);
}
static inline size_t FAMILY_ADDRESS_SIZE(int family) {
diff --git a/src/basic/io-util.c b/src/basic/io-util.c
index 1f64cc933b..575398fbe6 100644
--- a/src/basic/io-util.c
+++ b/src/basic/io-util.c
@@ -8,6 +8,7 @@
#include <unistd.h>
#include "io-util.h"
+#include "string-util.h"
#include "time-util.h"
int flush_fd(int fd) {
@@ -252,3 +253,12 @@ ssize_t sparse_write(int fd, const void *p, size_t sz, size_t run_length) {
return q - (const uint8_t*) p;
}
+
+char* set_iovec_string_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value) {
+ char *x;
+
+ x = strappend(field, value);
+ if (x)
+ iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(x);
+ return x;
+}
diff --git a/src/basic/io-util.h b/src/basic/io-util.h
index ed189b5820..792a64ad5e 100644
--- a/src/basic/io-util.h
+++ b/src/basic/io-util.h
@@ -71,3 +71,5 @@ static inline bool FILE_SIZE_VALID_OR_INFINITY(uint64_t l) {
#define IOVEC_MAKE(base, len) (struct iovec) IOVEC_INIT(base, len)
#define IOVEC_INIT_STRING(string) IOVEC_INIT((char*) string, strlen(string))
#define IOVEC_MAKE_STRING(string) (struct iovec) IOVEC_INIT_STRING(string)
+
+char* set_iovec_string_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value);
diff --git a/src/basic/meson.build b/src/basic/meson.build
index 23b5e75bd8..e5852f32f9 100644
--- a/src/basic/meson.build
+++ b/src/basic/meson.build
@@ -292,7 +292,8 @@ libbasic = static_library(
'basic',
basic_sources,
include_directories : includes,
- dependencies : [threads,
+ dependencies : [versiondep,
+ threads,
libcap,
libselinux,
libm],
diff --git a/src/basic/missing_if_link.h b/src/basic/missing_if_link.h
index 07675426bb..761797f56a 100644
--- a/src/basic/missing_if_link.h
+++ b/src/basic/missing_if_link.h
@@ -110,6 +110,9 @@ enum ipvlan_mode {
#define IFLA_MAX 51
#endif
+#if !HAVE_IFLA_BOND_MODE /* linux@90af231106c0b8d223c27d35464af95cb3d9cacf (3.13) */
+#define IFLA_BOND_MODE 1
+#endif
#if !HAVE_IFLA_BOND_ACTIVE_SLAVE /* linux@ec76aa49855f6d6fea5e01de179fb57dd47c619d (3.13) */
#define IFLA_BOND_ACTIVE_SLAVE 2
#endif
diff --git a/src/basic/missing_syscall.h b/src/basic/missing_syscall.h
index d5d4b26acb..d1aa32218b 100644
--- a/src/basic/missing_syscall.h
+++ b/src/basic/missing_syscall.h
@@ -3,6 +3,7 @@
/* Missing glibc definitions to access certain kernel APIs */
+#include <errno.h>
#include <fcntl.h>
#include <sys/syscall.h>
#include <sys/types.h>
diff --git a/src/basic/path-util.h b/src/basic/path-util.h
index 094aa47c01..86c5a577cb 100644
--- a/src/basic/path-util.h
+++ b/src/basic/path-util.h
@@ -131,7 +131,7 @@ char *prefix_root(const char *root, const char *path);
_ret = _path; \
else { \
_l = strlen(_root) + 1 + strlen(_path) + 1; \
- _n = alloca(_l); \
+ _n = newa(char, _l); \
_p = stpcpy(_n, _root); \
while (_p > _n && _p[-1] == '/') \
_p--; \
diff --git a/src/basic/prioq.c b/src/basic/prioq.c
index cfd08d5d23..76b27fa0a8 100644
--- a/src/basic/prioq.c
+++ b/src/basic/prioq.c
@@ -259,15 +259,14 @@ int prioq_reshuffle(Prioq *q, void *data, unsigned *idx) {
return 1;
}
-void *prioq_peek(Prioq *q) {
-
+void *prioq_peek_by_index(Prioq *q, unsigned idx) {
if (!q)
return NULL;
- if (q->n_items <= 0)
+ if (idx >= q->n_items)
return NULL;
- return q->items[0].data;
+ return q->items[idx].data;
}
void *prioq_pop(Prioq *q) {
diff --git a/src/basic/prioq.h b/src/basic/prioq.h
index bba5c7caa4..1fb57bfa4c 100644
--- a/src/basic/prioq.h
+++ b/src/basic/prioq.h
@@ -19,8 +19,14 @@ int prioq_put(Prioq *q, void *data, unsigned *idx);
int prioq_remove(Prioq *q, void *data, unsigned *idx);
int prioq_reshuffle(Prioq *q, void *data, unsigned *idx);
-void *prioq_peek(Prioq *q) _pure_;
+void *prioq_peek_by_index(Prioq *q, unsigned idx) _pure_;
+static inline void *prioq_peek(Prioq *q) {
+ return prioq_peek_by_index(q, 0);
+}
void *prioq_pop(Prioq *q);
+#define PRIOQ_FOREACH_ITEM(q, p) \
+ for (unsigned _i = 0; (p = prioq_peek_by_index(q, _i)); _i++)
+
unsigned prioq_size(Prioq *q) _pure_;
bool prioq_isempty(Prioq *q) _pure_;
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
index 448503409b..78ce43b944 100644
--- a/src/basic/process-util.c
+++ b/src/basic/process-util.c
@@ -102,7 +102,8 @@ int get_process_comm(pid_t pid, char **ret) {
int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char **line) {
_cleanup_fclose_ FILE *f = NULL;
bool space = false;
- char *k, *ans = NULL;
+ char *k;
+ _cleanup_free_ char *ans = NULL;
const char *p;
int c;
@@ -129,6 +130,13 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
(void) __fsetlocking(f, FSETLOCKING_BYCALLER);
+ if (max_length == 0) {
+ /* This is supposed to be a safety guard against runaway command lines. */
+ long l = sysconf(_SC_ARG_MAX);
+ assert(l > 0);
+ max_length = l;
+ }
+
if (max_length == 1) {
/* If there's only room for one byte, return the empty string */
@@ -136,35 +144,9 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
if (!ans)
return -ENOMEM;
- *line = ans;
+ *line = TAKE_PTR(ans);
return 0;
- } else if (max_length == 0) {
- size_t len = 0, allocated = 0;
-
- while ((c = getc(f)) != EOF) {
-
- if (!GREEDY_REALLOC(ans, allocated, len+3)) {
- free(ans);
- return -ENOMEM;
- }
-
- if (isprint(c)) {
- if (space) {
- ans[len++] = ' ';
- space = false;
- }
-
- ans[len++] = c;
- } else if (len > 0)
- space = true;
- }
-
- if (len > 0)
- ans[len] = '\0';
- else
- ans = mfree(ans);
-
} else {
bool dotdotdot = false;
size_t left;
@@ -227,7 +209,7 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
_cleanup_free_ char *t = NULL;
int h;
- free(ans);
+ ans = mfree(ans);
if (!comm_fallback)
return -ENOENT;
@@ -236,37 +218,42 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
if (h < 0)
return h;
- if (max_length == 0)
- ans = strjoin("[", t, "]");
- else {
- size_t l;
-
- l = strlen(t);
+ size_t l = strlen(t);
- if (l + 3 <= max_length)
- ans = strjoin("[", t, "]");
- else if (max_length <= 6) {
+ if (l + 3 <= max_length) {
+ ans = strjoin("[", t, "]");
+ if (!ans)
+ return -ENOMEM;
- ans = new(char, max_length);
- if (!ans)
- return -ENOMEM;
+ } else if (max_length <= 6) {
+ ans = new(char, max_length);
+ if (!ans)
+ return -ENOMEM;
- memcpy(ans, "[...]", max_length-1);
- ans[max_length-1] = 0;
- } else {
- t[max_length - 6] = 0;
+ memcpy(ans, "[...]", max_length-1);
+ ans[max_length-1] = 0;
+ } else {
+ t[max_length - 6] = 0;
- /* Chop off final spaces */
- delete_trailing_chars(t, WHITESPACE);
+ /* Chop off final spaces */
+ delete_trailing_chars(t, WHITESPACE);
- ans = strjoin("[", t, "...]");
- }
+ ans = strjoin("[", t, "...]");
+ if (!ans)
+ return -ENOMEM;
}
- if (!ans)
- return -ENOMEM;
+
+ *line = TAKE_PTR(ans);
+ return 0;
}
- *line = ans;
+ k = realloc(ans, strlen(ans) + 1);
+ if (!k)
+ return -ENOMEM;
+
+ ans = NULL;
+ *line = k;
+
return 0;
}
diff --git a/src/basic/process-util.h b/src/basic/process-util.h
index 496e14d3de..c85ea30ecc 100644
--- a/src/basic/process-util.h
+++ b/src/basic/process-util.h
@@ -24,8 +24,8 @@
if (_pid_ == 0) { \
_r_ = ("/proc/self/" field); \
} else { \
- _r_ = alloca(STRLEN("/proc/") + DECIMAL_STR_MAX(pid_t) + 1 + sizeof(field)); \
- sprintf((char*) _r_, "/proc/"PID_FMT"/" field, _pid_); \
+ _r_ = newa(char, STRLEN("/proc/") + DECIMAL_STR_MAX(pid_t) + 1 + sizeof(field)); \
+ sprintf((char*) _r_, "/proc/"PID_FMT"/" field, _pid_); \
} \
_r_; \
})
diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c
index a159e344b3..7aaf95bfce 100644
--- a/src/basic/procfs-util.c
+++ b/src/basic/procfs-util.c
@@ -201,13 +201,11 @@ int procfs_cpu_get_usage(nsec_t *ret) {
return 0;
}
-int procfs_memory_get_current(uint64_t *ret) {
+int procfs_memory_get(uint64_t *ret_total, uint64_t *ret_used) {
uint64_t mem_total = UINT64_MAX, mem_free = UINT64_MAX;
_cleanup_fclose_ FILE *f = NULL;
int r;
- assert(ret);
-
f = fopen("/proc/meminfo", "re");
if (!f)
return -errno;
@@ -262,6 +260,9 @@ int procfs_memory_get_current(uint64_t *ret) {
if (mem_free > mem_total)
return -EINVAL;
- *ret = (mem_total - mem_free) * 1024U;
+ if (ret_total)
+ *ret_total = mem_total * 1024U;
+ if (ret_used)
+ *ret_used = (mem_total - mem_free) * 1024U;
return 0;
}
diff --git a/src/basic/procfs-util.h b/src/basic/procfs-util.h
index f697ed92bc..5a44e9eff7 100644
--- a/src/basic/procfs-util.h
+++ b/src/basic/procfs-util.h
@@ -11,4 +11,7 @@ int procfs_tasks_get_current(uint64_t *ret);
int procfs_cpu_get_usage(nsec_t *ret);
-int procfs_memory_get_current(uint64_t *ret);
+int procfs_memory_get(uint64_t *ret_total, uint64_t *ret_used);
+static inline int procfs_memory_get_used(uint64_t *ret) {
+ return procfs_memory_get(NULL, ret);
+}
diff --git a/src/basic/siphash24.c b/src/basic/siphash24.c
index 30c228a78a..61180819b1 100644
--- a/src/basic/siphash24.c
+++ b/src/basic/siphash24.c
@@ -23,13 +23,13 @@
#include "siphash24.h"
#include "unaligned.h"
-static inline uint64_t rotate_left(uint64_t x, uint8_t b) {
+static uint64_t rotate_left(uint64_t x, uint8_t b) {
assert(b < 64);
return (x << b) | (x >> (64 - b));
}
-static inline void sipround(struct siphash *state) {
+static void sipround(struct siphash *state) {
assert(state);
state->v0 += state->v1;
@@ -48,7 +48,7 @@ static inline void sipround(struct siphash *state) {
state->v2 = rotate_left(state->v2, 32);
}
-void siphash24_init(struct siphash *state, const uint8_t k[16]) {
+void siphash24_init(struct siphash *state, const uint8_t k[static 16]) {
uint64_t k0, k1;
assert(state);
@@ -187,7 +187,7 @@ uint64_t siphash24_finalize(struct siphash *state) {
return state->v0 ^ state->v1 ^ state->v2 ^ state->v3;
}
-uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[16]) {
+uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[static 16]) {
struct siphash state;
assert(in);
diff --git a/src/basic/siphash24.h b/src/basic/siphash24.h
index 70a4a03f6a..67c4f7560c 100644
--- a/src/basic/siphash24.h
+++ b/src/basic/siphash24.h
@@ -15,14 +15,14 @@ struct siphash {
size_t inlen;
};
-void siphash24_init(struct siphash *state, const uint8_t k[16]);
+void siphash24_init(struct siphash *state, const uint8_t k[static 16]);
void siphash24_compress(const void *in, size_t inlen, struct siphash *state);
#define siphash24_compress_byte(byte, state) siphash24_compress((const uint8_t[]) { (byte) }, 1, (state))
uint64_t siphash24_finalize(struct siphash *state);
-uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[16]);
+uint64_t siphash24(const void *in, size_t inlen, const uint8_t k[static 16]);
-static inline uint64_t siphash24_string(const char *s, const uint8_t k[16]) {
+static inline uint64_t siphash24_string(const char *s, const uint8_t k[static 16]) {
return siphash24(s, strlen(s) + 1, k);
}
diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c
index 57700e2388..ea2bbc368b 100644
--- a/src/basic/stat-util.c
+++ b/src/basic/stat-util.c
@@ -67,13 +67,22 @@ int is_device_node(const char *path) {
return !!(S_ISBLK(info.st_mode) || S_ISCHR(info.st_mode));
}
-int dir_is_empty(const char *path) {
- _cleanup_closedir_ DIR *d;
+int dir_is_empty_at(int dir_fd, const char *path) {
+ _cleanup_close_ int fd = -1;
+ _cleanup_closedir_ DIR *d = NULL;
struct dirent *de;
- d = opendir(path);
+ if (path)
+ fd = openat(dir_fd, path, O_RDONLY|O_DIRECTORY|O_CLOEXEC);
+ else
+ fd = fcntl(fd, F_DUPFD_CLOEXEC, 3);
+ if (fd < 0)
+ return -errno;
+
+ d = fdopendir(fd);
if (!d)
return -errno;
+ fd = -1;
FOREACH_DIRENT(de, d, return -errno)
return 0;
@@ -338,7 +347,6 @@ int device_path_make_major_minor(mode_t mode, dev_t devno, char **ret) {
return -ENOMEM;
return 0;
-
}
int device_path_make_canonical(mode_t mode, dev_t devno, char **ret) {
diff --git a/src/basic/stat-util.h b/src/basic/stat-util.h
index 0a08e642b5..74fb7251b3 100644
--- a/src/basic/stat-util.h
+++ b/src/basic/stat-util.h
@@ -15,7 +15,10 @@ int is_dir(const char *path, bool follow);
int is_dir_fd(int fd);
int is_device_node(const char *path);
-int dir_is_empty(const char *path);
+int dir_is_empty_at(int dir_fd, const char *path);
+static inline int dir_is_empty(const char *path) {
+ return dir_is_empty_at(AT_FDCWD, path);
+}
static inline int dir_is_populated(const char *path) {
int r;
diff --git a/src/basic/string-util.c b/src/basic/string-util.c
index 05469ac01f..93917bc0f0 100644
--- a/src/basic/string-util.c
+++ b/src/basic/string-util.c
@@ -742,7 +742,7 @@ char *strreplace(const char *text, const char *old_string, const char *new_strin
return ret;
}
-static void advance_offsets(ssize_t diff, size_t offsets[2], size_t shift[2], size_t size) {
+static void advance_offsets(ssize_t diff, size_t offsets[static 2], size_t shift[static 2], size_t size) {
if (!offsets)
return;
diff --git a/src/basic/string-util.h b/src/basic/string-util.h
index a5b5a16a5d..38070abb22 100644
--- a/src/basic/string-util.h
+++ b/src/basic/string-util.h
@@ -6,6 +6,7 @@
#include <stddef.h>
#include <string.h>
+#include "alloc-util.h"
#include "macro.h"
/* What is interpreted as whitespace? */
@@ -111,7 +112,7 @@ char *strjoin_real(const char *x, ...) _sentinel_;
size_t _i_; \
for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
_len_ += strlen(_appendees_[_i_]); \
- _p_ = _d_ = alloca(_len_ + 1); \
+ _p_ = _d_ = newa(char, _len_ + 1); \
for (_i_ = 0; _i_ < ELEMENTSOF(_appendees_) && _appendees_[_i_]; _i_++) \
_p_ = stpcpy(_p_, _appendees_[_i_]); \
*_p_ = 0; \
diff --git a/src/basic/strv.h b/src/basic/strv.h
index aa4cd4aaca..392cab65be 100644
--- a/src/basic/strv.h
+++ b/src/basic/strv.h
@@ -156,17 +156,10 @@ void strv_print(char **l);
_found; \
})
-#define FOREACH_STRING(x, ...) \
- for (char **_l = ({ \
- char **_ll = STRV_MAKE(__VA_ARGS__); \
- x = _ll ? _ll[0] : NULL; \
- _ll; \
- }); \
- _l && *_l; \
- x = ({ \
- _l ++; \
- _l[0]; \
- }))
+#define FOREACH_STRING(x, y, ...) \
+ for (char **_l = STRV_MAKE(({ x = y; }), ##__VA_ARGS__); \
+ x; \
+ x = *(++_l))
char **strv_reverse(char **l);
char **strv_shell_escape(char **l, const char *bad);
diff --git a/src/basic/time-util.c b/src/basic/time-util.c
index 557c75debc..62cdc305f9 100644
--- a/src/basic/time-util.c
+++ b/src/basic/time-util.c
@@ -24,7 +24,6 @@
#include "parse-util.h"
#include "path-util.h"
#include "process-util.h"
-#include "serialize.h"
#include "stat-util.h"
#include "string-util.h"
#include "strv.h"
diff --git a/src/basic/tmpfile-util.c b/src/basic/tmpfile-util.c
index 669eb2666c..bc92d6a6de 100644
--- a/src/basic/tmpfile-util.c
+++ b/src/basic/tmpfile-util.c
@@ -8,6 +8,7 @@
#include "hexdecoct.h"
#include "macro.h"
#include "memfd-util.h"
+#include "missing_fcntl.h"
#include "missing_syscall.h"
#include "path-util.h"
#include "process-util.h"
diff --git a/src/basic/unit-name.h b/src/basic/unit-name.h
index d373f03aca..0629db3f67 100644
--- a/src/basic/unit-name.h
+++ b/src/basic/unit-name.h
@@ -9,9 +9,9 @@
#define UNIT_NAME_MAX 256
typedef enum UnitNameFlags {
- UNIT_NAME_PLAIN = 1, /* Allow foo.service */
- UNIT_NAME_INSTANCE = 2, /* Allow foo@bar.service */
- UNIT_NAME_TEMPLATE = 4, /* Allow foo@.service */
+ UNIT_NAME_PLAIN = 1 << 0, /* Allow foo.service */
+ UNIT_NAME_INSTANCE = 1 << 1, /* Allow foo@bar.service */
+ UNIT_NAME_TEMPLATE = 1 << 2, /* Allow foo@.service */
UNIT_NAME_ANY = UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE,
} UnitNameFlags;
@@ -50,8 +50,8 @@ int unit_name_from_path_instance(const char *prefix, const char *path, const cha
int unit_name_to_path(const char *name, char **ret);
typedef enum UnitNameMangle {
- UNIT_NAME_MANGLE_GLOB = 1,
- UNIT_NAME_MANGLE_WARN = 2,
+ UNIT_NAME_MANGLE_GLOB = 1 << 0,
+ UNIT_NAME_MANGLE_WARN = 1 << 1,
} UnitNameMangle;
int unit_name_mangle_with_suffix(const char *name, UnitNameMangle flags, const char *suffix, char **ret);
diff --git a/src/basic/user-util.c b/src/basic/user-util.c
index d410c9068b..260f3d2057 100644
--- a/src/basic/user-util.c
+++ b/src/basic/user-util.c
@@ -87,7 +87,7 @@ char *getusername_malloc(void) {
return uid_to_name(getuid());
}
-static inline bool is_nologin_shell(const char *shell) {
+static bool is_nologin_shell(const char *shell) {
return PATH_IN_SET(shell,
/* 'nologin' is the friendliest way to disable logins for a user account. It prints a nice
@@ -733,10 +733,6 @@ int maybe_setgroups(size_t size, const gid_t *list) {
}
bool synthesize_nobody(void) {
-
-#ifdef NOLEGACY
- return true;
-#else
/* Returns true when we shall synthesize the "nobody" user (which we do by default). This can be turned off by
* touching /etc/systemd/dont-synthesize-nobody in order to provide upgrade compatibility with legacy systems
* that used the "nobody" user name and group name for other UIDs/GIDs than 65534.
@@ -750,7 +746,6 @@ bool synthesize_nobody(void) {
cache = access("/etc/systemd/dont-synthesize-nobody", F_OK) < 0;
return cache;
-#endif
}
int putpwent_sane(const struct passwd *pw, FILE *stream) {
diff --git a/src/basic/util.c b/src/basic/util.c
index c4f12a6daa..e577c93e60 100644
--- a/src/basic/util.c
+++ b/src/basic/util.c
@@ -557,7 +557,7 @@ uint64_t system_tasks_max_scale(uint64_t v, uint64_t max) {
}
int version(void) {
- puts(PACKAGE_STRING "\n"
+ puts("systemd " STRINGIFY(PROJECT_VERSION) " (" GIT_VERSION ")\n"
SYSTEMD_FEATURES);
return 0;
}
diff --git a/src/basic/util.h b/src/basic/util.h
index f009d37d4c..dc33d66067 100644
--- a/src/basic/util.h
+++ b/src/basic/util.h
@@ -174,12 +174,21 @@ static inline void *mempset(void *s, int c, size_t n) {
}
static inline void _reset_errno_(int *saved_errno) {
+ if (*saved_errno < 0) /* Invalidated by UNPROTECT_ERRNO? */
+ return;
+
errno = *saved_errno;
}
#define PROTECT_ERRNO \
_cleanup_(_reset_errno_) _unused_ int _saved_errno_ = errno
+#define UNPROTECT_ERRNO \
+ do { \
+ errno = _saved_errno_; \
+ _saved_errno_ = -1; \
+ } while (false)
+
static inline int negative_errno(void) {
/* This helper should be used to shut up gcc if you know 'errno' is
* negative. Instead of "return -errno;", use "return negative_errno();"
diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c
index 4719eeaf4b..9bf6895831 100644
--- a/src/boot/efi/boot.c
+++ b/src/boot/efi/boot.c
@@ -17,7 +17,7 @@
#endif
/* magic string to find in the binary image */
-static const char __attribute__((used)) magic[] = "#### LoaderInfo: systemd-boot " PACKAGE_VERSION " ####";
+static const char __attribute__((used)) magic[] = "#### LoaderInfo: systemd-boot " GIT_VERSION " ####";
static const EFI_GUID global_guid = EFI_GLOBAL_VARIABLE;
@@ -361,7 +361,7 @@ static VOID print_status(Config *config, CHAR16 *loaded_image_path) {
uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_LIGHTGRAY|EFI_BACKGROUND_BLACK);
uefi_call_wrapper(ST->ConOut->ClearScreen, 1, ST->ConOut);
- Print(L"systemd-boot version: " PACKAGE_VERSION "\n");
+ Print(L"systemd-boot version: " GIT_VERSION "\n");
Print(L"architecture: " EFI_MACHINE_TYPE_NAME "\n");
Print(L"loaded image: %s\n", loaded_image_path);
Print(L"UEFI specification: %d.%02d\n", ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff);
@@ -804,7 +804,7 @@ static BOOLEAN menu_run(
break;
case KEYPRESS(0, 0, 'v'):
- status = PoolPrint(L"systemd-boot " PACKAGE_VERSION " (" EFI_MACHINE_TYPE_NAME "), UEFI Specification %d.%02d, Vendor %s %d.%02d",
+ status = PoolPrint(L"systemd-boot " GIT_VERSION " (" EFI_MACHINE_TYPE_NAME "), UEFI Specification %d.%02d, Vendor %s %d.%02d",
ST->Hdr.Revision >> 16, ST->Hdr.Revision & 0xffff,
ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
break;
@@ -1000,7 +1000,7 @@ skip:
value++;
/* unquote */
- if (value[0] == '\"' && line[linelen-1] == '\"') {
+ if (value[0] == '"' && line[linelen-1] == '"') {
value++;
line[linelen-1] = '\0';
}
@@ -2097,7 +2097,7 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
InitializeLib(image, sys_table);
init_usec = time_usec();
efivar_set_time_usec(L"LoaderTimeInitUSec", init_usec);
- efivar_set(L"LoaderInfo", L"systemd-boot " PACKAGE_VERSION, FALSE);
+ efivar_set(L"LoaderInfo", L"systemd-boot " GIT_VERSION, FALSE);
infostr = PoolPrint(L"%s %d.%02d", ST->FirmwareVendor, ST->FirmwareRevision >> 16, ST->FirmwareRevision & 0xffff);
efivar_set(L"LoaderFirmwareInfo", infostr, FALSE);
diff --git a/src/boot/efi/disk.c b/src/boot/efi/disk.c
index a31b7bb478..49ee81b4d7 100644
--- a/src/boot/efi/disk.c
+++ b/src/boot/efi/disk.c
@@ -5,7 +5,7 @@
#include "util.h"
-EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[37]) {
+EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[static 37]) {
EFI_DEVICE_PATH *device_path;
/* export the device path this image is started from */
diff --git a/src/boot/efi/disk.h b/src/boot/efi/disk.h
index 2a0b8ff2a7..41c4cce434 100644
--- a/src/boot/efi/disk.h
+++ b/src/boot/efi/disk.h
@@ -1,4 +1,4 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#pragma once
-EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[37]);
+EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[static 37]);
diff --git a/src/boot/efi/linux.c b/src/boot/efi/linux.c
index d1605523d8..5b4c085880 100644
--- a/src/boot/efi/linux.c
+++ b/src/boot/efi/linux.c
@@ -52,7 +52,7 @@ struct SetupHeader {
#ifdef __x86_64__
typedef VOID(*handover_f)(VOID *image, EFI_SYSTEM_TABLE *table, struct SetupHeader *setup);
-static inline VOID linux_efi_handover(EFI_HANDLE image, struct SetupHeader *setup) {
+static VOID linux_efi_handover(EFI_HANDLE image, struct SetupHeader *setup) {
handover_f handover;
asm volatile ("cli");
@@ -61,7 +61,7 @@ static inline VOID linux_efi_handover(EFI_HANDLE image, struct SetupHeader *setu
}
#else
typedef VOID(*handover_f)(VOID *image, EFI_SYSTEM_TABLE *table, struct SetupHeader *setup) __attribute__((regparm(0)));
-static inline VOID linux_efi_handover(EFI_HANDLE image, struct SetupHeader *setup) {
+static VOID linux_efi_handover(EFI_HANDLE image, struct SetupHeader *setup) {
handover_f handover;
handover = (handover_f)((UINTN)setup->code32_start + setup->handover_offset);
diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
index aa897c62a1..2140151844 100644
--- a/src/boot/efi/meson.build
+++ b/src/boot/efi/meson.build
@@ -78,7 +78,6 @@ endif
if have_gnu_efi
efi_conf = configuration_data()
- efi_conf.set_quoted('PACKAGE_VERSION', meson.project_version())
efi_conf.set_quoted('EFI_MACHINE_TYPE_NAME', EFI_MACHINE_TYPE_NAME)
efi_conf.set10('ENABLE_TPM', get_option('tpm'))
efi_conf.set('SD_TPM_PCR', get_option('tpm-pcrindex'))
@@ -117,7 +116,8 @@ if have_gnu_efi
'-Wno-missing-field-initializers',
'-isystem', efi_incdir,
'-isystem', join_paths(efi_incdir, gnu_efi_path_arch),
- '-include', efi_config_h]
+ '-include', efi_config_h,
+ '-include', version_h]
if efi_arch == 'x86_64'
compile_args += ['-mno-red-zone',
'-mno-sse',
@@ -194,9 +194,7 @@ if have_gnu_efi
'-j', '.data',
'-j', '.dynamic',
'-j', '.dynsym',
- '-j', '.rel',
- '-j', '.rela',
- '-j', '.reloc']
+ '-j', '.rel*']
+ efi_format +
['@INPUT@', '@OUTPUT@'],
install : true,
diff --git a/src/boot/efi/stub.c b/src/boot/efi/stub.c
index d11e555748..6b07879971 100644
--- a/src/boot/efi/stub.c
+++ b/src/boot/efi/stub.c
@@ -12,7 +12,7 @@
#include "util.h"
/* magic string to find in the binary image */
-static const char __attribute__((used)) magic[] = "#### LoaderInfo: systemd-stub " PACKAGE_VERSION " ####";
+static const char __attribute__((used)) magic[] = "#### LoaderInfo: systemd-stub " GIT_VERSION " ####";
static const EFI_GUID global_guid = EFI_GLOBAL_VARIABLE;
@@ -117,7 +117,7 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
/* add StubInfo */
if (efivar_get_raw(&global_guid, L"StubInfo", &b, &size) != EFI_SUCCESS)
- efivar_set(L"StubInfo", L"systemd-stub " PACKAGE_VERSION, FALSE);
+ efivar_set(L"StubInfo", L"systemd-stub " GIT_VERSION, FALSE);
if (szs[3] > 0)
graphics_splash((UINT8 *)((UINTN)loaded_image->ImageBase + addrs[3]), szs[3], NULL);
diff --git a/src/busctl/busctl.c b/src/busctl/busctl.c
index 96b4177495..08d9e70c96 100644
--- a/src/busctl/busctl.c
+++ b/src/busctl/busctl.c
@@ -67,7 +67,7 @@ static int json_transform_message(sd_bus_message *m, JsonVariant **ret);
static void json_dump_with_flags(JsonVariant *v, FILE *f);
static int acquire_bus(bool set_monitor, sd_bus **ret) {
- _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
+ _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
int r;
r = sd_bus_new(&bus);
diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
index 5abfab03de..b3bda30cec 100644
--- a/src/cgtop/cgtop.c
+++ b/src/cgtop/cgtop.c
@@ -104,7 +104,7 @@ static const char *maybe_format_bytes(char *buf, size_t l, bool is_valid, uint64
static bool is_root_cgroup(const char *path) {
- /* Returns true if the specified path belongs to the root cgroup. The root cgroup is special on cgroupsv2 as it
+ /* Returns true if the specified path belongs to the root cgroup. The root cgroup is special on cgroup v2 as it
* carries only very few attributes in order not to export multiple truth about system state as most
* information is available elsewhere in /proc anyway. We need to be able to deal with that, and need to get
* our data from different sources in that case.
@@ -291,7 +291,7 @@ static int process(
} else if (streq(controller, "memory")) {
if (is_root_cgroup(path)) {
- r = procfs_memory_get_current(&g->memory);
+ r = procfs_memory_get_used(&g->memory);
if (r < 0)
return r;
} else {
diff --git a/src/core/automount.c b/src/core/automount.c
index de8010bf2e..6a8373920e 100644
--- a/src/core/automount.c
+++ b/src/core/automount.c
@@ -48,7 +48,7 @@ struct expire_data {
int ioctl_fd;
};
-static inline void expire_data_free(struct expire_data *data) {
+static void expire_data_free(struct expire_data *data) {
if (!data)
return;
@@ -578,10 +578,13 @@ static void automount_enter_waiting(Automount *a) {
goto fail;
}
- if (pipe2(p, O_NONBLOCK|O_CLOEXEC) < 0) {
+ if (pipe2(p, O_CLOEXEC) < 0) {
r = -errno;
goto fail;
}
+ r = fd_nonblock(p[0], true);
+ if (r < 0)
+ goto fail;
xsprintf(options, "fd=%i,pgrp="PID_FMT",minproto=5,maxproto=5,direct", p[1], getpgrp());
xsprintf(name, "systemd-"PID_FMT, getpid_cached());
diff --git a/src/core/bpf-devices.c b/src/core/bpf-devices.c
index dade7f0490..81e91fcb36 100644
--- a/src/core/bpf-devices.c
+++ b/src/core/bpf-devices.c
@@ -202,7 +202,6 @@ int cgroup_apply_device_bpf(Unit *u, BPFProgram *prog, CGroupDevicePolicy policy
if (r < 0)
return log_error_errno(r, "Failed to determine cgroup path: %m");
-
r = bpf_program_cgroup_attach(prog, BPF_CGROUP_DEVICE, path, BPF_F_ALLOW_MULTI);
if (r < 0)
return log_error_errno(r, "Attaching device control BPF program to cgroup %s failed: %m", path);
diff --git a/src/core/cgroup.c b/src/core/cgroup.c
index a7ce3fceaa..18d470b6d6 100644
--- a/src/core/cgroup.c
+++ b/src/core/cgroup.c
@@ -396,26 +396,31 @@ static void cgroup_xattr_apply(Unit *u) {
}
static int lookup_block_device(const char *p, dev_t *ret) {
- struct stat st = {};
+ dev_t rdev, dev = 0;
+ mode_t mode;
int r;
assert(p);
assert(ret);
- r = device_path_parse_major_minor(p, &st.st_mode, &st.st_rdev);
+ r = device_path_parse_major_minor(p, &mode, &rdev);
if (r == -ENODEV) { /* not a parsable device node, need to go to disk */
+ struct stat st;
if (stat(p, &st) < 0)
return log_warning_errno(errno, "Couldn't stat device '%s': %m", p);
+ rdev = (dev_t)st.st_rdev;
+ dev = (dev_t)st.st_dev;
+ mode = st.st_mode;
} else if (r < 0)
return log_warning_errno(r, "Failed to parse major/minor from path '%s': %m", p);
- if (S_ISCHR(st.st_mode)) {
+ if (S_ISCHR(mode)) {
log_warning("Device node '%s' is a character device, but block device needed.", p);
return -ENOTBLK;
- } else if (S_ISBLK(st.st_mode))
- *ret = st.st_rdev;
- else if (major(st.st_dev) != 0)
- *ret = st.st_dev; /* If this is not a device node then use the block device this file is stored on */
+ } else if (S_ISBLK(mode))
+ *ret = rdev;
+ else if (major(dev) != 0)
+ *ret = dev; /* If this is not a device node then use the block device this file is stored on */
else {
/* If this is btrfs, getting the backing block device is a bit harder */
r = btrfs_get_block_device(p, ret);
@@ -436,7 +441,8 @@ static int lookup_block_device(const char *p, dev_t *ret) {
}
static int whitelist_device(BPFProgram *prog, const char *path, const char *node, const char *acc) {
- struct stat st = {};
+ dev_t rdev;
+ mode_t mode;
int r;
assert(path);
@@ -445,11 +451,12 @@ static int whitelist_device(BPFProgram *prog, const char *path, const char *node
/* Some special handling for /dev/block/%u:%u, /dev/char/%u:%u, /run/systemd/inaccessible/chr and
* /run/systemd/inaccessible/blk paths. Instead of stat()ing these we parse out the major/minor directly. This
* means clients can use these path without the device node actually around */
- r = device_path_parse_major_minor(node, &st.st_mode, &st.st_rdev);
+ r = device_path_parse_major_minor(node, &mode, &rdev);
if (r < 0) {
if (r != -ENODEV)
return log_warning_errno(r, "Couldn't parse major/minor from device path '%s': %m", node);
+ struct stat st;
if (stat(node, &st) < 0)
return log_warning_errno(errno, "Couldn't stat device %s: %m", node);
@@ -457,22 +464,24 @@ static int whitelist_device(BPFProgram *prog, const char *path, const char *node
log_warning("%s is not a device.", node);
return -ENODEV;
}
+ rdev = (dev_t) st.st_rdev;
+ mode = st.st_mode;
}
if (cg_all_unified() > 0) {
if (!prog)
return 0;
- return cgroup_bpf_whitelist_device(prog, S_ISCHR(st.st_mode) ? BPF_DEVCG_DEV_CHAR : BPF_DEVCG_DEV_BLOCK,
- major(st.st_rdev), minor(st.st_rdev), acc);
+ return cgroup_bpf_whitelist_device(prog, S_ISCHR(mode) ? BPF_DEVCG_DEV_CHAR : BPF_DEVCG_DEV_BLOCK,
+ major(rdev), minor(rdev), acc);
} else {
char buf[2+DECIMAL_STR_MAX(dev_t)*2+2+4];
sprintf(buf,
"%c %u:%u %s",
- S_ISCHR(st.st_mode) ? 'c' : 'b',
- major(st.st_rdev), minor(st.st_rdev),
+ S_ISCHR(mode) ? 'c' : 'b',
+ major(rdev), minor(rdev),
acc);
/* Changing the devices list of a populated cgroup might result in EINVAL, hence ignore EINVAL here. */
@@ -881,7 +890,7 @@ static void cgroup_context_apply(
/* In fully unified mode these attributes don't exist on the host cgroup root. On legacy the weights exist, but
* setting the weight makes very little sense on the host root cgroup, as there are no other cgroups at this
* level. The quota exists there too, but any attempt to write to it is refused with EINVAL. Inside of
- * containers we want to leave control of these to the container manager (and if cgroupsv2 delegation is used
+ * containers we want to leave control of these to the container manager (and if cgroup v2 delegation is used
* we couldn't even write to them if we wanted to). */
if ((apply_mask & CGROUP_MASK_CPU) && !is_local_root) {
@@ -925,7 +934,7 @@ static void cgroup_context_apply(
}
}
- /* The 'io' controller attributes are not exported on the host's root cgroup (being a pure cgroupsv2
+ /* The 'io' controller attributes are not exported on the host's root cgroup (being a pure cgroup v2
* controller), and in case of containers we want to leave control of these attributes to the container manager
* (and we couldn't access that stuff anyway, even if we tried if proper delegation is used). */
if ((apply_mask & CGROUP_MASK_IO) && !is_local_root) {
@@ -1067,7 +1076,7 @@ static void cgroup_context_apply(
/* In unified mode 'memory' attributes do not exist on the root cgroup. In legacy mode 'memory.limit_in_bytes'
* exists on the root cgroup, but any writes to it are refused with EINVAL. And if we run in a container we
- * want to leave control to the container manager (and if proper cgroupsv2 delegation is used we couldn't even
+ * want to leave control to the container manager (and if proper cgroup v2 delegation is used we couldn't even
* write to this if we wanted to.) */
if ((apply_mask & CGROUP_MASK_MEMORY) && !is_local_root) {
@@ -1109,7 +1118,7 @@ static void cgroup_context_apply(
}
}
- /* On cgroupsv2 we can apply BPF everywhere. On cgroupsv1 we apply it everywhere except for the root of
+ /* On cgroup v2 we can apply BPF everywhere. On cgroup v1 we apply it everywhere except for the root of
* containers, where we leave this to the manager */
if ((apply_mask & (CGROUP_MASK_DEVICES | CGROUP_MASK_BPF_DEVICES)) &&
(is_host_root || cg_all_unified() > 0 || !is_local_root)) {
@@ -1841,14 +1850,14 @@ static bool unit_has_mask_realized(
/* Returns true if this unit is fully realized. We check four things:
*
* 1. Whether the cgroup was created at all
- * 2. Whether the cgroup was created in all the hierarchies we need it to be created in (in case of cgroupsv1)
- * 3. Whether the cgroup has all the right controllers enabled (in case of cgroupsv2)
+ * 2. Whether the cgroup was created in all the hierarchies we need it to be created in (in case of cgroup v1)
+ * 3. Whether the cgroup has all the right controllers enabled (in case of cgroup v2)
* 4. Whether the invalidation mask is currently zero
*
* If you wonder why we mask the target realization and enable mask with CGROUP_MASK_V1/CGROUP_MASK_V2: note
- * that there are three sets of bitmasks: CGROUP_MASK_V1 (for real cgroupv1 controllers), CGROUP_MASK_V2 (for
- * real cgroupv2 controllers) and CGROUP_MASK_BPF (for BPF-based pseudo-controllers). Now, cgroup_realized_mask
- * is only matters for cgroupsv1 controllers, and cgroup_enabled_mask only used for cgroupsv2, and if they
+ * that there are three sets of bitmasks: CGROUP_MASK_V1 (for real cgroup v1 controllers), CGROUP_MASK_V2 (for
+ * real cgroup v2 controllers) and CGROUP_MASK_BPF (for BPF-based pseudo-controllers). Now, cgroup_realized_mask
+ * is only matters for cgroup v1 controllers, and cgroup_enabled_mask only used for cgroup v2, and if they
* differ in the others, we don't really care. (After all, the cgroup_enabled_mask tracks with controllers are
* enabled through cgroup.subtree_control, and since the BPF pseudo-controllers don't show up there, they
* simply don't matter. */
@@ -2771,7 +2780,7 @@ int unit_get_memory_current(Unit *u, uint64_t *ret) {
/* The root cgroup doesn't expose this information, let's get it from /proc instead */
if (unit_has_host_root_cgroup(u))
- return procfs_memory_get_current(ret);
+ return procfs_memory_get_used(ret);
if ((u->cgroup_realized_mask & CGROUP_MASK_MEMORY) == 0)
return -ENODATA;
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
index 8da07adfe7..88e4c6bb95 100644
--- a/src/core/dbus-manager.c
+++ b/src/core/dbus-manager.c
@@ -43,7 +43,7 @@ static UnitFileFlags unit_file_bools_to_flags(bool runtime, bool force) {
(force ? UNIT_FILE_FORCE : 0);
}
-static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_version, "s", PACKAGE_VERSION);
+static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_version, "s", GIT_VERSION);
static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_features, "s", SYSTEMD_FEATURES);
static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_architecture, "s", architecture_to_string(uname_architecture()));
static BUS_DEFINE_PROPERTY_GET_GLOBAL(property_get_log_target, "s", log_target_to_string(log_get_target()));
diff --git a/src/core/dbus-service.c b/src/core/dbus-service.c
index ec61ea2772..0904cc09c0 100644
--- a/src/core/dbus-service.c
+++ b/src/core/dbus-service.c
@@ -320,29 +320,35 @@ static int bus_service_set_transient_property(
if (r < 0)
return r;
- n = path_make_absolute(v, u->manager->prefix[EXEC_DIRECTORY_RUNTIME]);
- if (!n)
- return -ENOMEM;
+ if (!isempty(v)) {
+ n = path_make_absolute(v, u->manager->prefix[EXEC_DIRECTORY_RUNTIME]);
+ if (!n)
+ return -ENOMEM;
- path_simplify(n, true);
+ path_simplify(n, true);
- if (!path_is_normalized(n))
- return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "PIDFile= path '%s' is not valid", n);
+ if (!path_is_normalized(n))
+ return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "PIDFile= path '%s' is not valid", n);
- e = path_startswith(n, "/var/run/");
- if (e) {
- char *z;
+ e = path_startswith(n, "/var/run/");
+ if (e) {
+ char *z;
- z = strjoin("/run/", e);
- if (!z)
- return log_oom();
+ z = strjoin("/run/", e);
+ if (!z)
+ return log_oom();
- if (!UNIT_WRITE_FLAGS_NOOP(flags))
- log_unit_notice(u, "Transient unit's PIDFile= property references path below legacy directory /var/run, updating %s → %s; please update client accordingly.", n, z);
+ if (!UNIT_WRITE_FLAGS_NOOP(flags))
+ log_unit_notice(u, "Transient unit's PIDFile= property references path below legacy directory /var/run, updating %s → %s; please update client accordingly.", n, z);
- free_and_replace(s->pid_file, z);
- } else
+ free_and_replace(n, z);
+ }
+ }
+
+ if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
free_and_replace(s->pid_file, n);
+ unit_write_settingf(u, flags, name, "%s=%s", name, strempty(s->pid_file));
+ }
return 1;
}
diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c
index 37cf9d204c..83ac7ad110 100644
--- a/src/core/dbus-socket.c
+++ b/src/core/dbus-socket.c
@@ -134,11 +134,11 @@ const sd_bus_vtable bus_socket_vtable[] = {
SD_BUS_VTABLE_END
};
-static inline bool check_size_t_truncation(uint64_t t) {
+static bool check_size_t_truncation(uint64_t t) {
return (size_t) t == t;
}
-static inline const char* socket_protocol_to_string(int32_t i) {
+static const char* socket_protocol_to_string(int32_t i) {
if (i == IPPROTO_IP)
return "";
diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
index 968166ee60..17c2003c8f 100644
--- a/src/core/dbus-unit.c
+++ b/src/core/dbus-unit.c
@@ -1385,9 +1385,9 @@ static int bus_set_transient_emergency_action(
system = MANAGER_IS_SYSTEM(u->manager);
r = parse_emergency_action(s, system, &v);
- if (v < 0)
+ if (r < 0)
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS,
- v == -EOPNOTSUPP ? "EmergencyAction setting invalid for manager type: %s"
+ r == -EOPNOTSUPP ? "%s setting invalid for manager type: %s"
: "Invalid %s setting: %s",
name, s);
diff --git a/src/core/dbus.c b/src/core/dbus.c
index 5908ad792a..255b86e7a4 100644
--- a/src/core/dbus.c
+++ b/src/core/dbus.c
@@ -611,7 +611,7 @@ static int bus_setup_disconnected_match(Manager *m, sd_bus *bus) {
}
static int bus_on_connection(sd_event_source *s, int fd, uint32_t revents, void *userdata) {
- _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
+ _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
_cleanup_close_ int nfd = -1;
Manager *m = userdata;
sd_id128_t id;
@@ -876,7 +876,7 @@ static int bus_setup_api(Manager *m, sd_bus *bus) {
}
int bus_init_api(Manager *m) {
- _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
+ _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
int r;
if (m->api_bus)
@@ -940,7 +940,7 @@ static int bus_setup_system(Manager *m, sd_bus *bus) {
}
int bus_init_system(Manager *m) {
- _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
+ _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
int r;
if (m->system_bus)
@@ -1080,8 +1080,7 @@ static void destroy_bus(Manager *m, sd_bus **bus) {
sd_bus_flush(*bus);
/* And destroy the object */
- sd_bus_close(*bus);
- *bus = sd_bus_unref(*bus);
+ *bus = sd_bus_close_unref(*bus);
}
void bus_done_api(Manager *m) {
diff --git a/src/core/device.c b/src/core/device.c
index 960f403718..b006add405 100644
--- a/src/core/device.c
+++ b/src/core/device.c
@@ -631,7 +631,7 @@ static int device_process_new(Manager *m, sd_device *dev) {
if (r == -ENOMEM)
return log_oom();
if (r < 0)
- return log_device_warning_errno(dev, r, "Failed to add parse SYSTEMD_ALIAS property: %m");
+ return log_device_warning_errno(dev, r, "Failed to parse SYSTEMD_ALIAS property: %m");
if (!path_is_absolute(word))
log_device_warning(dev, "SYSTEMD_ALIAS is not an absolute path, ignoring: %s", word);
diff --git a/src/core/dynamic-user.c b/src/core/dynamic-user.c
index 089461a18a..530df70b80 100644
--- a/src/core/dynamic-user.c
+++ b/src/core/dynamic-user.c
@@ -35,7 +35,7 @@ static DynamicUser* dynamic_user_free(DynamicUser *d) {
return mfree(d);
}
-static int dynamic_user_add(Manager *m, const char *name, int storage_socket[2], DynamicUser **ret) {
+static int dynamic_user_add(Manager *m, const char *name, int storage_socket[static 2], DynamicUser **ret) {
DynamicUser *d;
int r;
diff --git a/src/core/execute.c b/src/core/execute.c
index 595a3c6eca..a7082310ba 100644
--- a/src/core/execute.c
+++ b/src/core/execute.c
@@ -1595,7 +1595,7 @@ static int apply_lock_personality(const Unit* u, const ExecContext *c) {
#endif
-static void do_idle_pipe_dance(int idle_pipe[4]) {
+static void do_idle_pipe_dance(int idle_pipe[static 4]) {
assert(idle_pipe);
idle_pipe[1] = safe_close(idle_pipe[1]);
@@ -2160,8 +2160,21 @@ static int setup_exec_directory(
r = mkdir_label(p, context->directories[type].mode);
if (r < 0 && r != -EEXIST)
goto fail;
- if (r == -EEXIST && !context->dynamic_user)
- continue;
+ if (r == -EEXIST) {
+ struct stat st;
+
+ if (stat(p, &st) < 0) {
+ r = -errno;
+ goto fail;
+ }
+ if (((st.st_mode ^ context->directories[type].mode) & 07777) != 0)
+ log_warning("%s \'%s\' already exists but the mode is different. "
+ "(filesystem: %o %sMode: %o)",
+ exec_directory_type_to_string(type), *rt,
+ st.st_mode & 07777, exec_directory_type_to_string(type), context->directories[type].mode & 07777);
+ if (!context->dynamic_user)
+ continue;
+ }
}
/* Don't change the owner of the configuration directory, as in the common case it is not written to by
@@ -2618,7 +2631,7 @@ out:
return r;
}
-static void append_socket_pair(int *array, size_t *n, const int pair[2]) {
+static void append_socket_pair(int *array, size_t *n, const int pair[static 2]) {
assert(array);
assert(n);
@@ -3137,9 +3150,9 @@ static int exec_child(
}
}
- /* If delegation is enabled we'll pass ownership of the cgroup to the user of the new process. On cgroupsv1
+ /* If delegation is enabled we'll pass ownership of the cgroup to the user of the new process. On cgroup v1
* this is only about systemd's own hierarchy, i.e. not the controller hierarchies, simply because that's not
- * safe. On cgroupsv2 there's only one hierarchy anyway, and delegation is safe there, hence in that case only
+ * safe. On cgroup v2 there's only one hierarchy anyway, and delegation is safe there, hence in that case only
* touch a single hierarchy too. */
if (params->cgroup_path && context->user && (params->flags & EXEC_CGROUP_DELEGATE)) {
r = cg_set_access(SYSTEMD_CGROUP_CONTROLLER, params->cgroup_path, uid, gid);
@@ -3226,7 +3239,24 @@ static int exec_child(
#endif
}
+ if (needs_sandboxing) {
+ int which_failed;
+
+ /* Let's set the resource limits before we call into PAM, so that pam_limits wins over what
+ * is set here. (See below.) */
+
+ r = setrlimit_closest_all((const struct rlimit* const *) context->rlimit, &which_failed);
+ if (r < 0) {
+ *exit_status = EXIT_LIMITS;
+ return log_unit_error_errno(unit, r, "Failed to adjust resource limit RLIMIT_%s: %m", rlimit_to_string(which_failed));
+ }
+ }
+
if (needs_setuid) {
+
+ /* Let's call into PAM after we set up our own idea of resource limits to that pam_limits
+ * wins here. (See above.) */
+
if (context->pam_name && username) {
r = setup_pam(context->pam_name, username, uid, gid, context->tty_path, &accum_env, fds, n_fds);
if (r < 0) {
@@ -3343,15 +3373,10 @@ static int exec_child(
if (needs_sandboxing) {
uint64_t bset;
- int which_failed;
-
- r = setrlimit_closest_all((const struct rlimit* const *) context->rlimit, &which_failed);
- if (r < 0) {
- *exit_status = EXIT_LIMITS;
- return log_unit_error_errno(unit, r, "Failed to adjust resource limit RLIMIT_%s: %m", rlimit_to_string(which_failed));
- }
- /* Set the RTPRIO resource limit to 0, but only if nothing else was explicitly requested. */
+ /* Set the RTPRIO resource limit to 0, but only if nothing else was explicitly
+ * requested. (Note this is placed after the general resource limit initialization, see
+ * above, in order to take precedence.) */
if (context->restrict_realtime && !context->rlimit[RLIMIT_RTPRIO]) {
if (setrlimit(RLIMIT_RTPRIO, &RLIMIT_MAKE_CONST(0)) < 0) {
*exit_status = EXIT_LIMITS;
@@ -3942,7 +3967,7 @@ const char* exec_context_fdname(const ExecContext *c, int fd_index) {
}
}
-static int exec_context_named_iofds(const ExecContext *c, const ExecParameters *p, int named_iofds[3]) {
+static int exec_context_named_iofds(const ExecContext *c, const ExecParameters *p, int named_iofds[static 3]) {
size_t i, targets;
const char* stdio_fdname[3];
size_t n_fds;
diff --git a/src/core/job.c b/src/core/job.c
index f635b7e933..59bb9d2162 100644
--- a/src/core/job.c
+++ b/src/core/job.c
@@ -151,6 +151,8 @@ void job_uninstall(Job *j) {
unit_add_to_gc_queue(j->unit);
+ unit_add_to_dbus_queue(j->unit); /* The Job property of the unit has changed now */
+
hashmap_remove_value(j->manager->jobs, UINT32_TO_PTR(j->id), j);
j->installed = false;
}
@@ -206,8 +208,9 @@ Job* job_install(Job *j) {
(job_type_allows_late_merge(j->type) && job_type_is_superset(uj->type, j->type))) {
job_merge_into_installed(uj, j);
log_unit_debug(uj->unit,
- "Merged into installed job %s/%s as %u",
- uj->unit->id, job_type_to_string(uj->type), (unsigned) uj->id);
+ "Merged %s/%s into installed job %s/%s as %"PRIu32,
+ j->unit->id, job_type_to_string(j->type), uj->unit->id,
+ job_type_to_string(uj->type), uj->id);
return uj;
} else {
/* already running and not safe to merge into */
@@ -216,8 +219,8 @@ Job* job_install(Job *j) {
* not currently possible to have more than one installed job per unit. */
job_merge_into_installed(uj, j);
log_unit_debug(uj->unit,
- "Merged into running job, re-running: %s/%s as %u",
- uj->unit->id, job_type_to_string(uj->type), (unsigned) uj->id);
+ "Merged into running job, re-running: %s/%s as %"PRIu32,
+ uj->unit->id, job_type_to_string(uj->type), uj->id);
job_set_state(uj, JOB_WAITING);
return uj;
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index 4ebe92fd45..44f00a3046 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -3749,7 +3749,7 @@ int config_parse_exec_directories(
if (path_startswith(k, "private")) {
log_syntax(unit, LOG_ERR, filename, line, 0,
- "%s= path can't be 'private', ingoring assignment: %s", lvalue, word);
+ "%s= path can't be 'private', ignoring assignment: %s", lvalue, word);
continue;
}
@@ -4254,6 +4254,12 @@ int config_parse_pid_file(
assert(rvalue);
assert(u);
+ if (isempty(rvalue)) {
+ /* An empty assignment removes already set value. */
+ *s = mfree(*s);
+ return 0;
+ }
+
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);
diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c
index 584fb220a1..aa4a89c17a 100644
--- a/src/core/locale-setup.c
+++ b/src/core/locale-setup.c
@@ -74,9 +74,9 @@ int locale_setup(char ***environment) {
}
if (strv_isempty(add)) {
- /* If no locale is configured then default to C.UTF-8. */
+ /* If no locale is configured then default to compile-time default. */
- add = strv_new("LANG=C.UTF-8");
+ add = strv_new("LANG=" SYSTEMD_DEFAULT_LOCALE);
if (!add)
return -ENOMEM;
}
diff --git a/src/core/macros.systemd.in b/src/core/macros.systemd.in
index 9ccad5ebfe..d9e7f573ba 100644
--- a/src/core/macros.systemd.in
+++ b/src/core/macros.systemd.in
@@ -43,7 +43,7 @@ OrderWithRequires(postun): systemd \
%systemd_post() \
if [ $1 -eq 1 ] ; then \
# Initial installation \
- systemctl --no-reload preset %{?*} &>/dev/null || : \
+ systemctl --no-reload preset %{?*} >/dev/null 2>&1 || : \
fi \
%{nil}
@@ -52,14 +52,14 @@ fi \
%systemd_preun() \
if [ $1 -eq 0 ] ; then \
# Package removal, not upgrade \
- systemctl --no-reload disable --now %{?*} &>/dev/null || : \
+ systemctl --no-reload disable --now %{?*} >/dev/null 2>&1 || : \
fi \
%{nil}
%systemd_user_preun() \
if [ $1 -eq 0 ] ; then \
# Package removal, not upgrade \
- systemctl --global disable %{?*} &>/dev/null || : \
+ systemctl --global disable %{?*} >/dev/null 2>&1 || : \
fi \
%{nil}
@@ -70,7 +70,7 @@ fi \
%systemd_postun_with_restart() \
if [ $1 -ge 1 ] ; then \
# Package upgrade, not uninstall \
- systemctl try-restart %{?*} &>/dev/null || : \
+ systemctl try-restart %{?*} >/dev/null 2>&1 || : \
fi \
%{nil}
@@ -84,16 +84,16 @@ fi \
# Deprecated. Use %tmpfiles_create_package instead
%tmpfiles_create() \
-systemd-tmpfiles --create %{?*} &>/dev/null || : \
+systemd-tmpfiles --create %{?*} >/dev/null 2>&1 || : \
%{nil}
# Deprecated. Use %sysusers_create_package instead
%sysusers_create() \
-systemd-sysusers %{?*} &>/dev/null || : \
+systemd-sysusers %{?*} >/dev/null 2>&1 || : \
%{nil}
%sysusers_create_inline() \
-systemd-sysusers - <<SYSTEMD_INLINE_EOF &>/dev/null || : \
+systemd-sysusers - <<SYSTEMD_INLINE_EOF >/dev/null 2>&1 || : \
%{?*} \
SYSTEMD_INLINE_EOF \
%{nil}
@@ -112,7 +112,7 @@ SYSTEMD_INLINE_EOF \
# %files
# %{_sysusersdir}/%{name}.conf
%sysusers_create_package() \
-systemd-sysusers --replace=%_sysusersdir/%1.conf - <<SYSTEMD_INLINE_EOF &>/dev/null || : \
+systemd-sysusers --replace=%_sysusersdir/%1.conf - <<SYSTEMD_INLINE_EOF >/dev/null 2>&1 || : \
%(cat %2) \
SYSTEMD_INLINE_EOF \
%{nil}
@@ -131,15 +131,15 @@ SYSTEMD_INLINE_EOF \
# %files
# %{_tmpfilesdir}/%{name}.conf
%tmpfiles_create_package() \
-systemd-tmpfiles --replace=%_tmpfilesdir/%1.conf --create - <<SYSTEMD_INLINE_EOF &>/dev/null || : \
+systemd-tmpfiles --replace=%_tmpfilesdir/%1.conf --create - <<SYSTEMD_INLINE_EOF >/dev/null 2>&1 || : \
%(cat %2) \
SYSTEMD_INLINE_EOF \
%{nil}
%sysctl_apply() \
-@rootlibexecdir@/systemd-sysctl %{?*} &>/dev/null || : \
+@rootlibexecdir@/systemd-sysctl %{?*} >/dev/null 2>&1 || : \
%{nil}
%binfmt_apply() \
-@rootlibexecdir@/systemd-binfmt %{?*} &>/dev/null || : \
+@rootlibexecdir@/systemd-binfmt %{?*} >/dev/null 2>&1 || : \
%{nil}
diff --git a/src/core/main.c b/src/core/main.c
index 839dc062ff..561f956f0a 100644
--- a/src/core/main.c
+++ b/src/core/main.c
@@ -83,6 +83,10 @@
#include "virt.h"
#include "watchdog.h"
+#if HAS_FEATURE_ADDRESS_SANITIZER
+#include <sanitizer/lsan_interface.h>
+#endif
+
static enum {
ACTION_RUN,
ACTION_HELP,
@@ -1265,6 +1269,7 @@ static void bump_file_max_and_nr_open(void) {
}
static int bump_rlimit_nofile(struct rlimit *saved_rlimit) {
+ struct rlimit new_rlimit;
int r, nr;
assert(saved_rlimit);
@@ -1299,12 +1304,30 @@ static int bump_rlimit_nofile(struct rlimit *saved_rlimit) {
if (arg_system)
rl->rlim_max = MIN((rlim_t) nr, MAX(rl->rlim_max, (rlim_t) HIGH_RLIMIT_NOFILE));
+ /* If for some reason we were invoked with a soft limit above 1024 (which should never
+ * happen!, but who knows what we get passed in from pam_limit when invoked as --user
+ * instance), then lower what we pass on to not confuse our children */
+ rl->rlim_cur = MIN(rl->rlim_cur, (rlim_t) FD_SETSIZE);
+
arg_default_rlimit[RLIMIT_NOFILE] = rl;
}
+ /* Calculate the new limits to use for us. Never lower from what we inherited. */
+ new_rlimit = (struct rlimit) {
+ .rlim_cur = MAX((rlim_t) nr, saved_rlimit->rlim_cur),
+ .rlim_max = MAX((rlim_t) nr, saved_rlimit->rlim_max),
+ };
+
+ /* Shortcut if nothing changes. */
+ if (saved_rlimit->rlim_max >= new_rlimit.rlim_max &&
+ saved_rlimit->rlim_cur >= new_rlimit.rlim_cur) {
+ log_debug("RLIMIT_NOFILE is already as high or higher than we need it, not bumping.");
+ return 0;
+ }
+
/* Bump up the resource limit for ourselves substantially, all the way to the maximum the kernel allows, for
* both hard and soft. */
- r = setrlimit_closest(RLIMIT_NOFILE, &RLIMIT_MAKE_CONST(nr));
+ r = setrlimit_closest(RLIMIT_NOFILE, &new_rlimit);
if (r < 0)
return log_warning_errno(r, "Setting RLIMIT_NOFILE failed, ignoring: %m");
@@ -1312,6 +1335,7 @@ static int bump_rlimit_nofile(struct rlimit *saved_rlimit) {
}
static int bump_rlimit_memlock(struct rlimit *saved_rlimit) {
+ struct rlimit new_rlimit;
int r;
assert(saved_rlimit);
@@ -1323,7 +1347,33 @@ static int bump_rlimit_memlock(struct rlimit *saved_rlimit) {
if (getrlimit(RLIMIT_MEMLOCK, saved_rlimit) < 0)
return log_warning_errno(errno, "Reading RLIMIT_MEMLOCK failed, ignoring: %m");
- r = setrlimit_closest(RLIMIT_MEMLOCK, &RLIMIT_MAKE_CONST(HIGH_RLIMIT_MEMLOCK));
+ /* Pass the original value down to invoked processes */
+ if (!arg_default_rlimit[RLIMIT_MEMLOCK]) {
+ struct rlimit *rl;
+
+ rl = newdup(struct rlimit, saved_rlimit, 1);
+ if (!rl)
+ return log_oom();
+
+ arg_default_rlimit[RLIMIT_MEMLOCK] = rl;
+ }
+
+ /* Using MAX() on resource limits only is safe if RLIM_INFINITY is > 0. POSIX declares that rlim_t
+ * must be unsigned, hence this is a given, but let's make this clear here. */
+ assert_cc(RLIM_INFINITY > 0);
+
+ new_rlimit = (struct rlimit) {
+ .rlim_cur = MAX(HIGH_RLIMIT_MEMLOCK, saved_rlimit->rlim_cur),
+ .rlim_max = MAX(HIGH_RLIMIT_MEMLOCK, saved_rlimit->rlim_max),
+ };
+
+ if (saved_rlimit->rlim_max >= new_rlimit.rlim_cur &&
+ saved_rlimit->rlim_cur >= new_rlimit.rlim_max) {
+ log_debug("RLIMIT_MEMLOCK is already as high or higher than we need it, not bumping.");
+ return 0;
+ }
+
+ r = setrlimit_closest(RLIMIT_MEMLOCK, &new_rlimit);
if (r < 0)
return log_warning_errno(r, "Setting RLIMIT_MEMLOCK failed, ignoring: %m");
@@ -1660,12 +1710,11 @@ static void do_reexecute(
* we do that */
watchdog_close(true);
- /* Reset the RLIMIT_NOFILE to the kernel default, so that the new systemd can pass the kernel default to its
- * child processes */
-
- if (saved_rlimit_nofile->rlim_cur > 0)
+ /* Reset RLIMIT_NOFILE + RLIMIT_MEMLOCK back to the kernel defaults, so that the new systemd can pass
+ * the kernel default to its child processes */
+ if (saved_rlimit_nofile->rlim_cur != 0)
(void) setrlimit(RLIMIT_NOFILE, saved_rlimit_nofile);
- if (saved_rlimit_memlock->rlim_cur != (rlim_t) -1)
+ if (saved_rlimit_memlock->rlim_cur != RLIM_INFINITY)
(void) setrlimit(RLIMIT_MEMLOCK, saved_rlimit_memlock);
if (switch_root_dir) {
@@ -1914,7 +1963,7 @@ static void log_execution_mode(bool *ret_first_boot) {
if (arg_system) {
int v;
- log_info(PACKAGE_STRING " running in %ssystem mode. (" SYSTEMD_FEATURES ")",
+ log_info("systemd " GIT_VERSION " running in %ssystem mode. (" SYSTEMD_FEATURES ")",
arg_action == ACTION_TEST ? "test " : "" );
v = detect_virtualization();
@@ -1942,7 +1991,7 @@ static void log_execution_mode(bool *ret_first_boot) {
_cleanup_free_ char *t;
t = uid_to_name(getuid());
- log_debug(PACKAGE_STRING " running in %suser mode for user " UID_FMT "/%s. (" SYSTEMD_FEATURES ")",
+ log_debug("systemd " GIT_VERSION " running in %suser mode for user " UID_FMT "/%s. (" SYSTEMD_FEATURES ")",
arg_action == ACTION_TEST ? " test" : "", getuid(), strna(t));
}
@@ -2298,7 +2347,11 @@ int main(int argc, char *argv[]) {
dual_timestamp initrd_timestamp = DUAL_TIMESTAMP_NULL, userspace_timestamp = DUAL_TIMESTAMP_NULL, kernel_timestamp = DUAL_TIMESTAMP_NULL,
security_start_timestamp = DUAL_TIMESTAMP_NULL, security_finish_timestamp = DUAL_TIMESTAMP_NULL;
- struct rlimit saved_rlimit_nofile = RLIMIT_MAKE_CONST(0), saved_rlimit_memlock = RLIMIT_MAKE_CONST((rlim_t) -1);
+ struct rlimit saved_rlimit_nofile = RLIMIT_MAKE_CONST(0),
+ saved_rlimit_memlock = RLIMIT_MAKE_CONST(RLIM_INFINITY); /* The original rlimits we passed
+ * in. Note we use different values
+ * for the two that indicate whether
+ * these fields are initialized! */
bool skip_setup, loaded_policy = false, queue_default_job = false, first_boot = false, reexecute = false;
char *switch_root_dir = NULL, *switch_root_init = NULL;
usec_t before_startup, after_startup;
@@ -2612,6 +2665,10 @@ finish:
}
#endif
+#if HAS_FEATURE_ADDRESS_SANITIZER
+ __lsan_do_leak_check();
+#endif
+
if (shutdown_verb) {
r = become_shutdown(shutdown_verb, retval);
log_error_errno(r, "Failed to execute shutdown binary, %s: %m", getpid_cached() == 1 ? "freezing" : "quitting");
diff --git a/src/core/manager.c b/src/core/manager.c
index 35d9753b12..6086531bab 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -3243,11 +3243,11 @@ static int manager_deserialize_one_unit(Manager *m, const char *name, FILE *f, F
}
static int manager_deserialize_units(Manager *m, FILE *f, FDSet *fds) {
- _cleanup_free_ char *line = NULL;
const char *unit_name;
int r;
for (;;) {
+ _cleanup_free_ char *line = NULL;
/* Start marker */
r = read_line(f, LONG_LINE_MAX, &line);
if (r < 0)
diff --git a/src/core/meson.build b/src/core/meson.build
index 450d6f72a9..85021bdc01 100644
--- a/src/core/meson.build
+++ b/src/core/meson.build
@@ -173,26 +173,19 @@ systemd_shutdown_sources = files('''
'''.split())
in_files = [['macros.systemd', rpmmacrosdir],
- ['triggers.systemd', ''],
+ ['system.conf', pkgsysconfdir],
['systemd.pc', pkgconfigdatadir],
- ['system.conf', pkgsysconfdir]]
+ ['triggers.systemd', '']]
foreach item : in_files
file = item[0]
dir = item[1]
- # If 'no', disable generation completely.
- # If '', generate, but do not install.
- if dir != 'no'
- gen = configure_file(
- input : file + '.in',
- output : file,
- configuration : substs)
- if dir != ''
- install_data(gen,
- install_dir : dir)
- endif
- endif
+ configure_file(
+ input : file + '.in',
+ output : file,
+ configuration : substs,
+ install_dir : dir == 'no' ? '' : dir)
endforeach
install_data('org.freedesktop.systemd1.conf',
diff --git a/src/core/mount.c b/src/core/mount.c
index ead9bc1f44..c31cad6b52 100644
--- a/src/core/mount.c
+++ b/src/core/mount.c
@@ -251,6 +251,32 @@ _pure_ static MountParameters* get_mount_parameters(Mount *m) {
return get_mount_parameters_fragment(m);
}
+static int update_parameters_proc_self_mount_info(
+ Mount *m,
+ const char *what,
+ const char *options,
+ const char *fstype) {
+
+ MountParameters *p;
+ int r, q, w;
+
+ p = &m->parameters_proc_self_mountinfo;
+
+ r = free_and_strdup(&p->what, what);
+ if (r < 0)
+ return r;
+
+ q = free_and_strdup(&p->options, options);
+ if (q < 0)
+ return q;
+
+ w = free_and_strdup(&p->fstype, fstype);
+ if (w < 0)
+ return w;
+
+ return r > 0 || q > 0 || w > 0;
+}
+
static int mount_add_mount_dependencies(Mount *m) {
MountParameters *pm;
Unit *other;
@@ -352,7 +378,8 @@ static int mount_add_device_dependencies(Mount *m) {
* automatically stopped when the device disappears suddenly. */
dep = mount_is_bound_to_device(m) ? UNIT_BINDS_TO : UNIT_REQUIRES;
- mask = m->from_fragment ? UNIT_DEPENDENCY_FILE : UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT;
+ /* We always use 'what' from /proc/self/mountinfo if mounted */
+ mask = m->from_proc_self_mountinfo ? UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT : UNIT_DEPENDENCY_FILE;
r = unit_add_node_dependency(UNIT(m), p->what, device_wants_mount, dep, mask);
if (r < 0)
@@ -426,6 +453,7 @@ static int mount_add_default_dependencies(Mount *m) {
const char *after, *before;
UnitDependencyMask mask;
MountParameters *p;
+ bool nofail;
int r;
assert(m);
@@ -444,6 +472,7 @@ static int mount_add_default_dependencies(Mount *m) {
return 0;
mask = m->from_fragment ? UNIT_DEPENDENCY_FILE : UNIT_DEPENDENCY_MOUNTINFO_DEFAULT;
+ nofail = m->from_fragment ? fstab_test_yes_no_option(m->parameters_fragment.options, "nofail\0" "fail\0") : false;
if (mount_is_network(p)) {
/* We order ourselves after network.target. This is
@@ -474,9 +503,11 @@ static int mount_add_default_dependencies(Mount *m) {
before = SPECIAL_LOCAL_FS_TARGET;
}
- r = unit_add_dependency_by_name(UNIT(m), UNIT_BEFORE, before, true, mask);
- if (r < 0)
- return r;
+ if (!nofail) {
+ r = unit_add_dependency_by_name(UNIT(m), UNIT_BEFORE, before, true, mask);
+ if (r < 0)
+ return r;
+ }
r = unit_add_dependency_by_name(UNIT(m), UNIT_AFTER, after, true, mask);
if (r < 0)
@@ -733,7 +764,7 @@ static void mount_dump(Unit *u, FILE *f, const char *prefix) {
"%sSloppyOptions: %s\n"
"%sLazyUnmount: %s\n"
"%sForceUnmount: %s\n"
- "%sTimoutSec: %s\n",
+ "%sTimeoutSec: %s\n",
prefix, mount_state_to_string(m->state),
prefix, mount_result_to_string(m->result),
prefix, m->where,
@@ -823,6 +854,9 @@ static void mount_enter_dead(Mount *m, MountResult f) {
unit_unref_uid_gid(UNIT(m), true);
dynamic_creds_destroy(&m->dynamic_creds);
+
+ /* Any dependencies based on /proc/self/mountinfo are now stale */
+ unit_remove_dependencies(UNIT(m), UNIT_DEPENDENCY_MOUNTINFO_IMPLICIT);
}
static void mount_enter_mounted(Mount *m, MountResult f) {
@@ -1428,32 +1462,6 @@ static int mount_dispatch_timer(sd_event_source *source, usec_t usec, void *user
return 0;
}
-static int update_parameters_proc_self_mount_info(
- Mount *m,
- const char *what,
- const char *options,
- const char *fstype) {
-
- MountParameters *p;
- int r, q, w;
-
- p = &m->parameters_proc_self_mountinfo;
-
- r = free_and_strdup(&p->what, what);
- if (r < 0)
- return r;
-
- q = free_and_strdup(&p->options, options);
- if (q < 0)
- return q;
-
- w = free_and_strdup(&p->fstype, fstype);
- if (w < 0)
- return w;
-
- return r > 0 || q > 0 || w > 0;
-}
-
static int mount_setup_new_unit(
Manager *m,
const char *name,
@@ -1528,10 +1536,10 @@ static int mount_setup_existing_unit(
if (r > 0)
flags |= MOUNT_PROC_JUST_CHANGED;
- if (!MOUNT(u)->from_proc_self_mountinfo) {
+ if (!MOUNT(u)->from_proc_self_mountinfo || FLAGS_SET(MOUNT(u)->proc_flags, MOUNT_PROC_JUST_MOUNTED))
flags |= MOUNT_PROC_JUST_MOUNTED;
- MOUNT(u)->from_proc_self_mountinfo = true;
- }
+
+ MOUNT(u)->from_proc_self_mountinfo = true;
if (IN_SET(u->load_state, UNIT_NOT_FOUND, UNIT_BAD_SETTING, UNIT_ERROR)) {
/* The unit was previously not found or otherwise not loaded. Now that the unit shows up in
@@ -1844,6 +1852,7 @@ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents,
}
mount->from_proc_self_mountinfo = false;
+ assert_se(update_parameters_proc_self_mount_info(mount, NULL, NULL, NULL) >= 0);
switch (mount->state) {
diff --git a/src/core/namespace.c b/src/core/namespace.c
index c2ca3e0334..7f553a42c2 100644
--- a/src/core/namespace.c
+++ b/src/core/namespace.c
@@ -1628,7 +1628,7 @@ int setup_tmp_dirs(const char *id, char **tmp_dir, char **var_tmp_dir) {
return 0;
}
-int setup_netns(int netns_storage_socket[2]) {
+int setup_netns(int netns_storage_socket[static 2]) {
_cleanup_close_ int netns = -1;
int r, q;
diff --git a/src/core/namespace.h b/src/core/namespace.h
index 1188c6d595..5e0ec97969 100644
--- a/src/core/namespace.h
+++ b/src/core/namespace.h
@@ -91,7 +91,7 @@ int setup_tmp_dirs(
char **tmp_dir,
char **var_tmp_dir);
-int setup_netns(int netns_storage_socket[2]);
+int setup_netns(int netns_storage_socket[static 2]);
const char* protect_home_to_string(ProtectHome p) _const_;
ProtectHome protect_home_from_string(const char *s) _pure_;
diff --git a/src/core/service.c b/src/core/service.c
index cfa3271232..324dcf2311 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -2154,7 +2154,7 @@ static void service_enter_restart(Service *s) {
* restarted. We use JOB_RESTART (instead of the more obvious
* JOB_START) here so that those dependency jobs will be added
* as well. */
- r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_FAIL, &error, NULL);
+ r = manager_add_job(UNIT(s)->manager, JOB_RESTART, UNIT(s), JOB_REPLACE, &error, NULL);
if (r < 0)
goto fail;
diff --git a/src/core/socket.c b/src/core/socket.c
index dd126a7f21..af95e9027e 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -561,7 +561,7 @@ int socket_acquire_peer(Socket *s, int fd, SocketPeer **p) {
r = getpeername(fd, &sa.peer.sa, &salen);
if (r < 0)
- return log_error_errno(errno, "getpeername failed: %m");
+ return log_unit_error_errno(UNIT(s), errno, "getpeername failed: %m");
if (!IN_SET(sa.peer.sa.sa_family, AF_INET, AF_INET6, AF_VSOCK)) {
*p = NULL;
@@ -1465,6 +1465,14 @@ static int socket_address_listen_do(
label);
}
+#define log_address_error_errno(u, address, error, fmt) \
+ ({ \
+ _cleanup_free_ char *_t = NULL; \
+ \
+ (void) socket_address_print(address, &_t); \
+ log_unit_error_errno(u, error, fmt, strna(_t)); \
+ })
+
static int socket_address_listen_in_cgroup(
Socket *s,
const SocketAddress *address,
@@ -1503,13 +1511,13 @@ static int socket_address_listen_in_cgroup(
fd = socket_address_listen_do(s, address, label);
if (fd < 0) {
- log_unit_error_errno(UNIT(s), fd, "Failed to create listening socket: %m");
+ log_address_error_errno(UNIT(s), address, fd, "Failed to create listening socket (%s): %m");
_exit(EXIT_FAILURE);
}
r = send_one_fd(pair[1], fd, 0);
if (r < 0) {
- log_unit_error_errno(UNIT(s), r, "Failed to send listening socket to parent: %m");
+ log_address_error_errno(UNIT(s), address, r, "Failed to send listening socket (%s) to parent: %m");
_exit(EXIT_FAILURE);
}
@@ -1527,19 +1535,22 @@ static int socket_address_listen_in_cgroup(
}
if (fd < 0)
- return log_unit_error_errno(UNIT(s), fd, "Failed to receive listening socket: %m");
+ return log_address_error_errno(UNIT(s), address, fd, "Failed to receive listening socket (%s): %m");
return fd;
shortcut:
fd = socket_address_listen_do(s, address, label);
if (fd < 0)
- return log_error_errno(fd, "Failed to create listening socket: %m");
+ return log_address_error_errno(UNIT(s), address, fd, "Failed to create listening socket (%s): %m");
return fd;
}
-static int socket_open_fds(Socket *s) {
+DEFINE_TRIVIAL_CLEANUP_FUNC(Socket *, socket_close_fds);
+
+static int socket_open_fds(Socket *_s) {
+ _cleanup_(socket_close_fdsp) Socket *s = _s;
_cleanup_(mac_selinux_freep) char *label = NULL;
bool know_label = false;
SocketPort *p;
@@ -1562,7 +1573,7 @@ static int socket_open_fds(Socket *s) {
r = socket_determine_selinux_label(s, &label);
if (r < 0)
- goto rollback;
+ return log_unit_error_errno(UNIT(s), r, "Failed to determine SELinux label: %m");
know_label = true;
}
@@ -1582,11 +1593,10 @@ static int socket_open_fds(Socket *s) {
break;
}
- r = socket_address_listen_in_cgroup(s, &p->address, label);
- if (r < 0)
- goto rollback;
+ p->fd = socket_address_listen_in_cgroup(s, &p->address, label);
+ if (p->fd < 0)
+ return p->fd;
- p->fd = r;
socket_apply_socket_options(s, p->fd);
socket_symlink(s);
break;
@@ -1594,10 +1604,8 @@ static int socket_open_fds(Socket *s) {
case SOCKET_SPECIAL:
p->fd = special_address_create(p->path, s->writable);
- if (p->fd < 0) {
- r = p->fd;
- goto rollback;
- }
+ if (p->fd < 0)
+ return log_unit_error_errno(UNIT(s), p->fd, "Failed to open special file %s: %m", p->path);
break;
case SOCKET_FIFO:
@@ -1606,10 +1614,8 @@ static int socket_open_fds(Socket *s) {
p->path,
s->directory_mode,
s->socket_mode);
- if (p->fd < 0) {
- r = p->fd;
- goto rollback;
- }
+ if (p->fd < 0)
+ return log_unit_error_errno(UNIT(s), p->fd, "Failed to open FIFO %s: %m", p->path);
socket_apply_fifo_options(s, p->fd);
socket_symlink(s);
@@ -1622,10 +1628,8 @@ static int socket_open_fds(Socket *s) {
s->socket_mode,
s->mq_maxmsg,
s->mq_msgsize);
- if (p->fd < 0) {
- r = p->fd;
- goto rollback;
- }
+ if (p->fd < 0)
+ return log_unit_error_errno(UNIT(s), p->fd, "Failed to open message queue %s: %m", p->path);
break;
case SOCKET_USB_FUNCTION: {
@@ -1634,18 +1638,16 @@ static int socket_open_fds(Socket *s) {
ep = path_make_absolute("ep0", p->path);
p->fd = usbffs_address_create(ep);
- if (p->fd < 0) {
- r = p->fd;
- goto rollback;
- }
+ if (p->fd < 0)
+ return p->fd;
r = usbffs_write_descs(p->fd, SERVICE(UNIT_DEREF(s->service)));
if (r < 0)
- goto rollback;
+ return r;
r = usbffs_dispatch_eps(p);
if (r < 0)
- goto rollback;
+ return r;
break;
}
@@ -1654,11 +1656,8 @@ static int socket_open_fds(Socket *s) {
}
}
+ s = NULL;
return 0;
-
-rollback:
- socket_close_fds(s);
- return r;
}
static void socket_unwatch_fds(Socket *s) {
@@ -2521,14 +2520,14 @@ static int socket_serialize(Unit *u, FILE *f, FDSet *fds) {
copy = fdset_put_dup(fds, p->fd);
if (copy < 0)
- return log_warning_errno(copy, "Failed to serialize socket fd: %m");
+ return log_unit_warning_errno(u, copy, "Failed to serialize socket fd: %m");
if (p->type == SOCKET_SOCKET) {
_cleanup_free_ char *t = NULL;
r = socket_address_print(&p->address, &t);
if (r < 0)
- return log_error_errno(r, "Failed to format socket address: %m");
+ return log_unit_error_errno(u, r, "Failed to format socket address: %m");
if (socket_address_family(&p->address) == AF_NETLINK)
(void) serialize_item_format(f, "netlink", "%i %s", copy, t);
diff --git a/src/core/systemd.pc.in b/src/core/systemd.pc.in
index 655773ea8a..0dae950473 100644
--- a/src/core/systemd.pc.in
+++ b/src/core/systemd.pc.in
@@ -36,5 +36,5 @@ containeruidbasemax=@containeruidbasemax@
Name: systemd
Description: systemd System and Service Manager
-URL: @PACKAGE_URL@
-Version: @PACKAGE_VERSION@
+URL: @PROJECT_URL@
+Version: @PROJECT_VERSION@
diff --git a/src/core/transaction.c b/src/core/transaction.c
index 486c6a4a05..2418332b9a 100644
--- a/src/core/transaction.c
+++ b/src/core/transaction.c
@@ -300,7 +300,7 @@ rescan:
goto next_unit;
}
- /* log_debug("Found redundant job %s/%s, dropping.", j->unit->id, job_type_to_string(j->type)); */
+ log_trace("Found redundant job %s/%s, dropping from transaction.", j->unit->id, job_type_to_string(j->type));
transaction_delete_job(tr, j, false);
goto rescan;
next_unit:;
@@ -494,15 +494,17 @@ static void transaction_collect_garbage(Transaction *tr) {
rescan:
HASHMAP_FOREACH(j, tr->jobs, i) {
- if (tr->anchor_job == j || j->object_list) {
- /* log_debug("Keeping job %s/%s because of %s/%s", */
- /* j->unit->id, job_type_to_string(j->type), */
- /* j->object_list->subject ? j->object_list->subject->unit->id : "root", */
- /* j->object_list->subject ? job_type_to_string(j->object_list->subject->type) : "root"); */
+ if (tr->anchor_job == j)
+ continue;
+ if (j->object_list) {
+ log_trace("Keeping job %s/%s because of %s/%s",
+ j->unit->id, job_type_to_string(j->type),
+ j->object_list->subject ? j->object_list->subject->unit->id : "root",
+ j->object_list->subject ? job_type_to_string(j->object_list->subject->type) : "root");
continue;
}
- /* log_debug("Garbage collecting job %s/%s", j->unit->id, job_type_to_string(j->type)); */
+ log_trace("Garbage collecting job %s/%s", j->unit->id, job_type_to_string(j->type));
transaction_delete_job(tr, j, true);
goto rescan;
}
@@ -798,7 +800,7 @@ static Job* transaction_add_one_job(Transaction *tr, JobType type, Unit *unit, b
if (is_new)
*is_new = true;
- /* log_debug("Added job %s/%s to transaction.", unit->id, job_type_to_string(type)); */
+ log_trace("Added job %s/%s to transaction.", unit->id, job_type_to_string(type));
return j;
}
@@ -892,10 +894,8 @@ int transaction_add_job_and_dependencies(
if (MANAGER_IS_RELOADING(unit->manager))
unit_coldplug(unit);
- /* log_debug("Pulling in %s/%s from %s/%s", */
- /* unit->id, job_type_to_string(type), */
- /* by ? by->unit->id : "NA", */
- /* by ? job_type_to_string(by->type) : "NA"); */
+ if (by)
+ log_trace("Pulling in %s/%s from %s/%s", unit->id, job_type_to_string(type), by->unit->id, job_type_to_string(by->type));
/* Safety check that the unit is a valid state, i.e. not in UNIT_STUB or UNIT_MERGED which should only be set
* temporarily. */
@@ -1053,7 +1053,7 @@ int transaction_add_job_and_dependencies(
if (type == JOB_RELOAD)
transaction_add_propagate_reload_jobs(tr, ret->unit, ret, ignore_order, e);
- /* JOB_VERIFY_STARTED require no dependency handling */
+ /* JOB_VERIFY_ACTIVE requires no dependency handling */
}
return 0;
diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c
index a8e84ebe80..72391ace3a 100644
--- a/src/core/unit-printf.c
+++ b/src/core/unit-printf.c
@@ -195,6 +195,7 @@ int unit_name_printf(Unit *u, const char* format, char **ret) {
{ 'N', specifier_prefix_and_instance, NULL },
{ 'p', specifier_prefix, NULL },
{ 'i', specifier_string, u->instance },
+ { 'j', specifier_last_component, NULL },
{ 'g', specifier_group_name, NULL },
{ 'G', specifier_group_id, NULL },
diff --git a/src/core/unit.h b/src/core/unit.h
index 6fd39eaca3..43cf15715a 100644
--- a/src/core/unit.h
+++ b/src/core/unit.h
@@ -248,8 +248,8 @@ typedef struct Unit {
/* Counterparts in the cgroup filesystem */
char *cgroup_path;
- CGroupMask cgroup_realized_mask; /* In which hierarchies does this unit's cgroup exist? (only relevant on cgroupsv1) */
- CGroupMask cgroup_enabled_mask; /* Which controllers are enabled (or more correctly: enabled for the children) for this unit's cgroup? (only relevant on cgroupsv2) */
+ CGroupMask cgroup_realized_mask; /* In which hierarchies does this unit's cgroup exist? (only relevant on cgroup v1) */
+ CGroupMask cgroup_enabled_mask; /* Which controllers are enabled (or more correctly: enabled for the children) for this unit's cgroup? (only relevant on cgroup v2) */
CGroupMask cgroup_invalidated_mask; /* A mask specifiying controllers which shall be considered invalidated, and require re-realization */
CGroupMask cgroup_members_mask; /* A cache for the controllers required by all children of this cgroup (only relevant for slice units) */
int cgroup_inotify_wd;
diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c
index 0c888b26f9..ecbb4bffc9 100644
--- a/src/coredump/coredump.c
+++ b/src/coredump/coredump.c
@@ -142,7 +142,7 @@ static int parse_config(void) {
CONFIG_PARSE_WARN, NULL);
}
-static inline uint64_t storage_size_max(void) {
+static uint64_t storage_size_max(void) {
if (arg_storage == COREDUMP_STORAGE_EXTERNAL)
return arg_external_size_max;
if (arg_storage == COREDUMP_STORAGE_JOURNAL)
@@ -229,7 +229,7 @@ static int fix_xattr(int fd, const char *context[_CONTEXT_MAX]) {
#define filename_escape(s) xescape((s), "./ ")
-static inline const char *coredump_tmpfile_name(const char *s) {
+static const char *coredump_tmpfile_name(const char *s) {
return s ? s : "(unnamed temporary file)";
}
@@ -794,15 +794,16 @@ log:
core_message = strjoin("MESSAGE=Process ", context[CONTEXT_PID],
" (", context[CONTEXT_COMM], ") of user ",
context[CONTEXT_UID], " dumped core.",
- journald_crash ? "\nCoredump diverted to " : NULL,
- journald_crash ? filename : NULL);
+ journald_crash && filename ? "\nCoredump diverted to " : NULL,
+ journald_crash && filename ? filename : NULL);
if (!core_message)
return log_oom();
if (journald_crash) {
- /* We cannot log to the journal, so just print the MESSAGE.
+ /* We cannot log to the journal, so just print the message.
* The target was set previously to something safe. */
- log_dispatch(LOG_ERR, 0, core_message);
+ assert(startswith(core_message, "MESSAGE="));
+ log_dispatch(LOG_ERR, 0, core_message + strlen("MESSAGE="));
return 0;
}
@@ -1062,19 +1063,10 @@ static int send_iovec(const struct iovec iovec[], size_t n_iovec, int input_fd)
return 0;
}
-static char* set_iovec_field(struct iovec *iovec, size_t *n_iovec, const char *field, const char *value) {
- char *x;
-
- x = strappend(field, value);
- if (x)
- iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(x);
- return x;
-}
-
static char* set_iovec_field_free(struct iovec *iovec, size_t *n_iovec, const char *field, char *value) {
char *x;
- x = set_iovec_field(iovec, n_iovec, field, value);
+ x = set_iovec_string_field(iovec, n_iovec, field, value);
free(value);
return x;
}
@@ -1124,36 +1116,36 @@ static int gather_pid_metadata(
disable_coredumps();
}
- set_iovec_field(iovec, n_iovec, "COREDUMP_UNIT=", context[CONTEXT_UNIT]);
+ set_iovec_string_field(iovec, n_iovec, "COREDUMP_UNIT=", context[CONTEXT_UNIT]);
}
if (cg_pid_get_user_unit(pid, &t) >= 0)
set_iovec_field_free(iovec, n_iovec, "COREDUMP_USER_UNIT=", t);
/* The next few are mandatory */
- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_PID=", context[CONTEXT_PID]))
+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_PID=", context[CONTEXT_PID]))
return log_oom();
- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_UID=", context[CONTEXT_UID]))
+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_UID=", context[CONTEXT_UID]))
return log_oom();
- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_GID=", context[CONTEXT_GID]))
+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_GID=", context[CONTEXT_GID]))
return log_oom();
- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_SIGNAL=", context[CONTEXT_SIGNAL]))
+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_SIGNAL=", context[CONTEXT_SIGNAL]))
return log_oom();
- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_RLIMIT=", context[CONTEXT_RLIMIT]))
+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_RLIMIT=", context[CONTEXT_RLIMIT]))
return log_oom();
- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_HOSTNAME=", context[CONTEXT_HOSTNAME]))
+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_HOSTNAME=", context[CONTEXT_HOSTNAME]))
return log_oom();
- if (!set_iovec_field(iovec, n_iovec, "COREDUMP_COMM=", context[CONTEXT_COMM]))
+ if (!set_iovec_string_field(iovec, n_iovec, "COREDUMP_COMM=", context[CONTEXT_COMM]))
return log_oom();
if (context[CONTEXT_EXE] &&
- !set_iovec_field(iovec, n_iovec, "COREDUMP_EXE=", context[CONTEXT_EXE]))
+ !set_iovec_string_field(iovec, n_iovec, "COREDUMP_EXE=", context[CONTEXT_EXE]))
return log_oom();
if (sd_pid_get_session(pid, &t) >= 0)
@@ -1221,7 +1213,7 @@ static int gather_pid_metadata(
iovec[(*n_iovec)++] = IOVEC_MAKE_STRING(t);
if (safe_atoi(context[CONTEXT_SIGNAL], &signo) >= 0 && SIGNAL_VALID(signo))
- set_iovec_field(iovec, n_iovec, "COREDUMP_SIGNAL_NAME=SIG", signal_to_string(signo));
+ set_iovec_string_field(iovec, n_iovec, "COREDUMP_SIGNAL_NAME=SIG", signal_to_string(signo));
return 0; /* we successfully acquired all metadata */
}
diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
index daf26aad70..9cb52ddf26 100644
--- a/src/cryptsetup/cryptsetup.c
+++ b/src/cryptsetup/cryptsetup.c
@@ -408,8 +408,7 @@ static int get_password(const char *vol, const char *src, usec_t until, bool acc
return log_oom();
strncpy(c, *p, arg_key_size);
- free(*p);
- *p = c;
+ free_and_replace(*p, c);
}
*ret = TAKE_PTR(passwords);
@@ -451,7 +450,7 @@ static int attach_tcrypt(
r = read_one_line_file(key_file, &passphrase);
if (r < 0) {
log_error_errno(r, "Failed to read password file '%s': %m", key_file);
- return -EAGAIN;
+ return -EAGAIN; /* log with the actual error, but return EAGAIN */
}
params.passphrase = passphrase;
@@ -461,14 +460,19 @@ static int attach_tcrypt(
r = crypt_load(cd, CRYPT_TCRYPT, &params);
if (r < 0) {
- if (key_file && r == -EPERM)
- return log_error_errno(SYNTHETIC_ERRNO(EAGAIN),
- "Failed to activate using password file '%s'.",
- key_file);
- return r;
+ if (key_file && r == -EPERM) {
+ log_error_errno(r, "Failed to activate using password file '%s'. (Key data not correct?)", key_file);
+ return -EAGAIN; /* log the actual error, but return EAGAIN */
+ }
+
+ return log_error_errno(r, "Failed to load tcrypt superblock on device %s: %m", crypt_get_device_name(cd));
}
- return crypt_activate_by_volume_key(cd, name, NULL, 0, flags);
+ r = crypt_activate_by_volume_key(cd, name, NULL, 0, flags);
+ if (r < 0)
+ return log_error_errno(r, "Failed to activate tcrypt device %s: %m", crypt_get_device_name(cd));
+
+ return 0;
}
static int attach_luks_or_plain(struct crypt_device *cd,
@@ -486,10 +490,8 @@ static int attach_luks_or_plain(struct crypt_device *cd,
if (!arg_type || STR_IN_SET(arg_type, ANY_LUKS, CRYPT_LUKS1)) {
r = crypt_load(cd, CRYPT_LUKS, NULL);
- if (r < 0) {
- log_error("crypt_load() failed on device %s.\n", crypt_get_device_name(cd));
- return r;
- }
+ if (r < 0)
+ return log_error_errno(r, "Failed to load LUKS superblock on device %s: %m", crypt_get_device_name(cd));
if (data_device)
r = crypt_set_data_device(cd, data_device);
@@ -530,23 +532,16 @@ static int attach_luks_or_plain(struct crypt_device *cd,
cipher_mode = "cbc-essiv:sha256";
}
- /* for CRYPT_PLAIN limit reads
- * from keyfile to key length, and
- * ignore keyfile-size */
+ /* for CRYPT_PLAIN limit reads from keyfile to key length, and ignore keyfile-size */
arg_keyfile_size = arg_key_size;
- /* In contrast to what the name
- * crypt_setup() might suggest this
- * doesn't actually format anything,
- * it just configures encryption
- * parameters when used for plain
- * mode. */
+ /* In contrast to what the name crypt_setup() might suggest this doesn't actually format
+ * anything, it just configures encryption parameters when used for plain mode. */
r = crypt_format(cd, CRYPT_PLAIN, cipher, cipher_mode, NULL, NULL, arg_keyfile_size, &params);
/* hash == NULL implies the user passed "plain" */
pass_volume_key = (params.hash == NULL);
}
-
if (r < 0)
return log_error_errno(r, "Loading of cryptographic parameters failed: %m");
@@ -558,22 +553,30 @@ static int attach_luks_or_plain(struct crypt_device *cd,
if (key_file) {
r = crypt_activate_by_keyfile_offset(cd, name, arg_key_slot, key_file, arg_keyfile_size, arg_keyfile_offset, flags);
- if (r < 0) {
- log_error_errno(r, "Failed to activate with key file '%s': %m", key_file);
- return -EAGAIN;
+ if (r == -EPERM) {
+ log_error_errno(r, "Failed to activate with key file '%s'. (Key data incorrect?)", key_file);
+ return -EAGAIN; /* Log actual error, but return EAGAIN */
}
+ if (r < 0)
+ return log_error_errno(r, "Failed to activate with key file '%s': %m", key_file);
} else {
char **p;
+ r = -EINVAL;
STRV_FOREACH(p, passwords) {
if (pass_volume_key)
r = crypt_activate_by_volume_key(cd, name, *p, arg_key_size, flags);
else
r = crypt_activate_by_passphrase(cd, name, arg_key_slot, *p, strlen(*p), flags);
-
if (r >= 0)
break;
}
+ if (r == -EPERM) {
+ log_error_errno(r, "Failed to activate with specified passphrase. (Passphrase incorrect?)");
+ return -EAGAIN; /* log actual error, but return EAGAIN */
+ }
+ if (r < 0)
+ return log_error_errno(r, "Failed to activate with specified passphrase: %m");
}
return r;
@@ -624,10 +627,8 @@ static int run(int argc, char *argv[]) {
/* Arguments: systemd-cryptsetup attach VOLUME SOURCE-DEVICE [PASSWORD] [OPTIONS] */
- if (argc < 4) {
- log_error("attach requires at least two arguments.");
- return -EINVAL;
- }
+ if (argc < 4)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "attach requires at least two arguments.");
if (argc >= 5 &&
argv[4][0] &&
@@ -635,7 +636,7 @@ static int run(int argc, char *argv[]) {
!streq(argv[4], "none")) {
if (!path_is_absolute(argv[4]))
- log_error("Password file path '%s' is not absolute. Ignoring.", argv[4]);
+ log_warning("Password file path '%s' is not absolute. Ignoring.", argv[4]);
else
key_file = argv[4];
}
@@ -709,20 +710,15 @@ static int run(int argc, char *argv[]) {
flags);
if (r >= 0)
break;
- if (r == -EAGAIN) {
- key_file = NULL;
- continue;
- }
- if (r != -EPERM)
- return log_error_errno(r, "Failed to activate: %m");
+ if (r != -EAGAIN)
+ return r;
- log_warning("Invalid passphrase.");
+ /* Passphrase not correct? Let's try again! */
+ key_file = NULL;
}
- if (arg_tries != 0 && tries >= arg_tries) {
- log_error("Too many attempts; giving up.");
- return -EPERM;
- }
+ if (arg_tries != 0 && tries >= arg_tries)
+ return log_error_errno(SYNTHETIC_ERRNO(EPERM), "Too many attempts to activate; giving up.");
} else if (streq(argv[1], "detach")) {
@@ -740,10 +736,8 @@ static int run(int argc, char *argv[]) {
if (r < 0)
return log_error_errno(r, "Failed to deactivate: %m");
- } else {
- log_error("Unknown verb %s.", argv[1]);
- return -EINVAL;
- }
+ } else
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown verb %s.", argv[1]);
return 0;
}
diff --git a/src/fsck/fsck.c b/src/fsck/fsck.c
index ba39f596fc..524327c4da 100644
--- a/src/fsck/fsck.c
+++ b/src/fsck/fsck.c
@@ -414,7 +414,7 @@ static int run(int argc, char *argv[]) {
exit_status = wait_for_terminate_and_check("fsck", pid, WAIT_LOG_ABNORMAL);
if (exit_status < 0)
return exit_status;
- if (exit_status & ~1) {
+ if ((exit_status & ~FSCK_ERROR_CORRECTED) != FSCK_SUCCESS) {
log_error("fsck failed with exit status %i.", exit_status);
if ((exit_status & FSCK_SYSTEM_SHOULD_REBOOT) && root_directory) {
diff --git a/src/import/curl-util.c b/src/import/curl-util.c
index 05b17c3c78..7db03b2919 100644
--- a/src/import/curl-util.c
+++ b/src/import/curl-util.c
@@ -1,6 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#include "alloc-util.h"
+#include "build.h"
#include "curl-util.h"
#include "fd-util.h"
#include "locale-util.h"
@@ -283,14 +284,14 @@ int curl_glue_make(CURL **ret, const char *url, void *userdata) {
if (curl_easy_setopt(c, CURLOPT_PRIVATE, userdata) != CURLE_OK)
return -EIO;
- useragent = strjoina(program_invocation_short_name, "/" PACKAGE_VERSION);
+ useragent = strjoina(program_invocation_short_name, "/" GIT_VERSION);
if (curl_easy_setopt(c, CURLOPT_USERAGENT, useragent) != CURLE_OK)
return -EIO;
if (curl_easy_setopt(c, CURLOPT_FOLLOWLOCATION, 1L) != CURLE_OK)
return -EIO;
- *ret = c;
+ *ret = TAKE_PTR(c);
return 0;
}
diff --git a/src/import/pull-job.c b/src/import/pull-job.c
index a44e0a7eda..6881bd627f 100644
--- a/src/import/pull-job.c
+++ b/src/import/pull-job.c
@@ -537,7 +537,7 @@ int pull_job_new(PullJob **ret, const char *url, CurlGlue *glue, void *userdata)
assert(ret);
u = strdup(url);
- if (u)
+ if (!u)
return -ENOMEM;
j = new(PullJob, 1);
diff --git a/src/initctl/initctl.c b/src/initctl/initctl.c
index c60d4bd740..260dc2eb61 100644
--- a/src/initctl/initctl.c
+++ b/src/initctl/initctl.c
@@ -233,12 +233,8 @@ static void server_done(Server *s) {
while (s->fifos)
fifo_free(s->fifos);
- safe_close(s->epoll_fd);
-
- if (s->bus) {
- sd_bus_flush(s->bus);
- sd_bus_unref(s->bus);
- }
+ s->epoll_fd = safe_close(s->epoll_fd);
+ s->bus = sd_bus_flush_close_unref(s->bus);
}
static int server_init(Server *s, unsigned n_sockets) {
diff --git a/src/journal-remote/journal-gatewayd.c b/src/journal-remote/journal-gatewayd.c
index 4185af63e1..af45fa549a 100644
--- a/src/journal-remote/journal-gatewayd.c
+++ b/src/journal-remote/journal-gatewayd.c
@@ -461,7 +461,7 @@ static int request_handler_entries(
struct MHD_Connection *connection,
void *connection_cls) {
- struct MHD_Response *response;
+ _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL;
RequestMeta *m = connection_cls;
int r;
@@ -503,11 +503,7 @@ static int request_handler_entries(
return respond_oom(connection);
MHD_add_response_header(response, "Content-Type", mime_types[m->mode]);
-
- r = MHD_queue_response(connection, MHD_HTTP_OK, response);
- MHD_destroy_response(response);
-
- return r;
+ return MHD_queue_response(connection, MHD_HTTP_OK, response);
}
static int output_field(FILE *f, OutputMode m, const char *d, size_t l) {
@@ -619,7 +615,7 @@ static int request_handler_fields(
const char *field,
void *connection_cls) {
- struct MHD_Response *response;
+ _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL;
RequestMeta *m = connection_cls;
int r;
@@ -642,11 +638,7 @@ static int request_handler_fields(
return respond_oom(connection);
MHD_add_response_header(response, "Content-Type", mime_types[m->mode == OUTPUT_JSON ? OUTPUT_JSON : OUTPUT_SHORT]);
-
- r = MHD_queue_response(connection, MHD_HTTP_OK, response);
- MHD_destroy_response(response);
-
- return r;
+ return MHD_queue_response(connection, MHD_HTTP_OK, response);
}
static int request_handler_redirect(
@@ -654,8 +646,7 @@ static int request_handler_redirect(
const char *target) {
char *page;
- struct MHD_Response *response;
- int ret;
+ _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL;
assert(connection);
assert(target);
@@ -671,11 +662,7 @@ static int request_handler_redirect(
MHD_add_response_header(response, "Content-Type", "text/html");
MHD_add_response_header(response, "Location", target);
-
- ret = MHD_queue_response(connection, MHD_HTTP_MOVED_PERMANENTLY, response);
- MHD_destroy_response(response);
-
- return ret;
+ return MHD_queue_response(connection, MHD_HTTP_MOVED_PERMANENTLY, response);
}
static int request_handler_file(
@@ -683,8 +670,7 @@ static int request_handler_file(
const char *path,
const char *mime_type) {
- struct MHD_Response *response;
- int ret;
+ _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL;
_cleanup_close_ int fd = -1;
struct stat st;
@@ -702,15 +688,10 @@ static int request_handler_file(
response = MHD_create_response_from_fd_at_offset64(st.st_size, fd, 0);
if (!response)
return respond_oom(connection);
-
- fd = -1;
+ TAKE_FD(fd);
MHD_add_response_header(response, "Content-Type", mime_type);
-
- ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
- MHD_destroy_response(response);
-
- return ret;
+ return MHD_queue_response(connection, MHD_HTTP_OK, response);
}
static int get_virtualization(char **v) {
@@ -747,14 +728,13 @@ static int request_handler_machine(
struct MHD_Connection *connection,
void *connection_cls) {
- struct MHD_Response *response;
+ _cleanup_(MHD_destroy_responsep) struct MHD_Response *response = NULL;
RequestMeta *m = connection_cls;
int r;
_cleanup_free_ char* hostname = NULL, *os_name = NULL;
uint64_t cutoff_from = 0, cutoff_to = 0, usage = 0;
- char *json;
sd_id128_t mid, bid;
- _cleanup_free_ char *v = NULL;
+ _cleanup_free_ char *v = NULL, *json = NULL;
assert(connection);
assert(m);
@@ -803,21 +783,16 @@ static int request_handler_machine(
usage,
cutoff_from,
cutoff_to);
-
if (r < 0)
return respond_oom(connection);
response = MHD_create_response_from_buffer(strlen(json), json, MHD_RESPMEM_MUST_FREE);
- if (!response) {
- free(json);
+ if (!response)
return respond_oom(connection);
- }
+ TAKE_PTR(json);
MHD_add_response_header(response, "Content-Type", "application/json");
- r = MHD_queue_response(connection, MHD_HTTP_OK, response);
- MHD_destroy_response(response);
-
- return r;
+ return MHD_queue_response(connection, MHD_HTTP_OK, response);
}
static int request_handler(
diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c
index e1748cb46b..802c3ea608 100644
--- a/src/journal-remote/journal-remote-main.c
+++ b/src/journal-remote/journal-remote-main.c
@@ -221,16 +221,17 @@ static int process_http_upload(
journal_remote_server_global->seal);
if (r == -EAGAIN)
break;
- else if (r < 0) {
- log_warning("Failed to process data for connection %p", connection);
- if (r == -E2BIG)
- return mhd_respondf(connection,
- r, MHD_HTTP_PAYLOAD_TOO_LARGE,
- "Entry is too large, maximum is " STRINGIFY(DATA_SIZE_MAX) " bytes.");
+ if (r < 0) {
+ if (r == -ENOBUFS)
+ log_warning_errno(r, "Entry is above the maximum of %u, aborting connection %p.",
+ DATA_SIZE_MAX, connection);
+ else if (r == -E2BIG)
+ log_warning_errno(r, "Entry with more fields than the maximum of %u, aborting connection %p.",
+ ENTRY_FIELD_COUNT_MAX, connection);
else
- return mhd_respondf(connection,
- r, MHD_HTTP_UNPROCESSABLE_ENTITY,
- "Processing failed: %m.");
+ log_warning_errno(r, "Failed to process data, aborting connection %p: %m",
+ connection);
+ return MHD_NO;
}
}
@@ -264,6 +265,7 @@ static int request_handler(
const char *header;
int r, code, fd;
_cleanup_free_ char *hostname = NULL;
+ size_t len;
assert(connection);
assert(connection_cls);
@@ -283,12 +285,27 @@ static int request_handler(
if (!streq(url, "/upload"))
return mhd_respond(connection, MHD_HTTP_NOT_FOUND, "Not found.");
- header = MHD_lookup_connection_value(connection,
- MHD_HEADER_KIND, "Content-Type");
+ header = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "Content-Type");
if (!header || !streq(header, "application/vnd.fdo.journal"))
return mhd_respond(connection, MHD_HTTP_UNSUPPORTED_MEDIA_TYPE,
"Content-Type: application/vnd.fdo.journal is required.");
+ header = MHD_lookup_connection_value(connection, MHD_HEADER_KIND, "Content-Length");
+ if (!header)
+ return mhd_respond(connection, MHD_HTTP_LENGTH_REQUIRED,
+ "Content-Length header is required.");
+ r = safe_atozu(header, &len);
+ if (r < 0)
+ return mhd_respondf(connection, r, MHD_HTTP_LENGTH_REQUIRED,
+ "Content-Length: %s cannot be parsed: %m", header);
+
+ if (len > ENTRY_SIZE_MAX)
+ /* When serialized, an entry of maximum size might be slightly larger,
+ * so this does not correspond exactly to the limit in journald. Oh well.
+ */
+ return mhd_respondf(connection, 0, MHD_HTTP_PAYLOAD_TOO_LARGE,
+ "Payload larger than maximum size of %u bytes", ENTRY_SIZE_MAX);
+
{
const union MHD_ConnectionInfo *ci;
diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c
index 3c0916c438..1da32c5f85 100644
--- a/src/journal-remote/journal-remote.c
+++ b/src/journal-remote/journal-remote.c
@@ -407,6 +407,9 @@ int journal_remote_handle_raw_source(
log_debug("%zu active sources remaining", s->active);
return 0;
} else if (r == -E2BIG) {
+ log_notice("Entry with too many fields, skipped");
+ return 1;
+ } else if (r == -ENOBUFS) {
log_notice("Entry too big, skipped");
return 1;
} else if (r == -EAGAIN) {
diff --git a/src/journal-remote/journal-upload-journal.c b/src/journal-remote/journal-upload-journal.c
index be39f7c047..7d7e7384bf 100644
--- a/src/journal-remote/journal-upload-journal.c
+++ b/src/journal-remote/journal-upload-journal.c
@@ -235,7 +235,7 @@ static ssize_t write_entry(char *buf, size_t size, Uploader *u) {
assert_not_reached("WTF?");
}
-static inline void check_update_watchdog(Uploader *u) {
+static void check_update_watchdog(Uploader *u) {
usec_t after;
usec_t elapsed_time;
diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c
index 1e08fcc554..ef3556f825 100644
--- a/src/journal-remote/journal-upload.c
+++ b/src/journal-remote/journal-upload.c
@@ -9,6 +9,7 @@
#include "sd-daemon.h"
#include "alloc-util.h"
+#include "build.h"
#include "conf-parser.h"
#include "daemon-util.h"
#include "def.h"
@@ -236,7 +237,7 @@ int start_upload(Uploader *u,
easy_setopt(curl, CURLOPT_VERBOSE, 1L, LOG_WARNING, );
easy_setopt(curl, CURLOPT_USERAGENT,
- "systemd-journal-upload " PACKAGE_STRING,
+ "systemd-journal-upload " GIT_VERSION,
LOG_WARNING, );
if (arg_key || startswith(u->url, "https://")) {
diff --git a/src/journal-remote/microhttpd-util.c b/src/journal-remote/microhttpd-util.c
index adf40b5abd..5f5691995d 100644
--- a/src/journal-remote/microhttpd-util.c
+++ b/src/journal-remote/microhttpd-util.c
@@ -32,21 +32,16 @@ static int mhd_respond_internal(struct MHD_Connection *connection,
const char *buffer,
size_t size,
enum MHD_ResponseMemoryMode mode) {
- struct MHD_Response *response;
- int r;
-
assert(connection);
- response = MHD_create_response_from_buffer(size, (char*) buffer, mode);
+ _cleanup_(MHD_destroy_responsep) struct MHD_Response *response
+ = MHD_create_response_from_buffer(size, (char*) buffer, mode);
if (!response)
return MHD_NO;
log_debug("Queueing response %u: %s", code, buffer);
MHD_add_response_header(response, "Content-Type", "text/plain");
- r = MHD_queue_response(connection, code, response);
- MHD_destroy_response(response);
-
- return r;
+ return MHD_queue_response(connection, code, response);
}
int mhd_respond(struct MHD_Connection *connection,
@@ -249,7 +244,7 @@ static int get_auth_dn(gnutls_x509_crt_t client_cert, char **buf) {
return 0;
}
-static inline void gnutls_x509_crt_deinitp(gnutls_x509_crt_t *p) {
+static void gnutls_x509_crt_deinitp(gnutls_x509_crt_t *p) {
gnutls_x509_crt_deinit(*p);
}
diff --git a/src/journal-remote/microhttpd-util.h b/src/journal-remote/microhttpd-util.h
index 364cd0f7cf..ba51d847e4 100644
--- a/src/journal-remote/microhttpd-util.h
+++ b/src/journal-remote/microhttpd-util.h
@@ -75,3 +75,4 @@ int check_permissions(struct MHD_Connection *connection, int *code, char **hostn
int setup_gnutls_logger(char **categories);
DEFINE_TRIVIAL_CLEANUP_FUNC(struct MHD_Daemon*, MHD_stop_daemon);
+DEFINE_TRIVIAL_CLEANUP_FUNC(struct MHD_Response*, MHD_destroy_response);
diff --git a/src/journal/audit-type.h b/src/journal/audit-type.h
index 069a883490..98e5c39420 100644
--- a/src/journal/audit-type.h
+++ b/src/journal/audit-type.h
@@ -4,6 +4,7 @@
#include <alloca.h>
#include <stdio.h>
+#include "alloc-util.h"
#include "macro.h"
const char *audit_type_to_string(int type);
@@ -15,7 +16,7 @@ int audit_type_from_string(const char *s);
const char *_s_; \
_s_ = audit_type_to_string(type); \
if (!_s_) { \
- _s_ = alloca(STRLEN("AUDIT") + DECIMAL_STR_MAX(int)); \
+ _s_ = newa(char, STRLEN("AUDIT") + DECIMAL_STR_MAX(int)); \
sprintf((char*) _s_, "AUDIT%04i", type); \
} \
_s_; \
diff --git a/src/journal/cat.c b/src/journal/cat.c
index a84350fbc9..9900bd2e86 100644
--- a/src/journal/cat.c
+++ b/src/journal/cat.c
@@ -20,6 +20,7 @@
static const char *arg_identifier = NULL;
static int arg_priority = LOG_INFO;
+static int arg_stderr_priority = -1;
static bool arg_level_prefix = true;
static int help(void) {
@@ -32,11 +33,12 @@ static int help(void) {
printf("%s [OPTIONS...] {COMMAND} ...\n\n"
"Execute process with stdout/stderr connected to the journal.\n\n"
- " -h --help Show this help\n"
- " --version Show package version\n"
- " -t --identifier=STRING Set syslog identifier\n"
- " -p --priority=PRIORITY Set priority value (0..7)\n"
- " --level-prefix=BOOL Control whether level prefix shall be parsed\n"
+ " -h --help Show this help\n"
+ " --version Show package version\n"
+ " -t --identifier=STRING Set syslog identifier\n"
+ " -p --priority=PRIORITY Set priority value (0..7)\n"
+ " --stderr-priority=PRIORITY Set priority value (0..7) used for stderr\n"
+ " --level-prefix=BOOL Control whether level prefix shall be parsed\n"
"\nSee the %s for details.\n"
, program_invocation_short_name
, link
@@ -49,15 +51,17 @@ static int parse_argv(int argc, char *argv[]) {
enum {
ARG_VERSION = 0x100,
+ ARG_STDERR_PRIORITY,
ARG_LEVEL_PREFIX
};
static const struct option options[] = {
- { "help", no_argument, NULL, 'h' },
- { "version", no_argument, NULL, ARG_VERSION },
- { "identifier", required_argument, NULL, 't' },
- { "priority", required_argument, NULL, 'p' },
- { "level-prefix", required_argument, NULL, ARG_LEVEL_PREFIX },
+ { "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, ARG_VERSION },
+ { "identifier", required_argument, NULL, 't' },
+ { "priority", required_argument, NULL, 'p' },
+ { "stderr-priority", required_argument, NULL, ARG_STDERR_PRIORITY },
+ { "level-prefix", required_argument, NULL, ARG_LEVEL_PREFIX },
{}
};
@@ -91,6 +95,13 @@ static int parse_argv(int argc, char *argv[]) {
"Failed to parse priority value.");
break;
+ case ARG_STDERR_PRIORITY:
+ arg_stderr_priority = log_level_from_string(optarg);
+ if (arg_stderr_priority < 0)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "Failed to parse stderr priority value.");
+ break;
+
case ARG_LEVEL_PREFIX: {
int k;
@@ -113,7 +124,7 @@ static int parse_argv(int argc, char *argv[]) {
}
static int run(int argc, char *argv[]) {
- _cleanup_close_ int fd = -1, saved_stderr = -1;
+ _cleanup_close_ int outfd = -1, errfd = -1, saved_stderr = -1;
int r;
log_parse_environment();
@@ -123,14 +134,21 @@ static int run(int argc, char *argv[]) {
if (r <= 0)
return r;
- fd = sd_journal_stream_fd(arg_identifier, arg_priority, arg_level_prefix);
- if (fd < 0)
- return log_error_errno(fd, "Failed to create stream fd: %m");
+ outfd = sd_journal_stream_fd(arg_identifier, arg_priority, arg_level_prefix);
+ if (outfd < 0)
+ return log_error_errno(outfd, "Failed to create stream fd: %m");
+
+ if (arg_stderr_priority >= 0 && arg_stderr_priority != arg_priority) {
+ errfd = sd_journal_stream_fd(arg_identifier, arg_stderr_priority, arg_level_prefix);
+ if (errfd < 0)
+ return log_error_errno(errfd, "Failed to create stream fd: %m");
+ }
saved_stderr = fcntl(STDERR_FILENO, F_DUPFD_CLOEXEC, 3);
- r = rearrange_stdio(STDIN_FILENO, fd, fd); /* Invalidates fd on succcess + error! */
- TAKE_FD(fd);
+ r = rearrange_stdio(STDIN_FILENO, outfd, errfd < 0 ? outfd : errfd); /* Invalidates fd on succcess + error! */
+ TAKE_FD(outfd);
+ TAKE_FD(errfd);
if (r < 0)
return log_error_errno(r, "Failed to rearrange stdout/stderr: %m");
diff --git a/src/journal/catalog.c b/src/journal/catalog.c
index 3556a101bf..4062f12c2d 100644
--- a/src/journal/catalog.c
+++ b/src/journal/catalog.c
@@ -46,7 +46,8 @@ typedef struct CatalogHeader {
typedef struct CatalogItem {
sd_id128_t id;
- char language[32];
+ char language[32]; /* One byte is used for termination, so the maximum allowed
+ * length of the string is actually 31 bytes. */
le64_t offset;
} CatalogItem;
@@ -556,25 +557,44 @@ static const char *find_id(void *p, sd_id128_t id) {
const char *loc;
loc = setlocale(LC_MESSAGES, NULL);
- if (loc && loc[0] && !streq(loc, "C") && !streq(loc, "POSIX")) {
- strncpy(key.language, loc, sizeof(key.language));
- key.language[strcspn(key.language, ".@")] = 0;
-
- f = bsearch(&key, (const uint8_t*) p + le64toh(h->header_size), le64toh(h->n_items), le64toh(h->catalog_item_size), (comparison_fn_t) catalog_compare_func);
- if (!f) {
- char *e;
-
- e = strchr(key.language, '_');
- if (e) {
- *e = 0;
- f = bsearch(&key, (const uint8_t*) p + le64toh(h->header_size), le64toh(h->n_items), le64toh(h->catalog_item_size), (comparison_fn_t) catalog_compare_func);
+ if (!isempty(loc) && !STR_IN_SET(loc, "C", "POSIX")) {
+ size_t len;
+
+ len = strcspn(loc, ".@");
+ if (len > sizeof(key.language) - 1)
+ log_debug("LC_MESSAGES value too long, ignoring: \"%.*s\"", (int) len, loc);
+ else {
+ strncpy(key.language, loc, len);
+ key.language[len] = '\0';
+
+ f = bsearch(&key,
+ (const uint8_t*) p + le64toh(h->header_size),
+ le64toh(h->n_items),
+ le64toh(h->catalog_item_size),
+ (comparison_fn_t) catalog_compare_func);
+ if (!f) {
+ char *e;
+
+ e = strchr(key.language, '_');
+ if (e) {
+ *e = 0;
+ f = bsearch(&key,
+ (const uint8_t*) p + le64toh(h->header_size),
+ le64toh(h->n_items),
+ le64toh(h->catalog_item_size),
+ (comparison_fn_t) catalog_compare_func);
+ }
}
}
}
if (!f) {
zero(key.language);
- f = bsearch(&key, (const uint8_t*) p + le64toh(h->header_size), le64toh(h->n_items), le64toh(h->catalog_item_size), (comparison_fn_t) catalog_compare_func);
+ f = bsearch(&key,
+ (const uint8_t*) p + le64toh(h->header_size),
+ le64toh(h->n_items),
+ le64toh(h->catalog_item_size),
+ (comparison_fn_t) catalog_compare_func);
}
if (!f)
diff --git a/src/journal/journal-def.h b/src/journal/journal-def.h
index e48260206f..d68ce3894b 100644
--- a/src/journal/journal-def.h
+++ b/src/journal/journal-def.h
@@ -59,16 +59,20 @@ struct ObjectHeader {
uint8_t payload[];
} _packed_;
-struct DataObject {
- ObjectHeader object;
- le64_t hash;
- le64_t next_hash_offset;
- le64_t next_field_offset;
- le64_t entry_offset; /* the first array entry we store inline */
- le64_t entry_array_offset;
- le64_t n_entries;
- uint8_t payload[];
-} _packed_;
+#define DataObject__contents { \
+ ObjectHeader object; \
+ le64_t hash; \
+ le64_t next_hash_offset; \
+ le64_t next_field_offset; \
+ le64_t entry_offset; /* the first array entry we store inline */ \
+ le64_t entry_array_offset; \
+ le64_t n_entries; \
+ uint8_t payload[]; \
+ }
+
+struct DataObject DataObject__contents;
+struct DataObject__packed DataObject__contents _packed_;
+assert_cc(sizeof(struct DataObject) == sizeof(struct DataObject__packed));
struct FieldObject {
ObjectHeader object;
@@ -83,15 +87,20 @@ struct EntryItem {
le64_t hash;
} _packed_;
-struct EntryObject {
- ObjectHeader object;
- le64_t seqnum;
- le64_t realtime;
- le64_t monotonic;
- sd_id128_t boot_id;
- le64_t xor_hash;
- EntryItem items[];
-} _packed_;
+#define EntryObject__contents { \
+ ObjectHeader object; \
+ le64_t seqnum; \
+ le64_t realtime; \
+ le64_t monotonic; \
+ sd_id128_t boot_id; \
+ le64_t xor_hash; \
+ EntryItem items[]; \
+ }
+
+struct EntryObject EntryObject__contents;
+struct EntryObject__packed EntryObject__contents _packed_;
+assert_cc(sizeof(struct EntryObject) == sizeof(struct EntryObject__packed));
+
struct HashItem {
le64_t head_hash_offset;
@@ -166,40 +175,43 @@ enum {
#define HEADER_SIGNATURE ((char[]) { 'L', 'P', 'K', 'S', 'H', 'H', 'R', 'H' })
-struct Header {
- uint8_t signature[8]; /* "LPKSHHRH" */
- le32_t compatible_flags;
- le32_t incompatible_flags;
- uint8_t state;
- uint8_t reserved[7];
- sd_id128_t file_id;
- sd_id128_t machine_id;
- sd_id128_t boot_id; /* last writer */
- sd_id128_t seqnum_id;
- le64_t header_size;
- le64_t arena_size;
- le64_t data_hash_table_offset;
- le64_t data_hash_table_size;
- le64_t field_hash_table_offset;
- le64_t field_hash_table_size;
- le64_t tail_object_offset;
- le64_t n_objects;
- le64_t n_entries;
- le64_t tail_entry_seqnum;
- le64_t head_entry_seqnum;
- le64_t entry_array_offset;
- le64_t head_entry_realtime;
- le64_t tail_entry_realtime;
- le64_t tail_entry_monotonic;
- /* Added in 187 */
- le64_t n_data;
- le64_t n_fields;
- /* Added in 189 */
- le64_t n_tags;
- le64_t n_entry_arrays;
-
- /* Size: 240 */
-} _packed_;
+#define struct_Header__contents { \
+ uint8_t signature[8]; /* "LPKSHHRH" */ \
+ le32_t compatible_flags; \
+ le32_t incompatible_flags; \
+ uint8_t state; \
+ uint8_t reserved[7]; \
+ sd_id128_t file_id; \
+ sd_id128_t machine_id; \
+ sd_id128_t boot_id; /* last writer */ \
+ sd_id128_t seqnum_id; \
+ le64_t header_size; \
+ le64_t arena_size; \
+ le64_t data_hash_table_offset; \
+ le64_t data_hash_table_size; \
+ le64_t field_hash_table_offset; \
+ le64_t field_hash_table_size; \
+ le64_t tail_object_offset; \
+ le64_t n_objects; \
+ le64_t n_entries; \
+ le64_t tail_entry_seqnum; \
+ le64_t head_entry_seqnum; \
+ le64_t entry_array_offset; \
+ le64_t head_entry_realtime; \
+ le64_t tail_entry_realtime; \
+ le64_t tail_entry_monotonic; \
+ /* Added in 187 */ \
+ le64_t n_data; \
+ le64_t n_fields; \
+ /* Added in 189 */ \
+ le64_t n_tags; \
+ le64_t n_entry_arrays; \
+ }
+
+struct Header struct_Header__contents;
+struct Header__packed struct_Header__contents _packed_;
+assert_cc(sizeof(struct Header) == sizeof(struct Header__packed));
+assert_cc(sizeof(struct Header) == 240);
#define FSS_HEADER_SIGNATURE ((char[]) { 'K', 'S', 'H', 'H', 'R', 'H', 'L', 'P' })
diff --git a/src/journal/journal-send.c b/src/journal/journal-send.c
index 87056435fc..8618454131 100644
--- a/src/journal/journal-send.c
+++ b/src/journal/journal-send.c
@@ -30,7 +30,7 @@
const char *_func = (func); \
char **_f = &(f); \
_fl = strlen(_func) + 1; \
- *_f = alloca(_fl + 10); \
+ *_f = newa(char, _fl + 10); \
memcpy(*_f, "CODE_FUNC=", 10); \
memcpy(*_f + 10, _func, _fl); \
} while (false)
@@ -403,7 +403,7 @@ _public_ int sd_journal_stream_fd(const char *identifier, int priority, int leve
identifier = strempty(identifier);
l = strlen(identifier);
- header = alloca(l + 1 + 1 + 2 + 2 + 2 + 2 + 2);
+ header = newa(char, l + 1 + 1 + 2 + 2 + 2 + 2 + 2);
memcpy(header, identifier, l);
header[l++] = '\n';
diff --git a/src/journal/journald-audit.c b/src/journal/journald-audit.c
index 345e43ef44..accbad4180 100644
--- a/src/journal/journald-audit.c
+++ b/src/journal/journald-audit.c
@@ -162,7 +162,7 @@ static int map_generic_field(const char *prefix, const char **p, struct iovec **
if (e <= *p || e >= *p + 16)
return 0;
- c = alloca(strlen(prefix) + (e - *p) + 2);
+ c = newa(char, strlen(prefix) + (e - *p) + 2);
t = stpcpy(c, prefix);
for (f = *p; f < e; f++) {
diff --git a/src/journal/journald-context.c b/src/journal/journald-context.c
index 8253a45128..7c51f2f633 100644
--- a/src/journal/journald-context.c
+++ b/src/journal/journald-context.c
@@ -16,6 +16,7 @@
#include "parse-util.h"
#include "path-util.h"
#include "process-util.h"
+#include "procfs-util.h"
#include "string-util.h"
#include "syslog-util.h"
#include "unaligned.h"
@@ -60,7 +61,37 @@
/* Keep at most 16K entries in the cache. (Note though that this limit may be violated if enough streams pin entries in
* the cache, in which case we *do* permit this limit to be breached. That's safe however, as the number of stream
* clients itself is limited.) */
-#define CACHE_MAX (16*1024)
+#define CACHE_MAX_FALLBACK 128U
+#define CACHE_MAX_MAX (16*1024U)
+#define CACHE_MAX_MIN 64U
+
+static size_t cache_max(void) {
+ static size_t cached = -1;
+
+ if (cached == (size_t) -1) {
+ uint64_t mem_total;
+ int r;
+
+ r = procfs_memory_get(&mem_total, NULL);
+ if (r < 0) {
+ log_warning_errno(r, "Cannot query /proc/meminfo for MemTotal: %m");
+ cached = CACHE_MAX_FALLBACK;
+ } else {
+ /* Cache entries are usually a few kB, but the process cmdline is controlled by the
+ * user and can be up to _SC_ARG_MAX, usually 2MB. Let's say that approximately up to
+ * 1/8th of memory may be used by the cache.
+ *
+ * In the common case, this formula gives 64 cache entries for each GB of RAM.
+ */
+ long l = sysconf(_SC_ARG_MAX);
+ assert(l > 0);
+
+ cached = CLAMP(mem_total / 8 / (uint64_t) l, CACHE_MAX_MIN, CACHE_MAX_MAX);
+ }
+ }
+
+ return cached;
+}
static int client_context_compare(const void *a, const void *b) {
const ClientContext *x = a, *y = b;
@@ -246,7 +277,7 @@ static int client_context_read_label(
}
static int client_context_read_cgroup(Server *s, ClientContext *c, const char *unit_id) {
- char *t = NULL;
+ _cleanup_free_ char *t = NULL;
int r;
assert(c);
@@ -254,10 +285,9 @@ static int client_context_read_cgroup(Server *s, ClientContext *c, const char *u
/* Try to acquire the current cgroup path */
r = cg_pid_get_path_shifted(c->pid, s->cgroup_root, &t);
if (r < 0 || empty_or_root(t)) {
-
/* We use the unit ID passed in as fallback if we have nothing cached yet and cg_pid_get_path_shifted()
* failed or process is running in a root cgroup. Zombie processes are automatically migrated to root cgroup
- * on cgroupsv1 and we want to be able to map log messages from them too. */
+ * on cgroup v1 and we want to be able to map log messages from them too. */
if (unit_id && !c->unit) {
c->unit = strdup(unit_id);
if (c->unit)
@@ -268,10 +298,8 @@ static int client_context_read_cgroup(Server *s, ClientContext *c, const char *u
}
/* Let's shortcut this if the cgroup path didn't change */
- if (streq_ptr(c->cgroup, t)) {
- free(t);
+ if (streq_ptr(c->cgroup, t))
return 0;
- }
free_and_replace(c->cgroup, t);
@@ -553,15 +581,39 @@ refresh:
}
static void client_context_try_shrink_to(Server *s, size_t limit) {
+ ClientContext *c;
+ usec_t t;
+
assert(s);
+ /* Flush any cache entries for PIDs that have already moved on. Don't do this
+ * too often, since it's a slow process. */
+ t = now(CLOCK_MONOTONIC);
+ if (s->last_cache_pid_flush + MAX_USEC < t) {
+ unsigned n = prioq_size(s->client_contexts_lru), idx = 0;
+
+ /* We do a number of iterations based on the initial size of the prioq. When we remove an
+ * item, a new item is moved into its places, and items to the right might be reshuffled.
+ */
+ for (unsigned i = 0; i < n; i++) {
+ c = prioq_peek_by_index(s->client_contexts_lru, idx);
+
+ assert(c->n_ref == 0);
+
+ if (!pid_is_unwaited(c->pid))
+ client_context_free(s, c);
+ else
+ idx ++;
+ }
+
+ s->last_cache_pid_flush = t;
+ }
+
/* Bring the number of cache entries below the indicated limit, so that we can create a new entry without
* breaching the limit. Note that we only flush out entries that aren't pinned here. This means the number of
* cache entries may very well grow beyond the limit, if all entries stored remain pinned. */
while (hashmap_size(s->client_contexts) > limit) {
- ClientContext *c;
-
c = prioq_pop(s->client_contexts_lru);
if (!c)
break; /* All remaining entries are pinned, give up */
@@ -630,7 +682,7 @@ static int client_context_get_internal(
return 0;
}
- client_context_try_shrink_to(s, CACHE_MAX-1);
+ client_context_try_shrink_to(s, cache_max()-1);
r = client_context_new(s, pid, &c);
if (r < 0)
diff --git a/src/journal/journald-native.c b/src/journal/journald-native.c
index e86178ed77..221188db16 100644
--- a/src/journal/journald-native.c
+++ b/src/journal/journald-native.c
@@ -110,7 +110,7 @@ static int server_process_entry(
int priority = LOG_INFO;
pid_t object_pid = 0;
const char *p;
- int r = 0;
+ int r = 1;
p = buffer;
@@ -122,8 +122,7 @@ static int server_process_entry(
if (!e) {
/* Trailing noise, let's ignore it, and flush what we collected */
log_debug("Received message with trailing noise, ignoring.");
- r = 1; /* finish processing of the message */
- break;
+ break; /* finish processing of the message */
}
if (e == p) {
@@ -133,14 +132,17 @@ static int server_process_entry(
}
if (IN_SET(*p, '.', '#')) {
- /* Ignore control commands for now, and
- * comments too. */
+ /* Ignore control commands for now, and comments too. */
*remaining -= (e - p) + 1;
p = e + 1;
continue;
}
/* A property follows */
+ if (n > ENTRY_FIELD_COUNT_MAX) {
+ log_debug("Received an entry that has more than " STRINGIFY(ENTRY_FIELD_COUNT_MAX) " fields, ignoring entry.");
+ goto finish;
+ }
/* n existing properties, 1 new, +1 for _TRANSPORT */
if (!GREEDY_REALLOC(iovec, m,
@@ -148,7 +150,7 @@ static int server_process_entry(
N_IOVEC_META_FIELDS + N_IOVEC_OBJECT_FIELDS +
client_context_extra_fields_n_iovec(context))) {
r = log_oom();
- break;
+ goto finish;
}
q = memchr(p, '=', e - p);
@@ -157,6 +159,16 @@ static int server_process_entry(
size_t l;
l = e - p;
+ if (l > DATA_SIZE_MAX) {
+ log_debug("Received text block of %zu bytes is too large, ignoring entry.", l);
+ goto finish;
+ }
+
+ if (entry_size + l + n + 1 > ENTRY_SIZE_MAX) { /* data + separators + trailer */
+ log_debug("Entry is too big (%zu bytes after processing %zu entries), ignoring entry.",
+ entry_size + l, n + 1);
+ goto finish;
+ }
/* If the field name starts with an underscore, skip the variable, since that indicates
* a trusted field */
@@ -174,7 +186,7 @@ static int server_process_entry(
p = e + 1;
continue;
} else {
- uint64_t l;
+ uint64_t l, total;
char *k;
if (*remaining < e - p + 1 + sizeof(uint64_t) + 1) {
@@ -183,10 +195,16 @@ static int server_process_entry(
}
l = unaligned_read_le64(e + 1);
-
if (l > DATA_SIZE_MAX) {
- log_debug("Received binary data block of %"PRIu64" bytes is too large, ignoring.", l);
- break;
+ log_debug("Received binary data block of %"PRIu64" bytes is too large, ignoring entry.", l);
+ goto finish;
+ }
+
+ total = (e - p) + 1 + l;
+ if (entry_size + total + n + 1 > ENTRY_SIZE_MAX) { /* data + separators + trailer */
+ log_debug("Entry is too big (%"PRIu64"bytes after processing %zu fields), ignoring.",
+ entry_size + total, n + 1);
+ goto finish;
}
if ((uint64_t) *remaining < e - p + 1 + sizeof(uint64_t) + l + 1 ||
@@ -195,7 +213,7 @@ static int server_process_entry(
break;
}
- k = malloc((e - p) + 1 + l);
+ k = malloc(total);
if (!k) {
log_oom();
break;
@@ -223,15 +241,8 @@ static int server_process_entry(
}
}
- if (n <= 0) {
- r = 1;
+ if (n <= 0)
goto finish;
- }
-
- if (!client_context_test_priority(context, priority)) {
- r = 0;
- goto finish;
- }
tn = n++;
iovec[tn] = IOVEC_MAKE_STRING("_TRANSPORT=journal");
@@ -242,6 +253,11 @@ static int server_process_entry(
goto finish;
}
+ r = 0; /* Success, we read the message. */
+
+ if (!client_context_test_priority(context, priority))
+ goto finish;
+
if (message) {
if (s->forward_to_syslog)
server_forward_syslog(s, syslog_fixup_facility(priority), identifier, message, ucred, tv);
@@ -313,15 +329,13 @@ void server_process_native_file(
bool sealed;
int r;
- /* Data is in the passed fd, since it didn't fit in a
- * datagram. */
+ /* Data is in the passed fd, probably it didn't fit in a datagram. */
assert(s);
assert(fd >= 0);
/* If it's a memfd, check if it is sealed. If so, we can just
- * use map it and use it, and do not need to copy the data
- * out. */
+ * mmap it and use it, and do not need to copy the data out. */
sealed = memfd_get_sealed(fd) > 0;
if (!sealed && (!ucred || ucred->uid != 0)) {
@@ -362,8 +376,10 @@ void server_process_native_file(
if (st.st_size <= 0)
return;
- if (st.st_size > ENTRY_SIZE_MAX) {
- log_error("File passed too large. Ignoring.");
+ /* When !sealed, set a lower memory limit. We have to read the file,
+ * effectively doubling memory use. */
+ if (st.st_size > ENTRY_SIZE_MAX / (sealed ? 1 : 2)) {
+ log_error("File passed too large (%"PRIu64" bytes). Ignoring.", (uint64_t) st.st_size);
return;
}
@@ -388,7 +404,7 @@ void server_process_native_file(
ssize_t n;
if (fstatvfs(fd, &vfs) < 0) {
- log_error_errno(errno, "Failed to stat file system of passed file, ignoring: %m");
+ log_error_errno(errno, "Failed to stat file system of passed file, not processing it: %m");
return;
}
@@ -398,7 +414,7 @@ void server_process_native_file(
* https://github.com/systemd/systemd/issues/1822
*/
if (vfs.f_flag & ST_MANDLOCK) {
- log_error("Received file descriptor from file system with mandatory locking enabled, refusing.");
+ log_error("Received file descriptor from file system with mandatory locking enabled, not processing it.");
return;
}
@@ -411,13 +427,13 @@ void server_process_native_file(
* and so is SMB. */
r = fd_nonblock(fd, true);
if (r < 0) {
- log_error_errno(r, "Failed to make fd non-blocking, ignoring: %m");
+ log_error_errno(r, "Failed to make fd non-blocking, not processing it: %m");
return;
}
/* The file is not sealed, we can't map the file here, since
* clients might then truncate it and trigger a SIGBUS for
- * us. So let's stupidly read it */
+ * us. So let's stupidly read it. */
p = malloc(st.st_size);
if (!p) {
diff --git a/src/journal/journald-server.c b/src/journal/journald-server.c
index 434325c179..2a960ebb3e 100644
--- a/src/journal/journald-server.c
+++ b/src/journal/journald-server.c
@@ -905,6 +905,7 @@ static void dispatch_message_real(
pid_t object_pid) {
char source_time[sizeof("_SOURCE_REALTIME_TIMESTAMP=") + DECIMAL_STR_MAX(usec_t)];
+ _cleanup_free_ char *cmdline1 = NULL, *cmdline2 = NULL;
uid_t journal_uid;
ClientContext *o;
@@ -921,20 +922,23 @@ static void dispatch_message_real(
IOVEC_ADD_NUMERIC_FIELD(iovec, n, c->uid, uid_t, uid_is_valid, UID_FMT, "_UID");
IOVEC_ADD_NUMERIC_FIELD(iovec, n, c->gid, gid_t, gid_is_valid, GID_FMT, "_GID");
- IOVEC_ADD_STRING_FIELD(iovec, n, c->comm, "_COMM");
- IOVEC_ADD_STRING_FIELD(iovec, n, c->exe, "_EXE");
- IOVEC_ADD_STRING_FIELD(iovec, n, c->cmdline, "_CMDLINE");
- IOVEC_ADD_STRING_FIELD(iovec, n, c->capeff, "_CAP_EFFECTIVE");
+ IOVEC_ADD_STRING_FIELD(iovec, n, c->comm, "_COMM"); /* At most TASK_COMM_LENGTH (16 bytes) */
+ IOVEC_ADD_STRING_FIELD(iovec, n, c->exe, "_EXE"); /* A path, so at most PATH_MAX (4096 bytes) */
- IOVEC_ADD_SIZED_FIELD(iovec, n, c->label, c->label_size, "_SELINUX_CONTEXT");
+ if (c->cmdline)
+ /* At most _SC_ARG_MAX (2MB usually), which is too much to put on stack.
+ * Let's use a heap allocation for this one. */
+ cmdline1 = set_iovec_string_field(iovec, &n, "_CMDLINE=", c->cmdline);
+ IOVEC_ADD_STRING_FIELD(iovec, n, c->capeff, "_CAP_EFFECTIVE"); /* Read from /proc/.../status */
+ IOVEC_ADD_SIZED_FIELD(iovec, n, c->label, c->label_size, "_SELINUX_CONTEXT");
IOVEC_ADD_NUMERIC_FIELD(iovec, n, c->auditid, uint32_t, audit_session_is_valid, "%" PRIu32, "_AUDIT_SESSION");
IOVEC_ADD_NUMERIC_FIELD(iovec, n, c->loginuid, uid_t, uid_is_valid, UID_FMT, "_AUDIT_LOGINUID");
- IOVEC_ADD_STRING_FIELD(iovec, n, c->cgroup, "_SYSTEMD_CGROUP");
+ IOVEC_ADD_STRING_FIELD(iovec, n, c->cgroup, "_SYSTEMD_CGROUP"); /* A path */
IOVEC_ADD_STRING_FIELD(iovec, n, c->session, "_SYSTEMD_SESSION");
IOVEC_ADD_NUMERIC_FIELD(iovec, n, c->owner_uid, uid_t, uid_is_valid, UID_FMT, "_SYSTEMD_OWNER_UID");
- IOVEC_ADD_STRING_FIELD(iovec, n, c->unit, "_SYSTEMD_UNIT");
+ IOVEC_ADD_STRING_FIELD(iovec, n, c->unit, "_SYSTEMD_UNIT"); /* Unit names are bounded by UNIT_NAME_MAX */
IOVEC_ADD_STRING_FIELD(iovec, n, c->user_unit, "_SYSTEMD_USER_UNIT");
IOVEC_ADD_STRING_FIELD(iovec, n, c->slice, "_SYSTEMD_SLICE");
IOVEC_ADD_STRING_FIELD(iovec, n, c->user_slice, "_SYSTEMD_USER_SLICE");
@@ -955,13 +959,14 @@ static void dispatch_message_real(
IOVEC_ADD_NUMERIC_FIELD(iovec, n, o->uid, uid_t, uid_is_valid, UID_FMT, "OBJECT_UID");
IOVEC_ADD_NUMERIC_FIELD(iovec, n, o->gid, gid_t, gid_is_valid, GID_FMT, "OBJECT_GID");
+ /* See above for size limits, only ->cmdline may be large, so use a heap allocation for it. */
IOVEC_ADD_STRING_FIELD(iovec, n, o->comm, "OBJECT_COMM");
IOVEC_ADD_STRING_FIELD(iovec, n, o->exe, "OBJECT_EXE");
- IOVEC_ADD_STRING_FIELD(iovec, n, o->cmdline, "OBJECT_CMDLINE");
- IOVEC_ADD_STRING_FIELD(iovec, n, o->capeff, "OBJECT_CAP_EFFECTIVE");
+ if (o->cmdline)
+ cmdline2 = set_iovec_string_field(iovec, &n, "OBJECT_CMDLINE=", o->cmdline);
+ IOVEC_ADD_STRING_FIELD(iovec, n, o->capeff, "OBJECT_CAP_EFFECTIVE");
IOVEC_ADD_SIZED_FIELD(iovec, n, o->label, o->label_size, "OBJECT_SELINUX_CONTEXT");
-
IOVEC_ADD_NUMERIC_FIELD(iovec, n, o->auditid, uint32_t, audit_session_is_valid, "%" PRIu32, "OBJECT_AUDIT_SESSION");
IOVEC_ADD_NUMERIC_FIELD(iovec, n, o->loginuid, uid_t, uid_is_valid, UID_FMT, "OBJECT_AUDIT_LOGINUID");
@@ -1276,8 +1281,7 @@ int server_process_datagram(sd_event_source *es, int fd, uint32_t revents, void
return log_error_errno(errno, "recvmsg() failed: %m");
}
- CMSG_FOREACH(cmsg, &msghdr) {
-
+ CMSG_FOREACH(cmsg, &msghdr)
if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_CREDENTIALS &&
cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred)))
@@ -1295,7 +1299,6 @@ int server_process_datagram(sd_event_source *es, int fd, uint32_t revents, void
fds = (int*) CMSG_DATA(cmsg);
n_fds = (cmsg->cmsg_len - CMSG_LEN(0)) / sizeof(int);
}
- }
/* And a trailing NUL, just in case */
s->buffer[n] = 0;
diff --git a/src/journal/journald-server.h b/src/journal/journald-server.h
index 6d4847b0cd..3f6b42ddd5 100644
--- a/src/journal/journald-server.h
+++ b/src/journal/journald-server.h
@@ -161,6 +161,8 @@ struct Server {
Hashmap *client_contexts;
Prioq *client_contexts_lru;
+ usec_t last_cache_pid_flush;
+
ClientContext *my_context; /* the context of journald itself */
ClientContext *pid1_context; /* the context of PID 1 */
};
diff --git a/src/journal/journald-wall.h b/src/journal/journald-wall.h
index d081c8254c..b73059af46 100644
--- a/src/journal/journald-wall.h
+++ b/src/journal/journald-wall.h
@@ -1,7 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#pragma once
-
#include "journald-server.h"
void server_forward_wall(Server *s, int priority, const char *identifier, const char *message, const struct ucred *ucred);
diff --git a/src/journal/mmap-cache.c b/src/journal/mmap-cache.c
index 90549f1c9f..0dc453e709 100644
--- a/src/journal/mmap-cache.c
+++ b/src/journal/mmap-cache.c
@@ -132,7 +132,7 @@ static void window_free(Window *w) {
free(w);
}
-_pure_ static inline bool window_matches(Window *w, int prot, uint64_t offset, size_t size) {
+_pure_ static bool window_matches(Window *w, int prot, uint64_t offset, size_t size) {
assert(w);
assert(size > 0);
diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c
index b5ff5b64f3..0f996283cd 100644
--- a/src/journal/sd-journal.c
+++ b/src/journal/sd-journal.c
@@ -36,7 +36,6 @@
#include "process-util.h"
#include "replace-var.h"
#include "stat-util.h"
-#include "stat-util.h"
#include "stdio-util.h"
#include "string-util.h"
#include "strv.h"
diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install
index 39ec8a69c6..75dd5a1b7d 100644
--- a/src/kernel-install/90-loaderentry.install
+++ b/src/kernel-install/90-loaderentry.install
@@ -6,6 +6,7 @@ COMMAND="$1"
KERNEL_VERSION="$2"
BOOT_DIR_ABS="$3"
KERNEL_IMAGE="$4"
+INITRD_OPTIONS_START="5"
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
exit 0
@@ -82,6 +83,24 @@ cp "$KERNEL_IMAGE" "$BOOT_DIR_ABS/linux" &&
exit 1
}
+INITRD_OPTIONS=( "${@:${INITRD_OPTIONS_START}}" )
+
+for initrd in "${INITRD_OPTIONS[@]}"; do
+ if [[ -f "${initrd}" ]]; then
+ initrd_basename="$(basename ${initrd})"
+ cp "${initrd}" "$BOOT_DIR_ABS/${initrd_basename}" &&
+ chown root:root "$BOOT_DIR_ABS/${initrd_basename}" &&
+ chmod 0644 "$BOOT_DIR_ABS/${initrd_basename}" || {
+ echo "Could not copy '${initrd}' to '$BOOT_DIR_ABS/${initrd_basename}'." >&2
+ exit 1
+ }
+ fi
+done
+
+# If no initrd option is supplied, fallback to "initrd" which is
+# the name used by dracut when generating it in its kernel-install hook
+[[ ${#INITRD_OPTIONS[@]} == 0 ]] && INITRD_OPTIONS=( initrd )
+
mkdir -p "${LOADER_ENTRY%/*}" || {
echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
exit 1
@@ -93,8 +112,10 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
echo "machine-id $MACHINE_ID"
echo "options ${BOOT_OPTIONS[*]}"
echo "linux $BOOT_DIR/linux"
- [[ -f $BOOT_DIR_ABS/initrd ]] && \
- echo "initrd $BOOT_DIR/initrd"
+ for initrd in "${INITRD_OPTIONS[@]}"; do
+ [[ -f $BOOT_DIR_ABS/$(basename ${initrd}) ]] && \
+ echo "initrd $BOOT_DIR/$(basename ${initrd})"
+ done
:
} > "$LOADER_ENTRY" || {
echo "Could not create loader entry '$LOADER_ENTRY'." >&2
diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install
index 732d584bbe..b85c7c557e 100644
--- a/src/kernel-install/kernel-install
+++ b/src/kernel-install/kernel-install
@@ -24,7 +24,7 @@ SKIP_REMAINING=77
usage()
{
echo "Usage:"
- echo " $0 add KERNEL-VERSION KERNEL-IMAGE"
+ echo " $0 add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE ...]"
echo " $0 remove KERNEL-VERSION"
}
@@ -65,9 +65,12 @@ done
if [[ "${0##*/}" == 'installkernel' ]]; then
COMMAND='add'
+ # make install doesn't pass any parameter wrt initrd handling
+ INITRD_OPTIONS=()
else
COMMAND="$1"
shift
+ INITRD_OPTIONS=( "${@:3}" )
fi
KERNEL_VERSION="$1"
@@ -123,7 +126,7 @@ case $COMMAND in
for f in "${PLUGINS[@]}"; do
if [[ -x $f ]]; then
- "$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" "$KERNEL_IMAGE"
+ "$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" "$KERNEL_IMAGE" "${INITRD_OPTIONS[@]}"
x=$?
if [[ $x == $SKIP_REMAINING ]]; then
ret=0
diff --git a/src/libsystemd-network/dhcp-identifier.c b/src/libsystemd-network/dhcp-identifier.c
index 07496adaa3..04bf64cce5 100644
--- a/src/libsystemd-network/dhcp-identifier.c
+++ b/src/libsystemd-network/dhcp-identifier.c
@@ -11,6 +11,7 @@
#include "network-internal.h"
#include "siphash24.h"
#include "sparse-endian.h"
+#include "stdio-util.h"
#include "virt.h"
#define SYSTEMD_PEN 43793
@@ -169,10 +170,10 @@ int dhcp_identifier_set_iaid(
if (detect_container() <= 0) {
/* not in a container, udev will be around */
- char ifindex_str[2 + DECIMAL_STR_MAX(int)];
+ char ifindex_str[1 + DECIMAL_STR_MAX(int)];
int r;
- sprintf(ifindex_str, "n%d", ifindex);
+ xsprintf(ifindex_str, "n%d", ifindex);
if (sd_device_new_from_device_id(&device, ifindex_str) >= 0) {
r = sd_device_get_is_initialized(device);
if (r < 0)
@@ -195,7 +196,7 @@ int dhcp_identifier_set_iaid(
if (legacy_unstable_byteorder)
/* for historical reasons (a bug), the bits were swapped and thus
- * the result was endianness dependant. Preserve that behavior. */
+ * the result was endianness dependent. Preserve that behavior. */
id32 = __bswap_32(id32);
else
/* the fixed behavior returns a stable byte order. Since LE is expected
diff --git a/src/libsystemd-network/lldp-neighbor.c b/src/libsystemd-network/lldp-neighbor.c
index 43fc8e03c0..f6db62594d 100644
--- a/src/libsystemd-network/lldp-neighbor.c
+++ b/src/libsystemd-network/lldp-neighbor.c
@@ -691,7 +691,7 @@ _public_ int sd_lldp_neighbor_tlv_is_type(sd_lldp_neighbor *n, uint8_t type) {
return type == k;
}
-_public_ int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[3], uint8_t *subtype) {
+_public_ int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t *subtype) {
const uint8_t *d;
size_t length;
int r;
@@ -720,7 +720,7 @@ _public_ int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[3], u
return 0;
}
-_public_ int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[3], uint8_t subtype) {
+_public_ int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t subtype) {
uint8_t k[3], st;
int r;
diff --git a/src/libsystemd-network/network-internal.c b/src/libsystemd-network/network-internal.c
index b3b134d650..0348e7fa9d 100644
--- a/src/libsystemd-network/network-internal.c
+++ b/src/libsystemd-network/network-internal.c
@@ -52,7 +52,7 @@ int net_get_unique_predictable_data(sd_device *device, uint64_t *result) {
l = strlen(name);
sz = sizeof(sd_id128_t) + l;
- v = alloca(sz);
+ v = newa(uint8_t, sz);
/* fetch some persistent data unique to this machine */
r = sd_id128_get_machine((sd_id128_t*) v);
diff --git a/src/libsystemd-network/radv-internal.h b/src/libsystemd-network/radv-internal.h
index cd44352307..66f49ed44e 100644
--- a/src/libsystemd-network/radv-internal.h
+++ b/src/libsystemd-network/radv-internal.h
@@ -63,19 +63,34 @@ struct sd_radv {
struct sd_radv_opt_dns *dnssl;
};
+#define radv_prefix_opt__contents { \
+ uint8_t type; \
+ uint8_t length; \
+ uint8_t prefixlen; \
+ uint8_t flags; \
+ be32_t valid_lifetime; \
+ be32_t preferred_lifetime; \
+ uint32_t reserved; \
+ struct in6_addr in6_addr; \
+}
+
+struct radv_prefix_opt radv_prefix_opt__contents;
+
+/* We need the opt substructure to be packed, because we use it in send(). But
+ * if we use _packed_, this means that the structure cannot be used directly in
+ * normal code in general, because the fields might not be properly aligned.
+ * But in this particular case, the structure is defined in a way that gives
+ * proper alignment, even without the explicit _packed_ attribute. To appease
+ * the compiler we use the "unpacked" structure, but we also verify that
+ * structure contains no holes, so offsets are the same when _packed_ is used.
+ */
+struct radv_prefix_opt__packed radv_prefix_opt__contents _packed_;
+assert_cc(sizeof(struct radv_prefix_opt) == sizeof(struct radv_prefix_opt__packed));
+
struct sd_radv_prefix {
unsigned n_ref;
- struct {
- uint8_t type;
- uint8_t length;
- uint8_t prefixlen;
- uint8_t flags;
- be32_t valid_lifetime;
- be32_t preferred_lifetime;
- uint32_t reserved;
- struct in6_addr in6_addr;
- } _packed_ opt;
+ struct radv_prefix_opt opt;
LIST_FIELDS(struct sd_radv_prefix, prefix);
diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c
index 2d7ffd22ca..35fc88ef91 100644
--- a/src/libsystemd-network/sd-dhcp-client.c
+++ b/src/libsystemd-network/sd-dhcp-client.c
@@ -118,19 +118,19 @@ static const uint8_t default_req_opts[] = {
*/
/* NOTE: using PRL options that Windows 10 RFC7844 implementation uses */
static const uint8_t default_req_opts_anonymize[] = {
- SD_DHCP_OPTION_SUBNET_MASK, /* 1 */
- SD_DHCP_OPTION_ROUTER, /* 3 */
- SD_DHCP_OPTION_DOMAIN_NAME_SERVER, /* 6 */
- SD_DHCP_OPTION_DOMAIN_NAME, /* 15 */
- SD_DHCP_OPTION_ROUTER_DISCOVER, /* 31 */
- SD_DHCP_OPTION_STATIC_ROUTE, /* 33 */
- SD_DHCP_OPTION_VENDOR_SPECIFIC, /* 43 */
- SD_DHCP_OPTION_NETBIOS_NAMESERVER, /* 44 */
- SD_DHCP_OPTION_NETBIOS_NODETYPE, /* 46 */
- SD_DHCP_OPTION_NETBIOS_SCOPE, /* 47 */
- SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE, /* 121 */
- SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE, /* 249 */
- SD_DHCP_OPTION_PRIVATE_PROXY_AUTODISCOVERY, /* 252 */
+ SD_DHCP_OPTION_SUBNET_MASK, /* 1 */
+ SD_DHCP_OPTION_ROUTER, /* 3 */
+ SD_DHCP_OPTION_DOMAIN_NAME_SERVER, /* 6 */
+ SD_DHCP_OPTION_DOMAIN_NAME, /* 15 */
+ SD_DHCP_OPTION_ROUTER_DISCOVER, /* 31 */
+ SD_DHCP_OPTION_STATIC_ROUTE, /* 33 */
+ SD_DHCP_OPTION_VENDOR_SPECIFIC, /* 43 */
+ SD_DHCP_OPTION_NETBIOS_NAMESERVER, /* 44 */
+ SD_DHCP_OPTION_NETBIOS_NODETYPE, /* 46 */
+ SD_DHCP_OPTION_NETBIOS_SCOPE, /* 47 */
+ SD_DHCP_OPTION_CLASSLESS_STATIC_ROUTE, /* 121 */
+ SD_DHCP_OPTION_PRIVATE_CLASSLESS_STATIC_ROUTE, /* 249 */
+ SD_DHCP_OPTION_PRIVATE_PROXY_AUTODISCOVERY, /* 252 */
};
static int client_receive_message_raw(
@@ -353,9 +353,9 @@ static int dhcp_client_set_iaid_duid_internal(
size_t len;
assert_return(client, -EINVAL);
- assert_return(duid_len == 0 || duid != NULL, -EINVAL);
+ assert_return(duid_len == 0 || duid, -EINVAL);
- if (duid != NULL) {
+ if (duid) {
r = dhcp_validate_duid_len(duid_type, duid_len, true);
if (r < 0)
return r;
@@ -377,7 +377,7 @@ static int dhcp_client_set_iaid_duid_internal(
}
}
- if (duid != NULL) {
+ if (duid) {
client->client_id.ns.duid.type = htobe16(duid_type);
memcpy(&client->client_id.ns.duid.raw.data, duid, duid_len);
len = sizeof(client->client_id.ns.duid.type) + duid_len;
@@ -1795,7 +1795,7 @@ static int client_receive_message_raw(
} else if ((size_t)len < sizeof(DHCPPacket))
return 0;
- CMSG_FOREACH(cmsg, &msg) {
+ CMSG_FOREACH(cmsg, &msg)
if (cmsg->cmsg_level == SOL_PACKET &&
cmsg->cmsg_type == PACKET_AUXDATA &&
cmsg->cmsg_len == CMSG_LEN(sizeof(struct tpacket_auxdata))) {
@@ -1804,7 +1804,6 @@ static int client_receive_message_raw(
checksum = !(aux->tp_status & TP_STATUS_CSUMNOTREADY);
break;
}
- }
r = dhcp_packet_verify_headers(packet, len, checksum, client->port);
if (r < 0)
diff --git a/src/libsystemd-network/sd-ndisc.c b/src/libsystemd-network/sd-ndisc.c
index 79b2ea8bf2..32c20b1e4a 100644
--- a/src/libsystemd-network/sd-ndisc.c
+++ b/src/libsystemd-network/sd-ndisc.c
@@ -34,7 +34,6 @@ static void ndisc_callback(sd_ndisc *ndisc, sd_ndisc_event event, sd_ndisc_route
assert(ndisc);
assert(event >= 0 && event < _SD_NDISC_EVENT_MAX);
-
if (!ndisc->callback) {
log_ndisc("Received '%s' event.", ndisc_event_to_string(event));
return;
diff --git a/src/libsystemd-network/test-lldp.c b/src/libsystemd-network/test-lldp.c
index cb4545d901..b6c896f0a1 100644
--- a/src/libsystemd-network/test-lldp.c
+++ b/src/libsystemd-network/test-lldp.c
@@ -192,6 +192,8 @@ static void test_receive_oui_packet(sd_event *e) {
0x01, 0x02,
0xfe, 0x09, 0x00, 0x80, 0xc2, 0x07, /* Link aggregation: status 1, ID 0x00140012 */
0x01, 0x00, 0x14, 0x00, 0x12,
+ 0xfe, 0x07, 0x00, 0x12, 0x0f, 0x02, /* 802.3 Power via MDI: PSE, MDI enabled */
+ 0x07, 0x01, 0x00,
0x00, 0x00 /* End of LLDPDU */
};
@@ -220,6 +222,8 @@ static void test_receive_oui_packet(sd_event *e) {
assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_1, SD_LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION) > 0);
assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
+ assert_se(sd_lldp_neighbor_tlv_is_oui(neighbors[0], SD_LLDP_OUI_802_3, SD_LLDP_OUI_802_3_SUBTYPE_POWER_VIA_MDI) > 0);
+ assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) > 0);
assert_se(sd_lldp_neighbor_tlv_is_type(neighbors[0], SD_LLDP_TYPE_END) > 0);
assert_se(sd_lldp_neighbor_tlv_next(neighbors[0]) == 0);
diff --git a/src/libsystemd/libsystemd.pc.in b/src/libsystemd/libsystemd.pc.in
index c861905b67..a010dea2e9 100644
--- a/src/libsystemd/libsystemd.pc.in
+++ b/src/libsystemd/libsystemd.pc.in
@@ -14,7 +14,7 @@ includedir=@includedir@
Name: systemd
Description: systemd Library
-URL: @PACKAGE_URL@
-Version: @PACKAGE_VERSION@
+URL: @PROJECT_URL@
+Version: @PROJECT_VERSION@
Libs: -L${libdir} -lsystemd
Cflags: -I${includedir}
diff --git a/src/libsystemd/libsystemd.sym b/src/libsystemd/libsystemd.sym
index 96e6347795..a6748ceb20 100644
--- a/src/libsystemd/libsystemd.sym
+++ b/src/libsystemd/libsystemd.sym
@@ -671,3 +671,8 @@ global:
sd_event_source_get_floating;
sd_event_source_set_floating;
} LIBSYSTEMD_239;
+
+LIBSYSTEMD_241 {
+global:
+ sd_bus_close_unref;
+} LIBSYSTEMD_240;
diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build
index 05d4ea0e7f..67add387e6 100644
--- a/src/libsystemd/meson.build
+++ b/src/libsystemd/meson.build
@@ -109,9 +109,8 @@ libsystemd_static = static_library(
libsystemd_sym = 'src/libsystemd/libsystemd.sym'
-libsystemd_pc = configure_file(
+configure_file(
input : 'libsystemd.pc.in',
output : 'libsystemd.pc',
- configuration : substs)
-install_data(libsystemd_pc,
- install_dir : pkgconfiglibdir)
+ configuration : substs,
+ install_dir : pkgconfiglibdir == 'no' ? '' : pkgconfiglibdir)
diff --git a/src/libsystemd/sd-bus/bus-dump.h b/src/libsystemd/sd-bus/bus-dump.h
index 373a86dd4f..a1b67c6b14 100644
--- a/src/libsystemd/sd-bus/bus-dump.h
+++ b/src/libsystemd/sd-bus/bus-dump.h
@@ -7,8 +7,8 @@
#include "sd-bus.h"
enum {
- BUS_MESSAGE_DUMP_WITH_HEADER = 1,
- BUS_MESSAGE_DUMP_SUBTREE_ONLY = 2,
+ BUS_MESSAGE_DUMP_WITH_HEADER = 1 << 0,
+ BUS_MESSAGE_DUMP_SUBTREE_ONLY = 1 << 1,
};
int bus_message_dump(sd_bus_message *m, FILE *f, unsigned flags);
diff --git a/src/libsystemd/sd-bus/bus-match.c b/src/libsystemd/sd-bus/bus-match.c
index ad135406f6..9642de10c3 100644
--- a/src/libsystemd/sd-bus/bus-match.c
+++ b/src/libsystemd/sd-bus/bus-match.c
@@ -49,11 +49,11 @@
* ` BUS_MATCH_LEAF: E
*/
-static inline bool BUS_MATCH_IS_COMPARE(enum bus_match_node_type t) {
+static bool BUS_MATCH_IS_COMPARE(enum bus_match_node_type t) {
return t >= BUS_MATCH_SENDER && t <= BUS_MATCH_ARG_HAS_LAST;
}
-static inline bool BUS_MATCH_CAN_HASH(enum bus_match_node_type t) {
+static bool BUS_MATCH_CAN_HASH(enum bus_match_node_type t) {
return (t >= BUS_MATCH_MESSAGE_TYPE && t <= BUS_MATCH_PATH) ||
(t >= BUS_MATCH_ARG && t <= BUS_MATCH_ARG_LAST) ||
(t >= BUS_MATCH_ARG_HAS && t <= BUS_MATCH_ARG_HAS_LAST);
diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
index d0538104ae..58329f3fe7 100644
--- a/src/libsystemd/sd-bus/bus-objects.c
+++ b/src/libsystemd/sd-bus/bus-objects.c
@@ -1149,7 +1149,7 @@ static int object_manager_serialize_path_and_fallbacks(
return 0;
/* Second, add fallback vtables registered for any of the prefixes */
- prefix = alloca(strlen(path) + 1);
+ prefix = newa(char, strlen(path) + 1);
OBJECT_PATH_FOREACH_PREFIX(prefix, path) {
r = object_manager_serialize_path(bus, reply, prefix, path, true, error);
if (r < 0)
@@ -1500,7 +1500,7 @@ static int bus_find_parent_object_manager(sd_bus *bus, struct node **out, const
if (!n) {
char *prefix;
- prefix = alloca(strlen(path) + 1);
+ prefix = newa(char, strlen(path) + 1);
OBJECT_PATH_FOREACH_PREFIX(prefix, path) {
n = hashmap_get(bus->nodes, prefix);
if (n)
@@ -2114,7 +2114,7 @@ _public_ int sd_bus_emit_properties_changed_strv(
if (bus->nodes_modified)
continue;
- prefix = alloca(strlen(path) + 1);
+ prefix = newa(char, strlen(path) + 1);
OBJECT_PATH_FOREACH_PREFIX(prefix, path) {
r = emit_properties_changed_on_interface(bus, prefix, path, interface, true, &found_interface, names);
if (r != 0)
@@ -2291,7 +2291,7 @@ static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *p
if (bus->nodes_modified)
return 0;
- prefix = alloca(strlen(path) + 1);
+ prefix = newa(char, strlen(path) + 1);
OBJECT_PATH_FOREACH_PREFIX(prefix, path) {
r = object_added_append_all_prefix(bus, m, s, prefix, path, true);
if (r < 0)
@@ -2462,7 +2462,7 @@ static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char
if (bus->nodes_modified)
return 0;
- prefix = alloca(strlen(path) + 1);
+ prefix = newa(char, strlen(path) + 1);
OBJECT_PATH_FOREACH_PREFIX(prefix, path) {
r = object_removed_append_all_prefix(bus, m, s, prefix, path, true);
if (r < 0)
@@ -2626,7 +2626,7 @@ static int interfaces_added_append_one(
if (bus->nodes_modified)
return 0;
- prefix = alloca(strlen(path) + 1);
+ prefix = newa(char, strlen(path) + 1);
OBJECT_PATH_FOREACH_PREFIX(prefix, path) {
r = interfaces_added_append_one_prefix(bus, m, prefix, path, interface, true);
if (r != 0)
diff --git a/src/libsystemd/sd-bus/bus-protocol.h b/src/libsystemd/sd-bus/bus-protocol.h
index a5f4724aa9..d01fd8e6a3 100644
--- a/src/libsystemd/sd-bus/bus-protocol.h
+++ b/src/libsystemd/sd-bus/bus-protocol.h
@@ -54,9 +54,9 @@ enum {
/* Flags */
enum {
- BUS_MESSAGE_NO_REPLY_EXPECTED = 1,
- BUS_MESSAGE_NO_AUTO_START = 2,
- BUS_MESSAGE_ALLOW_INTERACTIVE_AUTHORIZATION = 4,
+ BUS_MESSAGE_NO_REPLY_EXPECTED = 1 << 0,
+ BUS_MESSAGE_NO_AUTO_START = 1 << 1,
+ BUS_MESSAGE_ALLOW_INTERACTIVE_AUTHORIZATION = 1 << 2,
};
/* Header fields */
@@ -78,9 +78,9 @@ enum {
/* RequestName parameters */
enum {
- BUS_NAME_ALLOW_REPLACEMENT = 1,
- BUS_NAME_REPLACE_EXISTING = 2,
- BUS_NAME_DO_NOT_QUEUE = 4
+ BUS_NAME_ALLOW_REPLACEMENT = 1 << 0,
+ BUS_NAME_REPLACE_EXISTING = 1 << 1,
+ BUS_NAME_DO_NOT_QUEUE = 1 << 2,
};
/* RequestName returns */
diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c
index ed185131b8..441b4a816f 100644
--- a/src/libsystemd/sd-bus/bus-socket.c
+++ b/src/libsystemd/sd-bus/bus-socket.c
@@ -981,7 +981,7 @@ int bus_socket_write_message(sd_bus *bus, sd_bus_message *m, size_t *idx) {
return r;
n = m->n_iovec * sizeof(struct iovec);
- iov = alloca(n);
+ iov = newa(struct iovec, n);
memcpy_safe(iov, m->iovec, n);
j = 0;
@@ -1072,7 +1072,7 @@ static int bus_socket_read_message_need(sd_bus *bus, size_t *need) {
}
static int bus_socket_make_message(sd_bus *bus, size_t size) {
- sd_bus_message *t;
+ sd_bus_message *t = NULL;
void *b;
int r;
@@ -1097,7 +1097,9 @@ static int bus_socket_make_message(sd_bus *bus, size_t size) {
bus->fds, bus->n_fds,
NULL,
&t);
- if (r < 0) {
+ if (r == -EBADMSG)
+ log_debug_errno(r, "Received invalid message from connection %s, dropping.", strna(bus->description));
+ else if (r < 0) {
free(b);
return r;
}
@@ -1108,7 +1110,8 @@ static int bus_socket_make_message(sd_bus *bus, size_t size) {
bus->fds = NULL;
bus->n_fds = 0;
- bus->rqueue[bus->rqueue_size++] = t;
+ if (t)
+ bus->rqueue[bus->rqueue_size++] = t;
return 1;
}
diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
index 3b00bc8157..1ff858f32d 100644
--- a/src/libsystemd/sd-bus/sd-bus.c
+++ b/src/libsystemd/sd-bus/sd-bus.c
@@ -1556,17 +1556,24 @@ _public_ void sd_bus_close(sd_bus *bus) {
bus_close_inotify_fd(bus);
}
+_public_ sd_bus *sd_bus_close_unref(sd_bus *bus) {
+ if (!bus)
+ return NULL;
+
+ sd_bus_close(bus);
+
+ return sd_bus_unref(bus);
+}
+
_public_ sd_bus* sd_bus_flush_close_unref(sd_bus *bus) {
if (!bus)
return NULL;
/* Have to do this before flush() to prevent hang */
bus_kill_exec(bus);
-
sd_bus_flush(bus);
- sd_bus_close(bus);
- return sd_bus_unref(bus);
+ return sd_bus_close_unref(bus);
}
void bus_enter_closing(sd_bus *bus) {
diff --git a/src/libsystemd/sd-daemon/sd-daemon.c b/src/libsystemd/sd-daemon/sd-daemon.c
index 218210f234..9e8f0a73f5 100644
--- a/src/libsystemd/sd-daemon/sd-daemon.c
+++ b/src/libsystemd/sd-daemon/sd-daemon.c
@@ -604,7 +604,13 @@ _public_ int sd_booted(void) {
* created. This takes place in mount-setup.c, so is
* guaranteed to happen very early during boot. */
- return laccess("/run/systemd/system/", F_OK) >= 0;
+ if (laccess("/run/systemd/system/", F_OK) >= 0)
+ return true;
+
+ if (errno == ENOENT)
+ return false;
+
+ return -errno;
}
_public_ int sd_watchdog_enabled(int unset_environment, uint64_t *usec) {
diff --git a/src/libsystemd/sd-device/device-monitor.c b/src/libsystemd/sd-device/device-monitor.c
index b86932663e..27d0af5918 100644
--- a/src/libsystemd/sd-device/device-monitor.c
+++ b/src/libsystemd/sd-device/device-monitor.c
@@ -93,14 +93,8 @@ _public_ int sd_device_monitor_set_receive_buffer_size(sd_device_monitor *m, siz
assert_return(m, -EINVAL);
assert_return((size_t) n == size, -EINVAL);
- if (m->bound)
- return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
- "sd-device-monitor: Socket fd is already bound. "
- "It may be dangerous to change buffer size. "
- "Refusing to change buffer size.");
-
- if (setsockopt_int(m->sock, SOL_SOCKET, SO_RCVBUF, n) < 0) {
- r = setsockopt_int(m->sock, SOL_SOCKET, SO_RCVBUFFORCE, n);
+ if (setsockopt_int(m->sock, SOL_SOCKET, SO_RCVBUFFORCE, n) < 0) {
+ r = setsockopt_int(m->sock, SOL_SOCKET, SO_RCVBUF, n);
if (r < 0)
return r;
}
@@ -754,7 +748,7 @@ _public_ int sd_device_monitor_filter_remove(sd_device_monitor *m) {
m->subsystem_filter = hashmap_free_free_free(m->subsystem_filter);
m->tag_filter = set_free_free(m->tag_filter);
- if (setsockopt(m->sock, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)) < 0)
+ if (setsockopt(m->sock, SOL_SOCKET, SO_DETACH_FILTER, &filter, sizeof(filter)) < 0)
return -errno;
m->filter_uptodate = true;
diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c
index 01a5aa3d3f..76267a1e74 100644
--- a/src/libsystemd/sd-device/device-private.c
+++ b/src/libsystemd/sd-device/device-private.c
@@ -326,15 +326,6 @@ static int device_append(sd_device *device, char *key, const char **_major, cons
action = device_action_from_string(value);
if (action == _DEVICE_ACTION_INVALID)
return -EINVAL;
- /* FIXME: remove once we no longer flush previuos state for each action */
- if (action == DEVICE_ACTION_BIND || action == DEVICE_ACTION_UNBIND) {
- static bool warned;
- if (!warned) {
- log_device_debug(device, "sd-device: ignoring actions 'bind' and 'unbind'");
- warned = true;
- }
- return -EINVAL;
- }
} else if (streq(key, "SEQNUM")) {
r = safe_atou64(value, &seqnum);
if (r < 0)
@@ -711,13 +702,24 @@ int device_new_from_stat_rdev(sd_device **ret, const struct stat *st) {
int device_copy_properties(sd_device *device_dst, sd_device *device_src) {
const char *property, *value;
+ Iterator i;
int r;
assert(device_dst);
assert(device_src);
- FOREACH_DEVICE_PROPERTY(device_src, property, value) {
- r = device_add_property(device_dst, property, value);
+ r = device_properties_prepare(device_src);
+ if (r < 0)
+ return r;
+
+ ORDERED_HASHMAP_FOREACH_KEY(value, property, device_src->properties_db, i) {
+ r = device_add_property_aux(device_dst, property, value, true);
+ if (r < 0)
+ return r;
+ }
+
+ ORDERED_HASHMAP_FOREACH_KEY(value, property, device_src->properties, i) {
+ r = device_add_property_aux(device_dst, property, value, false);
if (r < 0)
return r;
}
diff --git a/src/libsystemd/sd-device/device-private.h b/src/libsystemd/sd-device/device-private.h
index 56558b38c6..062bfd651c 100644
--- a/src/libsystemd/sd-device/device-private.h
+++ b/src/libsystemd/sd-device/device-private.h
@@ -37,6 +37,7 @@ uint64_t device_get_properties_generation(sd_device *device);
uint64_t device_get_tags_generation(sd_device *device);
uint64_t device_get_devlinks_generation(sd_device *device);
+int device_properties_prepare(sd_device *device);
int device_get_properties_nulstr(sd_device *device, const uint8_t **nulstr, size_t *len);
int device_get_properties_strv(sd_device *device, char ***strv);
diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c
index db58615df5..2a69f2e94b 100644
--- a/src/libsystemd/sd-device/sd-device.c
+++ b/src/libsystemd/sd-device/sd-device.c
@@ -29,7 +29,7 @@
#include "util.h"
int device_new_aux(sd_device **ret) {
- sd_device *device = NULL;
+ sd_device *device;
assert(ret);
@@ -205,9 +205,7 @@ int device_set_syspath(sd_device *device, const char *_syspath, bool verify) {
return r;
free_and_replace(device->syspath, syspath);
-
device->devpath = devpath;
-
return 0;
}
@@ -227,7 +225,6 @@ _public_ int sd_device_new_from_syspath(sd_device **ret, const char *syspath) {
return r;
*ret = TAKE_PTR(device);
-
return 0;
}
@@ -610,8 +607,8 @@ _public_ int sd_device_new_from_device_id(sd_device **ret, const char *id) {
return sd_device_new_from_devnum(ret, id[0], devt);
}
- case 'n':
- {
+
+ case 'n': {
_cleanup_(sd_device_unrefp) sd_device *device = NULL;
_cleanup_close_ int sk = -1;
struct ifreq ifr = {};
@@ -642,11 +639,10 @@ _public_ int sd_device_new_from_device_id(sd_device **ret, const char *id) {
return -ENODEV;
*ret = TAKE_PTR(device);
-
return 0;
}
- case '+':
- {
+
+ case '+': {
char subsys[PATH_MAX];
char *sysname;
@@ -660,6 +656,7 @@ _public_ int sd_device_new_from_device_id(sd_device **ret, const char *id) {
return sd_device_new_from_subsystem_sysname(ret, subsys, sysname);
}
+
default:
return -EINVAL;
}
@@ -727,7 +724,6 @@ _public_ int sd_device_get_parent(sd_device *child, sd_device **ret) {
return -ENOENT;
*ret = child->parent;
-
return 0;
}
@@ -746,11 +742,8 @@ int device_set_subsystem(sd_device *device, const char *_subsystem) {
if (r < 0)
return r;
- free_and_replace(device->subsystem, subsystem);
-
device->subsystem_set = true;
-
- return 0;
+ return free_and_replace(device->subsystem, subsystem);
}
static int device_set_drivers_subsystem(sd_device *device, const char *_subsystem) {
@@ -769,9 +762,7 @@ static int device_set_drivers_subsystem(sd_device *device, const char *_subsyste
if (r < 0)
return r;
- free_and_replace(device->driver_subsystem, subsystem);
-
- return 0;
+ return free_and_replace(device->driver_subsystem, subsystem);
}
_public_ int sd_device_get_subsystem(sd_device *device, const char **ret) {
@@ -836,7 +827,6 @@ _public_ int sd_device_get_subsystem(sd_device *device, const char **ret) {
return -ENOENT;
*ret = device->subsystem;
-
return 0;
}
@@ -886,7 +876,6 @@ _public_ int sd_device_get_parent_with_subsystem_devtype(sd_device *child, const
return r;
*ret = parent;
-
return 0;
}
@@ -923,11 +912,8 @@ int device_set_driver(sd_device *device, const char *_driver) {
if (r < 0)
return r;
- free_and_replace(device->driver, driver);
-
device->driver_set = true;
-
- return 0;
+ return free_and_replace(device->driver, driver);
}
_public_ int sd_device_get_driver(sd_device *device, const char **ret) {
@@ -960,7 +946,6 @@ _public_ int sd_device_get_driver(sd_device *device, const char **ret) {
return -ENOENT;
*ret = device->driver;
-
return 0;
}
@@ -972,7 +957,6 @@ _public_ int sd_device_get_devpath(sd_device *device, const char **devpath) {
assert(device->devpath[0] == '/');
*devpath = device->devpath;
-
return 0;
}
@@ -992,7 +976,6 @@ _public_ int sd_device_get_devname(sd_device *device, const char **devname) {
assert(path_startswith(device->devname, "/dev/"));
*devname = device->devname;
-
return 0;
}
@@ -1002,6 +985,9 @@ static int device_set_sysname(sd_device *device) {
const char *pos;
size_t len = 0;
+ if (!device->devpath)
+ return -EINVAL;
+
pos = strrchr(device->devpath, '/');
if (!pos)
return -EINVAL;
@@ -1030,13 +1016,9 @@ static int device_set_sysname(sd_device *device) {
if (len == 0)
sysnum = NULL;
- free_and_replace(device->sysname, sysname);
-
- device->sysnum = sysnum;
-
device->sysname_set = true;
-
- return 0;
+ device->sysnum = sysnum;
+ return free_and_replace(device->sysname, sysname);
}
_public_ int sd_device_get_sysname(sd_device *device, const char **ret) {
@@ -1054,7 +1036,6 @@ _public_ int sd_device_get_sysname(sd_device *device, const char **ret) {
assert_return(device->sysname, -ENOENT);
*ret = device->sysname;
-
return 0;
}
@@ -1074,7 +1055,6 @@ _public_ int sd_device_get_sysnum(sd_device *device, const char **ret) {
return -ENOENT;
*ret = device->sysnum;
-
return 0;
}
@@ -1283,7 +1263,6 @@ int device_get_id_filename(sd_device *device, const char **ret) {
}
*ret = device->id_filename;
-
return 0;
}
@@ -1415,7 +1394,6 @@ _public_ int sd_device_get_usec_since_initialized(sd_device *device, uint64_t *u
return -EIO;
*usec = now_ts - device->usec_initialized;
-
return 0;
}
@@ -1475,7 +1453,7 @@ _public_ const char *sd_device_get_devlink_next(sd_device *device) {
return v;
}
-static int device_properties_prepare(sd_device *device) {
+int device_properties_prepare(sd_device *device) {
int r;
assert(device);
@@ -1558,7 +1536,6 @@ _public_ const char *sd_device_get_property_first(sd_device *device, const char
if (_value)
*_value = value;
-
return key;
}
@@ -1580,7 +1557,6 @@ _public_ const char *sd_device_get_property_next(sd_device *device, const char *
if (_value)
*_value = value;
-
return key;
}
@@ -1691,7 +1667,6 @@ _public_ int sd_device_get_property_value(sd_device *device, const char *key, co
if (_value)
*_value = value;
-
return 0;
}
@@ -1718,8 +1693,7 @@ static int device_add_sysattr_value(sd_device *device, const char *_key, char *v
r = hashmap_put(device->sysattr_values, key, value);
if (r < 0)
return r;
-
- key = NULL;
+ TAKE_PTR(key);
return 0;
}
@@ -1736,7 +1710,6 @@ static int device_get_sysattr_value(sd_device *device, const char *_key, const c
if (_value)
*_value = value;
-
return 0;
}
@@ -1820,14 +1793,11 @@ _public_ int sd_device_get_sysattr_value(sd_device *device, const char *sysattr,
static void device_remove_sysattr_value(sd_device *device, const char *_key) {
_cleanup_free_ char *key = NULL;
- _cleanup_free_ char *value = NULL;
assert(device);
assert(_key);
- value = hashmap_remove2(device->sysattr_values, _key, (void **) &key);
-
- return;
+ free(hashmap_remove2(device->sysattr_values, _key, (void **) &key));
}
/* set the attribute and save it in the cache. If a NULL value is passed the
@@ -1843,7 +1813,6 @@ _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr,
if (!_value) {
device_remove_sysattr_value(device, sysattr);
-
return 0;
}
@@ -1874,23 +1843,22 @@ _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr,
if (r == -EISDIR)
return r;
- free(value);
- value = strdup("");
- if (!value)
- return -ENOMEM;
+ r = free_and_strdup(&value, "");
+ if (r < 0)
+ return r;
r = device_add_sysattr_value(device, sysattr, value);
if (r < 0)
return r;
+ TAKE_PTR(value);
- value = NULL;
return -ENXIO;
}
r = device_add_sysattr_value(device, sysattr, value);
if (r < 0)
return r;
+ TAKE_PTR(value);
- value = NULL;
return 0;
}
diff --git a/src/libsystemd/sd-device/test-sd-device-monitor.c b/src/libsystemd/sd-device/test-sd-device-monitor.c
index 9e5ca11fe9..aa1edaaf3c 100644
--- a/src/libsystemd/sd-device/test-sd-device-monitor.c
+++ b/src/libsystemd/sd-device/test-sd-device-monitor.c
@@ -21,14 +21,46 @@ static int monitor_handler(sd_device_monitor *m, sd_device *d, void *userdata) {
assert_se(sd_device_get_syspath(d, &s) >= 0);
assert_se(streq(s, syspath));
- return sd_event_exit(sd_device_monitor_get_event(m), 0);
+ return sd_event_exit(sd_device_monitor_get_event(m), 100);
}
-static int test_send_receive_one(sd_device *device, bool subsystem_filter, bool tag_filter, bool use_bpf) {
+static int test_receive_device_fail(void) {
_cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor_server = NULL, *monitor_client = NULL;
- const char *syspath, *subsystem, *tag, *devtype = NULL;
+ _cleanup_(sd_device_unrefp) sd_device *loopback = NULL;
+ const char *syspath;
int r;
+ log_info("/* %s */", __func__);
+
+ /* Try to send device with invalid action and without seqnum. */
+ assert_se(sd_device_new_from_syspath(&loopback, "/sys/class/net/lo") >= 0);
+ assert_se(device_add_property(loopback, "ACTION", "hoge") >= 0);
+
+ assert_se(sd_device_get_syspath(loopback, &syspath) >= 0);
+
+ assert_se(device_monitor_new_full(&monitor_server, MONITOR_GROUP_NONE, -1) >= 0);
+ assert_se(sd_device_monitor_start(monitor_server, NULL, NULL) >= 0);
+ assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_server), "sender") >= 0);
+
+ assert_se(device_monitor_new_full(&monitor_client, MONITOR_GROUP_NONE, -1) >= 0);
+ assert_se(device_monitor_allow_unicast_sender(monitor_client, monitor_server) >= 0);
+ assert_se(sd_device_monitor_start(monitor_client, monitor_handler, (void *) syspath) >= 0);
+ assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_client), "receiver") >= 0);
+
+ /* Do not use assert_se() here. */
+ r = device_monitor_send_device(monitor_server, monitor_client, loopback);
+ if (r < 0)
+ return log_error_errno(r, "Failed to send loopback device: %m");
+
+ assert_se(sd_event_run(sd_device_monitor_get_event(monitor_client), 0) >= 0);
+
+ return 0;
+}
+
+static void test_send_receive_one(sd_device *device, bool subsystem_filter, bool tag_filter, bool use_bpf) {
+ _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor_server = NULL, *monitor_client = NULL;
+ const char *syspath, *subsystem, *tag, *devtype = NULL;
+
log_device_info(device, "/* %s(subsystem_filter=%s, tag_filter=%s, use_bpf=%s) */", __func__,
true_false(subsystem_filter), true_false(tag_filter), true_false(use_bpf));
@@ -56,14 +88,8 @@ static int test_send_receive_one(sd_device *device, bool subsystem_filter, bool
if ((subsystem_filter || tag_filter) && use_bpf)
assert_se(sd_device_monitor_filter_update(monitor_client) >= 0);
- /* Do not use assert_se() here. */
- r = device_monitor_send_device(monitor_server, monitor_client, device);
- if (r < 0)
- return log_error_errno(r, "Failed to send loopback device: %m");
-
- assert_se(sd_event_loop(sd_device_monitor_get_event(monitor_client)) == 0);
-
- return 0;
+ assert_se(device_monitor_send_device(monitor_server, monitor_client, device) >= 0);
+ assert_se(sd_event_loop(sd_device_monitor_get_event(monitor_client)) == 100);
}
static void test_subsystem_filter(sd_device *device) {
@@ -99,7 +125,45 @@ static void test_subsystem_filter(sd_device *device) {
log_info("Sending device subsystem:%s syspath:%s", subsystem, syspath);
assert_se(device_monitor_send_device(monitor_server, monitor_client, device) >= 0);
- assert_se(sd_event_loop(sd_device_monitor_get_event(monitor_client)) == 0);
+ assert_se(sd_event_loop(sd_device_monitor_get_event(monitor_client)) == 100);
+}
+
+static void test_sd_device_monitor_filter_remove(sd_device *device) {
+ _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor_server = NULL, *monitor_client = NULL;
+ const char *syspath;
+
+ log_device_info(device, "/* %s */", __func__);
+
+ assert_se(sd_device_get_syspath(device, &syspath) >= 0);
+
+ assert_se(device_monitor_new_full(&monitor_server, MONITOR_GROUP_NONE, -1) >= 0);
+ assert_se(sd_device_monitor_start(monitor_server, NULL, NULL) >= 0);
+ assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_server), "sender") >= 0);
+
+ assert_se(device_monitor_new_full(&monitor_client, MONITOR_GROUP_NONE, -1) >= 0);
+ assert_se(device_monitor_allow_unicast_sender(monitor_client, monitor_server) >= 0);
+ assert_se(sd_device_monitor_start(monitor_client, monitor_handler, (void *) syspath) >= 0);
+ assert_se(sd_event_source_set_description(sd_device_monitor_get_event_source(monitor_client), "receiver") >= 0);
+
+ assert_se(sd_device_monitor_filter_add_match_subsystem_devtype(monitor_client, "hoge", NULL) >= 0);
+ assert_se(sd_device_monitor_filter_update(monitor_client) >= 0);
+
+ assert_se(device_monitor_send_device(monitor_server, monitor_client, device) >= 0);
+ assert_se(sd_event_run(sd_device_monitor_get_event(monitor_client), 0) >= 0);
+
+ assert_se(sd_device_monitor_filter_remove(monitor_client) >= 0);
+
+ assert_se(device_monitor_send_device(monitor_server, monitor_client, device) >= 0);
+ assert_se(sd_event_loop(sd_device_monitor_get_event(monitor_client)) == 100);
+}
+
+static void test_device_copy_properties(sd_device *device) {
+ _cleanup_(sd_device_unrefp) sd_device *copy = NULL;
+
+ assert_se(device_shallow_clone(device, &copy) >= 0);
+ assert_se(device_copy_properties(copy, device) >= 0);
+
+ test_send_receive_one(copy, false, false, false);
}
int main(int argc, char *argv[]) {
@@ -111,24 +175,27 @@ int main(int argc, char *argv[]) {
if (getuid() != 0)
return log_tests_skipped("not root");
- assert_se(sd_device_new_from_syspath(&loopback, "/sys/class/net/lo") >= 0);
- assert_se(device_add_property(loopback, "ACTION", "add") >= 0);
- assert_se(device_add_property(loopback, "SEQNUM", "10") >= 0);
-
- r = test_send_receive_one(loopback, false, false, false);
+ r = test_receive_device_fail();
if (r < 0) {
assert_se(r == -EPERM && detect_container() > 0);
return log_tests_skipped("Running in container? Skipping remaining tests");
}
- assert_se(test_send_receive_one(loopback, true, false, false) >= 0);
- assert_se(test_send_receive_one(loopback, false, true, false) >= 0);
- assert_se(test_send_receive_one(loopback, true, true, false) >= 0);
- assert_se(test_send_receive_one(loopback, true, false, true) >= 0);
- assert_se(test_send_receive_one(loopback, false, true, true) >= 0);
- assert_se(test_send_receive_one(loopback, true, true, true) >= 0);
+ assert_se(sd_device_new_from_syspath(&loopback, "/sys/class/net/lo") >= 0);
+ assert_se(device_add_property(loopback, "ACTION", "add") >= 0);
+ assert_se(device_add_property(loopback, "SEQNUM", "10") >= 0);
+
+ test_send_receive_one(loopback, false, false, false);
+ test_send_receive_one(loopback, true, false, false);
+ test_send_receive_one(loopback, false, true, false);
+ test_send_receive_one(loopback, true, true, false);
+ test_send_receive_one(loopback, true, false, true);
+ test_send_receive_one(loopback, false, true, true);
+ test_send_receive_one(loopback, true, true, true);
test_subsystem_filter(loopback);
+ test_sd_device_monitor_filter_remove(loopback);
+ test_device_copy_properties(loopback);
r = sd_device_new_from_subsystem_sysname(&sda, "block", "sda");
if (r < 0) {
@@ -139,13 +206,13 @@ int main(int argc, char *argv[]) {
assert_se(device_add_property(sda, "ACTION", "change") >= 0);
assert_se(device_add_property(sda, "SEQNUM", "11") >= 0);
- assert_se(test_send_receive_one(sda, false, false, false) >= 0);
- assert_se(test_send_receive_one(sda, true, false, false) >= 0);
- assert_se(test_send_receive_one(sda, false, true, false) >= 0);
- assert_se(test_send_receive_one(sda, true, true, false) >= 0);
- assert_se(test_send_receive_one(sda, true, false, true) >= 0);
- assert_se(test_send_receive_one(sda, false, true, true) >= 0);
- assert_se(test_send_receive_one(sda, true, true, true) >= 0);
+ test_send_receive_one(sda, false, false, false);
+ test_send_receive_one(sda, true, false, false);
+ test_send_receive_one(sda, false, true, false);
+ test_send_receive_one(sda, true, true, false);
+ test_send_receive_one(sda, true, false, true);
+ test_send_receive_one(sda, false, true, true);
+ test_send_receive_one(sda, true, true, true);
return 0;
}
diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c
index 0030ea5dbe..04ba7e2574 100644
--- a/src/libsystemd/sd-event/sd-event.c
+++ b/src/libsystemd/sd-event/sd-event.c
@@ -470,6 +470,17 @@ static struct clock_data* event_get_clock_data(sd_event *e, EventSourceType t) {
}
}
+static void event_free_signal_data(sd_event *e, struct signal_data *d) {
+ assert(e);
+
+ if (!d)
+ return;
+
+ hashmap_remove(e->signal_data, &d->priority);
+ safe_close(d->fd);
+ free(d);
+}
+
static int event_make_signal_data(
sd_event *e,
int sig,
@@ -559,11 +570,8 @@ static int event_make_signal_data(
return 0;
fail:
- if (added) {
- d->fd = safe_close(d->fd);
- hashmap_remove(e->signal_data, &d->priority);
- free(d);
- }
+ if (added)
+ event_free_signal_data(e, d);
return r;
}
@@ -582,11 +590,8 @@ static void event_unmask_signal_data(sd_event *e, struct signal_data *d, int sig
assert_se(sigdelset(&d->sigset, sig) >= 0);
if (sigisemptyset(&d->sigset)) {
-
/* If all the mask is all-zero we can get rid of the structure */
- hashmap_remove(e->signal_data, &d->priority);
- safe_close(d->fd);
- free(d);
+ event_free_signal_data(e, d);
return;
}
diff --git a/src/libsystemd/sd-hwdb/hwdb-util.c b/src/libsystemd/sd-hwdb/hwdb-util.c
index c5c329f2ac..f8529670b3 100644
--- a/src/libsystemd/sd-hwdb/hwdb-util.c
+++ b/src/libsystemd/sd-hwdb/hwdb-util.c
@@ -367,7 +367,7 @@ static int trie_store(struct trie *trie, const char *filename, bool compat) {
int64_t size;
struct trie_header_f h = {
.signature = HWDB_SIG,
- .tool_version = htole64(atoi(PACKAGE_VERSION)),
+ .tool_version = htole64(PROJECT_VERSION),
.header_size = htole64(sizeof(struct trie_header_f)),
.node_size = htole64(sizeof(struct trie_node_f)),
.child_entry_size = htole64(sizeof(struct trie_child_entry_f)),
diff --git a/src/libsystemd/sd-hwdb/sd-hwdb.c b/src/libsystemd/sd-hwdb/sd-hwdb.c
index b81786a64d..233944c078 100644
--- a/src/libsystemd/sd-hwdb/sd-hwdb.c
+++ b/src/libsystemd/sd-hwdb/sd-hwdb.c
@@ -240,7 +240,7 @@ static int trie_search_f(sd_hwdb *hwdb, const char *search) {
size_t p = 0;
if (node->prefix_off) {
- uint8_t c;
+ char c;
for (; (c = trie_string(hwdb, node->prefix_off)[p]); p++) {
if (IN_SET(c, '*', '?', '['))
diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c
index 3593a71c02..e72af1593c 100644
--- a/src/libsystemd/sd-id128/sd-id128.c
+++ b/src/libsystemd/sd-id128/sd-id128.c
@@ -18,7 +18,7 @@
#include "user-util.h"
#include "util.h"
-_public_ char *sd_id128_to_string(sd_id128_t id, char s[SD_ID128_STRING_MAX]) {
+_public_ char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_STRING_MAX]) {
unsigned n;
assert_return(s, NULL);
diff --git a/src/libsystemd/sd-login/sd-login.c b/src/libsystemd/sd-login/sd-login.c
index a904c6b544..07f21e84de 100644
--- a/src/libsystemd/sd-login/sd-login.c
+++ b/src/libsystemd/sd-login/sd-login.c
@@ -945,11 +945,11 @@ _public_ int sd_machine_get_ifindices(const char *machine, int **ifindices) {
return nr;
}
-static inline int MONITOR_TO_FD(sd_login_monitor *m) {
+static int MONITOR_TO_FD(sd_login_monitor *m) {
return (int) (unsigned long) m - 1;
}
-static inline sd_login_monitor* FD_TO_MONITOR(int fd) {
+static sd_login_monitor* FD_TO_MONITOR(int fd) {
return (sd_login_monitor*) (unsigned long) (fd + 1);
}
diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c
index b0b25639f4..5e9bc45139 100644
--- a/src/libsystemd/sd-netlink/netlink-message.c
+++ b/src/libsystemd/sd-netlink/netlink-message.c
@@ -370,6 +370,42 @@ int sd_netlink_message_append_in6_addr(sd_netlink_message *m, unsigned short typ
return 0;
}
+int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, unsigned short type, const struct sockaddr_in *data) {
+ int r;
+
+ assert_return(m, -EINVAL);
+ assert_return(!m->sealed, -EPERM);
+ assert_return(data, -EINVAL);
+
+ r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_SOCKADDR);
+ if (r < 0)
+ return r;
+
+ r = add_rtattr(m, type, data, sizeof(struct sockaddr_in));
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+int sd_netlink_message_append_sockaddr_in6(sd_netlink_message *m, unsigned short type, const struct sockaddr_in6 *data) {
+ int r;
+
+ assert_return(m, -EINVAL);
+ assert_return(!m->sealed, -EPERM);
+ assert_return(data, -EINVAL);
+
+ r = message_attribute_has_type(m, NULL, type, NETLINK_TYPE_SOCKADDR);
+ if (r < 0)
+ return r;
+
+ r = add_rtattr(m, type, data, sizeof(struct sockaddr_in6));
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
int sd_netlink_message_append_ether_addr(sd_netlink_message *m, unsigned short type, const struct ether_addr *data) {
int r;
diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c
index cd5cdcc6e5..9dcd3f2ac8 100644
--- a/src/libsystemd/sd-netlink/netlink-types.c
+++ b/src/libsystemd/sd-netlink/netlink-types.c
@@ -721,7 +721,7 @@ static const NLType genl_wireguard_peer_types[] = {
[WGPEER_A_FLAGS] = { .type = NETLINK_TYPE_U32 },
[WGPEER_A_PRESHARED_KEY] = { .size = WG_KEY_LEN },
[WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL] = { .type = NETLINK_TYPE_U16 },
- [WGPEER_A_ENDPOINT] = { /* either size of sockaddr_in or sockaddr_in6 depending on address family */ },
+ [WGPEER_A_ENDPOINT] = { .type = NETLINK_TYPE_SOCKADDR },
[WGPEER_A_ALLOWEDIPS] = { .type = NETLINK_TYPE_NESTED, .type_system = &genl_wireguard_allowedip_type_system },
};
@@ -732,7 +732,7 @@ static const NLTypeSystem genl_wireguard_peer_type_system = {
static const NLType genl_wireguard_set_device_types[] = {
[WGDEVICE_A_IFINDEX] = { .type = NETLINK_TYPE_U32 },
- [WGDEVICE_A_IFNAME] = { .type = NETLINK_TYPE_STRING },
+ [WGDEVICE_A_IFNAME] = { .type = NETLINK_TYPE_STRING, .size = IFNAMSIZ-1 },
[WGDEVICE_A_FLAGS] = { .type = NETLINK_TYPE_U32 },
[WGDEVICE_A_PRIVATE_KEY] = { .size = WG_KEY_LEN },
[WGDEVICE_A_LISTEN_PORT] = { .type = NETLINK_TYPE_U16 },
diff --git a/src/libsystemd/sd-netlink/netlink-types.h b/src/libsystemd/sd-netlink/netlink-types.h
index 3133e4863d..b84fa4762b 100644
--- a/src/libsystemd/sd-netlink/netlink-types.h
+++ b/src/libsystemd/sd-netlink/netlink-types.h
@@ -16,6 +16,7 @@ enum {
NETLINK_TYPE_CACHE_INFO,
NETLINK_TYPE_NESTED, /* NLA_NESTED */
NETLINK_TYPE_UNION,
+ NETLINK_TYPE_SOCKADDR,
};
typedef enum NLMatchType {
diff --git a/src/libsystemd/sd-network/sd-network.c b/src/libsystemd/sd-network/sd-network.c
index d4b5e248cc..812826fe3d 100644
--- a/src/libsystemd/sd-network/sd-network.c
+++ b/src/libsystemd/sd-network/sd-network.c
@@ -276,11 +276,11 @@ _public_ int sd_network_link_get_carrier_bound_by(int ifindex, int **ret) {
return network_link_get_ifindexes(ifindex, "CARRIER_BOUND_BY", ret);
}
-static inline int MONITOR_TO_FD(sd_network_monitor *m) {
+static int MONITOR_TO_FD(sd_network_monitor *m) {
return (int) (unsigned long) m - 1;
}
-static inline sd_network_monitor* FD_TO_MONITOR(int fd) {
+static sd_network_monitor* FD_TO_MONITOR(int fd) {
return (sd_network_monitor*) (unsigned long) (fd + 1);
}
diff --git a/src/libsystemd/sd-resolve/sd-resolve.c b/src/libsystemd/sd-resolve/sd-resolve.c
index 21d783b8f0..36b9c8d019 100644
--- a/src/libsystemd/sd-resolve/sd-resolve.c
+++ b/src/libsystemd/sd-resolve/sd-resolve.c
@@ -912,7 +912,6 @@ static int alloc_query(sd_resolve *resolve, bool floating, sd_resolve_query **_q
return 0;
}
-
int resolve_getaddrinfo_with_destroy_callback(
sd_resolve *resolve,
sd_resolve_query **ret_query,
diff --git a/src/libudev/libudev-list.c b/src/libudev/libudev-list.c
index 5f6726c2d8..2737326187 100644
--- a/src/libudev/libudev-list.c
+++ b/src/libudev/libudev-list.c
@@ -61,7 +61,7 @@ static void udev_list_node_remove(struct udev_list_node *entry) {
}
/* return list entry which embeds this node */
-static inline struct udev_list_entry *list_node_to_entry(struct udev_list_node *node) {
+static struct udev_list_entry *list_node_to_entry(struct udev_list_node *node) {
return container_of(node, struct udev_list_entry, node);
}
diff --git a/src/libudev/libudev-util.c b/src/libudev/libudev-util.c
index f67ab40354..7e21719fbf 100644
--- a/src/libudev/libudev-util.c
+++ b/src/libudev/libudev-util.c
@@ -122,19 +122,20 @@ size_t util_path_encode(const char *src, char *dest, size_t size) {
*
* Note this may be called with 'str' == 'to', i.e. to replace whitespace
* in-place in a buffer. This function can handle that situation.
+ *
+ * Note that only 'len' characters are read from 'str'.
*/
size_t util_replace_whitespace(const char *str, char *to, size_t len) {
bool is_space = false;
- const char *p = str;
- size_t j;
+ size_t i, j;
assert(str);
assert(to);
- p += strspn(p, WHITESPACE);
+ i = strspn(str, WHITESPACE);
- for (j = 0; j < len && *p != '\0'; p++) {
- if (isspace(*p)) {
+ for (j = 0; j < len && i < len && str[i] != '\0'; i++) {
+ if (isspace(str[i])) {
is_space = true;
continue;
}
@@ -146,7 +147,7 @@ size_t util_replace_whitespace(const char *str, char *to, size_t len) {
to[j++] = '_';
is_space = false;
}
- to[j++] = *p;
+ to[j++] = str[i];
}
to[j] = '\0';
diff --git a/src/libudev/libudev.pc.in b/src/libudev/libudev.pc.in
index 69f5c6463e..40b340362e 100644
--- a/src/libudev/libudev.pc.in
+++ b/src/libudev/libudev.pc.in
@@ -14,6 +14,6 @@ includedir=@includedir@
Name: libudev
Description: Library to access udev device information
-Version: @PACKAGE_VERSION@
+Version: @PROJECT_VERSION@
Libs: -L${libdir} -ludev
Cflags: -I${includedir}
diff --git a/src/libudev/meson.build b/src/libudev/meson.build
index 8d86c34189..88189748d3 100644
--- a/src/libudev/meson.build
+++ b/src/libudev/meson.build
@@ -22,9 +22,8 @@ libudev_sym_path = meson.current_source_dir() + '/libudev.sym'
install_headers('libudev.h')
libudev_h_path = '@0@/libudev.h'.format(meson.current_source_dir())
-libudev_pc = configure_file(
+configure_file(
input : 'libudev.pc.in',
output : 'libudev.pc',
- configuration : substs)
-install_data(libudev_pc,
- install_dir : pkgconfiglibdir)
+ configuration : substs,
+ install_dir : pkgconfiglibdir == 'no' ? '' : pkgconfiglibdir)
diff --git a/src/login/logind-action.c b/src/login/logind-action.c
index e4e6c90191..6c9366761d 100644
--- a/src/login/logind-action.c
+++ b/src/login/logind-action.c
@@ -121,7 +121,7 @@ int manager_handle_action(
return -EOPNOTSUPP;
}
- if (m->action_what) {
+ if (m->action_what > 0) {
log_debug("Action already in progress, ignoring.");
return -EALREADY;
}
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
index bd9f5ac4d6..8ab498fdc2 100644
--- a/src/login/logind-dbus.c
+++ b/src/login/logind-dbus.c
@@ -1474,23 +1474,15 @@ int manager_set_lid_switch_ignore(Manager *m, usec_t until) {
}
static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
-
- static const char * const signal_name[_INHIBIT_WHAT_MAX] = {
- [INHIBIT_SHUTDOWN] = "PrepareForShutdown",
- [INHIBIT_SLEEP] = "PrepareForSleep"
- };
-
int active = _active;
assert(m);
- assert(w >= 0);
- assert(w < _INHIBIT_WHAT_MAX);
- assert(signal_name[w]);
+ assert(IN_SET(w, INHIBIT_SHUTDOWN, INHIBIT_SLEEP));
return sd_bus_emit_signal(m->bus,
"/org/freedesktop/login1",
"org.freedesktop.login1.Manager",
- signal_name[w],
+ w == INHIBIT_SHUTDOWN ? "PrepareForShutdown" : "PrepareForSleep",
"b",
active);
}
@@ -1502,7 +1494,6 @@ static int execute_shutdown_or_sleep(
sd_bus_error *error) {
_cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
- char *c = NULL;
const char *p;
int r;
@@ -1530,15 +1521,11 @@ static int execute_shutdown_or_sleep(
if (r < 0)
goto error;
- c = strdup(p);
- if (!c) {
- r = -ENOMEM;
+ r = free_and_strdup(&m->action_job, p);
+ if (r < 0)
goto error;
- }
m->action_unit = unit_name;
- free(m->action_job);
- m->action_job = c;
m->action_what = w;
/* Make sure the lid switch is ignored for a while */
@@ -1656,7 +1643,7 @@ int bus_manager_shutdown_or_sleep_now_or_later(
assert(m);
assert(unit_name);
assert(w > 0);
- assert(w <= _INHIBIT_WHAT_MAX);
+ assert(w < _INHIBIT_WHAT_MAX);
assert(!m->action_job);
r = unit_load_state(m->bus, unit_name, &load_state);
@@ -1773,7 +1760,7 @@ static int method_do_shutdown_or_sleep(
return r;
/* Don't allow multiple jobs being executed at the same time */
- if (m->action_what)
+ if (m->action_what > 0)
return sd_bus_error_setf(error, BUS_ERROR_OPERATION_IN_PROGRESS, "There's already a shutdown or sleep operation in progress");
if (sleep_verb) {
@@ -2012,7 +1999,7 @@ static int manager_scheduled_shutdown_handler(
assert_not_reached("unexpected shutdown type");
/* Don't allow multiple jobs being executed at the same time */
- if (m->action_what) {
+ if (m->action_what > 0) {
r = -EALREADY;
log_error("Scheduled shutdown to %s failed: shutdown or sleep operation already in progress", target);
goto error;
diff --git a/src/login/logind-inhibit.h b/src/login/logind-inhibit.h
index d358a48559..650587106d 100644
--- a/src/login/logind-inhibit.h
+++ b/src/login/logind-inhibit.h
@@ -4,15 +4,15 @@
typedef struct Inhibitor Inhibitor;
typedef enum InhibitWhat {
- INHIBIT_SHUTDOWN = 1,
- INHIBIT_SLEEP = 2,
- INHIBIT_IDLE = 4,
- INHIBIT_HANDLE_POWER_KEY = 8,
- INHIBIT_HANDLE_SUSPEND_KEY = 16,
- INHIBIT_HANDLE_HIBERNATE_KEY = 32,
- INHIBIT_HANDLE_LID_SWITCH = 64,
- _INHIBIT_WHAT_MAX = 128,
- _INHIBIT_WHAT_INVALID = -1
+ INHIBIT_SHUTDOWN = 1 << 0,
+ INHIBIT_SLEEP = 1 << 1,
+ INHIBIT_IDLE = 1 << 2,
+ INHIBIT_HANDLE_POWER_KEY = 1 << 3,
+ INHIBIT_HANDLE_SUSPEND_KEY = 1 << 4,
+ INHIBIT_HANDLE_HIBERNATE_KEY = 1 << 5,
+ INHIBIT_HANDLE_LID_SWITCH = 1 << 6,
+ _INHIBIT_WHAT_MAX = 1 << 7,
+ _INHIBIT_WHAT_INVALID = -1
} InhibitWhat;
typedef enum InhibitMode {
diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c
index c758ffd5fa..a6d88f8e7b 100644
--- a/src/login/logind-seat.c
+++ b/src/login/logind-seat.c
@@ -376,7 +376,7 @@ int seat_read_active_vt(Seat *s) {
k = read(s->manager->console_active_fd, t, sizeof(t)-1);
if (k <= 0) {
- log_error("Failed to read current console: %s", k < 0 ? strerror(-errno) : "EOF");
+ log_error("Failed to read current console: %s", k < 0 ? strerror(errno) : "EOF");
return k < 0 ? -errno : -EIO;
}
diff --git a/src/login/logind-session.c b/src/login/logind-session.c
index 4b4dd4c060..90a9108566 100644
--- a/src/login/logind-session.c
+++ b/src/login/logind-session.c
@@ -1227,54 +1227,26 @@ error:
}
static void session_restore_vt(Session *s) {
- pid_t pid;
- int r;
-
- if (s->vtnr < 1)
- return;
+ int r, vt, old_fd;
- if (s->vtfd < 0)
- return;
-
- /* The virtual terminal can potentially be entering in hung-up state at any time
- * depending on when the controlling process exits.
- *
- * If the controlling process exits while we're restoring the virtual terminal,
- * the VT will enter in hung-up state and we'll fail at restoring it. To prevent
- * this case, we kick off the current controlling process (if any) in a child
- * process so logind doesn't play around with tty ownership.
- *
- * If the controlling process already exited, getting a fresh handle to the
- * virtual terminal reset the hung-up state. */
- r = safe_fork("(logind)", FORK_REOPEN_LOG|FORK_CLOSE_ALL_FDS|FORK_RESET_SIGNALS|FORK_WAIT|FORK_LOG, &pid);
- if (r == 0) {
- char path[sizeof("/dev/tty") + DECIMAL_STR_MAX(s->vtnr)];
- int vt;
-
- /* We must be a session leader in order to become the controlling process. */
- pid = setsid();
- if (pid < 0) {
- log_error_errno(errno, "Failed to become session leader: %m");
- _exit(EXIT_FAILURE);
- }
+ /* We need to get a fresh handle to the virtual terminal,
+ * since the old file-descriptor is potentially in a hung-up
+ * state after the controlling process exited; we do a
+ * little dance to avoid having the terminal be available
+ * for reuse before we've cleaned it up.
+ */
+ old_fd = TAKE_FD(s->vtfd);
- sprintf(path, "/dev/tty%u", s->vtnr);
- vt = acquire_terminal(path, ACQUIRE_TERMINAL_FORCE, USEC_INFINITY);
- if (vt < 0) {
- log_error_errno(vt, "Cannot acquire VT %s of session %s: %m", path, s->id);
- _exit(EXIT_FAILURE);
- }
+ vt = session_open_vt(s);
+ safe_close(old_fd);
- r = vt_restore(vt);
- if (r < 0)
- log_warning_errno(r, "Failed to restore VT, ignoring: %m");
+ if (vt < 0)
+ return;
- /* Give up and release the controlling terminal. */
- safe_close(vt);
- _exit(EXIT_SUCCESS);
- }
+ r = vt_restore(vt);
+ if (r < 0)
+ log_warning_errno(r, "Failed to restore VT, ignoring: %m");
- /* Close the fd in any cases. */
s->vtfd = safe_close(s->vtfd);
}
diff --git a/src/login/logind.c b/src/login/logind.c
index 8d85de9b43..95ec0a57c6 100644
--- a/src/login/logind.c
+++ b/src/login/logind.c
@@ -146,7 +146,7 @@ static Manager* manager_unref(Manager *m) {
bus_verify_polkit_async_registry_free(m->polkit_registry);
- sd_bus_unref(m->bus);
+ sd_bus_flush_close_unref(m->bus);
sd_event_unref(m->event);
safe_close(m->reserve_vt_fd);
diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c
index c7d9dcf4e2..997b74eb88 100644
--- a/src/login/pam_systemd.c
+++ b/src/login/pam_systemd.c
@@ -28,6 +28,7 @@
#include "path-util.h"
#include "process-util.h"
#include "socket-util.h"
+#include "stdio-util.h"
#include "strv.h"
#include "terminal-util.h"
#include "util.h"
@@ -190,6 +191,45 @@ static int get_seat_from_display(const char *display, const char **seat, uint32_
return 0;
}
+static int export_legacy_dbus_address(
+ pam_handle_t *handle,
+ uid_t uid,
+ const char *runtime) {
+
+ const char *s;
+ _cleanup_free_ char *t = NULL;
+ int r = PAM_BUF_ERR;
+
+ /* We need to export $DBUS_SESSION_BUS_ADDRESS because various applications will not connect
+ * correctly to the bus without it. This setting matches what dbus.socket does for the user
+ * session using 'systemctl --user set-environment'. We want to have the same configuration
+ * in processes started from the PAM session.
+ *
+ * The setting of the address is guarded by the access() check because it is also possible to compile
+ * dbus without --enable-user-session, in which case this socket is not used, and
+ * $DBUS_SESSION_BUS_ADDRESS should not be set. An alternative approach would to not do the access()
+ * check here, and let applications try on their own, by using "unix:path=%s/bus;autolaunch:". But we
+ * expect the socket to be present by the time we do this check, so we can just as well check once
+ * here. */
+
+ s = strjoina(runtime, "/bus");
+ if (access(s, F_OK) < 0)
+ return PAM_SUCCESS;
+
+ if (asprintf(&t, DEFAULT_USER_BUS_ADDRESS_FMT, runtime) < 0)
+ goto error;
+
+ r = pam_misc_setenv(handle, "DBUS_SESSION_BUS_ADDRESS", t, 0);
+ if (r != PAM_SUCCESS)
+ goto error;
+
+ return PAM_SUCCESS;
+
+error:
+ pam_syslog(handle, LOG_ERR, "Failed to set bus variable.");
+ return r;
+}
+
static int append_session_memory_max(pam_handle_t *handle, sd_bus_message *m, const char *limit) {
uint64_t val;
int r;
@@ -392,11 +432,9 @@ _public_ PAM_EXTERN int pam_sm_open_session(
pam_get_item(handle, PAM_SERVICE, (const void**) &service);
if (streq_ptr(service, "systemd-user")) {
- _cleanup_free_ char *rt = NULL;
-
- if (asprintf(&rt, "/run/user/"UID_FMT, pw->pw_uid) < 0)
- return PAM_BUF_ERR;
+ char rt[STRLEN("/run/user/") + DECIMAL_STR_MAX(uid_t)];
+ xsprintf(rt, "/run/user/"UID_FMT, pw->pw_uid);
if (validate_runtime_directory(handle, rt, pw->pw_uid)) {
r = pam_misc_setenv(handle, "XDG_RUNTIME_DIR", rt, 0);
if (r != PAM_SUCCESS) {
@@ -405,6 +443,10 @@ _public_ PAM_EXTERN int pam_sm_open_session(
}
}
+ r = export_legacy_dbus_address(handle, pw->pw_uid, rt);
+ if (r != PAM_SUCCESS)
+ return r;
+
return PAM_SUCCESS;
}
@@ -569,7 +611,7 @@ _public_ PAM_EXTERN int pam_sm_open_session(
if (r < 0) {
if (sd_bus_error_has_name(&error, BUS_ERROR_SESSION_BUSY)) {
if (debug)
- pam_syslog(handle, LOG_DEBUG, "Cannot create session: %s", bus_error_message(&error, r));
+ pam_syslog(handle, LOG_DEBUG, "Not creating session: %s", bus_error_message(&error, r));
return PAM_SUCCESS;
} else {
pam_syslog(handle, LOG_ERR, "Failed to create session: %s", bus_error_message(&error, r));
@@ -613,6 +655,10 @@ _public_ PAM_EXTERN int pam_sm_open_session(
if (r != PAM_SUCCESS)
return r;
}
+
+ r = export_legacy_dbus_address(handle, pw->pw_uid, runtime_path);
+ if (r != PAM_SUCCESS)
+ return r;
}
/* Most likely we got the session/type/class from environment variables, but might have gotten the data
diff --git a/src/login/user-runtime-dir.c b/src/login/user-runtime-dir.c
index 5e58e4baad..eb66e18de1 100644
--- a/src/login/user-runtime-dir.c
+++ b/src/login/user-runtime-dir.c
@@ -22,7 +22,7 @@
static int acquire_runtime_dir_size(uint64_t *ret) {
_cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
- _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
+ _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
int r;
r = sd_bus_default_system(&bus);
diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c
index 48270b3709..7a558df898 100644
--- a/src/machine/machine-dbus.c
+++ b/src/machine/machine-dbus.c
@@ -454,7 +454,7 @@ static int container_bus_new(Machine *m, sd_bus_error *error, sd_bus **ret) {
break;
case MACHINE_CONTAINER: {
- _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
+ _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
char *address;
r = sd_bus_new(&bus);
diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c
index 44e6c76035..30f2e26a1e 100644
--- a/src/machine/machinectl.c
+++ b/src/machine/machinectl.c
@@ -1309,7 +1309,7 @@ static int on_machine_removed(sd_bus_message *m, void *userdata, sd_bus_error *r
static int process_forward(sd_event *event, PTYForward **forward, int master, PTYForwardFlags flags, const char *name) {
char last_char = 0;
bool machine_died;
- int ret = 0, r;
+ int r;
assert(event);
assert(master >= 0);
@@ -1355,8 +1355,7 @@ static int process_forward(sd_event *event, PTYForward **forward, int master, PT
log_info("Connection to machine %s terminated.", name);
}
- sd_event_get_exit_code(event, &ret);
- return ret;
+ return 0;
}
static int parse_machine_uid(const char *spec, const char **machine, char **uid) {
@@ -1740,7 +1739,7 @@ static int start_machine(int argc, char *argv[], void *userdata) {
if (r < 0)
return r;
if (r == 0) {
- log_error("Machine image '%s' does not exist.", argv[1]);
+ log_error("Machine image '%s' does not exist.", argv[i]);
return -ENXIO;
}
@@ -1812,7 +1811,7 @@ static int enable_machine(int argc, char *argv[], void *userdata) {
if (r < 0)
return r;
if (r == 0) {
- log_error("Machine image '%s' does not exist.", argv[1]);
+ log_error("Machine image '%s' does not exist.", argv[i]);
return -ENXIO;
}
diff --git a/src/machine/machined.c b/src/machine/machined.c
index 9f23e369a4..0b92b1c6ee 100644
--- a/src/machine/machined.c
+++ b/src/machine/machined.c
@@ -81,7 +81,7 @@ static Manager* manager_unref(Manager *m) {
bus_verify_polkit_async_registry_free(m->polkit_registry);
- sd_bus_unref(m->bus);
+ sd_bus_flush_close_unref(m->bus);
sd_event_unref(m->event);
return mfree(m);
diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c
index 0c804adb2e..aadb3ab905 100644
--- a/src/network/netdev/bridge.c
+++ b/src/network/netdev/bridge.c
@@ -47,7 +47,7 @@ static int netdev_bridge_post_create(NetDev *netdev, Link *link, sd_netlink_mess
r = sd_netlink_message_open_container(req, IFLA_LINKINFO);
if (r < 0)
- return log_netdev_error_errno(netdev, r, "Could not append IFLA_PROTINFO attribute: %m");
+ return log_netdev_error_errno(netdev, r, "Could not append IFLA_LINKINFO attribute: %m");
r = sd_netlink_message_open_container_union(req, IFLA_INFO_DATA, netdev_kind_to_string(netdev->kind));
if (r < 0)
diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c
index f0e9d00246..0263917468 100644
--- a/src/network/netdev/netdev.c
+++ b/src/network/netdev/netdev.c
@@ -148,11 +148,16 @@ static void netdev_callbacks_clear(NetDev *netdev) {
}
}
+bool netdev_is_managed(NetDev *netdev) {
+ if (!netdev || !netdev->manager || !netdev->ifname)
+ return false;
+
+ return hashmap_get(netdev->manager->netdevs, netdev->ifname) == netdev;
+}
+
static void netdev_detach_from_manager(NetDev *netdev) {
if (netdev->ifname && netdev->manager)
hashmap_remove(netdev->manager->netdevs, netdev->ifname);
-
- netdev->manager = NULL;
}
static NetDev *netdev_free(NetDev *netdev) {
@@ -476,7 +481,7 @@ int netdev_get_mac(const char *ifname, struct ether_addr **ret) {
l = strlen(ifname);
sz = sizeof(sd_id128_t) + l;
- v = alloca(sz);
+ v = newa(uint8_t, sz);
/* fetch some persistent data unique to the machine */
r = sd_id128_get_machine((sd_id128_t*) v);
diff --git a/src/network/netdev/netdev.h b/src/network/netdev/netdev.h
index bfe1094181..d6524da0f3 100644
--- a/src/network/netdev/netdev.h
+++ b/src/network/netdev/netdev.h
@@ -156,6 +156,7 @@ NetDev *netdev_ref(NetDev *netdev);
DEFINE_TRIVIAL_DESTRUCTOR(netdev_destroy_callback, NetDev, netdev_unref);
DEFINE_TRIVIAL_CLEANUP_FUNC(NetDev*, netdev_unref);
+bool netdev_is_managed(NetDev *netdev);
int netdev_get(Manager *manager, const char *name, NetDev **ret);
int netdev_set_ifindex(NetDev *netdev, sd_netlink_message *newlink);
int netdev_get_mac(const char *ifname, struct ether_addr **ret);
diff --git a/src/network/netdev/wireguard.c b/src/network/netdev/wireguard.c
index 167cf65046..0c0b16d1da 100644
--- a/src/network/netdev/wireguard.c
+++ b/src/network/netdev/wireguard.c
@@ -45,22 +45,137 @@ static WireguardPeer *wireguard_peer_new(Wireguard *w, unsigned section) {
return peer;
}
-static int set_wireguard_interface(NetDev *netdev) {
+static int wireguard_set_ipmask_one(NetDev *netdev, sd_netlink_message *message, const WireguardIPmask *mask, uint16_t index) {
int r;
- unsigned i, j;
- WireguardPeer *peer, *peer_start;
- WireguardIPmask *mask, *mask_start = NULL;
+
+ assert(message);
+ assert(mask);
+ assert(index > 0);
+
+ /* This returns 1 on success, 0 on recoverable error, and negative errno on failure. */
+
+ r = sd_netlink_message_open_array(message, index);
+ if (r < 0)
+ return 0;
+
+ r = sd_netlink_message_append_u16(message, WGALLOWEDIP_A_FAMILY, mask->family);
+ if (r < 0)
+ goto cancel;
+
+ if (mask->family == AF_INET)
+ r = sd_netlink_message_append_in_addr(message, WGALLOWEDIP_A_IPADDR, &mask->ip.in);
+ else if (mask->family == AF_INET6)
+ r = sd_netlink_message_append_in6_addr(message, WGALLOWEDIP_A_IPADDR, &mask->ip.in6);
+ if (r < 0)
+ goto cancel;
+
+ r = sd_netlink_message_append_u8(message, WGALLOWEDIP_A_CIDR_MASK, mask->cidr);
+ if (r < 0)
+ goto cancel;
+
+ r = sd_netlink_message_close_container(message);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not add wireguard allowed ip: %m");
+
+ return 1;
+
+cancel:
+ r = sd_netlink_message_cancel_array(message);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not cancel wireguard allowed ip message attribute: %m");
+
+ return 0;
+}
+
+static int wireguard_set_peer_one(NetDev *netdev, sd_netlink_message *message, const WireguardPeer *peer, uint16_t index, WireguardIPmask **mask_start) {
+ WireguardIPmask *mask, *start;
+ uint16_t j = 0;
+ int r;
+
+ assert(message);
+ assert(peer);
+ assert(index > 0);
+ assert(mask_start);
+
+ /* This returns 1 on success, 0 on recoverable error, and negative errno on failure. */
+
+ start = *mask_start ?: peer->ipmasks;
+
+ r = sd_netlink_message_open_array(message, index);
+ if (r < 0)
+ return 0;
+
+ r = sd_netlink_message_append_data(message, WGPEER_A_PUBLIC_KEY, &peer->public_key, sizeof(peer->public_key));
+ if (r < 0)
+ goto cancel;
+
+ if (!*mask_start) {
+ r = sd_netlink_message_append_data(message, WGPEER_A_PRESHARED_KEY, &peer->preshared_key, WG_KEY_LEN);
+ if (r < 0)
+ goto cancel;
+
+ r = sd_netlink_message_append_u32(message, WGPEER_A_FLAGS, peer->flags);
+ if (r < 0)
+ goto cancel;
+
+ r = sd_netlink_message_append_u16(message, WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL, peer->persistent_keepalive_interval);
+ if (r < 0)
+ goto cancel;
+
+ if (peer->endpoint.sa.sa_family == AF_INET)
+ r = sd_netlink_message_append_sockaddr_in(message, WGPEER_A_ENDPOINT, &peer->endpoint.in);
+ else if (peer->endpoint.sa.sa_family == AF_INET6)
+ r = sd_netlink_message_append_sockaddr_in6(message, WGPEER_A_ENDPOINT, &peer->endpoint.in6);
+ if (r < 0)
+ goto cancel;
+ }
+
+ r = sd_netlink_message_open_container(message, WGPEER_A_ALLOWEDIPS);
+ if (r < 0)
+ goto cancel;
+
+ LIST_FOREACH(ipmasks, mask, start) {
+ r = wireguard_set_ipmask_one(netdev, message, mask, ++j);
+ if (r < 0)
+ return r;
+ if (r == 0)
+ break;
+ }
+
+ r = sd_netlink_message_close_container(message);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not add wireguard allowed ip: %m");
+
+ r = sd_netlink_message_close_container(message);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not add wireguard peer: %m");
+
+ *mask_start = mask; /* Start next cycle from this mask. */
+ return !mask;
+
+cancel:
+ r = sd_netlink_message_cancel_array(message);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not cancel wireguard peers: %m");
+
+ return 0;
+}
+
+static int wireguard_set_interface(NetDev *netdev) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *message = NULL;
- Wireguard *w;
+ WireguardIPmask *mask_start = NULL;
+ WireguardPeer *peer, *peer_start;
uint32_t serial;
+ Wireguard *w;
+ int r;
assert(netdev);
w = WIREGUARD(netdev);
assert(w);
- peer_start = w->peers;
+ for (peer_start = w->peers; peer_start; ) {
+ uint16_t i = 0;
- do {
message = sd_netlink_message_unref(message);
r = sd_genl_message_new(netdev->manager->genl, SD_GENL_WIREGUARD, WG_CMD_SET_DEVICE, &message);
@@ -93,97 +208,14 @@ static int set_wireguard_interface(NetDev *netdev) {
if (r < 0)
return log_netdev_error_errno(netdev, r, "Could not append wireguard peer attributes: %m");
- i = 0;
-
LIST_FOREACH(peers, peer, peer_start) {
- r = sd_netlink_message_open_array(message, ++i);
- if (r < 0)
- break;
-
- r = sd_netlink_message_append_data(message, WGPEER_A_PUBLIC_KEY, &peer->public_key, sizeof(peer->public_key));
+ r = wireguard_set_peer_one(netdev, message, peer, ++i, &mask_start);
if (r < 0)
+ return r;
+ if (r == 0)
break;
-
- if (!mask_start) {
- r = sd_netlink_message_append_data(message, WGPEER_A_PRESHARED_KEY, &peer->preshared_key, WG_KEY_LEN);
- if (r < 0)
- break;
-
- r = sd_netlink_message_append_u32(message, WGPEER_A_FLAGS, peer->flags);
- if (r < 0)
- break;
-
- r = sd_netlink_message_append_u16(message, WGPEER_A_PERSISTENT_KEEPALIVE_INTERVAL, peer->persistent_keepalive_interval);
- if (r < 0)
- break;
-
- if (peer->endpoint.sa.sa_family == AF_INET) {
- r = sd_netlink_message_append_data(message, WGPEER_A_ENDPOINT, &peer->endpoint.in, sizeof(peer->endpoint.in));
- if (r < 0)
- break;
- } else if (peer->endpoint.sa.sa_family == AF_INET6) {
- r = sd_netlink_message_append_data(message, WGPEER_A_ENDPOINT, &peer->endpoint.in6, sizeof(peer->endpoint.in6));
- if (r < 0)
- break;
- }
-
- mask_start = peer->ipmasks;
- }
-
- r = sd_netlink_message_open_container(message, WGPEER_A_ALLOWEDIPS);
- if (r < 0) {
- mask_start = NULL;
- break;
- }
- j = 0;
- LIST_FOREACH(ipmasks, mask, mask_start) {
- r = sd_netlink_message_open_array(message, ++j);
- if (r < 0)
- break;
-
- r = sd_netlink_message_append_u16(message, WGALLOWEDIP_A_FAMILY, mask->family);
- if (r < 0)
- break;
-
- if (mask->family == AF_INET) {
- r = sd_netlink_message_append_in_addr(message, WGALLOWEDIP_A_IPADDR, &mask->ip.in);
- if (r < 0)
- break;
- } else if (mask->family == AF_INET6) {
- r = sd_netlink_message_append_in6_addr(message, WGALLOWEDIP_A_IPADDR, &mask->ip.in6);
- if (r < 0)
- break;
- }
-
- r = sd_netlink_message_append_u8(message, WGALLOWEDIP_A_CIDR_MASK, mask->cidr);
- if (r < 0)
- break;
-
- r = sd_netlink_message_close_container(message);
- if (r < 0)
- return log_netdev_error_errno(netdev, r, "Could not add wireguard allowed ip: %m");
- }
- mask_start = mask;
- if (mask_start) {
- r = sd_netlink_message_cancel_array(message);
- if (r < 0)
- return log_netdev_error_errno(netdev, r, "Could not cancel wireguard allowed ip message attribute: %m");
- }
- r = sd_netlink_message_close_container(message);
- if (r < 0)
- return log_netdev_error_errno(netdev, r, "Could not add wireguard allowed ip: %m");
-
- r = sd_netlink_message_close_container(message);
- if (r < 0)
- return log_netdev_error_errno(netdev, r, "Could not add wireguard peer: %m");
- }
-
- peer_start = peer;
- if (peer_start && !mask_start) {
- r = sd_netlink_message_cancel_array(message);
- if (r < 0)
- return log_netdev_error_errno(netdev, r, "Could not cancel wireguard peers: %m");
}
+ peer_start = peer; /* Start next cycle from this peer. */
r = sd_netlink_message_close_container(message);
if (r < 0)
@@ -192,8 +224,7 @@ static int set_wireguard_interface(NetDev *netdev) {
r = sd_netlink_send(netdev->manager->genl, message, &serial);
if (r < 0)
return log_netdev_error_errno(netdev, r, "Could not set wireguard device: %m");
-
- } while (peer || mask_start);
+ }
return 0;
}
@@ -224,8 +255,7 @@ static int on_resolve_retry(sd_event_source *s, usec_t usec, void *userdata) {
w = WIREGUARD(netdev);
assert(w);
- if (!netdev->manager)
- /* The netdev is detached. */
+ if (!netdev_is_managed(netdev))
return 0;
assert(!w->unresolved_endpoints);
@@ -260,8 +290,7 @@ static int wireguard_resolve_handler(sd_resolve_query *q,
w = WIREGUARD(netdev);
assert(w);
- if (!netdev->manager)
- /* The netdev is detached. */
+ if (!netdev_is_managed(netdev))
return 0;
if (ret != 0) {
@@ -280,7 +309,7 @@ static int wireguard_resolve_handler(sd_resolve_query *q,
return 0;
}
- set_wireguard_interface(netdev);
+ (void) wireguard_set_interface(netdev);
if (w->failed_endpoints) {
_cleanup_(sd_event_source_unrefp) sd_event_source *s = NULL;
@@ -355,7 +384,7 @@ static int netdev_wireguard_post_create(NetDev *netdev, Link *link, sd_netlink_m
w = WIREGUARD(netdev);
assert(w);
- set_wireguard_interface(netdev);
+ (void) wireguard_set_interface(netdev);
resolve_endpoints(netdev);
return 0;
}
diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c
index 9f0a22b827..3cdbd9e37e 100644
--- a/src/network/networkd-address.c
+++ b/src/network/networkd-address.c
@@ -5,6 +5,7 @@
#include "alloc-util.h"
#include "conf-parser.h"
#include "firewall-util.h"
+#include "missing_network.h"
#include "netlink-util.h"
#include "networkd-address.h"
#include "networkd-manager.h"
@@ -351,18 +352,17 @@ int address_update(
address->cinfo = *cinfo;
link_update_operstate(address->link);
+ link_check_ready(address->link);
- if (!ready && address_is_ready(address)) {
- link_check_ready(address->link);
+ if (!ready &&
+ address_is_ready(address) &&
+ address->family == AF_INET6 &&
+ in_addr_is_link_local(AF_INET6, &address->in_addr) > 0 &&
+ in_addr_is_null(AF_INET6, (const union in_addr_union*) &address->link->ipv6ll_address) > 0) {
- if (address->family == AF_INET6 &&
- in_addr_is_link_local(AF_INET6, &address->in_addr) > 0 &&
- in_addr_is_null(AF_INET6, (const union in_addr_union*) &address->link->ipv6ll_address) > 0) {
-
- r = link_ipv6ll_gained(address->link, &address->in_addr.in6);
- if (r < 0)
- return r;
- }
+ r = link_ipv6ll_gained(address->link, &address->in_addr.in6);
+ if (r < 0)
+ return r;
}
return 0;
@@ -632,14 +632,10 @@ int address_configure(
r = sd_netlink_message_append_in6_addr(req, IFA_ADDRESS, &address->in_addr_peer.in6);
if (r < 0)
return log_error_errno(r, "Could not append IFA_ADDRESS attribute: %m");
- } else {
- if (address->family == AF_INET) {
- if (address->prefixlen <= 30) {
- r = sd_netlink_message_append_in_addr(req, IFA_BROADCAST, &address->broadcast);
- if (r < 0)
- return log_error_errno(r, "Could not append IFA_BROADCAST attribute: %m");
- }
- }
+ } else if (address->family == AF_INET && address->prefixlen <= 30) {
+ r = sd_netlink_message_append_in_addr(req, IFA_BROADCAST, &address->broadcast);
+ if (r < 0)
+ return log_error_errno(r, "Could not append IFA_BROADCAST attribute: %m");
}
if (address->label) {
@@ -648,8 +644,7 @@ int address_configure(
return log_error_errno(r, "Could not append IFA_LABEL attribute: %m");
}
- r = sd_netlink_message_append_cache_info(req, IFA_CACHEINFO,
- &address->cinfo);
+ r = sd_netlink_message_append_cache_info(req, IFA_CACHEINFO, &address->cinfo);
if (r < 0)
return log_error_errno(r, "Could not append IFA_CACHEINFO attribute: %m");
@@ -657,8 +652,7 @@ int address_configure(
if (r < 0)
return r;
- r = netlink_call_async(link->manager->rtnl, NULL, req, callback,
- link_netlink_destroy_callback, link);
+ r = netlink_call_async(link->manager->rtnl, NULL, req, callback, link_netlink_destroy_callback, link);
if (r < 0) {
address_release(address);
return log_error_errno(r, "Could not send rtnetlink message: %m");
@@ -666,7 +660,10 @@ int address_configure(
link_ref(link);
- r = address_add(link, address->family, &address->in_addr, address->prefixlen, NULL);
+ if (address->family == AF_INET6 && !in_addr_is_null(address->family, &address->in_addr_peer))
+ r = address_add(link, address->family, &address->in_addr_peer, address->prefixlen, NULL);
+ else
+ r = address_add(link, address->family, &address->in_addr, address->prefixlen, NULL);
if (r < 0) {
address_release(address);
return log_error_errno(r, "Could not add address: %m");
@@ -752,7 +749,15 @@ int config_parse_address(const char *unit,
return r;
/* Address=address/prefixlen */
- r = in_addr_default_prefix_from_string_auto(rvalue, &f, &buffer, &prefixlen);
+ r = in_addr_prefix_from_string_auto_internal(rvalue, PREFIXLEN_REFUSE, &f, &buffer, &prefixlen);
+ if (r == -ENOANO) {
+ log_syntax(unit, LOG_ERR, filename, line, r,
+ "An address '%s' is specified without prefix length. "
+ "The behavior of parsing addresses without prefix length will be changed in the future release. "
+ "Please specify prefix length explicitly.", rvalue);
+
+ r = in_addr_prefix_from_string_auto_internal(rvalue, PREFIXLEN_LEGACY, &f, &buffer, &prefixlen);
+ }
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r, "Invalid address '%s', ignoring assignment: %m", rvalue);
return 0;
diff --git a/src/network/networkd-brvlan.c b/src/network/networkd-brvlan.c
index 1d18e29b7c..8377623da4 100644
--- a/src/network/networkd-brvlan.c
+++ b/src/network/networkd-brvlan.c
@@ -9,6 +9,7 @@
#include "alloc-util.h"
#include "conf-parser.h"
+#include "missing_if_bridge.h"
#include "netlink-util.h"
#include "networkd-brvlan.h"
#include "networkd-link.h"
@@ -22,7 +23,7 @@ static bool is_bit_set(unsigned bit, uint32_t scope) {
return scope & (1 << bit);
}
-static inline void set_bit(unsigned nr, uint32_t *addr) {
+static void set_bit(unsigned nr, uint32_t *addr) {
if (nr < BRIDGE_VLAN_BITMAP_MAX)
addr[nr / 32] |= (((uint32_t) 1) << (nr % 32));
}
diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c
index 980d49e4ff..d8ac4552f4 100644
--- a/src/network/networkd-dhcp4.c
+++ b/src/network/networkd-dhcp4.c
@@ -690,7 +690,7 @@ int dhcp4_set_client_identifier(Link *link) {
if (duid->type == DUID_TYPE_LLT && duid->raw_data_len == 0)
r = sd_dhcp_client_set_duid_llt(link->dhcp_client,
- duid->llt_time);
+ duid->llt_time);
else
r = sd_dhcp_client_set_duid(link->dhcp_client,
duid->type,
diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c
index ed6b9df72b..c1fba03f9f 100644
--- a/src/network/networkd-dhcp6.c
+++ b/src/network/networkd-dhcp6.c
@@ -11,6 +11,7 @@
#include "hashmap.h"
#include "hostname-util.h"
+#include "missing_network.h"
#include "network-internal.h"
#include "networkd-link.h"
#include "networkd-manager.h"
@@ -254,7 +255,6 @@ static int dhcp6_route_handler(sd_netlink *nl, sd_netlink_message *m, Link *link
return 1;
}
-
static int dhcp6_lease_pd_prefix_acquired(sd_dhcp6_client *client, Link *link) {
int r;
sd_dhcp6_lease *lease;
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index e2851df31a..22392d70bc 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -517,8 +517,6 @@ static void link_detach_from_manager(Link *link) {
hashmap_remove(link->manager->links, INT_TO_PTR(link->ifindex));
set_remove(link->manager->links_requesting_uuid, link);
link_clean(link);
-
- link->manager = NULL;
}
static Link *link_free(Link *link) {
@@ -730,70 +728,16 @@ static void link_enter_configured(Link *link) {
link_dirty(link);
}
-void link_check_ready(Link *link) {
- Address *a;
- Iterator i;
-
- assert(link);
-
- if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
- return;
-
- if (!link->network)
- return;
-
- if (!link->addresses_configured)
- return;
-
- if (!link->neighbors_configured)
- return;
-
- if (!link->static_routes_configured)
- return;
-
- if (!link->routing_policy_rules_configured)
- return;
-
- if (link_ipv4ll_enabled(link))
- if (!link->ipv4ll_address ||
- !link->ipv4ll_route)
- return;
-
- if (!link->network->bridge) {
-
- if (link_ipv6ll_enabled(link))
- if (in_addr_is_null(AF_INET6, (const union in_addr_union*) &link->ipv6ll_address) > 0)
- return;
-
- if ((link_dhcp4_enabled(link) && !link_dhcp6_enabled(link) &&
- !link->dhcp4_configured) ||
- (link_dhcp6_enabled(link) && !link_dhcp4_enabled(link) &&
- !link->dhcp6_configured) ||
- (link_dhcp4_enabled(link) && link_dhcp6_enabled(link) &&
- !link->dhcp4_configured && !link->dhcp6_configured))
- return;
-
- if (link_ipv6_accept_ra_enabled(link) && !link->ndisc_configured)
- return;
- }
-
- SET_FOREACH(a, link->addresses, i)
- if (!address_is_ready(a))
- return;
-
- if (link->state != LINK_STATE_CONFIGURED)
- link_enter_configured(link);
-
- return;
-}
-
-static int link_set_routing_policy_rule(Link *link) {
+static int link_request_set_routing_policy_rule(Link *link) {
RoutingPolicyRule *rule, *rrule = NULL;
int r;
assert(link);
assert(link->network);
+ link_set_state(link, LINK_STATE_CONFIGURING);
+ link->routing_policy_rules_configured = false;
+
LIST_FOREACH(rules, rule, link->network->rules) {
r = routing_policy_rule_get(link->manager, rule->family, &rule->from, rule->from_prefixlen, &rule->to,
rule->to_prefixlen, rule->tos, rule->fwmark, rule->table, rule->iif, rule->oif,
@@ -865,8 +809,11 @@ static int link_request_set_routes(Link *link) {
assert(link->state != _LINK_STATE_INVALID);
link_set_state(link, LINK_STATE_CONFIGURING);
+ link->static_routes_configured = false;
- (void) link_set_routing_policy_rule(link);
+ r = link_request_set_routing_policy_rule(link);
+ if (r < 0)
+ return r;
/* First add the routes that enable us to talk to gateways, then add in the others that need a gateway. */
for (phase = 0; phase < _PHASE_MAX; phase++)
@@ -894,6 +841,68 @@ static int link_request_set_routes(Link *link) {
return 0;
}
+void link_check_ready(Link *link) {
+ Address *a;
+ Iterator i;
+
+ assert(link);
+
+ if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+ return;
+
+ if (!link->network)
+ return;
+
+ if (!link->addresses_configured)
+ return;
+
+ if (!link->neighbors_configured)
+ return;
+
+ SET_FOREACH(a, link->addresses, i)
+ if (!address_is_ready(a))
+ return;
+
+ if (!link->addresses_ready) {
+ link->addresses_ready = true;
+ link_request_set_routes(link);
+ }
+
+ if (!link->static_routes_configured)
+ return;
+
+ if (!link->routing_policy_rules_configured)
+ return;
+
+ if (link_ipv4ll_enabled(link))
+ if (!link->ipv4ll_address ||
+ !link->ipv4ll_route)
+ return;
+
+ if (!link->network->bridge) {
+
+ if (link_ipv6ll_enabled(link))
+ if (in_addr_is_null(AF_INET6, (const union in_addr_union*) &link->ipv6ll_address) > 0)
+ return;
+
+ if ((link_dhcp4_enabled(link) && !link_dhcp6_enabled(link) &&
+ !link->dhcp4_configured) ||
+ (link_dhcp6_enabled(link) && !link_dhcp4_enabled(link) &&
+ !link->dhcp6_configured) ||
+ (link_dhcp4_enabled(link) && link_dhcp6_enabled(link) &&
+ !link->dhcp4_configured && !link->dhcp6_configured))
+ return;
+
+ if (link_ipv6_accept_ra_enabled(link) && !link->ndisc_configured)
+ return;
+ }
+
+ if (link->state != LINK_STATE_CONFIGURED)
+ link_enter_configured(link);
+
+ return;
+}
+
static int link_request_set_neighbors(Link *link) {
Neighbor *neighbor;
int r;
@@ -903,6 +912,7 @@ static int link_request_set_neighbors(Link *link) {
assert(link->state != _LINK_STATE_INVALID);
link_set_state(link, LINK_STATE_CONFIGURING);
+ link->neighbors_configured = false;
LIST_FOREACH(neighbors, neighbor, link->network->neighbors) {
r = neighbor_configure(neighbor, link, NULL);
@@ -947,7 +957,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link)
if (link->address_messages == 0) {
log_link_debug(link, "Addresses set");
link->addresses_configured = true;
- link_request_set_routes(link);
+ link_check_ready(link);
}
return 1;
@@ -1073,16 +1083,29 @@ static int link_request_set_addresses(Link *link) {
assert(link->network);
assert(link->state != _LINK_STATE_INVALID);
+ link_set_state(link, LINK_STATE_CONFIGURING);
+
+ /* Reset all *_configured flags we are configuring. */
+ link->addresses_configured = false;
+ link->addresses_ready = false;
+ link->neighbors_configured = false;
+ link->static_routes_configured = false;
+ link->routing_policy_rules_configured = false;
+
r = link_set_bridge_fdb(link);
if (r < 0)
return r;
- link_set_state(link, LINK_STATE_CONFIGURING);
-
- link_request_set_neighbors(link);
+ r = link_request_set_neighbors(link);
+ if (r < 0)
+ return r;
LIST_FOREACH(addresses, ad, link->network->static_addresses) {
- r = address_configure(ad, link, address_handler, false);
+ bool update;
+
+ update = address_get(link, ad->family, &ad->in_addr, ad->prefixlen, NULL) > 0;
+
+ r = address_configure(ad, link, address_handler, update);
if (r < 0) {
log_link_warning_errno(link, r, "Could not set addresses: %m");
link_enter_failed(link);
@@ -1207,14 +1230,15 @@ static int link_request_set_addresses(Link *link) {
return r;
}
}
+ if (!sd_dhcp_server_is_running(link->dhcp_server)) {
+ r = sd_dhcp_server_start(link->dhcp_server);
+ if (r < 0) {
+ log_link_warning_errno(link, r, "Could not start DHCPv4 server instance: %m");
- r = sd_dhcp_server_start(link->dhcp_server);
- if (r < 0) {
- log_link_warning_errno(link, r, "Could not start DHCPv4 server instance: %m");
-
- link_enter_failed(link);
+ link_enter_failed(link);
- return 0;
+ return 0;
+ }
}
log_link_debug(link, "Offering DHCPv4 leases");
@@ -1222,7 +1246,7 @@ static int link_request_set_addresses(Link *link) {
if (link->address_messages == 0) {
link->addresses_configured = true;
- link_request_set_routes(link);
+ link_check_ready(link);
} else
log_link_debug(link, "Setting addresses");
@@ -1739,6 +1763,84 @@ bool link_has_carrier(Link *link) {
return false;
}
+static int link_address_genmode_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
+ int r;
+
+ assert(link);
+
+ if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
+ return 1;
+
+ r = sd_netlink_message_get_errno(m);
+ if (r < 0)
+ log_link_warning_errno(link, r, "Could not set address genmode for interface: %m");
+
+ return 1;
+}
+
+static int link_configure_addrgen_mode(Link *link) {
+ _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
+ uint8_t ipv6ll_mode;
+ int r;
+
+ assert(link);
+ assert(link->network);
+ assert(link->manager);
+ assert(link->manager->rtnl);
+
+ log_link_debug(link, "Setting address genmode for link");
+
+ r = sd_rtnl_message_new_link(link->manager->rtnl, &req, RTM_SETLINK, link->ifindex);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not allocate RTM_SETLINK message: %m");
+
+ r = sd_netlink_message_open_container(req, IFLA_AF_SPEC);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not open IFLA_AF_SPEC container: %m");
+
+ r = sd_netlink_message_open_container(req, AF_INET6);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not open AF_INET6 container: %m");
+
+ if (!link_ipv6ll_enabled(link))
+ ipv6ll_mode = IN6_ADDR_GEN_MODE_NONE;
+ else {
+ const char *p = NULL;
+ _cleanup_free_ char *stable_secret = NULL;
+
+ p = strjoina("/proc/sys/net/ipv6/conf/", link->ifname, "/stable_secret");
+
+ /* The file may not exist. And event if it exists, when stable_secret is unset,
+ * then reading the file fails and EIO is returned. */
+ r = read_one_line_file(p, &stable_secret);
+ if (r < 0)
+ ipv6ll_mode = IN6_ADDR_GEN_MODE_EUI64;
+ else
+ ipv6ll_mode = IN6_ADDR_GEN_MODE_STABLE_PRIVACY;
+ }
+
+ r = sd_netlink_message_append_u8(req, IFLA_INET6_ADDR_GEN_MODE, ipv6ll_mode);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not append IFLA_INET6_ADDR_GEN_MODE: %m");
+
+ r = sd_netlink_message_close_container(req);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not close AF_INET6 container: %m");
+
+ r = sd_netlink_message_close_container(req);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not close IFLA_AF_SPEC container: %m");
+
+ r = netlink_call_async(link->manager->rtnl, NULL, req, link_address_genmode_handler,
+ link_netlink_destroy_callback, link);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not send rtnetlink message: %m");
+
+ link_ref(link);
+
+ return 0;
+}
+
static int link_up_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
int r;
@@ -1755,9 +1857,8 @@ static int link_up_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link)
return 1;
}
-int link_up(Link *link) {
+static int link_up(Link *link) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
- uint8_t ipv6ll_mode;
int r;
assert(link);
@@ -1788,34 +1889,16 @@ int link_up(Link *link) {
return log_link_error_errno(link, r, "Could not set MAC address: %m");
}
- r = sd_netlink_message_open_container(req, IFLA_AF_SPEC);
- if (r < 0)
- return log_link_error_errno(link, r, "Could not open IFLA_AF_SPEC container: %m");
-
if (link_ipv6_enabled(link)) {
+ r = sd_netlink_message_open_container(req, IFLA_AF_SPEC);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not open IFLA_AF_SPEC container: %m");
+
/* if the kernel lacks ipv6 support setting IFF_UP fails if any ipv6 options are passed */
r = sd_netlink_message_open_container(req, AF_INET6);
if (r < 0)
return log_link_error_errno(link, r, "Could not open AF_INET6 container: %m");
- if (!link_ipv6ll_enabled(link))
- ipv6ll_mode = IN6_ADDR_GEN_MODE_NONE;
- else {
- const char *p = NULL;
- _cleanup_free_ char *stable_secret = NULL;
-
- p = strjoina("/proc/sys/net/ipv6/conf/", link->ifname, "/stable_secret");
- r = read_one_line_file(p, &stable_secret);
-
- if (r < 0)
- ipv6ll_mode = IN6_ADDR_GEN_MODE_EUI64;
- else
- ipv6ll_mode = IN6_ADDR_GEN_MODE_STABLE_PRIVACY;
- }
- r = sd_netlink_message_append_u8(req, IFLA_INET6_ADDR_GEN_MODE, ipv6ll_mode);
- if (r < 0)
- return log_link_error_errno(link, r, "Could not append IFLA_INET6_ADDR_GEN_MODE: %m");
-
if (!in_addr_is_null(AF_INET6, &link->network->ipv6_token)) {
r = sd_netlink_message_append_in6_addr(req, IFLA_INET6_TOKEN, &link->network->ipv6_token.in6);
if (r < 0)
@@ -1825,11 +1908,11 @@ int link_up(Link *link) {
r = sd_netlink_message_close_container(req);
if (r < 0)
return log_link_error_errno(link, r, "Could not close AF_INET6 container: %m");
- }
- r = sd_netlink_message_close_container(req);
- if (r < 0)
- return log_link_error_errno(link, r, "Could not close IFLA_AF_SPEC container: %m");
+ r = sd_netlink_message_close_container(req);
+ if (r < 0)
+ return log_link_error_errno(link, r, "Could not close IFLA_AF_SPEC container: %m");
+ }
r = netlink_call_async(link->manager->rtnl, NULL, req, link_up_handler,
link_netlink_destroy_callback, link);
@@ -2918,6 +3001,12 @@ static int link_configure(Link *link) {
return r;
}
+ if (socket_ipv6_is_supported()) {
+ r = link_configure_addrgen_mode(link);
+ if (r < 0)
+ return r;
+ }
+
return link_configure_after_setting_mtu(link);
}
diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h
index 00e68fdfaa..dcb1ea68dd 100644
--- a/src/network/networkd-link.h
+++ b/src/network/networkd-link.h
@@ -82,6 +82,7 @@ typedef struct Link {
Set *routes_foreign;
bool addresses_configured;
+ bool addresses_ready;
sd_dhcp_client *dhcp_client;
sd_dhcp_lease *dhcp_lease;
@@ -142,7 +143,6 @@ int link_get(Manager *m, int ifindex, Link **ret);
int link_add(Manager *manager, sd_netlink_message *message, Link **ret);
void link_drop(Link *link);
-int link_up(Link *link);
int link_down(Link *link);
void link_enter_failed(Link *link);
diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
index 81c81f18af..c8d369e2a0 100644
--- a/src/network/networkd-manager.c
+++ b/src/network/networkd-manager.c
@@ -1456,7 +1456,7 @@ void manager_free(Manager *m) {
sd_device_monitor_unref(m->device_monitor);
- sd_bus_unref(m->bus);
+ sd_bus_flush_close_unref(m->bus);
free(m->dynamic_timezone);
free(m->dynamic_hostname);
diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c
index 80bfd2cba1..e5b8d11555 100644
--- a/src/network/networkd-ndisc.c
+++ b/src/network/networkd-ndisc.c
@@ -8,6 +8,7 @@
#include "sd-ndisc.h"
+#include "missing_network.h"
#include "networkd-ndisc.h"
#include "networkd-route.h"
#include "strv.h"
diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c
index ccc1c3ce89..12344ec695 100644
--- a/src/network/networkd-network.c
+++ b/src/network/networkd-network.c
@@ -98,12 +98,13 @@ void network_apply_anonymize_if_set(Network *network) {
}
int network_load_one(Manager *manager, const char *filename) {
+ _cleanup_free_ char *fname = NULL, *name = NULL;
_cleanup_(network_freep) Network *network = NULL;
_cleanup_fclose_ FILE *file = NULL;
- char *d;
const char *dropin_dirname;
- Route *route;
Address *address;
+ Route *route;
+ char *d;
int r;
assert(manager);
@@ -122,12 +123,30 @@ int network_load_one(Manager *manager, const char *filename) {
return 0;
}
+ fname = strdup(filename);
+ if (!fname)
+ return log_oom();
+
+ name = strdup(basename(filename));
+ if (!name)
+ return log_oom();
+
+ d = strrchr(name, '.');
+ if (!d)
+ return -EINVAL;
+
+ *d = '\0';
+
+ dropin_dirname = strjoina(name, ".network.d");
+
network = new(Network, 1);
if (!network)
return log_oom();
*network = (Network) {
.manager = manager,
+ .filename = TAKE_PTR(fname),
+ .name = TAKE_PTR(name),
.required_for_online = true,
.dhcp = ADDRESS_FAMILY_NO,
@@ -190,22 +209,6 @@ int network_load_one(Manager *manager, const char *filename) {
.ipv6_accept_ra_route_table = RT_TABLE_MAIN,
};
- network->filename = strdup(filename);
- if (!network->filename)
- return log_oom();
-
- network->name = strdup(basename(filename));
- if (!network->name)
- return log_oom();
-
- d = strrchr(network->name, '.');
- if (!d)
- return -EINVAL;
-
- *d = '\0';
-
- dropin_dirname = strjoina(network->name, ".network.d");
-
r = config_parse_many(filename, network_dirs, dropin_dirname,
"Match\0"
"Link\0"
@@ -228,8 +231,11 @@ int network_load_one(Manager *manager, const char *filename) {
"CAN\0",
config_item_perf_lookup, network_network_gperf_lookup,
CONFIG_PARSE_WARN, network);
- if (r < 0)
+ if (r < 0) {
+ /* Unset manager here. Otherwise, LIST_REMOVE() in network_free() fails. */
+ network->manager = NULL;
return r;
+ }
network_apply_anonymize_if_set(network);
@@ -253,21 +259,19 @@ int network_load_one(Manager *manager, const char *filename) {
if (r < 0)
return r;
- LIST_FOREACH(routes, route, network->static_routes) {
+ LIST_FOREACH(routes, route, network->static_routes)
if (!route->family) {
log_warning("Route section without Gateway field configured in %s. "
"Ignoring", filename);
return 0;
}
- }
- LIST_FOREACH(addresses, address, network->static_addresses) {
+ LIST_FOREACH(addresses, address, network->static_addresses)
if (!address->family) {
log_warning("Address section without Address field configured in %s. "
"Ignoring", filename);
return 0;
}
- }
network = NULL;
diff --git a/src/network/wait-online/manager.c b/src/network/wait-online/manager.c
index e1ccc9ff67..67218b6db3 100644
--- a/src/network/wait-online/manager.c
+++ b/src/network/wait-online/manager.c
@@ -89,16 +89,25 @@ static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void *
assert(mm);
r = sd_netlink_message_get_type(mm, &type);
- if (r < 0)
- goto fail;
+ if (r < 0) {
+ log_warning_errno(r, "rtnl: Could not get message type, ignoring: %m");
+ return 0;
+ }
r = sd_rtnl_message_link_get_ifindex(mm, &ifindex);
- if (r < 0)
- goto fail;
+ if (r < 0) {
+ log_warning_errno(r, "rtnl: Could not get ifindex from link, ignoring: %m");
+ return 0;
+ } else if (ifindex <= 0) {
+ log_warning("rtnl: received link message with invalid ifindex %d, ignoring", ifindex);
+ return 0;
+ }
r = sd_netlink_message_read_string(mm, IFLA_IFNAME, &ifname);
- if (r < 0)
- goto fail;
+ if (r < 0) {
+ log_warning_errno(r, "rtnl: Received link message without ifname, ignoring: %m");
+ return 0;
+ }
l = hashmap_get(m->links, INT_TO_PTR(ifindex));
@@ -110,16 +119,16 @@ static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void *
r = link_new(m, &l, ifindex, ifname);
if (r < 0)
- goto fail;
+ return log_error_errno(r, "Failed to create link object: %m");
r = link_update_monitor(l);
if (r < 0)
- goto fail;
+ return log_error_errno(r, "Failed to initialize link object: %m");
}
r = link_update_rtnl(l, mm);
if (r < 0)
- goto fail;
+ return log_warning_errno(r, "Failed to process RTNL link message: %m");;
break;
@@ -133,10 +142,6 @@ static int manager_process_link(sd_netlink *rtnl, sd_netlink_message *mm, void *
}
return 0;
-
-fail:
- log_warning_errno(r, "Failed to process RTNL link message: %m");
- return 0;
}
static int on_rtnl_event(sd_netlink *rtnl, sd_netlink_message *mm, void *userdata) {
diff --git a/src/nspawn/nspawn-network.c b/src/nspawn/nspawn-network.c
index 9d0f8a9956..c028b5755a 100644
--- a/src/nspawn/nspawn-network.c
+++ b/src/nspawn/nspawn-network.c
@@ -67,7 +67,7 @@ static int generate_mac(
if (idx > 0)
sz += sizeof(idx);
- v = alloca(sz);
+ v = newa(uint8_t, sz);
/* fetch some persistent data unique to the host */
r = sd_id128_get_machine((sd_id128_t*) v);
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 91c97b60a7..e0c2d711e6 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -1964,11 +1964,11 @@ static int setup_hostname(void) {
}
static int setup_journal(const char *directory) {
- sd_id128_t this_id;
_cleanup_free_ char *d = NULL;
- const char *p, *q;
+ const char *dirname, *p, *q;
+ sd_id128_t this_id;
+ char id[33];
bool try;
- char id[33], *dirname;
int r;
/* Don't link journals in ephemeral mode */
@@ -4230,6 +4230,11 @@ int main(int argc, char *argv[]) {
if (r < 0)
goto finish;
+ /* Ignore SIGPIPE here, because we use splice() on the ptyfwd stuff and that will generate SIGPIPE if
+ * the result is closed. Note that the container payload child will reset signal mask+handler anyway,
+ * so just turning this off here means we only turn it off in nspawn itself, not any children. */
+ (void) ignore_signals(SIGPIPE, -1);
+
n_fd_passed = sd_listen_fds(false);
if (n_fd_passed > 0) {
r = fdset_new_listen_fds(&fds, false);
diff --git a/src/nss-myhostname/nss-myhostname.c b/src/nss-myhostname/nss-myhostname.c
index 5abc0c91bf..e491351dee 100644
--- a/src/nss-myhostname/nss-myhostname.c
+++ b/src/nss-myhostname/nss-myhostname.c
@@ -74,6 +74,7 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
} else {
hn = gethostname_malloc();
if (!hn) {
+ UNPROTECT_ERRNO;
*errnop = ENOMEM;
*h_errnop = NO_RECOVERY;
return NSS_STATUS_TRYAGAIN;
@@ -96,6 +97,7 @@ enum nss_status _nss_myhostname_gethostbyname4_r(
l = strlen(canonical);
ms = ALIGN(l+1) + ALIGN(sizeof(struct gaih_addrtuple)) * (n_addresses > 0 ? n_addresses : 2);
if (buflen < ms) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
*h_errnop = NETDB_INTERNAL;
return NSS_STATUS_TRYAGAIN;
@@ -186,6 +188,8 @@ static enum nss_status fill_in_hostent(
assert(errnop);
assert(h_errnop);
+ PROTECT_ERRNO;
+
alen = FAMILY_ADDRESS_SIZE(af);
for (a = addresses, n = 0, c = 0; n < n_addresses; a++, n++)
@@ -202,6 +206,7 @@ static enum nss_status fill_in_hostent(
(c > 0 ? c+1 : 2) * sizeof(char*);
if (buflen < ms) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
*h_errnop = NETDB_INTERNAL;
return NSS_STATUS_TRYAGAIN;
@@ -321,6 +326,7 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
af = AF_INET;
if (!IN_SET(af, AF_INET, AF_INET6)) {
+ UNPROTECT_ERRNO;
*errnop = EAFNOSUPPORT;
*h_errnop = NO_DATA;
return NSS_STATUS_UNAVAIL;
@@ -343,6 +349,7 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
} else {
hn = gethostname_malloc();
if (!hn) {
+ UNPROTECT_ERRNO;
*errnop = ENOMEM;
*h_errnop = NO_RECOVERY;
return NSS_STATUS_TRYAGAIN;
@@ -362,6 +369,8 @@ enum nss_status _nss_myhostname_gethostbyname3_r(
local_address_ipv4 = LOCALADDRESS_IPV4;
}
+ UNPROTECT_ERRNO;
+
return fill_in_hostent(
canonical, additional,
af,
@@ -401,12 +410,14 @@ enum nss_status _nss_myhostname_gethostbyaddr2_r(
assert(h_errnop);
if (!IN_SET(af, AF_INET, AF_INET6)) {
+ UNPROTECT_ERRNO;
*errnop = EAFNOSUPPORT;
*h_errnop = NO_DATA;
return NSS_STATUS_UNAVAIL;
}
if (len != FAMILY_ADDRESS_SIZE(af)) {
+ UNPROTECT_ERRNO;
*errnop = EINVAL;
*h_errnop = NO_RECOVERY;
return NSS_STATUS_UNAVAIL;
@@ -461,6 +472,7 @@ found:
if (!canonical || additional_from_hostname) {
hn = gethostname_malloc();
if (!hn) {
+ UNPROTECT_ERRNO;
*errnop = ENOMEM;
*h_errnop = NO_RECOVERY;
return NSS_STATUS_TRYAGAIN;
@@ -472,6 +484,7 @@ found:
additional = hn;
}
+ UNPROTECT_ERRNO;
return fill_in_hostent(
canonical, additional,
af,
diff --git a/src/nss-mymachines/nss-mymachines.c b/src/nss-mymachines/nss-mymachines.c
index 3d1fc28353..486a658958 100644
--- a/src/nss-mymachines/nss-mymachines.c
+++ b/src/nss-mymachines/nss-mymachines.c
@@ -153,6 +153,7 @@ enum nss_status _nss_mymachines_gethostbyname4_r(
l = strlen(name);
ms = ALIGN(l+1) + ALIGN(sizeof(struct gaih_addrtuple)) * c;
if (buflen < ms) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
*h_errnop = NETDB_INTERNAL;
return NSS_STATUS_TRYAGAIN;
@@ -227,6 +228,7 @@ enum nss_status _nss_mymachines_gethostbyname4_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
*h_errnop = NO_DATA;
return NSS_STATUS_UNAVAIL;
@@ -313,6 +315,7 @@ enum nss_status _nss_mymachines_gethostbyname3_r(
ms = ALIGN(l+1) + c * ALIGN(alen) + (c+2) * sizeof(char*);
if (buflen < ms) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
*h_errnop = NETDB_INTERNAL;
return NSS_STATUS_TRYAGAIN;
@@ -396,6 +399,7 @@ enum nss_status _nss_mymachines_gethostbyname3_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
*h_errnop = NO_DATA;
return NSS_STATUS_UNAVAIL;
@@ -484,6 +488,7 @@ enum nss_status _nss_mymachines_getpwnam_r(
l = strlen(name);
if (buflen < l+1) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
@@ -501,6 +506,7 @@ enum nss_status _nss_mymachines_getpwnam_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
return NSS_STATUS_UNAVAIL;
}
@@ -564,6 +570,7 @@ enum nss_status _nss_mymachines_getpwuid_r(
return NSS_STATUS_NOTFOUND;
if (snprintf(buffer, buflen, "vu-%s-" UID_FMT, machine, (uid_t) mapped) >= (int) buflen) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
@@ -579,6 +586,7 @@ enum nss_status _nss_mymachines_getpwuid_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
return NSS_STATUS_UNAVAIL;
}
@@ -662,6 +670,7 @@ enum nss_status _nss_mymachines_getgrnam_r(
l = sizeof(char*) + strlen(name) + 1;
if (buflen < l) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
@@ -677,6 +686,7 @@ enum nss_status _nss_mymachines_getgrnam_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
return NSS_STATUS_UNAVAIL;
}
@@ -740,12 +750,14 @@ enum nss_status _nss_mymachines_getgrgid_r(
return NSS_STATUS_NOTFOUND;
if (buflen < sizeof(char*) + 1) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
memzero(buffer, sizeof(char*));
if (snprintf(buffer + sizeof(char*), buflen - sizeof(char*), "vg-%s-" GID_FMT, machine, (gid_t) mapped) >= (int) buflen) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
@@ -758,6 +770,7 @@ enum nss_status _nss_mymachines_getgrgid_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
return NSS_STATUS_UNAVAIL;
}
diff --git a/src/nss-resolve/nss-resolve.c b/src/nss-resolve/nss-resolve.c
index a28b5d8ba8..8370fed076 100644
--- a/src/nss-resolve/nss-resolve.c
+++ b/src/nss-resolve/nss-resolve.c
@@ -186,6 +186,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
l = strlen(canonical);
ms = ALIGN(l+1) + ALIGN(sizeof(struct gaih_addrtuple)) * c;
if (buflen < ms) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
*h_errnop = NETDB_INTERNAL;
return NSS_STATUS_TRYAGAIN;
@@ -267,6 +268,7 @@ enum nss_status _nss_resolve_gethostbyname4_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
*h_errnop = NO_RECOVERY;
return ret;
@@ -364,6 +366,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
ms = ALIGN(l+1) + c * ALIGN(alen) + (c+2) * sizeof(char*);
if (buflen < ms) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
*h_errnop = NETDB_INTERNAL;
return NSS_STATUS_TRYAGAIN;
@@ -455,6 +458,7 @@ enum nss_status _nss_resolve_gethostbyname3_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
*h_errnop = NO_RECOVERY;
return ret;
@@ -492,12 +496,14 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
assert(h_errnop);
if (!IN_SET(af, AF_INET, AF_INET6)) {
+ UNPROTECT_ERRNO;
*errnop = EAFNOSUPPORT;
*h_errnop = NO_DATA;
return NSS_STATUS_UNAVAIL;
}
if (len != FAMILY_ADDRESS_SIZE(af)) {
+ UNPROTECT_ERRNO;
*errnop = EINVAL;
*h_errnop = NO_RECOVERY;
return NSS_STATUS_UNAVAIL;
@@ -576,6 +582,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
c * sizeof(char*); /* pointers to aliases, plus trailing NULL */
if (buflen < ms) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
*h_errnop = NETDB_INTERNAL;
return NSS_STATUS_TRYAGAIN;
@@ -636,6 +643,7 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
*h_errnop = NO_RECOVERY;
return ret;
diff --git a/src/nss-systemd/nss-systemd.c b/src/nss-systemd/nss-systemd.c
index f554828d49..f8db27ae27 100644
--- a/src/nss-systemd/nss-systemd.c
+++ b/src/nss-systemd/nss-systemd.c
@@ -210,6 +210,7 @@ enum nss_status _nss_systemd_getpwnam_r(
l = strlen(name);
if (buflen < l+1) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
@@ -227,6 +228,7 @@ enum nss_status _nss_systemd_getpwnam_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
return NSS_STATUS_UNAVAIL;
}
@@ -310,6 +312,7 @@ enum nss_status _nss_systemd_getpwuid_r(
l = strlen(translated) + 1;
if (buflen < l) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
@@ -327,6 +330,7 @@ enum nss_status _nss_systemd_getpwuid_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
return NSS_STATUS_UNAVAIL;
}
@@ -408,6 +412,7 @@ enum nss_status _nss_systemd_getgrnam_r(
l = sizeof(char*) + strlen(name) + 1;
if (buflen < l) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
@@ -423,6 +428,7 @@ enum nss_status _nss_systemd_getgrnam_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
return NSS_STATUS_UNAVAIL;
}
@@ -506,6 +512,7 @@ enum nss_status _nss_systemd_getgrgid_r(
l = sizeof(char*) + strlen(translated) + 1;
if (buflen < l) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
return NSS_STATUS_TRYAGAIN;
}
@@ -521,6 +528,7 @@ enum nss_status _nss_systemd_getgrgid_r(
return NSS_STATUS_SUCCESS;
fail:
+ UNPROTECT_ERRNO;
*errnop = -r;
return NSS_STATUS_UNAVAIL;
}
@@ -740,6 +748,7 @@ enum nss_status _nss_systemd_getpwent_r(struct passwd *result, char *buffer, siz
LIST_FOREACH(entries, p, getpwent_data.position) {
len = strlen(p->name) + 1;
if (buflen < len) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
ret = NSS_STATUS_TRYAGAIN;
goto finalize;
@@ -791,6 +800,7 @@ enum nss_status _nss_systemd_getgrent_r(struct group *result, char *buffer, size
LIST_FOREACH(entries, p, getgrent_data.position) {
len = sizeof(char*) + strlen(p->name) + 1;
if (buflen < len) {
+ UNPROTECT_ERRNO;
*errnop = ERANGE;
ret = NSS_STATUS_TRYAGAIN;
goto finalize;
diff --git a/src/portable/portabled.c b/src/portable/portabled.c
index 63fc340469..49a359fd31 100644
--- a/src/portable/portabled.c
+++ b/src/portable/portabled.c
@@ -53,7 +53,7 @@ static Manager* manager_unref(Manager *m) {
bus_verify_polkit_async_registry_free(m->polkit_registry);
- sd_bus_unref(m->bus);
+ sd_bus_flush_close_unref(m->bus);
sd_event_unref(m->event);
return mfree(m);
diff --git a/src/resolve/resolved-dns-answer.h b/src/resolve/resolved-dns-answer.h
index 97514c3408..47fc80e2b0 100644
--- a/src/resolve/resolved-dns-answer.h
+++ b/src/resolve/resolved-dns-answer.h
@@ -15,11 +15,11 @@ typedef struct DnsAnswerItem DnsAnswerItem;
* Note that we usually encode the empty DnsAnswer object as a simple NULL. */
typedef enum DnsAnswerFlags {
- DNS_ANSWER_AUTHENTICATED = 1, /* Item has been authenticated */
- DNS_ANSWER_CACHEABLE = 2, /* Item is subject to caching */
- DNS_ANSWER_SHARED_OWNER = 4, /* For mDNS: RRset may be owner by multiple peers */
- DNS_ANSWER_CACHE_FLUSH = 8, /* For mDNS: sets cache-flush bit in the rrclass of response records */
- DNS_ANSWER_GOODBYE = 16, /* For mDNS: item is subject to disappear */
+ DNS_ANSWER_AUTHENTICATED = 1 << 0, /* Item has been authenticated */
+ DNS_ANSWER_CACHEABLE = 1 << 1, /* Item is subject to caching */
+ DNS_ANSWER_SHARED_OWNER = 1 << 2, /* For mDNS: RRset may be owner by multiple peers */
+ DNS_ANSWER_CACHE_FLUSH = 1 << 3, /* For mDNS: sets cache-flush bit in the rrclass of response records */
+ DNS_ANSWER_GOODBYE = 1 << 4, /* For mDNS: item is subject to disappear */
} DnsAnswerFlags;
struct DnsAnswerItem {
diff --git a/src/resolve/resolved-dns-dnssec.c b/src/resolve/resolved-dns-dnssec.c
index 335fd47780..14acc4e77d 100644
--- a/src/resolve/resolved-dns-dnssec.c
+++ b/src/resolve/resolved-dns-dnssec.c
@@ -402,7 +402,7 @@ static int dnssec_ecdsa_verify(
if (rrsig->rrsig.signature_size != key_size * 2)
return -EINVAL;
- q = alloca(key_size*2 + 1);
+ q = newa(uint8_t, key_size*2 + 1);
q[0] = 0x04; /* Prepend 0x04 to indicate an uncompressed key */
memcpy(q+1, dnskey->dnskey.key, key_size*2);
diff --git a/src/resolve/resolved-dns-query.c b/src/resolve/resolved-dns-query.c
index 7a4f97754b..535ef4e776 100644
--- a/src/resolve/resolved-dns-query.c
+++ b/src/resolve/resolved-dns-query.c
@@ -719,7 +719,7 @@ int dns_query_go(DnsQuery *q) {
match = dns_scope_good_domain(s, q->ifindex, q->flags, name);
if (match < 0) {
- log_debug("Couldn't check if '%s' matches agains scope, ignoring.", name);
+ log_debug("Couldn't check if '%s' matches against scope, ignoring.", name);
continue;
}
diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c
index 972e661d72..66dd2b1b5a 100644
--- a/src/resolve/resolved-dns-scope.c
+++ b/src/resolve/resolved-dns-scope.c
@@ -527,6 +527,7 @@ DnsScopeMatch dns_scope_good_domain(
switch (s->protocol) {
case DNS_PROTOCOL_DNS: {
+ bool has_search_domains = false;
int n_best = -1;
/* Never route things to scopes that lack DNS servers */
@@ -536,7 +537,11 @@ DnsScopeMatch dns_scope_good_domain(
/* Always honour search domains for routing queries, except if this scope lacks DNS servers. Note that
* we return DNS_SCOPE_YES here, rather than just DNS_SCOPE_MAYBE, which means other wildcard scopes
* won't be considered anymore. */
- LIST_FOREACH(domains, d, dns_scope_get_search_domains(s))
+ LIST_FOREACH(domains, d, dns_scope_get_search_domains(s)) {
+
+ if (!d->route_only && !dns_name_is_root(d->name))
+ has_search_domains = true;
+
if (dns_name_endswith(domain, d->name) > 0) {
int c;
@@ -547,6 +552,13 @@ DnsScopeMatch dns_scope_good_domain(
if (c > n_best)
n_best = c;
}
+ }
+
+ /* If there's a true search domain defined for this scope, and the query is single-label,
+ * then let's resolve things here, prefereably. Note that LLMNR considers itself
+ * authoritative for single-label names too, at the same preference, see below. */
+ if (has_search_domains && dns_name_is_single_label(domain))
+ return DNS_SCOPE_YES_BASE + 1;
/* Let's return the number of labels in the best matching result */
if (n_best >= 0) {
@@ -606,12 +618,16 @@ DnsScopeMatch dns_scope_good_domain(
if ((dns_name_is_single_label(domain) && /* only resolve single label names via LLMNR */
!is_gateway_hostname(domain) && /* don't resolve "gateway" with LLMNR, let nss-myhostname handle this */
manager_is_own_hostname(s->manager, domain) <= 0)) /* never resolve the local hostname via LLMNR */
- return DNS_SCOPE_YES_BASE + 1; /* Return +1, as we consider ourselves authoritative for
- * single-label names, i.e. one label. This is particular
- * relevant as it means a "." route on some other scope won't
- * pull all traffic away from us. (If people actually want to
- * pull traffic away from us they should turn off LLMNR on the
- * link) */
+ return DNS_SCOPE_YES_BASE + 1; /* Return +1, as we consider ourselves authoritative
+ * for single-label names, i.e. one label. This is
+ * particular relevant as it means a "." route on some
+ * other scope won't pull all traffic away from
+ * us. (If people actually want to pull traffic away
+ * from us they should turn off LLMNR on the
+ * link). Note that unicast DNS scopes with search
+ * domains also consider themselves authoritative for
+ * single-label domains, at the same preference (see
+ * above). */
return DNS_SCOPE_NO;
}
diff --git a/src/resolve/resolved-etc-hosts.c b/src/resolve/resolved-etc-hosts.c
index 01cde4acf7..ee21222e50 100644
--- a/src/resolve/resolved-etc-hosts.c
+++ b/src/resolve/resolved-etc-hosts.c
@@ -12,12 +12,12 @@
/* Recheck /etc/hosts at most once every 2s */
#define ETC_HOSTS_RECHECK_USEC (2*USEC_PER_SEC)
-static inline void etc_hosts_item_free(EtcHostsItem *item) {
+static void etc_hosts_item_free(EtcHostsItem *item) {
strv_free(item->names);
free(item);
}
-static inline void etc_hosts_item_by_name_free(EtcHostsItemByName *item) {
+static void etc_hosts_item_by_name_free(EtcHostsItemByName *item) {
free(item->name);
free(item->addresses);
free(item);
diff --git a/src/resolve/resolved-manager.c b/src/resolve/resolved-manager.c
index b7dc09ae37..b3d35c8341 100644
--- a/src/resolve/resolved-manager.c
+++ b/src/resolve/resolved-manager.c
@@ -689,7 +689,7 @@ Manager *manager_free(Manager *m) {
manager_mdns_stop(m);
manager_dns_stub_stop(m);
- sd_bus_unref(m->bus);
+ sd_bus_flush_close_unref(m->bus);
sd_event_source_unref(m->sigusr1_event_source);
sd_event_source_unref(m->sigusr2_event_source);
diff --git a/src/resolve/resolved.c b/src/resolve/resolved.c
index f4efddf8e5..0845b2c1ae 100644
--- a/src/resolve/resolved.c
+++ b/src/resolve/resolved.c
@@ -81,9 +81,7 @@ static int run(int argc, char *argv[]) {
if (r < 0)
return log_error_errno(r, "Event loop failed: %m");
- (void) sd_event_get_exit_code(m->event, &r);
-
- return r;
+ return 0;
}
DEFINE_MAIN_FUNCTION(run);
diff --git a/src/shared/acl-util.c b/src/shared/acl-util.c
index 6f0657174c..9633514513 100644
--- a/src/shared/acl-util.c
+++ b/src/shared/acl-util.c
@@ -220,10 +220,10 @@ int parse_acl(const char *text, acl_t *acl_access, acl_t *acl_default, bool want
char *p;
p = STARTSWITH_SET(*entry, "default:", "d:");
- if (!p)
- p = *entry;
-
- r = strv_push(&d, p);
+ if (p)
+ r = strv_push(&d, p);
+ else
+ r = strv_push(&a, *entry);
if (r < 0)
return r;
}
diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c
index 246e27a135..072bf72c56 100644
--- a/src/shared/ask-password-api.c
+++ b/src/shared/ask-password-api.c
@@ -156,7 +156,7 @@ static int add_to_keyring_and_log(const char *keyname, AskPasswordFlags flags, c
return 0;
}
-int ask_password_keyring(const char *keyname, AskPasswordFlags flags, char ***ret) {
+static int ask_password_keyring(const char *keyname, AskPasswordFlags flags, char ***ret) {
key_serial_t serial;
int r;
@@ -341,7 +341,7 @@ int ask_password_tty(
goto finish;
}
- if (notify >= 0 && pollfd[POLL_INOTIFY].revents != 0) {
+ if (notify >= 0 && pollfd[POLL_INOTIFY].revents != 0 && keyname) {
(void) flush_fd(notify);
r = ask_password_keyring(keyname, flags, ret);
diff --git a/src/shared/ask-password-api.h b/src/shared/ask-password-api.h
index 2d84ba6b04..15762b9cde 100644
--- a/src/shared/ask-password-api.h
+++ b/src/shared/ask-password-api.h
@@ -17,5 +17,4 @@ typedef enum AskPasswordFlags {
int ask_password_tty(int tty_fd, const char *message, const char *keyname, usec_t until, AskPasswordFlags flags, const char *flag_file, char ***ret);
int ask_password_agent(const char *message, const char *icon, const char *id, const char *keyname, usec_t until, AskPasswordFlags flag, char ***ret);
-int ask_password_keyring(const char *keyname, AskPasswordFlags flags, char ***ret);
int ask_password_auto(const char *message, const char *icon, const char *id, const char *keyname, usec_t until, AskPasswordFlags flag, char ***ret);
diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c
index dce8646f37..9a8051d063 100644
--- a/src/shared/bus-unit-util.c
+++ b/src/shared/bus-unit-util.c
@@ -118,7 +118,7 @@ DEFINE_BUS_APPEND_PARSE_PTR("u", uint32_t, mode_t, parse_mode);
DEFINE_BUS_APPEND_PARSE_PTR("u", uint32_t, unsigned, safe_atou);
DEFINE_BUS_APPEND_PARSE_PTR("x", int64_t, int64_t, safe_atoi64);
-static inline int bus_append_string(sd_bus_message *m, const char *field, const char *eq) {
+static int bus_append_string(sd_bus_message *m, const char *field, const char *eq) {
int r;
r = sd_bus_message_append(m, "(sv)", field, "s", eq);
diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c
index 976643e4ce..cbcf698e96 100644
--- a/src/shared/bus-util.c
+++ b/src/shared/bus-util.c
@@ -559,7 +559,7 @@ int bus_check_peercred(sd_bus *c) {
}
int bus_connect_system_systemd(sd_bus **_bus) {
- _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
+ _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
int r;
assert(_bus);
@@ -592,7 +592,7 @@ int bus_connect_system_systemd(sd_bus **_bus) {
}
int bus_connect_user_systemd(sd_bus **_bus) {
- _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
+ _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
_cleanup_free_ char *ee = NULL;
const char *e;
int r;
@@ -1279,7 +1279,7 @@ int bus_map_all_properties(
}
int bus_connect_transport(BusTransport transport, const char *host, bool user, sd_bus **ret) {
- _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
+ _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
int r;
assert(transport >= 0);
@@ -1666,7 +1666,7 @@ int bus_track_add_name_many(sd_bus_track *t, char **l) {
}
int bus_open_system_watch_bind_with_description(sd_bus **ret, const char *description) {
- _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL;
+ _cleanup_(sd_bus_close_unrefp) sd_bus *bus = NULL;
const char *e;
int r;
diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c
index 8fe177990a..b80c147807 100644
--- a/src/shared/conf-parser.c
+++ b/src/shared/conf-parser.c
@@ -137,7 +137,7 @@ static int next_assignment(
/* Warn about unknown non-extension fields. */
if (!(flags & CONFIG_PARSE_RELAXED) && !startswith(lvalue, "X-"))
- log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown lvalue '%s' in section '%s'", lvalue, section);
+ log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown lvalue '%s' in section '%s', ignoring", lvalue, section);
return 0;
}
@@ -321,7 +321,7 @@ int config_parse(const char *unit,
return r;
}
- if (strchr(COMMENTS, *buf))
+ if (strchr(COMMENTS, *skip_leading_chars(buf, WHITESPACE)))
continue;
l = buf;
diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c
index 3a46faf769..d340487025 100644
--- a/src/shared/dissect-image.c
+++ b/src/shared/dissect-image.c
@@ -1178,7 +1178,6 @@ int dissected_image_decrypt_interactively(
#if HAVE_LIBCRYPTSETUP
static int deferred_remove(DecryptedPartition *p) {
-
struct dm_ioctl dm = {
.version = {
DM_VERSION_MAJOR,
@@ -1199,6 +1198,9 @@ static int deferred_remove(DecryptedPartition *p) {
if (fd < 0)
return -errno;
+ if (strlen(p->name) > sizeof(dm.name))
+ return -ENAMETOOLONG;
+
strncpy(dm.name, p->name, sizeof(dm.name));
if (ioctl(fd, DM_DEV_REMOVE, &dm))
diff --git a/src/shared/efivars.c b/src/shared/efivars.c
index cb9e13c15f..26f905bfaa 100644
--- a/src/shared/efivars.c
+++ b/src/shared/efivars.c
@@ -40,11 +40,17 @@
#define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff
#define EFI_OS_INDICATIONS_BOOT_TO_FW_UI 0x0000000000000001
-struct boot_option {
- uint32_t attr;
- uint16_t path_len;
- uint16_t title[];
-} _packed_;
+#define boot_option__contents { \
+ uint32_t attr; \
+ uint16_t path_len; \
+ uint16_t title[]; \
+ }
+
+struct boot_option boot_option__contents;
+struct boot_option__packed boot_option__contents _packed_;
+assert_cc(offsetof(struct boot_option, title) == offsetof(struct boot_option__packed, title));
+/* sizeof(struct boot_option) != sizeof(struct boot_option__packed), so
+ * the *size* of the structure should not be used anywhere below. */
struct drive_path {
uint32_t part_nr;
@@ -55,15 +61,19 @@ struct drive_path {
uint8_t signature_type;
} _packed_;
-struct device_path {
- uint8_t type;
- uint8_t sub_type;
- uint16_t length;
- union {
- uint16_t path[0];
- struct drive_path drive;
- };
-} _packed_;
+#define device_path__contents { \
+ uint8_t type; \
+ uint8_t sub_type; \
+ uint16_t length; \
+ union { \
+ uint16_t path[0]; \
+ struct drive_path drive; \
+ }; \
+ }
+
+struct device_path device_path__contents;
+struct device_path__packed device_path__contents _packed_;
+assert_cc(sizeof(struct device_path) == sizeof(struct device_path__packed));
bool is_efi_boot(void) {
if (detect_container() > 0)
@@ -354,32 +364,46 @@ int efi_set_variable_string(sd_id128_t vendor, const char *name, const char *v)
return efi_set_variable(vendor, name, u16, (char16_strlen(u16) + 1) * sizeof(char16_t));
}
-static size_t utf16_size(const uint16_t *s) {
+static ssize_t utf16_size(const uint16_t *s, size_t buf_len_bytes) {
size_t l = 0;
- while (s[l] > 0)
+ /* Returns the size of the string in bytes without the terminating two zero bytes */
+
+ if (buf_len_bytes % sizeof(uint16_t) != 0)
+ return -EINVAL;
+
+ while (l < buf_len_bytes / sizeof(uint16_t)) {
+ if (s[l] == 0)
+ return (l + 1) * sizeof(uint16_t);
l++;
+ }
- return (l+1) * sizeof(uint16_t);
+ return -EINVAL; /* The terminator was not found */
}
+struct guid {
+ uint32_t u1;
+ uint16_t u2;
+ uint16_t u3;
+ uint8_t u4[8];
+} _packed_;
+
static void efi_guid_to_id128(const void *guid, sd_id128_t *id128) {
- struct uuid {
- uint32_t u1;
- uint16_t u2;
- uint16_t u3;
- uint8_t u4[8];
- } _packed_;
- const struct uuid *uuid = guid;
-
- id128->bytes[0] = (uuid->u1 >> 24) & 0xff;
- id128->bytes[1] = (uuid->u1 >> 16) & 0xff;
- id128->bytes[2] = (uuid->u1 >> 8) & 0xff;
- id128->bytes[3] = (uuid->u1) & 0xff;
- id128->bytes[4] = (uuid->u2 >> 8) & 0xff;
- id128->bytes[5] = (uuid->u2) & 0xff;
- id128->bytes[6] = (uuid->u3 >> 8) & 0xff;
- id128->bytes[7] = (uuid->u3) & 0xff;
+ uint32_t u1;
+ uint16_t u2, u3;
+ const struct guid *uuid = guid;
+
+ memcpy(&u1, &uuid->u1, sizeof(uint32_t));
+ id128->bytes[0] = (u1 >> 24) & 0xff;
+ id128->bytes[1] = (u1 >> 16) & 0xff;
+ id128->bytes[2] = (u1 >> 8) & 0xff;
+ id128->bytes[3] = u1 & 0xff;
+ memcpy(&u2, &uuid->u2, sizeof(uint16_t));
+ id128->bytes[4] = (u2 >> 8) & 0xff;
+ id128->bytes[5] = u2 & 0xff;
+ memcpy(&u3, &uuid->u3, sizeof(uint16_t));
+ id128->bytes[6] = (u3 >> 8) & 0xff;
+ id128->bytes[7] = u3 & 0xff;
memcpy(&id128->bytes[8], uuid->u4, sizeof(uuid->u4));
}
@@ -394,7 +418,7 @@ int efi_get_boot_option(
_cleanup_free_ uint8_t *buf = NULL;
size_t l;
struct boot_option *header;
- size_t title_size;
+ ssize_t title_size;
_cleanup_free_ char *s = NULL, *p = NULL;
sd_id128_t p_uuid = SD_ID128_NULL;
int r;
@@ -406,13 +430,13 @@ int efi_get_boot_option(
r = efi_get_variable(EFI_VENDOR_GLOBAL, boot_id, NULL, (void **)&buf, &l);
if (r < 0)
return r;
- if (l < sizeof(struct boot_option))
+ if (l < offsetof(struct boot_option, title))
return -ENOENT;
header = (struct boot_option *)buf;
- title_size = utf16_size(header->title);
- if (title_size > l - offsetof(struct boot_option, title))
- return -EINVAL;
+ title_size = utf16_size(header->title, l - offsetof(struct boot_option, title));
+ if (title_size < 0)
+ return title_size;
if (title) {
s = utf16_to_utf8(header->title, title_size);
@@ -494,20 +518,14 @@ static void to_utf16(uint16_t *dest, const char *src) {
dest[i] = '\0';
}
-struct guid {
- uint32_t u1;
- uint16_t u2;
- uint16_t u3;
- uint8_t u4[8];
-} _packed_;
-
static void id128_to_efi_guid(sd_id128_t id, void *guid) {
- struct guid *uuid = guid;
-
- uuid->u1 = id.bytes[0] << 24 | id.bytes[1] << 16 | id.bytes[2] << 8 | id.bytes[3];
- uuid->u2 = id.bytes[4] << 8 | id.bytes[5];
- uuid->u3 = id.bytes[6] << 8 | id.bytes[7];
- memcpy(uuid->u4, id.bytes+8, sizeof(uuid->u4));
+ struct guid uuid = {
+ .u1 = id.bytes[0] << 24 | id.bytes[1] << 16 | id.bytes[2] << 8 | id.bytes[3],
+ .u2 = id.bytes[4] << 8 | id.bytes[5],
+ .u3 = id.bytes[6] << 8 | id.bytes[7],
+ };
+ memcpy(uuid.u4, id.bytes+8, sizeof(uuid.u4));
+ memcpy(guid, &uuid, sizeof(uuid));
}
static uint16_t *tilt_slashes(uint16_t *s) {
@@ -541,7 +559,7 @@ int efi_add_boot_option(
title_len = (strlen(title)+1) * 2;
path_len = (strlen(path)+1) * 2;
- buf = malloc0(sizeof(struct boot_option) + title_len +
+ buf = malloc0(offsetof(struct boot_option, title) + title_len +
sizeof(struct drive_path) +
sizeof(struct device_path) + path_len);
if (!buf)
@@ -561,12 +579,12 @@ int efi_add_boot_option(
devicep->type = MEDIA_DEVICE_PATH;
devicep->sub_type = MEDIA_HARDDRIVE_DP;
devicep->length = offsetof(struct device_path, drive) + sizeof(struct drive_path);
- devicep->drive.part_nr = part;
- devicep->drive.part_start = pstart;
- devicep->drive.part_size = psize;
- devicep->drive.signature_type = SIGNATURE_TYPE_GUID;
- devicep->drive.mbr_type = MBR_TYPE_EFI_PARTITION_TABLE_HEADER;
+ memcpy(&devicep->drive.part_nr, &part, sizeof(uint32_t));
+ memcpy(&devicep->drive.part_start, &pstart, sizeof(uint64_t));
+ memcpy(&devicep->drive.part_size, &psize, sizeof(uint64_t));
id128_to_efi_guid(part_uuid, devicep->drive.signature);
+ devicep->drive.mbr_type = MBR_TYPE_EFI_PARTITION_TABLE_HEADER;
+ devicep->drive.signature_type = SIGNATURE_TYPE_GUID;
size += devicep->length;
/* path to loader */
@@ -630,7 +648,7 @@ int efi_set_boot_order(uint16_t *order, size_t n) {
return efi_set_variable(EFI_VENDOR_GLOBAL, "BootOrder", order, n * sizeof(uint16_t));
}
-static int boot_id_hex(const char s[4]) {
+static int boot_id_hex(const char s[static 4]) {
int id = 0, i;
for (i = 0; i < 4; i++)
diff --git a/src/shared/install.c b/src/shared/install.c
index 3104043af6..8629304cef 100644
--- a/src/shared/install.c
+++ b/src/shared/install.c
@@ -68,7 +68,7 @@ typedef struct {
size_t n_rules;
} Presets;
-static inline bool unit_file_install_info_has_rules(const UnitFileInstallInfo *i) {
+static bool unit_file_install_info_has_rules(const UnitFileInstallInfo *i) {
assert(i);
return !strv_isempty(i->aliases) ||
@@ -76,13 +76,13 @@ static inline bool unit_file_install_info_has_rules(const UnitFileInstallInfo *i
!strv_isempty(i->required_by);
}
-static inline bool unit_file_install_info_has_also(const UnitFileInstallInfo *i) {
+static bool unit_file_install_info_has_also(const UnitFileInstallInfo *i) {
assert(i);
return !strv_isempty(i->also);
}
-static inline void presets_freep(Presets *p) {
+static void presets_freep(Presets *p) {
size_t i;
if (!p)
diff --git a/src/shared/journal-importer.c b/src/shared/journal-importer.c
index b0e619205d..8638cd3cc9 100644
--- a/src/shared/journal-importer.c
+++ b/src/shared/journal-importer.c
@@ -23,6 +23,9 @@ enum {
};
static int iovw_put(struct iovec_wrapper *iovw, void* data, size_t len) {
+ if (iovw->count >= ENTRY_FIELD_COUNT_MAX)
+ return -E2BIG;
+
if (!GREEDY_REALLOC(iovw->iovec, iovw->size_bytes, iovw->count + 1))
return log_oom();
@@ -97,7 +100,7 @@ static int get_line(JournalImporter *imp, char **line, size_t *size) {
imp->scanned = imp->filled;
if (imp->scanned >= DATA_SIZE_MAX)
- return log_error_errno(SYNTHETIC_ERRNO(E2BIG),
+ return log_error_errno(SYNTHETIC_ERRNO(ENOBUFS),
"Entry is bigger than %u bytes.",
DATA_SIZE_MAX);
diff --git a/src/shared/journal-importer.h b/src/shared/journal-importer.h
index 53354b7c78..7914c0cf5f 100644
--- a/src/shared/journal-importer.h
+++ b/src/shared/journal-importer.h
@@ -21,6 +21,9 @@
#endif
#define LINE_CHUNK 8*1024u
+/* The maximum number of fields in an entry */
+#define ENTRY_FIELD_COUNT_MAX 1024
+
struct iovec_wrapper {
struct iovec *iovec;
size_t size_bytes;
diff --git a/src/shared/json.c b/src/shared/json.c
index 59c4617592..3786ff12b8 100644
--- a/src/shared/json.c
+++ b/src/shared/json.c
@@ -979,6 +979,8 @@ bool json_variant_has_type(JsonVariant *v, JsonVariantType type) {
JsonVariantType rt;
v = json_variant_dereference(v);
+ if (!v)
+ return false;
rt = json_variant_type(v);
if (rt == type)
@@ -3140,10 +3142,7 @@ int json_log_internal(
va_list ap;
int r;
- if (error < 0)
- error = -error;
-
- errno = error;
+ errno = ERRNO_VALUE(error);
va_start(ap, format);
(void) vsnprintf(buffer, sizeof buffer, format, ap);
diff --git a/src/shared/json.h b/src/shared/json.h
index 4eba91c272..f8e035cda1 100644
--- a/src/shared/json.h
+++ b/src/shared/json.h
@@ -1,5 +1,4 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
-
#pragma once
#include <stdbool.h>
@@ -154,7 +153,7 @@ typedef enum JsonFormatFlags {
JSON_FORMAT_NEWLINE = 1 << 0, /* suffix with newline */
JSON_FORMAT_PRETTY = 1 << 1, /* add internal whitespace to appeal to human readers */
JSON_FORMAT_COLOR = 1 << 2, /* insert ANSI color sequences */
- JSON_FORMAT_COLOR_AUTO = 1 << 3, /* insetr ANSI color sequences if colors_enabled() says so */
+ JSON_FORMAT_COLOR_AUTO = 1 << 3, /* insert ANSI color sequences if colors_enabled() says so */
JSON_FORMAT_SOURCE = 1 << 4, /* prefix with source filename/line/column */
JSON_FORMAT_SSE = 1 << 5, /* prefix/suffix with W3C server-sent events */
JSON_FORMAT_SEQ = 1 << 6, /* prefix/suffix with RFC 7464 application/json-seq */
diff --git a/src/shared/lockfile-util.c b/src/shared/lockfile-util.c
index 4bae23b243..260c2088d5 100644
--- a/src/shared/lockfile-util.c
+++ b/src/shared/lockfile-util.c
@@ -12,6 +12,7 @@
#include "fs-util.h"
#include "lockfile-util.h"
#include "macro.h"
+#include "missing_fcntl.h"
#include "path-util.h"
int make_lock_file(const char *p, int operation, LockFile *ret) {
diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c
index 525a948f36..15ef0f19ff 100644
--- a/src/shared/logs-show.c
+++ b/src/shared/logs-show.c
@@ -724,7 +724,7 @@ void json_escape(
fputs(" ]", f);
} else {
- fputc('\"', f);
+ fputc('"', f);
while (l > 0) {
if (IN_SET(*p, '"', '\\')) {
@@ -741,7 +741,7 @@ void json_escape(
l--;
}
- fputc('\"', f);
+ fputc('"', f);
}
}
diff --git a/src/shared/loop-util.c b/src/shared/loop-util.c
index 872c25c3dc..bf426eb8bc 100644
--- a/src/shared/loop-util.c
+++ b/src/shared/loop-util.c
@@ -45,11 +45,11 @@ int loop_device_make(int fd, int open_flags, LoopDevice **ret) {
*d = (LoopDevice) {
.fd = copy,
.nr = -1,
+ .relinquished = true, /* It's not allocated by us, don't destroy it when this object is freed */
};
*ret = d;
-
- return 0;
+ return d->fd;
}
r = stat_verify_regular(&st);
@@ -88,8 +88,7 @@ int loop_device_make(int fd, int open_flags, LoopDevice **ret) {
};
*ret = d;
-
- return (*ret)->fd;
+ return d->fd;
}
int loop_device_make_by_path(const char *path, int open_flags, LoopDevice **ret) {
diff --git a/src/shared/pager.c b/src/shared/pager.c
index ce4ca9bdb2..bf2597e65a 100644
--- a/src/shared/pager.c
+++ b/src/shared/pager.c
@@ -173,7 +173,7 @@ int pager_open(PagerFlags flags) {
execvp(pager_args[0], pager_args);
log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno,
- "Failed execute %s, using fallback pagers: %m", pager_args[0]);
+ "Failed to execute '%s', using fallback pagers: %m", pager_args[0]);
}
/* Debian's alternatives command for pagers is
@@ -190,7 +190,7 @@ int pager_open(PagerFlags flags) {
}
execlp(exe, exe, NULL);
log_full_errno(errno == ENOENT ? LOG_DEBUG : LOG_WARNING, errno,
- "Failed execute %s, using next fallback pager: %m", exe);
+ "Failed to execute '%s', using next fallback pager: %m", exe);
}
r = loop_write(exe_name_pipe[1], "(built-in)", strlen("(built-in") + 1, false);
diff --git a/src/shared/seccomp-util.c b/src/shared/seccomp-util.c
index 42d6dd2a94..cc58b3c078 100644
--- a/src/shared/seccomp-util.c
+++ b/src/shared/seccomp-util.c
@@ -793,7 +793,6 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
"ioprio_get\0"
"kcmp\0"
"madvise\0"
- "mincore\0"
"mprotect\0"
"mremap\0"
"name_to_handle_at\0"
diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c
index ee31c448fc..dbb4622312 100644
--- a/src/shared/switch-root.c
+++ b/src/shared/switch-root.c
@@ -83,7 +83,7 @@ int switch_root(const char *new_root,
(void) mkdir_p_label(chased, 0755);
if (mount(i, chased, NULL, mount_flags, NULL) < 0)
- return log_error_errno(r, "Failed to mount %s to %s: %m", i, chased);
+ return log_error_errno(errno, "Failed to mount %s to %s: %m", i, chased);
}
/* Do not fail if base_filesystem_create() fails. Not all switch roots are like base_filesystem_create() wants
diff --git a/src/shared/xml.c b/src/shared/xml.c
index cb34d870c1..2709076264 100644
--- a/src/shared/xml.c
+++ b/src/shared/xml.c
@@ -191,7 +191,7 @@ int xml_tokenize(const char **p, char **name, void **state, unsigned *line) {
if (*c == '=') {
c++;
- if (IN_SET(*c, '\'', '\"')) {
+ if (IN_SET(*c, '\'', '"')) {
/* Tag with a quoted value */
e = strchr(c+1, *c);
diff --git a/src/sleep/sleep.conf b/src/sleep/sleep.conf
new file mode 100644
index 0000000000..dc2ed37f70
--- /dev/null
+++ b/src/sleep/sleep.conf
@@ -0,0 +1,25 @@
+# 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.
+#
+# Entries in this file show the compile time defaults.
+# You can change settings by editing this file.
+# Defaults can be restored by simply deleting this file.
+#
+# See systemd-sleep.conf(5) for details
+
+[Sleep]
+#AllowSuspend=yes
+#AllowHibernation=yes
+#AllowSuspendThenHibernate=yes
+#AllowHybridSleep=yes
+#SuspendMode=
+#SuspendState=mem standby freeze
+#HibernateMode=platform shutdown
+#HibernateState=disk
+#HybridSleepMode=suspend platform shutdown
+#HybridSleepState=disk
+#HibernateDelaySec=180min
diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c
index f882a665a8..bac5c164d4 100644
--- a/src/socket-proxy/socket-proxyd.c
+++ b/src/socket-proxy/socket-proxyd.c
@@ -86,7 +86,7 @@ static void context_clear(Context *context) {
sd_resolve_unref(context->resolve);
}
-static int connection_create_pipes(Connection *c, int buffer[2], size_t *sz) {
+static int connection_create_pipes(Connection *c, int buffer[static 2], size_t *sz) {
int r;
assert(c);
diff --git a/src/stdio-bridge/stdio-bridge.c b/src/stdio-bridge/stdio-bridge.c
index 3a21aa4aed..7060897ab7 100644
--- a/src/stdio-bridge/stdio-bridge.c
+++ b/src/stdio-bridge/stdio-bridge.c
@@ -91,7 +91,7 @@ static int parse_argv(int argc, char *argv[]) {
}
static int run(int argc, char *argv[]) {
- _cleanup_(sd_bus_unrefp) sd_bus *a = NULL, *b = NULL;
+ _cleanup_(sd_bus_flush_close_unrefp) sd_bus *a = NULL, *b = NULL;
sd_id128_t server_id;
bool is_unix;
int r, in_fd, out_fd;
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 629f9cb505..63dae2c872 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -6933,9 +6933,9 @@ static int run_editor(char **paths) {
if (r < 0)
return r;
if (r == 0) {
- char **editor_args = NULL, **tmp_path, **original_path, *p;
+ char **editor_args = NULL, **tmp_path, **original_path;
size_t n_editor_args = 0, i = 1, argc;
- const char **args, *editor;
+ const char **args, *editor, *p;
argc = strv_length(paths)/2 + 1;
diff --git a/src/systemd/_sd-common.h b/src/systemd/_sd-common.h
index 05c38008cf..b3ee7bbc24 100644
--- a/src/systemd/_sd-common.h
+++ b/src/systemd/_sd-common.h
@@ -72,6 +72,14 @@ typedef void (*_sd_destroy_t)(void *userdata);
# endif
#endif
+#ifndef _SD_ARRAY_STATIC
+# if __STDC_VERSION__ >= 199901L
+# define _SD_ARRAY_STATIC static
+# else
+# define _SD_ARRAY_STATIC
+# endif
+#endif
+
#define _SD_DEFINE_POINTER_CLEANUP_FUNC(type, func) \
static __inline__ void func##p(type **p) { \
if (*p) \
diff --git a/src/systemd/meson.build b/src/systemd/meson.build
index e0c967efc5..75c48b07a5 100644
--- a/src/systemd/meson.build
+++ b/src/systemd/meson.build
@@ -52,8 +52,7 @@ if cc.has_argument('-std=iso9899:2017')
opts += [['c', '-std=iso9899:2017']]
endif
-cxx = find_program('c++', required : false)
-if cxx.found()
+if add_languages('cpp', required : false)
opts += [['c++'],
['c++', '-std=c++98'],
['c++', '-std=c++11']]
diff --git a/src/systemd/sd-bus.h b/src/systemd/sd-bus.h
index 4c1acab9f3..129cc93328 100644
--- a/src/systemd/sd-bus.h
+++ b/src/systemd/sd-bus.h
@@ -170,6 +170,7 @@ void sd_bus_close(sd_bus *bus);
sd_bus *sd_bus_ref(sd_bus *bus);
sd_bus *sd_bus_unref(sd_bus *bus);
+sd_bus *sd_bus_close_unref(sd_bus *bus);
sd_bus *sd_bus_flush_close_unref(sd_bus *bus);
void sd_bus_default_flush_close(void);
@@ -493,6 +494,7 @@ int sd_bus_track_get_destroy_callback(sd_bus_track *s, sd_bus_destroy_t *ret);
/* Define helpers so that __attribute__((cleanup(sd_bus_unrefp))) and similar may be used. */
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_bus, sd_bus_unref);
+_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_bus, sd_bus_close_unref);
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_bus, sd_bus_flush_close_unref);
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_bus_slot, sd_bus_slot_unref);
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_bus_message, sd_bus_message_unref);
diff --git a/src/systemd/sd-id128.h b/src/systemd/sd-id128.h
index f4c05a3683..bdf88ed53f 100644
--- a/src/systemd/sd-id128.h
+++ b/src/systemd/sd-id128.h
@@ -35,7 +35,7 @@ union sd_id128 {
#define SD_ID128_STRING_MAX 33
-char *sd_id128_to_string(sd_id128_t id, char s[SD_ID128_STRING_MAX]);
+char *sd_id128_to_string(sd_id128_t id, char s[_SD_ARRAY_STATIC SD_ID128_STRING_MAX]);
int sd_id128_from_string(const char *s, sd_id128_t *ret);
int sd_id128_randomize(sd_id128_t *ret);
diff --git a/src/systemd/sd-lldp.h b/src/systemd/sd-lldp.h
index a3e5cd6be6..bf3afadcec 100644
--- a/src/systemd/sd-lldp.h
+++ b/src/systemd/sd-lldp.h
@@ -27,7 +27,7 @@
_SD_BEGIN_DECLARATIONS;
-/* IEEE 802.3AB Clause 9: TLV Types */
+/* IEEE 802.1AB-2009 Clause 8: TLV Types */
enum {
SD_LLDP_TYPE_END = 0,
SD_LLDP_TYPE_CHASSIS_ID = 1,
@@ -41,7 +41,7 @@ enum {
SD_LLDP_TYPE_PRIVATE = 127,
};
-/* IEEE 802.3AB Clause 9.5.2: Chassis subtypes */
+/* IEEE 802.1AB-2009 Clause 8.5.2: Chassis subtypes */
enum {
SD_LLDP_CHASSIS_SUBTYPE_RESERVED = 0,
SD_LLDP_CHASSIS_SUBTYPE_CHASSIS_COMPONENT = 1,
@@ -53,7 +53,7 @@ enum {
SD_LLDP_CHASSIS_SUBTYPE_LOCALLY_ASSIGNED = 7,
};
-/* IEEE 802.3AB Clause 9.5.3: Port subtype */
+/* IEEE 802.1AB-2009 Clause 8.5.3: Port subtype */
enum {
SD_LLDP_PORT_SUBTYPE_RESERVED = 0,
SD_LLDP_PORT_SUBTYPE_INTERFACE_ALIAS = 1,
@@ -65,6 +65,7 @@ enum {
SD_LLDP_PORT_SUBTYPE_LOCALLY_ASSIGNED = 7,
};
+/* IEEE 802.1AB-2009 Clause 8.5.8: System capabilities */
enum {
SD_LLDP_SYSTEM_CAPABILITIES_OTHER = 1 << 0,
SD_LLDP_SYSTEM_CAPABILITIES_REPEATER = 1 << 1,
@@ -95,6 +96,7 @@ enum {
#define SD_LLDP_OUI_802_1 (uint8_t[]) { 0x00, 0x80, 0xc2 }
#define SD_LLDP_OUI_802_3 (uint8_t[]) { 0x00, 0x12, 0x0f }
+/* IEEE 802.1AB-2009 Annex E */
enum {
SD_LLDP_OUI_802_1_SUBTYPE_PORT_VLAN_ID = 1,
SD_LLDP_OUI_802_1_SUBTYPE_PORT_PROTOCOL_VLAN_ID = 2,
@@ -105,6 +107,14 @@ enum {
SD_LLDP_OUI_802_1_SUBTYPE_LINK_AGGREGATION = 7,
};
+/* IEEE 802.1AB-2009 Annex F */
+enum {
+ SD_LLDP_OUI_802_3_SUBTYPE_MAC_PHY_CONFIG_STATUS = 1,
+ SD_LLDP_OUI_802_3_SUBTYPE_POWER_VIA_MDI = 2,
+ SD_LLDP_OUI_802_3_SUBTYPE_LINK_AGGREGATION = 3,
+ SD_LLDP_OUI_802_3_SUBTYPE_MAXIMUM_FRAME_SIZE = 4,
+};
+
typedef struct sd_lldp sd_lldp;
typedef struct sd_lldp_neighbor sd_lldp_neighbor;
@@ -168,8 +178,8 @@ int sd_lldp_neighbor_tlv_rewind(sd_lldp_neighbor *n);
int sd_lldp_neighbor_tlv_next(sd_lldp_neighbor *n);
int sd_lldp_neighbor_tlv_get_type(sd_lldp_neighbor *n, uint8_t *type);
int sd_lldp_neighbor_tlv_is_type(sd_lldp_neighbor *n, uint8_t type);
-int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[3], uint8_t *subtype);
-int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[3], uint8_t subtype);
+int sd_lldp_neighbor_tlv_get_oui(sd_lldp_neighbor *n, uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t *subtype);
+int sd_lldp_neighbor_tlv_is_oui(sd_lldp_neighbor *n, const uint8_t oui[_SD_ARRAY_STATIC 3], uint8_t subtype);
int sd_lldp_neighbor_tlv_get_raw(sd_lldp_neighbor *n, const void **ret, size_t *size);
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_lldp, sd_lldp_unref);
diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h
index 30be5b113c..9e6e437bab 100644
--- a/src/systemd/sd-netlink.h
+++ b/src/systemd/sd-netlink.h
@@ -78,6 +78,8 @@ int sd_netlink_message_append_u32(sd_netlink_message *m, unsigned short type, ui
int sd_netlink_message_append_data(sd_netlink_message *m, unsigned short type, const void *data, size_t len);
int sd_netlink_message_append_in_addr(sd_netlink_message *m, unsigned short type, const struct in_addr *data);
int sd_netlink_message_append_in6_addr(sd_netlink_message *m, unsigned short type, const struct in6_addr *data);
+int sd_netlink_message_append_sockaddr_in(sd_netlink_message *m, unsigned short type, const struct sockaddr_in *data);
+int sd_netlink_message_append_sockaddr_in6(sd_netlink_message *m, unsigned short type, const struct sockaddr_in6 *data);
int sd_netlink_message_append_ether_addr(sd_netlink_message *m, unsigned short type, const struct ether_addr *data);
int sd_netlink_message_append_cache_info(sd_netlink_message *m, unsigned short type, const struct ifa_cacheinfo *info);
@@ -200,7 +202,6 @@ int sd_netlink_slot_set_floating(sd_netlink_slot *slot, int b);
int sd_netlink_slot_get_description(sd_netlink_slot *slot, const char **description);
int sd_netlink_slot_set_description(sd_netlink_slot *slot, const char *description);
-
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_netlink, sd_netlink_unref);
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_netlink_message, sd_netlink_message_unref);
_SD_DEFINE_POINTER_CLEANUP_FUNC(sd_netlink_slot, sd_netlink_slot_unref);
diff --git a/src/test/meson.build b/src/test/meson.build
index ea049a6fba..08026ea8c4 100644
--- a/src/test/meson.build
+++ b/src/test/meson.build
@@ -929,7 +929,8 @@ tests += [
[['src/libsystemd/sd-resolve/test-resolve.c'],
[],
- [threads]],
+ [threads],
+ '', 'timeout=120'],
[['src/libsystemd/sd-login/test-login.c'],
[],
@@ -957,7 +958,7 @@ tests += [
]
-if cxx.found()
+if cxx_cmd != ''
tests += [
[['src/libsystemd/sd-bus/test-bus-vtable-cc.cc'],
[],
diff --git a/src/test/test-barrier.c b/src/test/test-barrier.c
index 6ae84cd6fc..6469129fa4 100644
--- a/src/test/test-barrier.c
+++ b/src/test/test-barrier.c
@@ -17,6 +17,7 @@
#include "barrier.h"
#include "util.h"
#include "tests.h"
+#include "virt.h"
/* 20ms to test deadlocks; All timings use multiples of this constant as
* alarm/sleep timers. If this timeout is too small for slow machines to perform
@@ -420,11 +421,27 @@ TEST_BARRIER(test_barrier_pending_exit,
TEST_BARRIER_WAIT_SUCCESS(pid2));
int main(int argc, char *argv[]) {
+ int v;
test_setup_logging(LOG_INFO);
if (!slow_tests_enabled())
return log_tests_skipped("slow tests are disabled");
+ /*
+ * This test uses real-time alarms and sleeps to test for CPU races
+ * explicitly. This is highly fragile if your system is under load. We
+ * already increased the BASE_TIME value to make the tests more robust,
+ * but that just makes the test take significantly longer. Given the recent
+ * issues when running the test in a virtualized environments, limit it
+ * to bare metal machines only, to minimize false-positives in CIs.
+ */
+ v = detect_virtualization();
+ if (IN_SET(v, -EPERM, -EACCES))
+ return log_tests_skipped("Cannot detect virtualization");
+
+ if (v != VIRTUALIZATION_NONE)
+ return log_tests_skipped("This test requires a baremetal machine");
+
test_barrier_sync();
test_barrier_wait_next();
test_barrier_wait_next_twice();
diff --git a/src/test/test-bpf.c b/src/test/test-bpf.c
index ea5f0f5bc6..cd8d68f215 100644
--- a/src/test/test-bpf.c
+++ b/src/test/test-bpf.c
@@ -2,6 +2,7 @@
#include <linux/libbpf.h>
#include <string.h>
+#include <sys/mman.h>
#include <unistd.h>
#include "bpf-firewall.h"
@@ -14,6 +15,30 @@
#include "tests.h"
#include "unit.h"
+/* We use the same limit here that PID 1 bumps RLIMIT_MEMLOCK to if it can */
+#define CAN_MEMLOCK_SIZE (64U*1024U*1024U)
+
+static bool can_memlock(void) {
+ void *p;
+ bool b;
+
+ /* Let's see if we can mlock() a larger blob of memory. BPF programs are charged against
+ * RLIMIT_MEMLOCK, hence let's first make sure we can lock memory at all, and skip the test if we
+ * cannot. Why not check RLIMIT_MEMLOCK explicitly? Because in container environments the
+ * RLIMIT_MEMLOCK value we see might not match the RLIMIT_MEMLOCK value actually in effect. */
+
+ p = mmap(NULL, CAN_MEMLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_SHARED, -1, 0);
+ if (p == MAP_FAILED)
+ return false;
+
+ b = mlock(p, CAN_MEMLOCK_SIZE) >= 0;
+ if (b)
+ assert_se(munlock(p, CAN_MEMLOCK_SIZE) >= 0);
+
+ assert_se(munmap(p, CAN_MEMLOCK_SIZE) >= 0);
+ return b;
+}
+
int main(int argc, char *argv[]) {
struct bpf_insn exit_insn[] = {
BPF_MOV64_IMM(BPF_REG_0, 1),
@@ -26,10 +51,21 @@ int main(int argc, char *argv[]) {
_cleanup_(manager_freep) Manager *m = NULL;
Unit *u;
char log_buf[65535];
+ struct rlimit rl;
int r;
test_setup_logging(LOG_DEBUG);
+ if (is_run_on_travis_ci())
+ return log_tests_skipped("test-bpf fails on Travis CI: https://github.com/systemd/systemd/issues/9666");
+
+ assert_se(getrlimit(RLIMIT_MEMLOCK, &rl) >= 0);
+ rl.rlim_cur = rl.rlim_max = MAX3(rl.rlim_cur, rl.rlim_max, CAN_MEMLOCK_SIZE);
+ (void) setrlimit(RLIMIT_MEMLOCK, &rl);
+
+ if (!can_memlock())
+ return log_tests_skipped("Can't use mlock(), skipping.");
+
r = enter_cgroup_subroot();
if (r == -ENOMEDIUM)
return log_tests_skipped("cgroupfs not available");
diff --git a/src/test/test-capability.c b/src/test/test-capability.c
index dae85f2f91..325d7c8cc2 100644
--- a/src/test/test-capability.c
+++ b/src/test/test-capability.c
@@ -13,6 +13,7 @@
#include "fd-util.h"
#include "fileio.h"
#include "macro.h"
+#include "missing_prctl.h"
#include "parse-util.h"
#include "tests.h"
#include "util.h"
diff --git a/src/test/test-conf-parser.c b/src/test/test-conf-parser.c
index 2921338f62..1738938fce 100644
--- a/src/test/test-conf-parser.c
+++ b/src/test/test-conf-parser.c
@@ -248,6 +248,18 @@ static const char* const config_file[] = {
"3\n",
"[Section]\n"
+ " #hogehoge\\\n" /* whitespaces before comments */
+ " setting1=1\\\n" /* whitespaces before key */
+ "2\\\n"
+ "3\n",
+
+ "[Section]\n"
+ " setting1=1\\\n" /* whitespaces before key */
+ " #hogehoge\\\n" /* commented out line prefixed with whitespaces in continuation */
+ "2\\\n"
+ "3\n",
+
+ "[Section]\n"
"setting1=1\\\n" /* continuation with extra trailing backslash at the end */
"2\\\n"
"3\\\n",
@@ -323,27 +335,27 @@ static void test_config_parse(unsigned i, const char *s) {
assert_se(streq(setting1, "1"));
break;
- case 4 ... 7:
+ case 4 ... 9:
assert_se(r == 0);
assert_se(streq(setting1, "1 2 3"));
break;
- case 8:
+ case 10:
assert_se(r == 0);
assert_se(streq(setting1, "1\\\\ \\\\2"));
break;
- case 9:
+ case 11:
assert_se(r == 0);
assert_se(streq(setting1, x1000("ABCD")));
break;
- case 10 ... 11:
+ case 12 ... 13:
assert_se(r == 0);
assert_se(streq(setting1, x1000("ABCD") " foobar"));
break;
- case 12 ... 13:
+ case 14 ... 15:
assert_se(r == -ENOBUFS);
assert_se(setting1 == NULL);
break;
diff --git a/src/test/test-execute.c b/src/test/test-execute.c
index 2115061add..eb8f7c4eff 100644
--- a/src/test/test-execute.c
+++ b/src/test/test-execute.c
@@ -13,6 +13,7 @@
#include "fs-util.h"
#include "macro.h"
#include "manager.h"
+#include "missing_prctl.h"
#include "mkdir.h"
#include "path-util.h"
#include "rm-rf.h"
@@ -130,7 +131,7 @@ static bool check_user_has_group_with_same_name(const char *name) {
}
static bool is_inaccessible_available(void) {
- char *p;
+ const char *p;
FOREACH_STRING(p,
"/run/systemd/inaccessible/reg",
@@ -769,6 +770,7 @@ int main(int argc, char *argv[]) {
(void) unsetenv("USER");
(void) unsetenv("LOGNAME");
(void) unsetenv("SHELL");
+ (void) unsetenv("HOME");
can_unshare = have_namespaces();
diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c
index bf918c1d1e..2ddaabe7f8 100644
--- a/src/test/test-fileio.c
+++ b/src/test/test-fileio.c
@@ -26,7 +26,8 @@ static void test_parse_env_file(void) {
p[] = "/tmp/test-fileio-out-XXXXXX";
FILE *f;
_cleanup_free_ char *one = NULL, *two = NULL, *three = NULL, *four = NULL, *five = NULL,
- *six = NULL, *seven = NULL, *eight = NULL, *nine = NULL, *ten = NULL;
+ *six = NULL, *seven = NULL, *eight = NULL, *nine = NULL, *ten = NULL,
+ *eleven = NULL, *twelve = NULL, *thirteen = NULL;
_cleanup_strv_free_ char **a = NULL, **b = NULL;
char **i;
unsigned k;
@@ -43,7 +44,7 @@ static void test_parse_env_file(void) {
"three = \"333\n"
"xxxx\"\n"
"four = \'44\\\"44\'\n"
- "five = \'55\\\'55\' \"FIVE\" cinco \n"
+ "five = \"55\\\"55\" \"FIVE\" cinco \n"
"six = seis sechs\\\n"
" sis\n"
"seven=\"sevenval\" #nocomment\n"
@@ -51,7 +52,10 @@ static void test_parse_env_file(void) {
"export nine=nineval\n"
"ten=ignored\n"
"ten=ignored\n"
- "ten=", f);
+ "ten=\n"
+ "eleven=\\value\n"
+ "twelve=\"\\value\"\n"
+ "thirteen='\\value'", f);
fflush(f);
fclose(f);
@@ -65,14 +69,17 @@ static void test_parse_env_file(void) {
assert_se(streq_ptr(a[0], "one=BAR"));
assert_se(streq_ptr(a[1], "two=bar"));
assert_se(streq_ptr(a[2], "three=333\nxxxx"));
- assert_se(streq_ptr(a[3], "four=44\"44"));
- assert_se(streq_ptr(a[4], "five=55\'55FIVEcinco"));
+ assert_se(streq_ptr(a[3], "four=44\\\"44"));
+ assert_se(streq_ptr(a[4], "five=55\"55FIVEcinco"));
assert_se(streq_ptr(a[5], "six=seis sechs sis"));
assert_se(streq_ptr(a[6], "seven=sevenval#nocomment"));
assert_se(streq_ptr(a[7], "eight=eightval #nocomment"));
assert_se(streq_ptr(a[8], "export nine=nineval"));
assert_se(streq_ptr(a[9], "ten="));
- assert_se(a[10] == NULL);
+ assert_se(streq_ptr(a[10], "eleven=value"));
+ assert_se(streq_ptr(a[11], "twelve=\\value"));
+ assert_se(streq_ptr(a[12], "thirteen=\\value"));
+ assert_se(a[13] == NULL);
strv_env_clean(a);
@@ -93,7 +100,10 @@ static void test_parse_env_file(void) {
"seven", &seven,
"eight", &eight,
"export nine", &nine,
- "ten", &ten);
+ "ten", &ten,
+ "eleven", &eleven,
+ "twelve", &twelve,
+ "thirteen", &thirteen);
assert_se(r >= 0);
@@ -107,17 +117,23 @@ static void test_parse_env_file(void) {
log_info("eight=[%s]", strna(eight));
log_info("export nine=[%s]", strna(nine));
log_info("ten=[%s]", strna(nine));
+ log_info("eleven=[%s]", strna(eleven));
+ log_info("twelve=[%s]", strna(twelve));
+ log_info("thirteen=[%s]", strna(thirteen));
assert_se(streq(one, "BAR"));
assert_se(streq(two, "bar"));
assert_se(streq(three, "333\nxxxx"));
- assert_se(streq(four, "44\"44"));
- assert_se(streq(five, "55\'55FIVEcinco"));
+ assert_se(streq(four, "44\\\"44"));
+ assert_se(streq(five, "55\"55FIVEcinco"));
assert_se(streq(six, "seis sechs sis"));
assert_se(streq(seven, "sevenval#nocomment"));
assert_se(streq(eight, "eightval #nocomment"));
assert_se(streq(nine, "nineval"));
assert_se(ten == NULL);
+ assert_se(streq(eleven, "value"));
+ assert_se(streq(twelve, "\\value"));
+ assert_se(streq(thirteen, "\\value"));
{
/* prepare a temporary file to write the environment to */
diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c
index b3a4b1749c..e049abc4a4 100644
--- a/src/test/test-fs-util.c
+++ b/src/test/test-fs-util.c
@@ -361,11 +361,11 @@ static void test_unlink_noerrno(void) {
{
PROTECT_ERRNO;
- errno = -42;
+ errno = 42;
assert_se(unlink_noerrno(name) >= 0);
- assert_se(errno == -42);
+ assert_se(errno == 42);
assert_se(unlink_noerrno(name) < 0);
- assert_se(errno == -42);
+ assert_se(errno == 42);
}
}
diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c
index 6e9b94b933..52217429b1 100644
--- a/src/test/test-hexdecoct.c
+++ b/src/test/test-hexdecoct.c
@@ -234,7 +234,6 @@ static void test_unbase32hexmem(void) {
test_unbase32hexmem_one("CPNMUOJ1E8======", false, -EINVAL, NULL);
test_unbase32hexmem_one("A", false, -EINVAL, NULL);
- test_unbase32hexmem_one("A", false, -EINVAL, NULL);
test_unbase32hexmem_one("AAA", false, -EINVAL, NULL);
test_unbase32hexmem_one("AAAAAA", false, -EINVAL, NULL);
test_unbase32hexmem_one("AB", false, -EINVAL, NULL);
diff --git a/src/test/test-in-addr-util.c b/src/test/test-in-addr-util.c
index 75c3e305c3..16844e9565 100644
--- a/src/test/test-in-addr-util.c
+++ b/src/test/test-in-addr-util.c
@@ -2,83 +2,85 @@
#include <netinet/in.h>
+#include "log.h"
#include "in-addr-util.h"
-static void test_in_addr_prefix_from_string(const char *p, int family, int ret, const union in_addr_union *u, unsigned char prefixlen, bool use_default) {
+static void test_in_addr_prefix_from_string(
+ const char *p,
+ int family,
+ int ret,
+ const union in_addr_union *u,
+ unsigned char prefixlen,
+ int ret_refuse,
+ unsigned char prefixlen_refuse,
+ int ret_legacy,
+ unsigned char prefixlen_legacy) {
+
union in_addr_union q;
unsigned char l;
- int r;
+ int f, r;
- r = in_addr_prefix_from_string_internal(p, use_default, family, &q, &l);
+ r = in_addr_prefix_from_string(p, family, &q, &l);
assert_se(r == ret);
- if (r >= 0) {
- int f;
+ if (r < 0)
+ return;
+
+ assert_se(in_addr_equal(family, &q, u));
+ assert_se(l == prefixlen);
+
+ r = in_addr_prefix_from_string_auto(p, &f, &q, &l);
+ assert_se(r >= 0);
+
+ assert_se(f == family);
+ assert_se(in_addr_equal(family, &q, u));
+ assert_se(l == prefixlen);
+
+ r = in_addr_prefix_from_string_auto_internal(p, PREFIXLEN_REFUSE, &f, &q, &l);
+ assert_se(r == ret_refuse);
+ if (r >= 0) {
+ assert_se(f == family);
assert_se(in_addr_equal(family, &q, u));
- assert_se(l == prefixlen);
+ assert_se(l == prefixlen_refuse);
+ }
- r = in_addr_prefix_from_string_auto_internal(p, use_default, &f, &q, &l);
- assert_se(r >= 0);
+ r = in_addr_prefix_from_string_auto_internal(p, PREFIXLEN_LEGACY, &f, &q, &l);
+ assert_se(r == ret_legacy);
+ if (r >= 0) {
assert_se(f == family);
assert_se(in_addr_equal(family, &q, u));
- assert_se(l == prefixlen);
+ assert_se(l == prefixlen_legacy);
}
}
int main(int argc, char *argv[]) {
- test_in_addr_prefix_from_string("", AF_INET, -EINVAL, NULL, 0, false);
- test_in_addr_prefix_from_string("/", AF_INET, -EINVAL, NULL, 0, false);
- test_in_addr_prefix_from_string("/8", AF_INET, -EINVAL, NULL, 0, false);
- test_in_addr_prefix_from_string("1.2.3.4", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 32, false);
- test_in_addr_prefix_from_string("1.2.3.4/0", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 0, false);
- test_in_addr_prefix_from_string("1.2.3.4/1", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 1, false);
- test_in_addr_prefix_from_string("1.2.3.4/2", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 2, false);
- test_in_addr_prefix_from_string("1.2.3.4/32", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 32, false);
- test_in_addr_prefix_from_string("1.2.3.4/33", AF_INET, -ERANGE, NULL, 0, false);
- test_in_addr_prefix_from_string("1.2.3.4/-1", AF_INET, -ERANGE, NULL, 0, false);
- test_in_addr_prefix_from_string("::1", AF_INET, -EINVAL, NULL, 0, false);
-
- test_in_addr_prefix_from_string("", AF_INET6, -EINVAL, NULL, 0, false);
- test_in_addr_prefix_from_string("/", AF_INET6, -EINVAL, NULL, 0, false);
- test_in_addr_prefix_from_string("/8", AF_INET6, -EINVAL, NULL, 0, false);
- test_in_addr_prefix_from_string("::1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128, false);
- test_in_addr_prefix_from_string("::1/0", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0, false);
- test_in_addr_prefix_from_string("::1/1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 1, false);
- test_in_addr_prefix_from_string("::1/2", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 2, false);
- test_in_addr_prefix_from_string("::1/32", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 32, false);
- test_in_addr_prefix_from_string("::1/33", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 33, false);
- test_in_addr_prefix_from_string("::1/64", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 64, false);
- test_in_addr_prefix_from_string("::1/128", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128, false);
- test_in_addr_prefix_from_string("::1/129", AF_INET6, -ERANGE, NULL, 0, false);
- test_in_addr_prefix_from_string("::1/-1", AF_INET6, -ERANGE, NULL, 0, false);
-
- test_in_addr_prefix_from_string("", AF_INET, -EINVAL, NULL, 0, true);
- test_in_addr_prefix_from_string("/", AF_INET, -EINVAL, NULL, 0, true);
- test_in_addr_prefix_from_string("/8", AF_INET, -EINVAL, NULL, 0, true);
- test_in_addr_prefix_from_string("1.2.3.4", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 8, true);
- test_in_addr_prefix_from_string("1.2.3.4/0", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 0, true);
- test_in_addr_prefix_from_string("1.2.3.4/1", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 1, true);
- test_in_addr_prefix_from_string("1.2.3.4/2", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 2, true);
- test_in_addr_prefix_from_string("1.2.3.4/32", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 32, true);
- test_in_addr_prefix_from_string("1.2.3.4/33", AF_INET, -ERANGE, NULL, 0, true);
- test_in_addr_prefix_from_string("1.2.3.4/-1", AF_INET, -ERANGE, NULL, 0, true);
- test_in_addr_prefix_from_string("::1", AF_INET, -EINVAL, NULL, 0, true);
-
- test_in_addr_prefix_from_string("", AF_INET6, -EINVAL, NULL, 0, true);
- test_in_addr_prefix_from_string("/", AF_INET6, -EINVAL, NULL, 0, true);
- test_in_addr_prefix_from_string("/8", AF_INET6, -EINVAL, NULL, 0, true);
- test_in_addr_prefix_from_string("::1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0, true);
- test_in_addr_prefix_from_string("::1/0", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0, true);
- test_in_addr_prefix_from_string("::1/1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 1, true);
- test_in_addr_prefix_from_string("::1/2", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 2, true);
- test_in_addr_prefix_from_string("::1/32", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 32, true);
- test_in_addr_prefix_from_string("::1/33", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 33, true);
- test_in_addr_prefix_from_string("::1/64", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 64, true);
- test_in_addr_prefix_from_string("::1/128", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128, true);
- test_in_addr_prefix_from_string("::1/129", AF_INET6, -ERANGE, NULL, 0, true);
- test_in_addr_prefix_from_string("::1/-1", AF_INET6, -ERANGE, NULL, 0, true);
+ test_in_addr_prefix_from_string("", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
+ test_in_addr_prefix_from_string("/", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
+ test_in_addr_prefix_from_string("/8", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
+ test_in_addr_prefix_from_string("1.2.3.4", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 32, -ENOANO, 0, 0, 8);
+ test_in_addr_prefix_from_string("1.2.3.4/0", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 0, 0, 0, 0, 0);
+ test_in_addr_prefix_from_string("1.2.3.4/1", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 1, 0, 1, 0, 1);
+ test_in_addr_prefix_from_string("1.2.3.4/2", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 2, 0, 2, 0, 2);
+ test_in_addr_prefix_from_string("1.2.3.4/32", AF_INET, 0, &(union in_addr_union) { .in = (struct in_addr) { .s_addr = htobe32(0x01020304) } }, 32, 0, 32, 0, 32);
+ test_in_addr_prefix_from_string("1.2.3.4/33", AF_INET, -ERANGE, NULL, 0, -ERANGE, 0, -ERANGE, 0);
+ test_in_addr_prefix_from_string("1.2.3.4/-1", AF_INET, -ERANGE, NULL, 0, -ERANGE, 0, -ERANGE, 0);
+ test_in_addr_prefix_from_string("::1", AF_INET, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
+
+ test_in_addr_prefix_from_string("", AF_INET6, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
+ test_in_addr_prefix_from_string("/", AF_INET6, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
+ test_in_addr_prefix_from_string("/8", AF_INET6, -EINVAL, NULL, 0, -EINVAL, 0, -EINVAL, 0);
+ test_in_addr_prefix_from_string("::1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128, -ENOANO, 0, 0, 0);
+ test_in_addr_prefix_from_string("::1/0", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 0, 0, 0, 0, 0);
+ test_in_addr_prefix_from_string("::1/1", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 1, 0, 1, 0, 1);
+ test_in_addr_prefix_from_string("::1/2", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 2, 0, 2, 0, 2);
+ test_in_addr_prefix_from_string("::1/32", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 32, 0, 32, 0, 32);
+ test_in_addr_prefix_from_string("::1/33", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 33, 0, 33, 0, 33);
+ test_in_addr_prefix_from_string("::1/64", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 64, 0, 64, 0, 64);
+ test_in_addr_prefix_from_string("::1/128", AF_INET6, 0, &(union in_addr_union) { .in6 = IN6ADDR_LOOPBACK_INIT }, 128, 0, 128, 0, 128);
+ test_in_addr_prefix_from_string("::1/129", AF_INET6, -ERANGE, NULL, 0, -ERANGE, 0, -ERANGE, 0);
+ test_in_addr_prefix_from_string("::1/-1", AF_INET6, -ERANGE, NULL, 0, -ERANGE, 0, -ERANGE, 0);
return 0;
}
diff --git a/src/test/test-json.c b/src/test/test-json.c
index 5aa4d19dbe..fdf1b4f40c 100644
--- a/src/test/test-json.c
+++ b/src/test/test-json.c
@@ -1,9 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1+ */
#include <math.h>
-#if HAVE_VALGRIND_VALGRIND_H
-#include <valgrind/valgrind.h>
-#endif
#include "alloc-util.h"
#include "fd-util.h"
@@ -45,12 +42,13 @@ static void test_tokenizer(const char *data, ...) {
d = va_arg(ap, long double);
-#if HAVE_VALGRIND_VALGRIND_H
- if (!RUNNING_ON_VALGRIND)
-#endif
- /* Valgrind doesn't support long double calculations and automatically downgrades to 80bit:
- * http://www.valgrind.org/docs/manual/manual-core.html#manual-core.limits */
- assert_se(fabsl(d - v.real) < 0.001L);
+ /* Valgrind doesn't support long double calculations and automatically downgrades to 80bit:
+ * http://www.valgrind.org/docs/manual/manual-core.html#manual-core.limits.
+ * Some architectures might not support long double either.
+ */
+
+ assert_se(fabsl(d - v.real) < 1e-10 ||
+ fabsl((d - v.real) / v.real) < 1e-10);
} else if (t == JSON_TOKEN_INTEGER) {
intmax_t i;
@@ -211,7 +209,6 @@ static void test_2(JsonVariant *v) {
assert_se(p && json_variant_type(p) == JSON_VARIANT_REAL && fabsl(json_variant_real(p) - 1.27) < 0.001);
}
-
static void test_zeroes(JsonVariant *v) {
size_t i;
@@ -285,6 +282,7 @@ static void test_build(void) {
a = json_variant_unref(a);
b = json_variant_unref(b);
+ const char* arr_1234[] = {"one", "two", "three", "four", NULL};
assert_se(json_build(&a, JSON_BUILD_ARRAY(JSON_BUILD_OBJECT(JSON_BUILD_PAIR("x", JSON_BUILD_BOOLEAN(true)),
JSON_BUILD_PAIR("y", JSON_BUILD_OBJECT(JSON_BUILD_PAIR("this", JSON_BUILD_NULL)))),
JSON_BUILD_VARIANT(NULL),
@@ -292,8 +290,9 @@ static void test_build(void) {
JSON_BUILD_STRING(NULL),
JSON_BUILD_NULL,
JSON_BUILD_INTEGER(77),
- JSON_BUILD_ARRAY(JSON_BUILD_VARIANT(JSON_VARIANT_STRING_CONST("foobar")), JSON_BUILD_VARIANT(JSON_VARIANT_STRING_CONST("zzz"))),
- JSON_BUILD_STRV(STRV_MAKE("one", "two", "three", "four")))) >= 0);
+ JSON_BUILD_ARRAY(JSON_BUILD_VARIANT(JSON_VARIANT_STRING_CONST("foobar")),
+ JSON_BUILD_VARIANT(JSON_VARIANT_STRING_CONST("zzz"))),
+ JSON_BUILD_STRV((char**) arr_1234))) >= 0);
assert_se(json_variant_format(a, 0, &s) >= 0);
log_info("GOT: %s\n", s);
diff --git a/src/test/test-libudev.c b/src/test/test-libudev.c
index 10bf365035..15c0f8853d 100644
--- a/src/test/test-libudev.c
+++ b/src/test/test-libudev.c
@@ -7,6 +7,7 @@
#include <unistd.h>
#include "alloc-util.h"
+#include "build.h"
#include "fd-util.h"
#include "libudev-list-internal.h"
#include "libudev-util.h"
@@ -364,16 +365,23 @@ static void test_util_replace_whitespace(void) {
test_util_replace_whitespace_one_len("hoge hoge ", 1, "h");
test_util_replace_whitespace_one_len("hoge hoge ", 0, "");
- test_util_replace_whitespace_one_len(" hoge hoge ", 9, "hoge_hoge");
- test_util_replace_whitespace_one_len(" hoge hoge ", 8, "hoge_hog");
- test_util_replace_whitespace_one_len(" hoge hoge ", 7, "hoge_ho");
- test_util_replace_whitespace_one_len(" hoge hoge ", 6, "hoge_h");
- test_util_replace_whitespace_one_len(" hoge hoge ", 5, "hoge");
- test_util_replace_whitespace_one_len(" hoge hoge ", 4, "hoge");
- test_util_replace_whitespace_one_len(" hoge hoge ", 3, "hog");
- test_util_replace_whitespace_one_len(" hoge hoge ", 2, "ho");
- test_util_replace_whitespace_one_len(" hoge hoge ", 1, "h");
- test_util_replace_whitespace_one_len(" hoge hoge ", 0, "");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 16, "hoge_hoge");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 15, "hoge_hoge");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 14, "hoge_hog");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 13, "hoge_ho");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 12, "hoge_h");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 11, "hoge");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 10, "hoge");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 9, "hoge");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 8, "hoge");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 7, "hog");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 6, "ho");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 5, "h");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 4, "");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 3, "");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 2, "");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 1, "");
+ test_util_replace_whitespace_one_len(" hoge hoge ", 0, "");
}
static void test_util_resolve_subsys_kernel_one(const char *str, bool read_value, int retval, const char *expected) {
@@ -507,7 +515,7 @@ int main(int argc, char *argv[]) {
return EXIT_SUCCESS;
case 'V':
- printf("%s\n", PACKAGE_VERSION);
+ printf("%s\n", GIT_VERSION);
return EXIT_SUCCESS;
case 'm':
diff --git a/src/test/test-mountpoint-util.c b/src/test/test-mountpoint-util.c
index 6d8bee0d63..8e45c0b1a7 100644
--- a/src/test/test-mountpoint-util.c
+++ b/src/test/test-mountpoint-util.c
@@ -8,7 +8,6 @@
#include "fileio.h"
#include "hashmap.h"
#include "log.h"
-#include "log.h"
#include "mountpoint-util.h"
#include "path-util.h"
#include "rm-rf.h"
diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c
index 8854a94f6c..c64ca7b016 100644
--- a/src/test/test-path-util.c
+++ b/src/test/test-path-util.c
@@ -531,7 +531,7 @@ static void test_hidden_or_backup_file(void) {
static void test_systemd_installation_has_version(const char *path) {
int r;
- const unsigned versions[] = {0, 231, atoi(PACKAGE_VERSION), 999};
+ const unsigned versions[] = {0, 231, PROJECT_VERSION, 999};
unsigned i;
for (i = 0; i < ELEMENTSOF(versions); i++) {
diff --git a/src/test/test-prioq.c b/src/test/test-prioq.c
index bc5fdd15b2..53c9e090a7 100644
--- a/src/test/test-prioq.c
+++ b/src/test/test-prioq.c
@@ -69,6 +69,11 @@ static void test_struct(void) {
assert_se(q = prioq_new((compare_func_t) test_compare));
assert_se(s = set_new(&test_hash_ops));
+ assert_se(prioq_peek(q) == NULL);
+ assert_se(prioq_peek_by_index(q, 0) == NULL);
+ assert_se(prioq_peek_by_index(q, 1) == NULL);
+ assert_se(prioq_peek_by_index(q, (unsigned) -1) == NULL);
+
for (i = 0; i < SET_SIZE; i++) {
assert_se(t = new0(struct test, 1));
t->value = (unsigned) rand();
@@ -79,6 +84,17 @@ static void test_struct(void) {
assert_se(set_consume(s, t) >= 0);
}
+ for (i = 0; i < SET_SIZE; i++)
+ assert_se(prioq_peek_by_index(q, i));
+ assert_se(prioq_peek_by_index(q, SET_SIZE) == NULL);
+
+ unsigned count = 0;
+ PRIOQ_FOREACH_ITEM(q, t) {
+ assert_se(t);
+ count++;
+ }
+ assert_se(count == SET_SIZE);
+
while ((t = set_steal_first(s))) {
assert_se(prioq_remove(q, t, &t->idx) == 1);
assert_se(prioq_remove(q, t, &t->idx) == 0);
diff --git a/src/test/test-process-util.c b/src/test/test-process-util.c
index 5c87db08f5..b5ba651d89 100644
--- a/src/test/test-process-util.c
+++ b/src/test/test-process-util.c
@@ -70,11 +70,9 @@ static void test_get_process_comm(pid_t pid) {
assert_se(get_process_uid(pid, &u) == 0);
log_info("PID"PID_FMT" UID: "UID_FMT, pid, u);
- assert_se(u == 0 || pid != 1);
assert_se(get_process_gid(pid, &g) == 0);
log_info("PID"PID_FMT" GID: "GID_FMT, pid, g);
- assert_se(g == 0 || pid != 1);
r = get_process_environ(pid, &env);
assert_se(r >= 0 || r == -EACCES);
diff --git a/src/test/test-procfs-util.c b/src/test/test-procfs-util.c
index 08af380cc7..1d0612985b 100644
--- a/src/test/test-procfs-util.c
+++ b/src/test/test-procfs-util.c
@@ -18,7 +18,7 @@ int main(int argc, char *argv[]) {
assert_se(procfs_cpu_get_usage(&nsec) >= 0);
log_info("Current system CPU time: %s", format_timespan(buf, sizeof(buf), nsec/NSEC_PER_USEC, 1));
- assert_se(procfs_memory_get_current(&v) >= 0);
+ assert_se(procfs_memory_get_used(&v) >= 0);
log_info("Current memory usage: %s", format_bytes(buf, sizeof(buf), v));
assert_se(procfs_tasks_get_current(&v) >= 0);
diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c
index 7a1e496ed2..35b087653e 100644
--- a/src/test/test-sizeof.c
+++ b/src/test/test-sizeof.c
@@ -13,11 +13,12 @@
#pragma GCC diagnostic ignored "-Wtype-limits"
-#define info(t) \
- printf("%s → %zu bits%s\n", STRINGIFY(t), \
- sizeof(t)*CHAR_BIT, \
- strstr(STRINGIFY(t), "signed") ? "" : \
- ((t)-1 < (t)0 ? ", signed" : ", unsigned"));
+#define info(t) \
+ printf("%s → %zu bits%s, %zu byte alignment\n", STRINGIFY(t), \
+ sizeof(t)*CHAR_BIT, \
+ strstr(STRINGIFY(t), "signed") ? "" : \
+ (t)-1 < (t)0 ? ", signed" : ", unsigned", \
+ __alignof__(t))
enum Enum {
enum_value,
diff --git a/src/test/test-stat-util.c b/src/test/test-stat-util.c
index d16fdd90d1..0e2155e911 100644
--- a/src/test/test-stat-util.c
+++ b/src/test/test-stat-util.c
@@ -56,7 +56,6 @@ static void test_path_is_fs_type(void) {
}
assert_se(path_is_fs_type("/proc", PROC_SUPER_MAGIC) > 0);
assert_se(path_is_fs_type("/proc", BTRFS_SUPER_MAGIC) == 0);
- assert_se(path_is_fs_type("/proc", BTRFS_SUPER_MAGIC) == 0);
assert_se(path_is_fs_type("/i-dont-exist", BTRFS_SUPER_MAGIC) == -ENOENT);
}
diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c
index 2ec2ade3f1..eb6041c152 100644
--- a/src/test/test-time-util.c
+++ b/src/test/test-time-util.c
@@ -212,7 +212,6 @@ static void test_format_timespan(usec_t accuracy) {
test_format_timespan_one(12345678, accuracy);
test_format_timespan_one(1200000, accuracy);
test_format_timespan_one(1230000, accuracy);
- test_format_timespan_one(1230000, accuracy);
test_format_timespan_one(1234000, accuracy);
test_format_timespan_one(1234500, accuracy);
test_format_timespan_one(1234560, accuracy);
@@ -289,7 +288,6 @@ static void test_usec_sub_signed(void) {
assert_se(usec_sub_signed(4, 4) == 0);
assert_se(usec_sub_signed(4, 5) == 0);
assert_se(usec_sub_signed(USEC_INFINITY-3, -3) == USEC_INFINITY);
- assert_se(usec_sub_signed(USEC_INFINITY-3, -3) == USEC_INFINITY);
assert_se(usec_sub_signed(USEC_INFINITY-3, -4) == USEC_INFINITY);
assert_se(usec_sub_signed(USEC_INFINITY-3, -5) == USEC_INFINITY);
assert_se(usec_sub_signed(USEC_INFINITY, 5) == USEC_INFINITY);
diff --git a/src/test/test-udev.c b/src/test/test-udev.c
index 7a4622b875..ab31f5a2f1 100644
--- a/src/test/test-udev.c
+++ b/src/test/test-udev.c
@@ -11,6 +11,7 @@
#include <sys/signalfd.h>
#include <unistd.h>
+#include "build.h"
#include "device-private.h"
#include "fs-util.h"
#include "log.h"
@@ -81,7 +82,7 @@ static int run(int argc, char *argv[]) {
return 0;
}
- log_debug("version %s", PACKAGE_VERSION);
+ log_debug("version %s", GIT_VERSION);
mac_selinux_init();
action = argv[1];
diff --git a/src/test/test-util.c b/src/test/test-util.c
index 3c1b5f9b41..ffacd65669 100644
--- a/src/test/test-util.c
+++ b/src/test/test-util.c
@@ -139,11 +139,11 @@ static void test_container_of(void) {
uint64_t v1;
uint8_t pad2[2];
uint32_t v2;
- } _packed_ myval = { };
+ } myval = { };
log_info("/* %s */", __func__);
- assert_cc(sizeof(myval) == 17);
+ assert_cc(sizeof(myval) >= 17);
assert_se(container_of(&myval.v1, struct mytype, v1) == &myval);
assert_se(container_of(&myval.v2, struct mytype, v2) == &myval);
assert_se(container_of(&container_of(&myval.v2,
@@ -213,6 +213,30 @@ static void test_protect_errno(void) {
assert_se(errno == 12);
}
+static void test_unprotect_errno_inner_function(void) {
+ PROTECT_ERRNO;
+
+ errno = 2222;
+}
+
+static void test_unprotect_errno(void) {
+ log_info("/* %s */", __func__);
+
+ errno = 4711;
+
+ PROTECT_ERRNO;
+
+ errno = 815;
+
+ UNPROTECT_ERRNO;
+
+ assert_se(errno == 4711);
+
+ test_unprotect_errno_inner_function();
+
+ assert_se(errno == 4711);
+}
+
static void test_in_set(void) {
log_info("/* %s */", __func__);
@@ -383,6 +407,7 @@ int main(int argc, char *argv[]) {
test_div_round_up();
test_u64log2();
test_protect_errno();
+ test_unprotect_errno();
test_in_set();
test_log2i();
test_eqzero();
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
index e16888945c..eeb17b613e 100644
--- a/src/timedate/timedated.c
+++ b/src/timedate/timedated.c
@@ -160,7 +160,7 @@ static int context_ntp_service_is_active(Context *c) {
/* Call context_update_ntp_status() to update UnitStatusInfo before calling this. */
LIST_FOREACH(units, info, c->units)
- count += streq_ptr(info->active_state, "active");
+ count += !STRPTR_IN_SET(info->active_state, "inactive", "failed");
return count;
}
@@ -174,7 +174,7 @@ static int context_ntp_service_is_enabled(Context *c) {
/* Call context_update_ntp_status() to update UnitStatusInfo before calling this. */
LIST_FOREACH(units, info, c->units)
- count += STRPTR_IN_SET(info->unit_file_state, "enabled", "enabled-runtime");
+ count += !STRPTR_IN_SET(info->unit_file_state, "masked", "masked-runtime", "disabled", "bad");
return count;
}
@@ -523,6 +523,10 @@ static int property_get_can_ntp(
assert(reply);
assert(error);
+ if (c->slot_job_removed)
+ /* When the previous request is not finished, then assume NTP is enabled. */
+ return sd_bus_message_append(reply, "b", true);
+
r = context_update_ntp_status(c, bus, reply);
if (r < 0)
return r;
@@ -548,6 +552,10 @@ static int property_get_ntp(
assert(reply);
assert(error);
+ if (c->slot_job_removed)
+ /* When the previous request is not finished, then assume NTP is active. */
+ return sd_bus_message_append(reply, "b", true);
+
r = context_update_ntp_status(c, bus, reply);
if (r < 0)
return r;
@@ -735,6 +743,9 @@ static int method_set_time(sd_bus_message *m, void *userdata, sd_bus_error *erro
assert(m);
assert(c);
+ if (c->slot_job_removed)
+ return sd_bus_error_set(error, BUS_ERROR_AUTOMATIC_TIME_SYNC_ENABLED, "Previous request is not finished, refusing.");
+
r = context_update_ntp_status(c, bus, m);
if (r < 0)
return sd_bus_error_set_errnof(error, r, "Failed to update context: %m");
diff --git a/src/timesync/timesyncd-manager.c b/src/timesync/timesyncd-manager.c
index 4b0696f3a3..6fde4a316b 100644
--- a/src/timesync/timesyncd-manager.c
+++ b/src/timesync/timesyncd-manager.c
@@ -616,8 +616,9 @@ static int manager_receive_response(sd_event_source *source, int fd, uint32_t re
m->good = true;
server_address_pretty(m->current_server_address, &pretty);
- log_info("Synchronized to time server %s (%s).", strna(pretty), m->current_server_name->string);
- sd_notifyf(false, "STATUS=Synchronized to time server %s (%s).", strna(pretty), m->current_server_name->string);
+ /* "for the first time", as further successful syncs will not be logged. */
+ log_info("Synchronized to time server for the first time %s (%s).", strna(pretty), m->current_server_name->string);
+ sd_notifyf(false, "STATUS=Synchronized to time server for the first time %s (%s).", strna(pretty), m->current_server_name->string);
}
r = manager_arm_timer(m, m->poll_interval_usec);
@@ -937,7 +938,7 @@ void manager_free(Manager *m) {
sd_resolve_unref(m->resolve);
sd_event_unref(m->event);
- sd_bus_unref(m->bus);
+ sd_bus_flush_close_unref(m->bus);
free(m);
}
diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c
index 70774d757b..b4f70c0007 100644
--- a/src/timesync/timesyncd.c
+++ b/src/timesync/timesyncd.c
@@ -169,9 +169,7 @@ static int run(int argc, char *argv[]) {
log_debug_errno(r, "Failed to touch %s, ignoring: %m", CLOCK_FILE);
}
- (void) sd_event_get_exit_code(m->event, &r);
-
- return r;
+ return 0;
}
DEFINE_MAIN_FUNCTION(run);
diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
index 19225f8cfd..b66765b407 100644
--- a/src/tmpfiles/tmpfiles.c
+++ b/src/tmpfiles/tmpfiles.c
@@ -1463,7 +1463,7 @@ static int copy_files(Item *i) {
dfd, bn,
i->uid_set ? i->uid : UID_INVALID,
i->gid_set ? i->gid : GID_INVALID,
- COPY_REFLINK);
+ COPY_REFLINK | COPY_MERGE_EMPTY);
if (r < 0) {
struct stat a, b;
@@ -3130,7 +3130,7 @@ static int link_parent(ItemArray *a) {
return 0;
path = a->items[0].path;
- prefix = alloca(strlen(path) + 1);
+ prefix = newa(char, strlen(path) + 1);
PATH_FOREACH_PREFIX(prefix, path) {
ItemArray *j;
diff --git a/src/udev/meson.build b/src/udev/meson.build
index e378d9190c..9d3f6d1c56 100644
--- a/src/udev/meson.build
+++ b/src/udev/meson.build
@@ -41,6 +41,8 @@ libudev_core_sources = '''
net/link-config.h
net/ethtool-util.c
net/ethtool-util.h
+ net/naming-scheme.c
+ net/naming-scheme.h
'''.split()
if conf.get('HAVE_KMOD') == 1
@@ -187,12 +189,11 @@ endforeach
install_data('udev.conf',
install_dir : join_paths(sysconfdir, 'udev'))
-udev_pc = configure_file(
+configure_file(
input : 'udev.pc.in',
output : 'udev.pc',
- configuration : substs)
-install_data(udev_pc,
- install_dir : pkgconfigdatadir)
+ configuration : substs,
+ install_dir : pkgconfigdatadir == 'no' ? '' : pkgconfigdatadir)
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'udev/rules.d')))
diff --git a/src/udev/net/ethtool-util.c b/src/udev/net/ethtool-util.c
index bc0deaf347..0dcec03f67 100644
--- a/src/udev/net/ethtool-util.c
+++ b/src/udev/net/ethtool-util.c
@@ -31,18 +31,18 @@ static const char* const wol_table[_WOL_MAX] = {
[WOL_ARP] = "arp",
[WOL_MAGIC] = "magic",
[WOL_MAGICSECURE] = "secureon",
- [WOL_OFF] = "off"
+ [WOL_OFF] = "off",
};
DEFINE_STRING_TABLE_LOOKUP(wol, WakeOnLan);
DEFINE_CONFIG_PARSE_ENUM(config_parse_wol, wol, WakeOnLan, "Failed to parse WakeOnLan setting");
-static const char* const port_table[_NET_DEV_PORT_MAX] = {
+static const char* const port_table[] = {
[NET_DEV_PORT_TP] = "tp",
[NET_DEV_PORT_AUI] = "aui",
[NET_DEV_PORT_MII] = "mii",
[NET_DEV_PORT_FIBRE] = "fibre",
- [NET_DEV_PORT_BNC] = "bnc"
+ [NET_DEV_PORT_BNC] = "bnc",
};
DEFINE_STRING_TABLE_LOOKUP(port, NetDevPort);
@@ -583,7 +583,7 @@ int ethtool_set_glinksettings(int *fd, const char *ifname, struct link_config *l
struct ifreq ifr = {};
int r;
- if (link->autonegotiation != 0) {
+ if (link->autonegotiation != AUTONEG_DISABLE && eqzero(link->advertise)) {
log_info("link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.");
return 0;
}
@@ -612,9 +612,11 @@ int ethtool_set_glinksettings(int *fd, const char *ifname, struct link_config *l
if (link->port != _NET_DEV_PORT_INVALID)
u->base.port = link->port;
- u->base.autoneg = link->autonegotiation;
+ if (link->autonegotiation >= 0)
+ u->base.autoneg = link->autonegotiation;
if (!eqzero(link->advertise)) {
+ u->base.autoneg = AUTONEG_ENABLE;
memcpy(&u->link_modes.advertising, link->advertise, sizeof(link->advertise));
memzero((uint8_t*) &u->link_modes.advertising + sizeof(link->advertise),
ETHTOOL_LINK_MODE_MASK_MAX_KERNEL_NBYTES - sizeof(link->advertise));
diff --git a/src/udev/net/ethtool-util.h b/src/udev/net/ethtool-util.h
index e4bc5161d5..618b26bf59 100644
--- a/src/udev/net/ethtool-util.h
+++ b/src/udev/net/ethtool-util.h
@@ -42,14 +42,14 @@ typedef enum NetDevFeature {
} NetDevFeature;
typedef enum NetDevPort {
- NET_DEV_PORT_TP = 0x00,
- NET_DEV_PORT_AUI = 0x01,
- NET_DEV_PORT_MII = 0x02,
- NET_DEV_PORT_FIBRE = 0x03,
- NET_DEV_PORT_BNC = 0x04,
- NET_DEV_PORT_DA = 0x05,
- NET_DEV_PORT_NONE = 0xef,
- NET_DEV_PORT_OTHER = 0xff,
+ NET_DEV_PORT_TP = PORT_TP,
+ NET_DEV_PORT_AUI = PORT_AUI,
+ NET_DEV_PORT_MII = PORT_MII,
+ NET_DEV_PORT_FIBRE = PORT_FIBRE,
+ NET_DEV_PORT_BNC = PORT_BNC,
+ NET_DEV_PORT_DA = PORT_DA,
+ NET_DEV_PORT_NONE = PORT_NONE,
+ NET_DEV_PORT_OTHER = PORT_OTHER,
_NET_DEV_PORT_MAX,
_NET_DEV_PORT_INVALID = -1
} NetDevPort;
diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
index ac66ffd047..eb2477cea4 100644
--- a/src/udev/net/link-config.c
+++ b/src/udev/net/link-config.c
@@ -14,6 +14,7 @@
#include "link-config.h"
#include "log.h"
#include "missing_network.h"
+#include "naming-scheme.h"
#include "netlink-util.h"
#include "network-internal.h"
#include "parse-util.h"
@@ -186,6 +187,22 @@ static bool enable_name_policy(void) {
return proc_cmdline_get_bool("net.ifnames", &b) <= 0 || b;
}
+static int link_name_type(sd_device *device, unsigned *type) {
+ const char *s;
+ int r;
+
+ r = sd_device_get_sysattr_value(device, "name_assign_type", &s);
+ if (r < 0)
+ return log_device_debug_errno(device, r, "Failed to query name_assign_type: %m");
+
+ r = safe_atou(s, type);
+ if (r < 0)
+ return log_device_warning_errno(device, r, "Failed to parse name_assign_type \"%s\": %m", s);
+
+ log_device_debug(device, "Device has name_assign_type=%d", *type);
+ return 0;
+}
+
int link_config_load(link_config_ctx *ctx) {
_cleanup_strv_free_ char **files;
char **f;
@@ -256,13 +273,13 @@ int link_config_get(link_config_ctx *ctx, sd_device *device, link_config **ret)
if (name_assign_type == NET_NAME_ENUM) {
log_warning("Config file %s applies to device based on potentially unpredictable interface name '%s'",
- link->filename, sysname);
+ link->filename, sysname);
*ret = link;
return 0;
} else if (name_assign_type == NET_NAME_RENAMED) {
log_warning("Config file %s matches device based on renamed interface name '%s', ignoring",
- link->filename, sysname);
+ link->filename, sysname);
continue;
}
@@ -272,13 +289,11 @@ int link_config_get(link_config_ctx *ctx, sd_device *device, link_config **ret)
link->filename, sysname);
*ret = link;
-
return 0;
}
}
*ret = NULL;
-
return -ENOENT;
}
@@ -298,31 +313,6 @@ static bool mac_is_random(sd_device *device) {
return type == NET_ADDR_RANDOM;
}
-static bool should_rename(sd_device *device, bool respect_predictable) {
- const char *s;
- unsigned type;
- int r;
-
- /* if we can't get the assgin type, assume we should rename */
- if (sd_device_get_sysattr_value(device, "name_assign_type", &s) < 0)
- return true;
-
- r = safe_atou(s, &type);
- if (r < 0)
- return true;
-
- switch (type) {
- case NET_NAME_PREDICTABLE:
- /* the kernel claims to have given a predictable name */
- if (respect_predictable)
- return false;
- _fallthrough_;
- default:
- /* the name is known to be bad, or of an unknown type */
- return true;
- }
-}
-
static int get_mac(sd_device *device, bool want_random,
struct ether_addr *mac) {
int r;
@@ -349,12 +339,12 @@ static int get_mac(sd_device *device, bool want_random,
int link_config_apply(link_config_ctx *ctx, link_config *config,
sd_device *device, const char **name) {
- bool respect_predictable = false;
struct ether_addr generated_mac;
struct ether_addr *mac = NULL;
const char *new_name = NULL;
const char *old_name;
- unsigned speed;
+ unsigned speed, name_type = NET_NAME_UNKNOWN;
+ NamePolicy policy;
int r, ifindex;
assert(ctx);
@@ -407,38 +397,63 @@ int link_config_apply(link_config_ctx *ctx, link_config *config,
if (r < 0)
return log_device_warning_errno(device, r, "Could not find ifindex: %m");
- if (ctx->enable_name_policy && config->name_policy) {
- NamePolicy *policy;
- for (policy = config->name_policy;
- !new_name && *policy != _NAMEPOLICY_INVALID; policy++) {
- switch (*policy) {
- case NAMEPOLICY_KERNEL:
- respect_predictable = true;
- break;
- case NAMEPOLICY_DATABASE:
- (void) sd_device_get_property_value(device, "ID_NET_NAME_FROM_DATABASE", &new_name);
- break;
- case NAMEPOLICY_ONBOARD:
- (void) sd_device_get_property_value(device, "ID_NET_NAME_ONBOARD", &new_name);
- break;
- case NAMEPOLICY_SLOT:
- (void) sd_device_get_property_value(device, "ID_NET_NAME_SLOT", &new_name);
- break;
- case NAMEPOLICY_PATH:
- (void) sd_device_get_property_value(device, "ID_NET_NAME_PATH", &new_name);
- break;
- case NAMEPOLICY_MAC:
- (void) sd_device_get_property_value(device, "ID_NET_NAME_MAC", &new_name);
- break;
- default:
- break;
+ (void) link_name_type(device, &name_type);
+
+ if (IN_SET(name_type, NET_NAME_USER, NET_NAME_RENAMED)
+ && !naming_scheme_has(NAMING_ALLOW_RERENAMES)) {
+ log_device_debug(device, "Device already has a name given by userspace, not renaming.");
+ goto no_rename;
+ }
+
+ if (ctx->enable_name_policy && config->name_policy)
+ for (NamePolicy *p = config->name_policy; !new_name && *p != _NAMEPOLICY_INVALID; p++) {
+ policy = *p;
+
+ switch (policy) {
+ case NAMEPOLICY_KERNEL:
+ if (name_type != NET_NAME_PREDICTABLE)
+ continue;
+
+ /* The kernel claims to have given a predictable name, keep it. */
+ log_device_debug(device, "Policy *%s*: keeping predictable kernel name",
+ name_policy_to_string(policy));
+ goto no_rename;
+ case NAMEPOLICY_KEEP:
+ if (!IN_SET(name_type, NET_NAME_USER, NET_NAME_RENAMED))
+ continue;
+
+ log_device_debug(device, "Policy *%s*: keeping existing userspace name",
+ name_policy_to_string(policy));
+ goto no_rename;
+ case NAMEPOLICY_DATABASE:
+ (void) sd_device_get_property_value(device, "ID_NET_NAME_FROM_DATABASE", &new_name);
+ break;
+ case NAMEPOLICY_ONBOARD:
+ (void) sd_device_get_property_value(device, "ID_NET_NAME_ONBOARD", &new_name);
+ break;
+ case NAMEPOLICY_SLOT:
+ (void) sd_device_get_property_value(device, "ID_NET_NAME_SLOT", &new_name);
+ break;
+ case NAMEPOLICY_PATH:
+ (void) sd_device_get_property_value(device, "ID_NET_NAME_PATH", &new_name);
+ break;
+ case NAMEPOLICY_MAC:
+ (void) sd_device_get_property_value(device, "ID_NET_NAME_MAC", &new_name);
+ break;
+ default:
+ assert_not_reached("invalid policy");
}
}
- }
- if (!new_name && should_rename(device, respect_predictable))
+ if (new_name)
+ log_device_debug(device, "Policy *%s* yields \"%s\".", name_policy_to_string(policy), new_name);
+ else if (config->name) {
new_name = config->name;
+ log_device_debug(device, "Policies didn't yield a name, using specified Name=%s.", new_name);
+ } else
+ log_device_debug(device, "Policies didn't yield a name and Name= is not given, not renaming.");
+ no_rename:
switch (config->mac_policy) {
case MACPOLICY_PERSISTENT:
@@ -497,7 +512,7 @@ int link_get_driver(link_config_ctx *ctx, sd_device *device, char **ret) {
static const char* const mac_policy_table[_MACPOLICY_MAX] = {
[MACPOLICY_PERSISTENT] = "persistent",
[MACPOLICY_RANDOM] = "random",
- [MACPOLICY_NONE] = "none"
+ [MACPOLICY_NONE] = "none",
};
DEFINE_STRING_TABLE_LOOKUP(mac_policy, MACPolicy);
@@ -506,11 +521,12 @@ DEFINE_CONFIG_PARSE_ENUM(config_parse_mac_policy, mac_policy, MACPolicy,
static const char* const name_policy_table[_NAMEPOLICY_MAX] = {
[NAMEPOLICY_KERNEL] = "kernel",
+ [NAMEPOLICY_KEEP] = "keep",
[NAMEPOLICY_DATABASE] = "database",
[NAMEPOLICY_ONBOARD] = "onboard",
[NAMEPOLICY_SLOT] = "slot",
[NAMEPOLICY_PATH] = "path",
- [NAMEPOLICY_MAC] = "mac"
+ [NAMEPOLICY_MAC] = "mac",
};
DEFINE_STRING_TABLE_LOOKUP(name_policy, NamePolicy);
diff --git a/src/udev/net/link-config.h b/src/udev/net/link-config.h
index 8204959034..1113b1052e 100644
--- a/src/udev/net/link-config.h
+++ b/src/udev/net/link-config.h
@@ -22,6 +22,7 @@ typedef enum MACPolicy {
typedef enum NamePolicy {
NAMEPOLICY_KERNEL,
+ NAMEPOLICY_KEEP,
NAMEPOLICY_DATABASE,
NAMEPOLICY_ONBOARD,
NAMEPOLICY_SLOT,
diff --git a/src/udev/net/naming-scheme.c b/src/udev/net/naming-scheme.c
new file mode 100644
index 0000000000..27cede5e2e
--- /dev/null
+++ b/src/udev/net/naming-scheme.c
@@ -0,0 +1,64 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#include "alloc-util.h"
+#include "naming-scheme.h"
+#include "proc-cmdline.h"
+#include "string-util.h"
+
+static const NamingScheme naming_schemes[] = {
+ { "v238", NAMING_V238 },
+ { "v239", NAMING_V239 },
+ { "v240", NAMING_V240 },
+ /* … add more schemes here, as the logic to name devices is updated … */
+};
+
+static const NamingScheme* naming_scheme_from_name(const char *name) {
+ size_t i;
+
+ if (streq(name, "latest"))
+ return naming_schemes + ELEMENTSOF(naming_schemes) - 1;
+
+ for (i = 0; i < ELEMENTSOF(naming_schemes); i++)
+ if (streq(naming_schemes[i].name, name))
+ return naming_schemes + i;
+
+ return NULL;
+}
+
+const NamingScheme* naming_scheme(void) {
+ static const NamingScheme *cache = NULL;
+ _cleanup_free_ char *buffer = NULL;
+ const char *e, *k;
+
+ if (cache)
+ return cache;
+
+ /* Acquire setting from the kernel command line */
+ (void) proc_cmdline_get_key("net.naming-scheme", 0, &buffer);
+
+ /* Also acquire it from an env var */
+ e = getenv("NET_NAMING_SCHEME");
+ if (e) {
+ if (*e == ':') {
+ /* If prefixed with ':' the kernel cmdline takes precedence */
+ k = buffer ?: e + 1;
+ } else
+ k = e; /* Otherwise the env var takes precedence */
+ } else
+ k = buffer;
+
+ if (k) {
+ cache = naming_scheme_from_name(k);
+ if (cache) {
+ log_info("Using interface naming scheme '%s'.", cache->name);
+ return cache;
+ }
+
+ log_warning("Unknown interface naming scheme '%s' requested, ignoring.", k);
+ }
+
+ cache = naming_scheme_from_name(DEFAULT_NET_NAMING_SCHEME);
+ assert(cache);
+ log_info("Using default interface naming scheme '%s'.", cache->name);
+
+ return cache;
+}
diff --git a/src/udev/net/naming-scheme.h b/src/udev/net/naming-scheme.h
new file mode 100644
index 0000000000..0b3d9bff1d
--- /dev/null
+++ b/src/udev/net/naming-scheme.h
@@ -0,0 +1,48 @@
+/* SPDX-License-Identifier: LGPL-2.1+ */
+#pragma once
+
+#include <stdbool.h>
+
+#include "macro.h"
+
+/* So here's the deal: net_id is supposed to be an excercise in providing stable names for network devices. However, we
+ * also want to keep updating the naming scheme used in future versions of net_id. These two goals of course are
+ * contradictory: on one hand we want things to not change and on the other hand we want them to improve. Our way out
+ * of this dilemma is to introduce the "naming scheme" concept: each time we improve the naming logic we define a new
+ * flag for it. Then, we keep a list of schemes, each identified by a name associated with the flags it implements. Via
+ * a kernel command line and environment variable we then allow the user to pick the scheme they want us to follow:
+ * installers could "freeze" the used scheme at the moment of installation this way.
+ *
+ * Developers: each time you tweak the naming logic here, define a new flag below, and condition the tweak with
+ * it. Each time we do a release we'll then add a new scheme entry and include all newly defined flags.
+ *
+ * Note that this is only half a solution to the problem though: not only udev/net_id gets updated all the time, the
+ * kernel gets too. And thus a kernel that previously didn't expose some sysfs attribute we look for might eventually
+ * do, and thus affect our naming scheme too. Thus, enforcing a naming scheme will make interfacing more stable across
+ * OS versions, but not fully stabilize them. */
+typedef enum NamingSchemeFlags {
+ /* First, the individual features */
+ NAMING_SR_IOV_V = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a40008b8299529c978ed8e11de8f6*/
+ NAMING_NPAR_ARI = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6eab35d1cb9fa73889892702c27be09 */
+ NAMING_INFINIBAND = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df887797c9e05074a562ddacdcdf5e */
+ NAMING_ZERO_ACPI_INDEX = 1 << 3, /* Allow zero acpi_index field, see d81186ef4f6a888a70f20a1e73a812d6acb9e22f */
+ NAMING_ALLOW_RERENAMES = 1 << 4, /* Allow re-renaming of devices, see #9006 */
+
+ /* And now the masks that combine the features above */
+ NAMING_V238 = 0,
+ NAMING_V239 = NAMING_V238 | NAMING_SR_IOV_V | NAMING_NPAR_ARI,
+ NAMING_V240 = NAMING_V239 | NAMING_INFINIBAND | NAMING_ZERO_ACPI_INDEX | NAMING_ALLOW_RERENAMES,
+
+ _NAMING_SCHEME_FLAGS_INVALID = -1,
+} NamingSchemeFlags;
+
+typedef struct NamingScheme {
+ const char *name;
+ NamingSchemeFlags flags;
+} NamingScheme;
+
+const NamingScheme* naming_scheme(void);
+
+static inline bool naming_scheme_has(NamingSchemeFlags flags) {
+ return FLAGS_SET(naming_scheme()->flags, flags);
+}
diff --git a/src/udev/scsi_id/scsi_id.c b/src/udev/scsi_id/scsi_id.c
index e94f2946f9..2698cdd82f 100644
--- a/src/udev/scsi_id/scsi_id.c
+++ b/src/udev/scsi_id/scsi_id.c
@@ -18,6 +18,7 @@
#include <unistd.h>
#include "alloc-util.h"
+#include "build.h"
#include "fd-util.h"
#include "libudev-util.h"
#include "scsi_id.h"
@@ -370,7 +371,7 @@ static int set_options(int argc, char **argv,
break;
case 'V':
- printf("%s\n", PACKAGE_VERSION);
+ printf("%s\n", GIT_VERSION);
exit(EXIT_SUCCESS);
case 'x':
diff --git a/src/udev/udev-builtin-blkid.c b/src/udev/udev-builtin-blkid.c
index df0f95461d..69d6c4bbee 100644
--- a/src/udev/udev-builtin-blkid.c
+++ b/src/udev/udev-builtin-blkid.c
@@ -240,7 +240,7 @@ static int builtin_blkid(sd_device *dev, int argc, char *argv[], bool test) {
if (r < 0)
return log_device_error_errno(dev, r, "Failed to parse '%s' as an integer: %m", optarg);
if (offset < 0)
- return log_device_error_errno(dev, -ERANGE, "Invalid offset %"PRIi64": %m", offset);
+ return log_device_error_errno(dev, SYNTHETIC_ERRNO(ERANGE), "Invalid offset %"PRIi64": %m", offset);
break;
case 'R':
noraid = true;
diff --git a/src/udev/udev-builtin-btrfs.c b/src/udev/udev-builtin-btrfs.c
index 85dba3d099..956be59afb 100644
--- a/src/udev/udev-builtin-btrfs.c
+++ b/src/udev/udev-builtin-btrfs.c
@@ -18,7 +18,7 @@ static int builtin_btrfs(sd_device *dev, int argc, char *argv[], bool test) {
int r;
if (argc != 3 || !streq(argv[1], "ready"))
- return log_device_error_errno(dev, EINVAL, "Invalid arguments");
+ return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "Invalid arguments");
fd = open("/dev/btrfs-control", O_RDWR|O_CLOEXEC);
if (fd < 0)
diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c
index ccad98e892..225e0265a4 100644
--- a/src/udev/udev-builtin-hwdb.c
+++ b/src/udev/udev-builtin-hwdb.c
@@ -165,7 +165,7 @@ static int builtin_hwdb(sd_device *dev, int argc, char *argv[], bool test) {
if (r < 0)
return log_device_debug_errno(dev, r, "Failed to lookup hwdb: %m");
if (r == 0)
- return log_device_debug_errno(dev, ENOENT, "No entry found from hwdb: %m");
+ return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENODATA), "No entry found from hwdb.");
return r;
}
@@ -180,7 +180,7 @@ static int builtin_hwdb(sd_device *dev, int argc, char *argv[], bool test) {
if (r < 0)
return log_device_debug_errno(dev, r, "Failed to lookup hwdb: %m");
if (r == 0)
- return log_device_debug_errno(dev, ENOENT, "No entry found from hwdb: %m");
+ return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENODATA), "No entry found from hwdb.");
return r;
}
diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c
index 13e9f0108d..e3db55b1a9 100644
--- a/src/udev/udev-builtin-input_id.c
+++ b/src/udev/udev-builtin-input_id.c
@@ -42,7 +42,7 @@ static const struct range high_key_blocks[] = {
{ KEY_ALS_TOGGLE, BTN_TRIGGER_HAPPY }
};
-static inline int abs_size_mm(const struct input_absinfo *absinfo) {
+static int abs_size_mm(const struct input_absinfo *absinfo) {
/* Resolution is defined to be in units/mm for ABS_X/Y */
return (absinfo->maximum - absinfo->minimum) / absinfo->resolution;
}
diff --git a/src/udev/udev-builtin-keyboard.c b/src/udev/udev-builtin-keyboard.c
index cb49a17c33..d80cdd26aa 100644
--- a/src/udev/udev-builtin-keyboard.c
+++ b/src/udev/udev-builtin-keyboard.c
@@ -74,7 +74,7 @@ static int map_keycode(sd_device *dev, int fd, int scancode, const char *keycode
/* check if it's a numeric code already */
keycode_num = strtoul(keycode, &endptr, 0);
if (endptr[0] !='\0')
- return log_device_error_errno(dev, EINVAL, "Failed to parse key identifier '%s'", keycode);
+ return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "Failed to parse key identifier '%s'", keycode);
}
map.scan = scancode;
@@ -89,7 +89,7 @@ static int map_keycode(sd_device *dev, int fd, int scancode, const char *keycode
return 0;
}
-static inline char* parse_token(const char *current, int32_t *val_out) {
+static char* parse_token(const char *current, int32_t *val_out) {
char *next;
int32_t val;
@@ -152,7 +152,7 @@ static int set_trackpoint_sensitivity(sd_device *dev, const char *value) {
if (r < 0)
return log_device_error_errno(dev, r, "Failed to parse POINTINGSTICK_SENSITIVITY '%s': %m", value);
else if (val_i < 0 || val_i > 255)
- return log_device_error_errno(dev, ERANGE, "POINTINGSTICK_SENSITIVITY %d outside range [0..255]", val_i);
+ return log_device_error_errno(dev, SYNTHETIC_ERRNO(ERANGE), "POINTINGSTICK_SENSITIVITY %d outside range [0..255]", val_i);
xsprintf(val_s, "%d", val_i);
diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c
index 0292c4973c..03b281a771 100644
--- a/src/udev/udev-builtin-net_id.c
+++ b/src/udev/udev-builtin-net_id.c
@@ -106,6 +106,7 @@
#include "fd-util.h"
#include "fileio.h"
#include "fs-util.h"
+#include "naming-scheme.h"
#include "parse-util.h"
#include "proc-cmdline.h"
#include "stdio-util.h"
@@ -116,48 +117,6 @@
#define ONBOARD_INDEX_MAX (16*1024-1)
-/* So here's the deal: net_id is supposed to be an excercise in providing stable names for network devices. However, we
- * also want to keep updating the naming scheme used in future versions of net_id. These two goals of course are
- * contradictory: on one hand we want things to not change and on the other hand we want them to improve. Our way out
- * of this dilemma is to introduce the "naming scheme" concept: each time we improve the naming logic we define a new
- * flag for it. Then, we keep a list of schemes, each identified by a name associated with the flags it implements. Via
- * a kernel command line and environment variable we then allow the user to pick the scheme they want us to follow:
- * installers could "freeze" the used scheme at the moment of installation this way.
- *
- * Developers: each time you tweak the naming logic here, define a new flag below, and condition the tweak with
- * it. Each time we do a release we'll then add a new scheme entry and include all newly defined flags.
- *
- * Note that this is only half a solution to the problem though: not only udev/net_id gets updated all the time, the
- * kernel gets too. And thus a kernel that previously didn't expose some sysfs attribute we look for might eventually
- * do, and thus affect our naming scheme too. Thus, enforcing a naming scheme will make interfacing more stable across
- * OS versions, but not fully stabilize them. */
-typedef enum NamingSchemeFlags {
- /* First, the individual features */
- NAMING_SR_IOV_V = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a40008b8299529c978ed8e11de8f6*/
- NAMING_NPAR_ARI = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6eab35d1cb9fa73889892702c27be09 */
- NAMING_INFINIBAND = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df887797c9e05074a562ddacdcdf5e */
- NAMING_ZERO_ACPI_INDEX = 1 << 3, /* Allow zero acpi_index field, see d81186ef4f6a888a70f20a1e73a812d6acb9e22f */
-
- /* And now the masks that combine the features above */
- NAMING_V238 = 0,
- NAMING_V239 = NAMING_V238|NAMING_SR_IOV_V|NAMING_NPAR_ARI,
- NAMING_V240 = NAMING_V239|NAMING_INFINIBAND|NAMING_ZERO_ACPI_INDEX,
-
- _NAMING_SCHEME_FLAGS_INVALID = -1,
-} NamingSchemeFlags;
-
-typedef struct NamingScheme {
- const char *name;
- NamingSchemeFlags flags;
-} NamingScheme;
-
-static const NamingScheme naming_schemes[] = {
- { "v238", NAMING_V238 },
- { "v239", NAMING_V239 },
- { "v240", NAMING_V240 },
- /* … add more schemes here, as the logic to name devices is updated … */
-};
-
enum netname_type{
NET_UNDEF,
NET_PCI,
@@ -193,62 +152,6 @@ struct virtfn_info {
char suffix[IFNAMSIZ];
};
-static const NamingScheme* naming_scheme_from_name(const char *name) {
- size_t i;
-
- if (streq(name, "latest"))
- return naming_schemes + ELEMENTSOF(naming_schemes) - 1;
-
- for (i = 0; i < ELEMENTSOF(naming_schemes); i++)
- if (streq(naming_schemes[i].name, name))
- return naming_schemes + i;
-
- return NULL;
-}
-
-static const NamingScheme* naming_scheme(void) {
- static const NamingScheme *cache = NULL;
- _cleanup_free_ char *buffer = NULL;
- const char *e, *k;
-
- if (cache)
- return cache;
-
- /* Acquire setting from the kernel command line */
- (void) proc_cmdline_get_key("net.naming-scheme", 0, &buffer);
-
- /* Also acquire it from an env var */
- e = getenv("NET_NAMING_SCHEME");
- if (e) {
- if (*e == ':') {
- /* If prefixed with ':' the kernel cmdline takes precedence */
- k = buffer ?: e + 1;
- } else
- k = e; /* Otherwise the env var takes precedence */
- } else
- k = buffer;
-
- if (k) {
- cache = naming_scheme_from_name(k);
- if (cache) {
- log_info("Using interface naming scheme '%s'.", cache->name);
- return cache;
- }
-
- log_warning("Unknown interface naming scheme '%s' requested, ignoring.", k);
- }
-
- cache = naming_scheme_from_name(DEFAULT_NET_NAMING_SCHEME);
- assert(cache);
- log_info("Using default interface naming scheme '%s'.", cache->name);
-
- return cache;
-}
-
-static bool naming_scheme_has(NamingSchemeFlags flags) {
- return FLAGS_SET(naming_scheme()->flags, flags);
-}
-
/* skip intermediate virtio devices */
static sd_device *skip_virtio(sd_device *dev) {
sd_device *parent;
@@ -460,7 +363,7 @@ static int dev_pci_slot(sd_device *dev, struct netnames *names) {
}
}
- /* kernel provided front panel port name for multiple port PCI device */
+ /* kernel provided front panel port name for multi-port PCI device */
(void) sd_device_get_sysattr_value(dev, "phys_port_name", &port_name);
/* compose a name based on the raw kernel's PCI bus, slot numbers */
@@ -478,7 +381,7 @@ static int dev_pci_slot(sd_device *dev, struct netnames *names) {
if (l == 0)
names->pci_path[0] = '\0';
- /* ACPI _SUN — slot user number */
+ /* ACPI _SUN — slot user number */
r = sd_device_new_from_subsystem_sysname(&pci, "subsystem", "pci");
if (r < 0)
return r;
diff --git a/src/udev/udev-builtin-net_setup_link.c b/src/udev/udev-builtin-net_setup_link.c
index c0d3d4aa01..a845dfa5c1 100644
--- a/src/udev/udev-builtin-net_setup_link.c
+++ b/src/udev/udev-builtin-net_setup_link.c
@@ -16,7 +16,7 @@ static int builtin_net_setup_link(sd_device *dev, int argc, char **argv, bool te
int r;
if (argc > 1)
- return log_device_error_errno(dev, EINVAL, "This program takes no arguments.");
+ return log_device_error_errno(dev, SYNTHETIC_ERRNO(EINVAL), "This program takes no arguments.");
r = link_get_driver(ctx, dev, &driver);
if (r >= 0)
diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c
index 94f2740592..7ce1c5644f 100644
--- a/src/udev/udev-builtin-path_id.c
+++ b/src/udev/udev-builtin-path_id.c
@@ -110,7 +110,6 @@ static sd_device *handle_scsi_fibre_channel(sd_device *parent, char **path) {
assert(parent);
assert(path);
-
if (sd_device_get_parent_with_subsystem_devtype(parent, "scsi", "scsi_target", &targetdev) < 0)
return NULL;
if (sd_device_get_sysname(targetdev, &sysname) < 0)
diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c
index 3a61be10ca..48ce295a46 100644
--- a/src/udev/udev-builtin.c
+++ b/src/udev/udev-builtin.c
@@ -139,7 +139,7 @@ int udev_builtin_add_property(sd_device *dev, bool test, const char *key, const
key, val ? "=" : "", strempty(val));
if (test)
- printf("%s=%s\n", key, val);
+ printf("%s=%s\n", key, strempty(val));
return 0;
}
diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c
index d90ebb7259..c217815ac6 100644
--- a/src/udev/udev-ctrl.c
+++ b/src/udev/udev-ctrl.c
@@ -213,14 +213,12 @@ static struct udev_ctrl_connection *udev_ctrl_connection_free(struct udev_ctrl_c
DEFINE_TRIVIAL_REF_UNREF_FUNC(struct udev_ctrl_connection, udev_ctrl_connection, udev_ctrl_connection_free);
-static int ctrl_send(struct udev_ctrl *uctrl, enum udev_ctrl_msg_type type, int intval, const char *buf, int timeout) {
- struct udev_ctrl_msg_wire ctrl_msg_wire;
- int err = 0;
-
- memzero(&ctrl_msg_wire, sizeof(struct udev_ctrl_msg_wire));
- strcpy(ctrl_msg_wire.version, "udev-" PACKAGE_VERSION);
- ctrl_msg_wire.magic = UDEV_CTRL_MAGIC;
- ctrl_msg_wire.type = type;
+static int ctrl_send(struct udev_ctrl *uctrl, enum udev_ctrl_msg_type type, int intval, const char *buf, usec_t timeout) {
+ struct udev_ctrl_msg_wire ctrl_msg_wire = {
+ .version = "udev-" STRINGIFY(PROJECT_VERSION),
+ .magic = UDEV_CTRL_MAGIC,
+ .type = type,
+ };
if (buf)
strscpy(ctrl_msg_wire.buf, sizeof(ctrl_msg_wire.buf), buf);
@@ -228,74 +226,64 @@ static int ctrl_send(struct udev_ctrl *uctrl, enum udev_ctrl_msg_type type, int
ctrl_msg_wire.intval = intval;
if (!uctrl->connected) {
- if (connect(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen) < 0) {
- err = -errno;
- goto out;
- }
+ if (connect(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen) < 0)
+ return -errno;
uctrl->connected = true;
}
- if (send(uctrl->sock, &ctrl_msg_wire, sizeof(ctrl_msg_wire), 0) < 0) {
- err = -errno;
- goto out;
- }
+ if (send(uctrl->sock, &ctrl_msg_wire, sizeof(ctrl_msg_wire), 0) < 0)
+ return -errno;
/* wait for peer message handling or disconnect */
for (;;) {
- struct pollfd pfd[1];
+ struct pollfd pfd = {
+ .fd = uctrl->sock,
+ .events = POLLIN,
+ };
int r;
- pfd[0].fd = uctrl->sock;
- pfd[0].events = POLLIN;
- r = poll(pfd, 1, timeout * MSEC_PER_SEC);
+ r = poll(&pfd, 1, DIV_ROUND_UP(timeout, USEC_PER_MSEC));
if (r < 0) {
if (errno == EINTR)
continue;
- err = -errno;
- break;
- }
-
- if (r > 0 && pfd[0].revents & POLLERR) {
- err = -EIO;
- break;
+ return -errno;
}
-
if (r == 0)
- err = -ETIMEDOUT;
- break;
+ return -ETIMEDOUT;
+ if (pfd.revents & POLLERR)
+ return -EIO;
+ return 0;
}
-out:
- return err;
}
-int udev_ctrl_send_set_log_level(struct udev_ctrl *uctrl, int priority, int timeout) {
+int udev_ctrl_send_set_log_level(struct udev_ctrl *uctrl, int priority, usec_t timeout) {
return ctrl_send(uctrl, UDEV_CTRL_SET_LOG_LEVEL, priority, NULL, timeout);
}
-int udev_ctrl_send_stop_exec_queue(struct udev_ctrl *uctrl, int timeout) {
+int udev_ctrl_send_stop_exec_queue(struct udev_ctrl *uctrl, usec_t timeout) {
return ctrl_send(uctrl, UDEV_CTRL_STOP_EXEC_QUEUE, 0, NULL, timeout);
}
-int udev_ctrl_send_start_exec_queue(struct udev_ctrl *uctrl, int timeout) {
+int udev_ctrl_send_start_exec_queue(struct udev_ctrl *uctrl, usec_t timeout) {
return ctrl_send(uctrl, UDEV_CTRL_START_EXEC_QUEUE, 0, NULL, timeout);
}
-int udev_ctrl_send_reload(struct udev_ctrl *uctrl, int timeout) {
+int udev_ctrl_send_reload(struct udev_ctrl *uctrl, usec_t timeout) {
return ctrl_send(uctrl, UDEV_CTRL_RELOAD, 0, NULL, timeout);
}
-int udev_ctrl_send_set_env(struct udev_ctrl *uctrl, const char *key, int timeout) {
+int udev_ctrl_send_set_env(struct udev_ctrl *uctrl, const char *key, usec_t timeout) {
return ctrl_send(uctrl, UDEV_CTRL_SET_ENV, 0, key, timeout);
}
-int udev_ctrl_send_set_children_max(struct udev_ctrl *uctrl, int count, int timeout) {
+int udev_ctrl_send_set_children_max(struct udev_ctrl *uctrl, int count, usec_t timeout) {
return ctrl_send(uctrl, UDEV_CTRL_SET_CHILDREN_MAX, count, NULL, timeout);
}
-int udev_ctrl_send_ping(struct udev_ctrl *uctrl, int timeout) {
+int udev_ctrl_send_ping(struct udev_ctrl *uctrl, usec_t timeout) {
return ctrl_send(uctrl, UDEV_CTRL_PING, 0, NULL, timeout);
}
-int udev_ctrl_send_exit(struct udev_ctrl *uctrl, int timeout) {
+int udev_ctrl_send_exit(struct udev_ctrl *uctrl, usec_t timeout) {
return ctrl_send(uctrl, UDEV_CTRL_EXIT, 0, NULL, timeout);
}
diff --git a/src/udev/udev-ctrl.h b/src/udev/udev-ctrl.h
index 87021cb880..8e452a4249 100644
--- a/src/udev/udev-ctrl.h
+++ b/src/udev/udev-ctrl.h
@@ -2,6 +2,7 @@
#pragma once
#include "macro.h"
+#include "time-util.h"
struct udev_ctrl;
struct udev_ctrl *udev_ctrl_new(void);
@@ -10,14 +11,14 @@ int udev_ctrl_enable_receiving(struct udev_ctrl *uctrl);
struct udev_ctrl *udev_ctrl_unref(struct udev_ctrl *uctrl);
int udev_ctrl_cleanup(struct udev_ctrl *uctrl);
int udev_ctrl_get_fd(struct udev_ctrl *uctrl);
-int udev_ctrl_send_set_log_level(struct udev_ctrl *uctrl, int priority, int timeout);
-int udev_ctrl_send_stop_exec_queue(struct udev_ctrl *uctrl, int timeout);
-int udev_ctrl_send_start_exec_queue(struct udev_ctrl *uctrl, int timeout);
-int udev_ctrl_send_reload(struct udev_ctrl *uctrl, int timeout);
-int udev_ctrl_send_ping(struct udev_ctrl *uctrl, int timeout);
-int udev_ctrl_send_exit(struct udev_ctrl *uctrl, int timeout);
-int udev_ctrl_send_set_env(struct udev_ctrl *uctrl, const char *key, int timeout);
-int udev_ctrl_send_set_children_max(struct udev_ctrl *uctrl, int count, int timeout);
+int udev_ctrl_send_set_log_level(struct udev_ctrl *uctrl, int priority, usec_t timeout);
+int udev_ctrl_send_stop_exec_queue(struct udev_ctrl *uctrl, usec_t timeout);
+int udev_ctrl_send_start_exec_queue(struct udev_ctrl *uctrl, usec_t timeout);
+int udev_ctrl_send_reload(struct udev_ctrl *uctrl, usec_t timeout);
+int udev_ctrl_send_ping(struct udev_ctrl *uctrl, usec_t timeout);
+int udev_ctrl_send_exit(struct udev_ctrl *uctrl, usec_t timeout);
+int udev_ctrl_send_set_env(struct udev_ctrl *uctrl, const char *key, usec_t timeout);
+int udev_ctrl_send_set_children_max(struct udev_ctrl *uctrl, int count, usec_t timeout);
struct udev_ctrl_connection;
struct udev_ctrl_connection *udev_ctrl_get_connection(struct udev_ctrl *uctrl);
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
index e28d6a5d08..07b7365e3a 100644
--- a/src/udev/udev-event.c
+++ b/src/udev/udev-event.c
@@ -504,38 +504,34 @@ static int on_spawn_timeout_warning(sd_event_source *s, uint64_t usec, void *use
static int on_spawn_sigchld(sd_event_source *s, const siginfo_t *si, void *userdata) {
Spawn *spawn = userdata;
+ int ret = -EIO;
assert(spawn);
switch (si->si_code) {
case CLD_EXITED:
- if (si->si_status == 0) {
+ if (si->si_status == 0)
log_debug("Process '%s' succeeded.", spawn->cmd);
- sd_event_exit(sd_event_source_get_event(s), 0);
-
- return 1;
- }
-
- log_full(spawn->accept_failure ? LOG_DEBUG : LOG_WARNING,
- "Process '%s' failed with exit code %i.", spawn->cmd, si->si_status);
+ else
+ log_full(spawn->accept_failure ? LOG_DEBUG : LOG_WARNING,
+ "Process '%s' failed with exit code %i.", spawn->cmd, si->si_status);
+ ret = si->si_status;
break;
case CLD_KILLED:
case CLD_DUMPED:
- log_warning("Process '%s' terminated by signal %s.", spawn->cmd, signal_to_string(si->si_status));
-
+ log_error("Process '%s' terminated by signal %s.", spawn->cmd, signal_to_string(si->si_status));
break;
default:
log_error("Process '%s' failed due to unknown reason.", spawn->cmd);
}
- sd_event_exit(sd_event_source_get_event(s), -EIO);
-
+ sd_event_exit(sd_event_source_get_event(s), ret);
return 1;
}
static int spawn_wait(Spawn *spawn) {
_cleanup_(sd_event_unrefp) sd_event *e = NULL;
- int r, ret;
+ int r;
assert(spawn);
@@ -570,27 +566,23 @@ static int spawn_wait(Spawn *spawn) {
}
}
- r = sd_event_add_io(e, NULL, spawn->fd_stdout, EPOLLIN, on_spawn_io, spawn);
- if (r < 0)
- return r;
+ if (spawn->fd_stdout >= 0) {
+ r = sd_event_add_io(e, NULL, spawn->fd_stdout, EPOLLIN, on_spawn_io, spawn);
+ if (r < 0)
+ return r;
+ }
- r = sd_event_add_io(e, NULL, spawn->fd_stderr, EPOLLIN, on_spawn_io, spawn);
- if (r < 0)
- return r;
+ if (spawn->fd_stderr >= 0) {
+ r = sd_event_add_io(e, NULL, spawn->fd_stderr, EPOLLIN, on_spawn_io, spawn);
+ if (r < 0)
+ return r;
+ }
r = sd_event_add_child(e, NULL, spawn->pid, WEXITED, on_spawn_sigchld, spawn);
if (r < 0)
return r;
- r = sd_event_loop(e);
- if (r < 0)
- return r;
-
- r = sd_event_get_exit_code(e, &ret);
- if (r < 0)
- return r;
-
- return ret;
+ return sd_event_loop(e);
}
int udev_event_spawn(UdevEvent *event,
@@ -675,12 +667,12 @@ int udev_event_spawn(UdevEvent *event,
};
r = spawn_wait(&spawn);
if (r < 0)
- return log_error_errno(r, "Failed to wait spawned command '%s': %m", cmd);
+ return log_error_errno(r, "Failed to wait for spawned command '%s': %m", cmd);
if (result)
result[spawn.result_len] = '\0';
- return r;
+ return r; /* 0 for success, and positive if the program failed */
}
static int rename_netif(UdevEvent *event) {
@@ -895,7 +887,7 @@ void udev_event_execute_run(UdevEvent *event, usec_t timeout_usec) {
(void) usleep(event->exec_delay_usec);
}
- udev_event_spawn(event, timeout_usec, false, command, NULL, 0);
+ (void) udev_event_spawn(event, timeout_usec, false, command, NULL, 0);
}
}
}
diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c
index c11eb8c1ac..1c00dd1e9e 100644
--- a/src/udev/udev-node.c
+++ b/src/udev/udev-node.c
@@ -181,6 +181,9 @@ static int link_find_prioritized(sd_device *dev, bool add, const char *stackdir,
priority = db_prio;
}
+ if (!target)
+ return -ENOENT;
+
*ret = TAKE_PTR(target);
return 0;
}
@@ -297,7 +300,7 @@ static int node_permissions_apply(sd_device *dev, bool apply,
return log_device_debug_errno(dev, errno, "cannot stat() node '%s' (%m)", devnode);
if (((stats.st_mode & S_IFMT) != (mode & S_IFMT)) || (stats.st_rdev != devnum))
- return log_device_debug_errno(dev, EEXIST, "Found node '%s' with non-matching devnum %s, skip handling",
+ return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EEXIST), "Found node '%s' with non-matching devnum %s, skip handling",
devnode, id_filename);
if (apply) {
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index 53c68d254a..bc9c6c26c5 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -441,8 +441,8 @@ static void dump_rules(UdevRules *rules) {
dump_token(rules, &rules->tokens[i]);
}
#else
-static inline void dump_token(UdevRules *rules, struct token *token) {}
-static inline void dump_rules(UdevRules *rules) {}
+static void dump_token(UdevRules *rules, struct token *token) {}
+static void dump_rules(UdevRules *rules) {}
#endif /* ENABLE_DEBUG_UDEV */
static int add_token(UdevRules *rules, struct token *token) {
@@ -645,11 +645,13 @@ static int import_program_into_properties(UdevEvent *event,
const char *program) {
char result[UTIL_LINE_SIZE];
char *line;
- int err;
+ int r;
- err = udev_event_spawn(event, timeout_usec, true, program, result, sizeof(result));
- if (err < 0)
- return err;
+ r = udev_event_spawn(event, timeout_usec, false, program, result, sizeof result);
+ if (r < 0)
+ return r;
+ if (r > 0)
+ return -EIO;
line = result;
while (line) {
@@ -831,13 +833,15 @@ static const char *get_key_attribute(char *str) {
return NULL;
}
-static void rule_add_key(struct rule_tmp *rule_tmp, enum token_type type,
- enum operation_type op,
- const char *value, const void *data) {
+static int rule_add_key(struct rule_tmp *rule_tmp, enum token_type type,
+ enum operation_type op,
+ const char *value, const void *data) {
struct token *token = rule_tmp->token + rule_tmp->token_cur;
const char *attr = NULL;
- assert(rule_tmp->token_cur < ELEMENTSOF(rule_tmp->token));
+ if (rule_tmp->token_cur >= ELEMENTSOF(rule_tmp->token))
+ return -E2BIG;
+
memzero(token, sizeof(struct token));
switch (type) {
@@ -968,6 +972,8 @@ static void rule_add_key(struct rule_tmp *rule_tmp, enum token_type type,
token->key.type = type;
token->key.op = op;
rule_tmp->token_cur++;
+
+ return 0;
}
static int sort_token(UdevRules *rules, struct rule_tmp *rule_tmp) {
@@ -1009,6 +1015,7 @@ static int sort_token(UdevRules *rules, struct rule_tmp *rule_tmp) {
#define LOG_RULE_WARNING(fmt, ...) LOG_RULE_FULL(LOG_WARNING, fmt, ##__VA_ARGS__)
#define LOG_RULE_DEBUG(fmt, ...) LOG_RULE_FULL(LOG_DEBUG, fmt, ##__VA_ARGS__)
#define LOG_AND_RETURN(fmt, ...) { LOG_RULE_ERROR(fmt, __VA_ARGS__); return; }
+#define LOG_AND_RETURN_ADD_KEY LOG_AND_RETURN("Temporary rule array too small, aborting event processing with %u items", rule_tmp.token_cur);
static void add_rule(UdevRules *rules, char *line,
const char *filename, unsigned filename_off, unsigned lineno) {
@@ -1018,6 +1025,7 @@ static void add_rule(UdevRules *rules, char *line,
.rules = rules,
.rule.type = TK_RULE,
};
+ int r;
/* the offset in the rule is limited to unsigned short */
if (filename_off < USHRT_MAX)
@@ -1051,26 +1059,26 @@ static void add_rule(UdevRules *rules, char *line,
break;
}
- if (rule_tmp.token_cur >= ELEMENTSOF(rule_tmp.token))
- LOG_AND_RETURN("Temporary rule array too small, aborting event processing with %u items", rule_tmp.token_cur);
-
if (streq(key, "ACTION")) {
if (op > OP_MATCH_MAX)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_M_ACTION, op, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_M_ACTION, op, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "DEVPATH")) {
if (op > OP_MATCH_MAX)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_M_DEVPATH, op, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_M_DEVPATH, op, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "KERNEL")) {
if (op > OP_MATCH_MAX)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_M_KERNEL, op, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_M_KERNEL, op, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "SUBSYSTEM")) {
if (op > OP_MATCH_MAX)
@@ -1081,15 +1089,18 @@ static void add_rule(UdevRules *rules, char *line,
if (!streq(value, "subsystem"))
LOG_RULE_WARNING("'%s' must be specified as 'subsystem'; please fix", value);
- rule_add_key(&rule_tmp, TK_M_SUBSYSTEM, op, "subsystem|class|bus", NULL);
+ r = rule_add_key(&rule_tmp, TK_M_SUBSYSTEM, op, "subsystem|class|bus", NULL);
} else
- rule_add_key(&rule_tmp, TK_M_SUBSYSTEM, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_M_SUBSYSTEM, op, value, NULL);
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "DRIVER")) {
if (op > OP_MATCH_MAX)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_M_DRIVER, op, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_M_DRIVER, op, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (startswith(key, "ATTR{")) {
attr = get_key_attribute(key + STRLEN("ATTR"));
@@ -1100,9 +1111,11 @@ static void add_rule(UdevRules *rules, char *line,
LOG_AND_RETURN("Invalid %s operation", "ATTR");
if (op < OP_MATCH_MAX)
- rule_add_key(&rule_tmp, TK_M_ATTR, op, value, attr);
+ r = rule_add_key(&rule_tmp, TK_M_ATTR, op, value, attr);
else
- rule_add_key(&rule_tmp, TK_A_ATTR, op, value, attr);
+ r = rule_add_key(&rule_tmp, TK_A_ATTR, op, value, attr);
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (startswith(key, "SYSCTL{")) {
attr = get_key_attribute(key + STRLEN("SYSCTL"));
@@ -1113,9 +1126,11 @@ static void add_rule(UdevRules *rules, char *line,
LOG_AND_RETURN("Invalid %s operation", "ATTR");
if (op < OP_MATCH_MAX)
- rule_add_key(&rule_tmp, TK_M_SYSCTL, op, value, attr);
+ r = rule_add_key(&rule_tmp, TK_M_SYSCTL, op, value, attr);
else
- rule_add_key(&rule_tmp, TK_A_SYSCTL, op, value, attr);
+ r = rule_add_key(&rule_tmp, TK_A_SYSCTL, op, value, attr);
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (startswith(key, "SECLABEL{")) {
attr = get_key_attribute(key + STRLEN("SECLABEL"));
@@ -1125,25 +1140,29 @@ static void add_rule(UdevRules *rules, char *line,
if (op == OP_REMOVE)
LOG_AND_RETURN("Invalid %s operation", "SECLABEL");
- rule_add_key(&rule_tmp, TK_A_SECLABEL, op, value, attr);
+ if (rule_add_key(&rule_tmp, TK_A_SECLABEL, op, value, attr) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "KERNELS")) {
if (op > OP_MATCH_MAX)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_M_KERNELS, op, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_M_KERNELS, op, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "SUBSYSTEMS")) {
if (op > OP_MATCH_MAX)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_M_SUBSYSTEMS, op, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_M_SUBSYSTEMS, op, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "DRIVERS")) {
if (op > OP_MATCH_MAX)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_M_DRIVERS, op, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_M_DRIVERS, op, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (startswith(key, "ATTRS{")) {
if (op > OP_MATCH_MAX)
@@ -1157,13 +1176,15 @@ static void add_rule(UdevRules *rules, char *line,
LOG_RULE_WARNING("'device' link may not be available in future kernels; please fix");
if (strstr(attr, "../"))
LOG_RULE_WARNING("Direct reference to parent sysfs directory, may break in future kernels; please fix");
- rule_add_key(&rule_tmp, TK_M_ATTRS, op, value, attr);
+ if (rule_add_key(&rule_tmp, TK_M_ATTRS, op, value, attr) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "TAGS")) {
if (op > OP_MATCH_MAX)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_M_TAGS, op, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_M_TAGS, op, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (startswith(key, "ENV{")) {
attr = get_key_attribute(key + STRLEN("ENV"));
@@ -1174,7 +1195,7 @@ static void add_rule(UdevRules *rules, char *line,
LOG_AND_RETURN("Invalid %s operation", "ENV");
if (op < OP_MATCH_MAX)
- rule_add_key(&rule_tmp, TK_M_ENV, op, value, attr);
+ r = rule_add_key(&rule_tmp, TK_M_ENV, op, value, attr);
else {
if (STR_IN_SET(attr,
"ACTION",
@@ -1190,26 +1211,32 @@ static void add_rule(UdevRules *rules, char *line,
"TAGS"))
LOG_AND_RETURN("Invalid ENV attribute, '%s' cannot be set", attr);
- rule_add_key(&rule_tmp, TK_A_ENV, op, value, attr);
+ r = rule_add_key(&rule_tmp, TK_A_ENV, op, value, attr);
}
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "TAG")) {
if (op < OP_MATCH_MAX)
- rule_add_key(&rule_tmp, TK_M_TAG, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_M_TAG, op, value, NULL);
else
- rule_add_key(&rule_tmp, TK_A_TAG, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_A_TAG, op, value, NULL);
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "PROGRAM")) {
if (op == OP_REMOVE)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_M_PROGRAM, op, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_M_PROGRAM, op, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "RESULT")) {
if (op > OP_MATCH_MAX)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_M_RESULT, op, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_M_RESULT, op, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (startswith(key, "IMPORT")) {
attr = get_key_attribute(key + STRLEN("IMPORT"));
@@ -1227,28 +1254,34 @@ static void add_rule(UdevRules *rules, char *line,
if (cmd >= 0) {
LOG_RULE_DEBUG("IMPORT found builtin '%s', replacing", value);
- rule_add_key(&rule_tmp, TK_M_IMPORT_BUILTIN, op, value, &cmd);
+ if (rule_add_key(&rule_tmp, TK_M_IMPORT_BUILTIN, op, value, &cmd) < 0)
+ LOG_AND_RETURN_ADD_KEY;
continue;
}
}
- rule_add_key(&rule_tmp, TK_M_IMPORT_PROG, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_M_IMPORT_PROG, op, value, NULL);
} else if (streq(attr, "builtin")) {
const enum udev_builtin_cmd cmd = udev_builtin_lookup(value);
- if (cmd < 0)
- LOG_RULE_WARNING("IMPORT{builtin} '%s' unknown", value);
- else
- rule_add_key(&rule_tmp, TK_M_IMPORT_BUILTIN, op, value, &cmd);
+ if (cmd < 0) {
+ LOG_RULE_WARNING("IMPORT{builtin} '%s' unknown, ignoring", value);
+ continue;
+ } else
+ r = rule_add_key(&rule_tmp, TK_M_IMPORT_BUILTIN, op, value, &cmd);
} else if (streq(attr, "file"))
- rule_add_key(&rule_tmp, TK_M_IMPORT_FILE, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_M_IMPORT_FILE, op, value, NULL);
else if (streq(attr, "db"))
- rule_add_key(&rule_tmp, TK_M_IMPORT_DB, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_M_IMPORT_DB, op, value, NULL);
else if (streq(attr, "cmdline"))
- rule_add_key(&rule_tmp, TK_M_IMPORT_CMDLINE, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_M_IMPORT_CMDLINE, op, value, NULL);
else if (streq(attr, "parent"))
- rule_add_key(&rule_tmp, TK_M_IMPORT_PARENT, op, value, NULL);
- else
+ r = rule_add_key(&rule_tmp, TK_M_IMPORT_PARENT, op, value, NULL);
+ else {
LOG_RULE_ERROR("Ignoring unknown %s{} type '%s'", "IMPORT", attr);
+ continue;
+ }
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (startswith(key, "TEST")) {
mode_t mode = 0;
@@ -1259,9 +1292,11 @@ static void add_rule(UdevRules *rules, char *line,
attr = get_key_attribute(key + STRLEN("TEST"));
if (attr) {
mode = strtol(attr, NULL, 8);
- rule_add_key(&rule_tmp, TK_M_TEST, op, value, &mode);
+ r = rule_add_key(&rule_tmp, TK_M_TEST, op, value, &mode);
} else
- rule_add_key(&rule_tmp, TK_M_TEST, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_M_TEST, op, value, NULL);
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (startswith(key, "RUN")) {
attr = get_key_attribute(key + STRLEN("RUN"));
@@ -1273,16 +1308,21 @@ static void add_rule(UdevRules *rules, char *line,
if (streq(attr, "builtin")) {
const enum udev_builtin_cmd cmd = udev_builtin_lookup(value);
- if (cmd < 0)
- LOG_RULE_ERROR("RUN{builtin}: '%s' unknown", value);
- else
- rule_add_key(&rule_tmp, TK_A_RUN_BUILTIN, op, value, &cmd);
+ if (cmd < 0) {
+ LOG_RULE_ERROR("RUN{builtin}: '%s' unknown, ignoring", value);
+ continue;
+ } else
+ r = rule_add_key(&rule_tmp, TK_A_RUN_BUILTIN, op, value, &cmd);
} else if (streq(attr, "program")) {
const enum udev_builtin_cmd cmd = _UDEV_BUILTIN_MAX;
- rule_add_key(&rule_tmp, TK_A_RUN_PROGRAM, op, value, &cmd);
- } else
+ r = rule_add_key(&rule_tmp, TK_A_RUN_PROGRAM, op, value, &cmd);
+ } else {
LOG_RULE_ERROR("Ignoring unknown %s{} type '%s'", "RUN", attr);
+ continue;
+ }
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (streq(key, "LABEL")) {
if (op == OP_REMOVE)
@@ -1294,14 +1334,15 @@ static void add_rule(UdevRules *rules, char *line,
if (op == OP_REMOVE)
LOG_AND_RETURN("Invalid %s operation", key);
- rule_add_key(&rule_tmp, TK_A_GOTO, 0, value, NULL);
+ if (rule_add_key(&rule_tmp, TK_A_GOTO, 0, value, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else if (startswith(key, "NAME")) {
if (op == OP_REMOVE)
LOG_AND_RETURN("Invalid %s operation", key);
if (op < OP_MATCH_MAX)
- rule_add_key(&rule_tmp, TK_M_NAME, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_M_NAME, op, value, NULL);
else {
if (streq(value, "%k")) {
LOG_RULE_WARNING("NAME=\"%%k\" is ignored, because it breaks kernel supplied names; please remove");
@@ -1311,8 +1352,10 @@ static void add_rule(UdevRules *rules, char *line,
LOG_RULE_DEBUG("NAME=\"\" is ignored, because udev will not delete any device nodes; please remove");
continue;
}
- rule_add_key(&rule_tmp, TK_A_NAME, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_A_NAME, op, value, NULL);
}
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
rule_tmp.rule.rule.can_set_name = true;
} else if (streq(key, "SYMLINK")) {
@@ -1320,9 +1363,11 @@ static void add_rule(UdevRules *rules, char *line,
LOG_AND_RETURN("Invalid %s operation", key);
if (op < OP_MATCH_MAX)
- rule_add_key(&rule_tmp, TK_M_DEVLINK, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_M_DEVLINK, op, value, NULL);
else
- rule_add_key(&rule_tmp, TK_A_DEVLINK, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_A_DEVLINK, op, value, NULL);
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
rule_tmp.rule.rule.can_set_name = true;
} else if (streq(key, "OWNER")) {
@@ -1334,12 +1379,18 @@ static void add_rule(UdevRules *rules, char *line,
uid = strtoul(value, &endptr, 10);
if (endptr[0] == '\0')
- rule_add_key(&rule_tmp, TK_A_OWNER_ID, op, NULL, &uid);
+ r = rule_add_key(&rule_tmp, TK_A_OWNER_ID, op, NULL, &uid);
else if (rules->resolve_name_timing == RESOLVE_NAME_EARLY && !strchr("$%", value[0])) {
uid = add_uid(rules, value);
- rule_add_key(&rule_tmp, TK_A_OWNER_ID, op, NULL, &uid);
+ r = rule_add_key(&rule_tmp, TK_A_OWNER_ID, op, NULL, &uid);
} else if (rules->resolve_name_timing != RESOLVE_NAME_NEVER)
- rule_add_key(&rule_tmp, TK_A_OWNER, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_A_OWNER, op, value, NULL);
+ else {
+ LOG_RULE_ERROR("Invalid %s operation", key);
+ continue;
+ }
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
rule_tmp.rule.rule.can_set_name = true;
@@ -1352,12 +1403,18 @@ static void add_rule(UdevRules *rules, char *line,
gid = strtoul(value, &endptr, 10);
if (endptr[0] == '\0')
- rule_add_key(&rule_tmp, TK_A_GROUP_ID, op, NULL, &gid);
+ r = rule_add_key(&rule_tmp, TK_A_GROUP_ID, op, NULL, &gid);
else if ((rules->resolve_name_timing == RESOLVE_NAME_EARLY) && !strchr("$%", value[0])) {
gid = add_gid(rules, value);
- rule_add_key(&rule_tmp, TK_A_GROUP_ID, op, NULL, &gid);
+ r = rule_add_key(&rule_tmp, TK_A_GROUP_ID, op, NULL, &gid);
} else if (rules->resolve_name_timing != RESOLVE_NAME_NEVER)
- rule_add_key(&rule_tmp, TK_A_GROUP, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_A_GROUP, op, value, NULL);
+ else {
+ LOG_RULE_ERROR("Invalid %s operation", key);
+ continue;
+ }
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
rule_tmp.rule.rule.can_set_name = true;
@@ -1370,9 +1427,12 @@ static void add_rule(UdevRules *rules, char *line,
mode = strtol(value, &endptr, 8);
if (endptr[0] == '\0')
- rule_add_key(&rule_tmp, TK_A_MODE_ID, op, NULL, &mode);
+ r = rule_add_key(&rule_tmp, TK_A_MODE_ID, op, NULL, &mode);
else
- rule_add_key(&rule_tmp, TK_A_MODE, op, value, NULL);
+ r = rule_add_key(&rule_tmp, TK_A_MODE, op, value, NULL);
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
+
rule_tmp.rule.rule.can_set_name = true;
} else if (streq(key, "OPTIONS")) {
@@ -1385,37 +1445,48 @@ static void add_rule(UdevRules *rules, char *line,
if (pos) {
int prio = atoi(pos + STRLEN("link_priority="));
- rule_add_key(&rule_tmp, TK_A_DEVLINK_PRIO, op, NULL, &prio);
+ if (rule_add_key(&rule_tmp, TK_A_DEVLINK_PRIO, op, NULL, &prio) < 0)
+ LOG_AND_RETURN_ADD_KEY;
}
pos = strstr(value, "string_escape=");
if (pos) {
pos += STRLEN("string_escape=");
if (startswith(pos, "none"))
- rule_add_key(&rule_tmp, TK_A_STRING_ESCAPE_NONE, op, NULL, NULL);
+ r = rule_add_key(&rule_tmp, TK_A_STRING_ESCAPE_NONE, op, NULL, NULL);
else if (startswith(pos, "replace"))
- rule_add_key(&rule_tmp, TK_A_STRING_ESCAPE_REPLACE, op, NULL, NULL);
+ r = rule_add_key(&rule_tmp, TK_A_STRING_ESCAPE_REPLACE, op, NULL, NULL);
+ else {
+ LOG_RULE_ERROR("OPTIONS: unknown string_escape mode '%s', ignoring", pos);
+ r = 0;
+ }
+ if (r < 0)
+ LOG_AND_RETURN_ADD_KEY;
}
pos = strstr(value, "db_persist");
if (pos)
- rule_add_key(&rule_tmp, TK_A_DB_PERSIST, op, NULL, NULL);
+ if (rule_add_key(&rule_tmp, TK_A_DB_PERSIST, op, NULL, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
pos = strstr(value, "nowatch");
if (pos) {
static const int zero = 0;
- rule_add_key(&rule_tmp, TK_A_INOTIFY_WATCH, op, NULL, &zero);
+ if (rule_add_key(&rule_tmp, TK_A_INOTIFY_WATCH, op, NULL, &zero) < 0)
+ LOG_AND_RETURN_ADD_KEY;
} else {
static const int one = 1;
pos = strstr(value, "watch");
if (pos)
- rule_add_key(&rule_tmp, TK_A_INOTIFY_WATCH, op, NULL, &one);
+ if (rule_add_key(&rule_tmp, TK_A_INOTIFY_WATCH, op, NULL, &one) < 0)
+ LOG_AND_RETURN_ADD_KEY;
}
pos = strstr(value, "static_node=");
if (pos) {
pos += STRLEN("static_node=");
- rule_add_key(&rule_tmp, TK_A_STATIC_NODE, op, pos, NULL);
+ if (rule_add_key(&rule_tmp, TK_A_STATIC_NODE, op, pos, NULL) < 0)
+ LOG_AND_RETURN_ADD_KEY;
rule_tmp.rule.rule.has_static_node = true;
}
@@ -1959,7 +2030,7 @@ int udev_rules_apply_to_event(
rules_str(rules, rule->rule.filename_off),
rule->rule.filename_line);
- if (udev_event_spawn(event, timeout_usec, true, program, result, sizeof(result)) < 0) {
+ if (udev_event_spawn(event, timeout_usec, true, program, result, sizeof(result)) != 0) {
if (cur->key.op != OP_NOMATCH)
goto nomatch;
} else {
@@ -2229,13 +2300,12 @@ int udev_rules_apply_to_event(
r = hashmap_put(event->seclabel_list, name, label);
if (r < 0)
return log_oom();
-
- name = label = NULL;
-
log_device_debug(dev, "SECLABEL{%s}='%s' %s:%u",
name, label,
rules_str(rules, rule->rule.filename_off),
rule->rule.filename_line);
+ name = label = NULL;
+
break;
}
case TK_A_ENV: {
diff --git a/src/udev/udev.pc.in b/src/udev/udev.pc.in
index e384a6f7c9..5acbb2d01a 100644
--- a/src/udev/udev.pc.in
+++ b/src/udev/udev.pc.in
@@ -1,5 +1,5 @@
Name: udev
Description: udev
-Version: @PACKAGE_VERSION@
+Version: @PROJECT_VERSION@
udevdir=@udevlibexecdir@
diff --git a/src/udev/udevadm-control.c b/src/udev/udevadm-control.c
index d9320418cf..7cfc4c929d 100644
--- a/src/udev/udevadm-control.c
+++ b/src/udev/udevadm-control.c
@@ -26,6 +26,7 @@
#include "udevadm.h"
#include "udev-ctrl.h"
#include "util.h"
+#include "virt.h"
static int help(void) {
printf("%s control OPTION\n\n"
@@ -39,6 +40,7 @@ static int help(void) {
" -R --reload Reload rules and databases\n"
" -p --property=KEY=VALUE Set a global property for all events\n"
" -m --children-max=N Maximum number of children\n"
+ " --ping Wait for udev to respond to a ping message\n"
" -t --timeout=SECONDS Maximum time to block for a reply\n"
, program_invocation_short_name);
@@ -47,22 +49,27 @@ static int help(void) {
int control_main(int argc, char *argv[], void *userdata) {
_cleanup_(udev_ctrl_unrefp) struct udev_ctrl *uctrl = NULL;
- int timeout = 60;
+ usec_t timeout = 60 * USEC_PER_SEC;
int c, r;
+ enum {
+ ARG_PING = 0x100,
+ };
+
static const struct option options[] = {
- { "exit", no_argument, NULL, 'e' },
- { "log-priority", required_argument, NULL, 'l' },
- { "stop-exec-queue", no_argument, NULL, 's' },
- { "start-exec-queue", no_argument, NULL, 'S' },
- { "reload", no_argument, NULL, 'R' },
- { "reload-rules", no_argument, NULL, 'R' }, /* alias for -R */
- { "property", required_argument, NULL, 'p' },
- { "env", required_argument, NULL, 'p' }, /* alias for -p */
- { "children-max", required_argument, NULL, 'm' },
- { "timeout", required_argument, NULL, 't' },
- { "version", no_argument, NULL, 'V' },
- { "help", no_argument, NULL, 'h' },
+ { "exit", no_argument, NULL, 'e' },
+ { "log-priority", required_argument, NULL, 'l' },
+ { "stop-exec-queue", no_argument, NULL, 's' },
+ { "start-exec-queue", no_argument, NULL, 'S' },
+ { "reload", no_argument, NULL, 'R' },
+ { "reload-rules", no_argument, NULL, 'R' }, /* alias for -R */
+ { "property", required_argument, NULL, 'p' },
+ { "env", required_argument, NULL, 'p' }, /* alias for -p */
+ { "children-max", required_argument, NULL, 'm' },
+ { "ping", no_argument, NULL, ARG_PING },
+ { "timeout", required_argument, NULL, 't' },
+ { "version", no_argument, NULL, 'V' },
+ { "help", no_argument, NULL, 'h' },
{}
};
@@ -70,12 +77,18 @@ int control_main(int argc, char *argv[], void *userdata) {
if (r < 0)
return r;
+ if (running_in_chroot() > 0) {
+ log_info("Running in chroot, ignoring request.");
+ return 0;
+ }
+
if (argc <= 1)
- log_error("Option missing");
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "This command expects one or more options.");
uctrl = udev_ctrl_new();
if (!uctrl)
- return -ENOMEM;
+ return log_oom();
while ((c = getopt_long(argc, argv, "el:sSRp:m:t:Vh", options, NULL)) >= 0)
switch (c) {
@@ -109,10 +122,9 @@ int control_main(int argc, char *argv[], void *userdata) {
return r;
break;
case 'p':
- if (!strchr(optarg, '=')) {
- log_error("expect <KEY>=<value> instead of '%s'", optarg);
- return -EINVAL;
- }
+ if (!strchr(optarg, '='))
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "expect <KEY>=<value> instead of '%s'", optarg);
+
r = udev_ctrl_send_set_env(uctrl, optarg, timeout);
if (r < 0)
return r;
@@ -129,19 +141,16 @@ int control_main(int argc, char *argv[], void *userdata) {
return r;
break;
}
- case 't': {
- usec_t s;
-
- r = parse_sec(optarg, &s);
+ case ARG_PING:
+ r = udev_ctrl_send_ping(uctrl, timeout);
if (r < 0)
- return log_error_errno(r, "Failed to parse timeout value '%s'.", optarg);
-
- if (DIV_ROUND_UP(s, USEC_PER_SEC) > INT_MAX)
- log_error("Timeout value is out of range, ignoring.");
- else
- timeout = s != USEC_INFINITY ? (int) DIV_ROUND_UP(s, USEC_PER_SEC) : INT_MAX;
+ return log_error_errno(r, "Failed to connect to udev daemon: %m");
+ break;
+ case 't':
+ r = parse_sec(optarg, &timeout);
+ if (r < 0)
+ return log_error_errno(r, "Failed to parse timeout value '%s': %m", optarg);
break;
- }
case 'V':
return print_version();
case 'h':
@@ -152,13 +161,9 @@ int control_main(int argc, char *argv[], void *userdata) {
assert_not_reached("Unknown option.");
}
- if (optind < argc) {
- log_error("Extraneous argument: %s", argv[optind]);
- return -EINVAL;
- } else if (optind == 1) {
- log_error("Option missing");
- return -EINVAL;
- }
+ if (optind < argc)
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
+ "Extraneous argument: %s", argv[optind]);
return 0;
}
diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c
index d141bc74b2..ebd15d384a 100644
--- a/src/udev/udevadm-info.c
+++ b/src/udev/udevadm-info.c
@@ -61,12 +61,15 @@ static bool skip_attribute(const char *name) {
static void print_all_attributes(sd_device *device, const char *key) {
const char *name, *value;
- FOREACH_DEVICE_PROPERTY(device, name, value) {
+ FOREACH_DEVICE_SYSATTR(device, name) {
size_t len;
if (skip_attribute(name))
continue;
+ if (sd_device_get_sysattr_value(device, name, &value) < 0)
+ continue;
+
/* skip any values that look like a path */
if (value[0] == '/')
continue;
@@ -387,10 +390,8 @@ int info_main(int argc, char *argv[], void *userdata) {
query = QUERY_PATH;
else if (streq(optarg, "all"))
query = QUERY_ALL;
- else {
- log_error("unknown query type");
- return -EINVAL;
- }
+ else
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "unknown query type");
break;
case 'r':
arg_root = true;
@@ -413,6 +414,7 @@ int info_main(int argc, char *argv[], void *userdata) {
arg_export = true;
break;
case 'P':
+ arg_export = true;
arg_export_prefix = optarg;
break;
case 'V':
@@ -425,7 +427,6 @@ int info_main(int argc, char *argv[], void *userdata) {
assert_not_reached("Unknown option");
}
-
if (action == ACTION_DEVICE_ID_FILE) {
if (argv[optind])
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
diff --git a/src/udev/udevadm-monitor.c b/src/udev/udevadm-monitor.c
index f7737d0790..3dde3f338a 100644
--- a/src/udev/udevadm-monitor.c
+++ b/src/udev/udevadm-monitor.c
@@ -17,6 +17,7 @@
#include "signal-util.h"
#include "string-util.h"
#include "udevadm.h"
+#include "virt.h"
static bool arg_show_property = false;
static bool arg_print_kernel = false;
@@ -143,11 +144,11 @@ static int parse_argv(int argc, char *argv[]) {
slash = strchr(optarg, '/');
if (slash) {
- devtype = strdup(devtype + 1);
+ devtype = strdup(slash + 1);
if (!devtype)
return -ENOMEM;
- subsystem = strndup(optarg, devtype - optarg);
+ subsystem = strndup(optarg, slash - optarg);
} else
subsystem = strdup(optarg);
@@ -210,6 +211,11 @@ int monitor_main(int argc, char *argv[], void *userdata) {
if (r <= 0)
goto finalize;
+ if (running_in_chroot() > 0) {
+ log_info("Running in chroot, ignoring request.");
+ return 0;
+ }
+
/* Callers are expecting to see events as they happen: Line buffering */
setlinebuf(stdout);
diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c
index 4ae237d430..8d9c4509ff 100644
--- a/src/udev/udevadm-settle.c
+++ b/src/udev/udevadm-settle.c
@@ -18,6 +18,7 @@
#include "udevadm.h"
#include "udev-ctrl.h"
#include "util.h"
+#include "virt.h"
static usec_t arg_timeout = 120 * USEC_PER_SEC;
static const char *arg_exists = NULL;
@@ -88,6 +89,11 @@ int settle_main(int argc, char *argv[], void *userdata) {
if (r <= 0)
return r;
+ if (running_in_chroot() > 0) {
+ log_info("Running in chroot, ignoring request.");
+ return 0;
+ }
+
deadline = now(CLOCK_MONOTONIC) + arg_timeout;
/* guarantee that the udev daemon isn't pre-processing */
@@ -96,9 +102,9 @@ int settle_main(int argc, char *argv[], void *userdata) {
uctrl = udev_ctrl_new();
if (uctrl) {
- r = udev_ctrl_send_ping(uctrl, MAX(5U, arg_timeout / USEC_PER_SEC));
+ r = udev_ctrl_send_ping(uctrl, MAX(5 * USEC_PER_SEC, arg_timeout));
if (r < 0) {
- log_debug_errno(r, "Failed to connect to udev daemon.");
+ log_debug_errno(r, "Failed to connect to udev daemon: %m");
return 0;
}
}
diff --git a/src/udev/udevadm-trigger.c b/src/udev/udevadm-trigger.c
index f13a08f3f9..95329469e3 100644
--- a/src/udev/udevadm-trigger.c
+++ b/src/udev/udevadm-trigger.c
@@ -10,11 +10,14 @@
#include "fd-util.h"
#include "fileio.h"
#include "path-util.h"
+#include "process-util.h"
#include "set.h"
#include "string-util.h"
#include "strv.h"
#include "udevadm.h"
#include "udevadm-util.h"
+#include "udev-ctrl.h"
+#include "virt.h"
static bool arg_verbose = false;
static bool arg_dry_run = false;
@@ -117,6 +120,8 @@ static int help(void) {
" --name-match=NAME Trigger devices with this /dev name\n"
" -b --parent-match=NAME Trigger devices with that parent device\n"
" -w --settle Wait for the triggered events to complete\n"
+ " --wait-daemon[=SECONDS] Wait for udevd daemon to be initialized\n"
+ " before triggering uevents\n"
, program_invocation_short_name);
return 0;
@@ -125,6 +130,7 @@ static int help(void) {
int trigger_main(int argc, char *argv[], void *userdata) {
enum {
ARG_NAME = 0x100,
+ ARG_PING,
};
static const struct option options[] = {
@@ -142,6 +148,7 @@ int trigger_main(int argc, char *argv[], void *userdata) {
{ "name-match", required_argument, NULL, ARG_NAME },
{ "parent-match", required_argument, NULL, 'b' },
{ "settle", no_argument, NULL, 'w' },
+ { "wait-daemon", optional_argument, NULL, ARG_PING },
{ "version", no_argument, NULL, 'V' },
{ "help", no_argument, NULL, 'h' },
{}
@@ -155,9 +162,15 @@ int trigger_main(int argc, char *argv[], void *userdata) {
_cleanup_(sd_device_monitor_unrefp) sd_device_monitor *m = NULL;
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
_cleanup_set_free_free_ Set *settle_set = NULL;
- bool settle = false;
+ usec_t ping_timeout_usec = 5 * USEC_PER_SEC;
+ bool settle = false, ping = false;
int c, r;
+ if (running_in_chroot() > 0) {
+ log_info("Running in chroot, ignoring request.");
+ return 0;
+ }
+
r = sd_device_enumerator_new(&e);
if (r < 0)
return r;
@@ -182,18 +195,14 @@ int trigger_main(int argc, char *argv[], void *userdata) {
device_type = TYPE_DEVICES;
else if (streq(optarg, "subsystems"))
device_type = TYPE_SUBSYSTEMS;
- else {
- log_error("Unknown type --type=%s", optarg);
- return -EINVAL;
- }
+ else
+ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown type --type=%s", optarg);
break;
case 'c':
if (STR_IN_SET(optarg, "add", "remove", "change"))
action = optarg;
- else {
- log_error("Unknown action '%s'", optarg);
- return -EINVAL;
- }
+ else
+ log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown action '%s'", optarg);
break;
case 's':
@@ -269,6 +278,16 @@ int trigger_main(int argc, char *argv[], void *userdata) {
break;
}
+ case ARG_PING: {
+ ping = true;
+ if (optarg) {
+ r = parse_sec(optarg, &ping_timeout_usec);
+ if (r < 0)
+ log_error_errno(r, "Failed to parse timeout value '%s', ignoring: %m", optarg);
+ }
+ break;
+ }
+
case 'V':
return print_version();
case 'h':
@@ -280,6 +299,24 @@ int trigger_main(int argc, char *argv[], void *userdata) {
}
}
+ if (!arg_dry_run || ping) {
+ r = must_be_root();
+ if (r < 0)
+ return r;
+ }
+
+ if (ping) {
+ _cleanup_(udev_ctrl_unrefp) struct udev_ctrl *uctrl = NULL;
+
+ uctrl = udev_ctrl_new();
+ if (!uctrl)
+ return log_oom();
+
+ r = udev_ctrl_send_ping(uctrl, ping_timeout_usec);
+ if (r < 0)
+ return log_error_errno(r, "Failed to connect to udev daemon: %m");
+ }
+
for (; optind < argc; optind++) {
_cleanup_(sd_device_unrefp) sd_device *dev = NULL;
diff --git a/src/udev/udevadm.c b/src/udev/udevadm.c
index 1125c54b9f..28194314de 100644
--- a/src/udev/udevadm.c
+++ b/src/udev/udevadm.c
@@ -113,12 +113,13 @@ static int run(int argc, char *argv[]) {
udev_parse_config();
log_parse_environment();
log_open();
- log_set_max_level_realm(LOG_REALM_SYSTEMD, log_get_max_level());
r = parse_argv(argc, argv);
if (r <= 0)
return r;
+ log_set_max_level_realm(LOG_REALM_SYSTEMD, log_get_max_level());
+
mac_selinux_init();
return udevadm_main(argc, argv);
}
diff --git a/src/udev/udevadm.h b/src/udev/udevadm.h
index 98f9019a48..86b24af086 100644
--- a/src/udev/udevadm.h
+++ b/src/udev/udevadm.h
@@ -3,6 +3,9 @@
#include <stdio.h>
+#include "build.h"
+#include "macro.h"
+
int info_main(int argc, char *argv[], void *userdata);
int trigger_main(int argc, char *argv[], void *userdata);
int settle_main(int argc, char *argv[], void *userdata);
@@ -13,6 +16,7 @@ int test_main(int argc, char *argv[], void *userdata);
int builtin_main(int argc, char *argv[], void *userdata);
static inline int print_version(void) {
- puts(PACKAGE_VERSION);
+ /* Dracut relies on the version being a single integer */
+ puts(STRINGIFY(PROJECT_VERSION));
return 0;
}
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index fb8724ea87..0303f36b4f 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -31,6 +31,7 @@
#include "sd-event.h"
#include "alloc-util.h"
+#include "build.h"
#include "cgroup-util.h"
#include "cpu-set-util.h"
#include "dev-setup.h"
@@ -185,20 +186,11 @@ static void worker_free(struct worker *worker) {
free(worker);
}
-static void manager_workers_free(Manager *manager) {
- struct worker *worker;
- Iterator i;
-
- assert(manager);
-
- HASHMAP_FOREACH(worker, manager->workers, i)
- worker_free(worker);
-
- manager->workers = hashmap_free(manager->workers);
-}
+DEFINE_TRIVIAL_CLEANUP_FUNC(struct worker *, worker_free);
+DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(worker_hash_op, void, trivial_hash_func, trivial_compare_func, struct worker, worker_free);
static int worker_new(struct worker **ret, Manager *manager, sd_device_monitor *worker_monitor, pid_t pid) {
- _cleanup_free_ struct worker *worker = NULL;
+ _cleanup_(worker_freep) struct worker *worker = NULL;
int r;
assert(ret);
@@ -206,17 +198,20 @@ static int worker_new(struct worker **ret, Manager *manager, sd_device_monitor *
assert(worker_monitor);
assert(pid > 1);
- worker = new0(struct worker, 1);
+ /* close monitor, but keep address around */
+ device_monitor_disconnect(worker_monitor);
+
+ worker = new(struct worker, 1);
if (!worker)
return -ENOMEM;
- worker->manager = manager;
- /* close monitor, but keep address around */
- device_monitor_disconnect(worker_monitor);
- worker->monitor = sd_device_monitor_ref(worker_monitor);
- worker->pid = pid;
+ *worker = (struct worker) {
+ .manager = manager,
+ .monitor = sd_device_monitor_ref(worker_monitor),
+ .pid = pid,
+ };
- r = hashmap_ensure_allocated(&manager->workers, NULL);
+ r = hashmap_ensure_allocated(&manager->workers, &worker_hash_op);
if (r < 0)
return r;
@@ -290,7 +285,7 @@ static void manager_clear_for_worker(Manager *manager) {
manager->event = sd_event_unref(manager->event);
- manager_workers_free(manager);
+ manager->workers = hashmap_free(manager->workers);
event_queue_cleanup(manager, EVENT_UNDEF);
manager->monitor = sd_device_monitor_unref(manager->monitor);
@@ -396,7 +391,7 @@ static int worker_lock_block_device(sd_device *dev, int *ret_fd) {
static int worker_process_device(Manager *manager, sd_device *dev) {
_cleanup_(udev_event_freep) UdevEvent *udev_event = NULL;
_cleanup_close_ int fd_lock = -1;
- const char *seqnum;
+ const char *seqnum, *action;
int r;
assert(manager);
@@ -404,9 +399,13 @@ static int worker_process_device(Manager *manager, sd_device *dev) {
r = sd_device_get_property_value(dev, "SEQNUM", &seqnum);
if (r < 0)
- log_device_debug_errno(dev, r, "Failed to get SEQNUM: %m");
+ return log_device_debug_errno(dev, r, "Failed to get SEQNUM: %m");
- log_device_debug(dev, "Processing device (SEQNUM=%s)", seqnum);
+ r = sd_device_get_property_value(dev, "ACTION", &action);
+ if (r < 0)
+ return log_device_debug_errno(dev, r, "Failed to get ACTION: %m");
+
+ log_device_debug(dev, "Processing device (SEQNUM=%s, ACTION=%s)", seqnum, action);
udev_event = udev_event_new(dev, arg_exec_delay_usec, manager->rtnl);
if (!udev_event)
@@ -432,7 +431,7 @@ static int worker_process_device(Manager *manager, sd_device *dev) {
return log_device_debug_errno(dev, r, "Failed to update database under /run/udev/data/: %m");
}
- log_device_debug(dev, "Device (SEQNUM=%s) processed", seqnum);
+ log_device_debug(dev, "Device (SEQNUM=%s, ACTION=%s) processed", seqnum, action);
return 0;
}
@@ -464,7 +463,7 @@ static int worker_device_monitor_handler(sd_device_monitor *monitor, sd_device *
static int worker_main(Manager *_manager, sd_device_monitor *monitor, sd_device *first_device) {
_cleanup_(sd_device_unrefp) sd_device *dev = first_device;
_cleanup_(manager_freep) Manager *manager = _manager;
- int r, ret;
+ int r;
assert(manager);
assert(monitor);
@@ -507,11 +506,7 @@ static int worker_main(Manager *_manager, sd_device_monitor *monitor, sd_device
if (r < 0)
return log_error_errno(r, "Event loop failed: %m");
- r = sd_event_get_exit_code(manager->event, &ret);
- if (r < 0)
- return log_error_errno(r, "Failed to get exit code: %m");
-
- return ret;
+ return 0;
}
static int worker_spawn(Manager *manager, struct event *event) {
@@ -534,7 +529,7 @@ static int worker_spawn(Manager *manager, struct event *event) {
if (r < 0)
return log_error_errno(r, "Worker: Failed to enable receiving of device: %m");
- r = safe_fork("(worker)", FORK_DEATHSIG, &pid);
+ r = safe_fork(NULL, FORK_DEATHSIG, &pid);
if (r < 0) {
event->state = EVENT_QUEUED;
return log_error_errno(r, "Failed to fork() worker: %m");
@@ -592,8 +587,8 @@ static void event_run(Manager *manager, struct event *event) {
static int event_queue_insert(Manager *manager, sd_device *dev) {
_cleanup_(sd_device_unrefp) sd_device *clone = NULL;
+ const char *val, *action;
struct event *event;
- const char *val;
uint64_t seqnum;
int r;
@@ -618,6 +613,11 @@ static int event_queue_insert(Manager *manager, sd_device *dev) {
if (seqnum == 0)
return -EINVAL;
+ /* Refuse devices do not have ACTION property. */
+ r = sd_device_get_property_value(dev, "ACTION", &action);
+ if (r < 0)
+ return r;
+
/* Save original device to restore the state on failures. */
r = device_shallow_clone(dev, &clone);
if (r < 0)
@@ -647,12 +647,7 @@ static int event_queue_insert(Manager *manager, sd_device *dev) {
LIST_APPEND(event, manager->events, event);
- if (DEBUG_LOGGING) {
- if (sd_device_get_property_value(dev, "ACTION", &val) < 0)
- val = NULL;
-
- log_device_debug(dev, "Device (SEQNUM=%"PRIu64", ACTION=%s) is queued", seqnum, strnull(val));
- }
+ log_device_debug(dev, "Device (SEQNUM=%"PRIu64", ACTION=%s) is queued", seqnum, action);
return 0;
}
@@ -875,7 +870,7 @@ static void event_queue_start(Manager *manager) {
assert_se(sd_event_now(manager->event, CLOCK_MONOTONIC, &usec) >= 0);
/* check for changed config, every 3 seconds at most */
if (manager->last_usec == 0 ||
- (usec - manager->last_usec) > 3 * USEC_PER_SEC) {
+ usec - manager->last_usec > 3 * USEC_PER_SEC) {
if (udev_rules_check_timestamp(manager->rules) ||
udev_builtin_validate())
manager_reload(manager);
@@ -960,12 +955,11 @@ static int on_worker(sd_event_source *s, int fd, uint32_t revents, void *userdat
continue;
}
- CMSG_FOREACH(cmsg, &msghdr) {
+ CMSG_FOREACH(cmsg, &msghdr)
if (cmsg->cmsg_level == SOL_SOCKET &&
cmsg->cmsg_type == SCM_CREDENTIALS &&
cmsg->cmsg_len == CMSG_LEN(sizeof(struct ucred)))
ucred = (struct ucred*) CMSG_DATA(cmsg);
- }
if (!ucred || ucred->pid <= 0) {
log_warning("Ignoring worker message without valid PID");
@@ -1033,7 +1027,8 @@ static int on_ctrl_msg(sd_event_source *s, int fd, uint32_t revents, void *userd
i = udev_ctrl_get_set_log_level(ctrl_msg);
if (i >= 0) {
log_debug("Received udev control message (SET_LOG_LEVEL), setting log_priority=%i", i);
- log_set_max_level(i);
+ log_set_max_level_realm(LOG_REALM_UDEV, i);
+ log_set_max_level_realm(LOG_REALM_SYSTEMD, i);
manager_kill_workers(manager);
}
@@ -1118,7 +1113,7 @@ static int on_ctrl_msg(sd_event_source *s, int fd, uint32_t revents, void *userd
}
if (udev_ctrl_get_ping(ctrl_msg) > 0)
- log_debug("Received udev control message (SYNC)");
+ log_debug("Received udev control message (PING)");
if (udev_ctrl_get_exit(ctrl_msg) > 0) {
log_debug("Received udev control message (EXIT)");
@@ -1338,9 +1333,9 @@ static int on_sigchld(sd_event_source *s, const struct signalfd_siginfo *si, voi
log_debug("Worker ["PID_FMT"] exited", pid);
else
log_warning("Worker ["PID_FMT"] exited with return code %i", pid, WEXITSTATUS(status));
- } else if (WIFSIGNALED(status)) {
+ } else if (WIFSIGNALED(status))
log_warning("Worker ["PID_FMT"] terminated by signal %i (%s)", pid, WTERMSIG(status), signal_to_string(WTERMSIG(status)));
- } else if (WIFSTOPPED(status)) {
+ else if (WIFSTOPPED(status)) {
log_info("Worker ["PID_FMT"] stopped", pid);
continue;
} else if (WIFCONTINUED(status)) {
@@ -1579,7 +1574,7 @@ static int parse_argv(int argc, char *argv[]) {
case 'h':
return help();
case 'V':
- printf("%s\n", PACKAGE_VERSION);
+ printf("%s\n", GIT_VERSION);
return 0;
case '?':
return -EINVAL;
@@ -1594,7 +1589,7 @@ static int parse_argv(int argc, char *argv[]) {
static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cgroup) {
_cleanup_(manager_freep) Manager *manager = NULL;
- int r, fd_worker;
+ int r;
assert(ret);
@@ -1608,25 +1603,13 @@ static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cg
.cgroup = cgroup,
};
- udev_builtin_init();
-
- r = udev_rules_new(&manager->rules, arg_resolve_name_timing);
- if (!manager->rules)
- return log_error_errno(r, "Failed to read udev rules: %m");
-
manager->ctrl = udev_ctrl_new_from_fd(fd_ctrl);
if (!manager->ctrl)
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to initialize udev control socket");
- if (fd_ctrl < 0) {
- r = udev_ctrl_enable_receiving(manager->ctrl);
- if (r < 0)
- return log_error_errno(r, "Failed to bind udev control socket: %m");
- }
-
- fd_ctrl = udev_ctrl_get_fd(manager->ctrl);
- if (fd_ctrl < 0)
- return log_error_errno(fd_ctrl, "Failed to get udev control socket fd: %m");
+ r = udev_ctrl_enable_receiving(manager->ctrl);
+ if (r < 0)
+ return log_error_errno(r, "Failed to bind udev control socket: %m");
r = device_monitor_new_full(&manager->monitor, MONITOR_GROUP_KERNEL, fd_uevent);
if (r < 0)
@@ -1634,6 +1617,18 @@ static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cg
(void) sd_device_monitor_set_receive_buffer_size(manager->monitor, 128 * 1024 * 1024);
+ r = device_monitor_enable_receiving(manager->monitor);
+ if (r < 0)
+ return log_error_errno(r, "Failed to bind netlink socket: %m");
+
+ *ret = TAKE_PTR(manager);
+
+ return 0;
+}
+
+static int main_loop(Manager *manager) {
+ int fd_worker, fd_ctrl, r;
+
/* unnamed socket from workers to the main daemon */
r = socketpair(AF_LOCAL, SOCK_DGRAM|SOCK_CLOEXEC, 0, manager->worker_watch);
if (r < 0)
@@ -1679,6 +1674,10 @@ static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cg
if (r < 0)
return log_error_errno(r, "Failed to create watchdog event source: %m");
+ fd_ctrl = udev_ctrl_get_fd(manager->ctrl);
+ if (fd_ctrl < 0)
+ return log_error_errno(fd_ctrl, "Failed to get udev control socket fd: %m");
+
r = sd_event_add_io(manager->event, &manager->ctrl_event, fd_ctrl, EPOLLIN, on_ctrl_msg, manager);
if (r < 0)
return log_error_errno(r, "Failed to create udev control event source: %m");
@@ -1713,20 +1712,11 @@ static int manager_new(Manager **ret, int fd_ctrl, int fd_uevent, const char *cg
if (r < 0)
return log_error_errno(r, "Failed to create post event source: %m");
- *ret = TAKE_PTR(manager);
-
- return 0;
-}
-
-static int main_loop(int fd_ctrl, int fd_uevent, const char *cgroup) {
- _cleanup_(manager_freep) Manager *manager = NULL;
- int r;
+ udev_builtin_init();
- r = manager_new(&manager, fd_ctrl, fd_uevent, cgroup);
- if (r < 0) {
- r = log_error_errno(r, "Failed to allocate manager object: %m");
- goto exit;
- }
+ r = udev_rules_new(&manager->rules, arg_resolve_name_timing);
+ if (!manager->rules)
+ return log_error_errno(r, "Failed to read udev rules: %m");
r = udev_rules_apply_static_dev_perms(manager->rules);
if (r < 0)
@@ -1737,24 +1727,18 @@ static int main_loop(int fd_ctrl, int fd_uevent, const char *cgroup) {
"STATUS=Processing with %u children at max", arg_children_max);
r = sd_event_loop(manager->event);
- if (r < 0) {
+ if (r < 0)
log_error_errno(r, "Event loop failed: %m");
- goto exit;
- }
- sd_event_get_exit_code(manager->event, &r);
-
-exit:
sd_notify(false,
"STOPPING=1\n"
"STATUS=Shutting down...");
- if (manager)
- udev_ctrl_cleanup(manager->ctrl);
return r;
}
static int run(int argc, char *argv[]) {
_cleanup_free_ char *cgroup = NULL;
+ _cleanup_(manager_freep) Manager *manager = NULL;
int fd_ctrl = -1, fd_uevent = -1;
int r;
@@ -1814,10 +1798,10 @@ static int run(int argc, char *argv[]) {
dev_setup(NULL, UID_INVALID, GID_INVALID);
- if (getppid() == 1) {
- /* get our own cgroup, we regularly kill everything udev has left behind
- we only do this on systemd systems, and only if we are directly spawned
- by PID1. otherwise we are not guaranteed to have a dedicated cgroup */
+ if (getppid() == 1 && sd_booted() > 0) {
+ /* Get our own cgroup, we regularly kill everything udev has left behind.
+ * We only do this on systemd systems, and only if we are directly spawned
+ * by PID1. Otherwise we are not guaranteed to have a dedicated cgroup. */
r = cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, 0, &cgroup);
if (r < 0) {
if (IN_SET(r, -ENOENT, -ENOMEDIUM))
@@ -1831,10 +1815,14 @@ static int run(int argc, char *argv[]) {
if (r < 0)
return log_error_errno(r, "Failed to listen on fds: %m");
+ r = manager_new(&manager, fd_ctrl, fd_uevent, cgroup);
+ if (r < 0)
+ return log_error_errno(r, "Failed to create manager: %m");
+
if (arg_daemonize) {
pid_t pid;
- log_info("starting version " PACKAGE_VERSION);
+ log_info("Starting version " GIT_VERSION);
/* connect /dev/null to stdin, stdout, stderr */
if (log_get_max_level() < LOG_DEBUG) {
@@ -1858,7 +1846,10 @@ static int run(int argc, char *argv[]) {
log_debug_errno(r, "Failed to adjust OOM score, ignoring: %m");
}
- return main_loop(fd_ctrl, fd_uevent, cgroup);
+ r = main_loop(manager);
+ /* FIXME: move this into manager_free() */
+ udev_ctrl_cleanup(manager->ctrl);
+ return r;
}
DEFINE_MAIN_FUNCTION(run);
diff --git a/src/version/version.h.in b/src/version/version.h.in
new file mode 100644
index 0000000000..9f82d905a7
--- /dev/null
+++ b/src/version/version.h.in
@@ -0,0 +1 @@
+#define GIT_VERSION "@VCS_TAG@"
diff --git a/sysctl.d/50-default.conf b/sysctl.d/50-default.conf
index b0645f33e7..27084f6242 100644
--- a/sysctl.d/50-default.conf
+++ b/sysctl.d/50-default.conf
@@ -36,3 +36,7 @@ net.core.default_qdisc = fq_codel
# Enable hard and soft link protection
fs.protected_hardlinks = 1
fs.protected_symlinks = 1
+
+# Enable regular file and FIFO protection
+fs.protected_regular = 1
+fs.protected_fifos = 1
diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh
index 1d2f833478..1c64017aaa 100755
--- a/test/TEST-01-BASIC/test.sh
+++ b/test/TEST-01-BASIC/test.sh
@@ -3,7 +3,7 @@
# ex: ts=8 sw=4 sts=4 et filetype=sh
set -e
TEST_DESCRIPTION="Basic systemd setup"
-RUN_IN_UNPRIVILEGED_CONTAINER=yes
+RUN_IN_UNPRIVILEGED_CONTAINER=${RUN_IN_UNPRIVILEGED_CONTAINER:-yes}
. $TEST_BASE_DIR/test-functions
@@ -26,7 +26,7 @@ Description=Testsuite service
After=multi-user.target
[Service]
-ExecStart=/bin/sh -x -c 'systemctl --state=failed --no-legend --no-pager > /failed ; echo OK > /testok'
+ExecStart=/bin/sh -x -c 'systemctl --state=failed --no-legend --no-pager > /failed ; systemctl daemon-reload ; echo OK > /testok'
Type=oneshot
EOF
@@ -34,13 +34,6 @@ EOF
) || return 1
setup_nspawn_root
- # mask some services that we do not want to run in these tests
- ln -s /dev/null $initdir/etc/systemd/system/systemd-hwdb-update.service
- ln -s /dev/null $initdir/etc/systemd/system/systemd-journal-catalog-update.service
- ln -s /dev/null $initdir/etc/systemd/system/systemd-networkd.service
- ln -s /dev/null $initdir/etc/systemd/system/systemd-networkd.socket
- ln -s /dev/null $initdir/etc/systemd/system/systemd-resolved.service
-
ddebug "umount $TESTDIR/root"
umount $TESTDIR/root
}
diff --git a/test/TEST-10-ISSUE-2467/test.sh b/test/TEST-10-ISSUE-2467/test.sh
index d8959187a1..c85433d7d3 100755
--- a/test/TEST-10-ISSUE-2467/test.sh
+++ b/test/TEST-10-ISSUE-2467/test.sh
@@ -17,7 +17,7 @@ test_setup() {
eval $(udevadm info --export --query=env --name=${LOOPDEV}p2)
setup_basic_environment
- dracut_install true rm
+ dracut_install true rm socat
# setup the testsuite service
cat >$initdir/etc/systemd/system/testsuite.service <<'EOF'
@@ -28,13 +28,13 @@ Description=Testsuite service
Type=oneshot
StandardOutput=tty
StandardError=tty
-ExecStart=/bin/sh -e -x -c 'rm -f /tmp/nonexistent; systemctl start test.socket; echo > /run/test.ctl; >/testok'
+ExecStart=/bin/sh -e -x -c 'rm -f /tmp/nonexistent; systemctl start test.socket; printf x > test.file; socat -t20 OPEN:test.file UNIX-CONNECT:/run/test.ctl; >/testok'
TimeoutStartSec=10s
EOF
cat >$initdir/etc/systemd/system/test.socket <<'EOF'
[Socket]
-ListenFIFO=/run/test.ctl
+ListenStream=/run/test.ctl
EOF
cat > $initdir/etc/systemd/system/test.service <<'EOF'
diff --git a/test/TEST-19-DELEGATE/testsuite.sh b/test/TEST-19-DELEGATE/testsuite.sh
index abfcee3cd2..fdfab950b1 100755
--- a/test/TEST-19-DELEGATE/testsuite.sh
+++ b/test/TEST-19-DELEGATE/testsuite.sh
@@ -33,7 +33,7 @@ if grep -q cgroup2 /proc/filesystems ; then
# And now check again, "io" should have vanished
grep -qv io /sys/fs/cgroup/system.slice/cgroup.controllers
else
- echo "Skipping TEST-19-DELEGATE, as the kernel doesn't actually support cgroupsv2" >&2
+ echo "Skipping TEST-19-DELEGATE, as the kernel doesn't actually support cgroup v2" >&2
fi
echo OK > /testok
diff --git a/test/TEST-22-TMPFILES/test-02.sh b/test/TEST-22-TMPFILES/test-02.sh
index fe8b903298..d1bf1ea04b 100755
--- a/test/TEST-22-TMPFILES/test-02.sh
+++ b/test/TEST-22-TMPFILES/test-02.sh
@@ -6,8 +6,8 @@
set -e
set -x
-rm -fr /tmp/{d,D,e}
-mkdir /tmp/{d,D,e}
+rm -fr /tmp/{C,d,D,e}
+mkdir /tmp/{C,d,D,e}
#
# 'd'
@@ -93,3 +93,30 @@ test $(stat -c %U:%G:%a /tmp/e/3/d2) = "daemon:daemon:755"
test -f /tmp/e/3/f1
test $(stat -c %U:%G:%a /tmp/e/3/f1) = "root:root:644"
+
+#
+# 'C'
+#
+
+mkdir /tmp/C/{1,2,3}-origin
+touch /tmp/C/{1,2,3}-origin/f1
+chmod 755 /tmp/C/{1,2,3}-origin/f1
+
+mkdir /tmp/C/{2,3}
+touch /tmp/C/3/f1
+
+systemd-tmpfiles --create - <<EOF
+C /tmp/C/1 0755 daemon daemon - /tmp/C/1-origin
+C /tmp/C/2 0755 daemon daemon - /tmp/C/2-origin
+EOF
+
+test -d /tmp/C/1
+test $(stat -c %U:%G:%a /tmp/C/1/f1) = "daemon:daemon:755"
+test -d /tmp/C/2
+test $(stat -c %U:%G:%a /tmp/C/2/f1) = "daemon:daemon:755"
+
+! systemd-tmpfiles --create - <<EOF
+C /tmp/C/3 0755 daemon daemon - /tmp/C/3-origin
+EOF
+
+test $(stat -c %U:%G:%a /tmp/C/3/f1) = "root:root:644"
diff --git a/test/TEST-28-PERCENTJ-WANTEDBY/Makefile b/test/TEST-28-PERCENTJ-WANTEDBY/Makefile
new file mode 100644
index 0000000000..45e9bfc67c
--- /dev/null
+++ b/test/TEST-28-PERCENTJ-WANTEDBY/Makefile
@@ -0,0 +1,9 @@
+BUILD_DIR=$(shell ../../tools/find-build-dir.sh)
+
+all setup run:
+ @basedir=../.. TEST_BASE_DIR=../ BUILD_DIR=$(BUILD_DIR) ./test.sh --$@
+
+clean clean-again:
+ @basedir=../.. TEST_BASE_DIR=../ BUILD_DIR=$(BUILD_DIR) ./test.sh --clean
+
+.PHONY: all setup run clean clean-again
diff --git a/test/TEST-28-PERCENTJ-WANTEDBY/test.sh b/test/TEST-28-PERCENTJ-WANTEDBY/test.sh
new file mode 100755
index 0000000000..68935d0da0
--- /dev/null
+++ b/test/TEST-28-PERCENTJ-WANTEDBY/test.sh
@@ -0,0 +1,68 @@
+#!/bin/bash
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+set -e
+TEST_DESCRIPTION="Ensure %j Wants directives work"
+RUN_IN_UNPRIVILEGED_CONTAINER=yes
+
+. $TEST_BASE_DIR/test-functions
+
+test_setup() {
+ create_empty_image
+ mkdir -p $TESTDIR/root
+ mount ${LOOPDEV}p1 $TESTDIR/root
+
+ # Create what will eventually be our root filesystem onto an overlay
+ (
+ LOG_LEVEL=5
+ eval $(udevadm info --export --query=env --name=${LOOPDEV}p2)
+
+ setup_basic_environment
+
+ # Set up the services.
+ cat >$initdir/etc/systemd/system/specifier-j-wants.service << EOF
+[Unit]
+Description=Wants with percent-j specifier
+Wants=specifier-j-depends-%j.service
+After=specifier-j-depends-%j.service
+
+[Service]
+Type=oneshot
+ExecStart=test -f /tmp/test-specifier-j-%j
+ExecStart=/bin/sh -c 'echo OK > /testok'
+EOF
+ cat >$initdir/etc/systemd/system/specifier-j-depends-wants.service << EOF
+[Unit]
+Description=Dependent service for percent-j specifier
+
+[Service]
+Type=oneshot
+ExecStart=touch /tmp/test-specifier-j-wants
+EOF
+ cat >$initdir/etc/systemd/system/testsuite.service << EOF
+[Unit]
+Description=Testsuite: Ensure %j Wants directives work
+Wants=specifier-j-wants.service
+After=specifier-j-wants.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/true
+EOF
+
+ setup_testsuite
+ ) || return 1
+ setup_nspawn_root
+
+ # mask some services that we do not want to run in these tests
+ ln -s /dev/null $initdir/etc/systemd/system/systemd-hwdb-update.service
+ ln -s /dev/null $initdir/etc/systemd/system/systemd-journal-catalog-update.service
+ ln -s /dev/null $initdir/etc/systemd/system/systemd-networkd.service
+ ln -s /dev/null $initdir/etc/systemd/system/systemd-networkd.socket
+ ln -s /dev/null $initdir/etc/systemd/system/systemd-resolved.service
+
+ ddebug "umount $TESTDIR/root"
+ umount $TESTDIR/root
+}
+
+do_test "$@"
diff --git a/test/fuzz/fuzz-udev-rules/oss-fuzz-12980 b/test/fuzz/fuzz-udev-rules/oss-fuzz-12980
new file mode 100644
index 0000000000..37846f42fa
--- /dev/null
+++ b/test/fuzz/fuzz-udev-rules/oss-fuzz-12980
@@ -0,0 +1 @@
+ SUBSYSTEM==" " KERNEL==" " GROUP=" " KERNEL==" " GROUP=" " MODE =" " KERNEL==" " GROUP=" " KERNEL==" " GROUP=" " MODE =" " KERNEL==" " GROUP=" " MODE=" " GROUP=" " KERNEL==" " GROUP=" " KERNEL==" "GROUP=" " KERNEL==" " GROUP=" " MODE =" "KERNEL==" " GROUP=" " KERNEL==" " GROUP=" "MODE =" " KERNEL==" " KERNEL==" " GROUP=" " MODE =" " KERNEL==" " GROUP=" " KERNEL==" " GROUP=" " MODE =" " KERNEL==" " GROUP=" " MODE=" " GROUP=" " KERNEL==" " GROUP=" " KERNEL==" " GROUP=" " KERNEL==" " GROUP=" " MODE =" " KERNEL==" " GROUP=" " MODE="" MODE =" " KERNEL==" " GROUP=" " KERNEL==" " GROUP=" " MODE =" " KERNEL=="" GROUP=" " KERNEL==" " GROUP=" " MODE =" " KERNEL==" " KERNEL==" " OPTIONS =" string_escape=replace watch " \ No newline at end of file
diff --git a/test/meson.build b/test/meson.build
index d98bfb80d2..94903934a5 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -252,7 +252,8 @@ if perl.found()
udev_test_pl = find_program('udev-test.pl')
if want_tests != 'false'
test('udev-test',
- udev_test_pl)
+ udev_test_pl,
+ timeout : 180)
endif
else
message('Skipping udev-test because perl is not available')
diff --git a/test/rule-syntax-check.py b/test/rule-syntax-check.py
index dfb06d9ed9..8b26c988ab 100755
--- a/test/rule-syntax-check.py
+++ b/test/rule-syntax-check.py
@@ -17,6 +17,8 @@ if not rules_files:
quoted_string_re = r'"(?:[^\\"]|\\.)*"'
no_args_tests = re.compile(r'(ACTION|DEVPATH|KERNELS?|NAME|SYMLINK|SUBSYSTEMS?|DRIVERS?|TAG|PROGRAM|RESULT|TEST)\s*(?:=|!)=\s*' + quoted_string_re + '$')
+# PROGRAM can also be specified as an assignment.
+program_assign = re.compile(r'PROGRAM\s*=\s*' + quoted_string_re + '$')
args_tests = re.compile(r'(ATTRS?|ENV|TEST){([a-zA-Z0-9/_.*%-]+)}\s*(?:=|!)=\s*' + quoted_string_re + '$')
no_args_assign = re.compile(r'(NAME|SYMLINK|OWNER|GROUP|MODE|TAG|RUN|LABEL|GOTO|OPTIONS|IMPORT)\s*(?:\+=|:=|=)\s*' + quoted_string_re + '$')
args_assign = re.compile(r'(ATTR|ENV|IMPORT|RUN){([a-zA-Z0-9/_.*%-]+)}\s*(=|\+=)\s*' + quoted_string_re + '$')
@@ -51,7 +53,8 @@ for path in rules_files:
for clause_match in comma_separated_group_re.finditer(line):
clause = clause_match.group().strip()
if not (no_args_tests.match(clause) or args_tests.match(clause) or
- no_args_assign.match(clause) or args_assign.match(clause)):
+ no_args_assign.match(clause) or args_assign.match(clause) or
+ program_assign.match(clause)):
print('Invalid line {}:{}: {}'.format(path, lineno, line))
print(' clause:', clause)
diff --git a/test/test-execute/exec-privatenetwork-yes.service b/test/test-execute/exec-privatenetwork-yes.service
index ded8d55126..8f5cbadf04 100644
--- a/test/test-execute/exec-privatenetwork-yes.service
+++ b/test/test-execute/exec-privatenetwork-yes.service
@@ -2,6 +2,6 @@
Description=Test for PrivateNetwork
[Service]
-ExecStart=/bin/sh -x -c '! ip link | grep ": " | grep -Ev ": (lo|(sit0|ip6tnl0|ip6gre0)@.*):"'
+ExecStart=/bin/sh -x -c '! ip link | grep -E "^[0-9]+: " | grep -Ev ": (lo|(erspan|gre|gretap|ip_vti|ip6_vti|ip6gre|ip6tnl|sit|tunl)0@.*):"'
Type=oneshot
PrivateNetwork=yes
diff --git a/test/test-functions b/test/test-functions
index 37069396b7..a936202e4a 100644
--- a/test/test-functions
+++ b/test/test-functions
@@ -15,6 +15,7 @@ TIMED_OUT= # will be 1 after run_* if *_TIMEOUT is set and test timed out
[[ "$LOOKS_LIKE_SUSE" ]] && FSTYPE="${FSTYPE:-btrfs}" || FSTYPE="${FSTYPE:-ext4}"
UNIFIED_CGROUP_HIERARCHY="${UNIFIED_CGROUP_HIERARCHY:-default}"
EFI_MOUNT="$(bootctl -p 2>/dev/null || echo /boot)"
+QEMU_MEM="${QEMU_MEM:-512M}"
if ! ROOTLIBDIR=$(pkg-config --variable=systemdutildir systemd); then
echo "WARNING! Cannot determine rootlibdir from pkg-config, assuming /usr/lib/systemd" >&2
@@ -37,7 +38,7 @@ is_built_with_asan() {
fi
# Borrowed from https://github.com/google/oss-fuzz/blob/cd9acd02f9d3f6e80011cc1e9549be526ce5f270/infra/base-images/base-runner/bad_build_check#L182
- local _asan_calls=$(objdump -dC $BUILD_DIR/systemd | egrep "callq\s+[0-9a-f]+\s+<__asan" -c)
+ local _asan_calls=$(objdump -dC $BUILD_DIR/systemd-journald | egrep "callq\s+[0-9a-f]+\s+<__asan" -c)
if (( $_asan_calls < 1000 )); then
return 1
else
@@ -51,6 +52,8 @@ if [[ "$IS_BUILT_WITH_ASAN" = "yes" ]]; then
STRIP_BINARIES=no
SKIP_INITRD=yes
PATH_TO_INIT=$ROOTLIBDIR/systemd-under-asan
+ QEMU_MEM="1536M"
+ QEMU_SMP=4
fi
function find_qemu_bin() {
@@ -96,17 +99,28 @@ run_qemu() {
&& KERNEL_BIN="$EFI_MOUNT/$MACHINE_ID/$KERNEL_VER/linux"
fi
+ CONSOLE=ttyS0
+
if [[ ! "$KERNEL_BIN" ]]; then
if [[ "$LOOKS_LIKE_ARCH" ]]; then
KERNEL_BIN=/boot/vmlinuz-linux
else
- KERNEL_BIN=/boot/vmlinuz-$KERNEL_VER
+ [ "$ARCH" ] || ARCH=$(uname -m)
+ case $ARCH in
+ ppc64*)
+ KERNEL_BIN=/boot/vmlinux-$KERNEL_VER
+ CONSOLE=hvc0
+ ;;
+ *)
+ KERNEL_BIN=/boot/vmlinuz-$KERNEL_VER
+ ;;
+ esac
fi
fi
default_fedora_initrd=/boot/initramfs-${KERNEL_VER}.img
default_debian_initrd=/boot/initrd.img-${KERNEL_VER}
- default_arch_initrd=/boot/initramfs-linux.img
+ default_arch_initrd=/boot/initramfs-linux-fallback.img
default_suse_initrd=/boot/initrd-${KERNEL_VER}
if [[ ! "$INITRD" ]]; then
if [[ -e "$default_fedora_initrd" ]]; then
@@ -147,7 +161,7 @@ root=/dev/sda1 \
raid=noautodetect \
loglevel=2 \
init=$PATH_TO_INIT \
-console=ttyS0 \
+console=$CONSOLE \
selinux=0 \
printk.devkmsg=on \
$_cgroup_args \
@@ -156,7 +170,7 @@ $KERNEL_APPEND \
QEMU_OPTIONS="-smp $QEMU_SMP \
-net none \
--m 512M \
+-m $QEMU_MEM \
-nographic \
-kernel $KERNEL_BIN \
-drive format=raw,cache=unsafe,file=${TESTDIR}/rootdisk.img \
@@ -330,8 +344,8 @@ create_asan_wrapper() {
set -x
DEFAULT_ASAN_OPTIONS=strict_string_checks=1:detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1
-DEFAULT_UBSAN_OPTIONS=print_stacktrace=1:print_summary=1
-DEFAULT_ENVIRONMENT="ASAN_OPTIONS=\$DEFAULT_ASAN_OPTIONS UBSAN_OPTIONS=\$DEFAULT_UBSAN_OPTIONS:halt_on_error=1"
+DEFAULT_UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1
+DEFAULT_ENVIRONMENT="ASAN_OPTIONS=\$DEFAULT_ASAN_OPTIONS UBSAN_OPTIONS=\$DEFAULT_UBSAN_OPTIONS"
mount -t proc proc /proc
mount -t sysfs sysfs /sys
@@ -344,6 +358,7 @@ if [[ "\$PATH_TO_ASAN" ]]; then
DEFAULT_ENVIRONMENT="\$DEFAULT_ENVIRONMENT LD_PRELOAD=\$PATH_TO_ASAN"
fi
echo DefaultEnvironment=\$DEFAULT_ENVIRONMENT >>/etc/systemd/system.conf
+echo DefaultTimeoutStartSec=180s >>/etc/systemd/system.conf
# ASAN and syscall filters aren't compatible with each other.
find / -name '*.service' -type f | xargs sed -i 's/^\\(MemoryDeny\\|SystemCall\\)/#\\1/'
@@ -354,6 +369,12 @@ JOURNALD_CONF_DIR=/etc/systemd/system/systemd-journald.service.d
mkdir -p "\$JOURNALD_CONF_DIR"
printf "[Service]\nEnvironment=ASAN_OPTIONS=\$DEFAULT_ASAN_OPTIONS:log_path=/systemd-journald.asan.log\n" >"\$JOURNALD_CONF_DIR/env.conf"
+# 90s isn't enough for some services to finish when literally everything is run
+# under ASan+UBSan in containers, which, in turn, are run in VMs.
+# Let's limit which environments such services should be executed in.
+mkdir -p /etc/systemd/system/systemd-hwdb-update.service.d
+printf "[Unit]\nConditionVirtualization=container\n\n[Service]\nTimeoutSec=180s\n" >/etc/systemd/system/systemd-hwdb-update.service.d/env-override.conf
+
export ASAN_OPTIONS=\$DEFAULT_ASAN_OPTIONS:log_path=/systemd.asan.log UBSAN_OPTIONS=\$DEFAULT_UBSAN_OPTIONS
exec $ROOTLIBDIR/systemd "\$@"
EOF
@@ -453,8 +474,47 @@ EOF
fi
}
+check_asan_reports() {
+ local ret=0
+ local root="$1"
+
+ if [[ "$IS_BUILT_WITH_ASAN" = "yes" ]]; then
+ ls -l "$root"
+ if [[ -e "$root/systemd.asan.log.1" ]]; then
+ cat "$root/systemd.asan.log.1"
+ ret=$(($ret+1))
+ fi
+
+ journald_report=$(find "$root" -name "systemd-journald.asan.log*" -exec cat {} \;)
+ if [[ ! -z "$journald_report" ]]; then
+ printf "%s" "$journald_report"
+ ret=$(($ret+1))
+ fi
+
+ pids=$(
+ "$BUILD_DIR/journalctl" -D "$root/var/log/journal" | perl -alne '
+ BEGIN {
+ %services_to_ignore = (
+ "dbus-daemon" => undef,
+ );
+ }
+ print $2 if /\s(\S*)\[(\d+)\]:\s*SUMMARY:\s+\w+Sanitizer/ && !exists $services_to_ignore{$1}'
+ )
+ if [[ ! -z "$pids" ]]; then
+ ret=$(($ret+1))
+ for pid in $pids; do
+ "$BUILD_DIR/journalctl" -D "$root/var/log/journal" _PID=$pid --no-pager
+ done
+ fi
+ fi
+
+ return $ret
+}
+
check_result_nspawn() {
local ret=1
+ local journald_report=""
+ local pids=""
[[ -e $TESTDIR/$1/testok ]] && ret=0
[[ -f $TESTDIR/$1/failed ]] && cp -a $TESTDIR/$1/failed $TESTDIR
cp -a $TESTDIR/$1/var/log/journal $TESTDIR
@@ -462,6 +522,7 @@ check_result_nspawn() {
ls -l $TESTDIR/journal/*/*.journal
test -s $TESTDIR/failed && ret=$(($ret+1))
[ -n "$TIMED_OUT" ] && ret=$(($ret+1))
+ check_asan_reports "$TESTDIR/$1" || ret=$(($ret+1))
return $ret
}
@@ -473,6 +534,7 @@ check_result_qemu() {
[[ -e $TESTDIR/root/testok ]] && ret=0
[[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
cp -a $TESTDIR/root/var/log/journal $TESTDIR
+ check_asan_reports "$TESTDIR/root" || ret=$(($ret+1))
umount $TESTDIR/root
[[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
ls -l $TESTDIR/journal/*/*.journal
@@ -508,7 +570,9 @@ install_execs() {
sed -r -n 's|^Exec[a-zA-Z]*=[@+!-]*([^ ]+).*|\1|gp' $initdir/{$systemdsystemunitdir,$systemduserunitdir}/*.service \
| sort -u | while read i; do
# some {rc,halt}.local scripts and programs are okay to not exist, the rest should
- inst $i || [ "${i%.local}" != "$i" ] || [ "${i%systemd-update-done}" != "$i" ]
+ # also, plymouth is pulled in by rescue.service, but even there the exit code
+ # is ignored; as it's not present on some distros, don't fail if it doesn't exist
+ inst $i || [ "${i%.local}" != "$i" ] || [ "${i%systemd-update-done}" != "$i" ] || [ "/bin/plymouth" == "$i" ]
done
)
}
@@ -1526,7 +1590,7 @@ test_run() {
else
dwarn "can't run systemd-nspawn, skipping"
fi
- fi
+ fi
fi
return 0
}
diff --git a/test/test-network/conf/24-search-domain.network b/test/test-network/conf/24-search-domain.network
index 970b130ab0..124af438a3 100644
--- a/test/test-network/conf/24-search-domain.network
+++ b/test/test-network/conf/24-search-domain.network
@@ -2,6 +2,6 @@
Name=dummy98
[Network]
-Address=192.168.42.100
+Address=192.168.42.100/24
DNS=192.168.42.1
Domains= one two three four five six seven eight nine ten
diff --git a/test/test-network/conf/25-address-section.network b/test/test-network/conf/25-address-section.network
index d0fae69361..3904953443 100644
--- a/test/test-network/conf/25-address-section.network
+++ b/test/test-network/conf/25-address-section.network
@@ -1,6 +1,9 @@
[Match]
Name=dummy98
+[Network]
+IPv6AcceptRA=no
+
[Address]
Address=10.2.3.4/16
Peer=10.2.3.5/16
@@ -9,3 +12,7 @@ Label=32
[Address]
Address=10.6.7.8/16
Label=33
+
+[Address]
+Address=2001:db8::20
+Peer=2001:db8::10/128
diff --git a/test/test-network/conf/25-link-local-addressing-no.network b/test/test-network/conf/25-link-local-addressing-no.network
new file mode 100644
index 0000000000..8320414d9e
--- /dev/null
+++ b/test/test-network/conf/25-link-local-addressing-no.network
@@ -0,0 +1,5 @@
+[Match]
+Name=dummy98
+
+[Network]
+LinkLocalAddressing=no
diff --git a/test/test-network/conf/25-link-local-addressing-yes.network b/test/test-network/conf/25-link-local-addressing-yes.network
new file mode 100644
index 0000000000..dcf2f2f7b1
--- /dev/null
+++ b/test/test-network/conf/25-link-local-addressing-yes.network
@@ -0,0 +1,5 @@
+[Match]
+Name=test1
+
+[Network]
+LinkLocalAddressing=yes
diff --git a/test/test-network/conf/25-route-ipv6-src.network b/test/test-network/conf/25-route-ipv6-src.network
new file mode 100644
index 0000000000..4e551c024a
--- /dev/null
+++ b/test/test-network/conf/25-route-ipv6-src.network
@@ -0,0 +1,16 @@
+# This test cannot use a dummy interface: IPv6 addresses
+# are added without having to go through tentative state
+
+[Match]
+Name=bond199
+
+[Network]
+LinkLocalAddressing=ipv6
+Address=2001:1234:56:8f63::1/64
+Address=2001:1234:56:8f63::2/64
+IPv6AcceptRA=no
+
+[Route]
+Destination=abcd::/16
+Gateway=2001:1234:56:8f63::1:1
+PreferredSource=2001:1234:56:8f63::2
diff --git a/test/test-network/conf/25-wireguard-23-peers.netdev b/test/test-network/conf/25-wireguard-23-peers.netdev
new file mode 100644
index 0000000000..7f77dc1743
--- /dev/null
+++ b/test/test-network/conf/25-wireguard-23-peers.netdev
@@ -0,0 +1,148 @@
+[NetDev]
+Name=wg98
+Kind=wireguard
+Description=For issue #11404
+# Generated by the script https://launchpadlibrarian.net/405947185/systemd-wg
+
+[WireGuard]
+# 51820 is common port for Wireguard, 4500 is IPSec/UDP
+ListenPort=4500
+PrivateKey=CJQUtcS9emY2fLYqDlpSZiE/QJyHkPWr+WHtZLZ90FU=
+
+# peer 1
+[WireGuardPeer]
+PublicKey=TxVmU/YJ2R3G3cbGKUiIx02y6CgcKlElVGAkzrwJuXg=
+AllowedIPs=fd8d:4d6d:3ccb:0500:0c79:2339:edce:ece1/128
+AllowedIPs=fd8d:4d6d:3ccb:0c79:2339:edce::/96
+
+# peer 2
+[WireGuardPeer]
+PublicKey=coGr5lLn1RsCeh1RWBXn1GvcDqKSQ82HSeN0GrUugHg=
+AllowedIPs=fd8d:4d6d:3ccb:0500:a072:80da:de4f:add1/128
+AllowedIPs=fd8d:4d6d:3ccb:a072:80da:de4f::/96
+
+# peer 3
+[WireGuardPeer]
+PublicKey=PeiULTZjyfjqg/OOqnzKtLSWnrU+ipinqMsMw0hY+1w=
+AllowedIPs=fd8d:4d6d:3ccb:0500:f349:c4f0:10c1:06b4/128
+AllowedIPs=fd8d:4d6d:3ccb:f349:c4f0:10c1::/96
+
+# peer 4
+[WireGuardPeer]
+PublicKey=PjdC8+BmQPdgheY7gle9s3gvM7r07L6A+gMBe5bOZXk=
+AllowedIPs=fd8d:4d6d:3ccb:0500:b684:4f81:2e3e:132e/128
+AllowedIPs=fd8d:4d6d:3ccb:b684:4f81:2e3e::/96
+
+# peer 5
+[WireGuardPeer]
+PublicKey=1MGQurlRaQIAgdH/sd0qDNamDKAepMy/+pzZUx9oEDI=
+AllowedIPs=fd8d:4d6d:3ccb:0500:c624:6bf7:4c09:3b59/128
+AllowedIPs=fd8d:4d6d:3ccb:c624:6bf7:4c09::/96
+
+# peer 6
+[WireGuardPeer]
+PublicKey=+FgzhoGfPIzNBvtIZfBwNtWls2FSGt/6Kve3M9Z1ZlE=
+AllowedIPs=fd8d:4d6d:3ccb:0500:9c11:d820:2e96:9be0/128
+AllowedIPs=fd8d:4d6d:3ccb:9c11:d820:2e96::/96
+
+# peer 7
+[WireGuardPeer]
+PublicKey=Kb2ozFhzg9huKmV4miLlWgh05ToP+xVqd2N0e7Ebmyc=
+AllowedIPs=fd8d:4d6d:3ccb:0500:bad5:495d:8e9c:3427/128
+AllowedIPs=fd8d:4d6d:3ccb:bad5:495d:8e9c::/96
+
+# peer 8
+[WireGuardPeer]
+PublicKey=p2kY786d4vFO/PpstaQrn7UPuakoHRABUHmcDKzXVi4=
+AllowedIPs=fd8d:4d6d:3ccb:0500:1e54:1415:35d0:a47c/128
+AllowedIPs=fd8d:4d6d:3ccb:1e54:1415:35d0::/96
+
+# peer 9
+[WireGuardPeer]
+PublicKey=FNiQqmeizNXTmd9jEU/gvNkuEs1MoWovNp8IpPkoqz4=
+AllowedIPs=fd8d:4d6d:3ccb:0500:1dbf:ca8a:32d3:dd81/128
+AllowedIPs=fd8d:4d6d:3ccb:1dbf:ca8a:32d3::/96
+
+# peer 10
+[WireGuardPeer]
+PublicKey=wAwyAuLSQTO7lwQnUQHTumrMgkwigIExGR26AthWTU8=
+AllowedIPs=fd8d:4d6d:3ccb:0500:dcdd:d33b:90c9:6088/128
+AllowedIPs=fd8d:4d6d:3ccb:dcdd:d33b:90c9::/96
+
+# peer 11
+[WireGuardPeer]
+PublicKey=8gRYdXRyhgjiMSbqk3sj5kzXGsQqkZ4defvK2ONqHA0=
+AllowedIPs=fd8d:4d6d:3ccb:0500:6f2e:6888:c6fd:dfb9/128
+AllowedIPs=fd8d:4d6d:3ccb:6f2e:6888:c6fd::/96
+
+# peer 12
+[WireGuardPeer]
+PublicKey=4Bj9Dalwnq2Trf5Bl7iJCpSOaxC83YEbxgrgBl0ljQk=
+AllowedIPs=fd8d:4d6d:3ccb:0500:d4f9:05dc:9296:0a1a/128
+AllowedIPs=fd8d:4d6d:3ccb:d4f9:05dc:9296::/96
+
+# peer 13
+[WireGuardPeer]
+PublicKey=BOTxUDlPSIzYucVmML4IYcTIaX0TiqC7DOnfLUI7RRg=
+AllowedIPs=fd8d:4d6d:3ccb:0500:b39c:9cdc:755a:ead3/128
+AllowedIPs=fd8d:4d6d:3ccb:b39c:9cdc:755a::/96
+
+# peer 14
+[WireGuardPeer]
+PublicKey=PiqEvBzow5vElGD2uOtRtZG6G60tM82kmjbyJP02mFQ=
+AllowedIPs=fd8d:4d6d:3ccb:0500:bfe5:c3c3:5d77:0fcb/128
+AllowedIPs=fd8d:4d6d:3ccb:bfe5:c3c3:5d77::/96
+
+# peer 15
+[WireGuardPeer]
+PublicKey=Eor9QBsIoUG6C3ZKsKdqm4Vkt0n2N7qpSh2LzphQeho=
+AllowedIPs=fd8d:4d6d:3ccb:0500:900c:d437:ec27:8822/128
+AllowedIPs=fd8d:4d6d:3ccb:900c:d437:ec27::/96
+
+# peer 16
+[WireGuardPeer]
+PublicKey=acXPW0Ar+TiTOqKuUDpop9AVLuPNdzqf0l+V8k5t7CM=
+AllowedIPs=fd8d:4d6d:3ccb:0500:270d:b5dd:4a3f:8909/128
+AllowedIPs=fd8d:4d6d:3ccb:270d:b5dd:4a3f::/96
+
+# peer 17
+[WireGuardPeer]
+PublicKey=+0g/5jzbitHyfhB4gbJnWrhSMsSjCcOE2rftWTDEW3E=
+AllowedIPs=fd8d:4d6d:3ccb:0500:e2e1:ae15:103f:f376/128
+AllowedIPs=fd8d:4d6d:3ccb:e2e1:ae15:103f::/96
+
+# peer 18
+[WireGuardPeer]
+PublicKey=FC7mjuWpkM8bjM3vaLPbba2HwHGbTSDK9QsLEZvUZ2I=
+AllowedIPs=fd8d:4d6d:3ccb:0500:5660:679d:3532:94d8/128
+AllowedIPs=fd8d:4d6d:3ccb:5660:679d:3532::/96
+
+# peer 19
+[WireGuardPeer]
+PublicKey=fRdm/tbE2jGuLd6zMxSQYMP6pPfMmXYW84TUPJCPjHM=
+AllowedIPs=fd8d:4d6d:3ccb:0500:6825:573f:30f3:9472/128
+AllowedIPs=fd8d:4d6d:3ccb:6825:573f:30f3::/96
+
+# peer 20
+[WireGuardPeer]
+PublicKey=xm540z0UwfTF5f0YwfjmCX0eGdHY8bOb/4ovVA2SgCI=
+AllowedIPs=fd8d:4d6d:3ccb:0500:a94b:cd6a:a32d:90e6/128
+AllowedIPs=fd8d:4d6d:3ccb:a94b:cd6a:a32d::/96
+
+# peer 21
+[WireGuardPeer]
+PublicKey=5X5+9IiRBjaadazEKNO+CozpomiKPMIBQT7uJ4SnbVs=
+AllowedIPs=fd8d:4d6d:3ccb:0500:8d4d:0bab:7280:a09a/128
+AllowedIPs=fd8d:4d6d:3ccb:8d4d:0bab:7280::/96
+
+# peer 22
+[WireGuardPeer]
+PublicKey=d61T4K0wmS4Z3lK9M8/Z48IXzldLCOCm7a6Mx1r/A3I=
+AllowedIPs=fd8d:4d6d:3ccb:0500:a3f3:df38:19b0:0721/128
+AllowedIPs=fd8d:4d6d:3ccb:a3f3:df38:19b0::/96
+
+# peer 23
+[WireGuardPeer]
+PublicKey=Nt7N3hXfpMWsIsx9me4ID77okka+0Oe5eqnFDp00IFI=
+AllowedIPs=fd8d:4d6d:3ccb:0500:9742:9931:5217:18d5/128
+AllowedIPs=fd8d:4d6d:3ccb:9742:9931:5217::/96
diff --git a/test/test-network/conf/25-wireguard-23-peers.network b/test/test-network/conf/25-wireguard-23-peers.network
new file mode 100644
index 0000000000..4dc87f8d4c
--- /dev/null
+++ b/test/test-network/conf/25-wireguard-23-peers.network
@@ -0,0 +1,97 @@
+[Match]
+Name=wg98
+
+[Network]
+Address=fd8d:4d6d:3ccb:0500::1/64
+
+# nat64 via 1
+[Route]
+Destination = fd8d:4d6d:3ccb:0c79:2339:edce::/96
+
+# nat64 via 2
+[Route]
+Destination = fd8d:4d6d:3ccb:a072:80da:de4f::/96
+
+# nat64 via 3
+[Route]
+Destination = fd8d:4d6d:3ccb:f349:c4f0:10c1::/96
+
+# nat64 via 4
+[Route]
+Destination = fd8d:4d6d:3ccb:b684:4f81:2e3e::/96
+
+# nat64 via 5
+[Route]
+Destination = fd8d:4d6d:3ccb:c624:6bf7:4c09::/96
+
+# nat64 via 6
+[Route]
+Destination = fd8d:4d6d:3ccb:9c11:d820:2e96::/96
+
+# nat64 via 7
+[Route]
+Destination = fd8d:4d6d:3ccb:bad5:495d:8e9c::/96
+
+# nat64 via 8
+[Route]
+Destination = fd8d:4d6d:3ccb:1e54:1415:35d0::/96
+
+# nat64 via 9
+[Route]
+Destination = fd8d:4d6d:3ccb:1dbf:ca8a:32d3::/96
+
+# nat64 via 10
+[Route]
+Destination = fd8d:4d6d:3ccb:dcdd:d33b:90c9::/96
+
+# nat64 via 11
+[Route]
+Destination = fd8d:4d6d:3ccb:6f2e:6888:c6fd::/96
+
+# nat64 via 12
+[Route]
+Destination = fd8d:4d6d:3ccb:d4f9:05dc:9296::/96
+
+# nat64 via 13
+[Route]
+Destination = fd8d:4d6d:3ccb:b39c:9cdc:755a::/96
+
+# nat64 via 14
+[Route]
+Destination = fd8d:4d6d:3ccb:bfe5:c3c3:5d77::/96
+
+# nat64 via 15
+[Route]
+Destination = fd8d:4d6d:3ccb:900c:d437:ec27::/96
+
+# nat64 via 16
+[Route]
+Destination = fd8d:4d6d:3ccb:270d:b5dd:4a3f::/96
+
+# nat64 via 17
+[Route]
+Destination = fd8d:4d6d:3ccb:e2e1:ae15:103f::/96
+
+# nat64 via 18
+[Route]
+Destination = fd8d:4d6d:3ccb:5660:679d:3532::/96
+
+# nat64 via 19
+[Route]
+Destination = fd8d:4d6d:3ccb:6825:573f:30f3::/96
+
+# nat64 via 20
+[Route]
+Destination = fd8d:4d6d:3ccb:a94b:cd6a:a32d::/96
+
+# nat64 via 21
+[Route]
+Destination = fd8d:4d6d:3ccb:8d4d:0bab:7280::/96
+
+# nat64 via 22
+[Route]
+Destination = fd8d:4d6d:3ccb:a3f3:df38:19b0::/96
+
+# nat64 via 23
+[Route]
+Destination = fd8d:4d6d:3ccb:9742:9931:5217::/96
diff --git a/test/test-network/conf/25-wireguard.netdev b/test/test-network/conf/25-wireguard.netdev
index 01c5f2a28d..4866c31cca 100644
--- a/test/test-network/conf/25-wireguard.netdev
+++ b/test/test-network/conf/25-wireguard.netdev
@@ -10,6 +10,7 @@ FwMark=1234
[WireGuardPeer]
PublicKey=RDf+LSpeEre7YEIKaxg+wbpsNV7du+ktR99uBEtIiCA=
AllowedIPs=fd31:bf08:57cb::/48,192.168.26.0/24
-Endpoint=wireguard.example.com:51820
+#Endpoint=wireguard.example.com:51820
+Endpoint=192.168.27.3:51820
PresharedKey=IIWIV17wutHv7t4cR6pOT91z6NSz/T8Arh0yaywhw3M=
PersistentKeepalive=20
diff --git a/test/test-network/conf/dhcp-server-veth-peer.network b/test/test-network/conf/dhcp-server-veth-peer.network
index 7b38e72b7e..33d8be3964 100644
--- a/test/test-network/conf/dhcp-server-veth-peer.network
+++ b/test/test-network/conf/dhcp-server-veth-peer.network
@@ -2,5 +2,5 @@
Name=veth-peer
[Network]
-Address=2600::1
+Address=2600::1/0
Address=192.168.5.1/24
diff --git a/test/test-network/conf/dhcp-v4-server-veth-peer.network b/test/test-network/conf/dhcp-v4-server-veth-peer.network
index 5c91d65432..3dfc5290ad 100644
--- a/test/test-network/conf/dhcp-v4-server-veth-peer.network
+++ b/test/test-network/conf/dhcp-v4-server-veth-peer.network
@@ -2,5 +2,5 @@
Name=veth-peer
[Network]
-Address=192.168.0.1
-Address=192.168.5.1
+Address=192.168.0.1/24
+Address=192.168.5.1/24
diff --git a/test/test-network/systemd-networkd-tests.py b/test/test-network/systemd-networkd-tests.py
index 19572be151..1fc7094d28 100755
--- a/test/test-network/systemd-networkd-tests.py
+++ b/test/test-network/systemd-networkd-tests.py
@@ -9,7 +9,6 @@ import signal
import socket
import subprocess
import sys
-import threading
import time
import unittest
from shutil import copytree
@@ -20,7 +19,6 @@ networkd_ci_path='/run/networkd-ci'
network_sysctl_ipv6_path='/proc/sys/net/ipv6/conf'
network_sysctl_ipv4_path='/proc/sys/net/ipv4/conf'
-dnsmasq_config_file='/run/networkd-ci/test-dnsmasq.conf'
dnsmasq_pid_file='/run/networkd-ci/test-test-dnsmasq.pid'
dnsmasq_log_file='/run/networkd-ci/test-dnsmasq-log-file'
@@ -37,6 +35,39 @@ def expectedFailureIfModuleIsNotAvailable(module_name):
return f
+def expectedFailureIfERSPANModuleIsNotAvailable():
+ def f(func):
+ rc = subprocess.call(['ip', 'link', 'add', 'dev', 'erspan99', 'type', 'erspan', 'seq', 'key', '30', 'local', '192.168.1.4', 'remote', '192.168.1.1', 'erspan_ver', '1', 'erspan', '123'])
+ if rc == 0:
+ subprocess.call(['ip', 'link', 'del', 'erspan99'])
+ return func
+ else:
+ return unittest.expectedFailure(func)
+
+ return f
+
+def expectedFailureIfRoutingPolicyPortRangeIsNotAvailable():
+ def f(func):
+ rc = subprocess.call(['ip', 'rule', 'add', 'from', '192.168.100.19', 'sport', '1123-1150', 'dport', '3224-3290', 'table', '7'])
+ if rc == 0:
+ subprocess.call(['ip', 'rule', 'del', 'from', '192.168.100.19', 'sport', '1123-1150', 'dport', '3224-3290', 'table', '7'])
+ return func
+ else:
+ return unittest.expectedFailure(func)
+
+ return f
+
+def expectedFailureIfRoutingPolicyIPProtoIsNotAvailable():
+ def f(func):
+ rc = subprocess.call(['ip', 'rule', 'add', 'not', 'from', '192.168.100.19', 'ipproto', 'tcp', 'table', '7'])
+ if rc == 0:
+ subprocess.call(['ip', 'rule', 'del', 'not', 'from', '192.168.100.19', 'ipproto', 'tcp', 'table', '7'])
+ return func
+ else:
+ return unittest.expectedFailure(func)
+
+ return f
+
def setUpModule():
os.makedirs(network_unit_file_path, exist_ok=True)
@@ -100,8 +131,9 @@ class Utilities():
if (os.path.exists(os.path.join(network_unit_file_path, unit + '.d'))):
shutil.rmtree(os.path.join(network_unit_file_path, unit + '.d'))
- def start_dnsmasq(self):
- subprocess.check_call('dnsmasq -8 /var/run/networkd-ci/test-dnsmasq-log-file --log-queries=extra --log-dhcp --pid-file=/var/run/networkd-ci/test-test-dnsmasq.pid --conf-file=/dev/null --interface=veth-peer --enable-ra --dhcp-range=2600::10,2600::20 --dhcp-range=192.168.5.10,192.168.5.200 -R --dhcp-leasefile=/var/run/networkd-ci/lease --dhcp-option=26,1492 --dhcp-option=option:router,192.168.5.1 --dhcp-option=33,192.168.5.4,192.168.5.5', shell=True)
+ def start_dnsmasq(self, additional_options=''):
+ dnsmasq_command = 'dnsmasq -8 /var/run/networkd-ci/test-dnsmasq-log-file --log-queries=extra --log-dhcp --pid-file=/var/run/networkd-ci/test-test-dnsmasq.pid --conf-file=/dev/null --interface=veth-peer --enable-ra --dhcp-range=2600::10,2600::20 --dhcp-range=192.168.5.10,192.168.5.200 -R --dhcp-leasefile=/var/run/networkd-ci/lease --dhcp-option=26,1492 --dhcp-option=option:router,192.168.5.1 --dhcp-option=33,192.168.5.4,192.168.5.5 --port=0 ' + additional_options
+ subprocess.check_call(dnsmasq_command, shell=True)
time.sleep(10)
@@ -144,33 +176,6 @@ class Utilities():
time.sleep(5)
print()
-global ip
-global port
-
-class DHCPServer(threading.Thread):
- def __init__(self, name):
- threading.Thread.__init__(self)
- self.name = name
-
- def run(self):
- self.start_dhcp_server()
-
- def start_dhcp_server(self):
- sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-
- server_address = ('0.0.0.0', 67)
- sock.bind(server_address)
-
- print('Starting DHCP Server ...\n')
- data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
-
- global ip
- ip = addr[0]
-
- global port
- port = addr[1]
- sock.close()
-
class NetworkdNetDevTests(unittest.TestCase, Utilities):
links =[
@@ -201,6 +206,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
'vti6tun99',
'vtitun99',
'vxlan99',
+ 'wg98',
'wg99']
units = [
@@ -234,6 +240,8 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
'25-vti6-tunnel.netdev',
'25-vti-tunnel.netdev',
'25-vxlan.netdev',
+ '25-wireguard-23-peers.netdev',
+ '25-wireguard-23-peers.network',
'25-wireguard.netdev',
'6rd.network',
'gre.network',
@@ -388,9 +396,29 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
if shutil.which('wg'):
subprocess.call('wg')
+ output = subprocess.check_output(['wg', 'show', 'wg99', 'listen-port']).rstrip().decode('utf-8')
+ self.assertTrue(output, '51820')
+ output = subprocess.check_output(['wg', 'show', 'wg99', 'fwmark']).rstrip().decode('utf-8')
+ self.assertTrue(output, '0x4d2')
+ output = subprocess.check_output(['wg', 'show', 'wg99', 'allowed-ips']).rstrip().decode('utf-8')
+ self.assertTrue(output, 'RDf+LSpeEre7YEIKaxg+wbpsNV7du+ktR99uBEtIiCA=\t192.168.26.0/24 fd31:bf08:57cb::/48')
+ output = subprocess.check_output(['wg', 'show', 'wg99', 'persistent-keepalive']).rstrip().decode('utf-8')
+ self.assertTrue(output, 'RDf+LSpeEre7YEIKaxg+wbpsNV7du+ktR99uBEtIiCA=\t20')
+ output = subprocess.check_output(['wg', 'show', 'wg99', 'endpoints']).rstrip().decode('utf-8')
+ self.assertTrue(output, 'RDf+LSpeEre7YEIKaxg+wbpsNV7du+ktR99uBEtIiCA=\t192.168.27.3:51820')
self.assertTrue(self.link_exits('wg99'))
+ @expectedFailureIfModuleIsNotAvailable('wireguard')
+ def test_wireguard_23_peers(self):
+ self.copy_unit_to_networkd_unit_path('25-wireguard-23-peers.netdev', '25-wireguard-23-peers.network')
+ self.start_networkd()
+
+ if shutil.which('wg'):
+ subprocess.call('wg')
+
+ self.assertTrue(self.link_exits('wg98'))
+
def test_geneve(self):
self.copy_unit_to_networkd_unit_path('25-geneve.netdev')
self.start_networkd()
@@ -478,6 +506,7 @@ class NetworkdNetDevTests(unittest.TestCase, Utilities):
self.assertTrue(self.link_exits('dummy98'))
self.assertTrue(self.link_exits('sittun99'))
+ @expectedFailureIfERSPANModuleIsNotAvailable()
def test_erspan_tunnel(self):
self.copy_unit_to_networkd_unit_path('25-erspan-tunnel.netdev')
self.start_networkd()
@@ -536,9 +565,12 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities):
'25-fibrule-port-range.network',
'25-ipv6-address-label-section.network',
'25-neighbor-section.network',
+ '25-link-local-addressing-no.network',
+ '25-link-local-addressing-yes.network',
'25-link-section-unmanaged.network',
'25-route-gateway.network',
'25-route-gateway-on-link.network',
+ '25-route-ipv6-src.network',
'25-route-reverse-order.network',
'25-route-section.network',
'25-route-tcp-window-settings.network',
@@ -618,6 +650,7 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities):
subprocess.call(['ip', 'rule', 'del', 'table', '7'])
+ @expectedFailureIfRoutingPolicyPortRangeIsNotAvailable()
def test_routing_policy_rule_port_range(self):
self.copy_unit_to_networkd_unit_path('25-fibrule-port-range.network', '11-dummy.netdev')
self.start_networkd()
@@ -635,6 +668,7 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities):
subprocess.call(['ip', 'rule', 'del', 'table', '7'])
+ @expectedFailureIfRoutingPolicyIPProtoIsNotAvailable()
def test_routing_policy_rule_invert(self):
self.copy_unit_to_networkd_unit_path('25-fibrule-invert.network', '11-dummy.netdev')
self.start_networkd()
@@ -650,6 +684,22 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities):
subprocess.call(['ip', 'rule', 'del', 'table', '7'])
+ def test_address_peer(self):
+ self.copy_unit_to_networkd_unit_path('25-address-section.network', '12-dummy.netdev')
+ self.start_networkd()
+
+ self.assertTrue(self.link_exits('dummy98'))
+
+ output = subprocess.check_output(['ip', 'address', 'show', 'dummy98']).rstrip().decode('utf-8')
+ print(output)
+ self.assertRegex(output, 'inet 10.2.3.4 peer 10.2.3.5/16 scope global 32')
+ self.assertRegex(output, 'inet 10.6.7.8/16 brd 10.6.255.255 scope global 33')
+ self.assertRegex(output, 'inet6 2001:db8::20 peer 2001:db8::10/128 scope global')
+
+ output = subprocess.check_output(['networkctl', 'status', 'dummy98']).rstrip().decode('utf-8')
+ print(output)
+ self.assertRegex(output, 'State: routable \(configured\)')
+
def test_address_preferred_lifetime_zero_ipv6(self):
self.copy_unit_to_networkd_unit_path('25-address-section-miscellaneous.network', '12-dummy.netdev')
self.start_networkd()
@@ -756,6 +806,22 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities):
self.assertRegex(output, 'scope')
self.assertRegex(output, 'link')
+ def test_ip_route_ipv6_src_route(self):
+ # a dummy device does not make the addresses go through tentative state, so we
+ # reuse a bond from an earlier test, which does make the addresses go through
+ # tentative state, and do our test on that
+ self.copy_unit_to_networkd_unit_path('23-active-slave.network', '25-route-ipv6-src.network', '25-bond-active-backup-slave.netdev', '12-dummy.netdev')
+ self.start_networkd()
+
+ self.assertTrue(self.link_exits('dummy98'))
+ self.assertTrue(self.link_exits('bond199'))
+
+ output = subprocess.check_output(['ip', '-6', 'route', 'list', 'dev', 'bond199']).rstrip().decode('utf-8')
+ print(output)
+ self.assertRegex(output, 'abcd::/16')
+ self.assertRegex(output, 'src')
+ self.assertRegex(output, '2001:1234:56:8f63::2')
+
def test_ip_link_mac_address(self):
self.copy_unit_to_networkd_unit_path('25-address-link-section.network', '12-dummy.netdev')
self.start_networkd()
@@ -795,7 +861,67 @@ class NetworkdNetWorkTests(unittest.TestCase, Utilities):
output = subprocess.check_output(['ip', 'neigh', 'list']).rstrip().decode('utf-8')
print(output)
self.assertRegex(output, '192.168.10.1.*00:00:5e:00:02:65.*PERMANENT')
- self.assertRegex(output, '2004:da8:1:0::1.*00:00:5e:00:02:66.*PERMANENT')
+ self.assertRegex(output, '2004:da8:1::1.*00:00:5e:00:02:66.*PERMANENT')
+
+ def test_link_local_addressing(self):
+ self.copy_unit_to_networkd_unit_path('25-link-local-addressing-yes.network', '11-dummy.netdev',
+ '25-link-local-addressing-no.network', '12-dummy.netdev')
+ self.start_networkd()
+
+ self.assertTrue(self.link_exits('test1'))
+ self.assertTrue(self.link_exits('dummy98'))
+
+ time.sleep(10)
+
+ output = subprocess.check_output(['ip', 'address', 'show', 'dev', 'test1']).rstrip().decode('utf-8')
+ print(output)
+ self.assertRegex(output, 'inet .* scope link')
+ self.assertRegex(output, 'inet6 .* scope link')
+
+ output = subprocess.check_output(['ip', 'address', 'show', 'dev', 'dummy98']).rstrip().decode('utf-8')
+ print(output)
+ self.assertNotRegex(output, 'inet6* .* scope link')
+
+ output = subprocess.check_output(['networkctl', 'status', 'test1']).rstrip().decode('utf-8')
+ print(output)
+ self.assertRegex(output, 'State: degraded \(configured\)')
+
+ output = subprocess.check_output(['networkctl', 'status', 'dummy98']).rstrip().decode('utf-8')
+ print(output)
+ self.assertRegex(output, 'State: carrier \(configured\)')
+
+ '''
+ Documentation/networking/ip-sysctl.txt
+
+ addr_gen_mode - INTEGER
+ Defines how link-local and autoconf addresses are generated.
+
+ 0: generate address based on EUI64 (default)
+ 1: do no generate a link-local address, use EUI64 for addresses generated
+ from autoconf
+ 2: generate stable privacy addresses, using the secret from
+ stable_secret (RFC7217)
+ 3: generate stable privacy addresses, using a random secret if unset
+ '''
+
+ test1_addr_gen_mode = ''
+ if os.path.exists(os.path.join(os.path.join(network_sysctl_ipv6_path, 'test1'), 'stable_secret')):
+ with open(os.path.join(os.path.join(network_sysctl_ipv6_path, 'test1'), 'stable_secret')) as f:
+ try:
+ f.readline()
+ except IOError:
+ # if stable_secret is unset, then EIO is returned
+ test1_addr_gen_mode = '0'
+ else:
+ test1_addr_gen_mode = '2'
+ else:
+ test1_addr_gen_mode = '0'
+
+ if os.path.exists(os.path.join(os.path.join(network_sysctl_ipv6_path, 'test1'), 'addr_gen_mode')):
+ self.assertEqual(self.read_ipv6_sysctl_attr('test1', 'addr_gen_mode'), '0')
+
+ if os.path.exists(os.path.join(os.path.join(network_sysctl_ipv6_path, 'dummy98'), 'addr_gen_mode')):
+ self.assertEqual(self.read_ipv6_sysctl_attr('dummy98', 'addr_gen_mode'), '1')
def test_sysctl(self):
self.copy_unit_to_networkd_unit_path('25-sysctl.network', '12-dummy.netdev')
@@ -954,7 +1080,7 @@ class NetworkdNetworkDHCPServerTests(unittest.TestCase, Utilities):
self.assertRegex(output, 'NTP: 192.168.5.1')
def test_domain(self):
- self.copy_unit_to_networkd_unit_path( '12-dummy.netdev', '24-search-domain.network')
+ self.copy_unit_to_networkd_unit_path('12-dummy.netdev', '24-search-domain.network')
self.start_networkd()
self.assertTrue(self.link_exits('dummy98'))
@@ -994,8 +1120,10 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities):
'dhcp-client-listen-port.network',
'dhcp-client-route-metric.network',
'dhcp-client-route-table.network',
+ 'dhcp-client.network',
'dhcp-server-veth-peer.network',
- 'dhcp-v4-server-veth-peer.network']
+ 'dhcp-v4-server-veth-peer.network',
+ 'static.network']
def setUp(self):
self.link_remove(self.links)
@@ -1009,7 +1137,7 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities):
self.remove_log_file()
def test_dhcp_client_ipv6_only(self):
- self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network','dhcp-client-ipv6-only.network')
+ self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv6-only.network')
self.start_networkd()
self.assertTrue(self.link_exits('veth99'))
@@ -1022,7 +1150,7 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities):
self.assertNotRegex(output, '192.168.5')
def test_dhcp_client_ipv4_only(self):
- self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network','dhcp-client-ipv4-only-ipv6-disabled.network')
+ self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-ipv4-only-ipv6-disabled.network')
self.start_networkd()
self.assertTrue(self.link_exits('veth99'))
@@ -1111,21 +1239,15 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities):
def test_dhcp_client_listen_port(self):
self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client-listen-port.network')
-
- dh_server = DHCPServer("dhcp_server")
- dh_server.start()
-
self.start_networkd()
self.assertTrue(self.link_exits('veth99'))
- global port
- global ip
-
- self.assertRegex(str(port), '5555')
- self.assertRegex(str(ip), '0.0.0.0')
+ self.start_dnsmasq('--dhcp-alternate-port=67,5555')
- dh_server.join()
+ output = subprocess.check_output(['ip', '-4', 'address', 'show', 'dev', 'veth99']).rstrip().decode('utf-8')
+ print(output)
+ self.assertRegex(output, '192.168.5.* dynamic')
def test_dhcp_route_table_id(self):
self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-v4-server-veth-peer.network', 'dhcp-client-route-table.network')
@@ -1174,6 +1296,43 @@ class NetworkdNetworkDHCPClientTests(unittest.TestCase, Utilities):
print(output)
self.assertRegex(output, '192.168.5.*')
+ def test_dhcp_client_reuse_address_as_static(self):
+ self.copy_unit_to_networkd_unit_path('25-veth.netdev', 'dhcp-server-veth-peer.network', 'dhcp-client.network')
+ self.start_networkd()
+
+ self.assertTrue(self.link_exits('veth99'))
+
+ self.start_dnsmasq()
+
+ output = subprocess.check_output(['ip', 'address', 'show', 'dev', 'veth99', 'scope', 'global']).rstrip().decode('utf-8')
+ print(output)
+ self.assertRegex(output, '192.168.5')
+ self.assertRegex(output, '2600::')
+
+ ipv4_address = re.search('192\.168\.5\.[0-9]*/24', output)
+ ipv6_address = re.search('2600::[0-9a-f:]*/128', output)
+ static_network = '\n'.join(['[Match]', 'Name=veth99', '[Network]', 'IPv6AcceptRA=no', 'Address=' + ipv4_address.group(), 'Address=' + ipv6_address.group()])
+ print(static_network)
+
+ self.remove_unit_from_networkd_path(['dhcp-client.network'])
+
+ with open(os.path.join(network_unit_file_path, 'static.network'), mode='w') as f:
+ f.write(static_network)
+
+ self.start_networkd()
+
+ self.assertTrue(self.link_exits('veth99'))
+
+ output = subprocess.check_output(['ip', '-4', 'address', 'show', 'dev', 'veth99', 'scope', 'global']).rstrip().decode('utf-8')
+ print(output)
+ self.assertRegex(output, '192.168.5')
+ self.assertRegex(output, 'valid_lft forever preferred_lft forever')
+
+ output = subprocess.check_output(['ip', '-6', 'address', 'show', 'dev', 'veth99', 'scope', 'global']).rstrip().decode('utf-8')
+ print(output)
+ self.assertRegex(output, '2600::')
+ self.assertRegex(output, 'valid_lft forever preferred_lft forever')
+
if __name__ == '__main__':
unittest.main(testRunner=unittest.TextTestRunner(stream=sys.stdout,
verbosity=3))
diff --git a/tools/choose-default-locale.sh b/tools/choose-default-locale.sh
new file mode 100755
index 0000000000..3b3003835c
--- /dev/null
+++ b/tools/choose-default-locale.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+set -e
+
+# Fedora uses C.utf8 but Debian uses C.UTF-8
+if locale -a | grep -xq -E 'C\.(utf8|UTF-8)'; then
+ echo 'C.UTF-8'
+elif locale -a | grep -xqF 'en_US.utf8'; then
+ echo 'en_US.UTF-8'
+else
+ echo 'C'
+fi
diff --git a/tools/make-directive-index.py b/tools/make-directive-index.py
index 8703c8a37b..9d9448703f 100755
--- a/tools/make-directive-index.py
+++ b/tools/make-directive-index.py
@@ -46,13 +46,23 @@ TEMPLATE = '''\
<refsect1>
<title>Environment variables</title>
- <para>Environment variables understood by the systemd
- manager and other programs.</para>
+ <para>Environment variables understood by the systemd manager
+ and other programs and environment variable-compatible settings.</para>
<variablelist id='environment-variables' />
</refsect1>
<refsect1>
+ <title>EFI variables</title>
+
+ <para>EFI variables understood by
+ <citerefentry><refentrytitle>systemd-boot</refentrytitle><manvolnum>7</manvolnum></citerefentry>
+ and other programs.</para>
+
+ <variablelist id='efi-variables' />
+ </refsect1>
+
+ <refsect1>
<title>UDEV directives</title>
<para>Directives for configuring systemd units through the
@@ -98,16 +108,25 @@ TEMPLATE = '''\
</refsect1>
<refsect1>
- <title>System manager directives</title>
+ <title><citerefentry><refentrytitle>systemd.nspawn</refentrytitle><manvolnum>5</manvolnum></citerefentry>
+ directives</title>
+
+ <para>Directives for configuring systemd-nspawn containers.</para>
+
+ <variablelist id='nspawn-directives' />
+ </refsect1>
+
+ <refsect1>
+ <title>Program configuration options</title>
<para>Directives for configuring the behaviour of the
- systemd process.</para>
+ systemd process and other tools through configuration files.</para>
- <variablelist id='systemd-directives' />
+ <variablelist id='config-directives' />
</refsect1>
<refsect1>
- <title>command line options</title>
+ <title>Command line options</title>
<para>Command-line options accepted by programs in the
systemd suite.</para>
diff --git a/tools/make-index-md.sh b/tools/make-index-md.sh
deleted file mode 100755
index 78506cbf39..0000000000
--- a/tools/make-index-md.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-
-set -eu
-
-cd "$@"/docs/
-(
- echo -e "# systemd Documentation\n"
-
- for f in *.md ; do
- if [ "x$f" != "xindex.md" ] ; then
- t=`grep "^# " "$f" | head -n 1 | sed -e 's/^#\s*//'`
-
- if [ "x$f" = "xCODE_OF_CONDUCT.md" -o "x$f" = "xCONTRIBUTING.md" ] ; then
- # For some reason GitHub refuses to generate
- # HTML versions of these two documents,
- # probably because they are in some way special
- # in GitHub behaviour (as they are shown as
- # links in the issue submission form). Let's
- # work around this limitation by linking to
- # their repository browser version
- # instead. This might not even be such a bad
- # thing, given that the issue submission form
- # and our index file thus link to the same
- # version.
- u="https://github.com/systemd/systemd/blob/master/docs/$f"
- else
- u="https://systemd.io/"`echo "$f" | sed -e 's/.md$//'`
- fi
- echo "* [$t]($u)"
- fi
- done
-) > index.md
diff --git a/tools/meson-vcs-tag.sh b/tools/meson-vcs-tag.sh
new file mode 100755
index 0000000000..c8033d00a1
--- /dev/null
+++ b/tools/meson-vcs-tag.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+
+set -eu
+set -o pipefail
+
+dir="$1"
+tag="$2"
+fallback="$3"
+
+if [ -n "$tag" ]; then
+ echo "$tag"
+ exit 0
+fi
+
+# Apparently git describe has a bug where it always considers the work-tree
+# dirty when invoked with --git-dir (even though 'git status' is happy). Work
+# around this issue by cd-ing to the source directory.
+cd "$dir" && git describe --abbrev=7 --dirty=+ 2>/dev/null | sed 's/^v//' || echo "$fallback"
diff --git a/travis-ci/managers/debian.sh b/travis-ci/managers/debian.sh
index af2f0dab08..dbd12c4759 100755
--- a/travis-ci/managers/debian.sh
+++ b/travis-ci/managers/debian.sh
@@ -39,22 +39,16 @@ for phase in "${PHASES[@]}"; do
$DOCKER_EXEC apt-get -y update
$DOCKER_EXEC apt-get -y build-dep systemd
$DOCKER_EXEC apt-get -y install "${ADDITIONAL_DEPS[@]}"
- # overlayfs on TravisCI is having trouble delivering inotify events to test-path and test-event.
- # Let's use tmpfs instead for now.
- $DOCKER_EXEC mount -t tmpfs tmpfs /tmp
;;
- RUN)
- info "Run phase"
- $DOCKER_EXEC meson --werror -Dtests=unsafe -Dslow-tests=true -Dsplit-usr=true build
+ RUN|RUN_CLANG)
+ if [[ "$phase" = "RUN_CLANG" ]]; then
+ ENV_VARS="-e CC=clang -e CXX=clang++"
+ fi
+ docker exec $ENV_VARS -it $CONT_NAME meson --werror -Dtests=unsafe -Dslow-tests=true -Dsplit-usr=true build
$DOCKER_EXEC ninja -v -C build
- $DOCKER_EXEC ninja -C build test
+ docker exec -e "TRAVIS=$TRAVIS" -it $CONT_NAME ninja -C build test
$DOCKER_EXEC tools/check-directives.sh
;;
- RUN_CLANG)
- docker exec -e CC=clang -e CXX=clang++ -it $CONT_NAME meson --werror -Dtests=unsafe -Dslow-tests=true -Dsplit-usr=true build
- $DOCKER_EXEC ninja -v -C build
- $DOCKER_EXEC ninja -C build test
- ;;
RUN_ASAN|RUN_CLANG_ASAN)
if [[ "$phase" = "RUN_CLANG_ASAN" ]]; then
ENV_VARS="-e CC=clang -e CXX=clang++"
diff --git a/travis-ci/managers/xenial.sh b/travis-ci/managers/xenial.sh
new file mode 100755
index 0000000000..af60114d34
--- /dev/null
+++ b/travis-ci/managers/xenial.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+set -e
+set -x
+
+apt-get update
+apt-get build-dep systemd -y
+apt-get install -y util-linux libmount-dev libblkid-dev liblzma-dev libqrencode-dev libmicrohttpd-dev iptables-dev liblz4-dev libcurl4-gnutls-dev unifont itstool kbd cryptsetup-bin net-tools isc-dhcp-client iputils-ping strace qemu-system-x86 linux-image-virtual mount libgpg-error-dev libxkbcommon-dev python-lxml python3-lxml python3-pip libcap-dev
+apt-get install -y gettext python3-evdev python3-pyparsing libmount-dev python3-setuptools ninja-build
+pip3 install meson
+
+cd $REPO_ROOT
+
+sed -i 's/2\.30/2.27/' meson.build
+
+meson --werror -Db_sanitize=address,undefined -Dsplit-usr=true build
+ninja -v -C build
+make -C test/TEST-01-BASIC clean setup run TEST_NO_QEMU=yes NSPAWN_ARGUMENTS=--keep-unit RUN_IN_UNPRIVILEGED_CONTAINER=no
+
+# Now that we're more or less sure that ASan isn't going to crash systemd and cause a kernel panic
+# let's also run the test with QEMU to cover udevd, sysctl and everything else that isn't run
+# in containers.
+make -C test/TEST-01-BASIC clean setup run TEST_NO_NSPAWN=yes
diff --git a/units/initrd-switch-root.target b/units/initrd-switch-root.target
index ad82245121..ea4f02618f 100644
--- a/units/initrd-switch-root.target
+++ b/units/initrd-switch-root.target
@@ -15,4 +15,4 @@ Requires=initrd-switch-root.service
Before=initrd-switch-root.service
AllowIsolate=yes
Wants=initrd-udevadm-cleanup-db.service initrd-root-fs.target initrd-fs.target systemd-journald.service initrd-cleanup.service
-After=initrd-udevadm-cleanup-db.service initrd-root-fs.target initrd-fs.target emergency.service emergency.target
+After=initrd-udevadm-cleanup-db.service initrd-root-fs.target initrd-fs.target emergency.service emergency.target initrd-cleanup.service
diff --git a/units/systemd-tmpfiles-setup-dev.service.in b/units/systemd-tmpfiles-setup-dev.service.in
index 1d06b369d4..50df15c291 100644
--- a/units/systemd-tmpfiles-setup-dev.service.in
+++ b/units/systemd-tmpfiles-setup-dev.service.in
@@ -14,7 +14,6 @@ DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-sysusers.service
Before=sysinit.target local-fs-pre.target systemd-udevd.service shutdown.target
-ConditionCapability=CAP_SYS_MODULE
[Service]
Type=oneshot