New upstream version 243~rc2

This commit is contained in:
Michael Biebl 2019-08-28 21:24:53 +02:00
parent f2dec8725c
commit c5fca32e78
142 changed files with 10334 additions and 5903 deletions

59
NEWS
View File

@ -53,10 +53,6 @@ CHANGES WITH 243 in spe:
* Memory protection directives can now take a value of zero, allowing
explicit opting out of a default value propagated by an ancestor.
* A new setting DisableControllers= has been added that may be used to
explicitly disable one or more cgroups controllers for a unit and all
its children.
* systemd now defaults to the "unified" cgroup hierarchy setup during
build-time, i.e. -Ddefault-hierarchy=unified is now the build-time
default. Previously, -Ddefault-hierarchy=hybrid was the default. This
@ -433,30 +429,37 @@ CHANGES WITH 243 in spe:
option that permits selecting the timout how long to wait for a
device with an encryption key before asking for the password.
Contributions from: Aaron Barany, Adrian Bunk, Alan Jenkins, Andrej
Valek, Anita Zhang, Arian van Putten, Balint Reczey, Bastien Nocera,
Ben Boeckel, Benjamin Robin, camoz, Chen Qi, Chris Chiu, Chris Down,
Christian Kellner, Clinton Roy, Connor Reeder, Daniele Medri, Dan
Streetman, Dave Reisner, Dave Ross, David Art, David Tardon, Debarshi
Ray, Dominick Grift, Donald Buczek, Douglas Christman, Eric DeVolder,
Evgeny Vereshchagin, Feldwor, Felix Riemann, Florian Dollinger, Franck
Bui, Frantisek Sumsal, Franz Pletz, Hans de Goede, Iago López Galeiras,
Insun Pyo, Ivan Shapovalov, Iwan Timmer, Jack, Jakob Unterwurzacher,
Jan Klötzke, Jan Pokorný, Jan Synacek, Jeka Pats, Jérémy Rosen, Jiri
Pirko, Joe Lin, Joerg Behrmann, Joe Richey, Jóhann B. Guðmundsson,
Johannes Schmitz, Jonathan Rouleau, Jorge Niedbalski, Kai Lüke, Karel
Zak, Kashyap Chamarthy, Krayushkin Konstantin, Lennart Poettering,
Lubomir Rintel, Luca Boccassi, Luís Ferreira, Marc-André Lureau, Markus
Felten, Martin Pitt, Michael Biebl, Michael Olbrich, Michael Prokop,
Michael Stapelberg, Michael Zhivich, Michal Koutný, Michal Sekletar,
Mike Gilbert, Milan Broz, mpe85, Network Silence, Oliver Harley,
pan93412, Paul Menzel, pEJipE, Peter A. Bigot, Philip Withnall, Piotr
Drąg, Rafael Fontenelle, Roberto Santalla, root, RussianNeuroMancer,
Sebastian Jennen, shinygold, Shreyas Behera, Simon Schricker, Susant
Sahani, Thadeu Lima de Souza Cascardo, Theo Ouzhinski, Thiebaud
Weksteen, Thomas Haller, Thomas Weißschuh, Tomas Mraz, Topi Miettinen,
ven, Wieland Hoffmann, Xi Ruoyao, Yuri Chornoivan, Yu Watanabe, Zach
Smith, Zbigniew Jędrzejewski-Szmek, Zhang Xianwei
* IOWeight= has learnt to properly set the IO weight when using the
BFQ scheduler officially found in kernels 5.0+.
Contributions from: Aaron Barany, Adrian Bunk, Alan Jenkins, Albrecht
Lohofener, Andrej Valek, Anita Zhang, Arian van Putten, Balint Reczey,
Bastien Nocera, Ben Boeckel, Benjamin Robin, camoz, Chen Qi, Chris
Chiu, Chris Down, Christian Kellner, Clinton Roy, Connor Reeder, Daniel
Black, Daniele Medri, Dan Streetman, Dave Reisner, Dave Ross, David
Art, David Tardon, Debarshi Ray, Dominick Grift, Donald Buczek, Douglas
Christman, Eric DeVolder, EtherGraf, Evgeny Vereshchagin, Feldwor,
Felix Riemann, Florian Dollinger, Francesco Pennica, Franck Bui,
Frantisek Sumsal, Franz Pletz, frederik, Hans de Goede, Iago López
Galeiras, Insun Pyo, Ivan Shapovalov, Iwan Timmer, Jack, Jakob
Unterwurzacher, Jan Klötzke, Jan Pokorný, Jan Synacek, Jeka Pats,
Jérémy Rosen, Jiri Pirko, Joe Lin, Joerg Behrmann, Joe Richey, Jóhann
B. Guðmundsson, Johannes Christ, Johannes Schmitz, Jonathan Rouleau,
Jorge Niedbalski, Kai Krakow, Kai Lüke, Karel Zak, Kashyap Chamarthy,
Krayushkin Konstantin, Lennart Poettering, Lubomir Rintel, Luca
Boccassi, Luís Ferreira, Marc-André Lureau, Markus Felten, Martin Pitt,
Matthew Leeds, Mattias Jernberg, Michael Biebl, Michael Olbrich,
Michael Prokop, Michael Stapelberg, Michael Zhivich, Michal Koutný,
Michal Sekletar, Mike Gilbert, Milan Broz, Miroslav Lichvar, mpe85,
Mr-Foo, Network Silence, Oliver Harley, pan93412, Paul Menzel, pEJipE,
Peter A. Bigot, Philip Withnall, Piotr Drąg, Rafael Fontenelle, Roberto
Santalla, Ronan Pigott, root, RussianNeuroMancer, Sebastian Jennen,
shinygold, Shreyas Behera, Simon Schricker, Susant Sahani, Thadeu Lima
de Souza Cascardo, Theo Ouzhinski, Thiebaud Weksteen, Thomas Haller,
Thomas Weißschuh, Tomas Mraz, Tommi Rantala, Topi Miettinen, ven,
Wieland Hoffmann, William A. Kennington III, William Wold, Xi Ruoyao,
Yuri Chornoivan, Yu Watanabe, Zach Smith, Zbigniew Jędrzejewski-Szmek,
Zhang Xianwei
Somewhere, SOME-TI-ME

View File

@ -4,7 +4,8 @@
<a href="https://in.waw.pl/systemd-github-state/systemd-systemd-pull-requests.svg"><img align="right" src="https://in.waw.pl/systemd-github-state/systemd-systemd-pull-requests-small.svg" alt="Count of open pull requests over time"></a>
[![Semaphore CI Build Status](https://semaphoreci.com/api/v1/projects/28a5a3ca-3c56-4078-8b5e-7ed6ef912e14/443470/shields_badge.svg)](https://semaphoreci.com/systemd/systemd)<br/>
[![Coverity Scan Status](https://scan.coverity.com/projects/350/badge.svg)](https://scan.coverity.com/projects/350)<br/>
[![Fuzzit Status](https://app.fuzzit.dev/badge?org_id=RxqRpGNXquIvqrmp4iJS&branch=master)](https://app.fuzzit.dev/admin/RxqRpGNXquIvqrmp4iJS/dashboard)<br/>
[![Fuzzit Status](https://app.fuzzit.dev/badge?org_id=systemd&branch=master)](https://app.fuzzit.dev/orgs/systemd/dashboard)<br/>
[![OSS-Fuzz Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/systemd.svg)](https://oss-fuzz-build-logs.storage.googleapis.com/index.html)<br/>
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/1369/badge)](https://bestpractices.coreinfrastructure.org/projects/1369)<br/>
[![Travis CI Build Status](https://travis-ci.org/systemd/systemd.svg?branch=master)](https://travis-ci.org/systemd/systemd)<br/>
[![Language Grade: C/C++](https://img.shields.io/lgtm/grade/cpp/g/systemd/systemd.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/systemd/systemd/context:cpp)<br/>

12
TODO
View File

@ -19,6 +19,13 @@ Janitorial Clean-ups:
Features:
* coredump: maybe when coredumping read a new xattr from /proc/$PID/exe that
may be used to mark a whole binary as non-coredumpable. Would fix:
https://bugs.freedesktop.org/show_bug.cgi?id=69447
* beef up hibernation to optionally do swapon/swapoff immediately before/after
the hibernation
* beef up s2h to implement a battery watch loop: instead of entering
hibernation unconditionally after coming back from resume make a decision
based on the battery load level: if battery level is above a specific
@ -449,9 +456,6 @@ Features:
* mount: automatically search for "main" partition of an image has multiple
partitions
* expose the "privileged" flag of ExecCommand on the bus, and open it up to
transient units
* in nss-systemd, if we run inside of RootDirectory= with PrivateUsers= set,
find a way to map the User=/Group= of the service to the right name. This way
a user/group for a service only has to exist on the host for the right
@ -754,7 +758,6 @@ Features:
* journal:
- consider introducing implicit _TTY= + _PPID= + _EUID= + _EGID= + _FSUID= + _FSGID= fields
- import and delete pstore filesystem content at startup
- journald: also get thread ID from client, plus thread name
- journal: when waiting for journal additions in the client always sleep at least 1s or so, in order to minimize wakeups
- add API to close/reopen/get fd for journal client fd in libsystemd-journal.
@ -1024,7 +1027,6 @@ Features:
- Make sure ID_PATH is always exported and complete for
network devices where possible, so we can safely rely
on Path= matching
- check MTUBytes parsing (expecting size_t but we are using unsigned)
* sd-rtnl:
- add support for more attribute types

View File

@ -190,12 +190,12 @@ boot, in order to ensure the entropy pool is filled up quickly.
master images of an OS are created, and thus replicated into every
installation. If OS image builders carefully reset the random seed file
before generating the image it should be safe to credit entropy, which can
be enabled by setting the `$SYSTEMD_RANDOM_SEED` environment variable for
the service to `1`. Note however, that this service typically runs
relatively late during early boot: long after the initial RAM disk
(`initrd`) completed, and after the `/var/` file system became
writable. This is usually too late for many applications, it is hence not
advised to rely exclusively on this functionality to seed the kernel's
be enabled by setting the `$SYSTEMD_RANDOM_SEED_CREDIT` environment variable
for the service to `1` (or even `force`, see man page). Note however, that
this service typically runs relatively late during early boot: long after
the initial RAM disk (`initrd`) completed, and after the `/var/` file system
became writable. This is usually too late for many applications, it is hence
not advised to rely exclusively on this functionality to seed the kernel's
entropy pool. Also note that this service synchronously waits until the
kernel's entropy pool is initialized before completing start-up. It may thus
be used by other services as synchronization point to order against, if they

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
--- 20-acpi-vendor.hwdb.base 2019-07-23 14:53:58.491938552 +0200
+++ 20-acpi-vendor.hwdb 2019-07-23 14:53:58.497938538 +0200
--- 20-acpi-vendor.hwdb.base 2019-08-22 09:17:21.083026269 +0200
+++ 20-acpi-vendor.hwdb 2019-08-22 09:17:21.101026408 +0200
@@ -3,6 +3,8 @@
# Data imported from:
# https://uefi.org/uefi-pnp-export

View File

@ -587,6 +587,9 @@ pci:v*d*sv*sd*bc12*
pci:v*d*sv*sd*bc12sc00*
ID_PCI_SUBCLASS_FROM_DATABASE=Processing accelerators
pci:v*d*sv*sd*bc12sc01*
ID_PCI_SUBCLASS_FROM_DATABASE=AI Inference Accelerator
pci:v*d*sv*sd*bc13*
ID_PCI_CLASS_FROM_DATABASE=Non-Essential Instrumentation

View File

@ -1742,6 +1742,9 @@ pci:v00001000d00000087sv00001014sd00000472*
pci:v00001000d00000087sv00001590sd00000041*
ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (H220i)
pci:v00001000d00000087sv00001590sd00000042*
ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (H221 / 9207-8e)
pci:v00001000d00000087sv00001590sd00000044*
ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (H220i)
@ -1964,9 +1967,21 @@ pci:v00001000d000000E5sv00001028sd0000200D*
pci:v00001000d000000E5sv00001028sd0000200E*
ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe SAS38xx (HBA355i MX)
pci:v00001000d000000E5sv00001D49sd00000205*
ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe SAS38xx (ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA)
pci:v00001000d000000E5sv00001D49sd00000206*
ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe SAS38xx (ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA)
pci:v00001000d000000E6*
ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx
pci:v00001000d000000E6sv00001D49sd00000205*
ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA)
pci:v00001000d000000E6sv00001D49sd00000206*
ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA)
pci:v00001000d000000E7*
ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Unsupported SAS38xx
@ -2213,6 +2228,24 @@ pci:v00001000d000010E1sv00001028sd00001AE2*
pci:v00001000d000010E1sv00001028sd00001AE3*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe SAS39xx (PERC H755 MX)
pci:v00001000d000010E1sv00001D49sd0000060A*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe SAS39xx (ThinkSystem RAID 940-8i 4GB Flash PCIe Gen4 12Gb Adapter)
pci:v00001000d000010E1sv00001D49sd0000060B*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe SAS39xx (ThinkSystem RAID 940-8i 8GB Flash PCIe Gen4 12Gb Adapter)
pci:v00001000d000010E1sv00001D49sd0000060C*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe SAS39xx (ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Adapter)
pci:v00001000d000010E1sv00001D49sd0000060D*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe SAS39xx (ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Internal Adapter)
pci:v00001000d000010E1sv00001D49sd0000060E*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe SAS39xx (ThinkSystem RAID 940-32i 8GB Flash PCIe Gen4 12Gb Adapter)
pci:v00001000d000010E1sv00001D49sd0000060F*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe SAS39xx (ThinkSystem RAID 940-8e 4GB Flash PCIe Gen4 12Gb Adapter)
pci:v00001000d000010E2*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx
@ -2228,6 +2261,24 @@ pci:v00001000d000010E2sv00001028sd00001AE2*
pci:v00001000d000010E2sv00001028sd00001AE3*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (PERC H755 MX)
pci:v00001000d000010E2sv00001D49sd0000060A*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (ThinkSystem RAID 940-8i 4GB Flash PCIe Gen4 12Gb Adapter)
pci:v00001000d000010E2sv00001D49sd0000060B*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (ThinkSystem RAID 940-8i 8GB Flash PCIe Gen4 12Gb Adapter)
pci:v00001000d000010E2sv00001D49sd0000060C*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Adapter)
pci:v00001000d000010E2sv00001D49sd0000060D*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Internal Adapter)
pci:v00001000d000010E2sv00001D49sd0000060E*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (ThinkSystem RAID 940-32i 8GB Flash PCIe Gen4 12Gb Adapter)
pci:v00001000d000010E2sv00001D49sd0000060F*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (ThinkSystem RAID 940-8e 4GB Flash PCIe Gen4 12Gb Adapter)
pci:v00001000d000010E3*
ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Unsupported SAS39xx
@ -7448,6 +7499,9 @@ pci:v00001002d000067FFsv0000103Csd00008479*
pci:v00001002d000067FFsv00001043sd000004BC*
ID_MODEL_FROM_DATABASE=Baffin [Radeon RX 550 640SP / RX 560/560X] (Radeon RX 560)
pci:v00001002d000067FFsv00001043sd0000052F*
ID_MODEL_FROM_DATABASE=Baffin [Radeon RX 550 640SP / RX 560/560X] (Radeon RX 560)
pci:v00001002d000067FFsv00001458sd000022ED*
ID_MODEL_FROM_DATABASE=Baffin [Radeon RX 550 640SP / RX 560/560X] (Radeon RX 560)
@ -9519,88 +9573,88 @@ pci:v00001002d000068FE*
ID_MODEL_FROM_DATABASE=Cedar LE
pci:v00001002d00006900*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445]
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile]
pci:v00001002d00006900sv00001025sd00001056*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M360 / R8 M365DX)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M360 / R8 M365DX)
pci:v00001002d00006900sv00001028sd00000640*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260/M265)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260/M265)
pci:v00001002d00006900sv00001028sd00000643*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260/M265)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260/M265)
pci:v00001002d00006900sv00001028sd0000067F*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv00001028sd00000767*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M445)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M445)
pci:v00001002d00006900sv00001028sd00000810*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon 530)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon 530)
pci:v00001002d00006900sv00001028sd0000130A*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv0000103Csd00002263*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv0000103Csd00002269*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv0000103Csd000022C6*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv0000103Csd000022C8*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv0000103Csd00002B45*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 A360)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 A360)
pci:v00001002d00006900sv0000103Csd0000808C*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv0000103Csd00008099*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M360)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M360)
pci:v00001002d00006900sv0000103Csd000080B5*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M360)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M360)
pci:v00001002d00006900sv0000103Csd000080B9*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M360)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M360)
pci:v00001002d00006900sv0000103Csd0000811C*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M340)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M340)
pci:v00001002d00006900sv0000103Csd00008226*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M440)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M440)
pci:v00001002d00006900sv000010CFsd00001906*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv00001170sd00009979*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M360)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M360)
pci:v00001002d00006900sv00001179sd0000F903*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv00001179sd0000F922*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv00001179sd0000F923*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv00001179sd0000F934*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006900sv000017AAsd00003822*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M360)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M360)
pci:v00001002d00006900sv000017AAsd00003824*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M360)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M360)
pci:v00001002d00006900sv000017AAsd00005021*
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445] (Radeon R7 M260)
ID_MODEL_FROM_DATABASE=Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile] (Radeon R7 M260)
pci:v00001002d00006901*
ID_MODEL_FROM_DATABASE=Topaz PRO [Radeon R5 M255]
@ -10149,7 +10203,7 @@ pci:v00001002d00007310*
ID_MODEL_FROM_DATABASE=Navi 10
pci:v00001002d0000731F*
ID_MODEL_FROM_DATABASE=Navi 10
ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5700 / 5700 XT]
pci:v00001002d00007833*
ID_MODEL_FROM_DATABASE=RS350 Host Bridge
@ -18503,6 +18557,9 @@ pci:v0000104Dd000081CE*
pci:v0000104Dd000081FF*
ID_MODEL_FROM_DATABASE=PS3 TOOL MRP
pci:v0000104Dd00008200*
ID_MODEL_FROM_DATABASE=PS3 TOOL RSX Tracing FPGA
pci:v0000104Dd0000820E*
ID_MODEL_FROM_DATABASE=CXD9208GP [PS3 PS2 emulation subsystem adapter]
@ -32070,7 +32127,7 @@ pci:v000010DEd00000FC2*
ID_MODEL_FROM_DATABASE=GK107 [GeForce GT 630 OEM]
pci:v000010DEd00000FC5*
ID_MODEL_FROM_DATABASE=GK107
ID_MODEL_FROM_DATABASE=GK107 [GeForce GT 1030]
pci:v000010DEd00000FC6*
ID_MODEL_FROM_DATABASE=GK107 [GeForce GTX 650]
@ -34832,9 +34889,15 @@ pci:v000010DEd00001E3D*
pci:v000010DEd00001E3E*
ID_MODEL_FROM_DATABASE=TU102GL
pci:v000010DEd00001E81*
ID_MODEL_FROM_DATABASE=TU104 [GeForce RTX 2080 SUPER]
pci:v000010DEd00001E82*
ID_MODEL_FROM_DATABASE=TU104 [GeForce RTX 2080]
pci:v000010DEd00001E84*
ID_MODEL_FROM_DATABASE=TU104 [GeForce RTX 2070 SUPER]
pci:v000010DEd00001E87*
ID_MODEL_FROM_DATABASE=TU104 [GeForce RTX 2080 Rev. A]
@ -34880,6 +34943,9 @@ pci:v000010DEd00001F02sv00001043sd00008673*
pci:v000010DEd00001F04*
ID_MODEL_FROM_DATABASE=TU106
pci:v000010DEd00001F06*
ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2060 SUPER]
pci:v000010DEd00001F07*
ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2070 Rev. A]
@ -55709,6 +55775,9 @@ pci:v000014E4d00004430*
pci:v000014E4d00004432*
ID_MODEL_FROM_DATABASE=BCM4432 CardBus 10/100BaseT
pci:v000014E4d00004464*
ID_MODEL_FROM_DATABASE=BCM4464 802.11ac Wireless Network Adapter
pci:v000014E4d00004610*
ID_MODEL_FROM_DATABASE=BCM4610 Sentry5 PCI to SB Bridge
@ -55928,6 +55997,9 @@ pci:v000014E4d0000D802sv000014E4sd00008024*
pci:v000014E4d0000D802sv000014E4sd00008028*
ID_MODEL_FROM_DATABASE=BCM58802 Stingray 50Gb Ethernet SoC (Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w8GB DRAM (Part No BCM958802A8048C))
pci:v000014E4d0000D802sv00001BB0sd00000021*
ID_MODEL_FROM_DATABASE=BCM58802 Stingray 50Gb Ethernet SoC (HPE SimpliVity Accelerator)
pci:v000014E4d0000D804*
ID_MODEL_FROM_DATABASE=BCM58804 Stingray 100Gb Ethernet SoC
@ -57335,6 +57407,15 @@ pci:v00001542d00009287*
pci:v00001542d00009290*
ID_MODEL_FROM_DATABASE=FPGA Card
pci:v00001542d00009300*
ID_MODEL_FROM_DATABASE=Universal Exhaust Gas Oxygen Sensor Simulator
pci:v00001542d00009310*
ID_MODEL_FROM_DATABASE=Digital Programmable Resistor
pci:v00001542d00009350*
ID_MODEL_FROM_DATABASE=Analog Input Card
pci:v00001543*
ID_VENDOR_FROM_DATABASE=SILICON Laboratories
@ -58172,6 +58253,12 @@ pci:v000015B3d00001974*
pci:v000015B3d00001975*
ID_MODEL_FROM_DATABASE=MT416842 Family [BlueField SoC PCIe Bridge]
pci:v000015B3d00001976*
ID_MODEL_FROM_DATABASE=MT28908 Family [ConnectX-6 PCIe Bridge]
pci:v000015B3d00001977*
ID_MODEL_FROM_DATABASE=MT2892 Family [ConnectX-6 Dx PCIe Bridge]
pci:v000015B3d00001978*
ID_MODEL_FROM_DATABASE=MT42822 Family [BlueField-2 SoC PCIe Bridge]
@ -64541,6 +64628,9 @@ pci:v00001ADEd00003038sv00004254sd00000552*
pci:v00001AE0*
ID_VENDOR_FROM_DATABASE=Google, Inc.
pci:v00001AE0d00000042*
ID_MODEL_FROM_DATABASE=Compute Engine Virtual Ethernet [gVNIC]
pci:v00001AE3*
ID_VENDOR_FROM_DATABASE=SANBlaze Technology, Inc.
@ -65510,6 +65600,9 @@ pci:v00001C58d00000003sv00001014sd000004F5*
pci:v00001C58d00000003sv00001014sd000004F6*
ID_MODEL_FROM_DATABASE=Ultrastar SN100 Series NVMe SSD (PCIe3 3.2TB NVMe Flash Adapter)
pci:v00001C58d00000003sv00001C58sd00000003*
ID_MODEL_FROM_DATABASE=Ultrastar SN100 Series NVMe SSD (Ultrastar SN100/SN150 NVMe SSD)
pci:v00001C58d00000023*
ID_MODEL_FROM_DATABASE=Ultrastar SN200 Series NVMe SSD
@ -65669,6 +65762,12 @@ pci:v00001CE4d00000008*
pci:v00001CE4d00000009*
ID_MODEL_FROM_DATABASE=ExaNIC X25
pci:v00001CE4d0000000A*
ID_MODEL_FROM_DATABASE=ExaNIC X100
pci:v00001CE4d0000000B*
ID_MODEL_FROM_DATABASE=ExaNIC V9P
pci:v00001CE4d00000100*
ID_MODEL_FROM_DATABASE=ExaDISK FX1
@ -65724,28 +65823,28 @@ pci:v00001D17d00000716*
ID_MODEL_FROM_DATABASE=ZX-D PCI Express Root Port
pci:v00001D17d00000717*
ID_MODEL_FROM_DATABASE=ZX-D PCI Express Root Port
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
pci:v00001D17d00000718*
ID_MODEL_FROM_DATABASE=ZX-D PCI Express Root Port
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
pci:v00001D17d00000719*
ID_MODEL_FROM_DATABASE=ZX-D PCI Express Root Port
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
pci:v00001D17d0000071A*
ID_MODEL_FROM_DATABASE=ZX-D PCI Express Root Port
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
pci:v00001D17d0000071B*
ID_MODEL_FROM_DATABASE=ZX-D PCI Express Root Port
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
pci:v00001D17d0000071C*
ID_MODEL_FROM_DATABASE=ZX-D PCI Express Root Port
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
pci:v00001D17d0000071D*
ID_MODEL_FROM_DATABASE=ZX-D PCI Express Root Port
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
pci:v00001D17d0000071E*
ID_MODEL_FROM_DATABASE=ZX-D PCI Express Root Port
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E PCI Express Root Port
pci:v00001D17d0000071F*
ID_MODEL_FROM_DATABASE=ZX-200 Upstream Port of PCI Express Switch
@ -65763,7 +65862,7 @@ pci:v00001D17d00001000*
ID_MODEL_FROM_DATABASE=ZX-D Standard Host Bridge
pci:v00001D17d00001001*
ID_MODEL_FROM_DATABASE=ZX-D Miscellaneous Bus
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E Miscellaneous Bus
pci:v00001D17d00003001*
ID_MODEL_FROM_DATABASE=ZX-100 Standard Host Bridge
@ -65772,10 +65871,10 @@ pci:v00001D17d0000300A*
ID_MODEL_FROM_DATABASE=ZX-100 Miscellaneous Bus
pci:v00001D17d00003038*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-200 Standard Universal PCI to USB Host Controller
ID_MODEL_FROM_DATABASE=ZX-100/ZX-200/ZX-E Standard Universal PCI to USB Host Controller
pci:v00001D17d00003104*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-200 Standard Enhanced PCI to USB Host Controller
ID_MODEL_FROM_DATABASE=ZX-100/ZX-200/ZX-E Standard Enhanced PCI to USB Host Controller
pci:v00001D17d000031B0*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D Standard Host Bridge
@ -65796,16 +65895,16 @@ pci:v00001D17d000031B5*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D Scratch Device
pci:v00001D17d000031B7*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D Standard Host Bridge
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D/ZX-E Standard Host Bridge
pci:v00001D17d000031B8*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D PCI to PCI Bridge
pci:v00001D17d00003288*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D High Definition Audio Controller
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D/ZX-E High Definition Audio Controller
pci:v00001D17d0000345B*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D Miscellaneous Bus
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D/ZX-E Miscellaneous Bus
pci:v00001D17d00003A02*
ID_MODEL_FROM_DATABASE=ZX-100 C-320 GPU
@ -65817,16 +65916,16 @@ pci:v00001D17d00009002*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-200 EIDE Controller
pci:v00001D17d00009003*
ID_MODEL_FROM_DATABASE=ZX-100 EIDE Controller
ID_MODEL_FROM_DATABASE=ZX-100/ZX-E EIDE Controller
pci:v00001D17d00009045*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D RAID Accelerator
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D/ZX-E RAID Accelerator 0
pci:v00001D17d00009046*
ID_MODEL_FROM_DATABASE=ZX-D RAID Accelerator
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E RAID Accelerator 1
pci:v00001D17d00009083*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-200 StorX AHCI Controller
ID_MODEL_FROM_DATABASE=ZX-100/ZX-200/ZX-E StorX AHCI Controller
pci:v00001D17d00009084*
ID_MODEL_FROM_DATABASE=ZX-100 StorX AHCI Controller
@ -65852,17 +65951,20 @@ pci:v00001D17d00009202*
pci:v00001D17d00009203*
ID_MODEL_FROM_DATABASE=ZX-200 USB eXtensible Host Controller
pci:v00001D17d00009204*
ID_MODEL_FROM_DATABASE=ZX-E USB eXtensible Host Controller
pci:v00001D17d00009286*
ID_MODEL_FROM_DATABASE=ZX-D eMMC Host Controller
pci:v00001D17d00009300*
ID_MODEL_FROM_DATABASE=ZX-D eSPI Host Controller
ID_MODEL_FROM_DATABASE=ZX-D/ZX-E eSPI Host Controller
pci:v00001D17d000095D0*
ID_MODEL_FROM_DATABASE=ZX-100 Universal SD Host Controller
pci:v00001D17d0000F410*
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D PCI Com Port
ID_MODEL_FROM_DATABASE=ZX-100/ZX-D/ZX-E PCI Com Port
pci:v00001D18*
ID_VENDOR_FROM_DATABASE=RME
@ -65906,6 +66008,21 @@ pci:v00001D26d00000140*
pci:v00001D26d0000E004*
ID_MODEL_FROM_DATABASE=AB01/EMB01 Development Board
pci:v00001D37*
ID_VENDOR_FROM_DATABASE=NovaSparks
pci:v00001D37d00000013*
ID_MODEL_FROM_DATABASE=PM3
pci:v00001D37d00000014*
ID_MODEL_FROM_DATABASE=PM4
pci:v00001D37d00000015*
ID_MODEL_FROM_DATABASE=PM4edge
pci:v00001D37d00000016*
ID_MODEL_FROM_DATABASE=PM4edge User Device
pci:v00001D40*
ID_VENDOR_FROM_DATABASE=Techman Electronics (Changshu) Co., Ltd.
@ -66017,6 +66134,12 @@ pci:v00001D6Cd0000100E*
pci:v00001D6Cd0000100Esv00001D6Csd00002001*
ID_MODEL_FROM_DATABASE=AR-ARKA-FX1 [Arkville 64B DPDK Data Mover] (DPDK-Aware Virtual Function [Arkville VF])
pci:v00001D6Cd0000100F*
ID_MODEL_FROM_DATABASE=AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Versal]
pci:v00001D6Cd00001010*
ID_MODEL_FROM_DATABASE=AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex]
pci:v00001D6Cd00004200*
ID_MODEL_FROM_DATABASE=A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument]
@ -66317,6 +66440,15 @@ pci:v00001E24d0000021F*
pci:v00001E24d00001525*
ID_MODEL_FROM_DATABASE=Xilinx BCU-1525
pci:v00001E24d00001533*
ID_MODEL_FROM_DATABASE=ForestKitten 33
pci:v00001E24d00001633*
ID_MODEL_FROM_DATABASE=JCM33
pci:v00001E24d00001635*
ID_MODEL_FROM_DATABASE=JCM35
pci:v00001E26*
ID_VENDOR_FROM_DATABASE=Fujitsu Client Computing Limited
@ -66347,6 +66479,9 @@ pci:v00001E57d00000100*
pci:v00001E57d00000100sv00000000sd00000100*
ID_MODEL_FROM_DATABASE=PY8800 (64GB Accelerator)
pci:v00001E6B*
ID_VENDOR_FROM_DATABASE=Axiado Corp.
pci:v00001FC0*
ID_VENDOR_FROM_DATABASE=Ascom (Finland) Oy
@ -66563,6 +66698,9 @@ pci:v00002116*
pci:v000021C3*
ID_VENDOR_FROM_DATABASE=21st Century Computer Corp.
pci:v000022B8*
ID_VENDOR_FROM_DATABASE=Flex-Logix Technologies
pci:v000022DB*
ID_VENDOR_FROM_DATABASE=Missing Link Electronics, Inc.
@ -67739,6 +67877,21 @@ pci:v00004DDC*
pci:v00004DDCd00000100*
ID_MODEL_FROM_DATABASE=DD-42924I5-300 (ARINC 429 Data Bus)
pci:v00004DDCd00000300*
ID_MODEL_FROM_DATABASE=SB-3620 Motion Feedback Device
pci:v00004DDCd00000340*
ID_MODEL_FROM_DATABASE=SB-3623 Motion Feedback Device
pci:v00004DDCd00000400*
ID_MODEL_FROM_DATABASE=SB-3622 Motion Feedback Device
pci:v00004DDCd00000500*
ID_MODEL_FROM_DATABASE=SB-3621 Motion Feedback Device
pci:v00004DDCd00000510*
ID_MODEL_FROM_DATABASE=SB-3624 Motion Feedback Device
pci:v00004DDCd00000801*
ID_MODEL_FROM_DATABASE=BU-65570I1 MIL-STD-1553 Test and Simulation
@ -67787,6 +67940,18 @@ pci:v00004DDCd00000B03*
pci:v00004DDCd00000B04*
ID_MODEL_FROM_DATABASE=BU-65569I4 MIL-STD-1553 Data Bus
pci:v00004DDCd00000D01*
ID_MODEL_FROM_DATABASE=SB-3641 Motion Feedback Device
pci:v00004DDCd00000D10*
ID_MODEL_FROM_DATABASE=SB-365x Motion Feedback Device
pci:v00004DDCd00002F00*
ID_MODEL_FROM_DATABASE=SB-3642 Motion Feedback Device
pci:v00004DDCd00003000*
ID_MODEL_FROM_DATABASE=SB-3644 Motion Feedback Device
pci:v00005045*
ID_VENDOR_FROM_DATABASE=University of Toronto
@ -70166,6 +70331,18 @@ pci:v00008086d00000A54sv00001590sd00000265*
pci:v00008086d00000A54sv00001590sd0000026C*
ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [3DNAND, Beta Rock Controller] (NVMe Datacenter SSD [3DNAND] 4.0TB AIC (P4500))
pci:v00008086d00000A54sv00001D49sd00004702*
ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [3DNAND, Beta Rock Controller] (Thinksystem Intel P4500 NVMe U.2)
pci:v00008086d00000A54sv00001D49sd00004704*
ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [3DNAND, Beta Rock Controller] (Thinksystem Intel P4500 NVMe AIC)
pci:v00008086d00000A54sv00001D49sd00004712*
ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [3DNAND, Beta Rock Controller] (Thinksystem Intel P4600 NVMe U.2)
pci:v00008086d00000A54sv00001D49sd00004714*
ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [3DNAND, Beta Rock Controller] (Thinksystem Intel P4600 NVMe AIC)
pci:v00008086d00000A54sv00001D49sd00004802*
ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [3DNAND, Beta Rock Controller] (Thinksystem U.2 P4510 NVMe SSD)
@ -73883,6 +74060,12 @@ pci:v00008086d00001563sv00001028sd00001FA8*
pci:v00008086d00001563sv00001028sd00001FA9*
ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10G 4P X550 rNDC)
pci:v00008086d00001563sv00001137sd000002B2*
ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550-TX 10 Gig LOM)
pci:v00008086d00001563sv00001137sd000002B3*
ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550-TX 10 Gig LOM)
pci:v00008086d00001563sv00001170sd00000001*
ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Intel Ethernet Controller X550-T2 OCP card)
@ -74093,6 +74276,9 @@ pci:v00008086d00001572sv00008086sd00004006*
pci:v00008086d00001572sv00008086sd00004007*
ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+
pci:v00008086d00001574*
ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 Emulation
pci:v00008086d00001575*
ID_MODEL_FROM_DATABASE=DSL6340 Thunderbolt 3 NHI [Alpine Ridge 2C 2015]
@ -74162,6 +74348,9 @@ pci:v00008086d00001583sv0000108Esd00000000*
pci:v00008086d00001583sv0000108Esd00007B1B*
ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (10 Gb/40 Gb Ethernet Adapter)
pci:v00008086d00001583sv0000108Esd00007B1D*
ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (10Gb/40Gb Ethernet Adapter)
pci:v00008086d00001583sv00001137sd00000000*
ID_MODEL_FROM_DATABASE=Ethernet Controller XL710 for 40GbE QSFP+ (Ethernet Converged NIC XL710-QDA2)
@ -74276,6 +74465,9 @@ pci:v00008086d0000158Asv00001590sd00000000*
pci:v00008086d0000158Asv00001590sd00000286*
ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE backplane (Synergy 4610C 10/25Gb Ethernet Adapter)
pci:v00008086d0000158Asv00008086sd00000000*
ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE backplane
pci:v00008086d0000158Asv00008086sd0000000A*
ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE backplane (Ethernet 25G 2P XXV710 Mezz)
@ -74291,6 +74483,12 @@ pci:v00008086d0000158Bsv00001137sd00000225*
pci:v00008086d0000158Bsv00001137sd000002B4*
ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet Network Adapter XXV710 OCP 2.0)
pci:v00008086d0000158Bsv00001590sd00000000*
ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet Network Adapter XXV710-2)
pci:v00008086d0000158Bsv00001590sd00000253*
ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet 10/25/Gb 2-port 661SFP28 Adapter)
pci:v00008086d0000158Bsv00008086sd00000000*
ID_MODEL_FROM_DATABASE=Ethernet Controller XXV710 for 25GbE SFP28 (Ethernet Network Adapter XXV710)
@ -74714,6 +74912,12 @@ pci:v00008086d0000163E*
pci:v00008086d00001889*
ID_MODEL_FROM_DATABASE=Ethernet Adaptive Virtual Function
pci:v00008086d000018A0*
ID_MODEL_FROM_DATABASE=C4xxx Series QAT
pci:v00008086d000018A1*
ID_MODEL_FROM_DATABASE=C4XXX Series QAT Virtual Function
pci:v00008086d00001900*
ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
@ -76538,6 +76742,9 @@ pci:v00008086d00002085*
pci:v00008086d00002086*
ID_MODEL_FROM_DATABASE=Sky Lake-E PCU Registers
pci:v00008086d00002088*
ID_MODEL_FROM_DATABASE=Sky Lake-E DDRIO Registers
pci:v00008086d0000208D*
ID_MODEL_FROM_DATABASE=Sky Lake-E CHA Registers
@ -80282,6 +80489,12 @@ pci:v00008086d00002701sv00008086sd00003904*
pci:v00008086d00002701sv00008086sd00003905*
ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [Optane] (15mm 2.5" U.2 (P4800X))
pci:v00008086d00002723*
ID_MODEL_FROM_DATABASE=Wi-Fi 6 AX200
pci:v00008086d00002723sv00008086sd00002723*
ID_MODEL_FROM_DATABASE=Wi-Fi 6 AX200 (Wireless AX200)
pci:v00008086d00002770*
ID_MODEL_FROM_DATABASE=82945G/GZ/P/PL Memory Controller Hub
@ -84578,18 +84791,27 @@ pci:v00008086d00003166*
pci:v00008086d00003184*
ID_MODEL_FROM_DATABASE=UHD Graphics 605
pci:v00008086d00003185*
ID_MODEL_FROM_DATABASE=UHD Graphics 605
pci:v00008086d0000318C*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Dynamic Platform and Thermal Framework Processor Participant
pci:v00008086d0000318E*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor NorthPeak
pci:v00008086d00003192*
ID_MODEL_FROM_DATABASE=Gemini Lake P2SB
pci:v00008086d00003197*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor PCI-default ISA-bridge
pci:v00008086d0000319A*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Trusted Execution Engine Interface
pci:v00008086d000031A2*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Integrated Sensor Solution
pci:v00008086d000031AC*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO I2C Host Controller
@ -84620,9 +84842,30 @@ pci:v00008086d000031CC*
pci:v00008086d000031D4*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Gaussian Mixture Model
pci:v00008086d000031D6*
ID_MODEL_FROM_DATABASE=Gemini Lake PCI Express Root Port
pci:v00008086d000031D7*
ID_MODEL_FROM_DATABASE=Gemini Lake PCI Express Root Port
pci:v00008086d000031D8*
ID_MODEL_FROM_DATABASE=Gemini Lake PCI Express Root Port
pci:v00008086d000031D9*
ID_MODEL_FROM_DATABASE=Gemini Lake PCI Express Root Port
pci:v00008086d000031DA*
ID_MODEL_FROM_DATABASE=Gemini Lake PCI Express Root Port
pci:v00008086d000031DB*
ID_MODEL_FROM_DATABASE=Gemini Lake PCI Express Root Port
pci:v00008086d000031EE*
ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO UART Host Controller
pci:v00008086d000031F0*
ID_MODEL_FROM_DATABASE=Gemini Lake Host Bridge
pci:v00008086d00003200*
ID_MODEL_FROM_DATABASE=GD31244 PCI-X SATA HBA
@ -85550,6 +85793,9 @@ pci:v00008086d000037D1sv000017AAsd00004021*
pci:v00008086d000037D1sv000017AAsd00004022*
ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 1GbE
pci:v00008086d000037D1sv000017AAsd00004024*
ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 1GbE
pci:v00008086d000037D2*
ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GBASE-T
@ -85571,6 +85817,9 @@ pci:v00008086d000037D2sv000017AAsd00004021*
pci:v00008086d000037D2sv000017AAsd00004022*
ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GBASE-T
pci:v00008086d000037D2sv000017AAsd00004024*
ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GBASE-T
pci:v00008086d000037D2sv000017AAsd00004025*
ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GBASE-T
@ -86705,6 +86954,9 @@ pci:v00008086d00003E1Fsv00001458sd00005000*
pci:v00008086d00003E30*
ID_MODEL_FROM_DATABASE=8th Gen Core 8-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S]
pci:v00008086d00003E34*
ID_MODEL_FROM_DATABASE=Coffee Lake HOST and DRAM Controller
pci:v00008086d00003E81*
ID_MODEL_FROM_DATABASE=8th Gen Core Processor PCIe Controller (x16)
@ -87764,6 +88016,9 @@ pci:v00008086d00006F53*
pci:v00008086d00006F54*
ID_MODEL_FROM_DATABASE=Xeon Processor D Family QuickAssist Technology
pci:v00008086d00006F55*
ID_MODEL_FROM_DATABASE=Xeon Processor D Family QuickAssist Technology Virtual Fuction
pci:v00008086d00006F60*
ID_MODEL_FROM_DATABASE=Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Home Agent 1
@ -88538,6 +88793,27 @@ pci:v00008086d00008818*
pci:v00008086d00008819*
ID_MODEL_FROM_DATABASE=Platform Controller Hub EG20T IEEE 1588 Hardware Assist
pci:v00008086d00008A0D*
ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 NHI #1
pci:v00008086d00008A13*
ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 USB Controller
pci:v00008086d00008A17*
ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 NHI #0
pci:v00008086d00008A1D*
ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 PCI Express Root Port #0
pci:v00008086d00008A1F*
ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 PCI Express Root Port #1
pci:v00008086d00008A21*
ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 PCI Express Root Port #2
pci:v00008086d00008A23*
ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 PCI Express Root Port #3
pci:v00008086d00008C00*
ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 4-port SATA Controller 1 [IDE mode]
@ -90828,10 +91104,7 @@ pci:v00008086d0000F1A6*
ID_MODEL_FROM_DATABASE=SSD Pro 7600p/760p/E 6100p Series
pci:v00008086d0000F1A8*
ID_MODEL_FROM_DATABASE=SSDPEKNW020T8 [660p, 2TB]
pci:v00008086d0000F1A8sv00008086sd0000390D*
ID_MODEL_FROM_DATABASE=SSDPEKNW020T8 [660p, 2TB]
ID_MODEL_FROM_DATABASE=SSD 660P Series
pci:v00008088*
ID_VENDOR_FROM_DATABASE=Beijing Wangxun Technology Co., Ltd.

View File

@ -22874,6 +22874,18 @@ usb:v05A6p0003*
usb:v05A6p0004*
ID_MODEL_FROM_DATABASE=CVA122E Cable Voice Adapter (WDM)
usb:v05A6p0A00*
ID_MODEL_FROM_DATABASE=Integrated Management Controller Hub
usb:v05A6p0A01*
ID_MODEL_FROM_DATABASE=Virtual Keyboard/Mouse
usb:v05A6p0A02*
ID_MODEL_FROM_DATABASE=Virtual Mass Storage
usb:v05A6p0A03*
ID_MODEL_FROM_DATABASE=Virtual Ethernet/RNDIS
usb:v05A7*
ID_VENDOR_FROM_DATABASE=Bose Corp.
@ -57527,6 +57539,9 @@ usb:v2357p0103*
usb:v2357p0105*
ID_MODEL_FROM_DATABASE=Archer T1U 802.11a/n/ac Wireless Adapter [MediaTek MT7610U]
usb:v2357p0106*
ID_MODEL_FROM_DATABASE=Archer T9UH v1 [Realtek RTL8814AU]
usb:v2357p0107*
ID_MODEL_FROM_DATABASE=TL-WN821N Version 5 RTL8192EU
@ -58265,6 +58280,12 @@ usb:v30A4*
usb:v30A4p0001*
ID_MODEL_FROM_DATABASE=Notecard
usb:v30C2*
ID_VENDOR_FROM_DATABASE=UNPARALLEL Innovation, Lda
usb:v30C2p1388*
ID_MODEL_FROM_DATABASE=SPL Meter
usb:v30EE*
ID_VENDOR_FROM_DATABASE=Fujitsu Connected Technologies Limited

View File

@ -345,6 +345,13 @@ evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnHP:pnHPSpectreNotebook*
EVDEV_ABS_35=1205:5691:47
EVDEV_ABS_36=1083:4808:65
# HP Envy x360
evdev:name:SynPS/2 Synaptics TouchPad:*svnHP:pnHPENVYx360Convertible15m-cn0xxx*
EVDEV_ABS_00=1302:5640:36
EVDEV_ABS_01=1119:4741:61
EVDEV_ABS_35=1302:5640:36
EVDEV_ABS_36=1119:4741:61
#########################################
# Lenovo
#########################################

View File

@ -510,6 +510,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*Pavilion*dv7*Notebook*PC:
# Pavilion and Spectre x360 13 (Prevents random airplane mode activation)
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[sS][pP][eE][cC][tT][rR][eE]*x360*13*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pn*[sS][pP][eE][cC][tT][rR][eE]*x360Convertible*:pvr*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[pP][aA][vV][iI][lL][iI][oO][nN]*13*x360*:pvr*
KEYBOARD_KEY_d7=unknown

View File

@ -160,6 +160,10 @@ sensor:modalias:acpi:BMA250E*:dmi:bvnINSYDECorp.:bvrG1D_S165*:svnilife:pnS165:*
sensor:modalias:acpi:BOSC0200*:dmi:*:svnHampoo:pnX1D3_C806N:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
# Chuwi Hi10 (CWI1515)
sensor:modalias:acpi:BOSC0200*:dmi:bvnAmericanMegatrendsInc.:bvrP02A_C106.60E:*:svnDefaultstring:pnDefaultstring:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
# Chuwi Hi10 Pro
sensor:modalias:acpi:BOSC0200*:dmi:*:svn*CHUWIINNOVATIONANDTECHNOLOGY*:pnHi10protablet:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
@ -263,7 +267,12 @@ sensor:modalias:acpi:KIOX000A*:dmi:bvnINSYDECorp.:bvrBYT70A.YNCHENG.WIN.007:*:sv
# quirk from "can play neverball" to "matches Windows 8 orientation"
# is then applied below.
sensor:modalias:platform:lis3lv02d:dmi:*svn*Hewlett-Packard*:*
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 0, -1; 0, 1, 0
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 0, -1; 0, 1, 0
# HP laptops which have the lis3lv02d device in the base, tell iio-sensor-proxy
# about this so that the sensor is not used for display orientation
sensor:modalias:platform:lis3lv02d:dmi:*svn*Hewlett-Packard*:*pnHPProBook4535s*
ACCEL_LOCATION=base
sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream7Tablet:*
sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream8Tablet:*
@ -271,7 +280,7 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream8Tablet:*
# HP Pavillion X2 10-n000nd
sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2Detachable:*:rn815D:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
#########################################
# I.T.Works
@ -386,6 +395,10 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnMEDION:pnAkoyaE2212TMD99720:*
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION*:pnE3216*:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
# Medion Akoya E3221 MD61237
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnE3221MD61237:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
# Medion Akoya E3222 MD62450
sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION*:pnE3222*:*
ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -3980,6 +3980,84 @@ BFD000-BFDFFF (base 16) Lumentum
Milpitas CA 95035
US
70-B3-D5 (hex) iREA System Industry
113000-113FFF (base 16) iREA System Industry
Rm 210, Sahwa-ro 210, Uichang-gu
Changwon-si Gyeongsangnam-do 51390
KR
70-B3-D5 (hex) TATTILE SRL
EC5000-EC5FFF (base 16) TATTILE SRL
VIA DONIZETTI, 1/3/5
MAIRANO BRESCIA 25030
IT
70-B3-D5 (hex) IHI Rotating Machinery Engineering Co.,Ltd.
89C000-89CFFF (base 16) IHI Rotating Machinery Engineering Co.,Ltd.
1, Shin-nakahara-cho, Isogo-ku
Yokohama Kanagawa 235-8501
JP
70-B3-D5 (hex) Nuance Hearing Ltd.
569000-569FFF (base 16) Nuance Hearing Ltd.
Raoul Wallenberg 24, Building A1, Floor 3
Tel Aviv 6971920
IL
70-B3-D5 (hex) Connected Response
C9C000-C9CFFF (base 16) Connected Response
12 Meiklejohn Street
Stirling Stirling FK9 5HQ
GB
70-B3-D5 (hex) Suzhou Sapa Automotive Technology Co.,Ltd
9AC000-9ACFFF (base 16) Suzhou Sapa Automotive Technology Co.,Ltd
Room 812, Building 1, Suhong Road 177
Suzhou Jiangsu 215000
CN
70-B3-D5 (hex) Netzikon GmbH
D3D000-D3DFFF (base 16) Netzikon GmbH
Gerberstrasse 34
Backnang 71522
DE
70-B3-D5 (hex) WiFi Nation Ltd
95F000-95FFFF (base 16) WiFi Nation Ltd
Unit 53, CoWorkz Business Centre, Chester West Employment Park, Minerva Avenue,
Chester Cheshire CH1 4QL
GB
70-B3-D5 (hex) i-View Communication Inc.
CA7000-CA7FFF (base 16) i-View Communication Inc.
2F, No.70, Min De Rd, Chutung, 310-48 Hsinchu, Taiwan
Hsinchu County Chutung 310148
TW
70-B3-D5 (hex) Amazon Technologies Inc.
270000-270FFF (base 16) Amazon Technologies Inc.
P.O Box 8102
Reno 89507
US
70-B3-D5 (hex) LX Design House
221000-221FFF (base 16) LX Design House
4 Cornwallis Street
Eveleigh NSW 2015
AU
70-B3-D5 (hex) Leidos
E10000-E10FFF (base 16) Leidos
7031 Albert Einstein Drive
Columbia MD 21046
US
70-B3-D5 (hex) Combilent
C50000-C50FFF (base 16) Combilent
Ryttermarken 5
Farum 3520
DK
70-B3-D5 (hex) EVCO SPA
A80000-A80FFF (base 16) EVCO SPA
VIA FELTRE N. 81
@ -4346,12 +4424,6 @@ F43000-F43FFF (base 16) Divelbiss Corporation
Seoul 06131
KR
70-B3-D5 (hex) Independent Project Engineering Lmited
E3C000-E3CFFF (base 16) Independent Project Engineering Lmited
Unit 1, Saxon Way
Melbourn Hertfordshire SG8 6DN
GB
70-B3-D5 (hex) MECT SRL
7C4000-7C4FFF (base 16) MECT SRL
VIA E. FERMI 57/59
@ -8012,11 +8084,11 @@ F0F000-F0FFFF (base 16) Kyoto Denkiki
Uji 6110041
JP
70-B3-D5 (hex) Harmonic Design GmbH
1F0000-1F0FFF (base 16) Harmonic Design GmbH
Bahnhofstraße 1
Steinheim 71711
DE
70-B3-D5 (hex) Copious Imaging LLC
4E8000-4E8FFF (base 16) Copious Imaging LLC
83 Hartwell Ave, Suite 150
Lexington MA 02421
US
70-B3-D5 (hex) APEX Stabilizations GmbH
A52000-A52FFF (base 16) APEX Stabilizations GmbH
@ -8024,18 +8096,84 @@ A52000-A52FFF (base 16) APEX Stabilizations GmbH
Vienna 1150
AT
70-B3-D5 (hex) NEOPATH INTEGRATED SYSTEMS LTDA
067000-067FFF (base 16) NEOPATH INTEGRATED SYSTEMS LTDA
Rua Paulo Emídio Barbosa, 485 - sala 302
Rio de Janeiro Rio de Janeiro 21941-907
BR
70-B3-D5 (hex) Waco Giken Co., Ltd.
815000-815FFF (base 16) Waco Giken Co., Ltd.
1-1-50, Suehiro-Cho,
Tsurumi-Ku, Yokohama 230-0045
JP
70-B3-D5 (hex) Monnit Corporation
D16000-D16FFF (base 16) Monnit Corporation
3400 S West Temple
Salt Lake City 84115
US
70-B3-D5 (hex) Harmonic Design GmbH
1F0000-1F0FFF (base 16) Harmonic Design GmbH
Bahnhofstraße 1
Steinheim 71711
DE
70-B3-D5 (hex) hmt telematik GmbH
EC4000-EC4FFF (base 16) hmt telematik GmbH
Grazer Str. 34b
Graz 8045
AT
70-B3-D5 (hex) Copious Imaging LLC
4E8000-4E8FFF (base 16) Copious Imaging LLC
83 Hartwell Ave, Suite 150
Lexington MA 02421
70-B3-D5 (hex) Exsom Computers LLC
4BF000-4BFFFF (base 16) Exsom Computers LLC
Office 3206, The Citadel Tower, Business Bay
Dubai Dubai 72891
AE
70-B3-D5 (hex) Piranha EMS Inc.
8CC000-8CCFFF (base 16) Piranha EMS Inc.
2681 Zanker Road
San Jose CA 95134
US
70-B3-D5 (hex) Small Data Garden Oy
568000-568FFF (base 16) Small Data Garden Oy
Paloheimonkatu 2
Riihimäki 11130
FI
70-B3-D5 (hex) Densitron Technologies Ltd
E3C000-E3CFFF (base 16) Densitron Technologies Ltd
16 South Park
Sevenoaks Kent TN13 1AN
GB
70-B3-D5 (hex) Shanghai AiGentoo Information Technology Co.,Ltd.
4FF000-4FFFFF (base 16) Shanghai AiGentoo Information Technology Co.,Ltd.
No.309 room 2445 14C?Tanggu Road?Hongkou District
Shanghai 200080
CN
70-B3-D5 (hex) GENTEC ELECTRO-OPTICS
CF7000-CF7FFF (base 16) GENTEC ELECTRO-OPTICS
445 ST-JEAN-BAPTISTE SUITE 160
Quebec Quebec G2E 5N7
CA
70-B3-D5 (hex) Ossiaco
CB0000-CB0FFF (base 16) Ossiaco
355 Peel St.
Montreal Quebec H3C2G9
CA
70-B3-D5 (hex) MB connect line GmbH Fernwartungssysteme
519000-519FFF (base 16) MB connect line GmbH Fernwartungssysteme
Winnettener Straße 6
Dinkelsbuehl Bavaria 91550
DE
70-B3-D5 (hex) System West dba ICS Electronics
E06000-E06FFF (base 16) System West dba ICS Electronics
7034 Commerce Circle Suite A
@ -11945,6 +12083,18 @@ F63000-F63FFF (base 16) Ars Products
Gap France 05000
FR
70-B3-D5 (hex) Bolide Technology Group, Inc.
9E1000-9E1FFF (base 16) Bolide Technology Group, Inc.
468 S. San Dimas Ave.,
San Dimas CA 91773
US
70-B3-D5 (hex) CYNIX Systems Inc
320000-320FFF (base 16) CYNIX Systems Inc
Dunchon-daero
Seongnam-si Gyeonggi-do 13215
KR
70-B3-D5 (hex) OOO Research and Production Center Computer Technologies
B84000-B84FFF (base 16) OOO Research and Production Center Computer Technologies
Komsomolsky avenue, 90-17
@ -11957,6 +12107,48 @@ F44000-F44FFF (base 16) Magneti Marelli S.p.A. Electronics
Corbetta MI 20011
IT
70-B3-D5 (hex) RCH ITALIA SPA
BF8000-BF8FFF (base 16) RCH ITALIA SPA
VIA CENDON 39
SILEA TREVISO 31057
IT
70-B3-D5 (hex) Orion S.r.l.
41F000-41FFFF (base 16) Orion S.r.l.
Via Alessandro Volta 25/B
Veggiano Padova 35030
IT
70-B3-D5 (hex) Digifocus Technology Inc.
ECC000-ECCFFF (base 16) Digifocus Technology Inc.
6F, No.89, Xinhu 1st Rd., Neihu Dist.
Taipei City 11494
TW
70-B3-D5 (hex) Palarum LLC
45A000-45AFFF (base 16) Palarum LLC
986 BELVEDERE DRIVE, Suite B
LEBANON OH 45036
US
70-B3-D5 (hex) Foxtel srl
4F7000-4F7FFF (base 16) Foxtel srl
via della chimica 25
viterbo 01100
IT
70-B3-D5 (hex) DynaMount LLC
B5B000-B5BFFF (base 16) DynaMount LLC
16357 Whispering Oaks Dr
Ramona CA 92065
US
70-B3-D5 (hex) Cubitech
AED000-AEDFFF (base 16) Cubitech
4-6 Kiprou str
Tavros Athens 17778
GR
70-B3-D5 (hex) YUYAMA MFG Co.,Ltd
BBB000-BBBFFF (base 16) YUYAMA MFG Co.,Ltd
3-3-1
@ -15722,9 +15914,6 @@ C27000-C27FFF (base 16) GD Mission Systems
Beaverton Oregon 97003
US
00-1B-C5 (hex) Private
0AB000-0ABFFF (base 16) Private
00-1B-C5 (hex) Tesla Controls
0A5000-0A5FFF (base 16) Tesla Controls
8400 Miramar Road
@ -15941,6 +16130,87 @@ ACC000-ACCFFF (base 16) Schneider Electric Motion USA
Angoulême 16800
FR
70-B3-D5 (hex) ARROW (CHINA) ELECTRONICS TRADING CO., LTD.
6AB000-6ABFFF (base 16) ARROW (CHINA) ELECTRONICS TRADING CO., LTD.
Floor 28, taikang financial building, building 1, yard 38, dongsanhuan north road, chaoyang district, Beijing
beijing beijing 100033
CN
70-B3-D5 (hex) Shenzhen Chanslink Network Technology Co., Ltd
49D000-49DFFF (base 16) Shenzhen Chanslink Network Technology Co., Ltd
Room 432, Block A,CMEC Plaza, Buji Road 1028
Shenzhen Guangdong 518001
CN
70-B3-D5 (hex) Aloxy
7BB000-7BBFFF (base 16) Aloxy
Sint-Pietersvliet 7
Antwerp 2000
BE
70-B3-D5 (hex) Umweltanalytik Holbach GmbH
DD6000-DD6FFF (base 16) Umweltanalytik Holbach GmbH
Sperberweg 3
Wadern 66687
DE
70-B3-D5 (hex) Azmoon Keifiat
41D000-41DFFF (base 16) Azmoon Keifiat
#3,19th Alley,Gandi Ave,Tehran
Tehran Tehran 1517865314
IR
70-B3-D5 (hex) Becton Dickinson
6B9000-6B9FFF (base 16) Becton Dickinson
7 Loveton Circle
Sparks MD 21152
US
70-B3-D5 (hex) Changzhou Rapid Information Technology Co,Ltd
E80000-E80FFF (base 16) Changzhou Rapid Information Technology Co,Ltd
Sanjing World Tech Park,3rd Floor,Bld NO3 NO.18huashan Road
Changzhou Jiangsu 213001
CN
70-B3-D5 (hex) SC3 Automation
EE9000-EE9FFF (base 16) SC3 Automation
790 Principale Ouest
Magog Quebec J1X2B3
CA
00-1B-C5 (hex) Private
0AB000-0ABFFF (base 16) Private
70-B3-D5 (hex) Navaero Avionics AB
045000-045FFF (base 16) Navaero Avionics AB
Forradsgatan 4
Sundsvall Vasternorrland 85633
SE
70-B3-D5 (hex) ResIOT UBLSOFTWARE SRL
DD4000-DD4FFF (base 16) ResIOT UBLSOFTWARE SRL
Ripa di Porta Ticinese, 39
Milano Mi 20143
IT
70-B3-D5 (hex) AZ-TECHNOLOGY SDN BHD
C69000-C69FFF (base 16) AZ-TECHNOLOGY SDN BHD
A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA
PETALING JAYA SELANGOR 47301
MY
70-B3-D5 (hex) GTI Technologies Inc
B5A000-B5AFFF (base 16) GTI Technologies Inc
12707 High Bluff Dr, ste 200
San Diego CA 92130
US
70-B3-D5 (hex) JSC «SATIS-TL-94»
CB9000-CB9FFF (base 16) JSC «SATIS-TL-94»
1, bld.2, Timiryazevskaya str.
Moscow 127422
RU
70-B3-D5 (hex) DISMUNTEL SAL
92C000-92CFFF (base 16) DISMUNTEL SAL
Pol ind cotes
@ -17048,9 +17318,6 @@ D62000-D62FFF (base 16) Andasis Elektronik San. ve Tic. A.Ş.
Kwai Chung 852
HK
70-B3-D5 (hex) Private
90E000-90EFFF (base 16) Private
70-B3-D5 (hex) GS Elektromedizinsiche Geräte G. Stemple GmbH
144000-144FFF (base 16) GS Elektromedizinsiche Geräte G. Stemple GmbH
Hauswiesenstr. 26
@ -19952,20 +20219,104 @@ A38000-A38FFF (base 16) Aditec GmbH
Offenau Baden-Wuerttemberg 74254
DE
70-B3-D5 (hex) Dataflex International BV
52A000-52AFFF (base 16) Dataflex International BV
van Nassauweg 2-6
Krimpen aan den IJssel Zuid-Holland 2921 LX
NL
70-B3-D5 (hex) Argosy Labs Inc.
E5B000-E5BFFF (base 16) Argosy Labs Inc.
490 Canal St #14
San Rafael CA 94901
US
70-B3-D5 (hex) Brayden Automation Corp
B19000-B19FFF (base 16) Brayden Automation Corp
6230 Aviation Circle
Loveland CO 80538
US
70-B3-D5 (hex) PEEK TRAFFIC
691000-691FFF (base 16) PEEK TRAFFIC
5401 N SAM HOUSTON PKWY W
HOUSTON 77086
US
70-B3-D5 (hex) Brayden Automation Corp
B19000-B19FFF (base 16) Brayden Automation Corp
6230 Aviation Circle
Loveland CO 80538
70-B3-D5 (hex) MATELEX
372000-372FFF (base 16) MATELEX
26, AVENUE DU PETIT PARC
VINCENNES 94683
FR
70-B3-D5 (hex) ETL Elektrotechnik Lauter GmbH
DE3000-DE3FFF (base 16) ETL Elektrotechnik Lauter GmbH
Konrad-Zuse-Str. 2
Mauerstetten Bavaria 87665
DE
70-B3-D5 (hex) Phytron GmbH
7BE000-7BEFFF (base 16) Phytron GmbH
Industriestr. 12
Groebenzell Bayern 82194
DE
70-B3-D5 (hex) Light field Lab
D27000-D27FFF (base 16) Light field Lab
699 E Brokaw Rd
San Jose CA 95112
US
70-B3-D5 (hex) Solarlytics, Inc.
366000-366FFF (base 16) Solarlytics, Inc.
288 Lindbergh Avenue
LIVERMORE CA 94551
US
70-B3-D5 (hex) CENSIS, Uiversity of Glasgow
1C2000-1C2FFF (base 16) CENSIS, Uiversity of Glasgow
121 George Street
Glasgow G1 1RD
GB
70-B3-D5 (hex) Gstar Creation Co .,Ltd
A67000-A67FFF (base 16) Gstar Creation Co .,Ltd
1F NO53 Jimay Street san chong district
New Taipei 241
TW
70-B3-D5 (hex) KSE GmbH
38A000-38AFFF (base 16) KSE GmbH
Frühlingstraße 31-33
Ingolstadt 85055
DE
70-B3-D5 (hex) Maytronics Ltd.
90E000-90EFFF (base 16) Maytronics Ltd.
70-B3-D5 (hex) InterTalk Critical Information Systems
5D0000-5D0FFF (base 16) InterTalk Critical Information Systems
371 Cutler Avenue
Dartmouth Nova Scotia B3B 0J5
CA
70-B3-D5 (hex) fpgalabs.com
BA5000-BA5FFF (base 16) fpgalabs.com
p.Moskovskiy, d. Rumyantsevo, str.4
Moscow 108811
RU
70-B3-D5 (hex) JSC Kaluga Astral
E89000-E89FFF (base 16) JSC Kaluga Astral
Tsyolkovsky 4
Kaluga Kaluga 248000
RU
70-B3-D5 (hex) Sunsa, Inc
BFF000-BFFFFF (base 16) Sunsa, Inc
3422 Fait Ave
Baltimore MD 21224
US

View File

@ -1,8 +1,8 @@
#
# List of PCI ID's
#
# Version: 2019.06.30
# Date: 2019-06-30 03:15:01
# Version: 2019.08.22
# Date: 2019-08-22 03:15:01
#
# Maintained by Albert Pool, Martin Mares, and other volunteers from
# the PCI ID Project at https://pci-ids.ucw.cz/.
@ -608,6 +608,7 @@
1000 3060 SAS9217-4i4e
1014 0472 N2125 External Host Bus Adapter
1590 0041 H220i
1590 0042 H221 / 9207-8e
1590 0044 H220i
8086 3000 RS25GB008 RAID Controller
8086 3060 RS25FB044 RAID Controller
@ -683,7 +684,11 @@
1028 200c HBA355i Front
1028 200d HBA355e Adapter
1028 200e HBA355i MX
1d49 0205 ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA
1d49 0206 ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA
00e6 Fusion-MPT 12GSAS/PCIe Secure SAS38xx
1d49 0205 ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA
1d49 0206 ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA
00e7 Fusion-MPT 12GSAS/PCIe Unsupported SAS38xx
02b0 Virtual Endpoint on PCIe Switch
1d49 0001 ThinkSystem 1610-4P NVMe Switch Adapter
@ -766,11 +771,23 @@
1028 1ae1 PERC H755 Front
1028 1ae2 PERC H755N Front
1028 1ae3 PERC H755 MX
1d49 060a ThinkSystem RAID 940-8i 4GB Flash PCIe Gen4 12Gb Adapter
1d49 060b ThinkSystem RAID 940-8i 8GB Flash PCIe Gen4 12Gb Adapter
1d49 060c ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Adapter
1d49 060d ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Internal Adapter
1d49 060e ThinkSystem RAID 940-32i 8GB Flash PCIe Gen4 12Gb Adapter
1d49 060f ThinkSystem RAID 940-8e 4GB Flash PCIe Gen4 12Gb Adapter
10e2 MegaRAID 12GSAS/PCIe Secure SAS39xx
1028 1ae0 PERC H755 Adapter
1028 1ae1 PERC H755 Front
1028 1ae2 PERC H755N Front
1028 1ae3 PERC H755 MX
1d49 060a ThinkSystem RAID 940-8i 4GB Flash PCIe Gen4 12Gb Adapter
1d49 060b ThinkSystem RAID 940-8i 8GB Flash PCIe Gen4 12Gb Adapter
1d49 060c ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Adapter
1d49 060d ThinkSystem RAID 940-16i 8GB Flash PCIe Gen4 12Gb Internal Adapter
1d49 060e ThinkSystem RAID 940-32i 8GB Flash PCIe Gen4 12Gb Adapter
1d49 060f ThinkSystem RAID 940-8e 4GB Flash PCIe Gen4 12Gb Adapter
10e3 MegaRAID 12GSAS/PCIe Unsupported SAS39xx
10e4 MegaRAID 12GSAS/PCIe Unsupported SAS38xx
10e5 MegaRAID 12GSAS/PCIe SAS38xx
@ -2521,6 +2538,7 @@
1028 1726 Radeon RX 560DX
103c 8479 Radeon RX 560X Mobile
1043 04bc Radeon RX 560
1043 052f Radeon RX 560
1458 22ed Radeon RX 560
148c 2381 Radeon RX 560
1682 9560 Radeon RX 560
@ -3213,7 +3231,7 @@
174b e180 Radeon HD 7350
17af 3015 Radeon HD 7350
68fe Cedar LE
6900 Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445]
6900 Topaz XT [Radeon R7 M260/M265 / M340/M360 / M440/M445 / 530/535 / 620/625 Mobile]
1025 1056 Radeon R7 M360 / R8 M365DX
1028 0640 Radeon R7 M260/M265
1028 0643 Radeon R7 M260/M265
@ -3424,7 +3442,7 @@
1043 04a0 Radeon R9 FURY X
174b e329 Radeon R9 FURY
7310 Navi 10
731f Navi 10
731f Navi 10 [Radeon RX 5700 / 5700 XT]
7833 RS350 Host Bridge
7834 RS350 [Radeon 9100 PRO/XT IGP]
7835 RS350M [Mobility Radeon 9000 IGP]
@ -6233,6 +6251,7 @@
81c3 VO-4 [PSP TOOL Video Output Device]
81ce SxS Pro memory card
81ff PS3 TOOL MRP
8200 PS3 TOOL RSX Tracing FPGA
820e CXD9208GP [PS3 PS2 emulation subsystem adapter]
# 2nd ID
905c SxS Pro memory card
@ -10793,7 +10812,7 @@
0fc0 GK107 [GeForce GT 640 OEM]
0fc1 GK107 [GeForce GT 640]
0fc2 GK107 [GeForce GT 630 OEM]
0fc5 GK107
0fc5 GK107 [GeForce GT 1030]
0fc6 GK107 [GeForce GTX 650]
1043 8428 GTX650-DC-1GD5
0fc8 GK107 [GeForce GT 740]
@ -11725,7 +11744,9 @@
1e3c TU102GL
1e3d TU102GL
1e3e TU102GL
1e81 TU104 [GeForce RTX 2080 SUPER]
1e82 TU104 [GeForce RTX 2080]
1e84 TU104 [GeForce RTX 2070 SUPER]
1e87 TU104 [GeForce RTX 2080 Rev. A]
1e90 TU104M [GeForce RTX 2080 Mobile]
1eab TU104M
@ -11741,6 +11762,7 @@
1f02 TU106 [GeForce RTX 2070]
1043 8673 TURBO RTX 2070
1f04 TU106
1f06 TU106 [GeForce RTX 2060 SUPER]
1f07 TU106 [GeForce RTX 2070 Rev. A]
1f08 TU106 [GeForce RTX 2060 Rev. A]
1f10 TU106M [GeForce RTX 2070 Mobile]
@ -18770,6 +18792,7 @@
4412 BCM4412 10/100BaseT
4430 BCM44xx CardBus iLine32 HomePNA 2.0
4432 BCM4432 CardBus 10/100BaseT
4464 BCM4464 802.11ac Wireless Network Adapter
4610 BCM4610 Sentry5 PCI to SB Bridge
4611 BCM4610 Sentry5 iLine32 HomePNA 1.0
4612 BCM4610 Sentry5 V.90 56k Modem
@ -18845,6 +18868,7 @@
14e4 8023 PS410T-H04 NetXtreme-S 4x10G 10GBaseT PCIe SmartNIC
14e4 8024 Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w4GB DRAM (Part No BCM958802A8044C)
14e4 8028 Stingray Dual-Port 25Gb Ethernet PCIe SmartNIC w8GB DRAM (Part No BCM958802A8048C)
1bb0 0021 HPE SimpliVity Accelerator
d804 BCM58804 Stingray 100Gb Ethernet SoC
14e5 Pixelfusion Ltd
14e6 SHINING Technology Inc
@ -19320,6 +19344,9 @@
9278 10 Volt Delta Sigma Converter Card
9287 Analog Output Card
9290 FPGA Card
9300 Universal Exhaust Gas Oxygen Sensor Simulator
9310 Digital Programmable Resistor
9350 Analog Input Card
1543 SILICON Laboratories
3052 Intel 537 [Winmodem]
4c22 Si3036 MC'97 DAA
@ -19602,6 +19629,8 @@
1021 MT28861
1974 MT28800 Family [ConnectX-5 PCIe Bridge]
1975 MT416842 Family [BlueField SoC PCIe Bridge]
1976 MT28908 Family [ConnectX-6 PCIe Bridge]
1977 MT2892 Family [ConnectX-6 Dx PCIe Bridge]
1978 MT42822 Family [BlueField-2 SoC PCIe Bridge]
4117 MT27712A0-FDCF-AE
1bd4 0039 SN10XMP2P25
@ -21789,6 +21818,7 @@
13c2 3016 TT-budget S2-4200 Twin
4254 0552 S952 v3
1ae0 Google, Inc.
0042 Compute Engine Virtual Ethernet [gVNIC]
1ae3 SANBlaze Technology, Inc.
1ae7 First Wise Media GmbH
0520 HFC-S PCI A [X-TENSIONS XC-520]
@ -22149,6 +22179,7 @@
0003 Ultrastar SN100 Series NVMe SSD
1014 04f5 PCIe3 1.6TB NVMe Flash Adapter
1014 04f6 PCIe3 3.2TB NVMe Flash Adapter
1c58 0003 Ultrastar SN100/SN150 NVMe SSD
0023 Ultrastar SN200 Series NVMe SSD
1c58 8823 Ultrastar Memory (ME200)
1c5c SK hynix
@ -22204,6 +22235,8 @@
0007 ExaNIC X40
0008 ExaNIC V5P
0009 ExaNIC X25
000a ExaNIC X100
000b ExaNIC V9P
0100 ExaDISK FX1
1cf0 Akitio
1cf7 Subspace Dynamics
@ -22222,41 +22255,41 @@
0714 ZX-100/ZX-200 PCI Express Root Port
0715 ZX-100/ZX-200 PCI Express Root Port
0716 ZX-D PCI Express Root Port
0717 ZX-D PCI Express Root Port
0718 ZX-D PCI Express Root Port
0719 ZX-D PCI Express Root Port
071a ZX-D PCI Express Root Port
071b ZX-D PCI Express Root Port
071c ZX-D PCI Express Root Port
071d ZX-D PCI Express Root Port
071e ZX-D PCI Express Root Port
0717 ZX-D/ZX-E PCI Express Root Port
0718 ZX-D/ZX-E PCI Express Root Port
0719 ZX-D/ZX-E PCI Express Root Port
071a ZX-D/ZX-E PCI Express Root Port
071b ZX-D/ZX-E PCI Express Root Port
071c ZX-D/ZX-E PCI Express Root Port
071d ZX-D/ZX-E PCI Express Root Port
071e ZX-D/ZX-E PCI Express Root Port
071f ZX-200 Upstream Port of PCI Express Switch
0720 ZX-200 PCIE RC6 controller
0721 ZX-200 Downstream Port of PCI Express Switch
0722 ZX-200 PCIE P2C bridge
1000 ZX-D Standard Host Bridge
1001 ZX-D Miscellaneous Bus
1001 ZX-D/ZX-E Miscellaneous Bus
3001 ZX-100 Standard Host Bridge
300a ZX-100 Miscellaneous Bus
3038 ZX-100/ZX-200 Standard Universal PCI to USB Host Controller
3104 ZX-100/ZX-200 Standard Enhanced PCI to USB Host Controller
3038 ZX-100/ZX-200/ZX-E Standard Universal PCI to USB Host Controller
3104 ZX-100/ZX-200/ZX-E Standard Enhanced PCI to USB Host Controller
31b0 ZX-100/ZX-D Standard Host Bridge
31b1 ZX-100/ZX-D Standard Host Bridge
31b2 ZX-100/ZX-D DRAM Controller
31b3 ZX-100/ZX-D Power Management Controller
31b4 ZX-100/ZX-D I/O APIC
31b5 ZX-100/ZX-D Scratch Device
31b7 ZX-100/ZX-D Standard Host Bridge
31b7 ZX-100/ZX-D/ZX-E Standard Host Bridge
31b8 ZX-100/ZX-D PCI to PCI Bridge
3288 ZX-100/ZX-D High Definition Audio Controller
345b ZX-100/ZX-D Miscellaneous Bus
3288 ZX-100/ZX-D/ZX-E High Definition Audio Controller
345b ZX-100/ZX-D/ZX-E Miscellaneous Bus
3a02 ZX-100 C-320 GPU
3a03 ZX-D C-860 GPU
9002 ZX-100/ZX-200 EIDE Controller
9003 ZX-100 EIDE Controller
9045 ZX-100/ZX-D RAID Accelerator
9046 ZX-D RAID Accelerator
9083 ZX-100/ZX-200 StorX AHCI Controller
9003 ZX-100/ZX-E EIDE Controller
9045 ZX-100/ZX-D/ZX-E RAID Accelerator 0
9046 ZX-D/ZX-E RAID Accelerator 1
9083 ZX-100/ZX-200/ZX-E StorX AHCI Controller
9084 ZX-100 StorX AHCI Controller
9100 ZX-200 Cross bus
9101 ZX-200 Traffic Controller
@ -22265,10 +22298,11 @@
9180 ZX-200 Networking Gigabit Ethernet Adapter
9202 ZX-100 USB eXtensible Host Controller
9203 ZX-200 USB eXtensible Host Controller
9204 ZX-E USB eXtensible Host Controller
9286 ZX-D eMMC Host Controller
9300 ZX-D eSPI Host Controller
9300 ZX-D/ZX-E eSPI Host Controller
95d0 ZX-100 Universal SD Host Controller
f410 ZX-100/ZX-D PCI Com Port
f410 ZX-100/ZX-D/ZX-E PCI Com Port
1d18 RME
0001 Fireface UFX+
1d1d CNEX Labs
@ -22284,6 +22318,11 @@
00c0 Turbocard3 Accelerator
0140 Open Network Interface Card 40G
e004 AB01/EMB01 Development Board
1d37 NovaSparks
0013 PM3
0014 PM4
0015 PM4edge
0016 PM4edge User Device
1d40 Techman Electronics (Changshu) Co., Ltd.
1d44 DPT
a400 PM2x24/PM3224
@ -22321,6 +22360,8 @@
1d6c 2001 DPDK-Aware Virtual Function [Arkville VF]
100e AR-ARKA-FX1 [Arkville 64B DPDK Data Mover]
1d6c 2001 DPDK-Aware Virtual Function [Arkville VF]
100f AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Versal]
1010 AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex]
4200 A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument]
1d72 Xiaomi
1d78 DERA
@ -22421,6 +22462,12 @@
0215 Acorn CLE-215
021f Acorn CLE-215+
1525 Xilinx BCU-1525
# VU33P FPGA Accelerator
1533 ForestKitten 33
# JungleCat VU33P Module
1633 JCM33
# JungleCat VU35P Module
1635 JCM35
1e26 Fujitsu Client Computing Limited
1e38 Thinci, Inc
1e3d Burlywood, Inc
@ -22432,6 +22479,7 @@
0001 PY8800
0100 PY8800
0000 0100 PY8800 64GB Accelerator
1e6b Axiado Corp.
# nee Tumsan Oy
1fc0 Ascom (Finland) Oy
0300 E2200 Dual E1/Rawpipe Card
@ -22506,6 +22554,7 @@
20f4 TRENDnet
2116 ZyDAS Technology Corp.
21c3 21st Century Computer Corp.
22b8 Flex-Logix Technologies
22db Missing Link Electronics, Inc.
2304 Colorgraphic Communications Corp.
2348 Racore
@ -22901,6 +22950,11 @@
0030 [mvHYPERION-HD-SDI-Merger] HD-SDI PCI Express x4 Frame Grabber
4ddc ILC Data Device Corp
0100 DD-42924I5-300 (ARINC 429 Data Bus)
0300 SB-3620 Motion Feedback Device
0340 SB-3623 Motion Feedback Device
0400 SB-3622 Motion Feedback Device
0500 SB-3621 Motion Feedback Device
0510 SB-3624 Motion Feedback Device
0801 BU-65570I1 MIL-STD-1553 Test and Simulation
0802 BU-65570I2 MIL-STD-1553 Test and Simulation
0811 BU-65572I1 MIL-STD-1553 Test and Simulation
@ -22917,6 +22971,10 @@
0b02 BU-65569I2 MIL-STD-1553 Data Bus
0b03 BU-65569I3 MIL-STD-1553 Data Bus
0b04 BU-65569I4 MIL-STD-1553 Data Bus
0d01 SB-3641 Motion Feedback Device
0d10 SB-365x Motion Feedback Device
2f00 SB-3642 Motion Feedback Device
3000 SB-3644 Motion Feedback Device
5045 University of Toronto
4243 BLASTbus PCI Interface Card v1
5046 GemTek Technology Corporation
@ -23855,6 +23913,10 @@
1590 0264 NVMe Datacenter SSD [3DNAND] 3.2TB 2.5" U.2 (P4600)
1590 0265 NVMe Datacenter SSD [3DNAND] 6.4TB 2.5" U.2 (P4600)
1590 026c NVMe Datacenter SSD [3DNAND] 4.0TB AIC (P4500)
1d49 4702 Thinksystem Intel P4500 NVMe U.2
1d49 4704 Thinksystem Intel P4500 NVMe AIC
1d49 4712 Thinksystem Intel P4600 NVMe U.2
1d49 4714 Thinksystem Intel P4600 NVMe AIC
1d49 4802 Thinksystem U.2 P4510 NVMe SSD
1d49 4812 Thinksystem U.2 P4610 NVMe SSD
8086 4308 Intel SSD D5-P4320 and D5-P4326
@ -25095,6 +25157,8 @@
1563 Ethernet Controller 10G X550T
1028 1fa8 Ethernet 10G 4P X550/I350 rNDC
1028 1fa9 Ethernet 10G 4P X550 rNDC
1137 02b2 X550-TX 10 Gig LOM
1137 02b3 X550-TX 10 Gig LOM
1170 0001 Intel Ethernet Controller X550-T2 OCP card
14c0 1201 X550 10Gb 2P RJ45 OCP Mezz
1590 00d1 Ethernet 10Gb 2-port 562T Adapter
@ -25165,6 +25229,7 @@
8086 4005 Ethernet Controller X710 for 10GbE SFP+
8086 4006 Ethernet Controller X710 for 10GbE SFP+
8086 4007 Ethernet Controller X710 for 10GbE SFP+
1574 Ethernet Controller XL710 Emulation
1575 DSL6340 Thunderbolt 3 NHI [Alpine Ridge 2C 2015]
1576 DSL6340 Thunderbolt 3 Bridge [Alpine Ridge 2C 2015]
1577 DSL6540 Thunderbolt 3 NHI [Alpine Ridge 4C 2015]
@ -25188,6 +25253,7 @@
1028 1f9f Ethernet 40G 2P XL710 QSFP+ rNDC
108e 0000 10 Gb/40 Gb Ethernet Adapter
108e 7b1b 10 Gb/40 Gb Ethernet Adapter
108e 7b1d 10Gb/40Gb Ethernet Adapter
1137 0000 Ethernet Converged NIC XL710-QDA2
1137 013c Ethernet Converged NIC XL710-QDA2
8086 0000 Ethernet Converged Network Adapter XL710-Q2
@ -25226,11 +25292,14 @@
158a Ethernet Controller XXV710 for 25GbE backplane
1590 0000 10/25Gb Ethernet Adapter
1590 0286 Synergy 4610C 10/25Gb Ethernet Adapter
8086 0000 Ethernet Controller XXV710 for 25GbE backplane
8086 000a Ethernet 25G 2P XXV710 Mezz
158b Ethernet Controller XXV710 for 25GbE SFP28
1137 0000 Ethernet Network Adapter XXV710
1137 0225 Ethernet Network Adapter XXV710
1137 02b4 Ethernet Network Adapter XXV710 OCP 2.0
1590 0000 Ethernet Network Adapter XXV710-2
1590 0253 Ethernet 10/25/Gb 2-port 661SFP28 Adapter
8086 0000 Ethernet Network Adapter XXV710
8086 0001 Ethernet Network Adapter XXV710-2
8086 0002 Ethernet Network Adapter XXV710-2
@ -25372,6 +25441,8 @@
163d Broadwell-U Integrated Graphics
163e Broadwell-U Integrated Graphics
1889 Ethernet Adaptive Virtual Function
18a0 C4xxx Series QAT
18a1 C4XXX Series QAT Virtual Function
1900 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
1901 Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x16)
1902 HD Graphics 510
@ -25981,6 +26052,7 @@
2084 Sky Lake-E PCU Registers
2085 Sky Lake-E PCU Registers
2086 Sky Lake-E PCU Registers
2088 Sky Lake-E DDRIO Registers
208d Sky Lake-E CHA Registers
208e Sky Lake-E CHA Registers
2241 Larrabee
@ -27235,6 +27307,8 @@
1028 200a Express Flash NVMe [Optane] 375GB AIC (P4800X)
8086 3904 NVMe Datacenter SSD [Optane] x4 AIC (P4800X)
8086 3905 NVMe Datacenter SSD [Optane] 15mm 2.5" U.2 (P4800X)
2723 Wi-Fi 6 AX200
8086 2723 Wireless AX200
2770 82945G/GZ/P/PL Memory Controller Hub
1028 01ad OptiPlex GX620
103c 2a3b Pavilion A1512X
@ -28669,10 +28743,13 @@
8086 4210 Dual Band Wireless AC 3165
3166 Dual Band Wireless-AC 3165 Plus Bluetooth
3184 UHD Graphics 605
3185 UHD Graphics 605
318c Celeron/Pentium Silver Processor Dynamic Platform and Thermal Framework Processor Participant
318e Celeron/Pentium Silver Processor NorthPeak
3192 Gemini Lake P2SB
3197 Celeron/Pentium Silver Processor PCI-default ISA-bridge
319a Celeron/Pentium Silver Processor Trusted Execution Engine Interface
31a2 Celeron/Pentium Silver Processor Integrated Sensor Solution
31ac Celeron/Pentium Silver Processor Serial IO I2C Host Controller
31ae Celeron/Pentium Silver Processor Serial IO I2C Host Controller
31bc Celeron/Pentium Silver Processor Serial IO UART Host Controller
@ -28683,7 +28760,14 @@
31c6 Celeron/Pentium Silver Processor Serial IO SPI Host Controller
31cc Celeron/Pentium Silver Processor SDA Standard Compliant SD Host Controller
31d4 Celeron/Pentium Silver Processor Gaussian Mixture Model
31d6 Gemini Lake PCI Express Root Port
31d7 Gemini Lake PCI Express Root Port
31d8 Gemini Lake PCI Express Root Port
31d9 Gemini Lake PCI Express Root Port
31da Gemini Lake PCI Express Root Port
31db Gemini Lake PCI Express Root Port
31ee Celeron/Pentium Silver Processor Serial IO UART Host Controller
31f0 Gemini Lake Host Bridge
3200 GD31244 PCI-X SATA HBA
1775 c200 C2K onboard SATA host bus adapter
3310 IOP348 I/O Processor
@ -28993,6 +29077,7 @@
17aa 4020 Ethernet Connection X722 for 1GbE
17aa 4021 Ethernet Connection X722 for 1GbE
17aa 4022 Ethernet Connection X722 for 1GbE
17aa 4024 Ethernet Connection X722 for 1GbE
37d2 Ethernet Connection X722 for 10GBASE-T
1170 37d2 Ethernet Connection X722 for 10GBASE-T
14cd 0030 Ethernet OCP 2x10G RJ45 Phy Card [USI-X557-10GbaseT]
@ -29000,6 +29085,7 @@
17aa 4020 Ethernet Connection X722 for 10GBASE-T
17aa 4021 Ethernet Connection X722 for 10GBASE-T
17aa 4022 Ethernet Connection X722 for 10GBASE-T
17aa 4024 Ethernet Connection X722 for 10GBASE-T
17aa 4025 Ethernet Connection X722 for 10GBASE-T
37d3 Ethernet Connection X722 for 10GbE SFP+
1590 0219 Ethernet 10Gb 2-port 568FLR-MMSFP+ Adapter
@ -29378,6 +29464,7 @@
3e1f 8th Gen Core 4-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S]
1458 5000 Z370 AORUS Gaming K3-CF
3e30 8th Gen Core 8-core Desktop Processor Host Bridge/DRAM Registers [Coffee Lake S]
3e34 Coffee Lake HOST and DRAM Controller
3e81 8th Gen Core Processor PCIe Controller (x16)
3e85 8th Gen Core Processor PCIe Controller (x8)
3e89 8th Gen Core Processor PCIe Controller (x4)
@ -29731,6 +29818,7 @@
6f52 Xeon Processor D Family QuickData Technology Register DMA Channel 2
6f53 Xeon Processor D Family QuickData Technology Register DMA Channel 3
6f54 Xeon Processor D Family QuickAssist Technology
6f55 Xeon Processor D Family QuickAssist Technology Virtual Fuction
6f60 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Home Agent 1
6f68 Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Target Address/Thermal/RAS
6f6a Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Channel Target Address Decoder
@ -29989,6 +30077,13 @@
8817 Platform Controller Hub EG20T I2C Controller
8818 Platform Controller Hub EG20T Controller Area Network (CAN) Controller
8819 Platform Controller Hub EG20T IEEE 1588 Hardware Assist
8a0d Ice Lake Thunderbolt 3 NHI #1
8a13 Ice Lake Thunderbolt 3 USB Controller
8a17 Ice Lake Thunderbolt 3 NHI #0
8a1d Ice Lake Thunderbolt 3 PCI Express Root Port #0
8a1f Ice Lake Thunderbolt 3 PCI Express Root Port #1
8a21 Ice Lake Thunderbolt 3 PCI Express Root Port #2
8a23 Ice Lake Thunderbolt 3 PCI Express Root Port #3
8c00 8 Series/C220 Series Chipset Family 4-port SATA Controller 1 [IDE mode]
8c01 8 Series Chipset Family 4-port SATA Controller 1 [IDE mode] - Mobile
8c02 8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]
@ -30753,8 +30848,7 @@
d158 Core Processor Miscellaneous Registers
f1a5 SSD 600P Series
f1a6 SSD Pro 7600p/760p/E 6100p Series
f1a8 SSDPEKNW020T8 [660p, 2TB]
8086 390d SSDPEKNW020T8 [660p, 2TB]
f1a8 SSD 660P Series
8088 Beijing Wangxun Technology Co., Ltd.
1001 Ethernet Controller RP1000 for 10GbE SFP+
8088 0000 Ethernet Network Adaptor RP1000 for 10GbE SFP+
@ -31824,6 +31918,8 @@ C 11 Signal processing controller
80 Signal processing controller
C 12 Processing accelerators
00 Processing accelerators
# For the class of PCI attached devices which perform a function of Deep Learning Neural Network inference acceleration
01 AI Inference Accelerator
C 13 Non-Essential Instrumentation
C 40 Coprocessor
C ff Unassigned class

View File

@ -9,8 +9,8 @@
# The latest version can be obtained from
# http://www.linux-usb.org/usb.ids
#
# Version: 2019.05.08
# Date: 2019-05-08 20:34:05
# Version: 2019.08.21
# Date: 2019-08-21 20:34:05
#
# Vendors, devices and interfaces. Please keep sorted.
@ -7644,6 +7644,10 @@
0002 CVA122 Cable Voice Adapter (WDM)
0003 CVA124E Cable Voice Adapter (WDM)
0004 CVA122E Cable Voice Adapter (WDM)
0a00 Integrated Management Controller Hub
0a01 Virtual Keyboard/Mouse
0a02 Virtual Mass Storage
0a03 Virtual Ethernet/RNDIS
05a7 Bose Corp.
4000 Bluetooth Headset
4001 Bluetooth Headset in DFU mode
@ -19196,6 +19200,7 @@
0101 RTL8812AU Archer T4U 802.11ac
0103 Archer T4UH wireless Realtek 8812AU
0105 Archer T1U 802.11a/n/ac Wireless Adapter [MediaTek MT7610U]
0106 Archer T9UH v1 [Realtek RTL8814AU]
0107 TL-WN821N Version 5 RTL8192EU
0108 TL-WN822N Version 4 RTL8192EU
0109 TL WN823N RTL8192EU
@ -19442,6 +19447,8 @@
0001 Nitrogen Bootloader
30a4 Blues Wireless
0001 Notecard
30c2 UNPARALLEL Innovation, Lda
1388 SPL Meter
30ee Fujitsu Connected Technologies Limited
1001 F-01L
3125 Eagletron

View File

@ -544,7 +544,12 @@
the unit
(<literal>_SYSTEMD_UNIT=<replaceable>UNIT</replaceable></literal>),
along with additional matches for messages from systemd and
messages about coredumps for the specified unit.</para>
messages about coredumps for the specified unit. A match
is also added for <literal>_SYSTEMD_SLICE=<replaceable>UNIT</replaceable></literal>,
such that if the provided <replaceable>UNIT</replaceable> is a
<citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
unit, all logs of the children of the slice will be logged.
</para>
<para>This parameter can be specified multiple times.</para>
</listitem>
@ -558,7 +563,11 @@
(<literal>_SYSTEMD_USER_UNIT=</literal> and
<literal>_UID=</literal>) and additional matches for messages
from session systemd and messages about coredumps for the
specified unit.</para>
specified unit. A match
is also added for <literal>_SYSTEMD_USER_SLICE=<replaceable>UNIT</replaceable></literal>,
such that if the provided <replaceable>UNIT</replaceable> is a
<citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>
unit, all logs of the children of the unit will be logged.</para>
<para>This parameter can be specified multiple times.</para>
</listitem>

View File

@ -200,7 +200,7 @@
<varlistentry>
<term><option>status [<replaceable>LINK</replaceable>…]</option></term>
<listitem><para>Shows the global and per-link DNS settings in currently in effect. If no command is specified,
<listitem><para>Shows the global and per-link DNS settings currently in effect. If no command is specified,
this is the implied default.</para></listitem>
</varlistentry>

View File

@ -713,10 +713,10 @@
<varlistentry>
<term><option>--private-users-chown</option></term>
<listitem><para>If specified, all files and directories in the container's directory tree will adjusted so that
they are owned to the appropriate UIDs/GIDs selected for the container (see above). This operation is
potentially expensive, as it involves descending and iterating through the full directory tree of the
container. Besides actual file ownership, file ACLs are adjusted as well.</para>
<listitem><para>If specified, all files and directories in the container's directory tree will be
adjusted so that they are owned by the appropriate UIDs/GIDs selected for the container (see above).
This operation is potentially expensive, as it involves iterating through the full directory tree of
the container. Besides actual file ownership, file ACLs are adjusted as well.</para>
<para>This option is implied if <option>--private-users=pick</option> is used. This option has no effect if
user namespacing is not used.</para></listitem>

View File

@ -33,7 +33,7 @@
<title>Description</title>
<para><filename>systemd-vconsole-setup</filename> sets up and configures either all virtual consoles, or — if the
optional <replaceable>TTY</replaceable> parameter is provided — a specific one. When the system is booting up it's
optional <replaceable>TTY</replaceable> parameter is provided — a specific one. When the system is booting up, it's
called by <citerefentry><refentrytitle>systemd-udevd</refentrytitle><manvolnum>8</manvolnum></citerefentry> during
VT console subsystem initialization. Also,
<citerefentry><refentrytitle>systemd-localed.service</refentrytitle><manvolnum>8</manvolnum></citerefentry> invokes

View File

@ -188,6 +188,7 @@
<term><varname>_SYSTEMD_SLICE=</varname></term>
<term><varname>_SYSTEMD_UNIT=</varname></term>
<term><varname>_SYSTEMD_USER_UNIT=</varname></term>
<term><varname>_SYSTEMD_USER_SLICE=</varname></term>
<term><varname>_SYSTEMD_SESSION=</varname></term>
<term><varname>_SYSTEMD_OWNER_UID=</varname></term>

View File

@ -79,7 +79,7 @@
signal (see below) is sent to all remaining processes of the
unit's control group. If set to <option>none</option>, no
process is killed. In this case, only the stop command will be
executed on unit stop, but no process be killed otherwise.
executed on unit stop, but no process will be killed otherwise.
Processes remaining alive after stop are left in their control
group and the control group continues to exist after stop
unless it is empty.</para>

View File

@ -57,7 +57,7 @@
<filename>/run/systemd/network</filename> directories. Drop-in files in
<filename>/etc</filename> take precedence over those in <filename>/run</filename> which in turn
take precedence over those in <filename>/usr/lib</filename>. Drop-in files under any of these
directories take precedence over the main netdev file wherever located.</para>
directories take precedence over the main network file wherever located.</para>
<para>Note that an interface without any static IPv6 addresses configured, and neither DHCPv6
nor IPv6LL enabled, shall be considered to have no IPv6 support. IPv6 will be automatically
@ -90,7 +90,7 @@
<term><varname>MACAddress=</varname></term>
<listitem>
<para>A whitespace-separated list of hardware addresses. Use full colon-, hyphen- or dot-delimited hexadecimal. See the example below.
This option may appear more than one, in which case the lists are merged. If the empty string is assigned to this option, the list
This option may appear more than once, in which case the lists are merged. If the empty string is assigned to this option, the list
of hardware addresses defined prior to this is reset.</para>
<para>Example:
@ -1139,6 +1139,16 @@
<para>A boolean. Specifies whether the rule to be inverted. Defaults to false.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><varname>Family=</varname></term>
<listitem>
<para>Takes a special value <literal>ipv4</literal>, <literal>ipv6</literal>, or
<literal>both</literal>. By default, the address family is determined by the address
specified in <varname>To=</varname> or <varname>From=</varname>. If neither
<varname>To=</varname> nor <varname>From=</varname> are specified, then defaults to
<literal>ipv4</literal>.</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
@ -2206,6 +2216,27 @@ DHCP=yes</programlisting>
<literal>en</literal> (i.e. ethernet interfaces).</para>
</example>
<example>
<title>IPv6 Prefix Delegation</title>
<programlisting># /etc/systemd/network/55-ipv6-pd-upstream.network
[Match]
Name=enp1s0
[Network]
DHCP=ipv6</programlisting>
<programlisting># /etc/systemd/network/56-ipv6-pd-downstream.network
[Match]
Name=enp2s0
[Network]
IPv6PrefixDelegation=dhcpv6</programlisting>
<para>This will enable IPv6 PD on the interface enp1s0 as an upstream interface where the
DHCPv6 client is running and enp2s0 as a downstream interface where the prefix is delegated to.</para>
</example>
<example>
<title>A bridge with two enslaved links</title>

View File

@ -655,37 +655,32 @@
<term><varname>DeviceAllow=</varname></term>
<listitem>
<para>Control access to specific device nodes by the
executed processes. Takes two space-separated strings: a
device node specifier followed by a combination of
<constant>r</constant>, <constant>w</constant>,
<constant>m</constant> to control
<emphasis>r</emphasis>eading, <emphasis>w</emphasis>riting,
or creation of the specific device node(s) by the unit
(<emphasis>m</emphasis>knod), respectively. This controls
the <literal>devices.allow</literal> and
<literal>devices.deny</literal> control group
attributes. For details about these control group
attributes, see <ulink
url="https://www.kernel.org/doc/Documentation/cgroup-v1/devices.txt">devices.txt</ulink>.</para>
<para>Control access to specific device nodes by the executed processes. Takes two space-separated
strings: a device node specifier followed by a combination of <constant>r</constant>,
<constant>w</constant>, <constant>m</constant> to control <emphasis>r</emphasis>eading,
<emphasis>w</emphasis>riting, or creation of the specific device node(s) by the unit
(<emphasis>m</emphasis>knod), respectively. On cgroup-v1 this controls the
<literal>devices.allow</literal> control group attribute. For details about this control group
attribute, see <ulink
url="https://www.kernel.org/doc/Documentation/cgroup-v1/devices.txt">devices.txt</ulink>. On
cgroup-v2 this functionality is implemented using eBPF filtering.</para>
<para>The device node specifier is either a path to a device
node in the file system, starting with
<filename>/dev/</filename>, or a string starting with either
<literal>char-</literal> or <literal>block-</literal>
followed by a device group name, as listed in
<filename>/proc/devices</filename>. The latter is useful to
whitelist all current and future devices belonging to a
specific device group at once. The device group is matched
according to filename globbing rules, you may hence use the
<literal>*</literal> and <literal>?</literal>
wildcards. Examples: <filename>/dev/sda5</filename> is a
path to a device node, referring to an ATA or SCSI block
device. <literal>char-pts</literal> and
<literal>char-alsa</literal> are specifiers for all pseudo
TTYs and all ALSA sound devices,
respectively. <literal>char-cpu/*</literal> is a specifier
matching all CPU related device groups.</para>
<para>The device node specifier is either a path to a device node in the file system, starting with
<filename>/dev/</filename>, or a string starting with either <literal>char-</literal> or
<literal>block-</literal> followed by a device group name, as listed in
<filename>/proc/devices</filename>. The latter is useful to whitelist all current and future
devices belonging to a specific device group at once. The device group is matched according to
filename globbing rules, you may hence use the <literal>*</literal> and <literal>?</literal>
wildcards. (Note that such globbing wildcards are not available for device node path
specifications!) In order to match device nodes by numeric major/minor, use device node paths in
the <filename>/dev/char/</filename> and <filename>/dev/block/</filename> directories. However,
matching devices by major/minor is generally not recommended as assignments are neither stable nor
portable between systems or different kernel versions.</para>
<para>Examples: <filename>/dev/sda5</filename> is a path to a device node, referring to an ATA or
SCSI block device. <literal>char-pts</literal> and <literal>char-alsa</literal> are specifiers for
all pseudo TTYs and all ALSA sound devices, respectively. <literal>char-cpu/*</literal> is a
specifier matching all CPU related device groups.</para>
<para>Note that whitelists defined this way should only reference device groups which are
resolvable at the time the unit is started. Any device groups not resolvable then are not added to

112
po/pl.po
View File

@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: systemd\n"
"Report-Msgid-Bugs-To: https://github.com/systemd/systemd/issues\n"
"POT-Creation-Date: 2019-07-11 15:28+0000\n"
"PO-Revision-Date: 2019-07-13 14:42+0200\n"
"POT-Creation-Date: 2019-07-29 15:34+0000\n"
"PO-Revision-Date: 2019-07-30 20:24+0200\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <trans-pl@lists.fedoraproject.org>\n"
"Language: pl\n"
@ -601,6 +601,98 @@ msgstr ""
"Wymagane jest uwierzytelnienie, aby zarządzać lokalnymi obrazami maszyn "
"wirtualnych i kontenerów."
#: src/network/org.freedesktop.network1.policy:22
msgid "Set NTP servers"
msgstr "Ustawienie serwerów NTP"
#: src/network/org.freedesktop.network1.policy:23
msgid "Authentication is required to set NTP servers."
msgstr "Wymagane jest uwierzytelnienie, aby ustawić serwery NTP."
#: src/network/org.freedesktop.network1.policy:33
msgid "Set DNS servers"
msgstr "Ustawienie serwerów DNS"
#: src/network/org.freedesktop.network1.policy:34
msgid "Authentication is required to set DNS servers."
msgstr "Wymagane jest uwierzytelnienie, aby ustawić serwery DNS."
#: src/network/org.freedesktop.network1.policy:44
msgid "Set domains"
msgstr "Ustawienie domen"
#: src/network/org.freedesktop.network1.policy:45
msgid "Authentication is required to set domains."
msgstr "Wymagane jest uwierzytelnienie, aby ustawić domeny."
#: src/network/org.freedesktop.network1.policy:55
msgid "Set default route"
msgstr "Ustawienie domyślnej trasy"
#: src/network/org.freedesktop.network1.policy:56
msgid "Authentication is required to set default route."
msgstr "Wymagane jest uwierzytelnienie, aby ustawić domyślną trasę."
#: src/network/org.freedesktop.network1.policy:66
msgid "Enable/disable LLMNR"
msgstr "Włączenie/wyłączenie LLMNR"
#: src/network/org.freedesktop.network1.policy:67
msgid "Authentication is required to enable or disable LLMNR."
msgstr "Wymagane jest uwierzytelnienie, aby włączyć lub wyłączyć LLMNR."
#: src/network/org.freedesktop.network1.policy:77
msgid "Enable/disable multicast DNS"
msgstr "Włączenie/wyłączenie multikastowego DNS"
#: src/network/org.freedesktop.network1.policy:78
msgid "Authentication is required to enable or disable multicast DNS."
msgstr ""
"Wymagane jest uwierzytelnienie, aby włączyć lub wyłączyć multikastowe DNS."
#: src/network/org.freedesktop.network1.policy:88
msgid "Enable/disable DNS over TLS"
msgstr "Włączenie/wyłączenie DNS przez TLS"
#: src/network/org.freedesktop.network1.policy:89
msgid "Authentication is required to enable or disable DNS over TLS."
msgstr ""
"Wymagane jest uwierzytelnienie, aby włączyć lub wyłączyć DNS przez TLS."
#: src/network/org.freedesktop.network1.policy:99
msgid "Enable/disable DNSSEC"
msgstr "Włączenie/wyłączenie DNSSEC"
#: src/network/org.freedesktop.network1.policy:100
msgid "Authentication is required to enable or disable DNSSEC."
msgstr "Wymagane jest uwierzytelnienie, aby włączyć lub wyłączyć DNSSEC."
#: src/network/org.freedesktop.network1.policy:110
msgid "Set DNSSEC Negative Trust Anchors"
msgstr "Ustawienie negatywnych kotwic zaufania DNSSEC"
#: src/network/org.freedesktop.network1.policy:111
msgid "Authentication is required to set DNSSEC Negative Trust Anchros."
msgstr ""
"Wymagane jest uwierzytelnienie, aby ustawić negatywne kotwice zaufania "
"DNSSEC."
#: src/network/org.freedesktop.network1.policy:121
msgid "Revert NTP settings"
msgstr "Przywrócenie ustawień NTP"
#: src/network/org.freedesktop.network1.policy:122
msgid "Authentication is required to revert NTP settings."
msgstr "Wymagane jest uwierzytelnienie, aby przywrócić ustawienia NTP."
#: src/network/org.freedesktop.network1.policy:132
msgid "Revert DNS settings"
msgstr "Przywrócenie ustawień DNS"
#: src/network/org.freedesktop.network1.policy:133
msgid "Authentication is required to revert DNS settings."
msgstr "Wymagane jest uwierzytelnienie, aby przywrócić ustawienia DNS."
#: src/portable/org.freedesktop.portable1.policy:13
msgid "Inspect a portable service image"
msgstr "Badanie obrazu przenośnej usługi"
@ -687,25 +779,25 @@ msgstr ""
"Wymagane jest uwierzytelnienie, aby kontrolować, czy włączyć synchronizację "
"czasu przez sieć."
#: src/core/dbus-unit.c:353
#: src/core/dbus-unit.c:354
msgid "Authentication is required to start '$(unit)'."
msgstr "Wymagane jest uwierzytelnienie, aby uruchomić jednostkę „$(unit)”."
#: src/core/dbus-unit.c:354
#: src/core/dbus-unit.c:355
msgid "Authentication is required to stop '$(unit)'."
msgstr "Wymagane jest uwierzytelnienie, aby zatrzymać jednostkę „$(unit)”."
#: src/core/dbus-unit.c:355
#: src/core/dbus-unit.c:356
msgid "Authentication is required to reload '$(unit)'."
msgstr ""
"Wymagane jest uwierzytelnienie, aby ponownie wczytać jednostkę „$(unit)”."
#: src/core/dbus-unit.c:356 src/core/dbus-unit.c:357
#: src/core/dbus-unit.c:357 src/core/dbus-unit.c:358
msgid "Authentication is required to restart '$(unit)'."
msgstr ""
"Wymagane jest uwierzytelnienie, aby ponownie uruchomić jednostkę „$(unit)”."
#: src/core/dbus-unit.c:529
#: src/core/dbus-unit.c:530
msgid ""
"Authentication is required to send a UNIX signal to the processes of "
"'$(unit)'."
@ -713,18 +805,18 @@ msgstr ""
"Wymagane jest uwierzytelnienie, aby wysłać sygnał uniksowy do procesów "
"jednostki „$(unit)”."
#: src/core/dbus-unit.c:560
#: src/core/dbus-unit.c:561
msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
msgstr ""
"Wymagane jest uwierzytelnienie, aby przywrócić stan „failed” (niepowodzenia) "
"jednostki „$(unit)”."
#: src/core/dbus-unit.c:593
#: src/core/dbus-unit.c:594
msgid "Authentication is required to set properties on '$(unit)'."
msgstr ""
"Wymagane jest uwierzytelnienie, aby ustawić właściwości jednostki „$(unit)”."
#: src/core/dbus-unit.c:702
#: src/core/dbus-unit.c:703
msgid ""
"Authentication is required to delete files and directories associated with "
"'$(unit)'."

128
po/uk.po
View File

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: systemd master\n"
"Report-Msgid-Bugs-To: https://github.com/systemd/systemd/issues\n"
"POT-Creation-Date: 2019-03-26 15:29+0000\n"
"PO-Revision-Date: 2019-04-29 19:03+0300\n"
"POT-Creation-Date: 2019-07-29 15:34+0000\n"
"PO-Revision-Date: 2019-08-16 09:11+0300\n"
"Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n"
"Language-Team: Ukrainian <kde-i18n-uk@kde.org>\n"
"Language: uk\n"
@ -17,7 +17,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<"
"=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 19.03.70\n"
"X-Generator: Lokalize 19.11.70\n"
#: src/core/org.freedesktop.systemd1.policy.in:22
msgid "Send passphrase back to system"
@ -502,8 +502,8 @@ msgid ""
"Authentication is required to indicate to the boot loader to boot to the "
"boot loader menu."
msgstr ""
"Потрібна автентифікація, щоб вказати завантажувачу, що слід завантажитися до"
" меню завантажувача."
"Потрібна автентифікація, щоб вказати завантажувачу, що слід завантажитися до "
"меню завантажувача."
#: src/login/org.freedesktop.login1.policy:374
msgid "Indicate to the boot loader to boot a specific entry"
@ -514,8 +514,8 @@ msgid ""
"Authentication is required to indicate to the boot loader to boot into a "
"specific boot loader entry."
msgstr ""
"Потрібна автентифікація, щоб вказати завантажувачу, що слід завантажити"
" певний пункт меню завантаження."
"Потрібна автентифікація, щоб вказати завантажувачу, що слід завантажити "
"певний пункт меню завантаження."
#: src/login/org.freedesktop.login1.policy:385
msgid "Set a wall message"
@ -599,6 +599,95 @@ msgstr ""
"Потрібна автентифікація, щоб керувати локальними образами віртуальних машин "
"і контейнерів."
#: src/network/org.freedesktop.network1.policy:22
msgid "Set NTP servers"
msgstr "Встановлення серверів NTP"
#: src/network/org.freedesktop.network1.policy:23
msgid "Authentication is required to set NTP servers."
msgstr "Потрібна автентифікація, щоб встановити сервери NTP."
#: src/network/org.freedesktop.network1.policy:33
msgid "Set DNS servers"
msgstr "Встановлення серверів DNS"
#: src/network/org.freedesktop.network1.policy:34
msgid "Authentication is required to set DNS servers."
msgstr "Потрібна автентифікація, щоб встановити сервери DNS."
#: src/network/org.freedesktop.network1.policy:44
msgid "Set domains"
msgstr "Встановлення доменів"
#: src/network/org.freedesktop.network1.policy:45
msgid "Authentication is required to set domains."
msgstr "Потрібна автентифікація, щоб встановити домени."
#: src/network/org.freedesktop.network1.policy:55
msgid "Set default route"
msgstr "Встановлення типового маршруту"
#: src/network/org.freedesktop.network1.policy:56
msgid "Authentication is required to set default route."
msgstr "Потрібна автентифікація, щоб встановити типовий маршрут."
#: src/network/org.freedesktop.network1.policy:66
msgid "Enable/disable LLMNR"
msgstr "Вмикання або вимикання LLMNR"
#: src/network/org.freedesktop.network1.policy:67
msgid "Authentication is required to enable or disable LLMNR."
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути LLMNR."
#: src/network/org.freedesktop.network1.policy:77
msgid "Enable/disable multicast DNS"
msgstr "Вмикання або вимикання трансляційного DNS"
#: src/network/org.freedesktop.network1.policy:78
msgid "Authentication is required to enable or disable multicast DNS."
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути трансляційну DNS."
#: src/network/org.freedesktop.network1.policy:88
msgid "Enable/disable DNS over TLS"
msgstr "Вмикання і вимикання DNS через TLS"
#: src/network/org.freedesktop.network1.policy:89
msgid "Authentication is required to enable or disable DNS over TLS."
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути DNS через TLS."
#: src/network/org.freedesktop.network1.policy:99
msgid "Enable/disable DNSSEC"
msgstr "Вмикання або вимикання DNSSEC"
#: src/network/org.freedesktop.network1.policy:100
msgid "Authentication is required to enable or disable DNSSEC."
msgstr "Потрібна автентифікація, щоб увімкнути або вимкнути DNSSEC."
#: src/network/org.freedesktop.network1.policy:110
msgid "Set DNSSEC Negative Trust Anchors"
msgstr "Встановлення прив'язок від'ємної довіри DNSSEC"
#: src/network/org.freedesktop.network1.policy:111
msgid "Authentication is required to set DNSSEC Negative Trust Anchros."
msgstr ""
"Потрібна автентифікація, щоб встановити прив'язки від'ємної довіри DNSSEC."
#: src/network/org.freedesktop.network1.policy:121
msgid "Revert NTP settings"
msgstr "Повернення до початкових параметрів NTP"
#: src/network/org.freedesktop.network1.policy:122
msgid "Authentication is required to revert NTP settings."
msgstr "Потрібна автентифікація, щоб повернутися до початкових параметрів NTP."
#: src/network/org.freedesktop.network1.policy:132
msgid "Revert DNS settings"
msgstr "Повернення до початкових параметрів DNS"
#: src/network/org.freedesktop.network1.policy:133
msgid "Authentication is required to revert DNS settings."
msgstr "Потрібна автентифікація, щоб повернутися до початкових параметрів DNS."
#: src/portable/org.freedesktop.portable1.policy:13
msgid "Inspect a portable service image"
msgstr "Інспектування образу портативної служби"
@ -625,8 +714,8 @@ msgstr "Вилучення або внесення змін до образу п
msgid ""
"Authentication is required to delete or modify a portable service image."
msgstr ""
"Потрібна автентифікація, щоб вилучити образ портативної служби або внести до"
" нього зміни."
"Потрібна автентифікація, щоб вилучити образ портативної служби або внести до "
"нього зміни."
#: src/resolve/org.freedesktop.resolve1.policy:22
msgid "Register a DNS-SD service"
@ -684,34 +773,41 @@ msgstr ""
"Потрібна автентифікація, щоб контролювати, чи синхронізування часу через "
"мережу запущено."
#: src/core/dbus-unit.c:325
#: src/core/dbus-unit.c:354
msgid "Authentication is required to start '$(unit)'."
msgstr "Потрібна автентифікація, щоб запустити «$(unit)»."
#: src/core/dbus-unit.c:326
#: src/core/dbus-unit.c:355
msgid "Authentication is required to stop '$(unit)'."
msgstr "Потрібна автентифікація, щоб зупинити «$(unit)»."
#: src/core/dbus-unit.c:327
#: src/core/dbus-unit.c:356
msgid "Authentication is required to reload '$(unit)'."
msgstr "Потрібна автентифікація, щоб перезавантажити «$(unit)»."
#: src/core/dbus-unit.c:328 src/core/dbus-unit.c:329
#: src/core/dbus-unit.c:357 src/core/dbus-unit.c:358
msgid "Authentication is required to restart '$(unit)'."
msgstr "Потрібна автентифікація, щоб перезапустити «$(unit)»."
#: src/core/dbus-unit.c:434
#: src/core/dbus-unit.c:530
msgid ""
"Authentication is required to send a UNIX signal to the processes of "
"'$(unit)'."
msgstr ""
"Потрібна автентифікація, щоб надіслати сигнал UNIX до процесів «$(unit)»."
#: src/core/dbus-unit.c:465
#: src/core/dbus-unit.c:561
msgid "Authentication is required to reset the \"failed\" state of '$(unit)'."
msgstr "Потрібна автентифікація, щоб скинути «пошкоджений» стан з «$(unit)»."
#: src/core/dbus-unit.c:498
#: src/core/dbus-unit.c:594
msgid "Authentication is required to set properties on '$(unit)'."
msgstr "Потрібна автентифікація, щоб вказати властивості на «$(unit)»."
#: src/core/dbus-unit.c:703
msgid ""
"Authentication is required to delete files and directories associated with "
"'$(unit)'."
msgstr ""
"Потрібна автентифікація, щоб вилучити файли і каталоги, які пов'язано із"
" «$(unit)»."

View File

@ -39,6 +39,9 @@ SUBSYSTEM=="cec", GROUP="video"
SUBSYSTEM=="drm", KERNEL=="renderD*", GROUP="render", MODE="@GROUP_RENDER_MODE@"
SUBSYSTEM=="kfd", GROUP="render", MODE="@GROUP_RENDER_MODE@"
# When using static_node= with non-default permissions, also update
# tmpfiles.d/static-nodes-permissions.conf.in to keep permissions synchronized.
SUBSYSTEM=="sound", GROUP="audio", \
OPTIONS+="static_node=snd/seq", OPTIONS+="static_node=snd/timer"

View File

@ -8,4 +8,6 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_
ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change"
# watch metadata changes, caused by tools closing the device node which was opened for writing
ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*|xvd*|pmem*|mmcblk*|dasd*|nbd*", OPTIONS+="watch"
ACTION!="remove", SUBSYSTEM=="block", \
KERNEL=="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|vd*|xvd*|bcache*|cciss*|dasd*|ubd*|ubi*|scm*|pmem*|nbd*|zd*", \
OPTIONS+="watch"

View File

@ -7,7 +7,7 @@ ACTION=="remove", GOTO="persistent_storage_end"
ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="persistent_storage_end"
SUBSYSTEM!="block", GOTO="persistent_storage_end"
KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|xvd*|bcache*|cciss*|dasd*|ubd*|scm*|pmem*|nbd*|zd*", GOTO="persistent_storage_end"
KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|xvd*|bcache*|cciss*|dasd*|ubd*|ubi*|scm*|pmem*|nbd*|zd*", GOTO="persistent_storage_end"
# ignore partitions that span the entire disk
TEST=="whole_disk", GOTO="persistent_storage_end"

View File

@ -37,6 +37,7 @@
else
local curcontext="$curcontext"
cmd="${${_busctl_cmds[(r)$words[1]:*]%%:*}}"
curcontext="${curcontext%:*:*}:busctl-${cmd}:"
if (( $+functions[_busctl_$cmd] )); then
_busctl_$cmd
else
@ -45,6 +46,218 @@
fi
}
__busctl() {
busctl $_bus_address --no-pager --no-legend "$@" 2>/dev/null
}
__dbus_matchspec() {
# https://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-routing
_values -s, 'rules' \
'type[Match on message type]:type:(signal method_call method_return error)' \
'eavesdrop[Include unicast messages]:bool:(true false)' \
'sender[Match messages sent by a particular sender]:sender:{compadd $(_busctl_get_service_names)}'\
'interface[Match messages sent over or to a particular interface]:interface' \
'member[Match messages which have the given method or signal name]:member' \
'path[Match messages which are sent from or to the given object]:path' \
'path_namespace[Match messages which are sent from or to the given namespace]:namespace' \
'destination[Match messaged sent to the given unique name]:unique name:{compadd $(_busctl_get_unique_names)}'
}
(( $+functions[_busctl_get_json] )) || _busctl_get_json()
{
local -a _json_forms
_json_forms=( $(__busctl --json=help; echo help) )
_values 'format' $_json_forms
}
(( $+functions[_busctl_get_service_names] )) || _busctl_get_service_names()
{
local -a bus_names
bus_names=( $(__busctl call \
"org.freedesktop.DBus" \
"/org/freedesktop/DBus" \
"org.freedesktop.DBus" \
ListNames) )
echo ${(Q)bus_names[3,-1]}
}
(( $+functions[_busctl_get_unique_names] )) || _busctl_get_unique_names()
{
local -a bus_names
local NAME OTHER
__busctl --unique list |
while read NAME OTHER; do
echo $NAME
done
}
(( $+functions[_busctl_get_objects] )) || _busctl_get_objects()
{
local -a objects
local name="$1"
objects=($(__busctl --list tree $name ))
echo $objects
}
(( $+functions[_busctl_get_interfaces] )) || _busctl_get_interfaces()
{
local NAME TYPE OTHER
__busctl introspect "$1" "$2" |
while read NAME TYPE OTHER; do
if [[ ${TYPE} == "interface" ]]; then
echo ${NAME}
fi
done
}
(( $+functions[_busctl_get_members] )) || _busctl_get_members()
{
local member="$4"
local required="$5"
local NAME TYPE SIGNATURE VALUE FLAGS
__busctl introspect "$1" "$2" "$3" |
while read NAME TYPE SIGNATURE VALUE FLAGS; do
[[ -z "$member" || ${TYPE} == "$member" ]] &&
[[ -z "$required" || ${${(s: :)FLAGS}[-1]} == "$required" ]] &&
echo ${NAME#.}
done
}
(( $+functions[_busctl_get_signature] )) || _busctl_get_signature()
{
local NAME TYPE SIGNATURE VALUE FLAGS
__busctl introspect "$1" "$2" "$3" |
while read NAME TYPE SIGNATURE VALUE FLAGS; do
if [[ ${NAME#.} == "$4" ]]; then
[[ ${SIGNATURE} != "-" ]] && echo ${SIGNATURE}
fi
done
}
(( $+functions[_busctl_status] )) || _busctl_status()
{
local expl
_wanted busname expl 'busname' compadd "$@" - $(_busctl_get_service_names)
}
(( $+functions[_busctl_monitor] )) || _busctl_monitor()
{
local expl
_wanted busname expl 'busname' compadd "$@" - $(_busctl_get_service_names)
}
(( $+functions[_busctl_tree] )) || _busctl_tree()
{
local expl
_wanted busname expl 'busname' compadd "$@" - $(_busctl_get_service_names)
}
(( $+functions[_busctl_introspect] )) || _busctl_introspect()
{
local expl
case $CURRENT in
2)
_wanted busname expl 'busname' \
compadd "$@" - $(_busctl_get_service_names)
;;
3)
_wanted path expl 'path' \
compadd "$@" - $(_busctl_get_objects $words[2])
;;
4)
_wanted interface expl 'interface' \
compadd "$@" - $(_busctl_get_interfaces $words[2,3])
;;
*)
_message "no more options"
esac
}
(( $+functions[_busctl_call] )) || _busctl_call()
{
local expl
case $CURRENT in
2)
_wanted busname expl 'busname' \
compadd "$@" - $(_busctl_get_service_names)
;;
3)
_wanted path expl 'path' \
compadd "$@" - $(_busctl_get_objects $words[2])
;;
4)
_wanted interface expl 'interface' \
compadd "$@" - $(_busctl_get_interfaces $words[2,3])
;;
5)
_wanted method expl 'method' \
compadd "$@" - $(_busctl_get_members $words[2,4] "method")
;;
6)
compadd "$@" - $(_busctl_get_signature $words[2,5])
;;
*)
_message "no more options"
esac
}
(( $+functions[_busctl_get-property] )) || _busctl_get-property()
{
local expl
case $CURRENT in
2)
_wanted busname expl 'busname' \
compadd "$@" - $(_busctl_get_service_names)
;;
3)
_wanted path expl 'path' \
compadd "$@" - $(_busctl_get_objects $words[2])
;;
4)
_wanted interface expl 'interface' \
compadd "$@" - $(_busctl_get_interfaces $words[2,3])
;;
5)
_wanted property expl 'property' \
compadd "$@" - $(_busctl_get_members $words[2,4] "property")
;;
*)
_message "no more options"
esac
}
(( $+functions[_busctl_set-property] )) || _busctl_set-property()
{
local expl
case $CURRENT in
2)
_wanted busname expl 'busname' \
compadd "$@" - $(_busctl_get_service_names)
;;
3)
_wanted path expl 'path' \
compadd "$@" - $(_busctl_get_objects $words[2])
;;
4)
_wanted interface expl 'interface' \
compadd "$@" - $(_busctl_get_interfaces $words[2,3])
;;
5)
_wanted property expl 'property' \
compadd "$@" - $(_busctl_get_members $words[2,4] "property" "writable")
;;
6)
compadd "$@" - $(_busctl_get_signature $words[2,5])
;;
*)
_message "no more options"
esac
}
local -a _modes; _modes=("--user" "--system")
# Use the last mode (they are exclusive and the last one is used).
local _bus_address=${${words:*_modes}[(R)(${(j.|.)_modes})]}
local curcontext=$curcontext state line
_arguments \
{-h,--help}'[Prints a short help text and exits.]' \
'--version[Prints a short version string and exits.]' \
@ -59,10 +272,12 @@ _arguments \
'--unique[Only show unique names]' \
'--acquired[Only show acquired names]' \
'--activatable[Only show activatable names]' \
'--match=[Only show matching messages]:match' \
'--match=[Only show matching messages]:match:__dbus_matchspec' \
'--list[Do not show tree, but simple object path list]' \
'--quiet[Do not show method call reply]'\
{-q,--quiet}'[Do not show method call reply]'\
'--verbose[Show result values in long format]' \
'--json=[Show result values in long format]:format:_busctl_get_json' \
'-j[Show pretty json in interactive sessions, short json otherwise]' \
'--expect-reply=[Expect a method call reply]:boolean:(1 0)' \
'--auto-start=[Auto-start destination service]:boolean:(1 0)' \
'--allow-interactive-authorization=[Allow interactive authorization for operation]:boolean:(1 0)' \

View File

@ -1,4 +1,4 @@
#compdef systemd-resolve -*- shell-script -*-
#compdef resolvectl systemd-resolve -*- shell-script -*-
# SPDX-License-Identifier: LGPL-2.1+
#
# This file is part of systemd.
@ -16,33 +16,54 @@
# You should have received a copy of the GNU Lesser General Public License
# along with systemd; If not, see <http://www.gnu.org/licenses/>.
(( $+functions[_systemd-resolve_protocols] )) ||
_systemd-resolve_protocols() {
(( $+functions[_resolvectl_protocols] )) ||
_resolvectl_protocols() {
local -a _protocol
_protocol=( $(_call_program protocol ${service} --legend=no --protocol help; echo help) )
_values 'protocol' "$_protocol[@]"
}
(( $+functions[_systemd-resolve_types] )) ||
_systemd-resolve_types() {
(( $+functions[_resolvectl_types] )) ||
_resolvectl_types() {
local -a _type
_type=( $(_call_program type ${service} --legend=no --type help; echo help) )
_values 'type' "$_type[@]"
}
(( $+functions[_systemd-resolve_classes] )) ||
_systemd-resolve_classes() {
(( $+functions[_resolvectl_classes] )) ||
_resolvectl_classes() {
local -a _class
_class=( $(_call_program class ${service} --legend=no --class help; echo help) )
_values 'class' "$_class[@]"
}
(( $+functions[_systemd-resolve_none] )) ||
_systemd-resolve_none() {
_alternative : \
'domain:DNS address:' \
'address:email address:'
}
(( $+functions[_resolvectl_commands] )) ||
_resolvectl_commands() {
local -a _resolvectl_cmds
_resolvectl_cmds=(
default-route:"Configure per-interface default-route setting"
dns:"Configure per-interface DNS configuration"
dnsovertls:"Configure per-interface dnsovertls enabled status"
dnssec:"Configure per-interface dnssec enabled status"
domain:"Configure per-interface search and route-only domains"
flush-caches:"Flushes all DNS resource record caches the service maintains locally"
llmnr:"Configure per-interface llmnr enabled status"
mdns:"Configure per-interface mdns enabled status"
nta:"Configure per-interface nta domains"
openpgp:"Retrieve openpgp keys for an email"
query:"Resolve domain names, IPv4 and IPv6 addresses"
reset-server-features:"Flushes all feature level information the resolver has learned about specific servers"
reset-statistics:"Resets the statistics counter show in statistics to zero"
revert:"Revert the per-interfce DNS configuration"
service:"Resolve DNS-SD and SRV services"
status:"Show the global and per-link DNS settings currently in effect"
tlsa:"Query tlsa public keys stored as TLSA resource records"
)
if (( CURRENT == 1 )); then
_describe -t commands 'resolvectl commands' _resolvectl_cmds
fi
}
_arguments \
{-h,--help}'[Print a short help text and exit]' \
@ -51,9 +72,9 @@ _arguments \
'-4[Resolve IPv4 addresses]' \
'-6[Resolve IPv6 addresses]' \
{-i+,--interface=}'[Look on interface]:interface:_net_interfaces' \
{-p+,--protocol=}'[Look via protocol]:protocol:_systemd-resolve_protocols' \
{-t+,--type=}'[Query RR with DNS type]:type:_systemd-resolve_types' \
{-c+,--class=}'[Query RR with DNS class]:class:_systemd-resolve_classes' \
{-p+,--protocol=}'[Look via protocol]:protocol:_resolvectl_protocols' \
{-t+,--type=}'[Query RR with DNS type]:type:_resolvectl_types' \
{-c+,--class=}'[Query RR with DNS class]:class:_resolvectl_classes' \
'--service[Resolve services]' \
'--service-address=no[Do not resolve address for services]' \
'--service-txt=no[Do not resolve TXT records for services]' \
@ -63,4 +84,4 @@ _arguments \
'--search=no[Do not use search domains]' \
'--statistics[Show resolver statistics]' \
'--reset-statistics[Reset resolver statistics]' \
'*::default: _systemd-resolve_none'
'*::default: _resolvectl_commands'

View File

@ -33,7 +33,7 @@ if zshcompletiondir != 'no'
['_machinectl', 'ENABLE_MACHINED'],
['_networkctl', 'ENABLE_NETWORKD'],
['_systemd-inhibit', 'ENABLE_LOGIND'],
['_systemd-resolve', 'ENABLE_RESOLVE'],
['_resolvectl', 'ENABLE_RESOLVE'],
['_systemd-tmpfiles', 'ENABLE_TMPFILES'],
['_timedatectl', 'ENABLE_TIMEDATED'],
]

View File

@ -603,7 +603,7 @@ static int assess_ip_address_allow(
d = strdup("Service defines IP address whitelist with non-localhost entries");
b = 5;
} else if (info->ip_address_allow_localhost) {
d = strdup("Service defines IP address whitelits with only localhost entries");
d = strdup("Service defines IP address whitelist with only localhost entries");
b = 2;
} else {
d = strdup("Service blocks all IP address ranges");
@ -1514,6 +1514,8 @@ static int assess(const struct security_info *info, Table *overview_table, Analy
}
}
assert(weight_sum > 0);
if (details_table) {
size_t row;
@ -1545,7 +1547,6 @@ static int assess(const struct security_info *info, Table *overview_table, Analy
return log_error_errno(r, "Failed to output table: %m");
}
assert(weight_sum > 0);
exposure = DIV_ROUND_UP(badness_sum * 100U, weight_sum);
for (i = 0; i < ELEMENTSOF(badness_table); i++)

View File

@ -1608,6 +1608,52 @@ static int dump_unit_paths(int argc, char *argv[], void *userdata) {
return 0;
}
static int dump_exit_status(int argc, char *argv[], void *userdata) {
_cleanup_(table_unrefp) Table *table = NULL;
int r;
table = table_new("name", "status", "class");
if (!table)
return log_oom();
r = table_set_align_percent(table, table_get_cell(table, 0, 1), 100);
if (r < 0)
return log_error_errno(r, "Failed to right-align status: %m");
if (strv_isempty(strv_skip(argv, 1)))
for (size_t i = 0; i < ELEMENTSOF(exit_status_mappings); i++) {
if (!exit_status_mappings[i].name)
continue;
r = table_add_many(table,
TABLE_STRING, exit_status_mappings[i].name,
TABLE_INT, (int) i,
TABLE_STRING, exit_status_class(i));
if (r < 0)
return r;
}
else
for (int i = 1; i < argc; i++) {
int status;
status = exit_status_from_string(argv[i]);
if (status < 0)
return log_error_errno(r, "Invalid exit status \"%s\": %m", argv[i]);
assert(status >= 0 && (size_t) status < ELEMENTSOF(exit_status_mappings));
r = table_add_many(table,
TABLE_STRING, exit_status_mappings[status].name ?: "-",
TABLE_INT, status,
TABLE_STRING, exit_status_class(status) ?: "-");
if (r < 0)
return r;
}
(void) pager_open(arg_pager_flags);
return table_print(table, NULL);
}
#if HAVE_SECCOMP
static int load_kernel_syscalls(Set **ret) {
@ -1685,52 +1731,6 @@ static void dump_syscall_filter(const SyscallFilterSet *set) {
printf(" %s%s%s\n", syscall[0] == '@' ? ansi_underline() : "", syscall, ansi_normal());
}
static int dump_exit_status(int argc, char *argv[], void *userdata) {
_cleanup_(table_unrefp) Table *table = NULL;
int r;
table = table_new("name", "status", "class");
if (!table)
return log_oom();
r = table_set_align_percent(table, table_get_cell(table, 0, 1), 100);
if (r < 0)
return log_error_errno(r, "Failed to right-align status: %m");
if (strv_isempty(strv_skip(argv, 1)))
for (size_t i = 0; i < ELEMENTSOF(exit_status_mappings); i++) {
if (!exit_status_mappings[i].name)
continue;
r = table_add_many(table,
TABLE_STRING, exit_status_mappings[i].name,
TABLE_INT, (int) i,
TABLE_STRING, exit_status_class(i));
if (r < 0)
return r;
}
else
for (int i = 1; i < argc; i++) {
int status;
status = exit_status_from_string(argv[i]);
if (status < 0)
return log_error_errno(r, "Invalid exit status \"%s\": %m", argv[i]);
assert(status >= 0 && (size_t) status < ELEMENTSOF(exit_status_mappings));
r = table_add_many(table,
TABLE_STRING, exit_status_mappings[status].name ?: "-",
TABLE_INT, status,
TABLE_STRING, exit_status_class(status) ?: "-");
if (r < 0)
return r;
}
(void) pager_open(arg_pager_flags);
return table_print(table, NULL);
}
static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
bool first = true;

View File

@ -129,7 +129,7 @@
#define _PCRE2_FEATURE_ "-PCRE2"
#endif
#define _CGROUP_HIEARCHY_ "default-hierarchy=" DEFAULT_HIERARCHY_NAME
#define _CGROUP_HIERARCHY_ "default-hierarchy=" DEFAULT_HIERARCHY_NAME
#define SYSTEMD_FEATURES \
_PAM_FEATURE_ " " \
@ -153,4 +153,4 @@
_IDN2_FEATURE_ " " \
_IDN_FEATURE_ " " \
_PCRE2_FEATURE_ " " \
_CGROUP_HIEARCHY_
_CGROUP_HIERARCHY_

View File

@ -342,7 +342,8 @@ int cg_kill(
return r;
/* Only in case of killing with SIGKILL and when using cgroupsv2, kill remaining threads manually as
a workaround for kernel bug. It was fixed in 5.2-rc5 (c03cd7738a83). */
a workaround for kernel bug. It was fixed in 5.2-rc5 (c03cd7738a83), backported to 4.19.66
(4340d175b898) and 4.14.138 (feb6b123b7dd). */
r = cg_unified_controller(controller);
if (r < 0)
return r;

View File

@ -28,8 +28,6 @@ int extract_first_word(const char **p, char **ret, const char *separators, Extra
assert(p);
assert(ret);
/* Those two don't make sense together. */
assert(!FLAGS_SET(flags, EXTRACT_UNQUOTE|EXTRACT_RETAIN_ESCAPE));
/* Bail early if called after last value or with no input */
if (!*p)

View File

@ -87,11 +87,13 @@ static int log_open_console(void) {
}
if (console_fd < 3) {
console_fd = open_terminal("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC);
if (console_fd < 0)
return console_fd;
int fd;
console_fd = fd_move_above_stdio(console_fd);
fd = open_terminal("/dev/console", O_WRONLY|O_NOCTTY|O_CLOEXEC);
if (fd < 0)
return fd;
console_fd = fd_move_above_stdio(fd);
}
return 0;
@ -372,13 +374,11 @@ static int write_to_console(
if (errno == EIO && getpid_cached() == 1) {
/* If somebody tried to kick us from our
* console tty (via vhangup() or suchlike),
* try to reconnect */
/* If somebody tried to kick us from our console tty (via vhangup() or suchlike), try
* to reconnect. */
log_close_console();
log_open_console();
(void) log_open_console();
if (console_fd < 0)
return 0;
@ -586,7 +586,7 @@ int log_dispatch_internal(
level |= log_facility;
if (open_when_needed)
log_open();
(void) log_open();
do {
char *e;
@ -629,7 +629,7 @@ int log_dispatch_internal(
k = write_to_kmsg(level, error, file, line, func, buffer);
if (k < 0) {
log_close_kmsg();
log_open_console();
(void) log_open_console();
}
}
@ -795,7 +795,7 @@ _noreturn_ void log_assert_failed_realm(
const char *file,
int line,
const char *func) {
log_open();
(void) log_open();
log_assert(LOG_REALM_PLUS_LEVEL(realm, LOG_CRIT), text, file, line, func,
"Assertion '%s' failed at %s:%u, function %s(). Aborting.");
abort();
@ -807,7 +807,7 @@ _noreturn_ void log_assert_failed_unreachable_realm(
const char *file,
int line,
const char *func) {
log_open();
(void) log_open();
log_assert(LOG_REALM_PLUS_LEVEL(realm, LOG_CRIT), text, file, line, func,
"Code should not be reached '%s' at %s:%u, function %s(). Aborting.");
abort();
@ -1356,5 +1356,5 @@ void log_setup_service(void) {
log_set_target(LOG_TARGET_AUTO);
log_parse_environment();
log_open();
(void) log_open();
}

View File

@ -32,7 +32,11 @@ static inline int missing_pivot_root(const char *new_root, const char *put_old)
/* ======================================================================= */
#if !HAVE_MEMFD_CREATE
# ifndef __NR_memfd_create
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
# if ! (defined __NR_memfd_create && __NR_memfd_create > 0)
# if defined __NR_memfd_create
# undef __NR_memfd_create
# endif
# if defined __x86_64__
# define __NR_memfd_create 319
# elif defined __arm__
@ -75,7 +79,11 @@ static inline int missing_memfd_create(const char *name, unsigned int flags) {
/* ======================================================================= */
#if !HAVE_GETRANDOM
# ifndef __NR_getrandom
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
# if ! (defined __NR_getrandom && __NR_getrandom > 0)
# if defined __NR_getrandom
# undef __NR_getrandom
# endif
# if defined __x86_64__
# define __NR_getrandom 318
# elif defined(__i386__)
@ -134,7 +142,11 @@ static inline pid_t missing_gettid(void) {
/* ======================================================================= */
#if !HAVE_NAME_TO_HANDLE_AT
# ifndef __NR_name_to_handle_at
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
# if ! (defined __NR_name_to_handle_at && __NR_name_to_handle_at > 0)
# if defined __NR_name_to_handle_at
# undef __NR_name_to_handle_at
# endif
# if defined(__x86_64__)
# define __NR_name_to_handle_at 303
# elif defined(__i386__)
@ -171,7 +183,11 @@ static inline int missing_name_to_handle_at(int fd, const char *name, struct fil
/* ======================================================================= */
#if !HAVE_SETNS
# ifndef __NR_setns
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
# if ! (defined __NR_setns && __NR_setns > 0)
# if defined __NR_setns
# undef __NR_setns
# endif
# if defined(__x86_64__)
# define __NR_setns 308
# elif defined(__i386__)
@ -208,7 +224,11 @@ static inline pid_t raw_getpid(void) {
/* ======================================================================= */
#if !HAVE_RENAMEAT2
# ifndef __NR_renameat2
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
# if ! (defined __NR_renameat2 && __NR_renameat2 > 0)
# if defined __NR_renameat2
# undef __NR_renameat2
# endif
# if defined __x86_64__
# define __NR_renameat2 316
# elif defined __arm__
@ -305,7 +325,11 @@ static inline key_serial_t missing_request_key(const char *type, const char *des
/* ======================================================================= */
#if !HAVE_COPY_FILE_RANGE
# ifndef __NR_copy_file_range
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
# if ! (defined __NR_copy_file_range && __NR_copy_file_range > 0)
# if defined __NR_copy_file_range
# undef __NR_copy_file_range
# endif
# if defined(__x86_64__)
# define __NR_copy_file_range 326
# elif defined(__i386__)
@ -343,7 +367,11 @@ static inline ssize_t missing_copy_file_range(int fd_in, loff_t *off_in,
/* ======================================================================= */
#if !HAVE_BPF
# ifndef __NR_bpf
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
# if ! (defined __NR_bpf && __NR_bpf > 0)
# if defined __NR_bpf
# undef __NR_bpf
# endif
# if defined __i386__
# define __NR_bpf 357
# elif defined __x86_64__
@ -380,7 +408,11 @@ static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) {
/* ======================================================================= */
#ifndef __IGNORE_pkey_mprotect
# ifndef __NR_pkey_mprotect
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
# if ! (defined __NR_pkey_mprotect && __NR_pkey_mprotect > 0)
# if defined __NR_pkey_mprotect
# undef __NR_pkey_mprotect
# endif
# if defined __i386__
# define __NR_pkey_mprotect 380
# elif defined __x86_64__
@ -391,6 +423,8 @@ static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) {
# define __NR_pkey_mprotect 394
# elif defined __powerpc__
# define __NR_pkey_mprotect 386
# elif defined __s390__
# define __NR_pkey_mprotect 384
# elif defined _MIPS_SIM
# if _MIPS_SIM == _MIPS_SIM_ABI32
# define __NR_pkey_mprotect 4363
@ -410,7 +444,11 @@ static inline int missing_bpf(int cmd, union bpf_attr *attr, size_t size) {
/* ======================================================================= */
#if !HAVE_STATX
# ifndef __NR_statx
/* may be (invalid) negative number due to libseccomp, see PR 13319 */
# if ! (defined __NR_statx && __NR_statx > 0)
# if defined __NR_statx
# undef __NR_statx
# endif
# if defined __aarch64__ || defined __arm__
# define __NR_statx 397
# elif defined __alpha__

View File

@ -578,22 +578,29 @@ int vt_disallocate(const char *name) {
int make_console_stdio(void) {
int fd, r;
/* Make /dev/console the controlling terminal and stdin/stdout/stderr */
/* Make /dev/console the controlling terminal and stdin/stdout/stderr, if we can. If we can't use
* /dev/null instead. This is particularly useful if /dev/console is turned off, e.g. if console=null
* is specified on the kernel command line. */
fd = acquire_terminal("/dev/console", ACQUIRE_TERMINAL_FORCE|ACQUIRE_TERMINAL_PERMISSIVE, USEC_INFINITY);
if (fd < 0)
return log_error_errno(fd, "Failed to acquire terminal: %m");
if (fd < 0) {
log_warning_errno(fd, "Failed to acquire terminal, using /dev/null stdin/stdout/stderr instead: %m");
r = reset_terminal_fd(fd, true);
if (r < 0)
log_warning_errno(r, "Failed to reset terminal, ignoring: %m");
r = make_null_stdio();
if (r < 0)
return log_error_errno(r, "Failed to make /dev/null stdin/stdout/stderr: %m");
r = rearrange_stdio(fd, fd, fd); /* This invalidates 'fd' both on success and on failure. */
if (r < 0)
return log_error_errno(r, "Failed to make terminal stdin/stdout/stderr: %m");
} else {
r = reset_terminal_fd(fd, true);
if (r < 0)
log_warning_errno(r, "Failed to reset terminal, ignoring: %m");
r = rearrange_stdio(fd, fd, fd); /* This invalidates 'fd' both on success and on failure. */
if (r < 0)
return log_error_errno(r, "Failed to make terminal stdin/stdout/stderr: %m");
}
reset_terminal_feature_caches();
return 0;
}

View File

@ -1191,7 +1191,10 @@ bool ntp_synced(void) {
if (adjtimex(&txc) < 0)
return false;
if (txc.status & STA_UNSYNC)
/* Consider the system clock synchronized if the reported maximum error is smaller than the maximum
* value (16 seconds). Ignore the STA_UNSYNC flag as it may have been set to prevent the kernel from
* touching the RTC. */
if (txc.maxerror >= 16000000)
return false;
return true;

View File

@ -103,6 +103,7 @@ static int acquire_xbootldr(bool unprivileged_mode, sd_id128_t *ret_uuid) {
log_debug_errno(r, "Didn't find an XBOOTLDR partition, using the ESP as $BOOT.");
if (ret_uuid)
*ret_uuid = SD_ID128_NULL;
arg_xbootldr_path = mfree(arg_xbootldr_path);
return 0;
}
if (r < 0)
@ -1175,7 +1176,11 @@ static int verb_status(int argc, char *argv[], void *userdata) {
if (r < 0)
return r;
puts(arg_dollar_boot_path());
const char *path = arg_dollar_boot_path();
if (!path)
return log_error_errno(SYNTHETIC_ERRNO(EACCES), "Failed to determine XBOOTLDR location: %m");
puts(path);
}
if (arg_print_esp_path || arg_print_dollar_boot_path)

View File

@ -6,24 +6,24 @@
#include "linux.h"
#include "util.h"
#ifdef __x86_64__
typedef VOID(*handover_f)(VOID *image, EFI_SYSTEM_TABLE *table, struct boot_params *params);
static VOID linux_efi_handover(EFI_HANDLE image, struct boot_params *params) {
handover_f handover;
asm volatile ("cli");
handover = (handover_f)((UINTN)params->hdr.code32_start + 512 + params->hdr.handover_offset);
handover(image, ST, params);
}
#ifdef __i386__
#define __regparm0__ __attribute__((regparm(0)))
#else
typedef VOID(*handover_f)(VOID *image, EFI_SYSTEM_TABLE *table, struct boot_params *params) __attribute__((regparm(0)));
#define __regparm0__
#endif
typedef VOID(*handover_f)(VOID *image, EFI_SYSTEM_TABLE *table, struct boot_params *params) __regparm0__;
static VOID linux_efi_handover(EFI_HANDLE image, struct boot_params *params) {
handover_f handover;
UINTN start = (UINTN)params->hdr.code32_start;
handover = (handover_f)((UINTN)params->hdr.code32_start + params->hdr.handover_offset);
#ifdef __x86_64__
asm volatile ("cli");
start += 512;
#endif
handover = (handover_f)(start + params->hdr.handover_offset);
handover(image, ST, params);
}
#endif
EFI_STATUS linux_exec(EFI_HANDLE *image,
CHAR8 *cmdline, UINTN cmdline_len,

View File

@ -135,6 +135,9 @@ if have_gnu_efi
compile_args += ['-mno-sse',
'-mno-mmx']
endif
if get_option('werror') == true
compile_args += ['-Werror']
endif
efi_ldflags = ['-T',
join_paths(efi_ldsdir, arch_lds),

View File

@ -14,14 +14,20 @@
#include "util.h"
#include "shim.h"
#if defined(__x86_64__) || defined(__i386__)
#define __sysv_abi__ __attribute__((sysv_abi))
#else
#define __sysv_abi__
#endif
struct ShimLock {
EFI_STATUS __attribute__((sysv_abi)) (*shim_verify) (VOID *buffer, UINT32 size);
EFI_STATUS __sysv_abi__ (*shim_verify) (VOID *buffer, UINT32 size);
/* context is actually a struct for the PE header, but it isn't needed so void is sufficient just do define the interface
* see shim.c/shim.h and PeHeader.h in the github shim repo */
EFI_STATUS __attribute__((sysv_abi)) (*generate_hash) (VOID *data, UINT32 datasize, VOID *context, UINT8 *sha256hash, UINT8 *sha1hash);
EFI_STATUS __sysv_abi__ (*generate_hash) (VOID *data, UINT32 datasize, VOID *context, UINT8 *sha256hash, UINT8 *sha1hash);
EFI_STATUS __attribute__((sysv_abi)) (*read_header) (VOID *data, UINT32 datasize, VOID *context);
EFI_STATUS __sysv_abi__ (*read_header) (VOID *data, UINT32 datasize, VOID *context);
};
static const EFI_GUID simple_fs_guid = SIMPLE_FILE_SYSTEM_PROTOCOL;

View File

@ -1063,6 +1063,11 @@ static void cgroup_context_apply(
xsprintf(buf, "default %" PRIu64 "\n", weight);
(void) set_attribute_and_warn(u, "io", "io.weight", buf);
/* FIXME: drop this when distro kernels properly support BFQ through "io.weight"
* See also: https://github.com/systemd/systemd/pull/13335 */
xsprintf(buf, "%" PRIu64 "\n", weight);
(void) set_attribute_and_warn(u, "io", "io.bfq.weight", buf);
if (has_io) {
CGroupIODeviceLatency *latency;
CGroupIODeviceLimit *limit;

View File

@ -1000,16 +1000,11 @@ int bus_property_get_exec_ex_command_list(
}
static char *exec_command_flags_to_exec_chars(ExecCommandFlags flags) {
char *res = NULL;
asprintf(&res, "%s%s%s%s%s",
FLAGS_SET(flags, EXEC_COMMAND_IGNORE_FAILURE) ? "-" : "",
FLAGS_SET(flags, EXEC_COMMAND_NO_ENV_EXPAND) ? ":" : "",
FLAGS_SET(flags, EXEC_COMMAND_FULLY_PRIVILEGED) ? "+" : "",
FLAGS_SET(flags, EXEC_COMMAND_NO_SETUID) ? "!" : "",
FLAGS_SET(flags, EXEC_COMMAND_AMBIENT_MAGIC) ? "!!" : "");
return res;
return strjoin(FLAGS_SET(flags, EXEC_COMMAND_IGNORE_FAILURE) ? "-" : "",
FLAGS_SET(flags, EXEC_COMMAND_NO_ENV_EXPAND) ? ":" : "",
FLAGS_SET(flags, EXEC_COMMAND_FULLY_PRIVILEGED) ? "+" : "",
FLAGS_SET(flags, EXEC_COMMAND_NO_SETUID) ? "!" : "",
FLAGS_SET(flags, EXEC_COMMAND_AMBIENT_MAGIC) ? "!!" : "");
}
int bus_set_transient_exec_command(

View File

@ -196,7 +196,7 @@ static int timer_add_one_calendar_spec(
*v = (TimerValue) {
.base = base,
.calendar_spec = c,
.calendar_spec = TAKE_PTR(c),
};
LIST_PREPEND(value, t->values, v);

View File

@ -784,7 +784,7 @@ static int manager_dispatch_sync_bus_names(sd_event_source *es, void *userdata)
* changed, so synthesize a name owner changed signal. */
if (!streq_ptr(unique, s->bus_name_owner))
UNIT_VTABLE(u)->bus_name_owner_change(u, name, s->bus_name_owner, unique);
UNIT_VTABLE(u)->bus_name_owner_change(u, s->bus_name_owner, unique);
} else {
/* So, the name we're watching is not on the bus.
* This either means it simply hasn't appeared yet,
@ -793,7 +793,7 @@ static int manager_dispatch_sync_bus_names(sd_event_source *es, void *userdata)
* and synthesize a name loss signal in this case. */
if (s->bus_name_owner)
UNIT_VTABLE(u)->bus_name_owner_change(u, name, s->bus_name_owner, NULL);
UNIT_VTABLE(u)->bus_name_owner_change(u, s->bus_name_owner, NULL);
}
}

View File

@ -1153,8 +1153,11 @@ void job_add_to_run_queue(Job *j) {
log_warning_errno(r, "Failed to enable job run queue event source, ignoring: %m");
}
prioq_put(j->manager->run_queue, j, &j->run_queue_idx);
j->in_run_queue = true;
r = prioq_put(j->manager->run_queue, j, &j->run_queue_idx);
if (r < 0)
log_warning_errno(r, "Failed put job in run queue, ignoring: %m");
else
j->in_run_queue = true;
}
void job_add_to_dbus_queue(Job *j) {

View File

@ -98,14 +98,12 @@ int parse_confirm_spawn(const char *value, char **console) {
if (r == 0) {
*console = NULL;
return 0;
}
if (r > 0) /* on with default tty */
} else if (r > 0) /* on with default tty */
s = strdup("/dev/console");
else if (is_path(value)) /* on with fully qualified path */
s = strdup(value);
else /* on with only a tty file name, not a fully qualified path */
s = strjoin("/dev/", value);
s = path_join("/dev/", value);
if (!s)
return -ENOMEM;

View File

@ -4072,10 +4072,11 @@ static bool manager_get_show_status(Manager *m, StatusType type) {
const char *manager_get_confirm_spawn(Manager *m) {
static int last_errno = 0;
const char *vc = m->confirm_spawn;
struct stat st;
int r;
assert(m);
/* Here's the deal: we want to test the validity of the console but don't want
* PID1 to go through the whole console process which might block. But we also
* want to warn the user only once if something is wrong with the console so we
@ -4091,25 +4092,26 @@ const char *manager_get_confirm_spawn(Manager *m) {
* reason the configured console is not ready, we fallback to the default
* console. */
if (!vc || path_equal(vc, "/dev/console"))
return vc;
if (!m->confirm_spawn || path_equal(m->confirm_spawn, "/dev/console"))
return m->confirm_spawn;
r = stat(vc, &st);
if (r < 0)
if (stat(m->confirm_spawn, &st) < 0) {
r = -errno;
goto fail;
}
if (!S_ISCHR(st.st_mode)) {
errno = ENOTTY;
r = -ENOTTY;
goto fail;
}
last_errno = 0;
return vc;
return m->confirm_spawn;
fail:
if (last_errno != errno) {
last_errno = errno;
log_warning_errno(errno, "Failed to open %s: %m, using default console", vc);
}
if (last_errno != r)
last_errno = log_warning_errno(r, "Failed to open %s, using default console: %m", m->confirm_spawn);
return "/dev/console";
}

View File

@ -212,7 +212,6 @@ meson.add_install_script('sh', '-c', mkdir_p.format(systemsleepdir))
meson.add_install_script('sh', '-c', mkdir_p.format(systemgeneratordir))
meson.add_install_script('sh', '-c', mkdir_p.format(usergeneratordir))
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(pkgsysconfdir, 'user')))
meson.add_install_script('sh', '-c',
mkdir_p.format(join_paths(sysconfdir, 'xdg/systemd')))
meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'system')))
meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(pkgsysconfdir, 'user')))
meson.add_install_script('sh', '-c', mkdir_p.format(join_paths(sysconfdir, 'xdg/systemd')))

View File

@ -1323,9 +1323,10 @@ static void mount_sigchld_event(Unit *u, pid_t pid, int code, int status) {
}
unit_log_process_exit(
u, f == MOUNT_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
u,
"Mount process",
mount_exec_command_to_string(m->control_command_id),
f == MOUNT_SUCCESS,
code, status);
/* Note that due to the io event priority logic, we can be sure the new mountinfo is loaded

View File

@ -3417,14 +3417,11 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
f = SERVICE_SUCCESS;
}
/* When this is a successful exit, let's log about the exit code on DEBUG level. If this is a failure
* and the process exited on its own via exit(), then let's make this a NOTICE, under the assumption
* that the service already logged the reason at a higher log level on its own. (Internally,
* unit_log_process_exit() will possibly bump this to WARNING if the service died due to a signal.) */
unit_log_process_exit(
u, f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
u,
"Main process",
service_exec_command_to_string(SERVICE_EXEC_START),
f == SERVICE_SUCCESS,
code, status);
if (s->result == SERVICE_SUCCESS)
@ -3519,9 +3516,10 @@ static void service_sigchld_event(Unit *u, pid_t pid, int code, int status) {
}
unit_log_process_exit(
u, f == SERVICE_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
u,
"Control process",
service_exec_command_to_string(s->control_command_id),
f == SERVICE_SUCCESS,
code, status);
if (s->state != SERVICE_RELOAD && s->result == SERVICE_SUCCESS)
@ -4067,7 +4065,6 @@ static int service_get_timeout(Unit *u, usec_t *timeout) {
static void service_bus_name_owner_change(
Unit *u,
const char *name,
const char *old_owner,
const char *new_owner) {
@ -4075,17 +4072,15 @@ static void service_bus_name_owner_change(
int r;
assert(s);
assert(name);
assert(streq(s->bus_name, name));
assert(old_owner || new_owner);
if (old_owner && new_owner)
log_unit_debug(u, "D-Bus name %s changed owner from %s to %s", name, old_owner, new_owner);
log_unit_debug(u, "D-Bus name %s changed owner from %s to %s", s->bus_name, old_owner, new_owner);
else if (old_owner)
log_unit_debug(u, "D-Bus name %s no longer registered by %s", name, old_owner);
log_unit_debug(u, "D-Bus name %s no longer registered by %s", s->bus_name, old_owner);
else
log_unit_debug(u, "D-Bus name %s now registered by %s", name, new_owner);
log_unit_debug(u, "D-Bus name %s now registered by %s", s->bus_name, new_owner);
s->bus_name_good = !!new_owner;
@ -4118,11 +4113,11 @@ static void service_bus_name_owner_change(
/* Try to acquire PID from bus service */
r = sd_bus_get_name_creds(u->manager->api_bus, name, SD_BUS_CREDS_PID, &creds);
r = sd_bus_get_name_creds(u->manager->api_bus, s->bus_name, SD_BUS_CREDS_PID, &creds);
if (r >= 0)
r = sd_bus_creds_get_pid(creds, &pid);
if (r >= 0) {
log_unit_debug(u, "D-Bus name %s is now owned by process " PID_FMT, name, pid);
log_unit_debug(u, "D-Bus name %s is now owned by process " PID_FMT, s->bus_name, pid);
service_set_main_pid(s, pid);
unit_watch_pid(UNIT(s), pid, false);

View File

@ -3014,9 +3014,10 @@ static void socket_sigchld_event(Unit *u, pid_t pid, int code, int status) {
}
unit_log_process_exit(
u, f == SOCKET_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
u,
"Control process",
socket_exec_command_to_string(s->control_command_id),
f == SOCKET_SUCCESS,
code, status);
if (s->result == SOCKET_SUCCESS)

View File

@ -1043,9 +1043,10 @@ static void swap_sigchld_event(Unit *u, pid_t pid, int code, int status) {
}
unit_log_process_exit(
u, f == SWAP_SUCCESS ? LOG_DEBUG : LOG_NOTICE,
u,
"Swap process",
swap_exec_command_to_string(s->control_command_id),
f == SWAP_SUCCESS,
code, status);
switch (s->state) {

View File

@ -3242,7 +3242,46 @@ static int signal_name_owner_changed(sd_bus_message *message, void *userdata, sd
new_owner = empty_to_null(new_owner);
if (UNIT_VTABLE(u)->bus_name_owner_change)
UNIT_VTABLE(u)->bus_name_owner_change(u, name, old_owner, new_owner);
UNIT_VTABLE(u)->bus_name_owner_change(u, old_owner, new_owner);
return 0;
}
static int get_name_owner_handler(sd_bus_message *message, void *userdata, sd_bus_error *error) {
const sd_bus_error *e;
const char *new_owner;
Unit *u = userdata;
int r;
assert(message);
assert(u);
u->get_name_owner_slot = sd_bus_slot_unref(u->get_name_owner_slot);
if (sd_bus_error_is_set(error)) {
log_error("Failed to get name owner from bus: %s", error->message);
return 0;
}
e = sd_bus_message_get_error(message);
if (sd_bus_error_has_name(e, "org.freedesktop.DBus.Error.NameHasNoOwner"))
return 0;
if (e) {
log_error("Unexpected error response from GetNameOwner: %s", e->message);
return 0;
}
r = sd_bus_message_read(message, "s", &new_owner);
if (r < 0) {
bus_log_parse_error(r);
return 0;
}
new_owner = empty_to_null(new_owner);
if (UNIT_VTABLE(u)->bus_name_owner_change)
UNIT_VTABLE(u)->bus_name_owner_change(u, NULL, new_owner);
return 0;
}
@ -3264,7 +3303,19 @@ int unit_install_bus_match(Unit *u, sd_bus *bus, const char *name) {
"member='NameOwnerChanged',"
"arg0='", name, "'");
return sd_bus_add_match_async(bus, &u->match_bus_slot, match, signal_name_owner_changed, NULL, u);
int r = sd_bus_add_match_async(bus, &u->match_bus_slot, match, signal_name_owner_changed, NULL, u);
if (r < 0)
return r;
return sd_bus_call_method_async(bus,
&u->get_name_owner_slot,
"org.freedesktop.DBus",
"/org/freedesktop/DBus",
"org.freedesktop.DBus",
"GetNameOwner",
get_name_owner_handler,
u,
"s", name);
}
int unit_watch_bus_name(Unit *u, const char *name) {
@ -3299,6 +3350,7 @@ void unit_unwatch_bus_name(Unit *u, const char *name) {
(void) hashmap_remove_value(u->manager->watch_bus, name, u);
u->match_bus_slot = sd_bus_slot_unref(u->match_bus_slot);
u->get_name_owner_slot = sd_bus_slot_unref(u->get_name_owner_slot);
}
bool unit_can_serialize(Unit *u) {
@ -4531,6 +4583,15 @@ int unit_write_setting(Unit *u, UnitWriteFlags flags, const char *name, const ch
return r;
(void) mkdir_p_label(p, 0755);
/* Make sure the drop-in dir is registered in our path cache. This way we don't need to stupidly
* recreate the cache after every drop-in we write. */
if (u->manager->unit_path_cache) {
r = set_put_strdup(u->manager->unit_path_cache, p);
if (r < 0)
return r;
}
r = write_string_file_atomic_label(q, wrapped);
if (r < 0)
return r;
@ -5718,16 +5779,26 @@ void unit_log_skip(Unit *u, const char *result) {
void unit_log_process_exit(
Unit *u,
int level,
const char *kind,
const char *command,
bool success,
int code,
int status) {
int level;
assert(u);
assert(kind);
if (code != CLD_EXITED)
/* If this is a successful exit, let's log about the exit code on DEBUG level. If this is a failure
* and the process exited on its own via exit(), then let's make this a NOTICE, under the assumption
* that the service already logged the reason at a higher log level on its own. Otherwise, make it a
* WARNING. */
if (success)
level = LOG_DEBUG;
else if (code == CLD_EXITED)
level = LOG_NOTICE;
else
level = LOG_WARNING;
log_struct(level,

View File

@ -146,6 +146,7 @@ typedef struct Unit {
/* The slot used for watching NameOwnerChanged signals */
sd_bus_slot *match_bus_slot;
sd_bus_slot *get_name_owner_slot;
/* References to this unit from clients */
sd_bus_track *bus_track;
@ -528,7 +529,7 @@ typedef struct UnitVTable {
void (*notify_message)(Unit *u, const struct ucred *ucred, char **tags, FDSet *fds);
/* Called whenever a name this Unit registered for comes or goes away. */
void (*bus_name_owner_change)(Unit *u, const char *name, const char *old_owner, const char *new_owner);
void (*bus_name_owner_change)(Unit *u, const char *old_owner, const char *new_owner);
/* Called for each property that is being set */
int (*bus_set_property)(Unit *u, const char *name, sd_bus_message *message, UnitWriteFlags flags, sd_bus_error *error);
@ -851,7 +852,7 @@ static inline void unit_log_result(Unit *u, bool success, const char *result) {
unit_log_failure(u, result);
}
void unit_log_process_exit(Unit *u, int level, const char *kind, const char *command, int code, int status);
void unit_log_process_exit(Unit *u, const char *kind, const char *command, bool success, int code, int status);
int unit_exit_status(Unit *u);
int unit_success_action_exit_status(Unit *u);

View File

@ -46,30 +46,34 @@ STATIC_DESTRUCTOR_REGISTER(arg_disks, hashmap_freep);
STATIC_DESTRUCTOR_REGISTER(arg_default_options, freep);
STATIC_DESTRUCTOR_REGISTER(arg_default_keyfile, freep);
static int split_keyspec(const char *keyspec, char **keyfile, char **keydev) {
_cleanup_free_ char *kfile = NULL, *kdev = NULL;
char *c;
static int split_keyspec(const char *keyspec, char **ret_keyfile, char **ret_keydev) {
_cleanup_free_ char *keyfile = NULL, *keydev = NULL;
const char *c;
assert(keyspec);
assert(keyfile);
assert(keydev);
assert(ret_keyfile);
assert(ret_keydev);
if (!keyspec) {
*ret_keyfile = *ret_keydev = NULL;
return 0;
}
c = strrchr(keyspec, ':');
if (c) {
kfile = strndup(keyspec, c-keyspec);
kdev = strdup(c + 1);
if (!*kfile || !*kdev)
keyfile = strndup(keyspec, c-keyspec);
keydev = strdup(c + 1);
if (!keyfile || !keydev)
return log_oom();
} else {
/* No keydev specified */
kfile = strdup(keyspec);
kdev = NULL;
if (!*kfile)
keyfile = strdup(keyspec);
keydev = NULL;
if (!keyfile)
return log_oom();
}
*keyfile = TAKE_PTR(kfile);
*keydev = TAKE_PTR(kdev);
*ret_keyfile = TAKE_PTR(keyfile);
*ret_keydev = TAKE_PTR(keydev);
return 0;
}
@ -567,7 +571,7 @@ static int add_crypttab_devices(void) {
}
for (;;) {
_cleanup_free_ char *line = NULL, *name = NULL, *device = NULL, *keydev = NULL, *keyfile = NULL, *keyspec = NULL, *options = NULL;
_cleanup_free_ char *line = NULL, *name = NULL, *device = NULL, *keyspec = NULL, *options = NULL, *keyfile = NULL, *keydev = NULL;
crypto_device *d = NULL;
char *l, *uuid;
int k;

View File

@ -553,8 +553,8 @@ static int prompt_root_password(void) {
print_welcome();
putchar('\n');
msg1 = strjoina(special_glyph(SPECIAL_GLYPH_TRIANGULAR_BULLET), " Please enter a new root password (empty to skip): ");
msg2 = strjoina(special_glyph(SPECIAL_GLYPH_TRIANGULAR_BULLET), " Please enter new root password again: ");
msg1 = strjoina(special_glyph(SPECIAL_GLYPH_TRIANGULAR_BULLET), " Please enter a new root password (empty to skip):");
msg2 = strjoina(special_glyph(SPECIAL_GLYPH_TRIANGULAR_BULLET), " Please enter new root password again:");
for (;;) {
_cleanup_strv_free_erase_ char **a = NULL, **b = NULL;

View File

@ -169,12 +169,12 @@ static int process_progress(int fd) {
f = fdopen(fd, "r");
if (!f) {
safe_close(fd);
return -errno;
return log_debug_errno(errno, "Failed to use pipe: %m");
}
console = fopen("/dev/console", "we");
if (!console)
return -ENOMEM;
return log_debug_errno(errno, "Failed to open /dev/console, can't print progress output: %m");
for (;;) {
int pass, m;
@ -189,10 +189,9 @@ static int process_progress(int fd) {
r = log_warning_errno(errno, "Failed to read from progress pipe: %m");
else if (feof(f))
r = 0;
else {
log_warning("Failed to parse progress pipe data");
r = -EBADMSG;
}
else
r = log_warning_errno(SYNTHETIC_ERRNO(errno), "Failed to parse progress pipe data");
break;
}

View File

@ -101,6 +101,7 @@ static int parse_argv(int argc, char *argv[]) {
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, ARG_VERSION },
{ "pretty", no_argument, NULL, 'p' },
{ "app-specific", required_argument, NULL, 'a' },
{},
};

View File

@ -1539,7 +1539,8 @@ static int get_possible_units(
"_SYSTEMD_USER_UNIT\0" \
"USER_UNIT\0" \
"COREDUMP_USER_UNIT\0" \
"OBJECT_SYSTEMD_USER_UNIT\0"
"OBJECT_SYSTEMD_USER_UNIT\0" \
"_SYSTEMD_USER_SLICE\0"
static int add_units(sd_journal *j) {
_cleanup_strv_free_ char **patterns = NULL;

View File

@ -42,13 +42,16 @@ int main(int argc, char *argv[]) {
assert_se(f && f->current_offset > 0);
r = journal_file_move_to_object(f, OBJECT_ENTRY, f->current_offset, &o);
if (r < 0)
log_error_errno(r, "journal_file_move_to_object failed: %m");
assert_se(r >= 0);
r = journal_file_copy_entry(f, new_journal, o, f->current_offset);
if (r < 0)
log_error_errno(r, "journal_file_copy_entry failed: %m");
assert_se(r >= 0);
n++;
if (n > 10000)
if (++n >= 10000)
break;
}

View File

@ -27,7 +27,7 @@ static int option_append(uint8_t options[], size_t size, size_t *offset,
case SD_DHCP_OPTION_PAD:
case SD_DHCP_OPTION_END:
if (size < *offset + 1)
if (*offset + 1 > size)
return -ENOBUFS;
options[*offset] = code;
@ -35,42 +35,45 @@ static int option_append(uint8_t options[], size_t size, size_t *offset,
break;
case SD_DHCP_OPTION_USER_CLASS: {
size_t len = 0;
size_t total = 0;
char **s;
STRV_FOREACH(s, (char **) optval)
len += strlen(*s) + 1;
if (size < *offset + len + 2)
return -ENOBUFS;
options[*offset] = code;
options[*offset + 1] = len;
*offset += 2;
STRV_FOREACH(s, (char **) optval) {
len = strlen(*s);
size_t len = strlen(*s);
if (len > 255)
return -ENAMETOOLONG;
total += 1 + len;
}
if (*offset + 2 + total > size)
return -ENOBUFS;
options[*offset] = code;
options[*offset + 1] = total;
*offset += 2;
STRV_FOREACH(s, (char **) optval) {
size_t len = strlen(*s);
options[*offset] = len;
memcpy_safe(&options[*offset + 1], *s, len);
*offset += len + 1;
memcpy(&options[*offset + 1], *s, len);
*offset += 1 + len;
}
break;
}
default:
if (size < *offset + optlen + 2)
if (*offset + 2 + optlen > size)
return -ENOBUFS;
options[*offset] = code;
options[*offset + 1] = optlen;
memcpy_safe(&options[*offset + 2], optval, optlen);
*offset += optlen + 2;
*offset += 2 + optlen;
break;
}
@ -81,22 +84,25 @@ static int option_append(uint8_t options[], size_t size, size_t *offset,
int dhcp_option_append(DHCPMessage *message, size_t size, size_t *offset,
uint8_t overload,
uint8_t code, size_t optlen, const void *optval) {
size_t file_offset = 0, sname_offset =0;
bool file, sname;
const bool use_file = overload & DHCP_OVERLOAD_FILE;
const bool use_sname = overload & DHCP_OVERLOAD_SNAME;
int r;
assert(message);
assert(offset);
file = overload & DHCP_OVERLOAD_FILE;
sname = overload & DHCP_OVERLOAD_SNAME;
/* If *offset is in range [0, size), we are writing to ->options,
* if *offset is in range [size, size + sizeof(message->file)) and use_file, we are writing to ->file,
* if *offset is in range [size + use_file*sizeof(message->file), size + use_file*sizeof(message->file) + sizeof(message->sname))
* and use_sname, we are writing to ->sname.
*/
if (*offset < size) {
/* still space in the options array */
r = option_append(message->options, size, offset, code, optlen, optval);
if (r >= 0)
return 0;
else if (r == -ENOBUFS && (file || sname)) {
else if (r == -ENOBUFS && (use_file || use_sname)) {
/* did not fit, but we have more buffers to try
close the options array and move the offset to its end */
r = option_append(message->options, size, offset, SD_DHCP_OPTION_END, 0, NULL);
@ -108,8 +114,8 @@ int dhcp_option_append(DHCPMessage *message, size_t size, size_t *offset,
return r;
}
if (overload & DHCP_OVERLOAD_FILE) {
file_offset = *offset - size;
if (use_file) {
size_t file_offset = *offset - size;
if (file_offset < sizeof(message->file)) {
/* still space in the 'file' array */
@ -117,7 +123,7 @@ int dhcp_option_append(DHCPMessage *message, size_t size, size_t *offset,
if (r >= 0) {
*offset = size + file_offset;
return 0;
} else if (r == -ENOBUFS && sname) {
} else if (r == -ENOBUFS && use_sname) {
/* did not fit, but we have more buffers to try
close the file array and move the offset to its end */
r = option_append(message->options, size, offset, SD_DHCP_OPTION_END, 0, NULL);
@ -130,19 +136,18 @@ int dhcp_option_append(DHCPMessage *message, size_t size, size_t *offset,
}
}
if (overload & DHCP_OVERLOAD_SNAME) {
sname_offset = *offset - size - (file ? sizeof(message->file) : 0);
if (use_sname) {
size_t sname_offset = *offset - size - use_file*sizeof(message->file);
if (sname_offset < sizeof(message->sname)) {
/* still space in the 'sname' array */
r = option_append(message->sname, sizeof(message->sname), &sname_offset, code, optlen, optval);
if (r >= 0) {
*offset = size + (file ? sizeof(message->file) : 0) + sname_offset;
*offset = size + use_file*sizeof(message->file) + sname_offset;
return 0;
} else {
} else
/* no space, or other error, give up */
return r;
}
}
}

View File

@ -254,7 +254,7 @@ int config_parse_match_strv(
for (;;) {
_cleanup_free_ char *word = NULL, *k = NULL;
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE);
r = extract_first_word(&p, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RETAIN_ESCAPE);
if (r == 0)
return 0;
if (r == -ENOMEM)

View File

@ -395,7 +395,7 @@ static int inotify_handler(sd_event_source *s, const struct inotify_event *ev, v
} else if (ev->mask & IN_CREATE) {
unsigned i;
log_info("inotify-handler <%s>: create on %s", description, ev->name);
log_debug("inotify-handler <%s>: create on %s", description, ev->name);
if (!streq(ev->name, "sub")) {
assert_se(safe_atou(ev->name, &i) >= 0);
@ -483,7 +483,7 @@ static void test_inotify(unsigned n_create_events) {
}
int main(int argc, char *argv[]) {
test_setup_logging(LOG_DEBUG);
test_setup_logging(LOG_INFO);
test_basic();
test_sd_event_now();

View File

@ -457,8 +457,7 @@ _public_ int sd_hwdb_enumerate(sd_hwdb *hwdb, const char **key, const char **val
if (hwdb->properties_modified)
return -EAGAIN;
ordered_hashmap_iterate(hwdb->properties, &hwdb->properties_iterator, (void **)&entry, &k);
if (!k)
if (!ordered_hashmap_iterate(hwdb->properties, &hwdb->properties_iterator, (void **)&entry, &k))
return 0;
*key = k;

View File

@ -372,7 +372,7 @@ int sd_rtnl_message_new_neigh(sd_netlink *rtnl, sd_netlink_message **ret, uint16
int r;
assert_return(rtnl_message_type_is_neigh(nlmsg_type), -EINVAL);
assert_return(IN_SET(ndm_family, AF_INET, AF_INET6, PF_BRIDGE), -EINVAL);
assert_return(IN_SET(ndm_family, AF_UNSPEC, AF_INET, AF_INET6, PF_BRIDGE), -EINVAL);
assert_return(ret, -EINVAL);
r = message_new(rtnl, ret, nlmsg_type);

View File

@ -868,6 +868,13 @@ int sd_netlink_add_match(
if (r < 0)
return r;
break;
case RTM_NEWNEIGH:
case RTM_DELNEIGH:
r = socket_broadcast_group_ref(rtnl, RTNLGRP_NEIGH);
if (r < 0)
return r;
break;
case RTM_NEWROUTE:
case RTM_DELROUTE:

View File

@ -61,8 +61,12 @@ int manager_handle_action(
int r;
assert(m);
/* We should be called only with valid actions different than HANDLE_IGNORE. */
assert(handle > HANDLE_IGNORE && handle < _HANDLE_ACTION_MAX);
/* If the key handling is turned off, don't do anything */
if (handle == HANDLE_IGNORE) {
log_debug("Refusing operation, as it is turned off.");
return 0;
}
if (inhibit_key == INHIBIT_HANDLE_LID_SWITCH) {
/* If the last system suspend or startup is too close,

View File

@ -339,7 +339,7 @@ int button_open(Button *b) {
return log_error_errno(errno, "Failed to get input name for %s: %m", p);
(void) button_set_mask(b->name, fd);
b->io_event_source = sd_event_source_unref(b->io_event_source);
r = sd_event_add_io(b->manager->event, &b->io_event_source, fd, EPOLLIN, button_dispatch, b);
if (r < 0)

View File

@ -329,6 +329,8 @@ int inhibitor_create_fifo(Inhibitor *i) {
r = sd_event_source_set_priority(i->event_source, SD_EVENT_PRIORITY_IDLE-10);
if (r < 0)
return r;
(void) sd_event_source_set_description(i->event_source, "inhibitor-ref");
}
/* Open writing side */

View File

@ -893,7 +893,7 @@ static int dump_lldp_neighbors(Table *table, const char *prefix, int ifindex) {
"%s on port %s%s%s%s",
strna(system_name), strna(port_id),
isempty(port_description) ? "" : " (",
port_description,
strempty(port_description),
isempty(port_description) ? "" : ")");
if (r < 0)
return r;

View File

@ -260,6 +260,8 @@ static int address_add_internal(Link *link, Set **addresses,
r = set_put(*addresses, address);
if (r < 0)
return r;
if (r == 0)
return -EEXIST;
address->link = link;
@ -976,10 +978,7 @@ int config_parse_address_scope(const char *unit,
bool address_is_ready(const Address *a) {
assert(a);
if (a->family == AF_INET6)
return !(a->flags & IFA_F_TENTATIVE);
else
return !(a->flags & (IFA_F_TENTATIVE | IFA_F_DEPRECATED));
return !(a->flags & IFA_F_TENTATIVE);
}
int address_section_verify(Address *address) {

View File

@ -18,7 +18,7 @@ int config_parse_dhcp(
void *data,
void *userdata) {
AddressFamilyBoolean *dhcp = data, s;
AddressFamily *dhcp = data, s;
assert(filename);
assert(lvalue);
@ -26,10 +26,10 @@ int config_parse_dhcp(
assert(data);
/* Note that this is mostly like
* config_parse_address_family_boolean(), except that it
* config_parse_address_family(), except that it
* understands some old names for the enum values */
s = address_family_boolean_from_string(rvalue);
s = address_family_from_string(rvalue);
if (s < 0) {
/* Previously, we had a slightly different enum here,
@ -51,7 +51,7 @@ int config_parse_dhcp(
log_syntax(unit, LOG_WARNING, filename, line, 0,
"DHCP=%s is deprecated, please use DHCP=%s instead.",
rvalue, address_family_boolean_to_string(s));
rvalue, address_family_to_string(s));
}
*dhcp = s;

View File

@ -141,7 +141,7 @@ int dhcp6_lease_pd_prefix_lost(sd_dhcp6_client *client, Link* link) {
(void) in_addr_to_string(AF_INET6, &pd_prefix, &buf);
r = route_add(link, AF_INET6, &pd_prefix, pd_prefix_len, 0, 0, 0, &route);
r = route_add(link, AF_INET6, &pd_prefix, pd_prefix_len, NULL, 0, 0, 0, &route);
if (r < 0) {
log_link_warning_errno(link, r, "Failed to add unreachable route to delete for DHCPv6 delegated subnet %s/%u: %m",
strnull(buf),
@ -295,7 +295,7 @@ static int dhcp6_lease_pd_prefix_acquired(sd_dhcp6_client *client, Link *link) {
table = link_get_dhcp_route_table(link);
r = route_add(link, AF_INET6, &pd_prefix, pd_prefix_len, 0, 0, table, &route);
r = route_add(link, AF_INET6, &pd_prefix, pd_prefix_len, NULL, 0, 0, table, &route);
if (r < 0) {
log_link_warning_errno(link, r, "Failed to add unreachable route for DHCPv6 delegated subnet %s/%u: %m",
strnull(buf),
@ -732,7 +732,7 @@ static int dhcp6_prefix_add(Manager *m, struct in6_addr *addr, Link *link) {
assert_return(addr, -EINVAL);
r = route_add(link, AF_INET6, (union in_addr_union *) addr, 64,
0, 0, 0, &route);
NULL, 0, 0, 0, &route);
if (r < 0)
return r;
@ -799,7 +799,7 @@ int dhcp6_prefix_remove(Manager *m, struct in6_addr *addr) {
return -EINVAL;
(void) sd_radv_remove_prefix(l->radv, addr, 64);
r = route_get(l, AF_INET6, (union in_addr_union *) addr, 64, 0, 0, 0, &route);
r = route_get(l, AF_INET6, (union in_addr_union *) addr, 64, NULL, 0, 0, 0, &route);
if (r < 0)
return r;

View File

@ -251,7 +251,7 @@ int config_parse_ipv4ll(
void *data,
void *userdata) {
AddressFamilyBoolean *link_local = data;
AddressFamily *link_local = data;
int r;
assert(filename);
@ -260,7 +260,7 @@ int config_parse_ipv4ll(
assert(data);
/* Note that this is mostly like
* config_parse_address_family_boolean(), except that it
* config_parse_address_family(), except that it
* applies only to IPv4 */
r = parse_boolean(rvalue);
@ -276,7 +276,7 @@ int config_parse_ipv4ll(
log_syntax(unit, LOG_WARNING, filename, line, 0,
"%s=%s is deprecated, please use LinkLocalAddressing=%s instead.",
lvalue, rvalue, address_family_boolean_to_string(*link_local));
lvalue, rvalue, address_family_to_string(*link_local));
return 0;
}

View File

@ -150,7 +150,7 @@ static bool link_dhcp4_server_enabled(Link *link) {
return link->network->dhcp_server;
}
bool link_ipv4ll_enabled(Link *link, AddressFamilyBoolean mask) {
bool link_ipv4ll_enabled(Link *link, AddressFamily mask) {
assert(link);
assert((mask & ~(ADDRESS_FAMILY_IPV4 | ADDRESS_FAMILY_FALLBACK_IPV4)) == 0);
@ -242,7 +242,7 @@ static bool link_ipv4_forward_enabled(Link *link) {
if (!link->network)
return false;
if (link->network->ip_forward == _ADDRESS_FAMILY_BOOLEAN_INVALID)
if (link->network->ip_forward == _ADDRESS_FAMILY_INVALID)
return false;
return link->network->ip_forward & ADDRESS_FAMILY_IPV4;
@ -260,7 +260,7 @@ static bool link_ipv6_forward_enabled(Link *link) {
if (!link->network)
return false;
if (link->network->ip_forward == _ADDRESS_FAMILY_BOOLEAN_INVALID)
if (link->network->ip_forward == _ADDRESS_FAMILY_INVALID)
return false;
if (link_sysctl_ipv6_enabled(link) == 0)
@ -699,6 +699,9 @@ static Link *link_free(Link *link) {
link->routes = set_free_with_destructor(link->routes, route_free);
link->routes_foreign = set_free_with_destructor(link->routes_foreign, route_free);
link->neighbors = set_free_with_destructor(link->neighbors, neighbor_free);
link->neighbors_foreign = set_free_with_destructor(link->neighbors_foreign, neighbor_free);
link->addresses = set_free_with_destructor(link->addresses, address_free);
link->addresses_foreign = set_free_with_destructor(link->addresses_foreign, address_free);
@ -1945,6 +1948,8 @@ static int link_append_to_master(Link *link, NetDev *netdev) {
r = set_put(master->slaves, link);
if (r < 0)
return r;
if (r == 0)
return 0;
link_ref(link);
return 0;
@ -2347,6 +2352,22 @@ static bool link_is_static_address_configured(Link *link, Address *address) {
return false;
}
static bool link_is_neighbor_configured(Link *link, Neighbor *neighbor) {
Neighbor *net_neighbor;
assert(link);
assert(neighbor);
if (!link->network)
return false;
LIST_FOREACH(neighbors, net_neighbor, link->network->neighbors)
if (neighbor_equal(net_neighbor, neighbor))
return true;
return false;
}
static bool link_is_static_route_configured(Link *link, Route *route) {
Route *net_route;
@ -2392,6 +2413,7 @@ static bool link_address_is_dynamic(Link *link, Address *address) {
static int link_drop_foreign_config(Link *link) {
Address *address;
Neighbor *neighbor;
Route *route;
Iterator i;
int r;
@ -2418,6 +2440,18 @@ static int link_drop_foreign_config(Link *link) {
}
}
SET_FOREACH(neighbor, link->neighbors_foreign, i) {
if (link_is_neighbor_configured(link, neighbor)) {
r = neighbor_add(link, neighbor->family, &neighbor->in_addr, &neighbor->lladdr, neighbor->lladdr_size, NULL);
if (r < 0)
return r;
} else {
r = neighbor_remove(neighbor, link, NULL);
if (r < 0)
return r;
}
}
SET_FOREACH(route, link->routes_foreign, i) {
/* do not touch routes managed by the kernel */
if (route->protocol == RTPROT_KERNEL)
@ -2441,7 +2475,7 @@ static int link_drop_foreign_config(Link *link) {
continue;
if (link_is_static_route_configured(link, route)) {
r = route_add(link, route->family, &route->dst, route->dst_prefixlen, route->tos, route->priority, route->table, NULL);
r = route_add(link, route->family, &route->dst, route->dst_prefixlen, &route->gw, route->tos, route->priority, route->table, NULL);
if (r < 0)
return r;
} else {
@ -2456,6 +2490,7 @@ static int link_drop_foreign_config(Link *link) {
static int link_drop_config(Link *link) {
Address *address, *pool_address;
Neighbor *neighbor;
Route *route;
Iterator i;
int r;
@ -2479,6 +2514,12 @@ static int link_drop_config(Link *link) {
}
}
SET_FOREACH(neighbor, link->neighbors, i) {
r = neighbor_remove(neighbor, link, NULL);
if (r < 0)
return r;
}
SET_FOREACH(route, link->routes, i) {
/* do not touch routes managed by the kernel */
if (route->protocol == RTPROT_KERNEL)
@ -2686,6 +2727,8 @@ int get_product_uuid_handler(sd_bus_message *m, void *userdata, sd_bus_error *re
configure:
while ((link = set_steal_first(manager->links_requesting_uuid))) {
link_unref(link);
r = link_configure(link);
if (r < 0)
link_enter_failed(link);
@ -2758,6 +2801,8 @@ static int link_configure_duid(Link *link) {
r = set_put(m->duids_requesting_uuid, duid);
if (r < 0)
return log_oom();
link_ref(link);
}
return 0;
@ -3014,7 +3059,7 @@ network_file_fail:
continue;
}
r = route_add(link, family, &route_dst, prefixlen, tos, priority, table, &route);
r = route_add(link, family, &route_dst, prefixlen, NULL, tos, priority, table, &route);
if (r < 0)
return log_link_error_errno(link, r, "Failed to add route: %m");

View File

@ -75,6 +75,8 @@ typedef struct Link {
Set *addresses;
Set *addresses_foreign;
Set *neighbors;
Set *neighbors_foreign;
Set *routes;
Set *routes_foreign;
@ -186,7 +188,7 @@ int link_ipv6ll_gained(Link *link, const struct in6_addr *address);
int link_set_mtu(Link *link, uint32_t mtu);
bool link_ipv4ll_enabled(Link *link, AddressFamilyBoolean mask);
bool link_ipv4ll_enabled(Link *link, AddressFamily mask);
int link_stop_clients(Link *link, bool may_keep_dhcp);

View File

@ -432,7 +432,7 @@ int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, vo
return 0;
}
(void) route_get(link, family, &dst, dst_prefixlen, tos, priority, table, &route);
(void) route_get(link, family, &dst, dst_prefixlen, &gw, tos, priority, table, &route);
if (DEBUG_LOGGING) {
_cleanup_free_ char *buf_dst = NULL, *buf_dst_prefixlen = NULL,
@ -466,7 +466,7 @@ int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, vo
case RTM_NEWROUTE:
if (!route) {
/* A route appeared that we did not request */
r = route_add_foreign(link, family, &dst, dst_prefixlen, tos, priority, table, &route);
r = route_add_foreign(link, family, &dst, dst_prefixlen, &gw, tos, priority, table, &route);
if (r < 0) {
log_link_warning_errno(link, r, "Failed to remember foreign route, ignoring: %m");
return 0;
@ -488,6 +488,184 @@ int manager_rtnl_process_route(sd_netlink *rtnl, sd_netlink_message *message, vo
return 1;
}
static int manager_rtnl_process_neighbor_lladdr(sd_netlink_message *message, union lladdr_union *lladdr, size_t *size, char **str) {
int r;
assert(message);
assert(lladdr);
assert(size);
assert(str);
*str = NULL;
r = sd_netlink_message_read(message, NDA_LLADDR, sizeof(lladdr->ip.in6), &lladdr->ip.in6);
if (r >= 0) {
*size = sizeof(lladdr->ip.in6);
if (in_addr_to_string(AF_INET6, &lladdr->ip, str) < 0)
log_warning_errno(r, "Could not print lower address: %m");
return r;
}
r = sd_netlink_message_read(message, NDA_LLADDR, sizeof(lladdr->mac), &lladdr->mac);
if (r >= 0) {
*size = sizeof(lladdr->mac);
*str = new(char, ETHER_ADDR_TO_STRING_MAX);
if (!*str) {
log_oom();
return r;
}
ether_addr_to_string(&lladdr->mac, *str);
return r;
}
r = sd_netlink_message_read(message, NDA_LLADDR, sizeof(lladdr->ip.in), &lladdr->ip.in);
if (r >= 0) {
*size = sizeof(lladdr->ip.in);
if (in_addr_to_string(AF_INET, &lladdr->ip, str) < 0)
log_warning_errno(r, "Could not print lower address: %m");
return r;
}
return r;
}
int manager_rtnl_process_neighbor(sd_netlink *rtnl, sd_netlink_message *message, void *userdata) {
Manager *m = userdata;
Link *link = NULL;
Neighbor *neighbor = NULL;
int ifindex, family, r;
uint16_t type, state;
union in_addr_union in_addr = IN_ADDR_NULL;
_cleanup_free_ char *addr_str = NULL;
union lladdr_union lladdr;
size_t lladdr_size = 0;
_cleanup_free_ char *lladdr_str = NULL;
assert(rtnl);
assert(message);
assert(m);
if (sd_netlink_message_is_error(message)) {
r = sd_netlink_message_get_errno(message);
if (r < 0)
log_warning_errno(r, "rtnl: failed to receive neighbor message, ignoring: %m");
return 0;
}
r = sd_netlink_message_get_type(message, &type);
if (r < 0) {
log_warning_errno(r, "rtnl: could not get message type, ignoring: %m");
return 0;
} else if (!IN_SET(type, RTM_NEWNEIGH, RTM_DELNEIGH)) {
log_warning("rtnl: received unexpected message type %u when processing neighbor, ignoring.", type);
return 0;
}
r = sd_rtnl_message_neigh_get_state(message, &state);
if (r < 0) {
log_link_warning_errno(link, r, "rtnl: received neighbor message with invalid state, ignoring: %m");
return 0;
} else if (!FLAGS_SET(state, NUD_PERMANENT)) {
log_debug("rtnl: received non-static neighbor, ignoring.");
return 0;
}
r = sd_rtnl_message_neigh_get_ifindex(message, &ifindex);
if (r < 0) {
log_warning_errno(r, "rtnl: could not get ifindex from message, ignoring: %m");
return 0;
} else if (ifindex <= 0) {
log_warning("rtnl: received neighbor message with invalid ifindex %d, ignoring.", ifindex);
return 0;
}
r = link_get(m, ifindex, &link);
if (r < 0 || !link) {
/* when enumerating we might be out of sync, but we will get the neighbor again, so just
* ignore it */
if (!m->enumerating)
log_warning("rtnl: received neighbor for link '%d' we don't know about, ignoring.", ifindex);
return 0;
}
r = sd_rtnl_message_neigh_get_family(message, &family);
if (r < 0 || !IN_SET(family, AF_INET, AF_INET6)) {
log_link_warning(link, "rtnl: received neighbor message with invalid family, ignoring.");
return 0;
}
switch (family) {
case AF_INET:
r = sd_netlink_message_read_in_addr(message, NDA_DST, &in_addr.in);
if (r < 0) {
log_link_warning_errno(link, r, "rtnl: received neighbor message without valid address, ignoring: %m");
return 0;
}
break;
case AF_INET6:
r = sd_netlink_message_read_in6_addr(message, NDA_DST, &in_addr.in6);
if (r < 0) {
log_link_warning_errno(link, r, "rtnl: received neighbor message without valid address, ignoring: %m");
return 0;
}
break;
default:
assert_not_reached("Received unsupported address family");
}
if (in_addr_to_string(family, &in_addr, &addr_str) < 0)
log_link_warning_errno(link, r, "Could not print address: %m");
r = manager_rtnl_process_neighbor_lladdr(message, &lladdr, &lladdr_size, &lladdr_str);
if (r < 0) {
log_link_warning_errno(link, r, "rtnl: received neighbor message with invalid lladdr, ignoring: %m");
return 0;
}
(void) neighbor_get(link, family, &in_addr, &lladdr, lladdr_size, &neighbor);
switch (type) {
case RTM_NEWNEIGH:
if (neighbor)
log_link_debug(link, "Remembering neighbor: %s->%s",
strnull(addr_str), strnull(lladdr_str));
else {
/* A neighbor appeared that we did not request */
r = neighbor_add_foreign(link, family, &in_addr, &lladdr, lladdr_size, &neighbor);
if (r < 0) {
log_link_warning_errno(link, r, "Failed to remember foreign neighbor %s->%s, ignoring: %m",
strnull(addr_str), strnull(lladdr_str));
return 0;
} else
log_link_debug(link, "Remembering foreign neighbor: %s->%s",
strnull(addr_str), strnull(lladdr_str));
}
break;
case RTM_DELNEIGH:
if (neighbor) {
log_link_debug(link, "Forgetting neighbor: %s->%s",
strnull(addr_str), strnull(lladdr_str));
(void) neighbor_free(neighbor);
} else
log_link_info(link, "Kernel removed a neighbor we don't remember: %s->%s, ignoring.",
strnull(addr_str), strnull(lladdr_str));
break;
default:
assert_not_reached("Received invalid RTNL message type");
}
return 1;
}
int manager_rtnl_process_address(sd_netlink *rtnl, sd_netlink_message *message, void *userdata) {
_cleanup_free_ char *buf = NULL;
Manager *m = userdata;
@ -1014,6 +1192,14 @@ static int manager_connect_rtnl(Manager *m) {
if (r < 0)
return r;
r = sd_netlink_add_match(m->rtnl, NULL, RTM_NEWNEIGH, &manager_rtnl_process_neighbor, NULL, m, "network-rtnl_process_neighbor");
if (r < 0)
return r;
r = sd_netlink_add_match(m->rtnl, NULL, RTM_DELNEIGH, &manager_rtnl_process_neighbor, NULL, m, "network-rtnl_process_neighbor");
if (r < 0)
return r;
r = sd_netlink_add_match(m->rtnl, NULL, RTM_NEWROUTE, &manager_rtnl_process_route, NULL, m, "network-rtnl_process_route");
if (r < 0)
return r;
@ -1555,6 +1741,41 @@ int manager_rtnl_enumerate_addresses(Manager *m) {
return r;
}
int manager_rtnl_enumerate_neighbors(Manager *m) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL;
sd_netlink_message *neigh;
int r;
assert(m);
assert(m->rtnl);
r = sd_rtnl_message_new_neigh(m->rtnl, &req, RTM_GETNEIGH, 0, AF_UNSPEC);
if (r < 0)
return r;
r = sd_netlink_message_request_dump(req, true);
if (r < 0)
return r;
r = sd_netlink_call(m->rtnl, req, 0, &reply);
if (r < 0)
return r;
for (neigh = reply; neigh; neigh = sd_netlink_message_next(neigh)) {
int k;
m->enumerating = true;
k = manager_rtnl_process_neighbor(m->rtnl, neigh, m);
if (k < 0)
r = k;
m->enumerating = false;
}
return r;
}
int manager_rtnl_enumerate_routes(Manager *m) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL, *reply = NULL;
sd_netlink_message *route;
@ -1818,6 +2039,8 @@ int manager_request_product_uuid(Manager *m, Link *link) {
r = set_put(m->duids_requesting_uuid, duid);
if (r < 0)
return log_oom();
link_ref(link);
}
if (!m->bus || sd_bus_is_ready(m->bus) <= 0) {

View File

@ -77,10 +77,12 @@ bool manager_should_reload(Manager *m);
int manager_rtnl_enumerate_links(Manager *m);
int manager_rtnl_enumerate_addresses(Manager *m);
int manager_rtnl_enumerate_neighbors(Manager *m);
int manager_rtnl_enumerate_routes(Manager *m);
int manager_rtnl_enumerate_rules(Manager *m);
int manager_rtnl_process_address(sd_netlink *nl, sd_netlink_message *message, void *userdata);
int manager_rtnl_process_neighbor(sd_netlink *nl, sd_netlink_message *message, void *userdata);
int manager_rtnl_process_route(sd_netlink *nl, sd_netlink_message *message, void *userdata);
int manager_rtnl_process_rule(sd_netlink *nl, sd_netlink_message *message, void *userdata);

View File

@ -11,6 +11,7 @@
#include "networkd-link.h"
#include "networkd-manager.h"
#include "networkd-neighbor.h"
#include "set.h"
void neighbor_free(Neighbor *neighbor) {
if (!neighbor)
@ -21,10 +22,15 @@ void neighbor_free(Neighbor *neighbor) {
assert(neighbor->network->n_neighbors > 0);
neighbor->network->n_neighbors--;
if (neighbor->section) {
if (neighbor->section)
hashmap_remove(neighbor->network->neighbors_by_section, neighbor->section);
network_config_section_free(neighbor->section);
}
}
network_config_section_free(neighbor->section);
if (neighbor->link) {
set_remove(neighbor->link->neighbors, neighbor);
set_remove(neighbor->link->neighbors_foreign, neighbor);
}
free(neighbor);
@ -81,9 +87,10 @@ static int neighbor_new_static(Network *network, const char *filename, unsigned
return 0;
}
static int neighbor_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
static int neighbor_configure_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
int r;
assert(m);
assert(link);
assert(link->neighbor_messages > 0);
@ -137,7 +144,7 @@ int neighbor_configure(Neighbor *neighbor, Link *link, link_netlink_message_hand
if (r < 0)
return log_error_errno(r, "Could not append NDA_DST attribute: %m");
r = netlink_call_async(link->manager->rtnl, NULL, req, callback ?: neighbor_handler,
r = netlink_call_async(link->manager->rtnl, NULL, req, callback ?: neighbor_configure_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return log_error_errno(r, "Could not send rtnetlink message: %m");
@ -145,9 +152,217 @@ int neighbor_configure(Neighbor *neighbor, Link *link, link_netlink_message_hand
link->neighbor_messages++;
link_ref(link);
r = neighbor_add(link, neighbor->family, &neighbor->in_addr, &neighbor->lladdr, neighbor->lladdr_size, NULL);
if (r < 0)
return log_link_error_errno(link, r, "Could not add neighbor: %m");
return 0;
}
static int neighbor_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
int r;
assert(m);
assert(link);
if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
return 1;
r = sd_netlink_message_get_errno(m);
if (r < 0 && r != -ESRCH)
/* Neighbor may not exist because it already got deleted, ignore that. */
log_link_warning_errno(link, r, "Could not remove neighbor: %m");
return 1;
}
int neighbor_remove(Neighbor *neighbor, Link *link, link_netlink_message_handler_t callback) {
_cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
int r;
assert(neighbor);
assert(link);
assert(link->ifindex > 0);
assert(link->manager);
assert(link->manager->rtnl);
r = sd_rtnl_message_new_neigh(link->manager->rtnl, &req, RTM_DELNEIGH,
link->ifindex, neighbor->family);
if (r < 0)
return log_error_errno(r, "Could not allocate RTM_DELNEIGH message: %m");
r = netlink_message_append_in_addr_union(req, NDA_DST, neighbor->family, &neighbor->in_addr);
if (r < 0)
return log_error_errno(r, "Could not append NDA_DST attribute: %m");
r = netlink_call_async(link->manager->rtnl, NULL, req, callback ?: neighbor_remove_handler,
link_netlink_destroy_callback, link);
if (r < 0)
return log_error_errno(r, "Could not send rtnetlink message: %m");
link_ref(link);
return 0;
}
static void neighbor_hash_func(const Neighbor *neighbor, struct siphash *state) {
assert(neighbor);
siphash24_compress(&neighbor->family, sizeof(neighbor->family), state);
switch (neighbor->family) {
case AF_INET:
case AF_INET6:
/* Equality of neighbors are given by the pair (addr,lladdr) */
siphash24_compress(&neighbor->in_addr, FAMILY_ADDRESS_SIZE(neighbor->family), state);
siphash24_compress(&neighbor->lladdr, neighbor->lladdr_size, state);
break;
default:
/* treat any other address family as AF_UNSPEC */
break;
}
}
static int neighbor_compare_func(const Neighbor *a, const Neighbor *b) {
int r;
r = CMP(a->family, b->family);
if (r != 0)
return r;
r = CMP(a->lladdr_size, b->lladdr_size);
if (r != 0)
return r;
switch (a->family) {
case AF_INET:
case AF_INET6:
r = memcmp(&a->in_addr, &b->in_addr, FAMILY_ADDRESS_SIZE(a->family));
if (r != 0)
return r;
}
return memcmp(&a->lladdr, &b->lladdr, a->lladdr_size);
}
DEFINE_PRIVATE_HASH_OPS(neighbor_hash_ops, Neighbor, neighbor_hash_func, neighbor_compare_func);
int neighbor_get(Link *link, int family, const union in_addr_union *addr, const union lladdr_union *lladdr, size_t lladdr_size, Neighbor **ret) {
Neighbor neighbor, *existing;
assert(link);
assert(addr);
assert(lladdr);
neighbor = (Neighbor) {
.family = family,
.in_addr = *addr,
.lladdr = *lladdr,
.lladdr_size = lladdr_size,
};
existing = set_get(link->neighbors, &neighbor);
if (existing) {
if (ret)
*ret = existing;
return 1;
}
existing = set_get(link->neighbors_foreign, &neighbor);
if (existing) {
if (ret)
*ret = existing;
return 0;
}
return -ENOENT;
}
static int neighbor_add_internal(Link *link, Set **neighbors, int family, const union in_addr_union *addr, const union lladdr_union *lladdr, size_t lladdr_size, Neighbor **ret) {
_cleanup_(neighbor_freep) Neighbor *neighbor = NULL;
int r;
assert(link);
assert(neighbors);
assert(addr);
assert(lladdr);
neighbor = new(Neighbor, 1);
if (!neighbor)
return -ENOMEM;
*neighbor = (Neighbor) {
.family = family,
.in_addr = *addr,
.lladdr = *lladdr,
.lladdr_size = lladdr_size,
};
r = set_ensure_allocated(neighbors, &neighbor_hash_ops);
if (r < 0)
return r;
r = set_put(*neighbors, neighbor);
if (r < 0)
return r;
if (r == 0)
return -EEXIST;
neighbor->link = link;
if (ret)
*ret = neighbor;
neighbor = NULL;
return 0;
}
int neighbor_add(Link *link, int family, const union in_addr_union *addr, const union lladdr_union *lladdr, size_t lladdr_size, Neighbor **ret) {
Neighbor *neighbor;
int r;
r = neighbor_get(link, family, addr, lladdr, lladdr_size, &neighbor);
if (r == -ENOENT) {
/* Neighbor doesn't exist, make a new one */
r = neighbor_add_internal(link, &link->neighbors, family, addr, lladdr, lladdr_size, &neighbor);
if (r < 0)
return r;
} else if (r == 0) {
/* Neighbor is foreign, claim it as recognized */
r = set_ensure_allocated(&link->neighbors, &neighbor_hash_ops);
if (r < 0)
return r;
r = set_put(link->neighbors, neighbor);
if (r < 0)
return r;
set_remove(link->neighbors_foreign, neighbor);
} else if (r == 1) {
/* Neighbor already exists */
} else
return r;
if (ret)
*ret = neighbor;
return 0;
}
int neighbor_add_foreign(Link *link, int family, const union in_addr_union *addr, const union lladdr_union *lladdr, size_t lladdr_size, Neighbor **ret) {
return neighbor_add_internal(link, &link->neighbors_foreign, family, addr, lladdr, lladdr_size, ret);
}
bool neighbor_equal(const Neighbor *n1, const Neighbor *n2) {
if (n1 == n2)
return true;
if (!n1 || !n2)
return false;
return neighbor_compare_func(n1, n2) == 0;
}
int neighbor_section_verify(Neighbor *neighbor) {
if (section_is_invalid(neighbor->section))
return -EINVAL;

View File

@ -15,6 +15,11 @@ typedef struct Neighbor Neighbor;
#include "networkd-network.h"
#include "networkd-util.h"
union lladdr_union {
struct ether_addr mac;
union in_addr_union ip;
};
struct Neighbor {
Network *network;
Link *link;
@ -22,10 +27,7 @@ struct Neighbor {
int family;
union in_addr_union in_addr;
union {
struct ether_addr mac;
union in_addr_union ip;
} lladdr;
union lladdr_union lladdr;
size_t lladdr_size;
LIST_FIELDS(Neighbor, neighbors);
@ -36,6 +38,12 @@ void neighbor_free(Neighbor *neighbor);
DEFINE_NETWORK_SECTION_FUNCTIONS(Neighbor, neighbor_free);
int neighbor_configure(Neighbor *neighbor, Link *link, link_netlink_message_handler_t callback);
int neighbor_remove(Neighbor *neighbor, Link *link, link_netlink_message_handler_t callback);
int neighbor_get(Link *link, int family, const union in_addr_union *addr, const union lladdr_union *lladdr, size_t lladdr_size, Neighbor **ret);
int neighbor_add(Link *link, int family, const union in_addr_union *addr, const union lladdr_union *lladdr, size_t lladdr_size, Neighbor **ret);
int neighbor_add_foreign(Link *link, int family, const union in_addr_union *addr, const union lladdr_union *lladdr, size_t lladdr_size, Neighbor **ret);
bool neighbor_equal(const Neighbor *n1, const Neighbor *n2);
int neighbor_section_verify(Neighbor *neighbor);

View File

@ -59,7 +59,7 @@ Network.Xfrm, config_parse_stacked_netdev,
Network.VRF, config_parse_ifname, 0, offsetof(Network, vrf_name)
Network.DHCP, config_parse_dhcp, 0, offsetof(Network, dhcp)
Network.DHCPServer, config_parse_bool, 0, offsetof(Network, dhcp_server)
Network.LinkLocalAddressing, config_parse_link_local_address_family_boolean, 0, offsetof(Network, link_local)
Network.LinkLocalAddressing, config_parse_link_local_address_family, 0, offsetof(Network, link_local)
Network.IPv4LLRoute, config_parse_bool, 0, offsetof(Network, ipv4ll_route)
Network.DefaultRouteOnDevice, config_parse_bool, 0, offsetof(Network, default_route_on_device)
Network.IPv6Token, config_parse_ipv6token, 0, offsetof(Network, ipv6_token)
@ -76,7 +76,7 @@ Network.DNSOverTLS, config_parse_dns_over_tls_mode,
Network.DNSSEC, config_parse_dnssec_mode, 0, offsetof(Network, dnssec_mode)
Network.DNSSECNegativeTrustAnchors, config_parse_dnssec_negative_trust_anchors, 0, 0
Network.NTP, config_parse_ntp, 0, offsetof(Network, ntp)
Network.IPForward, config_parse_address_family_boolean_with_kernel, 0, offsetof(Network, ip_forward)
Network.IPForward, config_parse_address_family_with_kernel, 0, offsetof(Network, ip_forward)
Network.IPMasquerade, config_parse_bool, 0, offsetof(Network, ip_masquerade)
Network.IPv6PrivacyExtensions, config_parse_ipv6_privacy_extensions, 0, offsetof(Network, ipv6_privacy_extensions)
Network.IPv6AcceptRA, config_parse_tristate, 0, offsetof(Network, ipv6_accept_ra)
@ -122,6 +122,7 @@ RoutingPolicyRule.IPProtocol, config_parse_routing_policy_rule_ip_prot
RoutingPolicyRule.SourcePort, config_parse_routing_policy_rule_port_range, 0, 0
RoutingPolicyRule.DestinationPort, config_parse_routing_policy_rule_port_range, 0, 0
RoutingPolicyRule.InvertRule, config_parse_routing_policy_rule_invert, 0, 0
RoutingPolicyRule.Family, config_parse_routing_policy_rule_family, 0, 0
Route.Gateway, config_parse_gateway, 0, 0
Route.Destination, config_parse_destination, 0, 0
Route.Source, config_parse_destination, 0, 0

View File

@ -281,7 +281,7 @@ int network_verify(Network *network) {
prefix_free(prefix);
LIST_FOREACH_SAFE(rules, rule, rule_next, network->rules)
if (section_is_invalid(rule->section))
if (routing_policy_rule_section_verify(rule) < 0)
routing_policy_rule_free(rule);
return 0;
@ -395,7 +395,7 @@ int network_load_one(Manager *manager, const char *filename) {
.dns_over_tls_mode = _DNS_OVER_TLS_MODE_INVALID,
/* If LinkLocalAddressing= is not set, then set to ADDRESS_FAMILY_IPV6 later. */
.link_local = _ADDRESS_FAMILY_BOOLEAN_INVALID,
.link_local = _ADDRESS_FAMILY_INVALID,
.ipv6_privacy_extensions = IPV6_PRIVACY_EXTENSIONS_NO,
.ipv6_accept_ra = -1,

View File

@ -77,7 +77,7 @@ struct Network {
Hashmap *stacked_netdev_names;
/* DHCP Client Support */
AddressFamilyBoolean dhcp;
AddressFamily dhcp;
DHCPClientIdentifier dhcp_client_identifier;
char *dhcp_vendor_class_identifier;
char **dhcp_user_class;
@ -123,7 +123,7 @@ struct Network {
uint32_t dhcp_server_pool_size;
/* IPV4LL Support */
AddressFamilyBoolean link_local;
AddressFamily link_local;
bool ipv4ll_route;
bool default_route_on_device;
@ -171,7 +171,7 @@ struct Network {
usec_t can_restart_us;
int can_triple_sampling;
AddressFamilyBoolean ip_forward;
AddressFamily ip_forward;
bool ip_masquerade;
int ipv6_accept_ra;

View File

@ -198,7 +198,11 @@ static int route_compare_func(const Route *a, const Route *b) {
if (r != 0)
return r;
return memcmp(&a->dst, &b->dst, FAMILY_ADDRESS_SIZE(a->family));
r = memcmp(&a->dst, &b->dst, FAMILY_ADDRESS_SIZE(a->family));
if (r != 0)
return r;
return memcmp(&a->gw, &b->gw, FAMILY_ADDRESS_SIZE(a->family));
default:
/* treat any other address family as AF_UNSPEC */
return 0;
@ -318,6 +322,7 @@ int route_get(Link *link,
int family,
const union in_addr_union *dst,
unsigned char dst_prefixlen,
const union in_addr_union *gw,
unsigned char tos,
uint32_t priority,
uint32_t table,
@ -332,6 +337,7 @@ int route_get(Link *link,
.family = family,
.dst = *dst,
.dst_prefixlen = dst_prefixlen,
.gw = gw ? *gw : IN_ADDR_NULL,
.tos = tos,
.priority = priority,
.table = table,
@ -360,6 +366,7 @@ static int route_add_internal(
int family,
const union in_addr_union *dst,
unsigned char dst_prefixlen,
const union in_addr_union *gw,
unsigned char tos,
uint32_t priority,
uint32_t table,
@ -379,6 +386,8 @@ static int route_add_internal(
route->family = family;
route->dst = *dst;
route->dst_prefixlen = dst_prefixlen;
route->dst = *dst;
route->gw = gw ? *gw : IN_ADDR_NULL;
route->tos = tos;
route->priority = priority;
route->table = table;
@ -390,6 +399,8 @@ static int route_add_internal(
r = set_put(*routes, route);
if (r < 0)
return r;
if (r == 0)
return -EEXIST;
route->link = link;
@ -406,18 +417,20 @@ int route_add_foreign(
int family,
const union in_addr_union *dst,
unsigned char dst_prefixlen,
const union in_addr_union *gw,
unsigned char tos,
uint32_t priority,
uint32_t table,
Route **ret) {
return route_add_internal(link, &link->routes_foreign, family, dst, dst_prefixlen, tos, priority, table, ret);
return route_add_internal(link, &link->routes_foreign, family, dst, dst_prefixlen, gw, tos, priority, table, ret);
}
int route_add(Link *link,
int family,
const union in_addr_union *dst,
unsigned char dst_prefixlen,
const union in_addr_union *gw,
unsigned char tos,
uint32_t priority,
uint32_t table,
@ -426,10 +439,10 @@ int route_add(Link *link,
Route *route;
int r;
r = route_get(link, family, dst, dst_prefixlen, tos, priority, table, &route);
r = route_get(link, family, dst, dst_prefixlen, gw, tos, priority, table, &route);
if (r == -ENOENT) {
/* Route does not exist, create a new one */
r = route_add_internal(link, &link->routes, family, dst, dst_prefixlen, tos, priority, table, &route);
r = route_add_internal(link, &link->routes, family, dst, dst_prefixlen, gw, tos, priority, table, &route);
if (r < 0)
return r;
} else if (r == 0) {
@ -628,7 +641,7 @@ int route_configure(
return 0;
}
if (route_get(link, route->family, &route->dst, route->dst_prefixlen, route->tos, route->priority, route->table, NULL) <= 0 &&
if (route_get(link, route->family, &route->dst, route->dst_prefixlen, &route->gw, route->tos, route->priority, route->table, NULL) <= 0 &&
set_size(link->routes) >= routes_max())
return log_link_error_errno(link, SYNTHETIC_ERRNO(E2BIG),
"Too many routes are configured, refusing: %m");
@ -804,7 +817,7 @@ int route_configure(
lifetime = route->lifetime;
r = route_add(link, route->family, &route->dst, route->dst_prefixlen, route->tos, route->priority, route->table, &route);
r = route_add(link, route->family, &route->dst, route->dst_prefixlen, &route->gw, route->tos, route->priority, route->table, &route);
if (r < 0)
return log_link_error_errno(link, r, "Could not add route: %m");

View File

@ -56,9 +56,9 @@ void route_free(Route *route);
int route_configure(Route *route, Link *link, link_netlink_message_handler_t callback);
int route_remove(Route *route, Link *link, link_netlink_message_handler_t callback);
int route_get(Link *link, int family, const union in_addr_union *dst, unsigned char dst_prefixlen, unsigned char tos, uint32_t priority, uint32_t table, Route **ret);
int route_add(Link *link, int family, const union in_addr_union *dst, unsigned char dst_prefixlen, unsigned char tos, uint32_t priority, uint32_t table, Route **ret);
int route_add_foreign(Link *link, int family, const union in_addr_union *dst, unsigned char dst_prefixlen, unsigned char tos, uint32_t priority, uint32_t table, Route **ret);
int route_get(Link *link, int family, const union in_addr_union *dst, unsigned char dst_prefixlen, const union in_addr_union *gw, unsigned char tos, uint32_t priority, uint32_t table, Route **ret);
int route_add(Link *link, int family, const union in_addr_union *dst, unsigned char dst_prefixlen, const union in_addr_union *gw, unsigned char tos, uint32_t priority, uint32_t table, Route **ret);
int route_add_foreign(Link *link, int family, const union in_addr_union *dst, unsigned char dst_prefixlen, const union in_addr_union *gw, unsigned char tos, uint32_t priority, uint32_t table, Route **ret);
void route_update(Route *route, const union in_addr_union *src, unsigned char src_prefixlen, const union in_addr_union *gw, const union in_addr_union *prefsrc, unsigned char scope, unsigned char protocol, unsigned char type);
bool route_equal(Route *r1, Route *r2);

View File

@ -3,6 +3,7 @@
#include <net/if.h>
#include <linux/fib_rules.h>
#include "af-list.h"
#include "alloc-util.h"
#include "conf-parser.h"
#include "fileio.h"
@ -10,6 +11,7 @@
#include "networkd-routing-policy-rule.h"
#include "netlink-util.h"
#include "networkd-manager.h"
#include "networkd-util.h"
#include "parse-util.h"
#include "socket-util.h"
#include "string-util.h"
@ -23,7 +25,6 @@ int routing_policy_rule_new(RoutingPolicyRule **ret) {
return -ENOMEM;
*rule = (RoutingPolicyRule) {
.family = AF_INET,
.table = RT_TABLE_MAIN,
};
@ -58,6 +59,44 @@ void routing_policy_rule_free(RoutingPolicyRule *rule) {
free(rule);
}
static int routing_policy_rule_copy(RoutingPolicyRule *dest, RoutingPolicyRule *src) {
_cleanup_free_ char *iif = NULL, *oif = NULL;
assert(dest);
assert(src);
if (src->iif) {
iif = strdup(src->iif);
if (!iif)
return -ENOMEM;
}
if (src->oif) {
oif = strdup(src->oif);
if (!oif)
return -ENOMEM;
}
dest->family = src->family;
dest->from = src->from;
dest->from_prefixlen = src->from_prefixlen;
dest->to = src->to;
dest->to_prefixlen = src->to_prefixlen;
dest->invert_rule = src->invert_rule;
dest->tos = src->tos;
dest->fwmark = src->fwmark;
dest->fwmask = src->fwmask;
dest->priority = src->priority;
dest->table = src->table;
dest->iif = TAKE_PTR(iif);
dest->oif = TAKE_PTR(oif);
dest->protocol = src->protocol;
dest->sport = src->sport;
dest->dport = src->dport;
return 0;
}
static void routing_policy_rule_hash_func(const RoutingPolicyRule *rule, struct siphash *state) {
assert(rule);
@ -209,7 +248,11 @@ int routing_policy_rule_make_local(Manager *m, RoutingPolicyRule *rule) {
if (r < 0)
return r;
return set_put(m->rules, rule);
r = set_put(m->rules, rule);
if (r < 0)
return r;
if (r == 0)
routing_policy_rule_free(rule);
}
return -ENOENT;
@ -217,46 +260,21 @@ int routing_policy_rule_make_local(Manager *m, RoutingPolicyRule *rule) {
static int routing_policy_rule_add_internal(Manager *m, Set **rules, RoutingPolicyRule *in, RoutingPolicyRule **ret) {
_cleanup_(routing_policy_rule_freep) RoutingPolicyRule *rule = NULL;
_cleanup_free_ char *iif = NULL, *oif = NULL;
int r;
assert(m);
assert(rules);
assert(in);
if (in->iif) {
iif = strdup(in->iif);
if (!iif)
return -ENOMEM;
}
if (in->oif) {
oif = strdup(in->oif);
if (!oif)
return -ENOMEM;
}
r = routing_policy_rule_new(&rule);
if (r < 0)
return r;
rule->manager = m;
rule->family = in->family;
rule->from = in->from;
rule->from_prefixlen = in->from_prefixlen;
rule->to = in->to;
rule->to_prefixlen = in->to_prefixlen;
rule->invert_rule = in->invert_rule;
rule->tos = in->tos;
rule->fwmark = in->fwmark;
rule->fwmask = in->fwmask;
rule->priority = in->priority;
rule->table = in->table;
rule->iif = TAKE_PTR(iif);
rule->oif = TAKE_PTR(oif);
rule->protocol = in->protocol;
rule->sport = in->sport;
rule->dport = in->dport;
r = routing_policy_rule_copy(rule, in);
if (r < 0)
return r;
r = set_ensure_allocated(rules, &routing_policy_rule_hash_ops);
if (r < 0)
@ -265,6 +283,8 @@ static int routing_policy_rule_add_internal(Manager *m, Set **rules, RoutingPoli
r = set_put(*rules, rule);
if (r < 0)
return r;
if (r == 0)
return -EEXIST;
if (ret)
*ret = rule;
@ -549,6 +569,50 @@ int routing_policy_rule_configure(RoutingPolicyRule *rule, Link *link, link_netl
return 1;
}
int routing_policy_rule_section_verify(RoutingPolicyRule *rule) {
int r;
if (section_is_invalid(rule->section))
return -EINVAL;
if ((rule->family == AF_INET && FLAGS_SET(rule->address_family, ADDRESS_FAMILY_IPV6)) ||
(rule->family == AF_INET6 && FLAGS_SET(rule->address_family, ADDRESS_FAMILY_IPV4)))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"%s: address family specified by Family= conflicts with the address "
"specified by To= or From=. Ignoring [RoutingPolicyRule] section from line %u.",
rule->section->filename, rule->section->line);
if (FLAGS_SET(rule->address_family, ADDRESS_FAMILY_IPV4 | ADDRESS_FAMILY_IPV6)) {
_cleanup_(routing_policy_rule_freep) RoutingPolicyRule *rule6 = NULL;
assert(rule->family == AF_UNSPEC);
/* When Family=both, we need to copy the section, AF_INET and AF_INET6. */
r = routing_policy_rule_new_static(rule->network, NULL, 0, &rule6);
if (r < 0)
return r;
r = routing_policy_rule_copy(rule6, rule);
if (r < 0)
return r;
rule->family = AF_INET;
rule6->family = AF_INET6;
TAKE_PTR(rule6);
}
if (rule->family == AF_UNSPEC) {
if (FLAGS_SET(rule->address_family, ADDRESS_FAMILY_IPV6))
rule->family = AF_INET6;
else
rule->family = AF_INET;
}
return 0;
}
static int parse_fwmark_fwmask(const char *s, uint32_t *fwmark, uint32_t *fwmask) {
_cleanup_free_ char *f = NULL;
char *p;
@ -761,7 +825,10 @@ int config_parse_routing_policy_rule_prefix(
prefixlen = &n->from_prefixlen;
}
r = in_addr_prefix_from_string_auto(rvalue, &n->family, buffer, prefixlen);
if (n->family == AF_UNSPEC)
r = in_addr_prefix_from_string_auto(rvalue, &n->family, buffer, prefixlen);
else
r = in_addr_prefix_from_string(rvalue, n->family, buffer, prefixlen);
if (r < 0) {
log_syntax(unit, LOG_ERR, filename, line, r, "RPDB rule prefix is invalid, ignoring assignment: %s", rvalue);
return 0;
@ -941,6 +1008,46 @@ int config_parse_routing_policy_rule_invert(
return 0;
}
int config_parse_routing_policy_rule_family(
const char *unit,
const char *filename,
unsigned line,
const char *section,
unsigned section_line,
const char *lvalue,
int ltype,
const char *rvalue,
void *data,
void *userdata) {
_cleanup_(routing_policy_rule_free_or_set_invalidp) RoutingPolicyRule *n = NULL;
Network *network = userdata;
AddressFamily a;
int r;
assert(filename);
assert(section);
assert(lvalue);
assert(rvalue);
assert(data);
r = routing_policy_rule_new_static(network, filename, section_line, &n);
if (r < 0)
return r;
a = routing_policy_rule_address_family_from_string(rvalue);
if (a < 0) {
log_syntax(unit, LOG_ERR, filename, line, 0,
"Invalid address family '%s', ignoring.", rvalue);
return 0;
}
n->address_family = a;
n = NULL;
return 0;
}
static int routing_policy_rule_read_full_file(const char *state_file, char **ret) {
_cleanup_free_ char *s = NULL;
size_t size;
@ -971,6 +1078,7 @@ int routing_policy_serialize_rules(Set *rules, FILE *f) {
SET_FOREACH(rule, rules, i) {
_cleanup_free_ char *from_str = NULL, *to_str = NULL;
bool space = false;
const char *family_str;
fputs("RULE=", f);
@ -995,6 +1103,12 @@ int routing_policy_serialize_rules(Set *rules, FILE *f) {
space = true;
}
family_str = af_to_name(rule->family);
if (family_str)
fprintf(f, "%sfamily=%s",
space ? " " : "",
family_str);
if (rule->tos != 0) {
fprintf(f, "%stos=%hhu",
space ? " " : "",
@ -1002,6 +1116,10 @@ int routing_policy_serialize_rules(Set *rules, FILE *f) {
space = true;
}
fprintf(f, "%spriority=%"PRIu32,
space ? " " : "",
rule->priority);
if (rule->fwmark != 0) {
fprintf(f, "%sfwmark=%"PRIu32"/%"PRIu32,
space ? " " : "",
@ -1117,6 +1235,13 @@ int routing_policy_load_rules(const char *state_file, Set **rules) {
continue;
}
} else if (streq(a, "family")) {
r = af_from_name(b);
if (r < 0) {
log_error_errno(r, "Failed to parse RPDB rule family, ignoring: %s", b);
continue;
}
rule->family = r;
} else if (streq(a, "tos")) {
r = safe_atou8(b, &rule->tos);
if (r < 0) {
@ -1129,6 +1254,12 @@ int routing_policy_load_rules(const char *state_file, Set **rules) {
log_error_errno(r, "Failed to parse RPDB rule table, ignoring: %s", b);
continue;
}
} else if (streq(a, "priority")) {
r = safe_atou32(b, &rule->priority);
if (r < 0) {
log_error_errno(r, "Failed to parse RPDB rule priority, ignoring: %s", b);
continue;
}
} else if (streq(a, "fwmark")) {
r = parse_fwmark_fwmask(b, &rule->fwmark, &rule->fwmask);
@ -1180,8 +1311,8 @@ int routing_policy_load_rules(const char *state_file, Set **rules) {
log_warning_errno(r, "Failed to add RPDB rule to saved DB, ignoring: %s", p);
continue;
}
rule = NULL;
if (r > 0)
rule = NULL;
}
return 0;

View File

@ -36,7 +36,8 @@ struct RoutingPolicyRule {
uint32_t fwmask;
uint32_t priority;
int family;
AddressFamily address_family; /* Specified by Family= */
int family; /* Automatically determined by From= or To= */
unsigned char to_prefixlen;
unsigned char from_prefixlen;
@ -56,6 +57,7 @@ int routing_policy_rule_new(RoutingPolicyRule **ret);
void routing_policy_rule_free(RoutingPolicyRule *rule);
DEFINE_NETWORK_SECTION_FUNCTIONS(RoutingPolicyRule, routing_policy_rule_free);
int routing_policy_rule_section_verify(RoutingPolicyRule *rule);
int routing_policy_rule_configure(RoutingPolicyRule *address, Link *link, link_netlink_message_handler_t callback);
int routing_policy_rule_remove(RoutingPolicyRule *routing_policy_rule, Link *link, link_netlink_message_handler_t callback);
@ -76,3 +78,4 @@ CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_device);
CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_port_range);
CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_ip_protocol);
CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_invert);
CONFIG_PARSER_PROTOTYPE(config_parse_routing_policy_rule_family);

View File

@ -8,14 +8,14 @@
#include "string-util.h"
#include "util.h"
static const char * const address_family_boolean_table[_ADDRESS_FAMILY_BOOLEAN_MAX] = {
static const char * const address_family_table[_ADDRESS_FAMILY_MAX] = {
[ADDRESS_FAMILY_NO] = "no",
[ADDRESS_FAMILY_YES] = "yes",
[ADDRESS_FAMILY_IPV4] = "ipv4",
[ADDRESS_FAMILY_IPV6] = "ipv6",
};
static const char * const link_local_address_family_boolean_table[_ADDRESS_FAMILY_BOOLEAN_MAX] = {
static const char * const link_local_address_family_table[_ADDRESS_FAMILY_MAX] = {
[ADDRESS_FAMILY_NO] = "no",
[ADDRESS_FAMILY_YES] = "yes",
[ADDRESS_FAMILY_IPV4] = "ipv4",
@ -24,12 +24,19 @@ static const char * const link_local_address_family_boolean_table[_ADDRESS_FAMIL
[ADDRESS_FAMILY_FALLBACK_IPV4] = "ipv4-fallback",
};
DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(address_family_boolean, AddressFamilyBoolean, ADDRESS_FAMILY_YES);
DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(link_local_address_family_boolean, AddressFamilyBoolean, ADDRESS_FAMILY_YES);
DEFINE_CONFIG_PARSE_ENUM(config_parse_link_local_address_family_boolean, link_local_address_family_boolean,
AddressFamilyBoolean, "Failed to parse option");
static const char * const routing_policy_rule_address_family_table[_ADDRESS_FAMILY_MAX] = {
[ADDRESS_FAMILY_YES] = "both",
[ADDRESS_FAMILY_IPV4] = "ipv4",
[ADDRESS_FAMILY_IPV6] = "ipv6",
};
int config_parse_address_family_boolean_with_kernel(
DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(address_family, AddressFamily, ADDRESS_FAMILY_YES);
DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(link_local_address_family, AddressFamily, ADDRESS_FAMILY_YES);
DEFINE_STRING_TABLE_LOOKUP(routing_policy_rule_address_family, AddressFamily);
DEFINE_CONFIG_PARSE_ENUM(config_parse_link_local_address_family, link_local_address_family,
AddressFamily, "Failed to parse option");
int config_parse_address_family_with_kernel(
const char* unit,
const char *filename,
unsigned line,
@ -41,7 +48,7 @@ int config_parse_address_family_boolean_with_kernel(
void *data,
void *userdata) {
AddressFamilyBoolean *fwd = data, s;
AddressFamily *fwd = data, s;
assert(filename);
assert(lvalue);
@ -56,7 +63,7 @@ int config_parse_address_family_boolean_with_kernel(
* is gone, hence silently accept the old setting, but turn it
* to "no". */
s = address_family_boolean_from_string(rvalue);
s = address_family_from_string(rvalue);
if (s < 0) {
if (streq(rvalue, "kernel"))
s = ADDRESS_FAMILY_NO;

View File

@ -5,7 +5,7 @@
#include "hash-funcs.h"
#include "macro.h"
typedef enum AddressFamilyBoolean {
typedef enum AddressFamily {
/* This is a bitmask, though it usually doesn't feel that way! */
ADDRESS_FAMILY_NO = 0,
ADDRESS_FAMILY_IPV4 = 1 << 0,
@ -13,9 +13,9 @@ typedef enum AddressFamilyBoolean {
ADDRESS_FAMILY_YES = ADDRESS_FAMILY_IPV4 | ADDRESS_FAMILY_IPV6,
ADDRESS_FAMILY_FALLBACK_IPV4 = 1 << 2,
ADDRESS_FAMILY_FALLBACK = ADDRESS_FAMILY_FALLBACK_IPV4 | ADDRESS_FAMILY_IPV6,
_ADDRESS_FAMILY_BOOLEAN_MAX,
_ADDRESS_FAMILY_BOOLEAN_INVALID = -1,
} AddressFamilyBoolean;
_ADDRESS_FAMILY_MAX,
_ADDRESS_FAMILY_INVALID = -1,
} AddressFamily;
typedef struct NetworkConfigSection {
unsigned line;
@ -23,14 +23,17 @@ typedef struct NetworkConfigSection {
char filename[];
} NetworkConfigSection;
CONFIG_PARSER_PROTOTYPE(config_parse_link_local_address_family_boolean);
CONFIG_PARSER_PROTOTYPE(config_parse_address_family_boolean_with_kernel);
CONFIG_PARSER_PROTOTYPE(config_parse_link_local_address_family);
CONFIG_PARSER_PROTOTYPE(config_parse_address_family_with_kernel);
const char *address_family_boolean_to_string(AddressFamilyBoolean b) _const_;
AddressFamilyBoolean address_family_boolean_from_string(const char *s) _pure_;
const char *address_family_to_string(AddressFamily b) _const_;
AddressFamily address_family_from_string(const char *s) _pure_;
const char *link_local_address_family_boolean_to_string(AddressFamilyBoolean b) _const_;
AddressFamilyBoolean link_local_address_family_boolean_from_string(const char *s) _pure_;
const char *link_local_address_family_to_string(AddressFamily b) _const_;
AddressFamily link_local_address_family_from_string(const char *s) _pure_;
const char *routing_policy_rule_address_family_to_string(AddressFamily b) _const_;
AddressFamily routing_policy_rule_address_family_from_string(const char *s) _pure_;
int kernel_route_expiration_supported(void);

View File

@ -95,6 +95,10 @@ static int run(int argc, char *argv[]) {
if (r < 0)
return log_error_errno(r, "Could not enumerate addresses: %m");
r = manager_rtnl_enumerate_neighbors(m);
if (r < 0)
return log_error_errno(r, "Could not enumerate neighbors: %m");
r = manager_rtnl_enumerate_routes(m);
if (r < 0)
return log_error_errno(r, "Could not enumerate routes: %m");

View File

@ -41,7 +41,7 @@ int main(int argc, char **argv) {
test_table_sparse(ipvlan_mode, NETDEV_IPVLAN_MODE);
test_table_sparse(macvlan_mode, NETDEV_MACVLAN_MODE);
test_table_sparse(address_family_boolean, ADDRESS_FAMILY_BOOLEAN);
test_table_sparse(address_family, ADDRESS_FAMILY);
return EXIT_SUCCESS;
}

View File

@ -240,7 +240,7 @@ static void test_config_parse_match_strv(void) {
"!baz",
"KEY=val",
"KEY2=val with space",
"KEY3=val with \"quotation\"")));
"KEY3=val with \\quotation\\")));
}
int main(int argc, char **argv) {

View File

@ -62,31 +62,31 @@ int main(int argc, char **argv) {
test_setup_logging(LOG_DEBUG);
test_rule_serialization("basic parsing",
"RULE=from=1.2.3.4/32 to=2.3.4.5/32 tos=5 fwmark=1/2 table=10", NULL);
"RULE=from=1.2.3.4/32 to=2.3.4.5/32 family=AF_INET tos=5 priority=0 fwmark=1/2 table=10", NULL);
test_rule_serialization("ignored values",
"RULE=something=to=ignore from=1.2.3.4/32 from=1.2.3.4/32"
" \t to=2.3.4.5/24 to=2.3.4.5/32 tos=5 fwmark=2 fwmark=1 table=10 table=20",
"RULE=from=1.2.3.4/32"
" to=2.3.4.5/32 tos=5 fwmark=1/0 table=20");
" to=2.3.4.5/32 family=AF_INET tos=5 priority=0 fwmark=1/0 table=20");
test_rule_serialization("ipv6",
"RULE=from=1::2/64 to=2::3/64 table=6", NULL);
"RULE=from=1::2/64 to=2::3/64 family=AF_INET6 priority=0 table=6", NULL);
assert_se(asprintf(&p, "RULE=from=1::2/64 to=2::3/64 table=%d", RT_TABLE_MAIN) >= 0);
assert_se(asprintf(&p, "RULE=from=1::2/64 to=2::3/64 family=AF_INET6 priority=0 table=%d", RT_TABLE_MAIN) >= 0);
test_rule_serialization("default table",
"RULE=from=1::2/64 to=2::3/64", p);
test_rule_serialization("incoming interface",
"RULE=from=1::2/64 to=2::3/64 table=1 iif=lo",
"RULE=from=1::2/64 to=2::3/64 iif=lo table=1");
"RULE=from=1::2/64 to=2::3/64 family=AF_INET6 priority=0 iif=lo table=1");
test_rule_serialization("outgoing interface",
"RULE=from=1::2/64 to=2::3/64 oif=eth0 table=1", NULL);
"RULE=from=1::2/64 to=2::3/64 family=AF_INET6 priority=0 oif=eth0 table=1", NULL);
test_rule_serialization("freeing interface names",
"RULE=from=1::2/64 to=2::3/64 iif=e0 iif=e1 oif=e0 oif=e1 table=1",
"RULE=from=1::2/64 to=2::3/64 iif=e1 oif=e1 table=1");
"RULE=from=1::2/64 to=2::3/64 family=AF_INET6 iif=e0 iif=e1 oif=e0 oif=e1 table=1",
"RULE=from=1::2/64 to=2::3/64 family=AF_INET6 priority=0 iif=e1 oif=e1 table=1");
return 0;
}

View File

@ -760,7 +760,7 @@ int config_parse_strv(
for (;;) {
char *word = NULL;
r = extract_first_word(&rvalue, &word, NULL, EXTRACT_UNQUOTE);
r = extract_first_word(&rvalue, &word, NULL, EXTRACT_UNQUOTE|EXTRACT_RETAIN_ESCAPE);
if (r == 0)
break;
if (r == -ENOMEM)

Some files were not shown because too many files have changed in this diff Show More