mirror of
https://git.proxmox.com/git/systemd
synced 2025-08-03 09:49:24 +00:00
New upstream version 247
This commit is contained in:
parent
a032b68d06
commit
9e294e288c
@ -118,6 +118,7 @@ PenaltyBreakString: 0
|
||||
PenaltyExcessCharacter: 10
|
||||
PenaltyReturnTypeOnItsOwnLine: 100
|
||||
SpaceAfterCStyleCast: true
|
||||
SpaceBeforeParens: ControlStatementsExceptForEachMacros
|
||||
SpacesInAngles: true
|
||||
TabWidth: 8
|
||||
UseCRLF: false
|
||||
|
2
.github/workflows/ubuntu-build-check.sh
vendored
2
.github/workflows/ubuntu-build-check.sh
vendored
@ -103,7 +103,7 @@ for args in "${ARGS[@]}"; do
|
||||
SECONDS=0
|
||||
|
||||
info "Checking build with $args"
|
||||
if ! AR="$AR" CC="$CC" CXX="$CXX" CFLAGS="-Werror" CXXFLAGS="-Werror" meson -Dtests=unsafe -Dslow-tests=true --werror $args build; then
|
||||
if ! AR="$AR" CC="$CC" CXX="$CXX" CFLAGS="-Werror" CXXFLAGS="-Werror" meson -Dtests=unsafe -Dslow-tests=true -Dfuzz-tests=true --werror $args build; then
|
||||
fatal "meson failed with $args"
|
||||
fi
|
||||
|
||||
|
@ -5,7 +5,7 @@
|
||||
|
||||
[Distribution]
|
||||
Distribution=fedora
|
||||
Release=32
|
||||
Release=33
|
||||
|
||||
[Output]
|
||||
Format=gpt_ext4
|
||||
@ -58,6 +58,8 @@ BuildPackages=
|
||||
p11-kit-devel
|
||||
pam-devel
|
||||
pcre2-devel
|
||||
perl(IPC::SysV)
|
||||
perl(Time::HiRes)
|
||||
pkgconfig
|
||||
python3-devel
|
||||
python3-lxml
|
||||
|
141
NEWS
141
NEWS
@ -1,8 +1,8 @@
|
||||
systemd System and Service Manager
|
||||
|
||||
CHANGES WITH 247 in spe:
|
||||
CHANGES WITH 247:
|
||||
|
||||
* KERNEL API INCOMPATIBILITY: Linux 4.12 introduced two new uevents
|
||||
* KERNEL API INCOMPATIBILITY: Linux 4.14 introduced two new uevents
|
||||
"bind" and "unbind" to the Linux device model. When this kernel
|
||||
change was made, systemd-udevd was only minimally updated to handle
|
||||
and propagate these new event types. The introduction of these new
|
||||
@ -86,6 +86,33 @@ CHANGES WITH 247 in spe:
|
||||
this is not caused by systemd/udev changes, but result of a kernel
|
||||
behaviour change.
|
||||
|
||||
* UPCOMING INCOMPATIBILITY: So far most downstream distribution
|
||||
packages have not retriggered devices once the udev package (or any
|
||||
auxiliary package installing additional udev rules) is updated. We
|
||||
intend to work with major distributions to change this, so that
|
||||
"udevadm trigger -a change" is issued on such upgrades, ensuring that
|
||||
the updated ruleset is applied to the devices already discovered, so
|
||||
that (asynchronously) after the upgrade completed the udev database
|
||||
is consistent with the updated rule set. This means udev rules must
|
||||
be ready to be retriggered with a "change" action any time, and
|
||||
result in correct and complete udev database entries. While the
|
||||
majority of udev rule files known to us currently get this right,
|
||||
some don't. Specifically, there are udev rules files included in
|
||||
various packages that only set udev properties on the "add" action,
|
||||
but do not handle the "change" action. If a device matching those
|
||||
rules is retriggered with the "change" action (as is intended here)
|
||||
it would suddenly lose the relevant properties. This always has been
|
||||
problematic, but as soon as all udev devices are triggered on relevant
|
||||
package upgrades this will become particularly so. It is strongly
|
||||
recommended to fix offending rules so that they can handle a "change"
|
||||
action at any time, and acquire all necessary udev properties even
|
||||
then. Or in other words: the header guard mentioned above
|
||||
(ACTION=="remove",GOTO="xyz_end") is the correct approach to handle
|
||||
this, as it makes sure rules are rerun on "change" correctly, and
|
||||
accumulate the correct and complete set of udev properties. udev rule
|
||||
definitions that cannot handle "change" events being triggered at
|
||||
arbitrary times should be considered buggy.
|
||||
|
||||
* The MountAPIVFS= service file setting now defaults to on if
|
||||
RootImage= and RootDirectory= are used, which means that with those
|
||||
two settings /proc/, /sys/ and /dev/ are automatically properly set
|
||||
@ -457,20 +484,32 @@ CHANGES WITH 247 in spe:
|
||||
discipline in the [FlowQueuePIE] sections.
|
||||
|
||||
* systemd-networkd's .netdev files may now be used to create "BareUDP"
|
||||
tunnels, configured in the new [BareUDP] setting. VXLAN tunnels may
|
||||
now be marked to be independent of any underlying network interface
|
||||
via the new Independent= boolean setting.
|
||||
tunnels, configured in the new [BareUDP] setting.
|
||||
|
||||
* systemd-networkd's Gateway= setting in .network files now accepts the
|
||||
special values _dhcp4 and _ipv6ra to configure additional, locally
|
||||
defined, explicit routes to the gateway acquired via DHCP or IPv6
|
||||
Router Advertisements.
|
||||
special values "_dhcp4" and "_ipv6ra" to configure additional,
|
||||
locally defined, explicit routes to the gateway acquired via DHCP or
|
||||
IPv6 Router Advertisements. The old setting "_dhcp" is deprecated,
|
||||
but still accepted for backwards compatibility.
|
||||
|
||||
* systemd-networkd's [IPv6PrefixDelegation] section and
|
||||
IPv6PrefixDelegation= options have been renamed as [IPv6SendRA] and
|
||||
IPv6SendRA= (the old names are still accepted for backwards
|
||||
compatibility).
|
||||
|
||||
* systemd-networkd's .network files gained the DHCPv6PrefixDelegation=
|
||||
boolean setting in [Network] section. If enabled, the delegated prefix
|
||||
gained by another link will be configured, and an address within the
|
||||
prefix will be assigned.
|
||||
|
||||
* systemd-networkd's .network files gained the Announce= boolean setting
|
||||
in [DHCPv6PrefixDelegation] section. When enabled, the delegated
|
||||
prefix will be announced through IPv6 router advertisement (IPv6 RA).
|
||||
The setting is enabled by default.
|
||||
|
||||
* VXLAN tunnels may now be marked as independent of any underlying
|
||||
network interface via the new Independent= boolean setting.
|
||||
|
||||
* systemctl gained support for two new verbs: "service-log-level" and
|
||||
"service-log-target" may be used on services that implement the
|
||||
generic org.freedesktop.LogControl1 D-Bus interface to dynamically
|
||||
@ -481,8 +520,8 @@ CHANGES WITH 247 in spe:
|
||||
|
||||
* The SystemCallErrorNumber= unit file setting now accepts the new
|
||||
"kill" and "log" actions, in addition to arbitrary error number
|
||||
specifications as before. If "kill" the the processes are killed on
|
||||
the event, if "log" the offending system call is audit logged.
|
||||
specifications as before. If "kill" the processes are killed on the
|
||||
event, if "log" the offending system call is audit logged.
|
||||
|
||||
* A new SystemCallLog= unit file setting has been added that accepts a
|
||||
list of system calls that shall be logged about (audit).
|
||||
@ -530,13 +569,15 @@ CHANGES WITH 247 in spe:
|
||||
contention for selected parts of the unit hierarchy using the PSI
|
||||
information reported by the kernel, and kills processes when memory
|
||||
or swap pressure is above configured limits. This service is only
|
||||
enabled in developer mode (see below) and should be considered a
|
||||
preview in this release. Behaviour details and option names are
|
||||
subject to change without the usual backwards-compatibility promises.
|
||||
enabled by default in developer mode (see below) and should be
|
||||
considered a preview in this release. Behaviour details and option
|
||||
names are subject to change without the usual backwards-compatibility
|
||||
promises.
|
||||
|
||||
* A new helper oomctl has been added to introspect systemd-oomd state.
|
||||
If also is only available in developer mode and should be considered
|
||||
a preview without the usual backwards-compatibility promises.
|
||||
It is only enabled by default in developer mode and should be
|
||||
considered a preview without the usual backwards-compatibility
|
||||
promises.
|
||||
|
||||
* New meson option -Dcompat-mutable-uid-boundaries= has been added. If
|
||||
enabled, systemd reads the system UID boundaries from /etc/login.defs
|
||||
@ -598,39 +639,53 @@ CHANGES WITH 247 in spe:
|
||||
* "systemctl edit" has been updated to show the original effective unit
|
||||
contents in commented form in the text editor.
|
||||
|
||||
* Units in user mode are now segregated into three new slices:
|
||||
session.slice (units that form the core of graphical session),
|
||||
app.slice ("normal" user applications), and background.slice
|
||||
(low-priority tasks). Unless otherwise configured, user units are
|
||||
placed in app.slice. The plan is to add resource limits and
|
||||
protections for the different slices in the future.
|
||||
|
||||
* New GPT partition types for RISCV32/64 for the root and /usr
|
||||
partitions, and their associated Verity partitions have been defined,
|
||||
and are now understood by systemd-gpt-auto-generator, and the OS
|
||||
image dissection logic.
|
||||
|
||||
Contributions from: Adolfo Jayme Barrientos, afg, Alec Moskvin, Alyssa
|
||||
Ross, Amitanand Chikorde, Andrew Hangsleben, Anita Zhang, Ansgar
|
||||
Burchardt, Arian van Putten, Aurelien Jarno, Axel Rasmussen, bauen1,
|
||||
Beniamino Galvani, Benjamin Berg, Bjørn Mork, brainrom, Chandradeep
|
||||
Dey, Charles Lee, Chris Down, Christian Göttsche, Clemens Gruber, Daan
|
||||
De Meyer, Daniele Medri, Daniel Mack, Daniel Rusek, Dan Streetman,
|
||||
David Tardon, Dimitri John Ledkov, Dmitry Borodaenko, Elias Probst,
|
||||
Elisei Roca, ErrantSpore, Etienne Doms, Fabrice Fontaine, fangxiuning,
|
||||
Felix Riemann, Florian Klink, Franck Bui, Frantisek Sumsal, fwSmit,
|
||||
George Rawlinson, germanztz, Gibeom Gwon, Glen Whitney, Gogo Gogsi,
|
||||
Göran Uddeborg, Grant Mathews, Hans de Goede, Hans Ulrich Niedermann,
|
||||
Haochen Tong, Harald Seiler, huangyong, Hubert Kario, Ikey Doherty, Jan
|
||||
Chren, Jan Schlüter, Jérémy Nouhaud, Jian-Hong Pan, Joerg Behrmann,
|
||||
Jonathan Lebon, Josh Brobst, Juergen Hoetzel, Julien Humbert, Kai-Chuan
|
||||
Hsieh, Kairui Song, Kamil Dudka, Kir Kolyshkin, Kristijan Gjoshev, Kyle
|
||||
Huey, Kyle Russell, Lennart Poettering, lichangze, Luca Boccassi, Lucas
|
||||
Werkmeister, Luca Weiss, Marc Kleine-Budde, Marco Wang, Martin Wilck,
|
||||
Marti Raudsepp, masmullin2000, Máté Pozsgay, Matt Fenwick, Michael
|
||||
Biebl, Michael Scherer, Michal Koutný, Michal Sekletár, Michal
|
||||
Suchanek, Mikael Szreder, Milo Casagrande, mirabilos, Mitsuha_QuQ,
|
||||
mog422, Muhammet Kara, Nazar Vinnichuk, Nicholas Narsing, Nicolas
|
||||
Fella, Njibhu, nl6720, Oğuz Ersen, Olivier Le Moal, Ondrej Kozina,
|
||||
onlybugreports, Pass Automated Testing Suite, Pat Coulthard, Pedro
|
||||
Ruiz, Peter Hutterer, Phaedrus Leeds, PhoenixDiscord, Piotr Drąg, Plan
|
||||
C, Purushottam choudhary, Rasmus Villemoes, Renaud Métrich, Robert
|
||||
Marko, Ronan Pigott, Roy Chen (陳彥廷), RussianNeuroMancer, Samanta
|
||||
Navarro, Samuel BF, scootergrisen, Sorin Ionescu, Steve Dodd, Susant
|
||||
Sahani, Timo Rothenpieler, Tobias Hunger, Tobias Kaufmann, Topi
|
||||
Miettinen, Vito Caputo, Weblate, Wen Yang, williamvds, Yu, Li-Yu, Yuri
|
||||
Chornoivan, Yu Watanabe, Zbigniew Jędrzejewski-Szmek, Zmicer Turok,
|
||||
Дамјан Георгиевски
|
||||
Dey, Charles Lee, Chris Down, Christian Göttsche, Christof Efkemann,
|
||||
Christoph Ruegge, Clemens Gruber, Daan De Meyer, Daniele Medri, Daniel
|
||||
Mack, Daniel Rusek, Dan Streetman, David Tardon, Dimitri John Ledkov,
|
||||
Dmitry Borodaenko, Elias Probst, Elisei Roca, ErrantSpore, Etienne
|
||||
Doms, Fabrice Fontaine, fangxiuning, Felix Riemann, Florian Klink,
|
||||
Franck Bui, Frantisek Sumsal, fwSmit, George Rawlinson, germanztz,
|
||||
Gibeom Gwon, Glen Whitney, Gogo Gogsi, Göran Uddeborg, Grant Mathews,
|
||||
Hans de Goede, Hans Ulrich Niedermann, Haochen Tong, Harald Seiler,
|
||||
huangyong, Hubert Kario, igo95862, Ikey Doherty, Insun Pyo, Jan Chren,
|
||||
Jan Schlüter, Jérémy Nouhaud, Jian-Hong Pan, Joerg Behrmann, Jonathan
|
||||
Lebon, Jörg Thalheim, Josh Brobst, Juergen Hoetzel, Julien Humbert,
|
||||
Kai-Chuan Hsieh, Kairui Song, Kamil Dudka, Kir Kolyshkin, Kristijan
|
||||
Gjoshev, Kyle Huey, Kyle Russell, Lee Whalen, Lennart Poettering,
|
||||
lichangze, Luca Boccassi, Lucas Werkmeister, Luca Weiss, Marc
|
||||
Kleine-Budde, Marco Wang, Martin Wilck, Marti Raudsepp, masmullin2000,
|
||||
Máté Pozsgay, Matt Fenwick, Michael Biebl, Michael Scherer, Michal
|
||||
Koutný, Michal Sekletár, Michal Suchanek, Mikael Szreder, Milo
|
||||
Casagrande, mirabilos, Mitsuha_QuQ, mog422, Muhammet Kara, Nazar
|
||||
Vinnichuk, Nicholas Narsing, Nicolas Fella, Njibhu, nl6720, Oğuz Ersen,
|
||||
Olivier Le Moal, Ondrej Kozina, onlybugreports, Pass Automated Testing
|
||||
Suite, Pat Coulthard, Pavel Sapezhko, Pedro Ruiz, perry_yuan, Peter
|
||||
Hutterer, Phaedrus Leeds, PhoenixDiscord, Piotr Drąg, Plan C,
|
||||
Purushottam choudhary, Rasmus Villemoes, Renaud Métrich, Robert Marko,
|
||||
Roman Beranek, Ronan Pigott, Roy Chen (陳彥廷), RussianNeuroMancer,
|
||||
Samanta Navarro, Samuel BF, scootergrisen, Sorin Ionescu, Steve Dodd,
|
||||
Susant Sahani, Timo Rothenpieler, Tobias Hunger, Tobias Kaufmann, Topi
|
||||
Miettinen, vanou, Vito Caputo, Weblate, Wen Yang, Whired Planck,
|
||||
williamvds, Yu, Li-Yu, Yuri Chornoivan, Yu Watanabe, Zbigniew
|
||||
Jędrzejewski-Szmek, Zmicer Turok, Дамјан Георгиевски
|
||||
|
||||
– Warsaw, 2020-11-10
|
||||
– Warsaw, 2020-11-26
|
||||
|
||||
CHANGES WITH 246:
|
||||
|
||||
|
14
TODO
14
TODO
@ -20,6 +20,18 @@ Janitorial Clean-ups:
|
||||
|
||||
Features:
|
||||
|
||||
* cryptsetup: optionally, when run during boot-up and password is never
|
||||
entered, and we are on AC power (or so), power off machine again
|
||||
|
||||
* when configuring loopback netif, and it fails due to EPERM, eat up error if
|
||||
it happens to be set up alright already.
|
||||
|
||||
* at boot: check if battery above some threshold, if not power off again after explanation
|
||||
|
||||
* userdb: add field for ambient caps, so that a user can have CAP_WAKE_ALARM
|
||||
for example. And add code that resets ambient caps for all services by
|
||||
default.
|
||||
|
||||
* homed: try to unmount in regular intervals when home dir was busy when we
|
||||
tried because idle.
|
||||
|
||||
@ -634,7 +646,7 @@ Features:
|
||||
parameters
|
||||
|
||||
* maybe hook of xfs/ext4 quotactl() with services? i.e. automatically manage
|
||||
the quota of a the user indicated in User= via unit file settings, like the
|
||||
the quota of the user indicated in User= via unit file settings, like the
|
||||
other resource management concepts. Would mix nicely with DynamicUser=1. Or
|
||||
alternatively, do this with projids, so that we can also cover services
|
||||
running as root. Quota should probably cover all the special dirs such as
|
||||
|
@ -30,3 +30,12 @@ expression e;
|
||||
+ return
|
||||
log_LEVEL_errno(e, ...);
|
||||
- return -e;
|
||||
@@
|
||||
identifier log_LEVEL_errno =~ "^log_(debug|info|notice|warning|error|emergency)_errno$";
|
||||
expression list args;
|
||||
expression e;
|
||||
local idexpression r;
|
||||
@@
|
||||
- log_LEVEL_errno(e, args);
|
||||
- r = e;
|
||||
+ r = log_LEVEL_errno(e, args);
|
||||
|
@ -44,5 +44,5 @@ identifier log_LEVEL_errno =~ "^log_(debug|info|notice|warning|error|emergency)_
|
||||
identifier ERRNO =~ "^E[A-Z]+$";
|
||||
expression list args;
|
||||
@@
|
||||
- return log_LEVEL_errno(ERRNO, args);
|
||||
+ return log_LEVEL_errno(SYNTHETIC_ERRNO(ERRNO), args);
|
||||
- log_LEVEL_errno(ERRNO, args);
|
||||
+ log_LEVEL_errno(SYNTHETIC_ERRNO(ERRNO), args);
|
||||
|
@ -77,7 +77,7 @@ manager, please consider supporting the following interfaces.
|
||||
container instance) or creating one scope unit for each container instance
|
||||
via systemd's transient unit API (in case you have one container manager
|
||||
that manages all instances. Either way, make sure to set `Delegate=yes` in
|
||||
it. This ensures that that the unit you created will be part of all cgroup
|
||||
it. This ensures that the unit you created will be part of all cgroup
|
||||
controllers (or at least the ones systemd understands). The latter may also
|
||||
be done via `systemd-machined`'s `CreateMachine()` API. Make sure to use the
|
||||
cgroup path systemd put your process in for all operations of the container.
|
||||
@ -364,7 +364,7 @@ If you write software that wants to detect whether it is run in a container,
|
||||
please check `/proc/1/environ` and look for the `container=` environment
|
||||
variable. Do not assume the environment variable is inherited down the process
|
||||
tree. It generally is not. Hence check the environment block of PID 1, not your
|
||||
own. Note though that that file is only accessible to root. systemd hence early
|
||||
own. Note though that this file is only accessible to root. systemd hence early
|
||||
on also copies the value into `/run/systemd/container`, which is readable for
|
||||
everybody. However, that's a systemd-specific interface and other init systems
|
||||
are unlikely to do the same.
|
||||
|
@ -46,21 +46,29 @@ Interface](https://systemd.io/BOOT_LOADER_INTERFACE).
|
||||
| `69dad710-2ce4-4e3c-b16c-21a1d49abed3` | _Root Partition (32-bit ARM)_ | ditto | ditto |
|
||||
| `b921b045-1df0-41c3-af44-4c6f280d3fae` | _Root Partition (64-bit ARM/AArch64)_ | ditto | ditto |
|
||||
| `993d8d3d-f80e-4225-855a-9daf8ed7ea97` | _Root Partition (Itanium/IA-64)_ | ditto | ditto |
|
||||
| `60d5a7fe-8e7d-435c-b714-3dd8162144e1` | _Root Partition (RISC-V 32-bit)_ | ditto | ditto |
|
||||
| `72ec70a6-cf74-40e6-bd49-4bda08e8f224` | _Root Partition (RISC-V 64-bit)_ | ditto | ditto |
|
||||
| `d13c5d3b-b5d1-422a-b29f-9454fdc89d76` | _Root Verity Partition (x86)_ | A dm-verity superblock followed by hash data | On systems with matching architecture, contains dm-verity integrity hash data for the matching root partition. If this feature is used the partition UUID of the root partition should be the first 128bit of the root hash of the dm-verity hash data, and the partition UUID of this dm-verity partition should be the final 128bit of it, so that the root partition and its verity partition can be discovered easily, simply by specifying the root hash. |
|
||||
| `2c7357ed-ebd2-46d9-aec1-23d437ec2bf5` | _Root Verity Partition (x86-64)_ | ditto | ditto |
|
||||
| `7386cdf2-203c-47a9-a498-f2ecce45a2d6` | _Root Verity Partition (32-bit ARM)_ | ditto | ditto |
|
||||
| `df3300ce-d69f-4c92-978c-9bfb0f38d820` | _Root Verity Partition (64-bit ARM/AArch64)_ | ditto | ditto |
|
||||
| `86ed10d5-b607-45bb-8957-d350f23d0571` | _Root Verity Partition (Itanium/IA-64)_ | ditto | ditto |
|
||||
| `ae0253be-1167-4007-ac68-43926c14c5de` | _Root Verity Partition (RISC-V 32-bit)_ | ditto | ditto |
|
||||
| `b6ed5582-440b-4209-b8da-5ff7c419ea3d` | _Root Verity Partition (RISC-V 64-bit)_ | ditto | ditto |
|
||||
| `75250d76-8cc6-458e-bd66-bd47cc81a812` | _`/usr/` Partition (x86)_ | Any native, optionally in LUKS | Similar semantics to root partition, but just the `/usr/` partition. |
|
||||
| `8484680c-9521-48c6-9c11-b0720656f69e` | _`/usr/` Partition (x86-64)_ | ditto | ditto |
|
||||
| `7d0359a3-02b3-4f0a-865c-654403e70625` | _`/usr/` Partition (32-bit ARM)_ | ditto | ditto |
|
||||
| `b0e01050-ee5f-4390-949a-9101b17104e9` | _`/usr/` Partition (64-bit ARM/AArch64)_ | ditto | ditto |
|
||||
| `4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea` | _`/usr/` Partition (Itanium/IA-64)_ | ditto | ditto |
|
||||
| `b933fb22-5c3f-4f91-af90-e2bb0fa50702` | _`/usr/` Partition (RISC-V 32-bit)_ | ditto | ditto |
|
||||
| `beaec34b-8442-439b-a40b-984381ed097d` | _`/usr/` Partition (RISC-V 64-bit)_ | ditto | ditto |
|
||||
| `8f461b0d-14ee-4e81-9aa9-049b6fb97abd` | _`/usr/` Verity Partition (x86)_ | Any native, optionally in LUKS | Similar semantics to root Verity partition, but just for the `/usr/` partition. |
|
||||
| `77ff5f63-e7b6-4633-acf4-1565b864c0e6` | _`/usr/` Verity Partition (x86-64)_ | ditto | ditto |
|
||||
| `c215d751-7bcd-4649-be90-6627490a4c05` | _`/usr/` Verity Partition (32-bit ARM)_ | ditto | ditto |
|
||||
| `6e11a4e7-fbca-4ded-b9e9-e1a512bb664e` | _`/usr/` Verity Partition (64-bit ARM/AArch64)_ | ditto | ditto |
|
||||
| `6a491e03-3be7-4545-8e38-83320e0ea880` | _`/usr/` Verity Partition (Itanium/IA-64)_ | ditto | ditto |
|
||||
| `cb1ee4e3-8cd0-4136-a0a4-aa61a32e8730` | _`/usr/` Verity Partition (RISC-V 32-bit)_ | ditto | ditto |
|
||||
| `8f1056be-9b05-47c4-81d6-be53128e5b54` | _`/usr/` Verity Partition (RISC-V 64-bit)_ | ditto | ditto |
|
||||
| `933ac7e1-2eb4-4f13-b844-0e14e2aef915` | _Home Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/home/`. If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/home`. |
|
||||
| `3b8f8425-20e0-4f3b-907f-1a25a76f98e8` | _Server Data Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/srv/`. If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/srv`. |
|
||||
| `4d21b016-b534-45c2-a9fb-5c16e091fd2d` | _Variable Data Partition_ | Any native, optionally in LUKS | The first partition with this type UUID on the disk containing the root partition is automatically mounted to `/var/` — under the condition that its partition UUID matches the first 128 bit of `HMAC-SHA256(machine-id, 0x4d21b016b53445c2a9fb5c16e091fd2d)` (i.e. the SHA256 HMAC hash of the binary type UUID keyed by the machine ID as read from [`/etc/machine-id`](https://www.freedesktop.org/software/systemd/man/machine-id.html). This special requirement is made because `/var/` (unlike the other partition types listed here) is inherently private to a specific installation and cannot possibly be shared between multiple OS installations on the same disk, and thus should be bound to a specific instance of the OS, identified by its machine ID. If the partition is encrypted with LUKS, the device mapper file will be named `/dev/mapper/var`. |
|
||||
|
@ -517,7 +517,7 @@ _packed_ struct HashTableObject {
|
||||
```
|
||||
|
||||
The structure of both DATA_HASH_TABLE and FIELD_HASH_TABLE objects are
|
||||
identical. They implement a simple hash table, which each cell containing
|
||||
identical. They implement a simple hash table, with each cell containing
|
||||
offsets to the head and tail of the singly linked list of the DATA and FIELD
|
||||
objects, respectively. DATA's and FIELD's next_hash_offset field are used to
|
||||
chain up the objects. Empty cells have both offsets set to 0.
|
||||
@ -651,15 +651,15 @@ look up the FIELD object and follow the chain of links to all DATA it includes.
|
||||
|
||||
### Writing
|
||||
|
||||
When an entry is appended to the journal for each of its data fields the data
|
||||
hash table should be checked. If the data field does not yet exist in the file
|
||||
it should be appended and added to the data hash table. When a field data
|
||||
object is added the field hash table should be checked for the field name of
|
||||
When an entry is appended to the journal, for each of its data fields the data
|
||||
hash table should be checked. If the data field does not yet exist in the file,
|
||||
it should be appended and added to the data hash table. When a data field's data
|
||||
object is added, the field hash table should be checked for the field name of
|
||||
the data field, and a field object be added if necessary. After all data fields
|
||||
(and recursively all field names) of the new entry are appended and linked up
|
||||
in the hashtables the entry object should be appended and linked up too.
|
||||
in the hashtables, the entry object should be appended and linked up too.
|
||||
|
||||
In regular intervals a tag object should be written if sealing is enabled (see
|
||||
At regular intervals a tag object should be written if sealing is enabled (see
|
||||
above). Before the file is closed a tag should be written too, to seal it off.
|
||||
|
||||
Before writing an object, time and disk space limits should be checked and
|
||||
|
@ -9,14 +9,14 @@ layout: default
|
||||
1. Add all items to NEWS
|
||||
2. Update the contributors list in NEWS (`ninja -C build git-contrib`)
|
||||
3. Update the time and place in NEWS
|
||||
4. Update version and library numbers in `meson.build`
|
||||
4. [RC1] Update version and library numbers in `meson.build`
|
||||
5. Check dbus docs with `ninja -C build man/update-dbus-docs`
|
||||
6. Tag the release: `version=vXXX-rcY && git tag -s "${version}" -m "systemd ${version}"`
|
||||
7. Do `ninja -C build`
|
||||
8. Make sure that the version string and package string match: `build/systemctl --version`
|
||||
9. Upload the documentation: `ninja -C build doc-sync`
|
||||
10. [After final release] Close the github milestone and open a new one (https://github.com/systemd/systemd/milestones)
|
||||
10. [FINAL] Close the github milestone and open a new one (https://github.com/systemd/systemd/milestones)
|
||||
11. "Draft" a new release on github (https://github.com/systemd/systemd/releases/new), mark "This is a pre-release" if appropriate.
|
||||
12. Check that announcement to systemd-devel, with a copy&paste from NEWS, was sent. This should happen automatically.
|
||||
13. Update IRC topic (`/msg chanserv TOPIC #systemd Version NNN released`)
|
||||
14. [After final release] Also push commits to stable, create an empty -stable branch: `git push systemd-stable origin/master:master origin/master:refs/heads/${version}-stable`, and change the default branch to latest release (https://github.com/systemd/systemd-stable/settings/branches).
|
||||
14. [FINAL] Push commits to stable, create an empty -stable branch: `git push systemd-stable origin/master:master origin/master:refs/heads/${version}-stable`, and change the default branch to latest release (https://github.com/systemd/systemd-stable/settings/branches).
|
||||
|
267
docs/RESOLVED-VPNS.md
Normal file
267
docs/RESOLVED-VPNS.md
Normal file
@ -0,0 +1,267 @@
|
||||
---
|
||||
title: systemd-resolved and VPNs
|
||||
category: Networking
|
||||
layout: default
|
||||
---
|
||||
|
||||
# `systemd-resolved.service` and VPNs
|
||||
|
||||
`systemd-resolved.service` supports routing lookups for specific domains to specific
|
||||
interfaces. This is useful for hooking up VPN software with systemd-resolved
|
||||
and making sure the exact right lookups end up on the VPN and on the other
|
||||
interfaces.
|
||||
|
||||
For a verbose explanation of `systemd-resolved.service`'s domain routing logic,
|
||||
see its [man
|
||||
page](https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html). This
|
||||
document is supposed to provide examples to use the concepts for the specific
|
||||
purpose of managing VPN DNS configuration.
|
||||
|
||||
Let's first define two distinct VPN use-cases:
|
||||
|
||||
1. *Corporate* VPNs, i.e. VPNs that open access to a specific set of additional
|
||||
hosts. Only specific domains should be resolved via the VPN's DNS servers,
|
||||
and everything that is not related to the company's domain names should go
|
||||
to regular, non-VPN DNS instead.
|
||||
|
||||
2. *Privacy* VPNs, i.e. VPNs that should be used for basically all DNS traffic,
|
||||
once they are up. If this type of VPN is used, any regular, non-VPN DNS
|
||||
servers should not get any traffic anymore.
|
||||
|
||||
Then, let's briefly introduce three DNS routing concepts that software managing
|
||||
a network interface may configure.
|
||||
|
||||
1. Search domains: these are traditional DNS configuration parameters and are
|
||||
used to suffix non-qualified domain names (i.e. single-label ones), to turn
|
||||
them into fully qualified domain names. Traditionally (before
|
||||
`systemd-resolved.service`), search domain names are attached to a system's
|
||||
IP configuration as a whole, in `systemd-resolved.service` they are
|
||||
associated to individual interfaces instead, since they are typically
|
||||
acquired through some network associated concept, such as a DHCP, IPv6RA or
|
||||
PPP lease. Most importantly though: in `systemd-resolved.service` they are
|
||||
not just used to suffix single-label domain names, but also for routing
|
||||
domain name lookups: if a network interface has a search domain `foo.com`
|
||||
configured on it, then any lookups for names ending in `.foo.com` (or for
|
||||
`foo.com` itself) are preferably routed to the DNS servers configured on the
|
||||
same network interface.
|
||||
|
||||
2. Routing domains: these are very similar to search domains, but are purely
|
||||
about DNS domain name lookup routing — they are not used for qualifying
|
||||
single-label domain names. When it comes to routing assigning a routing
|
||||
domain to a network interface is identical to assigning a search domain to
|
||||
it.
|
||||
|
||||
Why the need to have both concepts, i.e. search *and* routing domains?
|
||||
Mostly because in many cases the qualifying of single-label names is not
|
||||
desirable (since security-sensitive), but needs to be supported for specific
|
||||
use-cases. Routing domains are a concept `systemd-resolved.service`
|
||||
introduced, while search domains are traditionally available and are part of
|
||||
DHCP/IPv6RA/PPP leases and thus universally supported. In many cases routing
|
||||
domains are probably the more appropriate concept, but not easily available,
|
||||
since not part of DHCP/IPv6RA/PPP.
|
||||
|
||||
Routing domains for `systemd-resolved.service` are usually presented along
|
||||
with search domains in mostly the same way, but prefixed with `~` to
|
||||
differentiate them. i.e. `~foo.com` is a configured routing domain, while
|
||||
`foo.com` would be a configured search domain.
|
||||
|
||||
One routing domain is particular interesting: `~.` — the catch-all routing
|
||||
domain. (The *dot* domain `.` is how DNS denotes the "root" domain, i.e. the
|
||||
parent domain of all domains, but itself.) When used on an interface any DNS
|
||||
traffic is preferably routed to its DNS servers. (A search domain – i.e. `.`
|
||||
instead of `~.` — would have the same effect, but given that it's mostly
|
||||
pointless to suffix an unqualified domain with `.`, we generally declare it
|
||||
as a routing domain, not a search domain).
|
||||
|
||||
Routing domains also have particular relevance when it comes to the reverse
|
||||
lookup DNS domains `.in-addr.arpa` and `.ip6.arpa`. An interface that has
|
||||
these (or sub-domains thereof) defined as routing domains, will be preferably
|
||||
used for doing reverse IP to domain name lookups. e.g. declaring
|
||||
`~168.192.in-addr.arpa` on an interface means that all lookups to find the
|
||||
domain names for IPv4 addresses 192.168.x.y are preferable routed to it.
|
||||
|
||||
3. The `default-route` boolean. This is a simple boolean value that may be set
|
||||
on an interface. If true (the default), any DNS lookups for which no
|
||||
matching routing or search domains are defined are routed to interfaces
|
||||
marked like this. If false then the DNS servers on this interface are not
|
||||
considered for routing lookups to except for the ones listed in the
|
||||
search/routing domain list. An interface that has no search/routing domain
|
||||
associated and also has this boolean off is not considered for *any*
|
||||
lookups.
|
||||
|
||||
One more thing to mention: in `systemd-resolved.service` if lookups match the
|
||||
search/routing domains of multiple interfaces at once, then they are sent to
|
||||
all of them in parallel, and the first positive reply used. If all lookups fail
|
||||
the last negative reply is used. This means the DNS zones on the relevant
|
||||
interfaces are "merged": domains existing on one but not the other will "just
|
||||
work" and vice versa.
|
||||
|
||||
And one more note: the domain routing logic implemented is a tiny bit more
|
||||
complex that what described above: if there two interfaces have search domains
|
||||
that are suffix of each other, and a name is looked up that matches both, the
|
||||
interface with the longer match will win and get the lookup routed to is DNS
|
||||
servers. Only if the match has the same length, then both will be used in
|
||||
parallel. Example: one interface has `~foo.example.com` as routing domain, and
|
||||
another one `example.com` has search domain. A lookup for
|
||||
`waldo.foo.example.com` is the exclusively routed to the first interface's DNS
|
||||
server, since it matches by three suffix labels instead of just two. The fact
|
||||
that the matching length is taken into consideration for the routing decision
|
||||
is particularly relevant if you have one interface with the `~.` routing domain
|
||||
and another one with `~corp.company.example` — both suffixes match a lookup for
|
||||
`foo.corp.company.example`, but the latter interface wins, since the match is
|
||||
for four labels, while the other is for zero labels.
|
||||
|
||||
# Putting it Together
|
||||
|
||||
Let's discuss how the three DNS routing concepts above are best used for a
|
||||
reasonably complex scenario consisting of:
|
||||
|
||||
1. One VPN interface of the *corporate* kind, maybe called `company0`. It makes
|
||||
available a bunch of servers, all in the domain `corp.company.example`.
|
||||
|
||||
2. One VPN interface of the *privacy* kind, maybe called `privacy0`. When it is
|
||||
up all DNS traffic shall preferably routed to its DNS servers.
|
||||
|
||||
3. One regular WiFi interface, maybe called `wifi0`. It has a regular DNS
|
||||
server on it.
|
||||
|
||||
Here's how to best configure this for `systemd-resolved.service`:
|
||||
|
||||
1. `company0` should get a routing domain `~corp.company.example`
|
||||
configured. (A search domain `corp.company.example` would work too, if
|
||||
qualifying of single-label names is desired or the VPN lease information
|
||||
does not provide for the concept of routing domains, but does support search
|
||||
domains.) This interface should also set `default-route` to false, to ensure
|
||||
that really only the DNS lookups for the company's servers are routed there
|
||||
and nothing else. Finally, it might make sense to also configure a routing
|
||||
domain `~2.0.192.in-addr.arpa` on the interface, ensuring that all IPv4
|
||||
addresses from the 192.0.2.x range are preferably resolved via the DNS
|
||||
server on this interface (assuming that that's the IPv4 address range the
|
||||
company uses internally).
|
||||
|
||||
2. `privacy0` should get a routing domain `~.` configured. The setting of
|
||||
`default-route` for this interface is then irrelevant. This means: once the
|
||||
interface is up, all DNS traffic is preferably routed there.
|
||||
|
||||
3. `wifi0` should not get any special settings, except possibly whatever the
|
||||
local WiFi router considers suitable as search domain, for example
|
||||
`fritz.box`. The default `true` setting for `default-route` is good too.
|
||||
|
||||
With this configuration if only `wifi0` is up, all DNS traffic goes to its DNS
|
||||
server, since there are no other interfaces with better matching DNS
|
||||
configuration. If `privacy0` is then upped, all DNS traffic will exclusively go
|
||||
to this interface now — with the exception of names below the `fritz.box`
|
||||
domain, which will continue to go directly to `wifi0`, as the search domain
|
||||
there says so. Now, if `company0` is also upped, it will receive DNS traffic
|
||||
for the company's internal domain and internal IP subnet range, but nothing
|
||||
else. If `privacy0` is then downed again, `wifi0` will get the regular DNS
|
||||
traffic again, and `company0` will still get the company's internal domain and
|
||||
IP subnet traffic and nothing else. Everything hence works as intended.
|
||||
|
||||
# How to Implement this in Your VPN Software
|
||||
|
||||
Most likely you want to expose a boolean in some way that declares whether a
|
||||
specific VPN is of the *corporate* or the *privacy* kind:
|
||||
|
||||
1. If managing a *corporate* VPN, you configure any search domains the user or
|
||||
the VPN contact point provided. And you set `default-route` to false. If you
|
||||
have IP subnet information for the VPN, it might make sense to insert
|
||||
`~….in-addr.arpa` and `~….ip6.arpa` reverse lookup routing domains for it.
|
||||
|
||||
2. If managing a *privacy* VPN, you include `~.` in the routing domains, the
|
||||
value for `default-route` is actually irrelevant, but I'd set it to true. No
|
||||
need to configure any reverse lookup routing domains for it.
|
||||
|
||||
(If you also manage regular WiFi/Ethernet devices, just configure them as
|
||||
traditional, i.e. with any search domains as acquired, do not set `~.` though,
|
||||
and do not disable `default-route`.)
|
||||
|
||||
# The APIs
|
||||
|
||||
Now we determined how we want to configure things, but how do you actually get
|
||||
the configuration to `systemd-resolved.service`? There are three relevant
|
||||
interfaces:
|
||||
|
||||
1. Ideally, you use D-Bus and talk to [`systemd-resolved.service`'s D-Bus
|
||||
API](https://www.freedesktop.org/software/systemd/man/org.freedesktop.resolve1.html)
|
||||
directly. Use `SetLinkDomains()` to set the per-interface search and routing
|
||||
domains on the interfaces you manage, and `SetLinkDefaultRoute()` to manage
|
||||
the `default-route` boolean, all on the `org.freedesktop.resolve1.Manager`
|
||||
interface of the `/org/freedesktop/resolve1` object.
|
||||
|
||||
2. If that's not in the cards, you may shell out to
|
||||
[`resolvectl`](https://www.freedesktop.org/software/systemd/man/resolvectl.html),
|
||||
which is a thin wrapper around the D-Bus interface mentioned above. Use
|
||||
`resolvectl domain <iface> …` to set the search/routing domains and
|
||||
`resolvectl default-route <iface> …` to set the `default-route` boolean.
|
||||
|
||||
Example use from a shell callout of your VPN software for a *corporate* VPN:
|
||||
|
||||
resolvectl domain corporate0 '~corp-company.example' '~2.0.192.in-addr.arpa'
|
||||
resolvectl default-route corporate0 false
|
||||
resolvectl dns corporate0 192.0.2.1
|
||||
|
||||
Example use from a shell callout of your VPN software for a *privacy* VPN:
|
||||
|
||||
resolvectl domain privacy0 '~.'
|
||||
resolvectl default-route privacy0 true
|
||||
resolvectl dns privacy0 8.8.8.8
|
||||
|
||||
3. If you don't want to use any `systemd-resolved` commands, you may use the
|
||||
`resolvconf` wrapper we provide. `resolvectl` is actually a multi-call
|
||||
binary and may be symlinked to `resolvconf`, and when invoked like that
|
||||
behaves in a way that is largely compatible with FreeBSD's and
|
||||
Ubuntu's/Debian's
|
||||
[`resolvconf(8)`](https://manpages.ubuntu.com/manpages/trusty/man8/resolvconf.8.html)
|
||||
tool. When the `-x` switch is specified, the `~.` routing domain is
|
||||
automatically appended to the domain list configured, as appropriate for a
|
||||
*privacy* VPN. Note that the `resolvconf` interface only covers *privacy*
|
||||
VPNs and regular network interfaces (such as WiFi or Ethernet) well. The
|
||||
*corporate* kind of VPN is not well covered, since the interface cannot
|
||||
propagate the `default-route` boolean, nor can be used to configure the
|
||||
`~….in-addr.arpa` or `~.ip6.arpa` routing domains.
|
||||
|
||||
# Ordering
|
||||
|
||||
When configuring per-interface DNS configuration settings it is wise to
|
||||
configure everything *before* actually upping the interface. Once the interface
|
||||
is up `systemd-resolved.service` might start using it, and hence it's important
|
||||
to have everything configured properly (this is particularly relevant when
|
||||
LLMNR or MulticastDNS is enabled, since that works without any explicitly
|
||||
configured DNS configuration). It is also wise to configure search/routing
|
||||
domains and the `default-route` boolean *before* configuring the DNS servers,
|
||||
as the former without the latter has no effect, but the latter without the
|
||||
former will result in DNS traffic possibly being generated, in a non-desirable
|
||||
way given that the routing information is not set yet.
|
||||
|
||||
# Downgrading Search Domains to Routing Domains
|
||||
|
||||
Many VPN implementations provide a way how VPN servers can inform VPN clients
|
||||
about search domains to use. In some cases it might make sense to install those
|
||||
as routing domains instead of search domains. Unqualified domain names usually
|
||||
imply a context of locality: the same unqualified name typically is expected to
|
||||
resolve to one system in one local network, and to another one in a different
|
||||
network. Search domains thus generally come with security implications: they
|
||||
might cause that unqualified domains are resolved in a different (possibly
|
||||
remote) context, contradicting user expectations. Thus it might be wise to
|
||||
downgrade *search domains* provided by VPN servers to *routing domains*, so
|
||||
that local unqualified name resolution remains untouched and strictly maintains
|
||||
its local focus — in particular in the aforementioned less trusted *corporate*
|
||||
VPN scenario.
|
||||
|
||||
To illustrate this further, here's an example for an attack scenario using
|
||||
search domains: a user assumes the printer system they daily contact under the
|
||||
unqualified name "printer" is the network printer in their basement (with the
|
||||
fully qualified domain name "printer.home"). Sometimes the user joins the
|
||||
corporate VPN of their employer, which comes with a search domain
|
||||
"foocorp.example", so that the user's confidential documents (maybe a job
|
||||
application to a competing company) might end up being printed on
|
||||
"printer.foocorp.example" instead of "printer.home". If the local VPN software
|
||||
had downgraded the VPN's search domain to a routing domain "~foocorp.example",
|
||||
this mismapping would not have happened.
|
||||
|
||||
When connecting to untrusted WiFi networks it might be wise to go one step
|
||||
further even: suppress installation of search/routing domains by the network
|
||||
entirely, to ensure that the local DNS information is only used for name
|
||||
resolution of qualified names and only when no better DNS configuration is
|
||||
available.
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
--- 20-acpi-vendor.hwdb.base 2020-11-10 14:13:39.257693009 +0100
|
||||
+++ 20-acpi-vendor.hwdb 2020-11-10 14:13:39.264693047 +0100
|
||||
--- 20-acpi-vendor.hwdb.base 2020-11-26 13:49:35.243482590 +0100
|
||||
+++ 20-acpi-vendor.hwdb 2020-11-26 13:49:35.260482675 +0100
|
||||
@@ -3,6 +3,8 @@
|
||||
# Data imported from:
|
||||
# https://uefi.org/uefi-pnp-export
|
||||
|
@ -380,6 +380,12 @@ pci:v*d*sv*sd*bc08sc06*
|
||||
pci:v*d*sv*sd*bc08sc80*
|
||||
ID_PCI_SUBCLASS_FROM_DATABASE=System peripheral
|
||||
|
||||
pci:v*d*sv*sd*bc08sc99*
|
||||
ID_PCI_SUBCLASS_FROM_DATABASE=Timing Card
|
||||
|
||||
pci:v*d*sv*sd*bc08sc99i01*
|
||||
ID_PCI_INTERFACE_FROM_DATABASE=TAP Timing Card
|
||||
|
||||
pci:v*d*sv*sd*bc09*
|
||||
ID_PCI_CLASS_FROM_DATABASE=Input device controller
|
||||
|
||||
|
@ -122,6 +122,9 @@ pci:v0000018Ad00000106*
|
||||
pci:v000001DE*
|
||||
ID_VENDOR_FROM_DATABASE=Oxide Computer Company
|
||||
|
||||
pci:v00000200*
|
||||
ID_VENDOR_FROM_DATABASE=Dell (wrong ID)
|
||||
|
||||
pci:v0000021B*
|
||||
ID_VENDOR_FROM_DATABASE=Compaq Computer Corporation
|
||||
|
||||
@ -7979,6 +7982,9 @@ pci:v00001002d00006820sv000017AAsd00003801*
|
||||
pci:v00001002d00006820sv000017AAsd00003824*
|
||||
ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon R9 M375)
|
||||
|
||||
pci:v00001002d00006820sv00001DA2sd0000E26A*
|
||||
ID_MODEL_FROM_DATABASE=Venus XTX [Radeon HD 8890M / R9 M275X/M375X] (Radeon R7 250)
|
||||
|
||||
pci:v00001002d00006821*
|
||||
ID_MODEL_FROM_DATABASE=Venus XT [Radeon HD 8870M / R9 M270X/M370X]
|
||||
|
||||
@ -10025,6 +10031,9 @@ pci:v00001002d00006939sv0000148Csd00009380*
|
||||
pci:v00001002d00006939sv0000174Bsd0000E308*
|
||||
ID_MODEL_FROM_DATABASE=Tonga PRO [Radeon R9 285/380] (Radeon R9 380 Nitro 4G D5)
|
||||
|
||||
pci:v00001002d00006939sv0000174Bsd0000E315*
|
||||
ID_MODEL_FROM_DATABASE=Tonga PRO [Radeon R9 285/380] (Radeon R9 285)
|
||||
|
||||
pci:v00001002d0000693B*
|
||||
ID_MODEL_FROM_DATABASE=Tonga PRO GL [FirePro W7100 / Barco MXRT-7600]
|
||||
|
||||
@ -10545,14 +10554,17 @@ pci:v00001002d00007360*
|
||||
ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M]
|
||||
|
||||
pci:v00001002d000073BF*
|
||||
ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6900 Series]
|
||||
ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
|
||||
|
||||
pci:v00001002d000073C3*
|
||||
ID_MODEL_FROM_DATABASE=Navi 23
|
||||
ID_MODEL_FROM_DATABASE=Navi 22
|
||||
|
||||
pci:v00001002d000073DF*
|
||||
ID_MODEL_FROM_DATABASE=Navi 22
|
||||
|
||||
pci:v00001002d000073FF*
|
||||
ID_MODEL_FROM_DATABASE=Navi 23
|
||||
|
||||
pci:v00001002d00007833*
|
||||
ID_MODEL_FROM_DATABASE=RS350 Host Bridge
|
||||
|
||||
@ -28023,7 +28035,7 @@ pci:v000010DEd000000F4*
|
||||
ID_MODEL_FROM_DATABASE=NV43 [GeForce 6600 LE]
|
||||
|
||||
pci:v000010DEd000000F5*
|
||||
ID_MODEL_FROM_DATABASE=G71 [GeForce 7800 GS AGP]
|
||||
ID_MODEL_FROM_DATABASE=G70/G71 [GeForce 7800 GS AGP]
|
||||
|
||||
pci:v000010DEd000000F6*
|
||||
ID_MODEL_FROM_DATABASE=NV43 [GeForce 6800 GS/XT]
|
||||
@ -34682,6 +34694,9 @@ pci:v000010DEd0000128B*
|
||||
pci:v000010DEd0000128Bsv00001043sd000085F7*
|
||||
ID_MODEL_FROM_DATABASE=GK208B [GeForce GT 710] (GT710-SL-1GD5)
|
||||
|
||||
pci:v000010DEd0000128Bsv00001043sd00008770*
|
||||
ID_MODEL_FROM_DATABASE=GK208B [GeForce GT 710] (GT710-4H-SL-2GD5)
|
||||
|
||||
pci:v000010DEd0000128C*
|
||||
ID_MODEL_FROM_DATABASE=GK208B
|
||||
|
||||
@ -35859,13 +35874,13 @@ pci:v000010DEd00002204*
|
||||
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090]
|
||||
|
||||
pci:v000010DEd00002206*
|
||||
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 10GB / 20GB]
|
||||
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080]
|
||||
|
||||
pci:v000010DEd00002206sv000010DEsd0000146D*
|
||||
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 10GB / 20GB] (GA102 [GeForce RTX 3080 20GB])
|
||||
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080] (GA102 [GeForce RTX 3080 20GB])
|
||||
|
||||
pci:v000010DEd00002206sv00001462sd00003892*
|
||||
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 10GB / 20GB] (RTX 3080 10GB GAMING X TRIO)
|
||||
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080] (RTX 3080 10GB GAMING X TRIO)
|
||||
|
||||
pci:v000010DEd0000222B*
|
||||
ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090 Engineering Sample]
|
||||
@ -35883,19 +35898,19 @@ pci:v000010DEd00002482*
|
||||
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Ti]
|
||||
|
||||
pci:v000010DEd00002484*
|
||||
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 8GB / 16GB]
|
||||
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070]
|
||||
|
||||
pci:v000010DEd00002484sv000010DEsd0000146B*
|
||||
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 8GB / 16GB] (GA104 [GeForce RTX 3070])
|
||||
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070]
|
||||
|
||||
pci:v000010DEd00002484sv000010DEsd000014AE*
|
||||
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 8GB / 16GB] (GA104 [GeForce RTX 3070 16GB])
|
||||
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070] (GA104 [GeForce RTX 3070 16GB])
|
||||
|
||||
pci:v000010DEd00002486*
|
||||
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060 Ti]
|
||||
|
||||
pci:v000010DEd0000249C*
|
||||
ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q]
|
||||
ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q 8GB/16GB]
|
||||
|
||||
pci:v000010DEd0000249D*
|
||||
ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q]
|
||||
@ -35913,7 +35928,10 @@ pci:v000010DEd000024BF*
|
||||
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Engineering Sample]
|
||||
|
||||
pci:v000010DEd000024DC*
|
||||
ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 16GB Engineering Sample]
|
||||
ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile 16GB]
|
||||
|
||||
pci:v000010DEd000024DD*
|
||||
ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q]
|
||||
|
||||
pci:v000010DEd0000252F*
|
||||
ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060 Engineering Sample]
|
||||
@ -36608,6 +36626,9 @@ pci:v000010ECd00005289*
|
||||
pci:v000010ECd00005289sv00001043sd00001457*
|
||||
ID_MODEL_FROM_DATABASE=RTL8411 PCI Express Card Reader (K55A Laptop)
|
||||
|
||||
pci:v000010ECd00005762*
|
||||
ID_MODEL_FROM_DATABASE=RTS5763DL NVMe SSD Controller
|
||||
|
||||
pci:v000010ECd00008029*
|
||||
ID_MODEL_FROM_DATABASE=RTL-8029(AS)
|
||||
|
||||
@ -57917,6 +57938,9 @@ pci:v000014F1d00008800sv00000070sd00007801*
|
||||
pci:v000014F1d00008800sv00000070sd00009001*
|
||||
ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (Nova-T DVB-T)
|
||||
|
||||
pci:v000014F1d00008800sv00000070sd00009002*
|
||||
ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (Nova-T DVB-T Model 909)
|
||||
|
||||
pci:v000014F1d00008800sv00000070sd00009200*
|
||||
ID_MODEL_FROM_DATABASE=CX23880/1/2/3 PCI Video and Audio Decoder (Nova-SE2 DVB-S)
|
||||
|
||||
@ -60011,6 +60035,12 @@ pci:v000015B7d00005002*
|
||||
pci:v000015B7d00005003*
|
||||
ID_MODEL_FROM_DATABASE=WD Black 2018 / PC SN520 NVMe SSD
|
||||
|
||||
pci:v000015B7d00005004*
|
||||
ID_MODEL_FROM_DATABASE=PC SN520 NVMe SSD
|
||||
|
||||
pci:v000015B7d00005005*
|
||||
ID_MODEL_FROM_DATABASE=PC SN520 NVMe SSD
|
||||
|
||||
pci:v000015B7d00005006*
|
||||
ID_MODEL_FROM_DATABASE=WD Black 2019/PC SN750 NVMe SSD
|
||||
|
||||
@ -60020,6 +60050,9 @@ pci:v000015B7d00005009*
|
||||
pci:v000015B7d00005009sv000015B7sd00005009*
|
||||
ID_MODEL_FROM_DATABASE=WD Blue SN550 NVMe SSD
|
||||
|
||||
pci:v000015B7d0000500D*
|
||||
ID_MODEL_FROM_DATABASE=WD Ultrastar DC SN340 NVMe SSD
|
||||
|
||||
pci:v000015B8*
|
||||
ID_VENDOR_FROM_DATABASE=ADDI-DATA GmbH
|
||||
|
||||
@ -64328,6 +64361,12 @@ pci:v000018F4d000001A5*
|
||||
pci:v000018F4d000001C5*
|
||||
ID_MODEL_FROM_DATABASE=NT200A02 Network Adapter
|
||||
|
||||
pci:v000018F4d000001D5*
|
||||
ID_MODEL_FROM_DATABASE=NT50B01 Network Adapter
|
||||
|
||||
pci:v000018F4d000001E5*
|
||||
ID_MODEL_FROM_DATABASE=NT100A01 Network Adapter
|
||||
|
||||
pci:v000018F6*
|
||||
ID_VENDOR_FROM_DATABASE=NextIO
|
||||
|
||||
@ -65459,6 +65498,9 @@ pci:v0000197Bd00000260*
|
||||
pci:v0000197Bd00000368*
|
||||
ID_MODEL_FROM_DATABASE=JMB368 IDE controller
|
||||
|
||||
pci:v0000197Bd00000585*
|
||||
ID_MODEL_FROM_DATABASE=JMB58x AHCI SATA controller
|
||||
|
||||
pci:v0000197Bd00002360*
|
||||
ID_MODEL_FROM_DATABASE=JMB360 AHCI Controller
|
||||
|
||||
@ -65877,7 +65919,7 @@ pci:v000019E5d00001710*
|
||||
ID_MODEL_FROM_DATABASE=iBMA Virtual Network Adapter
|
||||
|
||||
pci:v000019E5d00001711*
|
||||
ID_MODEL_FROM_DATABASE=Hi1710 [iBMC Intelligent Management system chip w/VGA support]
|
||||
ID_MODEL_FROM_DATABASE=Hi171x Series [iBMC Intelligent Management system chip w/VGA support]
|
||||
|
||||
pci:v000019E5d00001822*
|
||||
ID_MODEL_FROM_DATABASE=Hi1822 Family (4*25GE)
|
||||
@ -66176,8 +66218,8 @@ pci:v00001A4Ad00001000*
|
||||
pci:v00001A4Ad00001010*
|
||||
ID_MODEL_FROM_DATABASE=AMC EVR - Stockholm Timing Board
|
||||
|
||||
pci:v00001A4Ad00001020*
|
||||
ID_MODEL_FROM_DATABASE=Cluster On Board (COB) Ethernet Switch
|
||||
pci:v00001A4Ad00001030*
|
||||
ID_MODEL_FROM_DATABASE=PGPCard - Gen3 GIGe Interface
|
||||
|
||||
pci:v00001A4Ad00002000*
|
||||
ID_MODEL_FROM_DATABASE=PGPCard - 4 Lane
|
||||
@ -66188,12 +66230,24 @@ pci:v00001A4Ad00002001*
|
||||
pci:v00001A4Ad00002010*
|
||||
ID_MODEL_FROM_DATABASE=PCI-Express EVR
|
||||
|
||||
pci:v00001A4Ad00002011*
|
||||
ID_MODEL_FROM_DATABASE=PCI-Express EVR - TPR Version
|
||||
|
||||
pci:v00001A4Ad00002020*
|
||||
ID_MODEL_FROM_DATABASE=PGP-GEN3 PCIe
|
||||
ID_MODEL_FROM_DATABASE=PGP-GEN3 PCIe - 8 Lane Plus EVR
|
||||
|
||||
pci:v00001A4Ad00002030*
|
||||
ID_MODEL_FROM_DATABASE=AXI Stream DAQ PCIe card
|
||||
|
||||
pci:v00001A4Ad00002040*
|
||||
ID_MODEL_FROM_DATABASE=EXO PCIe TEM
|
||||
|
||||
pci:v00001A4Ad00003000*
|
||||
ID_MODEL_FROM_DATABASE=COB DTM V1
|
||||
|
||||
pci:v00001A4Ad00003001*
|
||||
ID_MODEL_FROM_DATABASE=COB DTM V2
|
||||
|
||||
pci:v00001A51*
|
||||
ID_VENDOR_FROM_DATABASE=Hectronic AB
|
||||
|
||||
@ -66692,6 +66746,9 @@ pci:v00001B1A*
|
||||
pci:v00001B1Ad00000E70*
|
||||
ID_MODEL_FROM_DATABASE=GRAPE
|
||||
|
||||
pci:v00001B1C*
|
||||
ID_VENDOR_FROM_DATABASE=Corsair
|
||||
|
||||
pci:v00001B21*
|
||||
ID_VENDOR_FROM_DATABASE=ASMedia Technology Inc.
|
||||
|
||||
@ -66704,6 +66761,9 @@ pci:v00001B21d00000612*
|
||||
pci:v00001B21d00000612sv00001849sd00000612*
|
||||
ID_MODEL_FROM_DATABASE=ASM1062 Serial ATA Controller (Motherboard)
|
||||
|
||||
pci:v00001B21d00001040*
|
||||
ID_MODEL_FROM_DATABASE=ASM1040 XHCI Controller
|
||||
|
||||
pci:v00001B21d00001042*
|
||||
ID_MODEL_FROM_DATABASE=ASM1042 SuperSpeed USB Host Controller
|
||||
|
||||
@ -66935,6 +66995,12 @@ pci:v00001B4Bd00000640*
|
||||
pci:v00001B4Bd00002241*
|
||||
ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller
|
||||
|
||||
pci:v00001B4Bd00002241sv00001028sd00002112*
|
||||
ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (BOSS-N1 Monolithic)
|
||||
|
||||
pci:v00001B4Bd00002241sv00001028sd00002113*
|
||||
ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (BOSS-N1 Modular)
|
||||
|
||||
pci:v00001B4Bd00002241sv00001D49sd00000306*
|
||||
ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit)
|
||||
|
||||
@ -67139,6 +67205,36 @@ pci:v00001B94d0000E400*
|
||||
pci:v00001B96*
|
||||
ID_VENDOR_FROM_DATABASE=Western Digital
|
||||
|
||||
pci:v00001B96d00002200*
|
||||
ID_MODEL_FROM_DATABASE=Ultrastar DC SN630 NVMe SSD
|
||||
|
||||
pci:v00001B96d00002201*
|
||||
ID_MODEL_FROM_DATABASE=Ultrastar DC SN630 NVMe SSD
|
||||
|
||||
pci:v00001B96d00002300*
|
||||
ID_MODEL_FROM_DATABASE=Ultrastar DC SN840 NVMe SSD
|
||||
|
||||
pci:v00001B96d00002400*
|
||||
ID_MODEL_FROM_DATABASE=Ultrastar DC SN640 NVMe SSD
|
||||
|
||||
pci:v00001B96d00002401*
|
||||
ID_MODEL_FROM_DATABASE=Ultrastar DC SN640 NVMe SSD
|
||||
|
||||
pci:v00001B96d00002402*
|
||||
ID_MODEL_FROM_DATABASE=Ultrastar DC SN640 NVMe SSD
|
||||
|
||||
pci:v00001B96d00002404*
|
||||
ID_MODEL_FROM_DATABASE=Ultrastar DC SN640 NVMe SSD
|
||||
|
||||
pci:v00001B96d00002500*
|
||||
ID_MODEL_FROM_DATABASE=Ultrastar DC SN840 NVMe SSD
|
||||
|
||||
pci:v00001B96d00003714*
|
||||
ID_MODEL_FROM_DATABASE=PC SN730 NVMe SSD
|
||||
|
||||
pci:v00001B96d00003734*
|
||||
ID_MODEL_FROM_DATABASE=PC SN730 NVMe SSD
|
||||
|
||||
pci:v00001B9A*
|
||||
ID_VENDOR_FROM_DATABASE=XAVi Technologies Corp.
|
||||
|
||||
@ -67760,6 +67856,9 @@ pci:v00001CD2d00000305*
|
||||
pci:v00001CD2d00000306*
|
||||
ID_MODEL_FROM_DATABASE=Simulyzer-RT CompactPCI Serial CAN-2 card (CAN-FD)
|
||||
|
||||
pci:v00001CD2d00000307*
|
||||
ID_MODEL_FROM_DATABASE=Simulyzer-RT CompactPCI Serial DIO-2 card [Xilinx Zynq UltraScale+]
|
||||
|
||||
pci:v00001CD7*
|
||||
ID_VENDOR_FROM_DATABASE=Nanjing Magewell Electronics Co., Ltd.
|
||||
|
||||
@ -68279,6 +68378,9 @@ pci:v00001D78d00001512sv00001D78sd00003107*
|
||||
pci:v00001D7C*
|
||||
ID_VENDOR_FROM_DATABASE=Aerotech, Inc.
|
||||
|
||||
pci:v00001D7Cd00000001*
|
||||
ID_MODEL_FROM_DATABASE=HyperWire Adapter
|
||||
|
||||
pci:v00001D82*
|
||||
ID_VENDOR_FROM_DATABASE=NETINT Technologies Inc.
|
||||
|
||||
@ -68423,6 +68525,9 @@ pci:v00001DA1*
|
||||
pci:v00001DA2*
|
||||
ID_VENDOR_FROM_DATABASE=Sapphire Technology Limited
|
||||
|
||||
pci:v00001DA2d0000E26A*
|
||||
ID_MODEL_FROM_DATABASE=Radeon R7 250
|
||||
|
||||
pci:v00001DA3*
|
||||
ID_VENDOR_FROM_DATABASE=Habana Labs Ltd.
|
||||
|
||||
@ -68831,6 +68936,12 @@ pci:v00001E0Fd00000007sv00001028sd00002110*
|
||||
pci:v00001E0Fd00000007sv00001E0Fsd00000001*
|
||||
ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6 (Generic NVMe CM6 RI 3.84TB)
|
||||
|
||||
pci:v00001E0Fd00000009*
|
||||
ID_MODEL_FROM_DATABASE=NVMe SSD
|
||||
|
||||
pci:v00001E0Fd00000009sv00001E0Fsd00000001*
|
||||
ID_MODEL_FROM_DATABASE=NVMe SSD (Toshiba RC500 NVMe SSD 500GB)
|
||||
|
||||
pci:v00001E17*
|
||||
ID_VENDOR_FROM_DATABASE=Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
|
||||
|
||||
@ -68867,12 +68978,99 @@ pci:v00001E36*
|
||||
pci:v00001E36d00000001*
|
||||
ID_MODEL_FROM_DATABASE=T10 [CloudBlazer]
|
||||
|
||||
pci:v00001E36d00000002*
|
||||
ID_MODEL_FROM_DATABASE=T11 [CloudBlazer]
|
||||
|
||||
pci:v00001E36d00000003*
|
||||
ID_MODEL_FROM_DATABASE=T10s [CloudBlazer]
|
||||
|
||||
pci:v00001E36d00008011*
|
||||
ID_MODEL_FROM_DATABASE=I10 [CloudBlazer]
|
||||
|
||||
pci:v00001E38*
|
||||
ID_VENDOR_FROM_DATABASE=Blaize, Inc
|
||||
|
||||
pci:v00001E38d00000102*
|
||||
ID_MODEL_FROM_DATABASE=Xplorer X1600
|
||||
|
||||
pci:v00001E3B*
|
||||
ID_VENDOR_FROM_DATABASE=Shenzhen DAPU Microelectronics Co., Ltd
|
||||
|
||||
pci:v00001E3Bd00001098*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000001*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H2100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000002*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.96TB (H2200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000004*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H2100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000005*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.92TB (H2200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000009*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.8TB (H3100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd0000000A*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 0.96TB (H3200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd0000000C*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.6TB (H3100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd0000000D*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 1.92TB (H3200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000014*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 3.2TB (H3100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000015*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 3.84TB (H3200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000021*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 6.4TB (H3100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000022*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD U.2 7.68TB (H3200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000061*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H2100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000062*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.96TB (H2200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000064*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H2100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000065*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.92TB (H2200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd0000006C*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.8TB (H3100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd0000006D*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 0.96TB (H3200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd0000006F*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.6TB (H3100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000070*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 1.92TB (H3200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd0000007C*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 3.2TB (H3100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd0000007D*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 3.84TB (H3200))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd0000007F*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 6.4TB (H3100))
|
||||
|
||||
pci:v00001E3Bd00001098sv00001E3Bsd00000080*
|
||||
ID_MODEL_FROM_DATABASE=Haishen NVMe SSD (Enterprise NVMe SSD HHHL 7.68TB (H3200))
|
||||
|
||||
pci:v00001E3D*
|
||||
ID_VENDOR_FROM_DATABASE=Burlywood, Inc
|
||||
|
||||
@ -68948,6 +69146,9 @@ pci:v00001E94*
|
||||
pci:v00001E95*
|
||||
ID_VENDOR_FROM_DATABASE=Solid State Storage Technology Corporation
|
||||
|
||||
pci:v00001EAB*
|
||||
ID_VENDOR_FROM_DATABASE=Hefei DATANG Storage Technology Co.,LTD.
|
||||
|
||||
pci:v00001EAE*
|
||||
ID_VENDOR_FROM_DATABASE=XFX Limited
|
||||
|
||||
@ -69195,7 +69396,7 @@ pci:v00002646*
|
||||
ID_VENDOR_FROM_DATABASE=Kingston Technology Company, Inc.
|
||||
|
||||
pci:v00002646d00002263*
|
||||
ID_MODEL_FROM_DATABASE=A2000, M.2, 500GB
|
||||
ID_MODEL_FROM_DATABASE=A2000 NVMe SSD
|
||||
|
||||
pci:v0000270B*
|
||||
ID_VENDOR_FROM_DATABASE=Xantel Corporation
|
||||
@ -73016,6 +73217,12 @@ pci:v00008086d00000A55sv00001028sd00001FE8*
|
||||
pci:v00008086d00000A55sv00001028sd00001FE9*
|
||||
ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (Express Flash NVMe 4.0TB HHHL AIC (P4600))
|
||||
|
||||
pci:v00008086d00000B26*
|
||||
ID_MODEL_FROM_DATABASE=Thunderbolt 4 Bridge [Goshen Ridge 2020]
|
||||
|
||||
pci:v00008086d00000B27*
|
||||
ID_MODEL_FROM_DATABASE=Thunderbolt 4 USB Controller [Goshen Ridge 2020]
|
||||
|
||||
pci:v00008086d00000B60*
|
||||
ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller]
|
||||
|
||||
@ -76127,6 +76334,18 @@ pci:v00008086d00001240*
|
||||
pci:v00008086d0000124B*
|
||||
ID_MODEL_FROM_DATABASE=82380FB (MPCI2) Mobile Docking Controller
|
||||
|
||||
pci:v00008086d0000124C*
|
||||
ID_MODEL_FROM_DATABASE=Ethernet Connection E823-L for backplane
|
||||
|
||||
pci:v00008086d0000124D*
|
||||
ID_MODEL_FROM_DATABASE=Ethernet Connection E823-L for SFP
|
||||
|
||||
pci:v00008086d0000124E*
|
||||
ID_MODEL_FROM_DATABASE=Ethernet Connection E823-L/X557-AT 10GBASE-T
|
||||
|
||||
pci:v00008086d0000124F*
|
||||
ID_MODEL_FROM_DATABASE=Ethernet Connection E823-L 1GbE
|
||||
|
||||
pci:v00008086d00001250*
|
||||
ID_MODEL_FROM_DATABASE=430HX - 82439HX TXC [Triton II]
|
||||
|
||||
@ -76280,6 +76499,9 @@ pci:v00008086d0000151C*
|
||||
pci:v00008086d0000151Csv0000108Esd00007B13*
|
||||
ID_MODEL_FROM_DATABASE=82599 10 Gigabit TN Network Connection (Dual 10GBASE-T LP)
|
||||
|
||||
pci:v00008086d0000151D*
|
||||
ID_MODEL_FROM_DATABASE=Ethernet Connection E823-L for QSFP
|
||||
|
||||
pci:v00008086d00001520*
|
||||
ID_MODEL_FROM_DATABASE=I350 Ethernet Controller Virtual Function
|
||||
|
||||
@ -79466,6 +79688,9 @@ pci:v00008086d00001F27*
|
||||
pci:v00008086d00001F2C*
|
||||
ID_MODEL_FROM_DATABASE=Atom processor C2000 USB Enhanced Host Controller
|
||||
|
||||
pci:v00008086d00001F2Csv00000200sd00001028*
|
||||
ID_MODEL_FROM_DATABASE=Atom processor C2000 USB Enhanced Host Controller (Atom C2338 on Dell 0K8Y0N motherboard)
|
||||
|
||||
pci:v00008086d00001F2E*
|
||||
ID_MODEL_FROM_DATABASE=Atom processor C2000 RAID SATA2 Controller
|
||||
|
||||
@ -81977,6 +82202,15 @@ pci:v00008086d00002520*
|
||||
pci:v00008086d00002521*
|
||||
ID_MODEL_FROM_DATABASE=82804AA MRH-S Memory Repeater Hub for SDRAM
|
||||
|
||||
pci:v00008086d00002522*
|
||||
ID_MODEL_FROM_DATABASE=NVMe Optane Memory Series
|
||||
|
||||
pci:v00008086d00002522sv00008086sd00003806*
|
||||
ID_MODEL_FROM_DATABASE=NVMe Optane Memory Series (Optane Memory 16GB)
|
||||
|
||||
pci:v00008086d00002522sv00008086sd00003810*
|
||||
ID_MODEL_FROM_DATABASE=NVMe Optane Memory Series (Optane Memory M10 16GB)
|
||||
|
||||
pci:v00008086d00002526*
|
||||
ID_MODEL_FROM_DATABASE=Wireless-AC 9260
|
||||
|
||||
@ -92663,12 +92897,21 @@ pci:v00008086d00009A13*
|
||||
pci:v00008086d00009A14*
|
||||
ID_MODEL_FROM_DATABASE=11th Gen Core Processor Host Bridge/DRAM Registers
|
||||
|
||||
pci:v00008086d00009A17*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt USB Controller
|
||||
|
||||
pci:v00008086d00009A1B*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #0
|
||||
|
||||
pci:v00008086d00009A1D*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #1
|
||||
|
||||
pci:v00008086d00009A1F*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt NHI #0
|
||||
|
||||
pci:v00008086d00009A21*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt NHI #1
|
||||
|
||||
pci:v00008086d00009A23*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #0
|
||||
|
||||
@ -92681,11 +92924,23 @@ pci:v00008086d00009A27*
|
||||
pci:v00008086d00009A29*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #3
|
||||
|
||||
pci:v00008086d00009A2B*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #0
|
||||
|
||||
pci:v00008086d00009A2D*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #1
|
||||
|
||||
pci:v00008086d00009A2F*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #2
|
||||
|
||||
pci:v00008086d00009A31*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #3
|
||||
|
||||
pci:v00008086d00009A33*
|
||||
ID_MODEL_FROM_DATABASE=Tiger Lake Trace Hub
|
||||
|
||||
pci:v00008086d00009A49*
|
||||
ID_MODEL_FROM_DATABASE=UHD Graphics
|
||||
ID_MODEL_FROM_DATABASE=Iris Xe Graphics
|
||||
|
||||
pci:v00008086d00009B41*
|
||||
ID_MODEL_FROM_DATABASE=UHD Graphics
|
||||
|
@ -403,10 +403,10 @@ evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPad??40?:*
|
||||
# Lenovo X240 series
|
||||
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX240:*
|
||||
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX240?:*
|
||||
EVDEV_ABS_00=1232:5711:51
|
||||
EVDEV_ABS_01=1159:4700:53
|
||||
EVDEV_ABS_35=1232:5711:51
|
||||
EVDEV_ABS_36=1159:4700:53
|
||||
EVDEV_ABS_00=1232:5711:51:13
|
||||
EVDEV_ABS_01=1159:4700:53:13
|
||||
EVDEV_ABS_35=1232:5711:51:13
|
||||
EVDEV_ABS_36=1159:4700:53:13
|
||||
|
||||
# Lenovo ThinkPad X140e
|
||||
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX140e:*
|
||||
@ -422,6 +422,13 @@ evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadT430:*
|
||||
EVDEV_ABS_35=1250:5631:58
|
||||
EVDEV_ABS_36=1309:4826:78
|
||||
|
||||
# Lenovo Thinkpad X1 Carbon Extreme 3rd gen.
|
||||
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*pvrThinkPadX1ExtremeGen3*
|
||||
EVDEV_ABS_00=1354:5678:43
|
||||
EVDEV_ABS_01=1169:4695:51
|
||||
EVDEV_ABS_35=1354:5678:43
|
||||
EVDEV_ABS_36=1169:4695:51
|
||||
|
||||
# Lenovo Thinkpad Carbon X1 4th gen. and X1 Yoga 1st gen.
|
||||
evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO*:pvrThinkPadX1Carbon4th:*
|
||||
EVDEV_ABS_00=1262:5679:44
|
||||
|
@ -373,7 +373,11 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS12-9Q33*:*
|
||||
evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:*
|
||||
# Dell Precision microphone mute
|
||||
evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
|
||||
KEYBOARD_KEY_100150=f20 # Mic mute toggle, should be micmute
|
||||
KEYBOARD_KEY_100150=f20 # Mic mute toggle, should be micmute
|
||||
|
||||
# Dell Latitude privacy microphone mute
|
||||
evdev:name:Dell Privacy Driver:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:sku0A3E:*
|
||||
KEYBOARD_KEY_12001=f20 # Mic mute toggle, should be micmute
|
||||
|
||||
###########################################################
|
||||
# Everex
|
||||
@ -484,7 +488,7 @@ evdev:input:b0003v0458p0708*
|
||||
###########################################################
|
||||
|
||||
evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pn*:*
|
||||
KEYBOARD_KEY_8=unknown # Use hp-wireless instead
|
||||
KEYBOARD_KEY_8=unknown # Use hp-wireless instead
|
||||
|
||||
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*:*
|
||||
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pn*:*
|
||||
@ -859,7 +863,7 @@ evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO:pn81Q7*:pvrLenovoYogaS940:*
|
||||
|
||||
# Lenovo Y50-70
|
||||
evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*20378*:*
|
||||
KEYBOARD_KEY_f3=f21 # Fn+F6 (toggle touchpad)
|
||||
KEYBOARD_KEY_f3=f21 # Fn+F6 (toggle touchpad)
|
||||
|
||||
# V480
|
||||
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*Lenovo*V480*:*
|
||||
@ -890,53 +894,54 @@ evdev:input:b0003v04B3p301B*
|
||||
# logitech custom consumer usage-page codes. The mappings below are the most
|
||||
# common, but some mapping may differ, especially the Fn F1-F12 mappings
|
||||
evdev:input:b0003v046Dp00*
|
||||
KEYBOARD_KEY_c0183=media # HUT:config, kbd:Media/Music player button
|
||||
KEYBOARD_KEY_c1001=chat # Messenger button
|
||||
KEYBOARD_KEY_c1002=camera # Webcam button
|
||||
KEYBOARD_KEY_c1003=audio # Music Browser button
|
||||
KEYBOARD_KEY_c1004=video # Video Browser button
|
||||
KEYBOARD_KEY_c1005=images # Image Browser button
|
||||
KEYBOARD_KEY_c100a=documents # Document Browser button
|
||||
KEYBOARD_KEY_c100b=rewind # Rewind button
|
||||
KEYBOARD_KEY_c100c=fastforward # Fast Forward button
|
||||
KEYBOARD_KEY_c100f=f14 # Track 1 button → f14 → XF86Launch5
|
||||
KEYBOARD_KEY_c1010=f15 # Track 2 button → f15 → XF86Launch6
|
||||
KEYBOARD_KEY_c1011=channeldown # Playlist back button
|
||||
KEYBOARD_KEY_c1012=channelup # Playlist advance button
|
||||
KEYBOARD_KEY_c1013=camera # Webcam button
|
||||
KEYBOARD_KEY_c1014=coffee # Status button
|
||||
KEYBOARD_KEY_c1015=record # Record symbol button
|
||||
KEYBOARD_KEY_c1016=sound # Flame/CD burning → sound → XF86AudioPreset
|
||||
KEYBOARD_KEY_c1017=ejectcd # Eject button
|
||||
KEYBOARD_KEY_c1018=config # Remote-control ico
|
||||
KEYBOARD_KEY_c1019=f14 # Preset 1 → f14 → XF86Launch5
|
||||
KEYBOARD_KEY_c101a=f15 # Preset 2 → f15 → XF86Launch6
|
||||
KEYBOARD_KEY_c101b=f16 # Preset 3 → f16 → XF86Launch7
|
||||
KEYBOARD_KEY_c101c=cyclewindows # 2 overlapping windows icon
|
||||
KEYBOARD_KEY_c101f=zoomout # zoom - button / - side of zoomrocker
|
||||
KEYBOARD_KEY_c1020=zoomin # zoom + button / + side off zoom rocker
|
||||
KEYBOARD_KEY_c1021=zoomreset # 100% symbol on kbd left side
|
||||
KEYBOARD_KEY_c1023=close # [x] symbol on kbd left side
|
||||
KEYBOARD_KEY_c1027=menu # Hamburger menu icon
|
||||
KEYBOARD_KEY_c1028=angle # Rotate button
|
||||
KEYBOARD_KEY_c1029=shuffle # Shuffle button
|
||||
KEYBOARD_KEY_c102a=back # Back button
|
||||
KEYBOARD_KEY_c102b=cyclewindows # Empty window icon
|
||||
KEYBOARD_KEY_c102d=www # www text + magnifierglass icon
|
||||
KEYBOARD_KEY_c1031=connect # Pickup phone button → connect → XF86Go
|
||||
KEYBOARD_KEY_c1032=cancel # Hangup phone button → cancel → Cancel
|
||||
KEYBOARD_KEY_c1041=help # Help text or icon (Fn + F1)
|
||||
KEYBOARD_KEY_c1042=wordprocessor # Word icon (Fn + F2)
|
||||
KEYBOARD_KEY_c1043=spreadsheet # Excel icon (Fn + F3)
|
||||
KEYBOARD_KEY_c1044=presentation # Presentation icon (Fn + F4)
|
||||
KEYBOARD_KEY_c1045=undo # Undo Icon (Fn + F5)
|
||||
KEYBOARD_KEY_c1046=redo # Redo Icon (Fn + F6)
|
||||
KEYBOARD_KEY_c1047=print # Printer Icon (Fn + F7)
|
||||
KEYBOARD_KEY_c1048=save # Floppy Icon (Fn + F8)
|
||||
KEYBOARD_KEY_c1049=prog1 # Smartkey A (Fn + F9) → XF86Launch1
|
||||
KEYBOARD_KEY_c104a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
|
||||
KEYBOARD_KEY_c104b=prog3 # Smartkey C (Fn + F11) → XF86Launch3
|
||||
KEYBOARD_KEY_c104c=prog4 # Smartkey D (Fn + F12) → XF86Launch4
|
||||
KEYBOARD_KEY_c0183=media # HUT:config, kbd:Media/Music player button
|
||||
KEYBOARD_KEY_c1001=chat # Messenger button
|
||||
KEYBOARD_KEY_c1002=camera # Webcam button
|
||||
KEYBOARD_KEY_c1003=audio # Music Browser button
|
||||
KEYBOARD_KEY_c1004=video # Video Browser button
|
||||
KEYBOARD_KEY_c1005=images # Image Browser button
|
||||
KEYBOARD_KEY_c100a=documents # Document Browser button
|
||||
KEYBOARD_KEY_c100b=rewind # Rewind button
|
||||
KEYBOARD_KEY_c100c=fastforward # Fast Forward button
|
||||
KEYBOARD_KEY_c100f=f14 # Track 1 button → f14 → XF86Launch5
|
||||
KEYBOARD_KEY_c1010=f15 # Track 2 button → f15 → XF86Launch6
|
||||
KEYBOARD_KEY_c1011=channeldown # Playlist back button
|
||||
KEYBOARD_KEY_c1012=channelup # Playlist advance button
|
||||
KEYBOARD_KEY_c1013=camera # Webcam button
|
||||
KEYBOARD_KEY_c1014=coffee # Status button
|
||||
KEYBOARD_KEY_c1015=record # Record symbol button
|
||||
KEYBOARD_KEY_c1016=sound # Flame/CD burning → sound → XF86AudioPreset
|
||||
KEYBOARD_KEY_c1017=ejectcd # Eject button
|
||||
KEYBOARD_KEY_c1018=config # Remote-control ico
|
||||
KEYBOARD_KEY_c1019=f14 # Preset 1 → f14 → XF86Launch5
|
||||
KEYBOARD_KEY_c101a=f15 # Preset 2 → f15 → XF86Launch6
|
||||
KEYBOARD_KEY_c101b=f16 # Preset 3 → f16 → XF86Launch7
|
||||
KEYBOARD_KEY_c101c=cyclewindows # 2 overlapping windows icon
|
||||
KEYBOARD_KEY_c101f=zoomout # zoom - button / - side of zoomrocker
|
||||
KEYBOARD_KEY_c1020=zoomin # zoom + button / + side off zoom rocker
|
||||
KEYBOARD_KEY_c1021=zoomreset # 100% symbol on kbd left side
|
||||
KEYBOARD_KEY_c1023=close # [x] symbol on kbd left side
|
||||
KEYBOARD_KEY_c1027=menu # Hamburger menu icon
|
||||
KEYBOARD_KEY_c1028=angle # Rotate button
|
||||
KEYBOARD_KEY_c1029=shuffle # Shuffle button
|
||||
KEYBOARD_KEY_c102a=back # Back button
|
||||
KEYBOARD_KEY_c102b=cyclewindows # Empty window icon
|
||||
KEYBOARD_KEY_c102c=fn # Fn key
|
||||
KEYBOARD_KEY_c102d=www # www text + magnifierglass icon
|
||||
KEYBOARD_KEY_c1031=connect # Pickup phone button → connect → XF86Go
|
||||
KEYBOARD_KEY_c1032=cancel # Hangup phone button → cancel → Cancel
|
||||
KEYBOARD_KEY_c1041=help # Help text or icon (Fn + F1)
|
||||
KEYBOARD_KEY_c1042=wordprocessor # Word icon (Fn + F2)
|
||||
KEYBOARD_KEY_c1043=spreadsheet # Excel icon (Fn + F3)
|
||||
KEYBOARD_KEY_c1044=presentation # Presentation icon (Fn + F4)
|
||||
KEYBOARD_KEY_c1045=undo # Undo Icon (Fn + F5)
|
||||
KEYBOARD_KEY_c1046=redo # Redo Icon (Fn + F6)
|
||||
KEYBOARD_KEY_c1047=print # Printer Icon (Fn + F7)
|
||||
KEYBOARD_KEY_c1048=save # Floppy Icon (Fn + F8)
|
||||
KEYBOARD_KEY_c1049=prog1 # Smartkey A (Fn + F9) → XF86Launch1
|
||||
KEYBOARD_KEY_c104a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
|
||||
KEYBOARD_KEY_c104b=prog3 # Smartkey C (Fn + F11) → XF86Launch3
|
||||
KEYBOARD_KEY_c104c=prog4 # Smartkey D (Fn + F12) → XF86Launch4
|
||||
|
||||
# Cordless Access Keyboard (27 MHz, modelnumber Y-RH35)
|
||||
evdev:input:b0003v046Dp0042*
|
||||
@ -966,7 +971,7 @@ evdev:input:b0003v046Dp0045*
|
||||
|
||||
# S510 keyboard (27 MHz, modelnumber Y-RAK73)
|
||||
evdev:input:b0003v046Dp0056*
|
||||
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
|
||||
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
|
||||
|
||||
# MX3000 keyboard (27 MHz, modelnumber Y-RAM74)
|
||||
# We ignore the scroll up / down keypress events since these buttons also
|
||||
@ -975,7 +980,7 @@ evdev:input:b0003v046Dp0056*
|
||||
# cleared then the scroll-wheel events for these buttons go away and then
|
||||
# tilting the scrollwheel left/right starts sending c1022 / c1024 events
|
||||
evdev:input:b0003v046Dp0057*
|
||||
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
|
||||
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
|
||||
|
||||
#KEYBOARD_KEY_c101d=scrolldown # Button below scrollwheel (see note above)
|
||||
#KEYBOARD_KEY_c101e=scrollup # Button above scrollwheel (see note above)
|
||||
@ -984,69 +989,82 @@ evdev:input:b0003v046Dp0057*
|
||||
|
||||
# MX3200 keyboard (27 MHz, modelnumber Y-RAV80)
|
||||
evdev:input:b0003v046Dp005C*
|
||||
KEYBOARD_KEY_c1001=phone # VOIP button
|
||||
KEYBOARD_KEY_c1016=record # Record button
|
||||
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
|
||||
KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2)
|
||||
KEYBOARD_KEY_c1043=calendar # Calendar icon (Fn + F3)
|
||||
KEYBOARD_KEY_c1044=documents # My Documents icon (Fn + F4)
|
||||
KEYBOARD_KEY_c1045=prog1 # Smartkey A (Fn + F5) → XF86Launch1
|
||||
KEYBOARD_KEY_c1046=prog2 # Smartkey B (Fn + F6) → XF86Launch2
|
||||
KEYBOARD_KEY_c1047=prog3 # Smartkey C (Fn + F7) → XF86Launch3
|
||||
KEYBOARD_KEY_c1048=prog4 # Smartkey D (Fn + F8) → XF86Launch4
|
||||
KEYBOARD_KEY_c1001=phone # VOIP button
|
||||
KEYBOARD_KEY_c1016=record # Record button
|
||||
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
|
||||
KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2)
|
||||
KEYBOARD_KEY_c1043=calendar # Calendar icon (Fn + F3)
|
||||
KEYBOARD_KEY_c1044=documents # My Documents icon (Fn + F4)
|
||||
KEYBOARD_KEY_c1045=prog1 # Smartkey A (Fn + F5) → XF86Launch1
|
||||
KEYBOARD_KEY_c1046=prog2 # Smartkey B (Fn + F6) → XF86Launch2
|
||||
KEYBOARD_KEY_c1047=prog3 # Smartkey C (Fn + F7) → XF86Launch3
|
||||
KEYBOARD_KEY_c1048=prog4 # Smartkey D (Fn + F8) → XF86Launch4
|
||||
|
||||
# EX100 keyboard (27 MHz, modelnumber Y-RBH94)
|
||||
evdev:input:b0003v046Dp0065*
|
||||
KEYBOARD_KEY_c104b=battery # Battery icon (Fn + F11)
|
||||
KEYBOARD_KEY_c104c=ejectcd # Eject icon (Fn + F12)
|
||||
KEYBOARD_KEY_c104b=battery # Battery icon (Fn + F11)
|
||||
KEYBOARD_KEY_c104c=ejectcd # Eject icon (Fn + F12)
|
||||
|
||||
# S520 keyboard (27 MHz, modelnumber Y-RBA97)
|
||||
# Note this one uses non-standard codes for FN + F9 - Fn + F12?
|
||||
evdev:input:b0003v046Dp0066*
|
||||
KEYBOARD_KEY_c100e=prog4 # Smartkey D (Fn + F12) → XF86Launch4
|
||||
KEYBOARD_KEY_c1019=prog1 # Smartkey A (Fn + F9) → XF86Launch1
|
||||
KEYBOARD_KEY_c101a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
|
||||
KEYBOARD_KEY_c101b=prog3 # Smartkey C (Fn + F11) → XF86Launch3
|
||||
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
|
||||
KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2)
|
||||
KEYBOARD_KEY_c1043=presentation # Presentation icon (Fn + F3)
|
||||
KEYBOARD_KEY_c1044=calendar # Calendar icon (Fn + F4)
|
||||
KEYBOARD_KEY_c1045=homepage # Home icon (Fn + F5)
|
||||
KEYBOARD_KEY_c1046=email # Letter icon (Fn + F6)
|
||||
KEYBOARD_KEY_c1047=search # Magnifying glass icon (Fn + F7)
|
||||
KEYBOARD_KEY_c1048=config # Window with gear icon (Fn + F8)
|
||||
KEYBOARD_KEY_c106f=battery # Battery icon
|
||||
KEYBOARD_KEY_c100e=prog4 # Smartkey D (Fn + F12) → XF86Launch4
|
||||
KEYBOARD_KEY_c1019=prog1 # Smartkey A (Fn + F9) → XF86Launch1
|
||||
KEYBOARD_KEY_c101a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
|
||||
KEYBOARD_KEY_c101b=prog3 # Smartkey C (Fn + F11) → XF86Launch3
|
||||
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
|
||||
KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2)
|
||||
KEYBOARD_KEY_c1043=presentation # Presentation icon (Fn + F3)
|
||||
KEYBOARD_KEY_c1044=calendar # Calendar icon (Fn + F4)
|
||||
KEYBOARD_KEY_c1045=homepage # Home icon (Fn + F5)
|
||||
KEYBOARD_KEY_c1046=email # Letter icon (Fn + F6)
|
||||
KEYBOARD_KEY_c1047=search # Magnifying glass icon (Fn + F7)
|
||||
KEYBOARD_KEY_c1048=config # Window with gear icon (Fn + F8)
|
||||
KEYBOARD_KEY_c106f=battery # Battery icon
|
||||
|
||||
# S510 remote control (27 MHz)
|
||||
evdev:input:b0003v046Dp00FE*
|
||||
KEYBOARD_KEY_c1018=media # Media button
|
||||
KEYBOARD_KEY_c1018=media # Media button
|
||||
|
||||
# MX5000 keyboard (HID proxy mode and bluetooth matches)
|
||||
evdev:input:b0003v046DpB305*
|
||||
evdev:input:b0005v046DpB305*
|
||||
KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100%
|
||||
KEYBOARD_KEY_c1004=send # Send and receive / sync button
|
||||
KEYBOARD_KEY_c1006=coffee # Status (online/away) button
|
||||
KEYBOARD_KEY_c1007=camera # Webcam button
|
||||
KEYBOARD_KEY_c100c=kbd_lcd_menu1 # 1st button below the builtin LCD
|
||||
KEYBOARD_KEY_c100d=kbd_lcd_menu4 # 4th button below the builtin LCD
|
||||
KEYBOARD_KEY_c100e=kbd_lcd_menu2 # 2nd button below the builtin LCD
|
||||
KEYBOARD_KEY_c100f=kbd_lcd_menu3 # 3th button below the builtin LCD
|
||||
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
|
||||
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
|
||||
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
|
||||
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
|
||||
KEYBOARD_KEY_c0183=media # HUT says config, kbd says Media
|
||||
KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100%
|
||||
KEYBOARD_KEY_c1004=send # Send and receive / sync button
|
||||
KEYBOARD_KEY_c1006=coffee # Status (online/away) button
|
||||
KEYBOARD_KEY_c1007=camera # Webcam button
|
||||
KEYBOARD_KEY_c100c=kbd_lcd_menu1 # 1st button below the builtin LCD
|
||||
KEYBOARD_KEY_c100d=kbd_lcd_menu4 # 4th button below the builtin LCD
|
||||
KEYBOARD_KEY_c100e=kbd_lcd_menu2 # 2nd button below the builtin LCD
|
||||
KEYBOARD_KEY_c100f=kbd_lcd_menu3 # 3th button below the builtin LCD
|
||||
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
|
||||
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
|
||||
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
|
||||
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
|
||||
KEYBOARD_KEY_c1040=fn_esc # Fn mode on/off toggle
|
||||
|
||||
# Dinovo Edge (HID proxy mode and bluetooth matches)
|
||||
evdev:input:b0003v046DpB309*
|
||||
evdev:input:b0005v046DpB309*
|
||||
KEYBOARD_KEY_c102c=fn # Fn key
|
||||
KEYBOARD_KEY_c1038=prog1 # Fn + F9 Smartkey A → XF86Launch1
|
||||
KEYBOARD_KEY_c1039=prog2 # Fn + F10 Smartkey B → XF86Launch2
|
||||
KEYBOARD_KEY_c103a=prog3 # Fn + F11 Smartkey C → XF86Launch3
|
||||
KEYBOARD_KEY_c103b=prog4 # Fn + F12 Smartkey D → XF86Launch4
|
||||
KEYBOARD_KEY_c1050=phone # Fn + F1 Phone button
|
||||
|
||||
# MX5500 keyboard (HID proxy mode and bluetooth matches)
|
||||
evdev:input:b0003v046DpB30B*
|
||||
evdev:input:b0005v046DpB30B*
|
||||
KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center
|
||||
KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery"
|
||||
KEYBOARD_KEY_c100f=config # Window with gear icon
|
||||
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
|
||||
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
|
||||
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
|
||||
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
|
||||
KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center
|
||||
KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery"
|
||||
KEYBOARD_KEY_c100f=config # Window with gear icon
|
||||
KEYBOARD_KEY_c102c=fn # Fn key
|
||||
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
|
||||
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
|
||||
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
|
||||
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
|
||||
|
||||
# Logitech K811
|
||||
evdev:input:b0005v046DpB317*
|
||||
@ -1125,22 +1143,22 @@ evdev:input:b0003v046DpC52D*
|
||||
|
||||
# Internet Navigator
|
||||
evdev:input:b0003v046DpC309*
|
||||
KEYBOARD_KEY_90001=chat # Messenger/SMS
|
||||
KEYBOARD_KEY_90002=camera # webcam
|
||||
KEYBOARD_KEY_90003=prog1 # iTouch
|
||||
KEYBOARD_KEY_90004=shop # Shopping
|
||||
KEYBOARD_KEY_c0201=new # New (F1)
|
||||
KEYBOARD_KEY_c0289=reply # Reply mail (F2)
|
||||
KEYBOARD_KEY_c028b=forwardmail # Forward mail (F3)
|
||||
KEYBOARD_KEY_c028c=send # Send (F4)
|
||||
KEYBOARD_KEY_c021a=undo # Undo (F5)
|
||||
KEYBOARD_KEY_c0279=redo # Redo (F6)
|
||||
KEYBOARD_KEY_c0208=print # Print (F7)
|
||||
KEYBOARD_KEY_c0207=save # Save (F8)
|
||||
KEYBOARD_KEY_c0194=file # My Computer (F9)
|
||||
KEYBOARD_KEY_c01a7=documents # My Documents (F10)
|
||||
KEYBOARD_KEY_c01b6=images # My Pictures (F11)
|
||||
KEYBOARD_KEY_c01b7=audio # My Music (F12)
|
||||
KEYBOARD_KEY_90001=chat # Messenger/SMS
|
||||
KEYBOARD_KEY_90002=camera # webcam
|
||||
KEYBOARD_KEY_90003=prog1 # iTouch
|
||||
KEYBOARD_KEY_90004=shop # Shopping
|
||||
KEYBOARD_KEY_c0201=new # New (F1)
|
||||
KEYBOARD_KEY_c0289=reply # Reply mail (F2)
|
||||
KEYBOARD_KEY_c028b=forwardmail # Forward mail (F3)
|
||||
KEYBOARD_KEY_c028c=send # Send (F4)
|
||||
KEYBOARD_KEY_c021a=undo # Undo (F5)
|
||||
KEYBOARD_KEY_c0279=redo # Redo (F6)
|
||||
KEYBOARD_KEY_c0208=print # Print (F7)
|
||||
KEYBOARD_KEY_c0207=save # Save (F8)
|
||||
KEYBOARD_KEY_c0194=file # My Computer (F9)
|
||||
KEYBOARD_KEY_c01a7=documents # My Documents (F10)
|
||||
KEYBOARD_KEY_c01b6=images # My Pictures (F11)
|
||||
KEYBOARD_KEY_c01b7=audio # My Music (F12)
|
||||
|
||||
|
||||
###########################################################
|
||||
@ -1382,25 +1400,25 @@ evdev:input:b0003v05A4p9735*
|
||||
KEYBOARD_KEY_c000c=stop
|
||||
KEYBOARD_KEY_c0018=refresh
|
||||
KEYBOARD_KEY_c00b9=search
|
||||
KEYBOARD_KEY_c0006=bookmarks # Button labeled "Favorites"
|
||||
KEYBOARD_KEY_c00a8=homepage # Button labeled "Web/Home"
|
||||
KEYBOARD_KEY_c0006=bookmarks # Button labeled "Favorites"
|
||||
KEYBOARD_KEY_c00a8=homepage # Button labeled "Web/Home"
|
||||
KEYBOARD_KEY_c0010=mute
|
||||
KEYBOARD_KEY_c0011=volumedown
|
||||
KEYBOARD_KEY_c0014=volumeup
|
||||
KEYBOARD_KEY_c000e=close
|
||||
KEYBOARD_KEY_c00a7=print
|
||||
KEYBOARD_KEY_c0013=documents # Button labeled "Stickies"
|
||||
KEYBOARD_KEY_c000d=find # Button labeled "Sherlock2"
|
||||
KEYBOARD_KEY_c0013=documents # Button labeled "Stickies"
|
||||
KEYBOARD_KEY_c000d=find # Button labeled "Sherlock2"
|
||||
KEYBOARD_KEY_c000f=mail
|
||||
KEYBOARD_KEY_c000a=calc
|
||||
KEYBOARD_KEY_c000b=sleep
|
||||
KEYBOARD_KEY_c0007=previoussong # Button with standard |<< icon
|
||||
KEYBOARD_KEY_c0008=playpause # Button with standad >/|| icon
|
||||
KEYBOARD_KEY_c0009=nextsong # Button with standard >>| icon
|
||||
KEYBOARD_KEY_c00b2=stopcd # Button with standard square box icon
|
||||
KEYBOARD_KEY_c0016=prog1 # Key labeled "pf1"
|
||||
KEYBOARD_KEY_c00bb=prog2 # Key labeled "pf2"
|
||||
KEYBOARD_KEY_c00b8=prog3 # Key labeled "pf3"
|
||||
KEYBOARD_KEY_c0007=previoussong # Button with standard |<< icon
|
||||
KEYBOARD_KEY_c0008=playpause # Button with standad >/|| icon
|
||||
KEYBOARD_KEY_c0009=nextsong # Button with standard >>| icon
|
||||
KEYBOARD_KEY_c00b2=stopcd # Button with standard square box icon
|
||||
KEYBOARD_KEY_c0016=prog1 # Key labeled "pf1"
|
||||
KEYBOARD_KEY_c00bb=prog2 # Key labeled "pf2"
|
||||
KEYBOARD_KEY_c00b8=prog3 # Key labeled "pf3"
|
||||
|
||||
###########################################################
|
||||
# Pine64
|
||||
@ -1418,7 +1436,7 @@ evdev:input:b0003v258Ap001E*
|
||||
|
||||
# Plantronics .Audio 626 DSP
|
||||
evdev:input:b0003v047FpC006*
|
||||
KEYBOARD_KEY_b002f=f20 # Microphone mute button; should be micmute
|
||||
KEYBOARD_KEY_b002f=f20 # Microphone mute button; should be micmute
|
||||
|
||||
###########################################################
|
||||
# Purism
|
||||
|
@ -67,11 +67,24 @@
|
||||
# or 'display'. The default, when unset, is equivalent to:
|
||||
# ACCEL_LOCATION=display
|
||||
#
|
||||
# A note about setting ACCEL_MOUNT_MATRIX for ACCEL_LOCATION=base sensors,
|
||||
# on 360 degree hinges style 2-in-1s with 2 sensors (one in the display and
|
||||
# 1 in the base). Userspace will use both sensors to calculate the angle between
|
||||
# the 2 halves and the angle is defined as being 0 when the device is folded
|
||||
# as a regular clamshell laptop with its lid closed. This means that the
|
||||
# base-accelerometer's mount-matrix must be such, that after applying
|
||||
# the mount-matrices to both sensors, the base-accelerometer's readings must
|
||||
# be identical to the display-accelerometer's readings (when the lid is
|
||||
# closed).
|
||||
#
|
||||
# Sort by brand, model
|
||||
|
||||
#########################################
|
||||
# Acer
|
||||
#########################################
|
||||
sensor:modalias:acpi:KIOX0009*:dmi:*:svnAcer:pnAspireSW3-016:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, -1
|
||||
|
||||
sensor:modalias:acpi:INVN6500*:dmi:*svn*Acer*:*pn*AspireSW5-011:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
@ -458,7 +471,10 @@ sensor:modalias:acpi:NCPE0388*:dmi:*:rnLenovoYOGA510-14IKB:*
|
||||
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, 1
|
||||
|
||||
sensor:modalias:acpi:BOSC0200*:dmi:*ThinkPadYoga11e3rdGen:*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, -1
|
||||
|
||||
sensor:modalias:acpi:BOSC0200*:dmi:*:svnLENOVO:*pvrThinkPadYoga11e4thGen:*
|
||||
ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, -1
|
||||
|
||||
# Miix3-1030
|
||||
sensor:modalias:acpi:BMA250E*:dmi:bvnLENOVO:*:pvrLenovoMIIX3-1030:*
|
||||
@ -530,10 +546,12 @@ sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnE*:*
|
||||
# Medion Akoya E3222 MD62450
|
||||
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnMEDION*:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
ACCEL_LOCATION=display
|
||||
|
||||
# Medion Akoya E2221T MD60691
|
||||
sensor:modalias:acpi:KIOX020A*:dmi:*:pnE2221TMD60691*:*
|
||||
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 1, 0; 0, 0, 1
|
||||
# Same as above, but for base sensor
|
||||
sensor:modalias:acpi:KIOX020A*:dmi:*:svnMEDION:pnE*:*
|
||||
sensor:modalias:acpi:KIOX020A*:dmi:*:svnMEDION:pnMEDION*:*
|
||||
ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, -1
|
||||
ACCEL_LOCATION=base
|
||||
|
||||
#########################################
|
||||
@ -760,6 +778,16 @@ sensor:modalias:acpi:KIOX000A*:dmi:*:svnUMAX:pnVisionBook10WiPro:*
|
||||
sensor:modalias:acpi:SMO8500*:dmi:*:svnUMAX:pnVisionBook10WiPlus:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
|
||||
|
||||
#########################################
|
||||
# Voyo
|
||||
#########################################
|
||||
# Voyo Winpad A15
|
||||
# The Winpad A15 does not have its product name filled, so we
|
||||
# match the entire dmi-alias, assuming that the use of a SMO8500 +
|
||||
# bios-version + bios-date combo is unique
|
||||
sensor:modalias:acpi:SMO8500*:dmi:bvnAmericanMegatrendsInc.:bvr5.6.5:bd11/20/2014:br5.6:svnTobefilledbyO.E.M.:pnTobefilledbyO.E.M.:pvrTobefilledbyO.E.M.:rvnAMICorporation:rnAptioCRB:rvrTobefilledbyO.E.M.:cvnToBeFilledByO.E.M.:ct3:cvrToBeFilledByO.E.M.:*
|
||||
ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, -1
|
||||
|
||||
#########################################
|
||||
# Wortmann
|
||||
#########################################
|
||||
|
9290
hwdb.d/ma-large.txt
9290
hwdb.d/ma-large.txt
File diff suppressed because it is too large
Load Diff
1494
hwdb.d/ma-medium.txt
1494
hwdb.d/ma-medium.txt
File diff suppressed because it is too large
Load Diff
1769
hwdb.d/ma-small.txt
1769
hwdb.d/ma-small.txt
File diff suppressed because it is too large
Load Diff
119
hwdb.d/pci.ids
119
hwdb.d/pci.ids
@ -1,8 +1,8 @@
|
||||
#
|
||||
# List of PCI ID's
|
||||
#
|
||||
# Version: 2020.10.25
|
||||
# Date: 2020-10-25 03:15:01
|
||||
# Version: 2020.11.14
|
||||
# Date: 2020-11-14 03:15:02
|
||||
#
|
||||
# Maintained by Albert Pool, Martin Mares, and other volunteers from
|
||||
# the PCI ID Project at https://pci-ids.ucw.cz/.
|
||||
@ -70,6 +70,8 @@
|
||||
018a LevelOne
|
||||
0106 FPC-0106TX misprogrammed [RTL81xx]
|
||||
01de Oxide Computer Company
|
||||
# probably misprogrammed Intel Atom C2338 on Dell 0K8Y0N board
|
||||
0200 Dell (wrong ID)
|
||||
# 021b is not Compaq but there is a board misprogrammed
|
||||
021b Compaq Computer Corporation
|
||||
8139 HNE-300 (RealTek RTL8139c) [iPaq Networking]
|
||||
@ -2728,6 +2730,7 @@
|
||||
17aa 3643 Radeon R9 A375
|
||||
17aa 3801 Radeon R9 M275
|
||||
17aa 3824 Radeon R9 M375
|
||||
1da2 e26a Radeon R7 250
|
||||
6821 Venus XT [Radeon HD 8870M / R9 M270X/M370X]
|
||||
1002 031e FirePro SX4000
|
||||
1028 05cc FirePro M5100
|
||||
@ -3413,6 +3416,7 @@
|
||||
148c 9380 Radeon R9 380
|
||||
# Make naming scheme consistent
|
||||
174b e308 Radeon R9 380 Nitro 4G D5
|
||||
174b e315 Radeon R9 285
|
||||
693b Tonga PRO GL [FirePro W7100 / Barco MXRT-7600]
|
||||
694c Polaris 22 XT [Radeon RX Vega M GH]
|
||||
694e Polaris 22 XL [Radeon RX Vega M GL]
|
||||
@ -3586,9 +3590,10 @@
|
||||
7347 Navi 14 [Radeon Pro W5500M]
|
||||
734f Navi 14 [Radeon Pro W5300M]
|
||||
7360 Navi 12 [Radeon Pro 5600M]
|
||||
73bf Navi 21 [Radeon RX 6900 Series]
|
||||
73c3 Navi 23
|
||||
73bf Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
|
||||
73c3 Navi 22
|
||||
73df Navi 22
|
||||
73ff Navi 23
|
||||
7833 RS350 Host Bridge
|
||||
7834 RS350 [Radeon 9100 PRO/XT IGP]
|
||||
7835 RS350M [Mobility Radeon 9000 IGP]
|
||||
@ -9469,7 +9474,7 @@
|
||||
1682 211c GeForce 6600 256MB DDR DUAL DVI TV
|
||||
00f3 NV43 [GeForce 6200]
|
||||
00f4 NV43 [GeForce 6600 LE]
|
||||
00f5 G71 [GeForce 7800 GS AGP]
|
||||
00f5 G70/G71 [GeForce 7800 GS AGP]
|
||||
00f6 NV43 [GeForce 6800 GS/XT]
|
||||
1682 217e XFX GeForce 6800 XTreme 256MB DDR3 AGP
|
||||
00f8 NV45GL [Quadro FX 3400/4400]
|
||||
@ -11705,6 +11710,7 @@
|
||||
128a GK208B
|
||||
128b GK208B [GeForce GT 710]
|
||||
1043 85f7 GT710-SL-1GD5
|
||||
1043 8770 GT710-4H-SL-2GD5
|
||||
128c GK208B
|
||||
1290 GK208M [GeForce GT 730M]
|
||||
103c 2afa GeForce GT 730A
|
||||
@ -12097,7 +12103,7 @@
|
||||
21c4 TU116 [GeForce GTX 1660 SUPER]
|
||||
21d1 TU116BM [GeForce GTX 1660 Ti Mobile]
|
||||
2204 GA102 [GeForce RTX 3090]
|
||||
2206 GA102 [GeForce RTX 3080 10GB / 20GB]
|
||||
2206 GA102 [GeForce RTX 3080]
|
||||
10de 146d GA102 [GeForce RTX 3080 20GB]
|
||||
1462 3892 RTX 3080 10GB GAMING X TRIO
|
||||
222b GA102 [GeForce RTX 3090 Engineering Sample]
|
||||
@ -12105,17 +12111,18 @@
|
||||
2230 GA102GL [RTX A6000]
|
||||
223f GA102GL
|
||||
2482 GA104 [GeForce RTX 3070 Ti]
|
||||
2484 GA104 [GeForce RTX 3070 8GB / 16GB]
|
||||
2484 GA104 [GeForce RTX 3070]
|
||||
10de 146b GA104 [GeForce RTX 3070]
|
||||
10de 14ae GA104 [GeForce RTX 3070 16GB]
|
||||
2486 GA104 [GeForce RTX 3060 Ti]
|
||||
249c GA104M [GeForce RTX 3070 Mobile / Max-Q]
|
||||
249c GA104M [GeForce RTX 3070 Mobile / Max-Q 8GB/16GB]
|
||||
249d GA104M [GeForce RTX 3070 Mobile / Max-Q]
|
||||
24ac GA104 [GeForce RTX 30x0 Engineering Sample]
|
||||
24ad GA104 [GeForce RTX 3060 Engineering Sample]
|
||||
24af GA104 [GeForce RTX 3070 Engineering Sample]
|
||||
24bf GA104 [GeForce RTX 3070 Engineering Sample]
|
||||
24dc GA104 [GeForce RTX 3070 16GB Engineering Sample]
|
||||
24dc GA104M [GeForce RTX 3070 Mobile 16GB]
|
||||
24dd GA104M [GeForce RTX 3070 Mobile / Max-Q]
|
||||
252f GA106 [GeForce RTX 3060 Engineering Sample]
|
||||
25af GA107 [GeForce RTX 3050 Engineering Sample]
|
||||
10df Emulex Corporation
|
||||
@ -12349,6 +12356,7 @@
|
||||
5288 RTS5288 PCI Express Card Reader
|
||||
5289 RTL8411 PCI Express Card Reader
|
||||
1043 1457 K55A Laptop
|
||||
5762 RTS5763DL NVMe SSD Controller
|
||||
8029 RTL-8029(AS)
|
||||
10b8 2011 EZ-Card (SMC1208)
|
||||
10ec 8029 RTL-8029(AS)
|
||||
@ -19546,6 +19554,7 @@
|
||||
0070 6902 WinTV HVR-4000-HD
|
||||
0070 7801 WinTV HVR-1800 MCE
|
||||
0070 9001 Nova-T DVB-T
|
||||
0070 9002 Nova-T DVB-T Model 909
|
||||
0070 9200 Nova-SE2 DVB-S
|
||||
0070 9202 Nova-S-Plus DVB-S
|
||||
0070 9402 WinTV-HVR1100 DVB-T/Hybrid
|
||||
@ -20255,9 +20264,12 @@
|
||||
5001 WD Black NVMe SSD
|
||||
5002 WD Black 2018 / PC SN720 NVMe SSD
|
||||
5003 WD Black 2018 / PC SN520 NVMe SSD
|
||||
5004 PC SN520 NVMe SSD
|
||||
5005 PC SN520 NVMe SSD
|
||||
5006 WD Black 2019/PC SN750 NVMe SSD
|
||||
5009 WD Blue SN550 NVMe SSD
|
||||
15b7 5009 WD Blue SN550 NVMe SSD
|
||||
500d WD Ultrastar DC SN340 NVMe SSD
|
||||
15b8 ADDI-DATA GmbH
|
||||
1001 APCI1516 SP controller (16 digi outputs)
|
||||
1003 APCI1032 SP controller (32 digi inputs w/ opto coupler)
|
||||
@ -21743,6 +21755,8 @@
|
||||
0185 NT40A01 Network Adapter
|
||||
01a5 NT200A01 Network Adapter
|
||||
01c5 NT200A02 Network Adapter
|
||||
01d5 NT50B01 Network Adapter
|
||||
01e5 NT100A01 Network Adapter
|
||||
18f6 NextIO
|
||||
1000 [Nexsis] Switch Virtual P2P PCIe Bridge
|
||||
1001 [Texsis] Switch Virtual P2P PCIe Bridge
|
||||
@ -22137,6 +22151,7 @@
|
||||
0250 JMC250 PCI Express Gigabit Ethernet Controller
|
||||
0260 JMC260 PCI Express Fast Ethernet Controller
|
||||
0368 JMB368 IDE controller
|
||||
0585 JMB58x AHCI SATA controller
|
||||
2360 JMB360 AHCI Controller
|
||||
2361 JMB361 AHCI/IDE
|
||||
1462 7235 P965 Neo MS-7235 mainboard
|
||||
@ -22281,7 +22296,7 @@
|
||||
19e5 d303 Hi1822 SP522 (2*8G FC)
|
||||
19e5 d306 Hi1822 SP523 (2*8G FC)
|
||||
1710 iBMA Virtual Network Adapter
|
||||
1711 Hi1710 [iBMC Intelligent Management system chip w/VGA support]
|
||||
1711 Hi171x Series [iBMC Intelligent Management system chip w/VGA support]
|
||||
1822 Hi1822 Family (4*25GE)
|
||||
19e5 d129 Hi1822 SP570 (4*25GE)
|
||||
19e5 d136 Hi1822 SP580 (4*25GE)
|
||||
@ -22382,13 +22397,16 @@
|
||||
1a4a SLAC National Accelerator Lab TID-AIR
|
||||
1000 MCOR Power Supply Controller
|
||||
1010 AMC EVR - Stockholm Timing Board
|
||||
1020 Cluster On Board (COB) Ethernet Switch
|
||||
1030 PGPCard - Gen3 GIGe Interface
|
||||
2000 PGPCard - 4 Lane
|
||||
2001 PGPCard - 8 Lane Plus EVR
|
||||
2010 PCI-Express EVR
|
||||
# PC-260-101-03
|
||||
2020 PGP-GEN3 PCIe
|
||||
2011 PCI-Express EVR - TPR Version
|
||||
2020 PGP-GEN3 PCIe - 8 Lane Plus EVR
|
||||
2030 AXI Stream DAQ PCIe card
|
||||
2040 EXO PCIe TEM
|
||||
3000 COB DTM V1
|
||||
3001 COB DTM V2
|
||||
1a51 Hectronic AB
|
||||
1a55 Rohde & Schwarz DVS GmbH
|
||||
0010 SDStationOEM
|
||||
@ -22595,10 +22613,12 @@
|
||||
1b13 Jaton Corp
|
||||
1b1a K&F Computing Research Co.
|
||||
0e70 GRAPE
|
||||
1b1c Corsair
|
||||
1b21 ASMedia Technology Inc.
|
||||
0611 ASM1061 SATA IDE Controller
|
||||
0612 ASM1062 Serial ATA Controller
|
||||
1849 0612 Motherboard
|
||||
1040 ASM1040 XHCI Controller
|
||||
1042 ASM1042 SuperSpeed USB Host Controller
|
||||
1043 1059 K53SM motherboard
|
||||
1043 8488 P8B WS Motherboard
|
||||
@ -22678,6 +22698,8 @@
|
||||
1b4b Marvell Technology Group Ltd.
|
||||
0640 88SE9128 SATA III 6Gb/s RAID Controller
|
||||
2241 88NR2241 Non-Volatile memory controller
|
||||
1028 2112 BOSS-N1 Monolithic
|
||||
1028 2113 BOSS-N1 Modular
|
||||
1d49 0306 ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit
|
||||
1d49 0307 ThinkSystem 7mm NVMe 2-Bay Rear RAID Enablement Kit
|
||||
9120 88SE9120 SATA 6Gb/s Controller
|
||||
@ -22747,6 +22769,16 @@
|
||||
1b94 Signatec / Dynamic Signals Corp
|
||||
e400 PX14400 Dual Xilinx Virtex5 based Digitizer
|
||||
1b96 Western Digital
|
||||
2200 Ultrastar DC SN630 NVMe SSD
|
||||
2201 Ultrastar DC SN630 NVMe SSD
|
||||
2300 Ultrastar DC SN840 NVMe SSD
|
||||
2400 Ultrastar DC SN640 NVMe SSD
|
||||
2401 Ultrastar DC SN640 NVMe SSD
|
||||
2402 Ultrastar DC SN640 NVMe SSD
|
||||
2404 Ultrastar DC SN640 NVMe SSD
|
||||
2500 Ultrastar DC SN840 NVMe SSD
|
||||
3714 PC SN730 NVMe SSD
|
||||
3734 PC SN730 NVMe SSD
|
||||
1b9a XAVi Technologies Corp.
|
||||
1baa QNAP Systems, Inc.
|
||||
1bad ReFLEX CES
|
||||
@ -22985,6 +23017,7 @@
|
||||
0305 Simulyzer-RT CompactPCI Serial CAN-1 card
|
||||
# supports 8x CAN (-FD) interfaces
|
||||
0306 Simulyzer-RT CompactPCI Serial CAN-2 card (CAN-FD)
|
||||
0307 Simulyzer-RT CompactPCI Serial DIO-2 card [Xilinx Zynq UltraScale+]
|
||||
1cd7 Nanjing Magewell Electronics Co., Ltd.
|
||||
0010 Pro Capture Endpoint
|
||||
0014 PRO CAPTURE AIO 4K PLUS
|
||||
@ -23159,6 +23192,8 @@
|
||||
1d78 3105 D5457 U.2 3.2TB NVMe SSD
|
||||
1d78 3107 D5457 U.2 6.4TB NVMe SSD
|
||||
1d7c Aerotech, Inc.
|
||||
# Fiber-optic HyperWire motion control bus from Aerotech.
|
||||
0001 HyperWire Adapter
|
||||
1d82 NETINT Technologies Inc.
|
||||
0101 Codensity D400 SSD
|
||||
0102 Codensity D408 PCIe Gen4 NVMe SSD
|
||||
@ -23207,6 +23242,7 @@
|
||||
0011 IO Bridge
|
||||
1da1 Teko Telecom S.r.l.
|
||||
1da2 Sapphire Technology Limited
|
||||
e26a Radeon R7 250
|
||||
1da3 Habana Labs Ltd.
|
||||
0001 HL-1000 AI Inference Accelerator [Goya]
|
||||
# PCIe accelerator card for Deep Learning training tasks
|
||||
@ -23344,6 +23380,8 @@
|
||||
1028 210f Dell Ent NVMe FIPS CM6 MU 3.2TB
|
||||
1028 2110 Dell Ent NVMe FIPS CM6 MU 6.4TB
|
||||
1e0f 0001 Generic NVMe CM6 RI 3.84TB
|
||||
0009 NVMe SSD
|
||||
1e0f 0001 Toshiba RC500 NVMe SSD 500GB
|
||||
1e17 Arnold & Richter Cine Technik GmbH & Co. Betriebs KG
|
||||
1e24 Squirrels Research Labs
|
||||
0101 Acorn CLE-101
|
||||
@ -23359,9 +23397,38 @@
|
||||
1e26 Fujitsu Client Computing Limited
|
||||
1e36 Shanghai Enflame Technology Co. Ltd
|
||||
0001 T10 [CloudBlazer]
|
||||
0002 T11 [CloudBlazer]
|
||||
0003 T10s [CloudBlazer]
|
||||
8011 I10 [CloudBlazer]
|
||||
# nee Thinci, Inc
|
||||
1e38 Blaize, Inc
|
||||
0102 Xplorer X1600
|
||||
1e3b Shenzhen DAPU Microelectronics Co., Ltd
|
||||
1098 Haishen NVMe SSD
|
||||
1e3b 0001 Enterprise NVMe SSD U.2 0.8TB (H2100)
|
||||
1e3b 0002 Enterprise NVMe SSD U.2 0.96TB (H2200)
|
||||
1e3b 0004 Enterprise NVMe SSD U.2 1.6TB (H2100)
|
||||
1e3b 0005 Enterprise NVMe SSD U.2 1.92TB (H2200)
|
||||
1e3b 0009 Enterprise NVMe SSD U.2 0.8TB (H3100)
|
||||
1e3b 000a Enterprise NVMe SSD U.2 0.96TB (H3200)
|
||||
1e3b 000c Enterprise NVMe SSD U.2 1.6TB (H3100)
|
||||
1e3b 000d Enterprise NVMe SSD U.2 1.92TB (H3200)
|
||||
1e3b 0014 Enterprise NVMe SSD U.2 3.2TB (H3100)
|
||||
1e3b 0015 Enterprise NVMe SSD U.2 3.84TB (H3200)
|
||||
1e3b 0021 Enterprise NVMe SSD U.2 6.4TB (H3100)
|
||||
1e3b 0022 Enterprise NVMe SSD U.2 7.68TB (H3200)
|
||||
1e3b 0061 Enterprise NVMe SSD HHHL 0.8TB (H2100)
|
||||
1e3b 0062 Enterprise NVMe SSD HHHL 0.96TB (H2200)
|
||||
1e3b 0064 Enterprise NVMe SSD HHHL 1.6TB (H2100)
|
||||
1e3b 0065 Enterprise NVMe SSD HHHL 1.92TB (H2200)
|
||||
1e3b 006c Enterprise NVMe SSD HHHL 0.8TB (H3100)
|
||||
1e3b 006d Enterprise NVMe SSD HHHL 0.96TB (H3200)
|
||||
1e3b 006f Enterprise NVMe SSD HHHL 1.6TB (H3100)
|
||||
1e3b 0070 Enterprise NVMe SSD HHHL 1.92TB (H3200)
|
||||
1e3b 007c Enterprise NVMe SSD HHHL 3.2TB (H3100)
|
||||
1e3b 007d Enterprise NVMe SSD HHHL 3.84TB (H3200)
|
||||
1e3b 007f Enterprise NVMe SSD HHHL 6.4TB (H3100)
|
||||
1e3b 0080 Enterprise NVMe SSD HHHL 7.68TB (H3200)
|
||||
1e3d Burlywood, Inc
|
||||
1e49 Yangtze Memory Technologies Co.,Ltd
|
||||
1e4b MAXIO Technology (Hangzhou) Ltd.
|
||||
@ -23389,6 +23456,7 @@
|
||||
# aka SED Systems
|
||||
1e94 Calian SED
|
||||
1e95 Solid State Storage Technology Corporation
|
||||
1eab Hefei DATANG Storage Technology Co.,LTD.
|
||||
1eae XFX Limited
|
||||
1eb1 VeriSilicon Inc
|
||||
1001 Video Accelerator
|
||||
@ -23473,7 +23541,7 @@
|
||||
2348 Racore
|
||||
2010 8142 100VG/AnyLAN
|
||||
2646 Kingston Technology Company, Inc.
|
||||
2263 A2000, M.2, 500GB
|
||||
2263 A2000 NVMe SSD
|
||||
270b Xantel Corporation
|
||||
270f Chaintech Computer Co. Ltd
|
||||
2711 AVID Technology Inc.
|
||||
@ -24895,6 +24963,8 @@
|
||||
1028 1fe7 Express Flash NVMe 3.2TB 2.5" U.2 (P4600)
|
||||
1028 1fe8 Express Flash NVMe 2.0TB HHHL AIC (P4600)
|
||||
1028 1fe9 Express Flash NVMe 4.0TB HHHL AIC (P4600)
|
||||
0b26 Thunderbolt 4 Bridge [Goshen Ridge 2020]
|
||||
0b27 Thunderbolt 4 USB Controller [Goshen Ridge 2020]
|
||||
0b60 NVMe DC SSD [3DNAND, Beta Rock Controller]
|
||||
1028 2060 NVMe SED MU U.2 1.6TB (P5600)
|
||||
1028 2061 NVMe SED MU U.2 3.2TB (P5600)
|
||||
@ -25933,6 +26003,10 @@
|
||||
123f 82466GX Integrated Hot-Plug Controller (IHPC)
|
||||
1240 82752 (752) AGP Graphics Accelerator
|
||||
124b 82380FB (MPCI2) Mobile Docking Controller
|
||||
124c Ethernet Connection E823-L for backplane
|
||||
124d Ethernet Connection E823-L for SFP
|
||||
124e Ethernet Connection E823-L/X557-AT 10GBASE-T
|
||||
124f Ethernet Connection E823-L 1GbE
|
||||
1250 430HX - 82439HX TXC [Triton II]
|
||||
1360 82806AA PCI64 Hub PCI Bridge
|
||||
1361 82806AA PCI64 Hub Controller (HRes)
|
||||
@ -25984,6 +26058,7 @@
|
||||
151b CVL2510 Thunderbolt Controller [Light Peak 2C 2010]
|
||||
151c 82599 10 Gigabit TN Network Connection
|
||||
108e 7b13 Dual 10GBASE-T LP
|
||||
151d Ethernet Connection E823-L for QSFP
|
||||
1520 I350 Ethernet Controller Virtual Function
|
||||
1521 I350 Gigabit Network Connection
|
||||
1028 0602 Gigabit 2P I350-t LOM
|
||||
@ -27055,6 +27130,7 @@
|
||||
1f26 Atom processor C2000 RAID SATA2 Controller
|
||||
1f27 Atom processor C2000 RAID SATA2 Controller
|
||||
1f2c Atom processor C2000 USB Enhanced Host Controller
|
||||
0200 1028 Atom C2338 on Dell 0K8Y0N motherboard
|
||||
1f2e Atom processor C2000 RAID SATA2 Controller
|
||||
1f2f Atom processor C2000 RAID SATA2 Controller
|
||||
1f30 Atom processor C2000 2-Port IDE SATA3 Controller
|
||||
@ -27897,6 +27973,9 @@
|
||||
250f 82820 820 (Camino) Chipset AGP Bridge
|
||||
2520 82805AA MTH Memory Translator Hub
|
||||
2521 82804AA MRH-S Memory Repeater Hub for SDRAM
|
||||
2522 NVMe Optane Memory Series
|
||||
8086 3806 Optane Memory 16GB
|
||||
8086 3810 Optane Memory M10 16GB
|
||||
2526 Wireless-AC 9260
|
||||
2530 82850 850 (Tehama) Chipset Host Bridge (MCH)
|
||||
1028 00c7 Dimension 8100
|
||||
@ -31462,14 +31541,21 @@
|
||||
9a0b Volume Management Device NVMe RAID Controller
|
||||
9a13 Tiger Lake-LP Thunderbolt USB Controller
|
||||
9a14 11th Gen Core Processor Host Bridge/DRAM Registers
|
||||
9a17 Tiger Lake-H Thunderbolt USB Controller
|
||||
9a1b Tiger Lake-LP Thunderbolt NHI #0
|
||||
9a1d Tiger Lake-LP Thunderbolt NHI #1
|
||||
9a1f Tiger Lake-H Thunderbolt NHI #0
|
||||
9a21 Tiger Lake-H Thunderbolt NHI #1
|
||||
9a23 Tiger Lake-LP Thunderbolt PCI Express Root Port #0
|
||||
9a25 Tiger Lake-LP Thunderbolt PCI Express Root Port #1
|
||||
9a27 Tiger Lake-LP Thunderbolt PCI Express Root Port #2
|
||||
9a29 Tiger Lake-LP Thunderbolt PCI Express Root Port #3
|
||||
9a2b Tiger Lake-H Thunderbolt PCI Express Root Port #0
|
||||
9a2d Tiger Lake-H Thunderbolt PCI Express Root Port #1
|
||||
9a2f Tiger Lake-H Thunderbolt PCI Express Root Port #2
|
||||
9a31 Tiger Lake-H Thunderbolt PCI Express Root Port #3
|
||||
9a33 Tiger Lake Trace Hub
|
||||
9a49 UHD Graphics
|
||||
9a49 Iris Xe Graphics
|
||||
9b41 UHD Graphics
|
||||
9b44 10th Gen Core Processor Host Bridge/DRAM Registers
|
||||
9b54 10th Gen Core Processor Host Bridge/DRAM Registers
|
||||
@ -33166,6 +33252,9 @@ C 08 Generic system peripheral
|
||||
05 SD Host controller
|
||||
06 IOMMU
|
||||
80 System peripheral
|
||||
99 Timing Card
|
||||
# PTP Grandmaster Source Clock
|
||||
01 TAP Timing Card
|
||||
C 09 Input device controller
|
||||
00 Keyboard controller
|
||||
01 Digitizer Pen
|
||||
|
@ -112,6 +112,7 @@
|
||||
These special IDs are primarily useful as a quick way to persistently make the currently booted boot loader
|
||||
entry the default choice, or to upgrade the default boot loader entry for the next boot to the default boot
|
||||
loader entry for all future boots, but may be used for other operations too.
|
||||
When an empty string ("") is specified as an ID, then the corresponding EFI variable will be unset.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -301,8 +301,8 @@ s - Service VLAN, m - Two-port MAC Relay (TPMR)
|
||||
</term>
|
||||
<listitem><para>Reconfigure network interfaces. Takes interface name or index number. Note that
|
||||
this does not reload <filename>.netdev</filename> or <filename>.network</filename>
|
||||
corresponding to the the specified interface. So, if you edit config files, it is necessary to
|
||||
call <command>networkctl reload</command> first to apply new settings.</para></listitem>
|
||||
corresponding to the specified interface. So, if you edit config files, it is necessary to call
|
||||
<command>networkctl reload</command> first to apply new settings.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
|
@ -198,6 +198,26 @@
|
||||
<entry>Verity data for the ia64 root file system partition</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><constant>root-riscv32</constant></entry>
|
||||
<entry>Root file system partition for the RISC-V 32-bit architecture</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><constant>root-riscv32-verity</constant></entry>
|
||||
<entry>Verity data for the RISC-V 32-bit root file system partition</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><constant>root-riscv64</constant></entry>
|
||||
<entry>Root file system partition for the RISC-V 64-bit architecture</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><constant>root-riscv64-verity</constant></entry>
|
||||
<entry>Verity data for the RISC-V 64-bit root file system partition</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><constant>usr</constant></entry>
|
||||
<entry><filename>/usr/</filename> file system partition type appropriate for the local architecture (an alias for an architecture <filename>/usr/</filename> file system partition type listed below, e.g. <constant>usr-x86-64</constant>)</entry>
|
||||
@ -267,6 +287,28 @@
|
||||
<entry><constant>usr-ia64-verity</constant></entry>
|
||||
<entry>Verity data for the ia64 <filename>/usr/</filename> file system partition</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><constant>usr-riscv32</constant></entry>
|
||||
<entry><filename>/usr/</filename> file system partition for the RISC-V 32-bit architecture</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><constant>usr-riscv32-verity</constant></entry>
|
||||
<entry>Verity data for the RISC-V 32-bit <filename>/usr/</filename> file system partition</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><constant>usr-riscv64</constant></entry>
|
||||
<entry><filename>/usr/</filename> file system partition for the RISC-V 64-bit architecture</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><constant>usr-riscv64-verity</constant></entry>
|
||||
<entry>Verity data for the RISC-V 64-bit <filename>/usr/</filename> file system partition</entry>
|
||||
</row>
|
||||
|
||||
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
@ -199,7 +199,7 @@
|
||||
domains (TLDs) that are not known by the DNS root server. This
|
||||
logic does not work in all private zone setups.</para>
|
||||
|
||||
<para>Defaults to <literal>allow-downgrade</literal></para>
|
||||
<para>Defaults to <literal>allow-downgrade</literal>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
@ -233,13 +233,11 @@
|
||||
resolver is not capable of authenticating the server, so it is
|
||||
vulnerable to "man-in-the-middle" attacks.</para>
|
||||
|
||||
<para>In addition to this global DNSOverTLS setting
|
||||
<para>In addition to this global <varname>DNSOverTLS=</varname> setting
|
||||
<citerefentry><refentrytitle>systemd-networkd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
||||
also maintains per-link DNSOverTLS settings. For system DNS
|
||||
servers (see above), only the global DNSOverTLS setting is in
|
||||
effect. For per-link DNS servers the per-link
|
||||
setting is in effect, unless it is unset in which case the
|
||||
global setting is used instead.</para>
|
||||
also maintains per-link <varname>DNSOverTLS=</varname> settings. For system DNS servers (see above), only the global
|
||||
<varname>DNSOverTLS=</varname> setting is in effect. For per-link DNS servers the per-link setting is in effect, unless
|
||||
it is unset in which case the global setting is used instead.</para>
|
||||
|
||||
<para>Defaults to off.</para>
|
||||
</listitem>
|
||||
|
@ -292,11 +292,13 @@
|
||||
attached to the request object path, interface and member. Finally, the property callbacks
|
||||
attached to the request object path, interface and member are called. If the final callback
|
||||
returns zero, an error reply is sent back to the caller indicating no matching object for the
|
||||
request was found. Note that you can return a positive integer from a callback without
|
||||
request was found.</para>
|
||||
|
||||
<para>Note that you can return a positive integer from a callback without
|
||||
immediately sending a reply. This informs sd-bus this callback will take responsibility for
|
||||
replying to the request without forcing the callback to produce a reply immediately. This allows
|
||||
a callback to perform any number of asynchronous operations required to construct a reply. Note
|
||||
that if producing a reply takes too long, the method call will time out at the caller.</para>
|
||||
a callback to perform any number of asynchronous operations required to construct a reply.
|
||||
However, if producing a reply takes too long, the method call will time out at the caller.</para>
|
||||
|
||||
<para>If a callback was invoked to handle a request that expects a reply and the callback
|
||||
returns a negative value, the value is interpreted as a negative errno-style error code and sent
|
||||
@ -369,8 +371,8 @@
|
||||
with the message the callback was invoked with. Parameter <replaceable>flags</replaceable> is a
|
||||
combination of flags, see below.</para>
|
||||
|
||||
<constant>SD_BUS_METHOD_WITH_ARGS()</constant> is a shorthand for calling
|
||||
<constant>SD_BUS_METHOD_WITH_ARGS_OFFSET()</constant> with an offset of zero.
|
||||
<para><constant>SD_BUS_METHOD_WITH_ARGS()</constant> is a shorthand for calling
|
||||
<constant>SD_BUS_METHOD_WITH_ARGS_OFFSET()</constant> with an offset of zero.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
@ -404,7 +406,7 @@
|
||||
<varlistentry>
|
||||
<term><constant>SD_BUS_SIGNAL_WITH_ARGS()</constant></term>
|
||||
|
||||
<listitem><para>>Declare a D-Bus signal with the name <replaceable>member</replaceable> and
|
||||
<listitem><para>Declare a D-Bus signal with the name <replaceable>member</replaceable> and
|
||||
arguments <replaceable>args</replaceable>. <replaceable>args</replaceable> expects a sequence of
|
||||
argument type/name pairs wrapped in the <constant>SD_BUS_ARGS()</constant> macro. The elements at
|
||||
even indices in this list describe the types of the signal's arguments. The signal's parameter
|
||||
|
@ -89,6 +89,12 @@
|
||||
input parameter; it can be used to propagate errors from the callback handler, it will not receive any
|
||||
error that was received as method reply.)</para>
|
||||
|
||||
<para>The message <parameter>m</parameter> passed to the callback is only borrowed, that is, the callback should
|
||||
not call <citerefentry><refentrytitle>sd_bus_message_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
||||
on it. If the callback wants to hold on to the message beyond the lifetime of the callback, it needs to call
|
||||
<citerefentry><refentrytitle>sd_bus_message_ref</refentrytitle><manvolnum>3</manvolnum></citerefentry> to create a
|
||||
new reference.</para>
|
||||
|
||||
<para>If <parameter>usec</parameter> is zero, the default D-Bus method call timeout is used. See
|
||||
<citerefentry><refentrytitle>sd_bus_get_method_call_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
|
||||
</para>
|
||||
|
@ -57,6 +57,7 @@
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>int sd_bus_message_append_array_space</funcdef>
|
||||
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
|
||||
<paramdef>char <parameter>type</parameter></paramdef>
|
||||
<paramdef>size_t <parameter>size</parameter></paramdef>
|
||||
<paramdef>void **<parameter>ptr</parameter></paramdef>
|
||||
|
@ -44,6 +44,7 @@
|
||||
|
||||
<funcprototype>
|
||||
<funcdef>int <function>sd_bus_message_peek_type</function></funcdef>
|
||||
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
|
||||
<paramdef>char *<parameter>type</parameter></paramdef>
|
||||
<paramdef>const char **<parameter>contents</parameter></paramdef>
|
||||
</funcprototype>
|
||||
|
@ -188,9 +188,9 @@
|
||||
<title>Return Value</title>
|
||||
|
||||
<para>
|
||||
On success, <function>sd_bus_message_read_basic()</function> returns 0 or
|
||||
a positive integer. On failure, it returns a negative errno-style error
|
||||
code.
|
||||
On success, <function>sd_bus_message_read_basic()</function> returns a positive integer.
|
||||
If the end of the currently opened array has been reached, it returns 0.
|
||||
On failure, it returns a negative errno-style error code.
|
||||
</para>
|
||||
|
||||
<refsect2 id='errors'>
|
||||
|
@ -59,7 +59,7 @@
|
||||
message is no longer needed. If <parameter>ret</parameter> is not <constant>NULL</constant>, progress was made, but no message was
|
||||
processed, <parameter>*ret</parameter> is set to <constant>NULL</constant>.</para>
|
||||
|
||||
<para>If a the bus object is connected to an
|
||||
<para>If the bus object is connected to an
|
||||
<citerefentry><refentrytitle>sd-event</refentrytitle><manvolnum>3</manvolnum></citerefentry> event loop (with
|
||||
<citerefentry><refentrytitle>sd_bus_attach_event</refentrytitle><manvolnum>3</manvolnum></citerefentry>), it is not
|
||||
necessary to call <function>sd_bus_process()</function> directly as it is invoked automatically when
|
||||
|
@ -73,8 +73,8 @@
|
||||
|
||||
<refsect1>
|
||||
<title>Configuration</title>
|
||||
<para>For programs started by <command>systemd</command> process resource limits can be set by directive
|
||||
<varname>LimitCore=</varname>, see
|
||||
<para>For programs started by <command>systemd</command>, process resource limits can be set by directive
|
||||
<varname>LimitCORE=</varname>, see
|
||||
<citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
|
||||
</para>
|
||||
|
||||
@ -94,10 +94,10 @@
|
||||
<citerefentry><refentrytitle>systemd-sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
|
||||
</para>
|
||||
|
||||
<para>In order to by used in the <option>--backtrace</option> mode, an appropriate backtrace
|
||||
<para>In order to be used in the <option>--backtrace</option> mode, an appropriate backtrace
|
||||
handler must be installed on the sender side. For example, in case of
|
||||
<citerefentry project='die-net'><refentrytitle>python</refentrytitle><manvolnum>1</manvolnum></citerefentry>, this
|
||||
means a <varname>sys.excepthook</varname> must installed, see
|
||||
means a <varname>sys.excepthook</varname> must be installed, see
|
||||
<ulink url="https://github.com/keszybz/systemd-coredump-python">systemd-coredump-python</ulink>.
|
||||
</para>
|
||||
|
||||
|
@ -109,6 +109,18 @@
|
||||
<entry><filename>/</filename></entry>
|
||||
<entry>On Itanium systems, the first Itanium root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>60d5a7fe-8e7d-435c-b714-3dd8162144e1</entry>
|
||||
<entry><filename>Root Partition (RISCV-V 32)</filename></entry>
|
||||
<entry><filename>/</filename></entry>
|
||||
<entry>On RISC-V 32-bit systems, the first RISCV-V 32-bit root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>72ec70a6-cf74-40e6-bd49-4bda08e8f224</entry>
|
||||
<entry><filename>Root Partition (RISCV-V 64)</filename></entry>
|
||||
<entry><filename>/</filename></entry>
|
||||
<entry>On RISC-V 64-bit systems, the first RISCV-V 64-bit root partition on the disk the EFI ESP is located on is mounted to the root directory <filename>/</filename>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>933ac7e1-2eb4-4f13-b844-0e14e2aef915</entry>
|
||||
<entry>Home Partition</entry>
|
||||
|
@ -361,8 +361,10 @@
|
||||
<listitem><para>Configure the default value for the per-unit <varname>TasksMax=</varname> setting. See
|
||||
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
||||
for details. This setting applies to all unit types that support resource control settings, with the exception
|
||||
of slice units. Defaults to 15%, which equals 4915 with the kernel's defaults on the host, but might be smaller
|
||||
in OS containers.</para></listitem>
|
||||
of slice units. Defaults to 15% of the sysctl setting <varname>kernel.pid_max=</varname> or root cgroup <varname>pids.max</varname>.
|
||||
Kernel has a default value for <varname>kernel.pid_max=</varname> and an algorithm of counting in case of more than 32 cores.
|
||||
For example with the default <varname>kernel.pid_max=</varname>, <varname>DefaultTasksMax=</varname> defaults to 4915,
|
||||
but might be greater in other systems or smaller in OS containers.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
|
@ -273,18 +273,21 @@
|
||||
<varlistentry>
|
||||
<term><option>none</option></term>
|
||||
<listitem>
|
||||
<para>Keeps the MAC address assigned by the kernel.</para>
|
||||
<para>Keeps the MAC address assigned by the kernel. Or use the MAC address specified in
|
||||
<varname>MACAddress=</varname>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>An empty string assignment is equivalent to setting <literal>none</literal>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>MACAddress=</varname></term>
|
||||
<listitem>
|
||||
<para>The MAC address to use, if no
|
||||
<varname>MACAddressPolicy=</varname>
|
||||
is specified.</para>
|
||||
<para>The interface MAC address to use. For this setting to take effect,
|
||||
<varname>MACAddressPolicy=</varname> must either be unset, empty, or <literal>none</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
|
@ -84,7 +84,7 @@
|
||||
</row></thead>
|
||||
<tbody>
|
||||
<row><entry><varname>bond</varname></entry>
|
||||
<entry>A bond device is an aggregation of all its slave devices. See <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">Linux Ethernet Bonding Driver HOWTO</ulink> for details.Local configuration</entry></row>
|
||||
<entry>A bond device is an aggregation of all its slave devices. See <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">Linux Ethernet Bonding Driver HOWTO</ulink> for details.</entry></row>
|
||||
|
||||
<row><entry><varname>bridge</varname></entry>
|
||||
<entry>A bridge device is a software switch, and each of its slave devices and the bridge itself are ports of the switch.</entry></row>
|
||||
@ -754,7 +754,8 @@
|
||||
<varlistentry>
|
||||
<term><varname>Id=</varname></term>
|
||||
<listitem>
|
||||
<para>Specifies the Virtual Network Identifier (VNI) to use. Ranges [0-16777215]. This field is mandatory.</para>
|
||||
<para>Specifies the Virtual Network Identifier (VNI) to use, a number between 0 and 16777215. This
|
||||
field is mandatory.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
@ -766,7 +767,7 @@
|
||||
<varlistentry>
|
||||
<term><varname>TOS=</varname></term>
|
||||
<listitem>
|
||||
<para>Specifies the TOS value to use in outgoing packets. Ranges [1-255].</para>
|
||||
<para>Specifies the TOS value to use in outgoing packets. Takes a number between 1 and 255.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
@ -818,8 +819,9 @@
|
||||
<varlistentry>
|
||||
<term><varname>Independent=</varname></term>
|
||||
<listitem>
|
||||
<para>Takes a boolean. When true, the vxlan interface is created without underlying interfaces.
|
||||
Defaults to <literal>false</literal>.</para>
|
||||
<para>Takes a boolean. When true, the vxlan interface is created without any underlying network
|
||||
interface. Defaults to false, which means that a .network file that requests this tunnel using
|
||||
<varname>Tunnel=</varname> is required for the tunnel to be created.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
@ -1276,9 +1278,10 @@
|
||||
<varlistentry>
|
||||
<term><varname>Independent=</varname></term>
|
||||
<listitem>
|
||||
<para>Takes a boolean. When true tunnel does not require .network file. Created as "tunnel@NONE".
|
||||
Defaults to <literal>false</literal>.
|
||||
</para>
|
||||
<para>Takes a boolean. When false (the default), the tunnel is always created over some network
|
||||
device, and a .network file that requests this tunnel using <varname>Tunnel=</varname> is required
|
||||
for the tunnel to be created. When true, the tunnel is created independently of any network as
|
||||
"tunnel@NONE".</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
@ -1770,8 +1773,8 @@
|
||||
<varlistentry>
|
||||
<term><varname>AdActorSystem=</varname></term>
|
||||
<listitem>
|
||||
<para>Specifies the 802.3ad system mac address. This can not be either
|
||||
<constant>NULL</constant> or <constant>Multicast</constant>.</para>
|
||||
<para>Specifies the 802.3ad system MAC address. This cannot be a null or multicast address.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
@ -1948,10 +1951,8 @@
|
||||
<varlistentry>
|
||||
<term><varname>Independent=</varname></term>
|
||||
<listitem>
|
||||
<para>Takes a boolean. If set to <literal>no</literal>, the xfrm interface should have an
|
||||
underlying device which can be used for hardware offloading. Defaults to <literal>no</literal>.
|
||||
See <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
||||
for how to configure the underlying device.</para>
|
||||
<para>Takes a boolean. If false (the default), the xfrm interface must have an underlying device
|
||||
which can be used for hardware offloading.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
@ -825,7 +825,7 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
|
||||
configured on another link. By default, an address within each delegated prefix will be
|
||||
assigned, and the prefixes will be announced through IPv6 Router Advertisement when
|
||||
<varname>IPv6SendRA=</varname> is enabled. Such default settings can be configured in
|
||||
[DHCPv6PrefixDelegation] section.</para></listitem>
|
||||
[DHCPv6PrefixDelegation] section. Defaults to disabled.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>IPv6MTUBytes=</varname></term>
|
||||
@ -1170,7 +1170,9 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
|
||||
<varlistentry>
|
||||
<term><varname>FirewallMark=</varname></term>
|
||||
<listitem>
|
||||
<para>Specifies the iptables firewall mark value to match (a number between 1 and 4294967295).</para>
|
||||
<para>Specifies the iptables firewall mark value to match (a number between 1 and
|
||||
4294967295). Optionally, the firewall mask (also a number between 1 and 4294967295) can be
|
||||
suffixed with a slash (<literal>/</literal>), e.g., <literal>7/255</literal>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
@ -2086,9 +2088,11 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
|
||||
<varlistentry>
|
||||
<term><varname>DHCPv6Client=</varname></term>
|
||||
<listitem>
|
||||
<para>Takes a boolean, or the special value <literal>always</literal>. When true (the default), the DHCPv6 client will be started when the
|
||||
RA has the managed or other information flag. If set to <literal>always</literal>, the DHCPv6 client will be started even if there is no
|
||||
managed or other information flag in the RA.</para>
|
||||
<para>Takes a boolean, or the special value <literal>always</literal>. When true or
|
||||
<literal>always</literal>, the DHCPv6 client will be started when the RA has the managed or
|
||||
other information flag. If set to <literal>always</literal>, the DHCPv6 client will also be
|
||||
started in managed mode when neither managed nor other information flag is set in the RA.
|
||||
Defaults to true.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
@ -1734,10 +1734,9 @@
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>The following specifiers are interpreted in the Install
|
||||
section: %n, %N, %p, %i, %j, %g, %G, %U, %u, %m, %H, %b, %v. For their
|
||||
meaning see the next section.
|
||||
</para>
|
||||
<para>The following specifiers are interpreted in the Install section:
|
||||
%a, %b, %B, %g, %G, %H, %i, %j, %l, %m, %n, %N, %o, %p, %u, %U, %v, %w, %W, %%.
|
||||
For their meaning see the next section.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
@ -1787,6 +1786,16 @@
|
||||
<entry>Unescaped filename</entry>
|
||||
<entry>This is either the unescaped instance name (if applicable) with <filename>/</filename> prepended (if applicable), or the unescaped prefix name prepended with <filename>/</filename>. This implements unescaping according to the rules for escaping absolute file system paths discussed above.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%g</literal></entry>
|
||||
<entry>User group</entry>
|
||||
<entry>This is the name of the group running the service manager instance. In case of the system manager this resolves to <literal>root</literal>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%G</literal></entry>
|
||||
<entry>User GID</entry>
|
||||
<entry>This is the numeric GID of the user running the service manager instance. In case of the system manager this resolves to <literal>0</literal>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%h</literal></entry>
|
||||
<entry>User home directory</entry>
|
||||
@ -1801,11 +1810,6 @@ Note that this setting is <emphasis>not</emphasis> influenced by the <varname>Us
|
||||
<entry>Host name</entry>
|
||||
<entry>The hostname of the running system at the point in time the unit configuration is loaded.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%l</literal></entry>
|
||||
<entry>Short host name</entry>
|
||||
<entry>The hostname of the running system at the point in time the unit configuration is loaded, truncated at the first dot to remove any domain component.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%i</literal></entry>
|
||||
<entry>Instance name</entry>
|
||||
@ -1826,13 +1830,17 @@ Note that this setting is <emphasis>not</emphasis> influenced by the <varname>Us
|
||||
<entry>Unescaped final component of the prefix</entry>
|
||||
<entry>Same as <literal>%j</literal>, but with escaping undone.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%l</literal></entry>
|
||||
<entry>Short host name</entry>
|
||||
<entry>The hostname of the running system at the point in time the unit configuration is loaded, truncated at the first dot to remove any domain component.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%L</literal></entry>
|
||||
<entry>Log directory root</entry>
|
||||
<entry>This is either <filename>/var/log</filename> (for the system manager) or the path <literal>$XDG_CONFIG_HOME</literal> resolves to with <filename index="false">/log</filename> appended (for user managers).</entry>
|
||||
</row>
|
||||
<xi:include href="standard-specifiers.xml" xpointer="m"/>
|
||||
<xi:include href="standard-specifiers.xml" xpointer="o"/>
|
||||
<row>
|
||||
<entry><literal>%n</literal></entry>
|
||||
<entry>Full unit name</entry>
|
||||
@ -1843,6 +1851,7 @@ Note that this setting is <emphasis>not</emphasis> influenced by the <varname>Us
|
||||
<entry>Full unit name</entry>
|
||||
<entry>Same as <literal>%n</literal>, but with the type suffix removed.</entry>
|
||||
</row>
|
||||
<xi:include href="standard-specifiers.xml" xpointer="o"/>
|
||||
<row>
|
||||
<entry><literal>%p</literal></entry>
|
||||
<entry>Prefix name</entry>
|
||||
@ -1869,16 +1878,6 @@ Note that this setting is <emphasis>not</emphasis> influenced by the <varname>Us
|
||||
<entry>This is either <filename>/run/</filename> (for the system manager) or the path <literal>$XDG_RUNTIME_DIR</literal> resolves to (for user managers).</entry>
|
||||
</row>
|
||||
<xi:include href="standard-specifiers.xml" xpointer="T"/>
|
||||
<row>
|
||||
<entry><literal>%g</literal></entry>
|
||||
<entry>User group</entry>
|
||||
<entry>This is the name of the group running the service manager instance. In case of the system manager this resolves to <literal>root</literal>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%G</literal></entry>
|
||||
<entry>User GID</entry>
|
||||
<entry>This is the numeric GID of the user running the service manager instance. In case of the system manager this resolves to <literal>0</literal>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%u</literal></entry>
|
||||
<entry>User name</entry>
|
||||
|
@ -639,6 +639,16 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
|
||||
<entry>System or user cache directory</entry>
|
||||
<entry>In <option>--user</option> mode, this is the same as <varname>$XDG_CACHE_HOME</varname>, and <filename>/var/cache</filename> otherwise.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%g</literal></entry>
|
||||
<entry>User group</entry>
|
||||
<entry>This is the name of the group running the command. In case of the system instance this resolves to <literal>root</literal>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%G</literal></entry>
|
||||
<entry>User GID</entry>
|
||||
<entry>This is the numeric GID of the group running the command. In case of the system instance this resolves to <constant>0</constant>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%h</literal></entry>
|
||||
<entry>User home directory</entry>
|
||||
@ -664,16 +674,6 @@ w- /proc/sys/vm/swappiness - - - - 10</programlisting></para>
|
||||
<entry>In <option>--user</option> mode, this is the same <varname>$XDG_RUNTIME_DIR</varname>, and <filename>/run/</filename> otherwise.</entry>
|
||||
</row>
|
||||
<xi:include href="standard-specifiers.xml" xpointer="T"/>
|
||||
<row>
|
||||
<entry><literal>%g</literal></entry>
|
||||
<entry>User group</entry>
|
||||
<entry>This is the name of the group running the command. In case of the system instance this resolves to <literal>root</literal>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%G</literal></entry>
|
||||
<entry>User GID</entry>
|
||||
<entry>This is the numeric GID of the group running the command. In case of the system instance this resolves to <constant>0</constant>.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><literal>%u</literal></entry>
|
||||
<entry>User name</entry>
|
||||
|
@ -132,7 +132,7 @@
|
||||
<para>The string can be prefixed with a lowercase e (e"string\n") to mark the string as
|
||||
<ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style escaped</ulink>.
|
||||
For example, e"string\n" is parsed as 7 characters: 6 lowercase letters and a newline.
|
||||
This can be useful for writting special characters when a kernel driver requires them.</para>
|
||||
This can be useful for writing special characters when a kernel driver requires them.</para>
|
||||
|
||||
<para>Please note that <constant>NUL</constant> is not allowed in either string variant.</para>
|
||||
</refsect2>
|
||||
|
13
meson.build
13
meson.build
@ -1074,6 +1074,7 @@ else
|
||||
libcurl = []
|
||||
endif
|
||||
conf.set10('HAVE_LIBCURL', have)
|
||||
conf.set10('CURL_NO_OLDIES', get_option('mode') == 'developer')
|
||||
|
||||
want_libidn = get_option('libidn')
|
||||
want_libidn2 = get_option('libidn2')
|
||||
@ -1419,7 +1420,7 @@ if have == 'auto'
|
||||
else
|
||||
have = have == 'true'
|
||||
if have and get_option('mode') != 'developer'
|
||||
error('oomd is not available in release mode (yet)')
|
||||
warning('oomd is not ready for release mode (yet)')
|
||||
endif
|
||||
endif
|
||||
conf.set10('ENABLE_OOMD', have)
|
||||
@ -1594,6 +1595,7 @@ generate_gperfs = find_program('tools/generate-gperfs.py')
|
||||
|
||||
subdir('po')
|
||||
subdir('catalog')
|
||||
subdir('src/libudev')
|
||||
subdir('src/systemd')
|
||||
subdir('src/basic')
|
||||
subdir('src/libsystemd')
|
||||
@ -1673,7 +1675,6 @@ update_dbus_docs_py = find_program('tools/update-dbus-docs.py')
|
||||
# usually, but not always, installed in /bin.
|
||||
public_programs = []
|
||||
|
||||
subdir('src/libudev')
|
||||
subdir('src/shared')
|
||||
subdir('src/core')
|
||||
subdir('src/shutdown')
|
||||
@ -3438,7 +3439,7 @@ endif
|
||||
|
||||
fuzzer_exes = []
|
||||
|
||||
if get_option('tests') != 'false'
|
||||
if fuzz_tests or fuzzer_build
|
||||
foreach tuple : fuzzers
|
||||
sources = tuple[0]
|
||||
link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
|
||||
@ -3560,7 +3561,7 @@ foreach tuple : sanitizers
|
||||
if name != prev
|
||||
if want_tests == 'false'
|
||||
message('Not compiling @0@ because tests is set to false'.format(name))
|
||||
elif slow_tests or fuzz_tests
|
||||
elif fuzz_tests
|
||||
exe = custom_target(
|
||||
name,
|
||||
output : name,
|
||||
@ -3570,12 +3571,12 @@ foreach tuple : sanitizers
|
||||
'@OUTPUT@'],
|
||||
build_by_default : true)
|
||||
else
|
||||
message('Not compiling @0@ because slow-tests/fuzz-tests is set to false'.format(name))
|
||||
message('Not compiling @0@ because fuzz-tests is set to false'.format(name))
|
||||
endif
|
||||
endif
|
||||
prev = name
|
||||
|
||||
if want_tests != 'false' and (slow_tests or fuzz_tests)
|
||||
if fuzz_tests
|
||||
test('@0@:@1@:@2@'.format(b, c, sanitizer),
|
||||
env,
|
||||
env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'],
|
||||
|
126
po/zh_CN.po
126
po/zh_CN.po
@ -6,13 +6,14 @@
|
||||
# Boyuan Yang <073plan@gmail.com>, 2015.
|
||||
# Jeff Bai <jeffbai@aosc.xyz>, 2016.
|
||||
# Charles Lee <lchopn@gmail.com>, 2020.
|
||||
# Whired Planck <fungdaat31@outlook.com>, 2020.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: systemd\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-08-19 18:02+0200\n"
|
||||
"PO-Revision-Date: 2020-09-24 04:29+0000\n"
|
||||
"Last-Translator: Charles Lee <lchopn@gmail.com>\n"
|
||||
"PO-Revision-Date: 2020-11-26 11:35+0000\n"
|
||||
"Last-Translator: Whired Planck <fungdaat31@outlook.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://translate.fedoraproject.org/"
|
||||
"projects/systemd/master/zh_CN/>\n"
|
||||
"Language: zh_CN\n"
|
||||
@ -20,7 +21,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.2.2\n"
|
||||
"X-Generator: Weblate 4.3.2\n"
|
||||
|
||||
#: src/core/org.freedesktop.systemd1.policy.in:22
|
||||
msgid "Send passphrase back to system"
|
||||
@ -67,70 +68,56 @@ msgstr "重新载入 systemd 状态需要认证。"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:13
|
||||
msgid "Create a home area"
|
||||
msgstr ""
|
||||
msgstr "创建一个家区域"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:14
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to reload the systemd state."
|
||||
msgid "Authentication is required to create a user's home area."
|
||||
msgstr "重新载入 systemd 状态需要认证。"
|
||||
msgstr "创建用户家区域需要认证。"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:23
|
||||
msgid "Remove a home area"
|
||||
msgstr ""
|
||||
msgstr "移除一个家区域"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:24
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to reload the systemd state."
|
||||
msgid "Authentication is required to remove a user's home area."
|
||||
msgstr "重新载入 systemd 状态需要认证。"
|
||||
msgstr "移除用户家区域需要认证。"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:33
|
||||
msgid "Check credentials of a home area"
|
||||
msgstr ""
|
||||
msgstr "检查家区域凭证"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:34
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Authentication is required to manage active sessions, users and seats."
|
||||
msgid ""
|
||||
"Authentication is required to check credentials against a user's home area."
|
||||
msgstr "管理活动会话、用户与会话座位需要认证。"
|
||||
msgstr "根据用户家区域检查凭证需要认证。"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:43
|
||||
msgid "Update a home area"
|
||||
msgstr ""
|
||||
msgstr "更新一个家区域"
|
||||
|
||||
# Pay attention to the concept of "seat".
|
||||
#
|
||||
# To fully understand the meaning, please refer to session management in old ConsoleKit and new systemd-logind.
|
||||
#: src/home/org.freedesktop.home1.policy:44
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to attach a device to a seat."
|
||||
msgid "Authentication is required to update a user's home area."
|
||||
msgstr "允许将设备附加至某个会话座位需要认证。"
|
||||
msgstr "更新用户家区域需要认证。"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:53
|
||||
msgid "Resize a home area"
|
||||
msgstr ""
|
||||
msgstr "调整家区域大小"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:54
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to set a wall message"
|
||||
msgid "Authentication is required to resize a user's home area."
|
||||
msgstr "设置 wall 消息需要认证。"
|
||||
msgstr "调整家区域大小需要认证。"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:63
|
||||
msgid "Change password of a home area"
|
||||
msgstr ""
|
||||
msgstr "更改家区域的密码"
|
||||
|
||||
#: src/home/org.freedesktop.home1.policy:64
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Authentication is required to manage active sessions, users and seats."
|
||||
msgid ""
|
||||
"Authentication is required to change the password of a user's home area."
|
||||
msgstr "管理活动会话、用户与会话座位需要认证。"
|
||||
msgstr "更改家区域密码需要认证。"
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:20
|
||||
msgid "Set hostname"
|
||||
@ -148,11 +135,10 @@ msgstr "设置静态主机名"
|
||||
#
|
||||
# There were some discussions, like https://lists.fedoraprojects.org/pipermail/trans-zh_cn/2012-December/001347.html
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:31
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
"Authentication is required to set the statically configured local hostname, "
|
||||
"as well as the pretty hostname."
|
||||
msgstr "设置静态本地主机名或美观主机名需要认证。"
|
||||
msgstr "设定静态本地主机名或美观主机名需要认证。"
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:41
|
||||
msgid "Set machine information"
|
||||
@ -164,13 +150,11 @@ msgstr "设置本地机器信息需要认证。"
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:51
|
||||
msgid "Get product UUID"
|
||||
msgstr ""
|
||||
msgstr "获取产品 UUID"
|
||||
|
||||
#: src/hostname/org.freedesktop.hostname1.policy:52
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to reload '$(unit)'."
|
||||
msgid "Authentication is required to get product UUID."
|
||||
msgstr "重新载入“$(unit)”需要认证。"
|
||||
msgstr "获取产品 UUID 需要认证。"
|
||||
|
||||
#: src/import/org.freedesktop.import1.policy:22
|
||||
msgid "Import a VM or container image"
|
||||
@ -300,10 +284,8 @@ msgid "Allow non-logged-in user to run programs"
|
||||
msgstr "允许未登录用户运行程序"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:118
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to run programs as a non-logged-in user."
|
||||
msgid "Explicit request is required to run programs as a non-logged-in user."
|
||||
msgstr "允许未登录用户运行程序需要认证。"
|
||||
msgstr "要以未登录用户运行程序,需要明确请求。"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:127
|
||||
msgid "Allow non-logged-in users to run programs"
|
||||
@ -389,10 +371,8 @@ msgid ""
|
||||
msgstr "在其它应用程序阻止重启时重启系统需要认证。"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:224
|
||||
#, fuzzy
|
||||
#| msgid "Hibernate the system"
|
||||
msgid "Halt the system"
|
||||
msgstr "休眠系统"
|
||||
msgstr "停止系统"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:225
|
||||
msgid "Authentication is required to halt the system."
|
||||
@ -492,13 +472,11 @@ msgstr "对活动会话进行锁定或解锁需要认证。"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:341
|
||||
msgid "Set the reboot \"reason\" in the kernel"
|
||||
msgstr ""
|
||||
msgstr "在内核中设定重启“原因”"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:342
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to set the system timezone."
|
||||
msgid "Authentication is required to set the reboot \"reason\" in the kernel."
|
||||
msgstr "设置系统时区需要认证。"
|
||||
msgstr "在内核中设定重启“原因”需要认证。"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:352
|
||||
msgid "Indicate to the firmware to boot to setup interface"
|
||||
@ -512,31 +490,23 @@ msgstr "向固件发出启动时进入设置界面的指令需要认证。"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:363
|
||||
msgid "Indicate to the boot loader to boot to the boot loader menu"
|
||||
msgstr ""
|
||||
msgstr "指示引导加载程序启动至引导加载程序菜单"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:364
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Authentication is required to indicate to the firmware to boot to setup "
|
||||
#| "interface."
|
||||
msgid ""
|
||||
"Authentication is required to indicate to the boot loader to boot to the "
|
||||
"boot loader menu."
|
||||
msgstr "向固件发出启动时进入设置界面的指令需要认证。"
|
||||
msgstr "指示引导加载程序启动至引导加载程序菜单需要认证。"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:374
|
||||
msgid "Indicate to the boot loader to boot a specific entry"
|
||||
msgstr ""
|
||||
msgstr "指示引导加载程序启动指定条目"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:375
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Authentication is required to indicate to the firmware to boot to setup "
|
||||
#| "interface."
|
||||
msgid ""
|
||||
"Authentication is required to indicate to the boot loader to boot into a "
|
||||
"specific boot loader entry."
|
||||
msgstr "向固件发出启动时进入设置界面的指令需要认证。"
|
||||
msgstr "指示引导加载程序启动入指定引导加载条目需要认证。"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:385
|
||||
msgid "Set a wall message"
|
||||
@ -548,13 +518,11 @@ msgstr "设置 wall 消息需要认证。"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:395
|
||||
msgid "Change Session"
|
||||
msgstr ""
|
||||
msgstr "更改会话"
|
||||
|
||||
#: src/login/org.freedesktop.login1.policy:396
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to set the local hostname."
|
||||
msgid "Authentication is required to change the virtual terminal."
|
||||
msgstr "设置本地主机名需要认证。"
|
||||
msgstr "更改虚拟终端需要认证。"
|
||||
|
||||
#: src/machine/org.freedesktop.machine1.policy:22
|
||||
msgid "Log into a local container"
|
||||
@ -629,10 +597,8 @@ msgid "Set NTP servers"
|
||||
msgstr "设置 NTP 服务器"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:23
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to set the system time."
|
||||
msgid "Authentication is required to set NTP servers."
|
||||
msgstr "设置系统时间需要认证。"
|
||||
msgstr "设定 NTP 服务器需要认证。"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:33
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:44
|
||||
@ -641,10 +607,8 @@ msgstr "设置 DNS 服务器"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:34
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:45
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to set the system time."
|
||||
msgid "Authentication is required to set DNS servers."
|
||||
msgstr "设置系统时间需要认证。"
|
||||
msgstr "设定 DNS 服务器需要认证。"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:44
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:55
|
||||
@ -653,10 +617,8 @@ msgstr "设置域名"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:45
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:56
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to stop '$(unit)'."
|
||||
msgid "Authentication is required to set domains."
|
||||
msgstr "停止“$(unit)”需要认证。"
|
||||
msgstr "设定域需要认证。"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:55
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:66
|
||||
@ -665,51 +627,43 @@ msgstr "设置默认路由"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:56
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:67
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to set the local hostname."
|
||||
msgid "Authentication is required to set default route."
|
||||
msgstr "设置本地主机名需要认证。"
|
||||
msgstr "设定默认路由需要认证。"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:66
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:77
|
||||
msgid "Enable/disable LLMNR"
|
||||
msgstr ""
|
||||
msgstr "启用/禁用 LLMNR"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:67
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:78
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to hibernate the system."
|
||||
msgid "Authentication is required to enable or disable LLMNR."
|
||||
msgstr "休眠系统需要认证。"
|
||||
msgstr "启用或禁用 LLMNR 需要认证。"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:77
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:88
|
||||
msgid "Enable/disable multicast DNS"
|
||||
msgstr ""
|
||||
msgstr "启用/禁用多播 DNS"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:78
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:89
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to log into the local host."
|
||||
msgid "Authentication is required to enable or disable multicast DNS."
|
||||
msgstr "登入本地主机需要认证。"
|
||||
msgstr "启用或禁用多播 DNS 需要认证。"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:88
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:99
|
||||
msgid "Enable/disable DNS over TLS"
|
||||
msgstr ""
|
||||
msgstr "启用/禁用 DNS over TLS"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:89
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:100
|
||||
#, fuzzy
|
||||
#| msgid "Authentication is required to set the local hostname."
|
||||
msgid "Authentication is required to enable or disable DNS over TLS."
|
||||
msgstr "设置本地主机名需要认证。"
|
||||
msgstr "启用或禁用 DNS over TLS 需要认证。"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:99
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:110
|
||||
msgid "Enable/disable DNSSEC"
|
||||
msgstr ""
|
||||
msgstr "启用/禁用 DNSSEC"
|
||||
|
||||
#: src/network/org.freedesktop.network1.policy:100
|
||||
#: src/resolve/org.freedesktop.resolve1.policy:111
|
||||
|
@ -20,7 +20,7 @@ create_container() {
|
||||
# GPG key from keyserver", so retry a few times with different keyservers.
|
||||
for keyserver in "" "keys.gnupg.net" "keys.openpgp.org" "keyserver.ubuntu.com"; do
|
||||
for retry in {1..5}; do
|
||||
sudo lxc-create -n $CONTAINER -t download -- -d $DISTRO -r $RELEASE -a $ARCH --server us.images.linuxcontainers.org ${keyserver:+--keyserver "$keyserver"} && break 2
|
||||
sudo lxc-create -n $CONTAINER -t download -- -d $DISTRO -r $RELEASE -a $ARCH ${keyserver:+--keyserver "$keyserver"} && break 2
|
||||
sleep $((retry*retry))
|
||||
done
|
||||
done
|
||||
@ -86,7 +86,7 @@ EOF
|
||||
# disable autopkgtests which are not for upstream
|
||||
sed -i '/# NOUPSTREAM/ q' debian/tests/control
|
||||
# enable more unit tests
|
||||
sed -i '/^CONFFLAGS =/ s/=/= --werror -Dtests=unsafe -Dsplit-usr=true -Dslow-tests=true -Dman=true /' debian/rules
|
||||
sed -i '/^CONFFLAGS =/ s/=/= --werror -Dtests=unsafe -Dsplit-usr=true -Dslow-tests=true -Dfuzz-tests=true -Dman=true /' debian/rules
|
||||
# no orig tarball
|
||||
echo '1.0' > debian/source/format
|
||||
|
||||
|
@ -252,6 +252,7 @@ static int get_max_brightness(sd_device *device, unsigned *ret) {
|
||||
if (max_brightness <= 0)
|
||||
return log_device_warning_errno(device, SYNTHETIC_ERRNO(EINVAL), "Maximum brightness is 0, ignoring device.");
|
||||
|
||||
log_device_debug(device, "Maximum brightness is %u", max_brightness);
|
||||
*ret = max_brightness;
|
||||
return 0;
|
||||
}
|
||||
@ -348,6 +349,7 @@ static int read_brightness(sd_device *device, unsigned max_brightness, unsigned
|
||||
goto use_brightness;
|
||||
}
|
||||
|
||||
log_device_debug(device, "Current actual_brightness is %u", brightness);
|
||||
*ret_brightness = brightness;
|
||||
return 0;
|
||||
}
|
||||
@ -366,6 +368,7 @@ use_brightness:
|
||||
"brightness=%u is larger than max_brightness=%u",
|
||||
brightness, max_brightness);
|
||||
|
||||
log_device_debug(device, "Current brightness is %u", brightness);
|
||||
*ret_brightness = brightness;
|
||||
return 0;
|
||||
}
|
||||
@ -456,10 +459,11 @@ static int run(int argc, char *argv[]) {
|
||||
if (r > 0) {
|
||||
r = safe_atou(value, &brightness);
|
||||
if (r < 0) {
|
||||
log_error_errno(r, "Failed to parse saved brightness '%s', removing %s.",
|
||||
value, saved);
|
||||
log_warning_errno(r, "Failed to parse saved brightness '%s', removing %s.",
|
||||
value, saved);
|
||||
(void) unlink(saved);
|
||||
} else {
|
||||
log_debug("Using saved brightness %u.", brightness);
|
||||
if (clamp)
|
||||
(void) clamp_brightness(device, true, max_brightness, &brightness);
|
||||
|
||||
|
@ -50,6 +50,9 @@ int capability_from_name(const char *name) {
|
||||
return sc->id;
|
||||
}
|
||||
|
||||
/* This is the number of capability names we are *compiled* with.
|
||||
* For the max capability number of the currently-running kernel,
|
||||
* use cap_last_cap(). */
|
||||
int capability_list_length(void) {
|
||||
return (int) ELEMENTSOF(capability_names);
|
||||
}
|
||||
|
@ -1875,9 +1875,8 @@ int cg_mask_supported(CGroupMask *ret) {
|
||||
if (r > 0) {
|
||||
_cleanup_free_ char *root = NULL, *controllers = NULL, *path = NULL;
|
||||
|
||||
/* In the unified hierarchy we can read the supported
|
||||
* and accessible controllers from a the top-level
|
||||
* cgroup attribute */
|
||||
/* In the unified hierarchy we can read the supported and accessible controllers from
|
||||
* the top-level cgroup attribute */
|
||||
|
||||
r = cg_get_root_path(&root);
|
||||
if (r < 0)
|
||||
|
@ -1103,7 +1103,7 @@ int copy_file_atomic_full(
|
||||
assert(from);
|
||||
assert(to);
|
||||
|
||||
/* We try to use O_TMPFILE here to create the file if we can. Note that that only works if COPY_REPLACE is not
|
||||
/* We try to use O_TMPFILE here to create the file if we can. Note that this only works if COPY_REPLACE is not
|
||||
* set though as we need to use linkat() for linking the O_TMPFILE file into the file system but that system
|
||||
* call can't replace existing files. Hence, if COPY_REPLACE is set we create a temporary name in the file
|
||||
* system right-away and unconditionally which we then can renameat() to the right name after we completed
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
/* Those that can be escaped or double-quoted.
|
||||
*
|
||||
* Stricly speaking, ! does not need to be escaped, except in interactive
|
||||
* Strictly speaking, ! does not need to be escaped, except in interactive
|
||||
* mode, but let's be extra nice to the user and quote ! in case this
|
||||
* output is ever used in interactive mode. */
|
||||
#define SHELL_NEED_QUOTES SHELL_NEED_ESCAPE GLOB_CHARS "'()<>|&;!"
|
||||
|
@ -810,7 +810,7 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags,
|
||||
*
|
||||
* 3. With CHASE_STEP: in this case only a single step of the normalization is executed, i.e. only the first
|
||||
* symlink or ".." component of the path is resolved, and the resulting path is returned. This is useful if
|
||||
* a caller wants to trace the a path through the file system verbosely. Returns < 0 on error, > 0 if the
|
||||
* a caller wants to trace the path through the file system verbosely. Returns < 0 on error, > 0 if the
|
||||
* path is fully normalized, and == 0 for each normalization step. This may be combined with
|
||||
* CHASE_NONEXISTENT, in which case 1 is returned when a component is not found.
|
||||
*
|
||||
|
@ -291,7 +291,7 @@ int iovw_put(struct iovec_wrapper *iovw, void *data, size_t len) {
|
||||
return -E2BIG;
|
||||
|
||||
if (!GREEDY_REALLOC(iovw->iovec, iovw->size_bytes, iovw->count + 1))
|
||||
return log_oom();
|
||||
return -ENOMEM;
|
||||
|
||||
iovw->iovec[iovw->count++] = IOVEC_MAKE(data, len);
|
||||
return 0;
|
||||
@ -303,7 +303,7 @@ int iovw_put_string_field(struct iovec_wrapper *iovw, const char *field, const c
|
||||
|
||||
x = strjoin(field, value);
|
||||
if (!x)
|
||||
return log_oom();
|
||||
return -ENOMEM;
|
||||
|
||||
r = iovw_put(iovw, x, strlen(x));
|
||||
if (r >= 0)
|
||||
|
@ -248,8 +248,8 @@ int khash_put(khash *h, const void *buffer, size_t size) {
|
||||
|
||||
int khash_put_iovec(khash *h, const struct iovec *iovec, size_t n) {
|
||||
struct msghdr mh = {
|
||||
mh.msg_iov = (struct iovec*) iovec,
|
||||
mh.msg_iovlen = n,
|
||||
.msg_iov = (struct iovec*) iovec,
|
||||
.msg_iovlen = n,
|
||||
};
|
||||
ssize_t k;
|
||||
|
||||
|
@ -16,9 +16,23 @@
|
||||
#endif
|
||||
|
||||
#if defined(__x86_64__) && defined(__ILP32__)
|
||||
#define systemd_SC_arch_bias(x) ((x) | /* __X32_SYSCALL_BIT */ 0x40000000)
|
||||
# define systemd_SC_arch_bias(x) ((x) | /* __X32_SYSCALL_BIT */ 0x40000000)
|
||||
#elif defined(__ia64__)
|
||||
# define systemd_SC_arch_bias(x) (1024 + (x))
|
||||
#elif defined __alpha__
|
||||
# define systemd_SC_arch_bias(x) (110 + (x))
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_SC_arch_bias(x) (4000 + (x))
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_SC_arch_bias(x) (6000 + (x))
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_SC_arch_bias(x) (5000 + (x))
|
||||
# else
|
||||
# error "Unknown MIPS ABI"
|
||||
# endif
|
||||
#else
|
||||
#define systemd_SC_arch_bias(x) (x)
|
||||
# define systemd_SC_arch_bias(x) (x)
|
||||
#endif
|
||||
|
||||
#include "missing_keyctl.h"
|
||||
@ -51,13 +65,11 @@ static inline int missing_pivot_root(const char *new_root, const char *put_old)
|
||||
# define systemd_NR_memfd_create 350
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_memfd_create 4354
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_memfd_create 6318
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_memfd_create 5314
|
||||
# define systemd_NR_memfd_create systemd_SC_arch_bias(354)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_memfd_create systemd_SC_arch_bias(318)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_memfd_create systemd_SC_arch_bias(314)
|
||||
# endif
|
||||
#elif defined __i386__
|
||||
# define systemd_NR_memfd_create 356
|
||||
@ -105,7 +117,7 @@ static inline int missing_memfd_create(const char *name, unsigned int flags) {
|
||||
#elif defined(__aarch64__)
|
||||
# define systemd_NR_getrandom 278
|
||||
#elif defined(__ia64__)
|
||||
# define systemd_NR_getrandom 1339
|
||||
# define systemd_NR_getrandom systemd_SC_arch_bias(318)
|
||||
#elif defined(__m68k__)
|
||||
# define systemd_NR_getrandom 352
|
||||
#elif defined(__s390x__)
|
||||
@ -114,13 +126,11 @@ static inline int missing_memfd_create(const char *name, unsigned int flags) {
|
||||
# define systemd_NR_getrandom 359
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_getrandom 4353
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_getrandom 6317
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_getrandom 5313
|
||||
# define systemd_NR_getrandom systemd_SC_arch_bias(353)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_getrandom systemd_SC_arch_bias(317)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_getrandom systemd_SC_arch_bias(313)
|
||||
# endif
|
||||
#elif defined(__arc__)
|
||||
# define systemd_NR_getrandom 278
|
||||
@ -186,6 +196,14 @@ static inline pid_t missing_gettid(void) {
|
||||
# define systemd_NR_name_to_handle_at 335
|
||||
#elif defined(__arc__)
|
||||
# define systemd_NR_name_to_handle_at 264
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_name_to_handle_at systemd_SC_arch_bias(339)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_name_to_handle_at systemd_SC_arch_bias(303)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_name_to_handle_at systemd_SC_arch_bias(298)
|
||||
# endif
|
||||
#else
|
||||
# warning "name_to_handle_at number is not defined"
|
||||
#endif
|
||||
@ -239,6 +257,14 @@ static inline int missing_name_to_handle_at(int fd, const char *name, struct fil
|
||||
# define systemd_NR_setns 339
|
||||
#elif defined(__arc__)
|
||||
# define systemd_NR_setns 268
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_setns systemd_SC_arch_bias(344)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_setns systemd_SC_arch_bias(308)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_setns systemd_SC_arch_bias(303)
|
||||
# endif
|
||||
#else
|
||||
# warning "setns() syscall number unknown for your architecture"
|
||||
#endif
|
||||
@ -290,13 +316,11 @@ static inline pid_t raw_getpid(void) {
|
||||
# define systemd_NR_renameat2 276
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_renameat2 4351
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_renameat2 6315
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_renameat2 5311
|
||||
# define systemd_NR_renameat2 systemd_SC_arch_bias(351)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_renameat2 systemd_SC_arch_bias(315)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_renameat2 systemd_SC_arch_bias(311)
|
||||
# endif
|
||||
#elif defined __i386__
|
||||
# define systemd_NR_renameat2 353
|
||||
@ -405,6 +429,14 @@ static inline key_serial_t missing_request_key(const char *type, const char *des
|
||||
# define systemd_NR_copy_file_range 379
|
||||
#elif defined __arc__
|
||||
# define systemd_NR_copy_file_range 285
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_copy_file_range systemd_SC_arch_bias(360)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_copy_file_range systemd_SC_arch_bias(324)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_copy_file_range systemd_SC_arch_bias(320)
|
||||
# endif
|
||||
#else
|
||||
# warning "copy_file_range() syscall number unknown for your architecture"
|
||||
#endif
|
||||
@ -457,6 +489,14 @@ static inline ssize_t missing_copy_file_range(int fd_in, loff_t *off_in,
|
||||
# define systemd_NR_bpf 351
|
||||
#elif defined __tilegx__
|
||||
# define systemd_NR_bpf 280
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_bpf systemd_SC_arch_bias(355)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_bpf systemd_SC_arch_bias(319)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_bpf systemd_SC_arch_bias(315)
|
||||
# endif
|
||||
#else
|
||||
# warning "bpf() syscall number unknown for your architecture"
|
||||
#endif
|
||||
@ -507,13 +547,11 @@ static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) {
|
||||
# define systemd_NR_pkey_mprotect 384
|
||||
# elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_pkey_mprotect 4363
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_pkey_mprotect 6327
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_pkey_mprotect 5323
|
||||
# define systemd_NR_pkey_mprotect systemd_SC_arch_bias(363)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_pkey_mprotect systemd_SC_arch_bias(327)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_pkey_mprotect systemd_SC_arch_bias(323)
|
||||
# endif
|
||||
# else
|
||||
# warning "pkey_mprotect() syscall number unknown for your architecture"
|
||||
@ -550,6 +588,14 @@ assert_cc(__NR_pkey_mprotect == systemd_NR_pkey_mprotect);
|
||||
# define systemd_NR_statx 360
|
||||
#elif defined __x86_64__
|
||||
# define systemd_NR_statx systemd_SC_arch_bias(332)
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32
|
||||
# define systemd_NR_statx systemd_SC_arch_bias(366)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_NABI32
|
||||
# define systemd_NR_statx systemd_SC_arch_bias(330)
|
||||
# elif _MIPS_SIM == _MIPS_SIM_ABI64
|
||||
# define systemd_NR_statx systemd_SC_arch_bias(326)
|
||||
# endif
|
||||
#else
|
||||
# warning "statx() syscall number unknown for your architecture"
|
||||
#endif
|
||||
@ -634,23 +680,7 @@ static inline long missing_get_mempolicy(int *mode, unsigned long *nodemask,
|
||||
/* ======================================================================= */
|
||||
|
||||
/* should be always defined, see kernel 39036cd2727395c3369b1051005da74059a85317 */
|
||||
#if defined __alpha__
|
||||
# define systemd_NR_pidfd_send_signal 534
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
|
||||
# define systemd_NR_pidfd_send_signal (424 + 4000)
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
|
||||
# define systemd_NR_pidfd_send_signal (424 + 6000)
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
|
||||
# define systemd_NR_pidfd_send_signal (424 + 5000)
|
||||
# endif
|
||||
#elif defined __ia64__
|
||||
# define systemd_NR_pidfd_send_signal (424 + 1024)
|
||||
#else
|
||||
# define systemd_NR_pidfd_send_signal systemd_SC_arch_bias(424)
|
||||
#endif
|
||||
#define systemd_NR_pidfd_send_signal systemd_SC_arch_bias(424)
|
||||
|
||||
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
|
||||
#if defined __NR_pidfd_send_signal && __NR_pidfd_send_signal >= 0
|
||||
@ -678,23 +708,7 @@ static inline int missing_pidfd_send_signal(int fd, int sig, siginfo_t *info, un
|
||||
#endif
|
||||
|
||||
/* should be always defined, see kernel 7615d9e1780e26e0178c93c55b73309a5dc093d7 */
|
||||
#if defined __alpha__
|
||||
# define systemd_NR_pidfd_open 544
|
||||
#elif defined _MIPS_SIM
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI32 /* o32 */
|
||||
# define systemd_NR_pidfd_open (434 + 4000)
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_NABI32 /* n32 */
|
||||
# define systemd_NR_pidfd_open (434 + 6000)
|
||||
# endif
|
||||
# if _MIPS_SIM == _MIPS_SIM_ABI64 /* n64 */
|
||||
# define systemd_NR_pidfd_open (434 + 5000)
|
||||
# endif
|
||||
#elif defined __ia64__
|
||||
# define systemd_NR_pidfd_open (434 + 1024)
|
||||
#else
|
||||
# define systemd_NR_pidfd_open systemd_SC_arch_bias(434)
|
||||
#endif
|
||||
#define systemd_NR_pidfd_open systemd_SC_arch_bias(434)
|
||||
|
||||
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
|
||||
#if defined __NR_pidfd_open && __NR_pidfd_open >= 0
|
||||
|
@ -19,7 +19,7 @@ bool ratelimit_below(RateLimit *r) {
|
||||
ts = now(CLOCK_MONOTONIC);
|
||||
|
||||
if (r->begin <= 0 ||
|
||||
r->begin + r->interval < ts) {
|
||||
ts - r->begin > r->interval) {
|
||||
r->begin = ts;
|
||||
|
||||
/* Reset counter */
|
||||
|
@ -1144,7 +1144,7 @@ static int mount_start(Unit *u) {
|
||||
return -EAGAIN;
|
||||
|
||||
/* Already on it! */
|
||||
if (m->state == MOUNT_MOUNTING)
|
||||
if (IN_SET(m->state, MOUNT_MOUNTING, MOUNT_MOUNTING_DONE))
|
||||
return 0;
|
||||
|
||||
assert(IN_SET(m->state, MOUNT_DEAD, MOUNT_FAILED));
|
||||
@ -1948,6 +1948,15 @@ static int mount_process_proc_self_mountinfo(Manager *m) {
|
||||
mount_enter_dead(mount, MOUNT_SUCCESS);
|
||||
break;
|
||||
|
||||
case MOUNT_MOUNTING_DONE:
|
||||
/* The mount command may add the corresponding proc mountinfo entry and
|
||||
* then remove it because of an internal error. E.g., fuse.sshfs seems
|
||||
* to do that when the connection fails. See #17617. To handle such the
|
||||
* case, let's once set the state back to mounting. Then, the unit can
|
||||
* correctly enter the failed state later in mount_sigchld(). */
|
||||
mount_set_state(mount, MOUNT_MOUNTING);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "dbus-unit.h"
|
||||
#include "load-dropin.h"
|
||||
#include "log.h"
|
||||
#include "process-util.h"
|
||||
#include "scope.h"
|
||||
#include "serialize.h"
|
||||
#include "special.h"
|
||||
@ -235,8 +236,18 @@ static int scope_coldplug(Unit *u) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (!IN_SET(s->deserialized_state, SCOPE_DEAD, SCOPE_FAILED))
|
||||
(void) unit_enqueue_rewatch_pids(u);
|
||||
if (!IN_SET(s->deserialized_state, SCOPE_DEAD, SCOPE_FAILED)) {
|
||||
if (u->pids) {
|
||||
void *pidp;
|
||||
|
||||
SET_FOREACH(pidp, u->pids) {
|
||||
r = unit_watch_pid(u, PTR_TO_PID(pidp), false);
|
||||
if (r < 0 && r != -EEXIST)
|
||||
return r;
|
||||
}
|
||||
} else
|
||||
(void) unit_enqueue_rewatch_pids(u);
|
||||
}
|
||||
|
||||
bus_scope_track_controller(s);
|
||||
|
||||
@ -366,6 +377,10 @@ static int scope_start(Unit *u) {
|
||||
return r;
|
||||
}
|
||||
|
||||
/* Now u->pids have been moved into the scope cgroup, it's not needed
|
||||
* anymore. */
|
||||
u->pids = set_free(u->pids);
|
||||
|
||||
s->result = SCOPE_SUCCESS;
|
||||
|
||||
scope_set_state(s, SCOPE_RUNNING);
|
||||
@ -427,6 +442,7 @@ static int scope_get_timeout(Unit *u, usec_t *timeout) {
|
||||
|
||||
static int scope_serialize(Unit *u, FILE *f, FDSet *fds) {
|
||||
Scope *s = SCOPE(u);
|
||||
void *pidp;
|
||||
|
||||
assert(s);
|
||||
assert(f);
|
||||
@ -438,6 +454,9 @@ static int scope_serialize(Unit *u, FILE *f, FDSet *fds) {
|
||||
if (s->controller)
|
||||
(void) serialize_item(f, "controller", s->controller);
|
||||
|
||||
SET_FOREACH(pidp, u->pids)
|
||||
serialize_item_format(f, "pids", PID_FMT, PTR_TO_PID(pidp));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -473,6 +492,20 @@ static int scope_deserialize_item(Unit *u, const char *key, const char *value, F
|
||||
if (r < 0)
|
||||
return log_oom();
|
||||
|
||||
} else if (streq(key, "pids")) {
|
||||
pid_t pid;
|
||||
|
||||
if (parse_pid(value, &pid) < 0)
|
||||
log_unit_debug(u, "Failed to parse pids value: %s", value);
|
||||
else {
|
||||
r = set_ensure_allocated(&u->pids, NULL);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = set_put(u->pids, PID_TO_PTR(pid));
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
} else
|
||||
log_unit_debug(u, "Unknown serialization key: %s", key);
|
||||
|
||||
|
@ -177,46 +177,23 @@ int unit_name_printf(const Unit *u, const char* format, char **ret) {
|
||||
* This will use the passed string as format string and replace the following specifiers (which should all be
|
||||
* safe for inclusion in unit names):
|
||||
*
|
||||
* %n: the full id of the unit (foo@bar.waldo)
|
||||
* %N: the id of the unit without the suffix (foo@bar)
|
||||
* %p: the prefix (foo)
|
||||
* %n: the full id of the unit (foo-aaa@bar.waldo)
|
||||
* %N: the id of the unit without the suffix (foo-aaa@bar)
|
||||
* %p: the prefix (foo-aaa)
|
||||
* %i: the instance (bar)
|
||||
*
|
||||
* %U: the UID of the running user
|
||||
* %u: the username of the running user
|
||||
*
|
||||
* %m: the machine ID of the running system
|
||||
* %b: the boot ID of the running system
|
||||
* %H: the hostname of the running system
|
||||
* %v: the kernel version
|
||||
* %a: the native userspace architecture
|
||||
* %o: the OS ID according to /etc/os-release
|
||||
* %w: the OS version ID, according to /etc/os-release
|
||||
* %B: the OS build ID, according to /etc/os-release
|
||||
* %W: the OS variant ID, according to /etc/os-release
|
||||
* %j: the last componet of the prefix (aaa)
|
||||
*/
|
||||
|
||||
const Specifier table[] = {
|
||||
{ 'i', specifier_string, u->instance },
|
||||
{ 'j', specifier_last_component, NULL },
|
||||
{ 'n', specifier_string, u->id },
|
||||
{ '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 },
|
||||
{ 'U', specifier_user_id, NULL },
|
||||
{ 'u', specifier_user_name, NULL },
|
||||
COMMON_SYSTEM_SPECIFIERS,
|
||||
|
||||
{ 'm', specifier_machine_id, NULL },
|
||||
{ 'b', specifier_boot_id, NULL },
|
||||
{ 'H', specifier_host_name, NULL },
|
||||
{ 'v', specifier_kernel_release, NULL },
|
||||
{ 'a', specifier_architecture, NULL },
|
||||
{ 'o', specifier_os_id, NULL },
|
||||
{ 'w', specifier_os_version_id, NULL },
|
||||
{ 'B', specifier_os_build_id, NULL },
|
||||
{ 'W', specifier_os_variant_id, NULL },
|
||||
COMMON_CREDS_SPECIFIERS,
|
||||
{}
|
||||
};
|
||||
|
||||
@ -237,19 +214,15 @@ int unit_full_printf(const Unit *u, const char *format, char **ret) {
|
||||
* %r: where units in this slice are placed in the cgroup tree (deprecated)
|
||||
* %R: the root of this systemd's instance tree (deprecated)
|
||||
*
|
||||
* %t: the runtime directory root (e.g. /run or $XDG_RUNTIME_DIR)
|
||||
* %S: the state directory root (e.g. /var/lib or $XDG_CONFIG_HOME)
|
||||
* %C: the cache directory root (e.g. /var/cache or $XDG_CACHE_HOME)
|
||||
* %L: the log directory root (e.g. /var/log or $XDG_CONFIG_HOME/log)
|
||||
* %E: the configuration directory root (e.g. /etc or $XDG_CONFIG_HOME)
|
||||
* %T: the temporary directory (e.g. /tmp, or $TMPDIR, $TEMP, $TMP)
|
||||
* %V: the temporary directory for large, persistent stuff (e.g. /var/tmp, or $TMPDIR, $TEMP, $TMP)
|
||||
* %L: the log directory root (e.g. /var/log or $XDG_CONFIG_HOME/log)
|
||||
* %S: the state directory root (e.g. /var/lib or $XDG_CONFIG_HOME)
|
||||
* %t: the runtime directory root (e.g. /run or $XDG_RUNTIME_DIR)
|
||||
*
|
||||
* %h: the homedir of the running user
|
||||
* %s: the shell of the running user
|
||||
*
|
||||
* %v: `uname -r` of the running system
|
||||
*
|
||||
* NOTICE: When you add new entries here, please be careful: specifiers which depend on settings of the unit
|
||||
* file itself are broken by design, as they would resolve differently depending on whether they are used
|
||||
* before or after the relevant configuration setting. Hence: don't add them.
|
||||
@ -260,40 +233,35 @@ int unit_full_printf(const Unit *u, const char *format, char **ret) {
|
||||
assert(ret);
|
||||
|
||||
const Specifier table[] = {
|
||||
{ 'n', specifier_string, u->id },
|
||||
{ 'N', specifier_prefix_and_instance, NULL },
|
||||
{ 'p', specifier_prefix, NULL },
|
||||
{ 'P', specifier_prefix_unescaped, NULL },
|
||||
{ 'i', specifier_string, u->instance },
|
||||
{ 'I', specifier_instance_unescaped, NULL },
|
||||
{ 'j', specifier_last_component, NULL },
|
||||
{ 'J', specifier_last_component_unescaped, NULL },
|
||||
{ 'n', specifier_string, u->id },
|
||||
{ 'N', specifier_prefix_and_instance, NULL },
|
||||
{ 'p', specifier_prefix, NULL },
|
||||
{ 'P', specifier_prefix_unescaped, NULL },
|
||||
|
||||
{ 'f', specifier_filename, NULL },
|
||||
|
||||
{ 'c', specifier_cgroup, NULL },
|
||||
{ 'r', specifier_cgroup_slice, NULL },
|
||||
{ 'R', specifier_cgroup_root, NULL },
|
||||
|
||||
{ 't', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_RUNTIME) },
|
||||
{ 'S', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_STATE) },
|
||||
{ 'C', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_CACHE) },
|
||||
{ 'L', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_LOGS) },
|
||||
{ 'E', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_CONFIGURATION) },
|
||||
{ 'T', specifier_tmp_dir, NULL },
|
||||
{ 'V', specifier_var_tmp_dir, NULL },
|
||||
{ 'L', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_LOGS) },
|
||||
{ 'S', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_STATE) },
|
||||
{ 't', specifier_special_directory, UINT_TO_PTR(EXEC_DIRECTORY_RUNTIME) },
|
||||
|
||||
{ 'g', specifier_group_name, NULL },
|
||||
{ 'G', specifier_group_id, NULL },
|
||||
{ 'U', specifier_user_id, NULL },
|
||||
{ 'u', specifier_user_name, NULL },
|
||||
{ 'h', specifier_user_home, NULL },
|
||||
{ 's', specifier_user_shell, NULL },
|
||||
|
||||
{ 'm', specifier_machine_id, NULL },
|
||||
{ 'H', specifier_host_name, NULL },
|
||||
{ 'l', specifier_short_host_name, NULL },
|
||||
{ 'b', specifier_boot_id, NULL },
|
||||
{ 'v', specifier_kernel_release, NULL },
|
||||
COMMON_SYSTEM_SPECIFIERS,
|
||||
|
||||
COMMON_CREDS_SPECIFIERS,
|
||||
|
||||
COMMON_TMP_SPECIFIERS,
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -353,7 +353,8 @@ static char *disk_mount_point(const char *label) {
|
||||
|
||||
/* Yeah, we don't support native systemd unit files here for now */
|
||||
|
||||
if (asprintf(&device, "/dev/mapper/%s", label) < 0)
|
||||
device = strjoin("/dev/mapper/", label);
|
||||
if (!device)
|
||||
return NULL;
|
||||
|
||||
f = setmntent(fstab_path(), "re");
|
||||
@ -447,10 +448,9 @@ static int get_password(
|
||||
|
||||
assert(strv_length(passwords2) == 1);
|
||||
|
||||
if (!streq(passwords[0], passwords2[0])) {
|
||||
log_warning("Passwords did not match, retrying.");
|
||||
return -EAGAIN;
|
||||
}
|
||||
if (!streq(passwords[0], passwords2[0]))
|
||||
return log_warning_errno(SYNTHETIC_ERRNO(EAGAIN),
|
||||
"Passwords did not match, retrying.");
|
||||
}
|
||||
|
||||
strv_uniq(passwords);
|
||||
|
@ -625,6 +625,15 @@ static int acquire_home(
|
||||
do_auth = true;
|
||||
}
|
||||
|
||||
/* Later PAM modules may need the auth token, but only during pam_authenticate. */
|
||||
if (please_authenticate && !strv_isempty(secret->password)) {
|
||||
r = pam_set_item(handle, PAM_AUTHTOK, *secret->password);
|
||||
if (r < 0) {
|
||||
pam_syslog(handle, LOG_ERR, "Failed to set PAM auth token: %s", pam_strerror(handle, r));
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
r = pam_set_data(handle, fd_field, FD_TO_PTR(acquired_fd), cleanup_home_fd);
|
||||
if (r < 0) {
|
||||
pam_syslog(handle, LOG_ERR, "Failed to set PAM bus data: %s", pam_strerror(handle, r));
|
||||
|
@ -50,7 +50,7 @@ static int curl_glue_on_io(sd_event_source *s, int fd, uint32_t revents, void *u
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int curl_glue_socket_callback(CURLM *curl, curl_socket_t s, int action, void *userdata, void *socketp) {
|
||||
static int curl_glue_socket_callback(CURL *curl, curl_socket_t s, int action, void *userdata, void *socketp) {
|
||||
sd_event_source *io = socketp;
|
||||
CurlGlue *g = userdata;
|
||||
uint32_t events = 0;
|
||||
@ -178,7 +178,7 @@ CurlGlue *curl_glue_unref(CurlGlue *g) {
|
||||
|
||||
int curl_glue_new(CurlGlue **glue, sd_event *event) {
|
||||
_cleanup_(curl_glue_unrefp) CurlGlue *g = NULL;
|
||||
_cleanup_(curl_multi_cleanupp) CURL *c = NULL;
|
||||
_cleanup_(curl_multi_cleanupp) CURLM *c = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *e = NULL;
|
||||
int r;
|
||||
|
||||
|
@ -35,5 +35,5 @@ int curl_header_strdup(const void *contents, size_t sz, const char *field, char
|
||||
int curl_parse_http_time(const char *t, usec_t *ret);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(CURL*, curl_easy_cleanup);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(CURL*, curl_multi_cleanup);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(CURLM*, curl_multi_cleanup);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(struct curl_slist*, curl_slist_free_all);
|
||||
|
@ -2019,13 +2019,12 @@ static int verify(sd_journal *j) {
|
||||
#endif
|
||||
|
||||
k = journal_file_verify(f, arg_verify_key, &first, &validated, &last, true);
|
||||
if (k == -EINVAL) {
|
||||
if (k == -EINVAL)
|
||||
/* If the key was invalid give up right-away. */
|
||||
return k;
|
||||
} else if (k < 0) {
|
||||
log_warning_errno(k, "FAIL: %s (%m)", f->path);
|
||||
r = k;
|
||||
} else {
|
||||
else if (k < 0)
|
||||
r = log_warning_errno(k, "FAIL: %s (%m)", f->path);
|
||||
else {
|
||||
char a[FORMAT_TIMESTAMP_MAX], b[FORMAT_TIMESTAMP_MAX], c[FORMAT_TIMESPAN_MAX];
|
||||
log_info("PASS: %s", f->path);
|
||||
|
||||
@ -2374,10 +2373,8 @@ int main(int argc, char *argv[]) {
|
||||
int q;
|
||||
|
||||
q = journal_directory_vacuum(d->path, arg_vacuum_size, arg_vacuum_n_files, arg_vacuum_time, NULL, !arg_quiet);
|
||||
if (q < 0) {
|
||||
log_error_errno(q, "Failed to vacuum %s: %m", d->path);
|
||||
r = q;
|
||||
}
|
||||
if (q < 0)
|
||||
r = log_error_errno(q, "Failed to vacuum %s: %m", d->path);
|
||||
}
|
||||
|
||||
goto finish;
|
||||
|
@ -20,7 +20,7 @@ MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
|
||||
|
||||
BOOT_ROOT=${ENTRY_DIR_ABS%/$MACHINE_ID/$KERNEL_VERSION}
|
||||
BOOT_MNT=$(stat -c %m $BOOT_ROOT)
|
||||
ENTRY_DIR=/${ENTRY_DIR_ABS#$BOOT_MNT}
|
||||
ENTRY_DIR=${ENTRY_DIR_ABS#$BOOT_MNT}
|
||||
|
||||
if [[ $COMMAND == remove ]]; then
|
||||
rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf"
|
||||
|
@ -188,8 +188,7 @@ int sd_dhcp6_client_set_mac(
|
||||
|
||||
assert_return(client, -EINVAL);
|
||||
assert_return(addr, -EINVAL);
|
||||
assert_return(addr_len > 0 && addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
|
||||
assert_return(arp_type > 0, -EINVAL);
|
||||
assert_return(addr_len <= MAX_MAC_ADDR_LEN, -EINVAL);
|
||||
|
||||
assert_return(IN_SET(client->state, DHCP6_STATE_STOPPED), -EBUSY);
|
||||
|
||||
@ -197,8 +196,11 @@ int sd_dhcp6_client_set_mac(
|
||||
assert_return(addr_len == ETH_ALEN, -EINVAL);
|
||||
else if (arp_type == ARPHRD_INFINIBAND)
|
||||
assert_return(addr_len == INFINIBAND_ALEN, -EINVAL);
|
||||
else
|
||||
return -EINVAL;
|
||||
else {
|
||||
client->arp_type = ARPHRD_NONE;
|
||||
client->mac_addr_len = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (client->mac_addr_len == addr_len &&
|
||||
memcmp(&client->mac_addr, addr, addr_len) == 0)
|
||||
@ -1743,8 +1745,7 @@ int sd_dhcp6_client_start(sd_dhcp6_client *client) {
|
||||
}
|
||||
|
||||
log_dhcp6_client(client, "Started in %s mode",
|
||||
client->information_request? "Information request":
|
||||
"Managed");
|
||||
client->information_request ? "Information request" : "Managed");
|
||||
|
||||
return client_start(client, state);
|
||||
}
|
||||
|
@ -420,7 +420,8 @@ static int enumerator_scan_dir_and_add_devices(sd_device_enumerator *enumerator,
|
||||
|
||||
dir = opendir(path);
|
||||
if (!dir)
|
||||
return -errno;
|
||||
/* this is necessarily racey, so ignore missing directories */
|
||||
return (errno == ENOENT && (subdir1 || subdir2)) ? 0 : -errno;
|
||||
|
||||
FOREACH_DIRENT_ALL(dent, dir, return -errno) {
|
||||
_cleanup_(sd_device_unrefp) sd_device *device = NULL;
|
||||
@ -743,16 +744,12 @@ static int enumerator_scan_devices_all(sd_device_enumerator *enumerator) {
|
||||
int k;
|
||||
|
||||
k = enumerator_scan_dir(enumerator, "bus", "devices", NULL);
|
||||
if (k < 0) {
|
||||
log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/bus: %m");
|
||||
r = k;
|
||||
}
|
||||
if (k < 0)
|
||||
r = log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/bus: %m");
|
||||
|
||||
k = enumerator_scan_dir(enumerator, "class", NULL, NULL);
|
||||
if (k < 0) {
|
||||
log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/class: %m");
|
||||
r = k;
|
||||
}
|
||||
if (k < 0)
|
||||
r = log_debug_errno(k, "sd-device-enumerator: Failed to scan /sys/class: %m");
|
||||
}
|
||||
|
||||
return r;
|
||||
@ -870,10 +867,8 @@ int device_enumerator_scan_subsystems(sd_device_enumerator *enumerator) {
|
||||
/* modules */
|
||||
if (match_subsystem(enumerator, "module")) {
|
||||
k = enumerator_scan_dir_and_add_devices(enumerator, "module", NULL, NULL);
|
||||
if (k < 0) {
|
||||
log_debug_errno(k, "sd-device-enumerator: Failed to scan modules: %m");
|
||||
r = k;
|
||||
}
|
||||
if (k < 0)
|
||||
r = log_debug_errno(k, "sd-device-enumerator: Failed to scan modules: %m");
|
||||
}
|
||||
|
||||
if (access("/sys/subsystem", F_OK) >= 0)
|
||||
@ -884,19 +879,15 @@ int device_enumerator_scan_subsystems(sd_device_enumerator *enumerator) {
|
||||
/* subsystems (only buses support coldplug) */
|
||||
if (match_subsystem(enumerator, "subsystem")) {
|
||||
k = enumerator_scan_dir_and_add_devices(enumerator, subsysdir, NULL, NULL);
|
||||
if (k < 0) {
|
||||
log_debug_errno(k, "sd-device-enumerator: Failed to scan subsystems: %m");
|
||||
r = k;
|
||||
}
|
||||
if (k < 0)
|
||||
r = log_debug_errno(k, "sd-device-enumerator: Failed to scan subsystems: %m");
|
||||
}
|
||||
|
||||
/* subsystem drivers */
|
||||
if (match_subsystem(enumerator, "drivers")) {
|
||||
k = enumerator_scan_dir(enumerator, subsysdir, "drivers", "drivers");
|
||||
if (k < 0) {
|
||||
log_debug_errno(k, "sd-device-enumerator: Failed to scan drivers: %m");
|
||||
r = k;
|
||||
}
|
||||
if (k < 0)
|
||||
r = log_debug_errno(k, "sd-device-enumerator: Failed to scan drivers: %m");
|
||||
}
|
||||
|
||||
typesafe_qsort(enumerator->devices, enumerator->n_devices, device_compare);
|
||||
|
@ -8,9 +8,19 @@
|
||||
#include "set.h"
|
||||
#include "time-util.h"
|
||||
|
||||
#define LATEST_UDEV_DATABASE_VERSION 1
|
||||
|
||||
struct sd_device {
|
||||
unsigned n_ref;
|
||||
|
||||
/* The database version indicates the supported features by the udev database.
|
||||
* This is saved and parsed in V field.
|
||||
*
|
||||
* 0: None of the following features are supported (systemd version <= 246).
|
||||
* 1: The current tags (Q) and the database version (V) features are implemented (>= 247).
|
||||
*/
|
||||
unsigned database_version;
|
||||
|
||||
int watch_handle;
|
||||
|
||||
sd_device *parent;
|
||||
@ -88,7 +98,9 @@ struct sd_device {
|
||||
|
||||
int device_new_aux(sd_device **ret);
|
||||
int device_add_property_aux(sd_device *device, const char *key, const char *value, bool db);
|
||||
int device_add_property_internal(sd_device *device, const char *key, const char *value);
|
||||
static inline int device_add_property_internal(sd_device *device, const char *key, const char *value) {
|
||||
return device_add_property_aux(device, key, value, false);
|
||||
}
|
||||
int device_read_uevent_file(sd_device *device);
|
||||
|
||||
int device_set_syspath(sd_device *device, const char *_syspath, bool verify);
|
||||
|
@ -468,6 +468,10 @@ int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len) {
|
||||
|
||||
i += end - key + 1;
|
||||
|
||||
/* netlink messages for some devices contain an unwanted newline at the end of value.
|
||||
* Let's drop the newline and remaining characters after the newline. */
|
||||
truncate_nl(key);
|
||||
|
||||
r = device_append(device, key, &major, &minor);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -944,6 +948,10 @@ int device_update_db(sd_device *device) {
|
||||
|
||||
SET_FOREACH(tag, device->current_tags)
|
||||
fprintf(f, "Q:%s\n", tag); /* Current tag */
|
||||
|
||||
/* Always write the latest database version here, instead of the value stored in
|
||||
* device->database_version, as which may be 0. */
|
||||
fputs("V:" STRINGIFY(LATEST_UDEV_DATABASE_VERSION) "\n", f);
|
||||
}
|
||||
|
||||
r = fflush_and_check(f);
|
||||
|
@ -128,10 +128,6 @@ int device_add_property_aux(sd_device *device, const char *_key, const char *_va
|
||||
return 0;
|
||||
}
|
||||
|
||||
int device_add_property_internal(sd_device *device, const char *key, const char *value) {
|
||||
return device_add_property_aux(device, key, value, false);
|
||||
}
|
||||
|
||||
int device_set_syspath(sd_device *device, const char *_syspath, bool verify) {
|
||||
_cleanup_free_ char *syspath = NULL;
|
||||
const char *devpath;
|
||||
@ -1208,6 +1204,12 @@ static int handle_db_line(sd_device *device, char key, const char *value) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
break;
|
||||
case 'V':
|
||||
r = safe_atou(value, &device->database_version);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
break;
|
||||
default:
|
||||
log_device_debug(device, "sd-device: Unknown key '%c' in device db, ignoring", key);
|
||||
@ -1442,11 +1444,26 @@ _public_ const char *sd_device_get_tag_next(sd_device *device) {
|
||||
return v;
|
||||
}
|
||||
|
||||
static bool device_database_supports_current_tags(sd_device *device) {
|
||||
assert(device);
|
||||
|
||||
(void) device_read_db(device);
|
||||
|
||||
/* The current tags (saved in Q field) feature is implemented in database version 1.
|
||||
* If the database version is 0, then the tags (NOT current tags, saved in G field) are not
|
||||
* sticky. Thus, we can safely bypass the operations for the current tags (Q) to tags (G). */
|
||||
|
||||
return device->database_version >= 1;
|
||||
}
|
||||
|
||||
_public_ const char *sd_device_get_current_tag_first(sd_device *device) {
|
||||
void *v;
|
||||
|
||||
assert_return(device, NULL);
|
||||
|
||||
if (!device_database_supports_current_tags(device))
|
||||
return sd_device_get_tag_first(device);
|
||||
|
||||
(void) device_read_db(device);
|
||||
|
||||
device->current_tags_iterator_generation = device->tags_generation;
|
||||
@ -1461,6 +1478,9 @@ _public_ const char *sd_device_get_current_tag_next(sd_device *device) {
|
||||
|
||||
assert_return(device, NULL);
|
||||
|
||||
if (!device_database_supports_current_tags(device))
|
||||
return sd_device_get_tag_next(device);
|
||||
|
||||
(void) device_read_db(device);
|
||||
|
||||
if (device->current_tags_iterator_generation != device->tags_generation)
|
||||
@ -1763,6 +1783,9 @@ _public_ int sd_device_has_current_tag(sd_device *device, const char *tag) {
|
||||
assert_return(device, -EINVAL);
|
||||
assert_return(tag, -EINVAL);
|
||||
|
||||
if (!device_database_supports_current_tags(device))
|
||||
return sd_device_has_tag(device, tag);
|
||||
|
||||
(void) device_read_db(device);
|
||||
|
||||
return set_contains(device->current_tags, tag);
|
||||
|
@ -469,7 +469,7 @@ int config_parse_ad_actor_system(
|
||||
}
|
||||
if (ether_addr_is_null(&n) || (n.ether_addr_octet[0] & 0x01)) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0,
|
||||
"Not a valid MAC address %s, can not be null or multicast. Ignoring assignment.",
|
||||
"Not an appropriate MAC address %s, cannot be null or multicast. Ignoring assignment.",
|
||||
rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
@ -649,7 +649,7 @@ int netdev_join(NetDev *netdev, Link *link, link_netlink_message_handler_t callb
|
||||
return r;
|
||||
break;
|
||||
default:
|
||||
assert_not_reached("Can not join independent netdev");
|
||||
assert_not_reached("Cannot join independent netdev");
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -58,9 +58,16 @@ void network_adjust_dhcp(Network *network) {
|
||||
}
|
||||
}
|
||||
|
||||
static struct DUID fallback_duid = { .type = DUID_TYPE_EN };
|
||||
DUID* link_get_duid(Link *link) {
|
||||
if (link->network->duid.type != _DUID_TYPE_INVALID)
|
||||
return &link->network->duid;
|
||||
else if (link->hw_addr.length == 0 &&
|
||||
(link->manager->duid.type == DUID_TYPE_LLT ||
|
||||
link->manager->duid.type == DUID_TYPE_LL))
|
||||
/* Fallback to DUID that works without mac addresses.
|
||||
* This is useful for tunnel devices without mac address. */
|
||||
return &fallback_duid;
|
||||
else
|
||||
return &link->manager->duid;
|
||||
}
|
||||
|
@ -1163,13 +1163,17 @@ static int ndisc_router_handler(Link *link, sd_ndisc_router *rt) {
|
||||
if (r < 0)
|
||||
return log_link_error_errno(link, r, "Failed to get RA flags: %m");
|
||||
|
||||
if ((flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER) && link->network->ipv6_accept_ra_start_dhcp6_client)) {
|
||||
if ((flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER) &&
|
||||
link->network->ipv6_accept_ra_start_dhcp6_client != IPV6_ACCEPT_RA_START_DHCP6_CLIENT_NO) ||
|
||||
link->network->ipv6_accept_ra_start_dhcp6_client == IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS) {
|
||||
|
||||
if (link->network->ipv6_accept_ra_start_dhcp6_client == IPV6_ACCEPT_RA_START_DHCP6_CLIENT_ALWAYS)
|
||||
r = dhcp6_request_address(link, false);
|
||||
else
|
||||
if (flags & (ND_RA_FLAG_MANAGED | ND_RA_FLAG_OTHER))
|
||||
/* (re)start DHCPv6 client in stateful or stateless mode according to RA flags */
|
||||
r = dhcp6_request_address(link, !(flags & ND_RA_FLAG_MANAGED));
|
||||
else
|
||||
/* When IPv6AcceptRA.DHCPv6Client=always, start dhcp6 client in managed mode
|
||||
* even if router does not have M or O flag. */
|
||||
r = dhcp6_request_address(link, false);
|
||||
if (r < 0 && r != -EBUSY)
|
||||
return log_link_error_errno(link, r, "Could not acquire DHCPv6 lease on NDisc request: %m");
|
||||
else
|
||||
|
@ -422,7 +422,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
|
||||
.ipv6_accept_ra_use_onlink_prefix = true,
|
||||
.ipv6_accept_ra_route_table = RT_TABLE_MAIN,
|
||||
.ipv6_accept_ra_route_table_set = false,
|
||||
.ipv6_accept_ra_start_dhcp6_client = true,
|
||||
.ipv6_accept_ra_start_dhcp6_client = IPV6_ACCEPT_RA_START_DHCP6_CLIENT_YES,
|
||||
|
||||
.can_triple_sampling = -1,
|
||||
.can_termination = -1,
|
||||
|
@ -104,10 +104,6 @@ static void test_oomd_cgroup_context_acquire_and_insert(void) {
|
||||
assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
|
||||
|
||||
assert_se(streq(ctx->path, cgroup));
|
||||
assert_se(ctx->memory_pressure.avg10 == 0);
|
||||
assert_se(ctx->memory_pressure.avg60 == 0);
|
||||
assert_se(ctx->memory_pressure.avg300 == 0);
|
||||
assert_se(ctx->memory_pressure.total == 0);
|
||||
assert_se(ctx->current_memory_usage > 0);
|
||||
assert_se(ctx->memory_min == 0);
|
||||
assert_se(ctx->memory_low == 0);
|
||||
|
@ -918,16 +918,7 @@ static int config_parse_type(
|
||||
}
|
||||
|
||||
static const Specifier specifier_table[] = {
|
||||
{ 'm', specifier_machine_id, NULL },
|
||||
{ 'b', specifier_boot_id, NULL },
|
||||
{ 'H', specifier_host_name, NULL },
|
||||
{ 'l', specifier_short_host_name, NULL },
|
||||
{ 'v', specifier_kernel_release, NULL },
|
||||
{ 'a', specifier_architecture, NULL },
|
||||
{ 'o', specifier_os_id, NULL },
|
||||
{ 'w', specifier_os_version_id, NULL },
|
||||
{ 'B', specifier_os_build_id, NULL },
|
||||
{ 'W', specifier_os_variant_id, NULL },
|
||||
COMMON_SYSTEM_SPECIFIERS,
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -304,7 +304,7 @@ static void process_dmesg_files(PStoreList *list) {
|
||||
* output either. */
|
||||
size_t needed = strlen(pe->dirent.d_name) + strlen(":\n") + pe->content_size + 1;
|
||||
if (!GREEDY_REALLOC(dmesg, dmesg_allocated, dmesg_size + needed)) {
|
||||
log_warning_errno(ENOMEM, "Failed to write dmesg file: %m");
|
||||
log_oom();
|
||||
dmesg_bad = true;
|
||||
continue;
|
||||
}
|
||||
|
@ -145,13 +145,12 @@ static void print_source(uint64_t flags, usec_t rtt) {
|
||||
|
||||
printf("\n%s-- Information acquired via", ansi_grey());
|
||||
|
||||
if (flags != 0)
|
||||
printf(" protocol%s%s%s%s%s",
|
||||
flags & SD_RESOLVED_DNS ? " DNS" :"",
|
||||
flags & SD_RESOLVED_LLMNR_IPV4 ? " LLMNR/IPv4" : "",
|
||||
flags & SD_RESOLVED_LLMNR_IPV6 ? " LLMNR/IPv6" : "",
|
||||
flags & SD_RESOLVED_MDNS_IPV4 ? " mDNS/IPv4" : "",
|
||||
flags & SD_RESOLVED_MDNS_IPV6 ? " mDNS/IPv6" : "");
|
||||
printf(" protocol%s%s%s%s%s",
|
||||
flags & SD_RESOLVED_DNS ? " DNS" :"",
|
||||
flags & SD_RESOLVED_LLMNR_IPV4 ? " LLMNR/IPv4" : "",
|
||||
flags & SD_RESOLVED_LLMNR_IPV6 ? " LLMNR/IPv6" : "",
|
||||
flags & SD_RESOLVED_MDNS_IPV4 ? " mDNS/IPv4" : "",
|
||||
flags & SD_RESOLVED_MDNS_IPV6 ? " mDNS/IPv6" : "");
|
||||
|
||||
assert_se(format_timespan(rtt_str, sizeof(rtt_str), rtt, 100));
|
||||
|
||||
|
@ -1795,6 +1795,7 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
|
||||
_cleanup_(dnssd_service_freep) DnssdService *service = NULL;
|
||||
_cleanup_(sd_bus_track_unrefp) sd_bus_track *bus_track = NULL;
|
||||
_cleanup_free_ char *path = NULL;
|
||||
_cleanup_free_ char *instance_name = NULL;
|
||||
Manager *m = userdata;
|
||||
DnssdService *s = NULL;
|
||||
const char *name;
|
||||
@ -1835,10 +1836,6 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
|
||||
if (!dnssd_srv_type_is_valid(type))
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "DNS-SD service type '%s' is invalid", type);
|
||||
|
||||
r = dnssd_render_instance_name(name_template, NULL);
|
||||
if (r < 0)
|
||||
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "DNS-SD service name '%s' is invalid", name_template);
|
||||
|
||||
service->name = strdup(name);
|
||||
if (!service->name)
|
||||
return log_oom();
|
||||
@ -1851,6 +1848,10 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
|
||||
if (!service->type)
|
||||
return log_oom();
|
||||
|
||||
r = dnssd_render_instance_name(service, &instance_name);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = sd_bus_message_enter_container(message, SD_BUS_TYPE_ARRAY, "a{say}");
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -229,7 +229,20 @@ int config_parse_dnssd_service_name(
|
||||
void *data,
|
||||
void *userdata) {
|
||||
|
||||
static const Specifier specifier_table[] = {
|
||||
{ 'a', specifier_architecture, NULL },
|
||||
{ 'b', specifier_boot_id, NULL },
|
||||
{ 'B', specifier_os_build_id, NULL },
|
||||
{ 'H', specifier_host_name, NULL }, /* We will use specifier_dnssd_host_name(). */
|
||||
{ 'm', specifier_machine_id, NULL },
|
||||
{ 'o', specifier_os_id, NULL },
|
||||
{ 'v', specifier_kernel_release, NULL },
|
||||
{ 'w', specifier_os_version_id, NULL },
|
||||
{ 'W', specifier_os_variant_id, NULL },
|
||||
{}
|
||||
};
|
||||
DnssdService *s = userdata;
|
||||
_cleanup_free_ char *name = NULL;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
@ -242,20 +255,21 @@ int config_parse_dnssd_service_name(
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = dnssd_render_instance_name(rvalue, NULL);
|
||||
if (r == -ENOMEM)
|
||||
return log_oom();
|
||||
r = specifier_printf(rvalue, specifier_table, NULL, &name);
|
||||
if (r < 0) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, r,
|
||||
"Invalid service instance name template '%s', ignoring: %m", rvalue);
|
||||
"Invalid service instance name template '%s', ignoring assignment: %m", rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
||||
r = free_and_strdup(&s->name_template, rvalue);
|
||||
if (r < 0)
|
||||
return log_oom();
|
||||
if (!dns_service_name_is_valid(name)) {
|
||||
log_syntax(unit, LOG_WARNING, filename, line, 0,
|
||||
"Service instance name template '%s' renders to invalid name '%s'. Ignoring assignment.",
|
||||
rvalue, name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return free_and_strdup_warn(&s->name_template, rvalue);
|
||||
}
|
||||
|
||||
int config_parse_dnssd_service_type(
|
||||
|
@ -1380,7 +1380,7 @@ static int nsec3_hashed_domain_make(DnsResourceRecord *nsec3, const char *domain
|
||||
* matches the wildcard domain.
|
||||
*
|
||||
* Based on this we can prove either the existence of the record in @key, or NXDOMAIN or NODATA, or
|
||||
* that there is no proof either way. The latter is the case if a the proof of non-existence of a given
|
||||
* that there is no proof either way. The latter is the case if a proof of non-existence of a given
|
||||
* name uses an NSEC3 record with the opt-out bit set. Lastly, if we are given insufficient NSEC3 records
|
||||
* to conclude anything we indicate this by returning NO_RR. */
|
||||
static int dnssec_test_nsec3(DnsAnswer *answer, DnsResourceKey *key, DnssecNsecResult *result, bool *authenticated, uint32_t *ttl) {
|
||||
|
@ -282,8 +282,7 @@ void dns_query_candidate_notify(DnsQueryCandidate *c) {
|
||||
return;
|
||||
|
||||
fail:
|
||||
log_warning_errno(r, "Failed to follow search domains: %m");
|
||||
c->error_code = r;
|
||||
c->error_code = log_warning_errno(r, "Failed to follow search domains: %m");
|
||||
dns_query_ready(c->query);
|
||||
}
|
||||
|
||||
|
@ -2117,7 +2117,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
|
||||
return r;
|
||||
if (r == 0) {
|
||||
/* Hmm, so this SOA RR doesn't match our original question. In this case, maybe this is
|
||||
* a negative reply, and we need the a SOA RR's TTL in order to cache a negative entry?
|
||||
* a negative reply, and we need the SOA RR's TTL in order to cache a negative entry?
|
||||
* If so, we need to validate it, too. */
|
||||
|
||||
r = dns_answer_match_key(t->answer, t->key, NULL);
|
||||
|
@ -155,33 +155,35 @@ static int specifier_dnssd_host_name(char specifier, const void *data, const voi
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dnssd_render_instance_name(const char *name_template, char **ret_name) {
|
||||
int dnssd_render_instance_name(DnssdService *s, char **ret_name) {
|
||||
static const Specifier specifier_table[] = {
|
||||
{ 'm', specifier_machine_id, NULL },
|
||||
{ 'b', specifier_boot_id, NULL },
|
||||
{ 'H', specifier_dnssd_host_name, NULL },
|
||||
{ 'v', specifier_kernel_release, NULL },
|
||||
{ 'a', specifier_architecture, NULL },
|
||||
{ 'o', specifier_os_id, NULL },
|
||||
{ 'w', specifier_os_version_id, NULL },
|
||||
{ 'b', specifier_boot_id, NULL },
|
||||
{ 'B', specifier_os_build_id, NULL },
|
||||
{ 'H', specifier_dnssd_host_name, NULL },
|
||||
{ 'm', specifier_machine_id, NULL },
|
||||
{ 'o', specifier_os_id, NULL },
|
||||
{ 'v', specifier_kernel_release, NULL },
|
||||
{ 'w', specifier_os_version_id, NULL },
|
||||
{ 'W', specifier_os_variant_id, NULL },
|
||||
{}
|
||||
};
|
||||
_cleanup_free_ char *name = NULL;
|
||||
int r;
|
||||
|
||||
assert(name_template);
|
||||
assert(s);
|
||||
assert(s->name_template);
|
||||
|
||||
r = specifier_printf(name_template, specifier_table, NULL, &name);
|
||||
r = specifier_printf(s->name_template, specifier_table, s, &name);
|
||||
if (r < 0)
|
||||
return r;
|
||||
return log_debug_errno(r, "Failed to replace specifiers: %m");
|
||||
|
||||
if (!dns_service_name_is_valid(name))
|
||||
return -EINVAL;
|
||||
return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Service instance name '%s' is invalid.",
|
||||
name);
|
||||
|
||||
if (ret_name)
|
||||
*ret_name = TAKE_PTR(name);
|
||||
*ret_name = TAKE_PTR(name);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -225,7 +227,7 @@ int dnssd_update_rrs(DnssdService *s) {
|
||||
LIST_FOREACH(items, txt_data, s->txt_data_items)
|
||||
txt_data->rr = dns_resource_record_unref(txt_data->rr);
|
||||
|
||||
r = dnssd_render_instance_name(s->name_template, &n);
|
||||
r = dnssd_render_instance_name(s, &n);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
@ -53,7 +53,7 @@ DnssdTxtData *dnssd_txtdata_free_all(DnssdTxtData *txt_data);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free);
|
||||
|
||||
int dnssd_render_instance_name(const char *name_template, char **ret_name);
|
||||
int dnssd_render_instance_name(DnssdService *s, char **ret_name);
|
||||
int dnssd_load(Manager *manager);
|
||||
int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item);
|
||||
int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item);
|
||||
|
@ -334,9 +334,6 @@ int ask_password_plymouth(
|
||||
|
||||
p += k;
|
||||
|
||||
if (p < 1)
|
||||
continue;
|
||||
|
||||
if (buffer[0] == 5) {
|
||||
|
||||
if (flags & ASK_PASSWORD_ACCEPT_CACHED) {
|
||||
|
@ -8,7 +8,6 @@
|
||||
#include "alloc-util.h"
|
||||
#include "bpf-program.h"
|
||||
#include "fd-util.h"
|
||||
#include "log.h"
|
||||
#include "memory-util.h"
|
||||
#include "missing_syscall.h"
|
||||
#include "path-util.h"
|
||||
@ -18,7 +17,7 @@ int bpf_program_new(uint32_t prog_type, BPFProgram **ret) {
|
||||
|
||||
p = new0(BPFProgram, 1);
|
||||
if (!p)
|
||||
return log_oom();
|
||||
return -ENOMEM;
|
||||
|
||||
p->n_ref = 1;
|
||||
p->prog_type = prog_type;
|
||||
|
@ -35,7 +35,7 @@ typedef enum ConfigParseFlags {
|
||||
/* Prototype for a parser for a specific configuration setting */
|
||||
typedef int (*ConfigParserCallback)(CONFIG_PARSER_ARGUMENTS);
|
||||
|
||||
/* A macro declaring the a function prototype, following the typedef above, simply because it's so cumbersomely long
|
||||
/* A macro declaring a function prototype, following the typedef above, simply because it's so cumbersomely long
|
||||
* otherwise. (And current emacs gets irritatingly slow when editing files that contain lots of very long function
|
||||
* prototypes on the same screen…) */
|
||||
#define CONFIG_PARSER_PROTOTYPE(name) int name(CONFIG_PARSER_ARGUMENTS)
|
||||
|
@ -14,6 +14,10 @@ const GptPartitionType gpt_partition_type_table[] = {
|
||||
{ GPT_ROOT_ARM_64_VERITY, "root-arm64-verity" },
|
||||
{ GPT_ROOT_IA64, "root-ia64" },
|
||||
{ GPT_ROOT_IA64_VERITY, "root-ia64-verity" },
|
||||
{ GPT_ROOT_RISCV32, "root-riscv32" },
|
||||
{ GPT_ROOT_RISCV32_VERITY, "root-riscv32-verity" },
|
||||
{ GPT_ROOT_RISCV64, "root-riscv64" },
|
||||
{ GPT_ROOT_RISCV64_VERITY, "root-riscv64-verity" },
|
||||
#ifdef GPT_ROOT_NATIVE
|
||||
{ GPT_ROOT_NATIVE, "root" },
|
||||
{ GPT_ROOT_NATIVE_VERITY, "root-verity" },
|
||||
@ -32,6 +36,10 @@ const GptPartitionType gpt_partition_type_table[] = {
|
||||
{ GPT_USR_ARM_64_VERITY, "usr-arm64-verity" },
|
||||
{ GPT_USR_IA64, "usr-ia64" },
|
||||
{ GPT_USR_IA64_VERITY, "usr-ia64-verity" },
|
||||
{ GPT_USR_RISCV32, "usr-riscv32" },
|
||||
{ GPT_USR_RISCV32_VERITY, "usr-riscv32-verity" },
|
||||
{ GPT_USR_RISCV64, "usr-riscv64" },
|
||||
{ GPT_USR_RISCV64_VERITY, "usr-riscv64-verity" },
|
||||
#ifdef GPT_USR_NATIVE
|
||||
{ GPT_USR_NATIVE, "usr" },
|
||||
{ GPT_USR_NATIVE_VERITY, "usr-verity" },
|
||||
|
@ -15,11 +15,15 @@
|
||||
#define GPT_ROOT_ARM SD_ID128_MAKE(69,da,d7,10,2c,e4,4e,3c,b1,6c,21,a1,d4,9a,be,d3)
|
||||
#define GPT_ROOT_ARM_64 SD_ID128_MAKE(b9,21,b0,45,1d,f0,41,c3,af,44,4c,6f,28,0d,3f,ae)
|
||||
#define GPT_ROOT_IA64 SD_ID128_MAKE(99,3d,8d,3d,f8,0e,42,25,85,5a,9d,af,8e,d7,ea,97)
|
||||
#define GPT_ROOT_RISCV32 SD_ID128_MAKE(60,d5,a7,fe,8e,7d,43,5c,b7,14,3d,d8,16,21,44,e1)
|
||||
#define GPT_ROOT_RISCV64 SD_ID128_MAKE(72,ec,70,a6,cf,74,40,e6,bd,49,4b,da,08,e8,f2,24)
|
||||
#define GPT_USR_X86 SD_ID128_MAKE(75,25,0d,76,8c,c6,45,8e,bd,66,bd,47,cc,81,a8,12)
|
||||
#define GPT_USR_X86_64 SD_ID128_MAKE(84,84,68,0c,95,21,48,c6,9c,11,b0,72,06,56,f6,9e)
|
||||
#define GPT_USR_ARM SD_ID128_MAKE(7d,03,59,a3,02,b3,4f,0a,86,5c,65,44,03,e7,06,25)
|
||||
#define GPT_USR_ARM_64 SD_ID128_MAKE(b0,e0,10,50,ee,5f,43,90,94,9a,91,01,b1,71,04,e9)
|
||||
#define GPT_USR_IA64 SD_ID128_MAKE(43,01,d2,a6,4e,3b,4b,2a,bb,94,9e,0b,2c,42,25,ea)
|
||||
#define GPT_USR_RISCV32 SD_ID128_MAKE(b9,33,fb,22,5c,3f,4f,91,af,90,e2,bb,0f,a5,07,02)
|
||||
#define GPT_USR_RISCV64 SD_ID128_MAKE(be,ae,c3,4b,84,42,43,9b,a4,0b,98,43,81,ed,09,7d)
|
||||
#define GPT_ESP SD_ID128_MAKE(c1,2a,73,28,f8,1f,11,d2,ba,4b,00,a0,c9,3e,c9,3b)
|
||||
#define GPT_XBOOTLDR SD_ID128_MAKE(bc,13,c2,ff,59,e6,42,62,a3,52,b2,75,fd,6f,71,72)
|
||||
#define GPT_SWAP SD_ID128_MAKE(06,57,fd,6d,a4,ab,43,c4,84,e5,09,33,c8,4b,4f,4f)
|
||||
@ -37,11 +41,15 @@
|
||||
#define GPT_ROOT_ARM_VERITY SD_ID128_MAKE(73,86,cd,f2,20,3c,47,a9,a4,98,f2,ec,ce,45,a2,d6)
|
||||
#define GPT_ROOT_ARM_64_VERITY SD_ID128_MAKE(df,33,00,ce,d6,9f,4c,92,97,8c,9b,fb,0f,38,d8,20)
|
||||
#define GPT_ROOT_IA64_VERITY SD_ID128_MAKE(86,ed,10,d5,b6,07,45,bb,89,57,d3,50,f2,3d,05,71)
|
||||
#define GPT_ROOT_RISCV32_VERITY SD_ID128_MAKE(ae,02,53,be,11,67,40,07,ac,68,43,92,6c,14,c5,de)
|
||||
#define GPT_ROOT_RISCV64_VERITY SD_ID128_MAKE(b6,ed,55,82,44,0b,42,09,b8,da,5f,f7,c4,19,ea,3d)
|
||||
#define GPT_USR_X86_VERITY SD_ID128_MAKE(8f,46,1b,0d,14,ee,4e,81,9a,a9,04,9b,6f,b9,7a,bd)
|
||||
#define GPT_USR_X86_64_VERITY SD_ID128_MAKE(77,ff,5f,63,e7,b6,46,33,ac,f4,15,65,b8,64,c0,e6)
|
||||
#define GPT_USR_ARM_VERITY SD_ID128_MAKE(c2,15,d7,51,7b,cd,46,49,be,90,66,27,49,0a,4c,05)
|
||||
#define GPT_USR_ARM_64_VERITY SD_ID128_MAKE(6e,11,a4,e7,fb,ca,4d,ed,b9,e9,e1,a5,12,bb,66,4e)
|
||||
#define GPT_USR_IA64_VERITY SD_ID128_MAKE(6a,49,1e,03,3b,e7,45,45,8e,38,83,32,0e,0e,a8,80)
|
||||
#define GPT_USR_RISCV32_VERITY SD_ID128_MAKE(cb,1e,e4,e3,8c,d0,41,36,a0,a4,aa,61,a3,2e,87,30)
|
||||
#define GPT_USR_RISCV64_VERITY SD_ID128_MAKE(8f,10,56,be,9b,05,47,c4,81,d6,be,53,12,8e,5b,54)
|
||||
|
||||
#if defined(__x86_64__)
|
||||
# define GPT_ROOT_NATIVE GPT_ROOT_X86_64
|
||||
@ -82,6 +90,20 @@
|
||||
# define GPT_USR_NATIVE_VERITY GPT_USR_ARM_VERITY
|
||||
#endif
|
||||
|
||||
#if defined(__riscv)
|
||||
#if (__riscv_xlen == 32)
|
||||
# define GPT_ROOT_NATIVE GPT_ROOT_RISCV32
|
||||
# define GPT_ROOT_NATIVE_VERITY GPT_ROOT_RISCV32_VERITY
|
||||
# define GPT_USR_NATIVE GPT_USR_RISCV32
|
||||
# define GPT_USR_NATIVE_VERITY GPT_USR_RISCV32_VERITY
|
||||
#elif (__riscv_xlen == 64)
|
||||
# define GPT_ROOT_NATIVE GPT_ROOT_RISCV64
|
||||
# define GPT_ROOT_NATIVE_VERITY GPT_ROOT_RISCV64_VERITY
|
||||
# define GPT_USR_NATIVE GPT_USR_RISCV64
|
||||
# define GPT_USR_NATIVE_VERITY GPT_USR_RISCV64_VERITY
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define GPT_FLAG_REQUIRED_PARTITION (1ULL << 0)
|
||||
#define GPT_FLAG_NO_BLOCK_IO_PROTOCOL (1ULL << 1)
|
||||
#define GPT_FLAG_LEGACY_BIOS_BOOTABLE (1ULL << 2)
|
||||
|
@ -104,43 +104,18 @@ static int specifier_last_component(char specifier, const void *data, const void
|
||||
}
|
||||
|
||||
int install_full_printf(const UnitFileInstallInfo *i, const char *format, char **ret) {
|
||||
/* This is similar to unit_full_printf() but does not support
|
||||
* anything path-related.
|
||||
*
|
||||
* %n: the full id of the unit (foo@bar.waldo)
|
||||
* %N: the id of the unit without the suffix (foo@bar)
|
||||
* %p: the prefix (foo)
|
||||
* %i: the instance (bar)
|
||||
|
||||
* %U the UID of the running user
|
||||
* %u the username of running user
|
||||
* %m the machine ID of the running system
|
||||
* %H the hostname of the running system
|
||||
* %b the boot ID of the running system
|
||||
* %v `uname -r` of the running system
|
||||
*/
|
||||
/* This is similar to unit_name_printf() */
|
||||
|
||||
const Specifier table[] = {
|
||||
{ 'i', specifier_instance, NULL },
|
||||
{ 'j', specifier_last_component, NULL },
|
||||
{ 'n', specifier_name, NULL },
|
||||
{ 'N', specifier_prefix_and_instance, NULL },
|
||||
{ 'p', specifier_prefix, NULL },
|
||||
{ 'i', specifier_instance, NULL },
|
||||
{ 'j', specifier_last_component, NULL },
|
||||
|
||||
{ 'g', specifier_group_name, NULL },
|
||||
{ 'G', specifier_group_id, NULL },
|
||||
{ 'U', specifier_user_id, NULL },
|
||||
{ 'u', specifier_user_name, NULL },
|
||||
COMMON_SYSTEM_SPECIFIERS,
|
||||
|
||||
{ 'm', specifier_machine_id, NULL },
|
||||
{ 'b', specifier_boot_id, NULL },
|
||||
{ 'H', specifier_host_name, NULL },
|
||||
{ 'v', specifier_kernel_release, NULL },
|
||||
{ 'a', specifier_architecture, NULL },
|
||||
{ 'o', specifier_os_id, NULL },
|
||||
{ 'w', specifier_os_version_id, NULL },
|
||||
{ 'B', specifier_os_build_id, NULL },
|
||||
{ 'W', specifier_os_variant_id, NULL },
|
||||
COMMON_CREDS_SPECIFIERS,
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -348,10 +348,7 @@ static int output_timestamp_monotonic(FILE *f, sd_journal *j, const char *monoto
|
||||
|
||||
static int output_timestamp_realtime(FILE *f, sd_journal *j, OutputMode mode, OutputFlags flags, const char *realtime) {
|
||||
char buf[MAX(FORMAT_TIMESTAMP_MAX, 64U)];
|
||||
struct tm *(*gettime_r)(const time_t *, struct tm *);
|
||||
struct tm tm;
|
||||
uint64_t x;
|
||||
time_t t;
|
||||
int r;
|
||||
|
||||
assert(f);
|
||||
@ -376,9 +373,9 @@ static int output_timestamp_realtime(FILE *f, sd_journal *j, OutputMode mode, Ou
|
||||
"Failed to format timestamp: %" PRIu64, x);
|
||||
|
||||
} else {
|
||||
char usec[7];
|
||||
struct tm tm;
|
||||
time_t t;
|
||||
|
||||
gettime_r = (flags & OUTPUT_UTC) ? gmtime_r : localtime_r;
|
||||
t = (time_t) (x / USEC_PER_SEC);
|
||||
|
||||
switch (mode) {
|
||||
@ -388,24 +385,29 @@ static int output_timestamp_realtime(FILE *f, sd_journal *j, OutputMode mode, Ou
|
||||
break;
|
||||
|
||||
case OUTPUT_SHORT_ISO:
|
||||
if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z", gettime_r(&t, &tm)) <= 0)
|
||||
if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S%z",
|
||||
localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Failed to format ISO time");
|
||||
break;
|
||||
|
||||
case OUTPUT_SHORT_ISO_PRECISE:
|
||||
case OUTPUT_SHORT_ISO_PRECISE: {
|
||||
char usec[7];
|
||||
|
||||
/* No usec in strftime, so we leave space and copy over */
|
||||
if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S.xxxxxx%z", gettime_r(&t, &tm)) <= 0)
|
||||
if (strftime(buf, sizeof(buf), "%Y-%m-%dT%H:%M:%S.xxxxxx%z",
|
||||
localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Failed to format ISO-precise time");
|
||||
xsprintf(usec, "%06"PRI_USEC, x % USEC_PER_SEC);
|
||||
memcpy(buf + 20, usec, 6);
|
||||
break;
|
||||
|
||||
}
|
||||
case OUTPUT_SHORT:
|
||||
case OUTPUT_SHORT_PRECISE:
|
||||
|
||||
if (strftime(buf, sizeof(buf), "%b %d %H:%M:%S", gettime_r(&t, &tm)) <= 0)
|
||||
if (strftime(buf, sizeof(buf), "%b %d %H:%M:%S",
|
||||
localtime_or_gmtime_r(&t, &tm, flags & OUTPUT_UTC)) <= 0)
|
||||
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
|
||||
"Failed to format syslog time");
|
||||
|
||||
|
@ -232,7 +232,7 @@ static int loop_configure(
|
||||
* ioctl can return EAGAIN in case we change the lo_offset field, if someone else is accessing the
|
||||
* block device while we try to reconfigure it. This is a pretty common case, since udev might
|
||||
* instantly start probing the device as soon as we attach an fd to it. Hence handle it in two ways:
|
||||
* first, let's take the BSD lock that that ensures that udev will not step in between the point in
|
||||
* first, let's take the BSD lock to ensure that udev will not step in between the point in
|
||||
* time where we attach the fd and where we reconfigure the device. Secondly, let's wait 50ms on
|
||||
* EAGAIN and retry. The former should be an efficient mechanism to avoid we have to wait 50ms
|
||||
* needlessly if we are just racing against udev. The latter is protection against all other cases,
|
||||
|
@ -282,6 +282,7 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
|
||||
.name = "@default",
|
||||
.help = "System calls that are always permitted",
|
||||
.value =
|
||||
"brk\0"
|
||||
"cacheflush\0"
|
||||
"clock_getres\0"
|
||||
"clock_getres_time64\0"
|
||||
@ -319,6 +320,9 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
|
||||
"getuid\0"
|
||||
"getuid32\0"
|
||||
"membarrier\0"
|
||||
"mmap\0"
|
||||
"mmap2\0"
|
||||
"munmap\0"
|
||||
"nanosleep\0"
|
||||
"pause\0"
|
||||
"prlimit64\0"
|
||||
@ -468,9 +472,6 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
|
||||
"mkdirat\0"
|
||||
"mknod\0"
|
||||
"mknodat\0"
|
||||
"mmap\0"
|
||||
"mmap2\0"
|
||||
"munmap\0"
|
||||
"newfstatat\0"
|
||||
"oldfstat\0"
|
||||
"oldlstat\0"
|
||||
@ -844,7 +845,6 @@ const SyscallFilterSet syscall_filter_sets[_SYSCALL_FILTER_SET_MAX] = {
|
||||
"@signal\0"
|
||||
"@sync\0"
|
||||
"@timer\0"
|
||||
"brk\0"
|
||||
"capget\0"
|
||||
"capset\0"
|
||||
"copy_file_range\0"
|
||||
@ -1394,9 +1394,6 @@ int seccomp_restrict_address_families(Set *address_families, bool allow_list) {
|
||||
case SCMP_ARCH_X32:
|
||||
case SCMP_ARCH_ARM:
|
||||
case SCMP_ARCH_AARCH64:
|
||||
case SCMP_ARCH_PPC:
|
||||
case SCMP_ARCH_PPC64:
|
||||
case SCMP_ARCH_PPC64LE:
|
||||
case SCMP_ARCH_MIPSEL64N32:
|
||||
case SCMP_ARCH_MIPS64N32:
|
||||
case SCMP_ARCH_MIPSEL64:
|
||||
@ -1413,6 +1410,9 @@ int seccomp_restrict_address_families(Set *address_families, bool allow_list) {
|
||||
case SCMP_ARCH_X86:
|
||||
case SCMP_ARCH_MIPSEL:
|
||||
case SCMP_ARCH_MIPS:
|
||||
case SCMP_ARCH_PPC:
|
||||
case SCMP_ARCH_PPC64:
|
||||
case SCMP_ARCH_PPC64LE:
|
||||
default:
|
||||
/* These we either know we don't support (i.e. are the ones that do use socketcall()), or we
|
||||
* don't know */
|
||||
|
@ -36,6 +36,54 @@ int specifier_user_shell(char specifier, const void *data, const void *userdata,
|
||||
int specifier_tmp_dir(char specifier, const void *data, const void *userdata, char **ret);
|
||||
int specifier_var_tmp_dir(char specifier, const void *data, const void *userdata, char **ret);
|
||||
|
||||
/* Typically, in places where one of the above specifier is to be resolved the other similar ones are to be
|
||||
* resolved, too. Hence let's define common macros for the relevant array entries.
|
||||
*
|
||||
* COMMON_SYSTEM_SPECIFIERS:
|
||||
* %a: the native userspace architecture
|
||||
* %b: the boot ID of the running system
|
||||
* %B: the OS build ID, according to /etc/os-release
|
||||
* %H: the hostname of the running system
|
||||
* %l: the short hostname of the running system
|
||||
* %m: the machine ID of the running system
|
||||
* %o: the OS ID according to /etc/os-release
|
||||
* %v: the kernel version
|
||||
* %w: the OS version ID, according to /etc/os-release
|
||||
* %W: the OS variant ID, according to /etc/os-release
|
||||
*
|
||||
* COMMON_CREDS_SPECIFIERS:
|
||||
* %g: the groupname of the running user
|
||||
* %G: the GID of the running user
|
||||
* %u: the username of the running user
|
||||
* %U: the UID of the running user
|
||||
*
|
||||
* COMMON_TMP_SPECIFIERS:
|
||||
* %T: the temporary directory (e.g. /tmp, or $TMPDIR, $TEMP, $TMP)
|
||||
* %V: the temporary directory for large, persistent stuff (e.g. /var/tmp, or $TMPDIR, $TEMP, $TMP)
|
||||
*/
|
||||
|
||||
#define COMMON_SYSTEM_SPECIFIERS \
|
||||
{ 'a', specifier_architecture, NULL }, \
|
||||
{ 'b', specifier_boot_id, NULL }, \
|
||||
{ 'B', specifier_os_build_id, NULL }, \
|
||||
{ 'H', specifier_host_name, NULL }, \
|
||||
{ 'l', specifier_short_host_name, NULL }, \
|
||||
{ 'm', specifier_machine_id, NULL }, \
|
||||
{ 'o', specifier_os_id, NULL }, \
|
||||
{ 'v', specifier_kernel_release, NULL }, \
|
||||
{ 'w', specifier_os_version_id, NULL }, \
|
||||
{ 'W', specifier_os_variant_id, NULL }
|
||||
|
||||
#define COMMON_CREDS_SPECIFIERS \
|
||||
{ 'g', specifier_group_name, NULL }, \
|
||||
{ 'G', specifier_group_id, NULL }, \
|
||||
{ 'u', specifier_user_name, NULL }, \
|
||||
{ 'U', specifier_user_id, NULL }
|
||||
|
||||
#define COMMON_TMP_SPECIFIERS \
|
||||
{ 'T', specifier_tmp_dir, NULL }, \
|
||||
{ 'V', specifier_var_tmp_dir, NULL }
|
||||
|
||||
static inline char* specifier_escape(const char *string) {
|
||||
return strreplace(string, "%", "%%");
|
||||
}
|
||||
|
@ -2062,7 +2062,7 @@ bool user_record_compatible(UserRecord *a, UserRecord *b) {
|
||||
assert(a);
|
||||
assert(b);
|
||||
|
||||
/* If either lacks a the regular section, we can't really decide, let's hence say they are
|
||||
/* If either lacks the regular section, we can't really decide, let's hence say they are
|
||||
* incompatible. */
|
||||
if (!(a->mask & b->mask & USER_RECORD_REGULAR))
|
||||
return false;
|
||||
|
@ -232,8 +232,8 @@ static void sync_with_progress(void) {
|
||||
|
||||
BLOCK_SIGNALS(SIGCHLD);
|
||||
|
||||
/* Due to the possibility of the sync operation hanging, we fork a child process and monitor the progress. If
|
||||
* the timeout lapses, the assumption is that that particular sync stalled. */
|
||||
/* Due to the possibility of the sync operation hanging, we fork a child process and monitor
|
||||
* the progress. If the timeout lapses, the assumption is that the particular sync stalled. */
|
||||
|
||||
r = asynchronous_sync(&pid);
|
||||
if (r < 0) {
|
||||
|
@ -514,10 +514,8 @@ static int remount_with_timeout(MountPoint *m, int umount_log_level) {
|
||||
|
||||
assert(m);
|
||||
|
||||
/* Due to the possibility of a remount operation hanging, we
|
||||
* fork a child process and set a timeout. If the timeout
|
||||
* lapses, the assumption is that that particular remount
|
||||
* failed. */
|
||||
/* Due to the possibility of a remount operation hanging, we fork a child process and set a
|
||||
* timeout. If the timeout lapses, the assumption is that the particular remount failed. */
|
||||
r = safe_fork("(sd-remount)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -552,10 +550,8 @@ static int umount_with_timeout(MountPoint *m, int umount_log_level) {
|
||||
|
||||
assert(m);
|
||||
|
||||
/* Due to the possibility of a umount operation hanging, we
|
||||
* fork a child process and set a timeout. If the timeout
|
||||
* lapses, the assumption is that that particular umount
|
||||
* failed. */
|
||||
/* Due to the possibility of a umount operation hanging, we fork a child process and set a
|
||||
* timeout. If the timeout lapses, the assumption is that the particular umount failed. */
|
||||
r = safe_fork("(sd-umount)", FORK_RESET_SIGNALS|FORK_CLOSE_ALL_FDS|FORK_LOG|FORK_REOPEN_LOG, &pid);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -90,6 +90,7 @@ static int get_unit_list_recursive(
|
||||
|
||||
static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
|
||||
_cleanup_(table_unrefp) Table *table = NULL;
|
||||
unsigned job_count = 0;
|
||||
int r;
|
||||
|
||||
table = table_new("", "unit", "load", "active", "sub", "job", "description");
|
||||
@ -108,8 +109,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
|
||||
|
||||
(void) table_set_empty_string(table, "-");
|
||||
|
||||
int job_count = 0;
|
||||
for (const UnitInfo *u = unit_infos; unit_infos && u < unit_infos + c; u++) {
|
||||
for (const UnitInfo *u = unit_infos; unit_infos && u - unit_infos < c; u++) {
|
||||
_cleanup_free_ char *j = NULL;
|
||||
const char *on_underline = "", *on_loaded = "", *on_active = "";
|
||||
const char *on_circle = "", *id;
|
||||
@ -156,7 +156,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
|
||||
TABLE_STRING, u->sub_state,
|
||||
TABLE_SET_BOTH_COLORS, on_active,
|
||||
TABLE_STRING, u->job_id ? u->job_type: "",
|
||||
TABLE_SET_BOTH_COLORS, u->job_id ? on_underline : "",
|
||||
TABLE_SET_BOTH_COLORS, on_underline,
|
||||
TABLE_STRING, u->description,
|
||||
TABLE_SET_BOTH_COLORS, on_underline);
|
||||
if (r < 0)
|
||||
@ -186,7 +186,8 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
|
||||
"LOAD = Reflects whether the unit definition was properly loaded.\n"
|
||||
"ACTIVE = The high-level unit activation state, i.e. generalization of SUB.\n"
|
||||
"SUB = The low-level unit activation state, values depend on unit type.");
|
||||
puts(job_count ? "JOB = Pending job for the unit.\n" : "");
|
||||
if (job_count > 0)
|
||||
puts("JOB = Pending job for the unit.\n");
|
||||
on = ansi_highlight();
|
||||
off = ansi_normal();
|
||||
} else {
|
||||
|
@ -58,17 +58,21 @@ if add_languages('cpp', required : false)
|
||||
opts += [['c++'],
|
||||
['c++', '-std=c++98'],
|
||||
['c++', '-std=c++11']]
|
||||
if cc.has_argument('-std=c++14')
|
||||
if cxx.has_argument('-std=c++14')
|
||||
opts += [['c++', '-std=c++14']]
|
||||
endif
|
||||
if cc.has_argument('-std=c++17')
|
||||
if cxx.has_argument('-std=c++17')
|
||||
opts += [['c++', '-std=c++17']]
|
||||
endif
|
||||
if cxx.has_argument('-std=c++20')
|
||||
opts += [['c++', '-std=c++20']]
|
||||
endif
|
||||
endif
|
||||
|
||||
foreach header : _systemd_headers + _not_installed_headers + ['../libudev/libudev.h']
|
||||
foreach header : _systemd_headers + _not_installed_headers + [libudev_h_path]
|
||||
foreach opt : opts
|
||||
name = ''.join(['cc-', header.split('/')[-1], '_'] + opt)
|
||||
std_name = opt.length() == 2 ? '_'.join(opt[1].split(':')) : ''
|
||||
name = ''.join(['cc-', header.split('/')[-1], '_', opt[0], std_name])
|
||||
if want_tests != 'false'
|
||||
test(name,
|
||||
check_compilation_sh,
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user