mirror of
https://git.proxmox.com/git/systemd
synced 2025-06-05 07:03:31 +00:00
New upstream version 243~rc2
This commit is contained in:
parent
f2dec8725c
commit
c5fca32e78
59
NEWS
59
NEWS
@ -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
|
||||
|
||||
|
@ -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>
|
||||
[](https://semaphoreci.com/systemd/systemd)<br/>
|
||||
[](https://scan.coverity.com/projects/350)<br/>
|
||||
[](https://app.fuzzit.dev/admin/RxqRpGNXquIvqrmp4iJS/dashboard)<br/>
|
||||
[](https://app.fuzzit.dev/orgs/systemd/dashboard)<br/>
|
||||
[](https://oss-fuzz-build-logs.storage.googleapis.com/index.html)<br/>
|
||||
[](https://bestpractices.coreinfrastructure.org/projects/1369)<br/>
|
||||
[](https://travis-ci.org/systemd/systemd)<br/>
|
||||
[](https://lgtm.com/projects/g/systemd/systemd/context:cpp)<br/>
|
||||
|
12
TODO
12
TODO
@ -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
|
||||
|
@ -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
|
||||
|
731
hwdb/20-OUI.hwdb
731
hwdb/20-OUI.hwdb
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
#########################################
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
10355
hwdb/ma-medium.txt
10355
hwdb/ma-medium.txt
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
150
hwdb/pci.ids
150
hwdb/pci.ids
@ -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
|
||||
|
11
hwdb/usb.ids
11
hwdb/usb.ids
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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
112
po/pl.po
@ -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
128
po/uk.po
@ -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)»."
|
||||
|
@ -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"
|
||||
|
||||
|
@ -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"
|
||||
|
@ -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"
|
||||
|
@ -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)' \
|
||||
|
@ -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'
|
@ -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'],
|
||||
]
|
||||
|
@ -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++)
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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_
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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__
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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,
|
||||
|
@ -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),
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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(
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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";
|
||||
}
|
||||
|
||||
|
@ -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')))
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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) {
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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' },
|
||||
{},
|
||||
};
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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:
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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");
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
Loading…
Reference in New Issue
Block a user