diff --git a/.gitignore b/.gitignore
index 10622d4df..9ff6da28d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -73,7 +73,6 @@
/systemd-debug-generator
/systemd-delta
/systemd-detect-virt
-/systemd-efi-boot-generator
/systemd-escape
/systemd-export
/systemd-firstboot
diff --git a/Makefile-man.am b/Makefile-man.am
index 218a299e9..c0cebaab6 100644
--- a/Makefile-man.am
+++ b/Makefile-man.am
@@ -91,7 +91,6 @@ MANPAGES += \
man/systemd-debug-generator.8 \
man/systemd-delta.1 \
man/systemd-detect-virt.1 \
- man/systemd-efi-boot-generator.8 \
man/systemd-escape.1 \
man/systemd-fsck@.service.8 \
man/systemd-fstab-generator.8 \
@@ -2304,7 +2303,6 @@ EXTRA_DIST += \
man/systemd-debug-generator.xml \
man/systemd-delta.xml \
man/systemd-detect-virt.xml \
- man/systemd-efi-boot-generator.xml \
man/systemd-escape.xml \
man/systemd-firstboot.xml \
man/systemd-fsck@.service.xml \
diff --git a/Makefile.am b/Makefile.am
index ce2e19b3f..ef8cc4a91 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -43,7 +43,7 @@ LIBUDEV_REVISION=4
LIBUDEV_AGE=6
LIBSYSTEMD_CURRENT=10
-LIBSYSTEMD_REVISION=0
+LIBSYSTEMD_REVISION=1
LIBSYSTEMD_AGE=10
# The following four libraries only exist for compatibility reasons,
@@ -2426,16 +2426,6 @@ EXTRA_DIST += \
# ------------------------------------------------------------------------------
if ENABLE_EFI
-systemgenerator_PROGRAMS += \
- systemd-efi-boot-generator
-
-systemd_efi_boot_generator_SOURCES = \
- src/efi-boot-generator/efi-boot-generator.c
-
-systemd_efi_boot_generator_LDADD = \
- libshared.la
-
-# ------------------------------------------------------------------------------
if HAVE_BLKID
bootctl_SOURCES = \
src/boot/bootctl.c
@@ -2529,13 +2519,15 @@ systemd_boot_headers = \
src/boot/efi/util.h \
src/boot/efi/console.h \
src/boot/efi/graphics.h \
- src/boot/efi/pefile.h
+ src/boot/efi/pefile.h \
+ src/boot/efi/disk.h
systemd_boot_sources = \
src/boot/efi/util.c \
src/boot/efi/console.c \
src/boot/efi/graphics.c \
src/boot/efi/pefile.c \
+ src/boot/efi/disk.c \
src/boot/efi/boot.c
EXTRA_DIST += $(systemd_boot_sources) $(systemd_boot_headers)
@@ -2568,6 +2560,7 @@ endif
stub_headers = \
src/boot/efi/util.h \
src/boot/efi/pefile.h \
+ src/boot/efi/disk.h \
src/boot/efi/graphics.h \
src/boot/efi/splash.h \
src/boot/efi/linux.h
@@ -2575,6 +2568,7 @@ stub_headers = \
stub_sources = \
src/boot/efi/util.c \
src/boot/efi/pefile.c \
+ src/boot/efi/disk.c \
src/boot/efi/graphics.c \
src/boot/efi/splash.c \
src/boot/efi/linux.c \
@@ -6024,12 +6018,12 @@ git-tag:
.PHONY: git-tar
git-tar:
- git archive --format=tar --prefix=systemd-$(VERSION)/ HEAD | xz > systemd-$(VERSION).tar.xz
+ git archive --format=tar --prefix=systemd-$(VERSION)/ HEAD | gzip > systemd-$(VERSION).tar.gz
www_target = www.freedesktop.org:/srv/www.freedesktop.org/www/software/systemd
.PHONY: doc-sync
-doc-sync: all destdir-sphinx
+doc-sync: all
rsync -rlv --delete-excluded --include="*.html" --exclude="*" --omit-dir-times man/ $(www_target)/man/
.PHONY: gardel
diff --git a/NEWS b/NEWS
index 9fc6cc6e0..97dd000d4 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,20 @@
systemd System and Service Manager
+CHANGES WITH 224:
+
+ * The systemd-efi-boot-generator functionality was merged into
+ systemd-gpt-auto-generator.
+
+ * systemd-networkd now supports Group Policy for vxlan devices. It can
+ be enabled via the new boolean configuration option called
+ 'GroupPolicyExtension='.
+
+ Contributions from: Andreas Kempf, Christian Hesse, Daniel Mack, David
+ Herrmann, Herman Fries, Johannes Nixdorf, Kay Sievers, Lennart
+ Poettering, Peter Hutterer, Susant Sahani, Tom Gundersen
+
+ -- Berlin, 2015-07-31
+
CHANGES WITH 223:
* The python-systemd code has been removed from the systemd repository.
@@ -53,16 +68,17 @@ CHANGES WITH 223:
mapped as 'vg-foo-TGID'.
Contributions from: Beniamino Galvani, cee1, Christian Hesse, Daniel
- Buch, Daniel Mack, daurnimator, David Herrmann, Dimitri John Ledkov, Jan
- Alexander Steffens (heftig), Johan Ouwerkerk, Jose Carlos Venegas Munoz,
- Kay Sievers, Lennart Poettering, Lidong Zhong, Martin Pitt, Michael
- Biebl, Michael Olbrich, Michal Schmidt, Mike Gilbert, Namhyung Kim, Nick
- Owens, Peter Hutterer, Richard Maw, Steven Allen, Sungbae Yoo, Susant
- Sahani, Thomas Blume, Thomas Hindoe Paaboel Andersen, Tom Gundersen,
- Umut Tezduyar Lindskog, Vito Caputo, Vivenzio Pagliari, Zbigniew
- Jędrzejewski-Szmek
+ Buch, Daniel Mack, daurnimator, David Herrmann, Dimitri John Ledkov,
+ HATAYAMA Daisuke, Ivan Shapovalov, Jan Alexander Steffens (heftig),
+ Johan Ouwerkerk, Jose Carlos Venegas Munoz, Karel Zak, Kay Sievers,
+ Lennart Poettering, Lidong Zhong, Martin Pitt, Michael Biebl, Michael
+ Olbrich, Michal Schmidt, Michal Sekletar, Mike Gilbert, Namhyung Kim,
+ Nick Owens, Peter Hutterer, Richard Maw, Steven Allen, Sungbae Yoo,
+ Susant Sahani, Thomas Blume, Thomas Hindoe Paaboel Andersen, Tom
+ Gundersen, Torstein Husebø, Umut Tezduyar Lindskog, Vito Caputo,
+ Vivenzio Pagliari, Zbigniew Jędrzejewski-Szmek
- -- Berlin, 2015-XX-XX
+ -- Berlin, 2015-07-29
CHANGES WITH 222:
diff --git a/configure.ac b/configure.ac
index a16ca6396..f1ce9ff30 100644
--- a/configure.ac
+++ b/configure.ac
@@ -20,7 +20,7 @@
AC_PREREQ([2.64])
AC_INIT([systemd],
- [223],
+ [224],
[http://github.com/systemd/systemd/issues],
[systemd],
[http://www.freedesktop.org/wiki/Software/systemd])
@@ -1151,10 +1151,10 @@ AS_IF([test "x$enable_gnuefi" != "xno"], [
have_efi_lds=no
AC_ARG_WITH(efi-ldsdir,
AS_HELP_STRING([--with-efi-ldsdir=PATH], [Path to EFI lds directory]),
- [EFI_LDS_DIR="$withval" && AC_CHECK_FILE([${EFI_LDS_DIR}/elf_${EFI_ARCH}_efi.lds],
+ [EFI_LDS_DIR="$withval" && AS_IF([test -f "${EFI_LDS_DIR}/elf_${EFI_ARCH}_efi.lds"],
[have_efi_lds=yes])],
[AS_FOR([DIR], [EFI_LDS_DIR], ["${EFI_LIB_DIR}/gnuefi" "${EFI_LIB_DIR}"],
- [AC_CHECK_FILE([${EFI_LDS_DIR}/elf_${EFI_ARCH}_efi.lds],
+ [AS_IF([test -f "${EFI_LDS_DIR}/elf_${EFI_ARCH}_efi.lds"],
[have_efi_lds=yes && break])])])
AS_IF([test "x$have_efi_lds" = xyes],
[AC_SUBST([EFI_LDS_DIR])],
diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
index cbf70da88..eb34e3efc 100644
--- a/hwdb/20-OUI.hwdb
+++ b/hwdb/20-OUI.hwdb
@@ -23990,7 +23990,7 @@ OUI:000D96*
ID_OUI_FROM_DATABASE=Vtera Technology Inc.
OUI:000D97*
- ID_OUI_FROM_DATABASE=Tropos Networks, Inc.
+ ID_OUI_FROM_DATABASE=ABB Inc./Tropos
OUI:000D98*
ID_OUI_FROM_DATABASE=S.W.A.C. Schmitt-Walter Automation Consult GmbH
@@ -38138,7 +38138,7 @@ OUI:00200E*
ID_OUI_FROM_DATABASE=SATELLITE TECHNOLOGY MGMT, INC
OUI:00200F*
- ID_OUI_FROM_DATABASE=TANBAC CO., LTD.
+ ID_OUI_FROM_DATABASE=EBRAINS Inc
OUI:002010*
ID_OUI_FROM_DATABASE=JEOL SYSTEM TECHNOLOGY CO. LTD
@@ -40385,7 +40385,7 @@ OUI:0022FE*
ID_OUI_FROM_DATABASE=Advanced Illumination
OUI:0022FF*
- ID_OUI_FROM_DATABASE=iWDL Technologies
+ ID_OUI_FROM_DATABASE=NIVIS LLC
OUI:002300*
ID_OUI_FROM_DATABASE=Cayee Computer Ltd.
@@ -45856,6 +45856,9 @@ OUI:005218*
OUI:0054AF*
ID_OUI_FROM_DATABASE=Continental Automotive Systems Inc.
+OUI:0055DA*
+ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.
+
OUI:005907*
ID_OUI_FROM_DATABASE=LenovoEMC Products USA, LLC
@@ -46657,6 +46660,9 @@ OUI:006B9E*
OUI:006BA0*
ID_OUI_FROM_DATABASE=SHENZHEN UNIVERSAL INTELLISYS PTE LTD
+OUI:006D52*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:006DFB*
ID_OUI_FROM_DATABASE=Vutrix (UK) Ltd
@@ -51862,6 +51868,9 @@ OUI:045FA7*
OUI:046169*
ID_OUI_FROM_DATABASE=MEDIA GLOBAL LINKS CO., LTD.
+OUI:046273*
+ ID_OUI_FROM_DATABASE=Cisco Systems
+
OUI:0462D7*
ID_OUI_FROM_DATABASE=ALSTOM HYDRO FRANCE
@@ -51874,6 +51883,9 @@ OUI:046785*
OUI:0469F8*
ID_OUI_FROM_DATABASE=Apple
+OUI:046C9D*
+ ID_OUI_FROM_DATABASE=Cisco Systems
+
OUI:046D42*
ID_OUI_FROM_DATABASE=Bryston Ltd.
@@ -52534,6 +52546,9 @@ OUI:0808EA*
OUI:0809B6*
ID_OUI_FROM_DATABASE=Masimo Corp
+OUI:080A4E*
+ ID_OUI_FROM_DATABASE=Planet Bingo® — 3rd Rock Gaming®
+
OUI:080C0B*
ID_OUI_FROM_DATABASE=SysMik GmbH Dresden
@@ -52640,7 +52655,7 @@ OUI:084027*
ID_OUI_FROM_DATABASE=Gridstore Inc.
OUI:084656*
- ID_OUI_FROM_DATABASE=VODALYS Ingénierie
+ ID_OUI_FROM_DATABASE=VEO-LABS
OUI:08482C*
ID_OUI_FROM_DATABASE=Raycore Taiwan Co., LTD.
@@ -52735,6 +52750,9 @@ OUI:0881F4*
OUI:08863B*
ID_OUI_FROM_DATABASE=Belkin International, Inc.
+OUI:088C2C*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:088DC8*
ID_OUI_FROM_DATABASE=Ryowa Electronics Co.,Ltd
@@ -52927,6 +52945,9 @@ OUI:0C17F1*
OUI:0C191F*
ID_OUI_FROM_DATABASE=Inform Electronik
+OUI:0C1A10*
+ ID_OUI_FROM_DATABASE=Acoustic Stream
+
OUI:0C1DAF*
ID_OUI_FROM_DATABASE=Beijing Xiaomi communications co.,ltd
@@ -52996,6 +53017,9 @@ OUI:0C51F7*
OUI:0C54A5*
ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
+OUI:0C54B9*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent
+
OUI:0C5521*
ID_OUI_FROM_DATABASE=Axiros GmbH
@@ -53065,6 +53089,9 @@ OUI:0C84DC*
OUI:0C8525*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
+OUI:0C8610*
+ ID_OUI_FROM_DATABASE=Juniper networks
+
OUI:0C8910*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
@@ -54556,6 +54583,9 @@ OUI:1C5C60*
OUI:1C5FFF*
ID_OUI_FROM_DATABASE=Beijing Ereneben Information Technology Co.,Ltd Shenzhen Branch
+OUI:1C60DE*
+ ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+
OUI:1C62B8*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -55222,6 +55252,9 @@ OUI:242642*
OUI:242FFA*
ID_OUI_FROM_DATABASE=Toshiba Global Commerce Solutions
+OUI:243184*
+ ID_OUI_FROM_DATABASE=SHARP Corporation
+
OUI:24374C*
ID_OUI_FROM_DATABASE=Cisco SPVTG
@@ -55426,6 +55459,9 @@ OUI:24D2CC*
OUI:24D921*
ID_OUI_FROM_DATABASE=Avaya, Inc
+OUI:24DA9B*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
OUI:24DAB6*
ID_OUI_FROM_DATABASE=Sistemas de Gestión Energética S.A. de C.V
@@ -55501,6 +55537,9 @@ OUI:280CB8*
OUI:280DFC*
ID_OUI_FROM_DATABASE=Sony Computer Entertainment Inc.
+OUI:280E8B*
+ ID_OUI_FROM_DATABASE=Beijing Spirit Technology Development Co., Ltd.
+
OUI:28107B*
ID_OUI_FROM_DATABASE=D-Link International
@@ -55906,6 +55945,9 @@ OUI:2C1984*
OUI:2C1A31*
ID_OUI_FROM_DATABASE=Electronics Company Limited
+OUI:2C1BC8*
+ ID_OUI_FROM_DATABASE=Hunan Topview Network System CO.,LTD
+
OUI:2C1EEA*
ID_OUI_FROM_DATABASE=AERODEV
@@ -56020,6 +56062,9 @@ OUI:2C5A05*
OUI:2C5AA3*
ID_OUI_FROM_DATABASE=PROMATE ELECTRONIC CO.LTD
+OUI:2C5BB8*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD.
+
OUI:2C5BE1*
ID_OUI_FROM_DATABASE=Centripetal Networks, Inc
@@ -56134,6 +56179,9 @@ OUI:2CABA4*
OUI:2CAD13*
ID_OUI_FROM_DATABASE=SHENZHEN ZHILU TECHNOLOGY CO.,LTD
+OUI:2CAE2B*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:2CB05D*
ID_OUI_FROM_DATABASE=NETGEAR
@@ -56368,6 +56416,9 @@ OUI:30595B*
OUI:3059B7*
ID_OUI_FROM_DATABASE=Microsoft
+OUI:305A3A*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
OUI:305D38*
ID_OUI_FROM_DATABASE=Beissbarth
@@ -56657,7 +56708,7 @@ OUI:3438AF*
ID_OUI_FROM_DATABASE=Inlab Software GmbH
OUI:343D98*
- ID_OUI_FROM_DATABASE=Fujian JinQianMao Electronic Technology Co.,Ltd.
+ ID_OUI_FROM_DATABASE=JinQianMao Technology Co.,Ltd.
OUI:3440B5*
ID_OUI_FROM_DATABASE=IBM
@@ -57052,6 +57103,12 @@ OUI:381C23*
OUI:381C4A*
ID_OUI_FROM_DATABASE=SIMCom Wireless Solutions Co.,Ltd.
+OUI:382056*
+ ID_OUI_FROM_DATABASE=Cisco Systems
+
+OUI:382187*
+ ID_OUI_FROM_DATABASE=Midea Group Co., Ltd.
+
OUI:38229D*
ID_OUI_FROM_DATABASE=Pirelli Tyre S.p.A.
@@ -57178,6 +57235,9 @@ OUI:388AB7*
OUI:388EE7*
ID_OUI_FROM_DATABASE=Fanhattan LLC
+OUI:3891D5*
+ ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+
OUI:3891FB*
ID_OUI_FROM_DATABASE=Xenox Holding BV
@@ -57310,6 +57370,9 @@ OUI:38F098*
OUI:38F33F*
ID_OUI_FROM_DATABASE=TATSUNO CORPORATION
+OUI:38F557*
+ ID_OUI_FROM_DATABASE=JOLATA, INC.
+
OUI:38F597*
ID_OUI_FROM_DATABASE=home2net GmbH
@@ -57328,6 +57391,9 @@ OUI:38FACA*
OUI:38FEC5*
ID_OUI_FROM_DATABASE=Ellips B.V.
+OUI:38FF36*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
OUI:3C02B1*
ID_OUI_FROM_DATABASE=Creation Technologies LP
@@ -57565,6 +57631,9 @@ OUI:3C8BFE*
OUI:3C8C40*
ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
+OUI:3C8CF8*
+ ID_OUI_FROM_DATABASE=TRENDnet, Inc.
+
OUI:3C912B*
ID_OUI_FROM_DATABASE=Vexata Inc
@@ -57628,12 +57697,18 @@ OUI:3CB15B*
OUI:3CB17F*
ID_OUI_FROM_DATABASE=Wattwatchers Pty Ld
+OUI:3CB72B*
+ ID_OUI_FROM_DATABASE=PLUMgrid Inc
+
OUI:3CB792*
ID_OUI_FROM_DATABASE=Hitachi Maxell, Ltd., Optronics Division
OUI:3CB9A6*
ID_OUI_FROM_DATABASE=Belden Deutschland GmbH
+OUI:3CBBFD*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:3CBDD8*
ID_OUI_FROM_DATABASE=LG ELECTRONICS INC
@@ -57865,6 +57940,9 @@ OUI:40516C*
OUI:40520D*
ID_OUI_FROM_DATABASE=Pico Technology
+OUI:4054E4*
+ ID_OUI_FROM_DATABASE=Wearsafe Labs Inc
+
OUI:405539*
ID_OUI_FROM_DATABASE=CISCO SYSTEMS, INC.
@@ -57946,6 +58024,9 @@ OUI:4083DE*
OUI:408493*
ID_OUI_FROM_DATABASE=Clavister AB
+OUI:40862E*
+ ID_OUI_FROM_DATABASE=JDM MOBILE INTERNET SOLUTION CO., LTD.
+
OUI:4088E0*
ID_OUI_FROM_DATABASE=Beijing Ereneben Information Technology Limited Shenzhen Branch
@@ -58663,6 +58744,9 @@ OUI:489153*
OUI:4891F6*
ID_OUI_FROM_DATABASE=Shenzhen Reach software technology CO.,LTD
+OUI:489A42*
+ ID_OUI_FROM_DATABASE=Technomate Ltd
+
OUI:489BE2*
ID_OUI_FROM_DATABASE=SCI Innovations Ltd
@@ -58708,6 +58792,9 @@ OUI:48B9C2*
OUI:48BE2D*
ID_OUI_FROM_DATABASE=Symanitron
+OUI:48BF74*
+ ID_OUI_FROM_DATABASE=Baicells Technologies Co.,LTD
+
OUI:48C093*
ID_OUI_FROM_DATABASE=Xirrus, Inc.
@@ -58970,7 +59057,7 @@ OUI:4C73A5*
ID_OUI_FROM_DATABASE=KOVE
OUI:4C7403*
- ID_OUI_FROM_DATABASE=Mundo Reader (bq)
+ ID_OUI_FROM_DATABASE=BQ
OUI:4C7625*
ID_OUI_FROM_DATABASE=Dell Inc.
@@ -59452,6 +59539,9 @@ OUI:50C58D*
OUI:50C7BF*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+OUI:50C8E5*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:50C971*
ID_OUI_FROM_DATABASE=GN Netcom A/S
@@ -59461,6 +59551,9 @@ OUI:50C9A0*
OUI:50CCF8*
ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
+OUI:50CD22*
+ ID_OUI_FROM_DATABASE=Avaya, Inc
+
OUI:50CD32*
ID_OUI_FROM_DATABASE=NanJing Chaoran Science & Technology Co.,Ltd.
@@ -59632,6 +59725,9 @@ OUI:544A05*
OUI:544A16*
ID_OUI_FROM_DATABASE=Texas Instruments
+OUI:544B8C*
+ ID_OUI_FROM_DATABASE=juniper networks
+
OUI:544E90*
ID_OUI_FROM_DATABASE=Apple
@@ -59764,6 +59860,9 @@ OUI:54A619*
OUI:54A9D4*
ID_OUI_FROM_DATABASE=Minibar Systems
+OUI:54AB3A*
+ ID_OUI_FROM_DATABASE=QUANTA COMPUTER INC.
+
OUI:54AE27*
ID_OUI_FROM_DATABASE=Apple
@@ -59932,6 +60031,9 @@ OUI:58238C*
OUI:582AF7*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+OUI:582BDB*
+ ID_OUI_FROM_DATABASE=Pax AB
+
OUI:582EFE*
ID_OUI_FROM_DATABASE=Lighting Science Group
@@ -59953,6 +60055,9 @@ OUI:583F54*
OUI:5842E4*
ID_OUI_FROM_DATABASE=Sigma International General Medical Apparatus, LLC.
+OUI:584498*
+ ID_OUI_FROM_DATABASE=XIAOMI INC
+
OUI:58468F*
ID_OUI_FROM_DATABASE=Koncar Electronics and Informatics
@@ -60022,6 +60127,9 @@ OUI:58671A*
OUI:58677F*
ID_OUI_FROM_DATABASE=Clare Controls Inc.
+OUI:58685D*
+ ID_OUI_FROM_DATABASE=Tempo Australia Pty Ltd
+
OUI:58696C*
ID_OUI_FROM_DATABASE=Fujian Ruijie Networks co, ltd
@@ -60055,6 +60163,9 @@ OUI:587BE9*
OUI:587E61*
ID_OUI_FROM_DATABASE=Hisense Electric Co., Ltd
+OUI:587F57*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:587F66*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
@@ -60208,6 +60319,9 @@ OUI:58F387*
OUI:58F39C*
ID_OUI_FROM_DATABASE=Cisco
+OUI:58F496*
+ ID_OUI_FROM_DATABASE=Source Chain
+
OUI:58F67B*
ID_OUI_FROM_DATABASE=Xia Men UnionCore Technology LTD.
@@ -60217,6 +60331,9 @@ OUI:58F6BF*
OUI:58F98E*
ID_OUI_FROM_DATABASE=SECUDOS GmbH
+OUI:58FC73*
+ ID_OUI_FROM_DATABASE=Arria Live Media, Inc.
+
OUI:58FCDB*
ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.
@@ -60331,6 +60448,9 @@ OUI:5C43D2*
OUI:5C4527*
ID_OUI_FROM_DATABASE=Juniper Networks
+OUI:5C4979*
+ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+
OUI:5C4A26*
ID_OUI_FROM_DATABASE=Enguity Technology Corp
@@ -60454,6 +60574,9 @@ OUI:5CAAFD*
OUI:5CAC4C*
ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
+OUI:5CADCF*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:5CB395*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -61049,7 +61172,7 @@ OUI:6416F0*
ID_OUI_FROM_DATABASE=Shehzhen Huawei Communication Technologies Co., Ltd.
OUI:641A22*
- ID_OUI_FROM_DATABASE=Heliospectra/Woodhill Investments
+ ID_OUI_FROM_DATABASE=Heliospectra AB
OUI:641C67*
ID_OUI_FROM_DATABASE=DIGIBRAS INDUSTRIA DO BRASILS/A
@@ -61684,6 +61807,9 @@ OUI:68A3C4*
OUI:68A40E*
ID_OUI_FROM_DATABASE=BSH Bosch and Siemens Home Appliances GmbH
+OUI:68A828*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:68A86D*
ID_OUI_FROM_DATABASE=Apple
@@ -62008,6 +62134,9 @@ OUI:6C90B1*
OUI:6C92BF*
ID_OUI_FROM_DATABASE=Inspur Electronic Information Industry Co.,Ltd.
+OUI:6C9354*
+ ID_OUI_FROM_DATABASE=Yaojin Technology (Shenzhen) Co., LTD.
+
OUI:6C94F8*
ID_OUI_FROM_DATABASE=Apple
@@ -62290,6 +62419,9 @@ OUI:7041B7*
OUI:704642*
ID_OUI_FROM_DATABASE=CHYNG HONG ELECTRONIC CO., LTD.
+OUI:70480F*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:704AAE*
ID_OUI_FROM_DATABASE=Xstream Flow (Pty) Ltd
@@ -62614,6 +62746,9 @@ OUI:741489*
OUI:7415E2*
ID_OUI_FROM_DATABASE=Tri-Sen Systems Corporation
+OUI:741865*
+ ID_OUI_FROM_DATABASE=Shanghai DareGlobal Technologies Co.,Ltd
+
OUI:7419F8*
ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.
@@ -62719,6 +62854,9 @@ OUI:7465D1*
OUI:746630*
ID_OUI_FROM_DATABASE=T:mi Ytti
+OUI:7467F7*
+ ID_OUI_FROM_DATABASE=Zebra Technologoes
+
OUI:746A3A*
ID_OUI_FROM_DATABASE=Aperi Corporation
@@ -62731,6 +62869,9 @@ OUI:746A8F*
OUI:746B82*
ID_OUI_FROM_DATABASE=MOVEK
+OUI:746F19*
+ ID_OUI_FROM_DATABASE=ICARVISIONS (SHENZHEN) TECHNOLOGY CO., LTD.
+
OUI:746F3D*
ID_OUI_FROM_DATABASE=Contec GmbH
@@ -62846,7 +62987,7 @@ OUI:74B00C*
ID_OUI_FROM_DATABASE=Network Video Technologies, Inc
OUI:74B9EB*
- ID_OUI_FROM_DATABASE=Fujian JinQianMao Electronic Technology Co.,Ltd
+ ID_OUI_FROM_DATABASE=JinQianMao Technology Co.,Ltd.
OUI:74BADB*
ID_OUI_FROM_DATABASE=Longconn Electornics(shenzhen)Co.,Ltd
@@ -63343,6 +63484,9 @@ OUI:78D5B5*
OUI:78D66F*
ID_OUI_FROM_DATABASE=Aristocrat Technologies Australia Pty. Ltd.
+OUI:78D6B2*
+ ID_OUI_FROM_DATABASE=Toshiba
+
OUI:78D6F0*
ID_OUI_FROM_DATABASE=Samsung Electro Mechanics
@@ -63433,6 +63577,9 @@ OUI:78FF57*
OUI:7C0187*
ID_OUI_FROM_DATABASE=Curtis Instruments, Inc.
+OUI:7C0191*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:7C02BC*
ID_OUI_FROM_DATABASE=Hansung Electronics Co. LTD
@@ -63616,6 +63763,9 @@ OUI:7C6FF8*
OUI:7C70BC*
ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.
+OUI:7C7176*
+ ID_OUI_FROM_DATABASE=Wuxi iData Technology Company Ltd.
+
OUI:7C72E4*
ID_OUI_FROM_DATABASE=Unikey Technologies
@@ -64138,6 +64288,9 @@ OUI:80B32A*
OUI:80B686*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+OUI:80B709*
+ ID_OUI_FROM_DATABASE=Viptela, Inc
+
OUI:80B95C*
ID_OUI_FROM_DATABASE=ELFTECH Co., Ltd.
@@ -64192,6 +64345,9 @@ OUI:80D21D*
OUI:80D433*
ID_OUI_FROM_DATABASE=LzLabs GmbH
+OUI:80D605*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:80D733*
ID_OUI_FROM_DATABASE=QSR Automations, Inc.
@@ -64261,6 +64417,9 @@ OUI:840B2D*
OUI:840F45*
ID_OUI_FROM_DATABASE=Shanghai GMT Digital Technologies Co., Ltd
+OUI:84100D*
+ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
+
OUI:84119E*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -64559,7 +64718,7 @@ OUI:84C7A9*
ID_OUI_FROM_DATABASE=C3PO S.A.
OUI:84C8B1*
- ID_OUI_FROM_DATABASE=Incognito Software Inc.
+ ID_OUI_FROM_DATABASE=Incognito Software Systems Inc.
OUI:84C9B2*
ID_OUI_FROM_DATABASE=D-Link International
@@ -64573,6 +64732,9 @@ OUI:84D32A*
OUI:84D4C8*
ID_OUI_FROM_DATABASE=Widex A/S
+OUI:84D6D0*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
OUI:84D9C8*
ID_OUI_FROM_DATABASE=Unipattern Co.,
@@ -64642,6 +64804,9 @@ OUI:880355*
OUI:880905*
ID_OUI_FROM_DATABASE=MTMCommunications
+OUI:8809AF*
+ ID_OUI_FROM_DATABASE=Masimo Corp.
+
OUI:880F10*
ID_OUI_FROM_DATABASE=Huami Information Technology Co.,Ltd.
@@ -65197,6 +65362,9 @@ OUI:8C9236*
OUI:8C94CF*
ID_OUI_FROM_DATABASE=Encell Technology, Inc.
+OUI:8C99E6*
+ ID_OUI_FROM_DATABASE=TCT Mobile Limited
+
OUI:8CA048*
ID_OUI_FROM_DATABASE=Beijing NeTopChip Technology Co.,LTD
@@ -65287,6 +65455,9 @@ OUI:8CDF9D*
OUI:8CE081*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:8CE2DA*
+ ID_OUI_FROM_DATABASE=Circle Media Inc
+
OUI:8CE78C*
ID_OUI_FROM_DATABASE=DK Networks
@@ -65575,6 +65746,9 @@ OUI:908D1D*
OUI:908D6C*
ID_OUI_FROM_DATABASE=Apple
+OUI:908D78*
+ ID_OUI_FROM_DATABASE=D-Link International
+
OUI:908FCF*
ID_OUI_FROM_DATABASE=UNO System Co., Ltd
@@ -65659,6 +65833,9 @@ OUI:90C682*
OUI:90C792*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:90C99B*
+ ID_OUI_FROM_DATABASE=Recore Systems
+
OUI:90CC24*
ID_OUI_FROM_DATABASE=Synaptics, Inc
@@ -65965,6 +66142,9 @@ OUI:94AE61*
OUI:94AEE3*
ID_OUI_FROM_DATABASE=Belden Hirschmann Industries (Suzhou) Ltd.
+OUI:94B10A*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:94B40F*
ID_OUI_FROM_DATABASE=Aruba Networks
@@ -66298,6 +66478,9 @@ OUI:988389*
OUI:9886B1*
ID_OUI_FROM_DATABASE=Flyaudio corporation (China)
+OUI:988744*
+ ID_OUI_FROM_DATABASE=Wuxi Hongda Science and Technology Co.,LTD
+
OUI:9889ED*
ID_OUI_FROM_DATABASE=Anadem Information Inc.
@@ -66391,6 +66574,9 @@ OUI:98E165*
OUI:98E79A*
ID_OUI_FROM_DATABASE=Foxconn(NanJing) Communication Co.,Ltd.
+OUI:98E848*
+ ID_OUI_FROM_DATABASE=Axiim
+
OUI:98EC65*
ID_OUI_FROM_DATABASE=Cosesy ApS
@@ -66901,6 +67087,9 @@ OUI:A03A75*
OUI:A03B1B*
ID_OUI_FROM_DATABASE=Inspire Tech
+OUI:A03E6B*
+ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.
+
OUI:A04025*
ID_OUI_FROM_DATABASE=Actioncable, Inc.
@@ -67219,6 +67408,9 @@ OUI:A0F849*
OUI:A0F895*
ID_OUI_FROM_DATABASE=Tinno Mobile Technology Corp
+OUI:A0F9E0*
+ ID_OUI_FROM_DATABASE=VIVATEL COMPANY LIMITED
+
OUI:A0FC6E*
ID_OUI_FROM_DATABASE=Telegrafia a.s.
@@ -67420,6 +67612,9 @@ OUI:A47E39*
OUI:A481EE*
ID_OUI_FROM_DATABASE=Nokia Corporation
+OUI:A48431*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:A4856B*
ID_OUI_FROM_DATABASE=Q Electronics Ltd
@@ -67507,6 +67702,9 @@ OUI:A4B2A7*
OUI:A4B36A*
ID_OUI_FROM_DATABASE=JSC SDO Chromatec
+OUI:A4B805*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:A4B818*
ID_OUI_FROM_DATABASE=PENTA Gesellschaft für elektronische Industriedatenverarbeitung mbH
@@ -67543,6 +67741,9 @@ OUI:A4C494*
OUI:A4C7DE*
ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd.
+OUI:A4CC32*
+ ID_OUI_FROM_DATABASE=Inficomm Co., Ltd
+
OUI:A4D094*
ID_OUI_FROM_DATABASE=Erwin Peters Systemtechnik GmbH
@@ -68479,6 +68680,9 @@ OUI:B05706*
OUI:B058C4*
ID_OUI_FROM_DATABASE=Broadcast Microwave Services, Inc
+OUI:B05ADA*
+ ID_OUI_FROM_DATABASE=Hewlett Packard
+
OUI:B05B1F*
ID_OUI_FROM_DATABASE=THERMO FISHER SCIENTIFIC S.P.A.
@@ -68941,6 +69145,9 @@ OUI:B4994C*
OUI:B499BA*
ID_OUI_FROM_DATABASE=Hewlett-Packard Company
+OUI:B49D0B*
+ ID_OUI_FROM_DATABASE=BQ
+
OUI:B49DB4*
ID_OUI_FROM_DATABASE=Axion Technologies Inc.
@@ -69094,6 +69301,9 @@ OUI:B8098A*
OUI:B80B9D*
ID_OUI_FROM_DATABASE=ROPEX Industrie-Elektronik GmbH
+OUI:B813E9*
+ ID_OUI_FROM_DATABASE=Trace Live Network
+
OUI:B81413*
ID_OUI_FROM_DATABASE=Keen High Holding(HK) Ltd.
@@ -69586,6 +69796,9 @@ OUI:BC305B*
OUI:BC307D*
ID_OUI_FROM_DATABASE=Wistron Neweb Corp.
+OUI:BC307E*
+ ID_OUI_FROM_DATABASE=Wistron Neweb Corp
+
OUI:BC3400*
ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.
@@ -69685,6 +69898,9 @@ OUI:BC6A2F*
OUI:BC6B4D*
ID_OUI_FROM_DATABASE=Alcatel-Lucent
+OUI:BC6C21*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:BC6E64*
ID_OUI_FROM_DATABASE=Sony Mobile Communications AB
@@ -69757,6 +69973,9 @@ OUI:BC9889*
OUI:BC99BC*
ID_OUI_FROM_DATABASE=FonSee Technology Inc.
+OUI:BC9C31*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:BC9CC5*
ID_OUI_FROM_DATABASE=Beijing Huafei Technology Co., Ltd.
@@ -69826,6 +70045,9 @@ OUI:BCCD45*
OUI:BCCFCC*
ID_OUI_FROM_DATABASE=HTC Corporation
+OUI:BCD11F*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:BCD165*
ID_OUI_FROM_DATABASE=Cisco SPVTG
@@ -70528,6 +70750,9 @@ OUI:C49805*
OUI:C49A02*
ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communicaitons)
+OUI:C49E41*
+ ID_OUI_FROM_DATABASE=G24 Power Limited
+
OUI:C49FF3*
ID_OUI_FROM_DATABASE=Mciao Technologies, Inc.
@@ -70540,6 +70765,9 @@ OUI:C4AAA1*
OUI:C4AD21*
ID_OUI_FROM_DATABASE=MEDIAEDGE Corporation
+OUI:C4ADF1*
+ ID_OUI_FROM_DATABASE=GOPEACE Inc.
+
OUI:C4B512*
ID_OUI_FROM_DATABASE=General Electric Digital Energy
@@ -70549,6 +70777,9 @@ OUI:C4BA99*
OUI:C4BAA3*
ID_OUI_FROM_DATABASE=Beijing Winicssec Technologies Co., Ltd.
+OUI:C4BBEA*
+ ID_OUI_FROM_DATABASE=Pakedge Device and Software Inc
+
OUI:C4BD6A*
ID_OUI_FROM_DATABASE=SKF GmbH
@@ -70618,6 +70849,9 @@ OUI:C4EEAE*
OUI:C4EEF5*
ID_OUI_FROM_DATABASE=Oclaro, Inc.
+OUI:C4EF70*
+ ID_OUI_FROM_DATABASE=Home Skinovations
+
OUI:C4F464*
ID_OUI_FROM_DATABASE=Spica international
@@ -70759,6 +70993,9 @@ OUI:C86000*
OUI:C864C7*
ID_OUI_FROM_DATABASE=zte corporation
+OUI:C869CD*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:C86C1E*
ID_OUI_FROM_DATABASE=Display Systems Ltd
@@ -70804,6 +71041,9 @@ OUI:C88A83*
OUI:C88B47*
ID_OUI_FROM_DATABASE=Nolangroup S.P.A con Socio Unico
+OUI:C88ED1*
+ ID_OUI_FROM_DATABASE=IEEE REGISTRATION AUTHORITY - Please see MAM public listing for more information.
+
OUI:C8903E*
ID_OUI_FROM_DATABASE=Pakton Technologies
@@ -71062,6 +71302,9 @@ OUI:CC1AFA*
OUI:CC1EFF*
ID_OUI_FROM_DATABASE=Metrological Group BV
+OUI:CC20E8*
+ ID_OUI_FROM_DATABASE=Apple
+
OUI:CC2218*
ID_OUI_FROM_DATABASE=InnoDigital Co., Ltd.
@@ -71419,6 +71662,9 @@ OUI:D00EA4*
OUI:D00ED9*
ID_OUI_FROM_DATABASE=TAICANG T AND W ELECTRONICS CO LTD
+OUI:D00F6D*
+ ID_OUI_FROM_DATABASE=T&W Electronics Company
+
OUI:D01242*
ID_OUI_FROM_DATABASE=BIOS Corporation
@@ -71482,6 +71728,9 @@ OUI:D03972*
OUI:D039B3*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:D03E5C*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:D0431E*
ID_OUI_FROM_DATABASE=Dell Inc.
@@ -71599,6 +71848,9 @@ OUI:D07650*
OUI:D07AB5*
ID_OUI_FROM_DATABASE=Huawei Technologies Co., Ltd
+OUI:D07C2D*
+ ID_OUI_FROM_DATABASE=Leie IOT technology Co., Ltd
+
OUI:D07DE5*
ID_OUI_FROM_DATABASE=Forward Pay Systems, Inc.
@@ -72004,6 +72256,9 @@ OUI:D46E5C*
OUI:D46F42*
ID_OUI_FROM_DATABASE=WAXESS USA Inc
+OUI:D47208*
+ ID_OUI_FROM_DATABASE=Bragi GmbH
+
OUI:D479C3*
ID_OUI_FROM_DATABASE=Cameronet GmbH & Co. KG
@@ -72427,6 +72682,9 @@ OUI:D888CE*
OUI:D88A3B*
ID_OUI_FROM_DATABASE=UNIT-EM
+OUI:D88B4C*
+ ID_OUI_FROM_DATABASE=KingTing Tech.
+
OUI:D88D5C*
ID_OUI_FROM_DATABASE=Elentec
@@ -72529,6 +72787,9 @@ OUI:D8C068*
OUI:D8C3FB*
ID_OUI_FROM_DATABASE=DETRACOM
+OUI:D8C4E9*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:D8C691*
ID_OUI_FROM_DATABASE=Hichan Technology Corp.
@@ -72787,12 +73048,18 @@ OUI:DC7FA4*
OUI:DC825B*
ID_OUI_FROM_DATABASE=JANUS, spol. s r.o.
+OUI:DC82F6*
+ ID_OUI_FROM_DATABASE=iPort
+
OUI:DC85DE*
ID_OUI_FROM_DATABASE=Azurewave Technologies., inc.
OUI:DC86D8*
ID_OUI_FROM_DATABASE=Apple, Inc
+OUI:DC9A8E*
+ ID_OUI_FROM_DATABASE=Nanjing Cocomm electronics co., LTD
+
OUI:DC9B1E*
ID_OUI_FROM_DATABASE=Intercom, Inc.
@@ -72868,6 +73135,9 @@ OUI:DCCE41*
OUI:DCCEBC*
ID_OUI_FROM_DATABASE=Shenzhen JSR Technology Co.,Ltd.
+OUI:DCCEC1*
+ ID_OUI_FROM_DATABASE=Cisco Systems
+
OUI:DCCF94*
ID_OUI_FROM_DATABASE=Beijing Rongcheng Hutong Technology Co., Ltd.
@@ -72892,6 +73162,9 @@ OUI:DCDA4F*
OUI:DCDB70*
ID_OUI_FROM_DATABASE=Tonfunk Systementwicklung und Service GmbH
+OUI:DCDC07*
+ ID_OUI_FROM_DATABASE=TRP Systems BV
+
OUI:DCDECA*
ID_OUI_FROM_DATABASE=Akyllor
@@ -72916,6 +73189,9 @@ OUI:DCEB94*
OUI:DCEC06*
ID_OUI_FROM_DATABASE=Heimi Network Technology Co., Ltd.
+OUI:DCEF09*
+ ID_OUI_FROM_DATABASE=Netgear
+
OUI:DCF05D*
ID_OUI_FROM_DATABASE=Letta Teknoloji
@@ -73018,6 +73294,9 @@ OUI:E031D0*
OUI:E03560*
ID_OUI_FROM_DATABASE=Challenger Supply Holdings, LLC
+OUI:E03676*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:E036E3*
ID_OUI_FROM_DATABASE=Stage One International Co., Ltd.
@@ -73396,6 +73675,9 @@ OUI:E432CB*
OUI:E43593*
ID_OUI_FROM_DATABASE=Hangzhou GoTo technology Co.Ltd
+OUI:E435C8*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:E435FB*
ID_OUI_FROM_DATABASE=Sabre Technology (Hull) Ltd
@@ -73441,6 +73723,9 @@ OUI:E45614*
OUI:E457A8*
ID_OUI_FROM_DATABASE=Stuart Manufacturing, Inc.
+OUI:E458B8*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:E458E7*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
@@ -73543,12 +73828,18 @@ OUI:E498D6*
OUI:E4A32F*
ID_OUI_FROM_DATABASE=Shanghai Artimen Technology Co., Ltd.
+OUI:E4A387*
+ ID_OUI_FROM_DATABASE=Control Solutions LLC
+
OUI:E4A5EF*
ID_OUI_FROM_DATABASE=TRON LINK ELECTRONICS CO., LTD.
OUI:E4A7FD*
ID_OUI_FROM_DATABASE=Cellco Partnership
+OUI:E4AA5D*
+ ID_OUI_FROM_DATABASE=Cisco Systems
+
OUI:E4AB46*
ID_OUI_FROM_DATABASE=UAB Selteka
@@ -73696,6 +73987,9 @@ OUI:E81132*
OUI:E81324*
ID_OUI_FROM_DATABASE=GuangZhou Bonsoninfo System CO.,LTD
+OUI:E81363*
+ ID_OUI_FROM_DATABASE=Comstock RD, Inc.
+
OUI:E8150E*
ID_OUI_FROM_DATABASE=Nokia Corporation
@@ -73981,6 +74275,9 @@ OUI:E8DAAA*
OUI:E8DE27*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+OUI:E8DED6*
+ ID_OUI_FROM_DATABASE=Intrising Networks, Inc.
+
OUI:E8DFF2*
ID_OUI_FROM_DATABASE=PRF Co., Ltd.
@@ -74119,6 +74416,9 @@ OUI:EC3091*
OUI:EC3586*
ID_OUI_FROM_DATABASE=Apple
+OUI:EC388F*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
OUI:EC3BF0*
ID_OUI_FROM_DATABASE=NovelSat
@@ -74188,6 +74488,9 @@ OUI:EC6264*
OUI:EC63E5*
ID_OUI_FROM_DATABASE=ePBoard Design LLC
+OUI:EC64E7*
+ ID_OUI_FROM_DATABASE=MOCACARE Corporation
+
OUI:EC66D1*
ID_OUI_FROM_DATABASE=B&W Group LTD
@@ -74287,6 +74590,9 @@ OUI:ECBBAE*
OUI:ECBD09*
ID_OUI_FROM_DATABASE=FUSION Electronics Ltd
+OUI:ECBD1D*
+ ID_OUI_FROM_DATABASE=Cisco Systems
+
OUI:ECC38A*
ID_OUI_FROM_DATABASE=Accuenergy (CANADA) Inc
@@ -74875,6 +75181,9 @@ OUI:F43E9D*
OUI:F44227*
ID_OUI_FROM_DATABASE=S & S Research Inc.
+OUI:F4428F*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
OUI:F44450*
ID_OUI_FROM_DATABASE=BND Co., Ltd.
@@ -74890,6 +75199,9 @@ OUI:F4472A*
OUI:F44848*
ID_OUI_FROM_DATABASE=Amscreen Group Ltd
+OUI:F44D30*
+ ID_OUI_FROM_DATABASE=Elitegroup Computer Systems Co.,Ltd.
+
OUI:F44E05*
ID_OUI_FROM_DATABASE=Cisco
@@ -75454,6 +75766,9 @@ OUI:F8C091*
OUI:F8C288*
ID_OUI_FROM_DATABASE=Cisco
+OUI:F8C372*
+ ID_OUI_FROM_DATABASE=TSUZUKI DENKI
+
OUI:F8C397*
ID_OUI_FROM_DATABASE=NZXT Corp. Ltd.
diff --git a/hwdb/20-pci-classes.hwdb b/hwdb/20-pci-classes.hwdb
index 5702c4011..3c0c465e5 100644
--- a/hwdb/20-pci-classes.hwdb
+++ b/hwdb/20-pci-classes.hwdb
@@ -95,6 +95,9 @@ pci:v*d*sv*sd*bc02sc06*
pci:v*d*sv*sd*bc02sc07*
ID_PCI_SUBCLASS_FROM_DATABASE=Infiniband controller
+pci:v*d*sv*sd*bc02sc08*
+ ID_PCI_SUBCLASS_FROM_DATABASE=Fabric controller
+
pci:v*d*sv*sd*bc02sc80*
ID_PCI_SUBCLASS_FROM_DATABASE=Network controller
@@ -554,5 +557,8 @@ pci:v*d*sv*sd*bc12sc00*
pci:v*d*sv*sd*bc13*
ID_PCI_CLASS_FROM_DATABASE=Non-Essential Instrumentation
+pci:v*d*sv*sd*bc40*
+ ID_PCI_CLASS_FROM_DATABASE=Coprocessor
+
pci:v*d*sv*sd*bcFF*
ID_PCI_CLASS_FROM_DATABASE=Unassigned class
diff --git a/hwdb/20-pci-vendor-model.hwdb b/hwdb/20-pci-vendor-model.hwdb
index 8316bc979..61164acfe 100644
--- a/hwdb/20-pci-vendor-model.hwdb
+++ b/hwdb/20-pci-vendor-model.hwdb
@@ -1847,6 +1847,9 @@ pci:v00001002d00004151*
pci:v00001002d00004151sv00001043sd0000C004*
ID_MODEL_FROM_DATABASE=RV350 [Radeon 9600 Series] (A9600SE)
+pci:v00001002d00004151sv0000174Bsd00007C37*
+ ID_MODEL_FROM_DATABASE=RV350 [Radeon 9600 Series] (Radeon 9600 SE)
+
pci:v00001002d00004152*
ID_MODEL_FROM_DATABASE=RV360 [Radeon 9600/X1050 Series]
@@ -1934,6 +1937,9 @@ pci:v00001002d00004171*
pci:v00001002d00004171sv00001043sd0000C005*
ID_MODEL_FROM_DATABASE=RV350 [Radeon 9600] (Secondary) (A9600SE (Secondary))
+pci:v00001002d00004171sv0000174Bsd00007C36*
+ ID_MODEL_FROM_DATABASE=RV350 [Radeon 9600] (Secondary) (Radeon 9600 SE (secondary))
+
pci:v00001002d00004172*
ID_MODEL_FROM_DATABASE=RV350 [Radeon 9600/X1050 Series] (Secondary)
@@ -3422,6 +3428,9 @@ pci:v00001002d00005159sv0000148Csd00002003*
pci:v00001002d00005159sv0000148Csd00002023*
ID_MODEL_FROM_DATABASE=RV100 [Radeon 7000 / Radeon VE] (RV100 QY [Radeon 7000 Evil Master Multi-Display])
+pci:v00001002d00005159sv0000148Csd00002081*
+ ID_MODEL_FROM_DATABASE=RV100 [Radeon 7000 / Radeon VE] (RV6DE)
+
pci:v00001002d00005159sv0000174Bsd00000280*
ID_MODEL_FROM_DATABASE=RV100 [Radeon 7000 / Radeon VE] (Radeon RV100 QY [Radeon 7000/VE])
@@ -17060,6 +17069,9 @@ pci:v00001077d00002020*
pci:v00001077d00002031*
ID_MODEL_FROM_DATABASE=ISP8324-based 16Gb Fibre Channel to PCI Express Adapter
+pci:v00001077d00002031sv0000103Csd00008002*
+ ID_MODEL_FROM_DATABASE=ISP8324-based 16Gb Fibre Channel to PCI Express Adapter (3830C 16G Fibre Channel Host Bus Adapter)
+
pci:v00001077d00002100*
ID_MODEL_FROM_DATABASE=QLA2100 64-bit Fibre Channel Adapter
@@ -21335,6 +21347,12 @@ pci:v000010B5d00009656sv00001885sd00000700*
pci:v000010B5d00009656sv00001885sd00000701*
ID_MODEL_FROM_DATABASE=PCI9656 PCI <-> IOBus Bridge (Tsunami FPGA PMC with Altera Stratix S30)
+pci:v000010B5d00009733*
+ ID_MODEL_FROM_DATABASE=PEX 9733 33-lane, 9-port PCI Express Gen 3 (8.0 GT/s) Switch
+
+pci:v000010B5d00009749*
+ ID_MODEL_FROM_DATABASE=PEX 9749 49-lane, 13-port PCI Express Gen 3 (8.0 GT/s) Switch
+
pci:v000010B5d0000A100*
ID_MODEL_FROM_DATABASE=Blackmagic Design DeckLink
@@ -22497,13 +22515,13 @@ pci:v000010CDd00001200*
ID_MODEL_FROM_DATABASE=ASC1200 [(abp940) Fast SCSI-II]
pci:v000010CDd00001300*
- ID_MODEL_FROM_DATABASE=ABP940-U / ABP960-U
+ ID_MODEL_FROM_DATABASE=ASC1300 / ASC3030 [ABP940-U / ABP960-U / ABP3925]
pci:v000010CDd00001300sv000010CDsd00001310*
- ID_MODEL_FROM_DATABASE=ABP940-U / ABP960-U (ASC1300 SCSI Adapter)
+ ID_MODEL_FROM_DATABASE=ASC1300 / ASC3030 [ABP940-U / ABP960-U / ABP3925] (ASC1300/3030 SCSI adapter)
pci:v000010CDd00001300sv00001195sd00001320*
- ID_MODEL_FROM_DATABASE=ABP940-U / ABP960-U (Ultra-SCSI CardBus PC Card REX CB31)
+ ID_MODEL_FROM_DATABASE=ASC1300 / ASC3030 [ABP940-U / ABP960-U / ABP3925] (Ultra-SCSI CardBus PC Card REX CB31)
pci:v000010CDd00002300*
ID_MODEL_FROM_DATABASE=ABP940-UW
@@ -26223,7 +26241,7 @@ pci:v000010DEd0000056Dsv00001019sd0000297A*
ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73PVT-SM)
pci:v000010DEd0000056Dsv000010DEsd0000CB73*
- ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCIe x1 port)
+ ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCI Bridge)
pci:v000010DEd0000056E*
ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge
@@ -26240,6 +26258,9 @@ pci:v000010DEd0000056F*
pci:v000010DEd0000056Fsv00001019sd0000297A*
ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73PVT-SM)
+pci:v000010DEd0000056Fsv000010DEsd00000000*
+ ID_MODEL_FROM_DATABASE=MCP73 PCI Express bridge (MCP73 PCIe x1 port)
+
pci:v000010DEd000005B1*
ID_MODEL_FROM_DATABASE=NF200 PCIe 2.0 switch
@@ -26531,6 +26552,9 @@ pci:v000010DEd00000643*
pci:v000010DEd00000644*
ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GS]
+pci:v000010DEd00000644sv0000174Bsd00009600*
+ ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GS] (Geforce 9500GS 512M DDR2 V/D/HDMI)
+
pci:v000010DEd00000645*
ID_MODEL_FROM_DATABASE=G96 [GeForce 9500 GS]
@@ -26708,6 +26732,9 @@ pci:v000010DEd000006DFsv000010DEsd0000087F*
pci:v000010DEd000006E0*
ID_MODEL_FROM_DATABASE=G98 [GeForce 9300 GE]
+pci:v000010DEd000006E0sv0000107Dsd00005A96*
+ ID_MODEL_FROM_DATABASE=G98 [GeForce 9300 GE] (Geforce 9300GE)
+
pci:v000010DEd000006E1*
ID_MODEL_FROM_DATABASE=G98 [GeForce 9300 GS]
@@ -30404,6 +30431,15 @@ pci:v000010DEd000013F2*
pci:v000010DEd00001401*
ID_MODEL_FROM_DATABASE=GM206 [GeForce GTX 960]
+pci:v000010DEd00001617*
+ ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 980M]
+
+pci:v000010DEd00001618*
+ ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 970M]
+
+pci:v000010DEd00001619*
+ ID_MODEL_FROM_DATABASE=GM204M [GeForce GTX 965M]
+
pci:v000010DEd000017C2*
ID_MODEL_FROM_DATABASE=GM200 [GeForce GTX TITAN X]
@@ -34367,6 +34403,12 @@ pci:v0000111Dd00008088sv00001093sd00007602*
pci:v0000111Dd0000808F*
ID_MODEL_FROM_DATABASE=PES32NT8AG2
+pci:v0000111Dd000080CF*
+ ID_MODEL_FROM_DATABASE=F32P08xG3 [PCIe boot mode]
+
+pci:v0000111Dd000080D2*
+ ID_MODEL_FROM_DATABASE=F32P08xG3 NVMe controller
+
pci:v0000111E*
ID_VENDOR_FROM_DATABASE=Eldec
@@ -40107,7 +40149,13 @@ pci:v00001244d00000A00sv00001244sd00000A00*
ID_MODEL_FROM_DATABASE=A1 ISDN [Fritz] (FRITZ!Card ISDN Controller)
pci:v00001244d00000E00*
- ID_MODEL_FROM_DATABASE=Fritz!PCI v2.0 ISDN
+ ID_MODEL_FROM_DATABASE=Fritz!Card PCI v2.0 ISDN
+
+pci:v00001244d00000E80*
+ ID_MODEL_FROM_DATABASE=Fritz!Card PCI v2.1 ISDN
+
+pci:v00001244d00000E80sv00001244sd00000E00*
+ ID_MODEL_FROM_DATABASE=Fritz!Card PCI v2.1 ISDN (PSB 3100F (AVM KAFKA) [Fritz!Card PCI v2.1])
pci:v00001244d00001100*
ID_MODEL_FROM_DATABASE=C2 ISDN
@@ -44895,7 +44943,7 @@ pci:v00001409d00007168sv00001409sd00004027*
ID_MODEL_FROM_DATABASE=PCI2S550 (Dual 16550 UART) (SER4027A (1x RS232 port))
pci:v00001409d00007168sv00001409sd00004037*
- ID_MODEL_FROM_DATABASE=PCI2S550 (Dual 16550 UART) (SER4037A (2x RS232 port))
+ ID_MODEL_FROM_DATABASE=PCI2S550 (Dual 16550 UART) (SER4037A(L) [SUNIX SUN1889] (2x RS232 port))
pci:v00001409d00007168sv00001409sd00004056*
ID_MODEL_FROM_DATABASE=PCI2S550 (Dual 16550 UART) (SER4056A (4x RS232))
@@ -48146,6 +48194,12 @@ pci:v000014E4d000016A2sv0000103Csd00001916*
pci:v000014E4d000016A2sv0000103Csd00001917*
ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II 10/20-Gigabit Ethernet (HP FlexFabric 20Gb 2-port 630M Adapter)
+pci:v000014E4d000016A2sv0000103Csd00002231*
+ ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II 10/20-Gigabit Ethernet (3820C 10/20Gb Converged Network Adapter)
+
+pci:v000014E4d000016A2sv0000103Csd000022FA*
+ ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II 10/20-Gigabit Ethernet (FlexFabric 10Gb 2-port 536FLB Adapter)
+
pci:v000014E4d000016A3*
ID_MODEL_FROM_DATABASE=NetXtreme BCM57786 Gigabit Ethernet PCIe
@@ -48158,6 +48212,12 @@ pci:v000014E4d000016A4sv0000103Csd00001916*
pci:v000014E4d000016A4sv0000103Csd00001917*
ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II Ethernet Multi Function (HP NPAR 20Gb 2-port 630M Adapter)
+pci:v000014E4d000016A4sv0000103Csd00002231*
+ ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II Ethernet Multi Function (3820C 10/20Gb Converged Network Adapter (NPAR 1.5))
+
+pci:v000014E4d000016A4sv0000103Csd000022FA*
+ ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II Ethernet Multi Function (FlexFabric 10Gb 2-port 536FLB Adapter (NPAR 1.5))
+
pci:v000014E4d000016A5*
ID_MODEL_FROM_DATABASE=NetXtreme II BCM57800 1/10 Gigabit Ethernet Multi Function
@@ -48287,6 +48347,12 @@ pci:v000014E4d000016ADsv0000103Csd00001916*
pci:v000014E4d000016ADsv0000103Csd00001917*
ID_MODEL_FROM_DATABASE=NetXtreme II BCM57840 10/20 Gigabit Ethernet Virtual Function (HP FlexFabric 20Gb 2-port 630M Adapter)
+pci:v000014E4d000016ADsv0000103Csd00002231*
+ ID_MODEL_FROM_DATABASE=NetXtreme II BCM57840 10/20 Gigabit Ethernet Virtual Function (3820C 10/20Gb Converged Network Adapter (SR-IOV VF))
+
+pci:v000014E4d000016ADsv0000103Csd000022FA*
+ ID_MODEL_FROM_DATABASE=NetXtreme II BCM57840 10/20 Gigabit Ethernet Virtual Function (FlexFabric 10Gb 2-port 536FLB Adapter (SR-IOV VF))
+
pci:v000014E4d000016AE*
ID_MODEL_FROM_DATABASE=NetXtreme II BCM57810 10 Gigabit Ethernet Multi Function
@@ -49052,6 +49118,9 @@ pci:v000014E4d000043D9*
pci:v000014E4d000043DF*
ID_MODEL_FROM_DATABASE=BCM4354 802.11ac Wireless LAN SoC
+pci:v000014E4d000043E9*
+ ID_MODEL_FROM_DATABASE=BCM4358 802.11ac Wireless LAN SoC
+
pci:v000014E4d000043EC*
ID_MODEL_FROM_DATABASE=BCM4356 802.11ac Wireless Network Adapter
@@ -49232,6 +49301,9 @@ pci:v000014E4d00008602*
pci:v000014E4d0000A8D8*
ID_MODEL_FROM_DATABASE=BCM43224/5 Wireless Network Adapter
+pci:v000014E4d0000AA52*
+ ID_MODEL_FROM_DATABASE=BCM43602 802.11ac Wireless LAN SoC
+
pci:v000014E4d0000B302*
ID_MODEL_FROM_DATABASE=BCM56302 StrataXGS 24x1GE 2x10GE Switch Controller
@@ -52266,199 +52338,199 @@ pci:v0000168Cd00000012sv00001B47sd0000AA00*
ID_MODEL_FROM_DATABASE=AR5211 Wireless Network Adapter [AR5001X 802.11ab] (8460 802.11ab Wireless CardBus Adapter)
pci:v0000168Cd00000013*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter
pci:v0000168Cd00000013sv00000308sd00003402*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AG-100 802.11ag Wireless Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AG-100 802.11ag Wireless Cardbus Adapter)
pci:v0000168Cd00000013sv00000308sd00003405*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (G-102 v2 802.11g Wireless Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (G-102 v2 802.11g Wireless Cardbus Adapter)
pci:v0000168Cd00000013sv00000308sd00003408*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (G-170S 802.11g Wireless CardBus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (G-170S 802.11g Wireless CardBus Adapter)
pci:v0000168Cd00000013sv00000E11sd000000E5*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (NC6000/NC8000 laptop)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (NC6000/NC8000 laptop)
pci:v0000168Cd00000013sv000010B7sd00006002*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (3CRWE154A72 802.11abg Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (3CRWE154A72 802.11abg Cardbus Adapter)
pci:v0000168Cd00000013sv00001113sd0000D301*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Philips CPWNA100 Wireless CardBus adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Philips CPWNA100 Wireless CardBus adapter)
pci:v0000168Cd00000013sv00001113sd0000EE23*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (SMCWPCIT-G 108Mbps Wireless PCI adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (SMCWPCIT-G 108Mbps Wireless PCI adapter)
pci:v0000168Cd00000013sv00001154sd0000033B*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Buffalo WLI-CB-AMG54)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Buffalo WLI-CB-AMG54)
pci:v0000168Cd00000013sv00001154sd0000034E*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Buffalo WLI-CB-AG108HP 802.11abg Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Buffalo WLI-CB-AG108HP 802.11abg Cardbus Adapter)
pci:v0000168Cd00000013sv00001186sd00003202*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (DWL-G650 (Rev B3,B5) Wireless cardbus adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (DWL-G650 (Rev B3,B5) Wireless cardbus adapter)
pci:v0000168Cd00000013sv00001186sd00003203*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirPlus DWL-G520 Wireless PCI Adapter (rev. A))
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirPlus DWL-G520 Wireless PCI Adapter (rev. A))
pci:v0000168Cd00000013sv00001186sd00003A07*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirXpert DWL-AG650 Wireless Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirXpert DWL-AG650 Wireless Cardbus Adapter)
pci:v0000168Cd00000013sv00001186sd00003A08*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirXpert DWL-AG520 Wireless PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirXpert DWL-AG520 Wireless PCI Adapter)
pci:v0000168Cd00000013sv00001186sd00003A12*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (D-Link AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C))
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (D-Link AirPlus DWL-G650 Wireless Cardbus Adapter(rev.C))
pci:v0000168Cd00000013sv00001186sd00003A13*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirPlus DWL-G520 Wireless PCI Adapter (rev. B))
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirPlus DWL-G520 Wireless PCI Adapter (rev. B))
pci:v0000168Cd00000013sv00001186sd00003A14*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirPremier AG DWL-AG530 Wireless PCI Adapter (rev.A))
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirPremier AG DWL-AG530 Wireless PCI Adapter (rev.A))
pci:v0000168Cd00000013sv00001186sd00003A17*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (D-Link AirPremier DWL-G680 Wireless Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (D-Link AirPremier DWL-G680 Wireless Cardbus Adapter)
pci:v0000168Cd00000013sv00001186sd00003A18*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (D-Link AirPremier DWL-G550 Wireless PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (D-Link AirPremier DWL-G550 Wireless PCI Adapter)
pci:v0000168Cd00000013sv00001186sd00003A1A*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WNA-2330 802.11bg Wireless CardBus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WNA-2330 802.11bg Wireless CardBus Adapter)
pci:v0000168Cd00000013sv00001186sd00003A63*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (D-Link AirPremier DWL-AG660 Wireless Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (D-Link AirPremier DWL-AG660 Wireless Cardbus Adapter)
pci:v0000168Cd00000013sv00001186sd00003A93*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Conceptronic C54I Wireless 801.11g PCI card)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Conceptronic C54I Wireless 801.11g PCI card)
pci:v0000168Cd00000013sv00001186sd00003A94*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Conceptronic C54C 802.11g Wireless Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Conceptronic C54C 802.11g Wireless Cardbus Adapter)
pci:v0000168Cd00000013sv00001186sd00003AB0*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Allnet ALL0281 Wireless PCI Card)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Allnet ALL0281 Wireless PCI Card)
pci:v0000168Cd00000013sv00001385sd00004600*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WAG511 802.11a/b/g Dual Band Wireless PC Card)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WAG511 802.11a/b/g Dual Band Wireless PC Card)
pci:v0000168Cd00000013sv00001385sd00004610*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WAG511 802.11a/b/g Dual Band Wireless PC Card)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WAG511 802.11a/b/g Dual Band Wireless PC Card)
pci:v0000168Cd00000013sv00001385sd00004900*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG311v1 802.11g Wireless PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG311v1 802.11g Wireless PCI Adapter)
pci:v0000168Cd00000013sv00001385sd00004A00*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WAG311 802.11a/g Wireless PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WAG311 802.11a/g Wireless PCI Adapter)
pci:v0000168Cd00000013sv00001385sd00004B00*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG511T 108 Mbps Wireless PC Card (rev.A/B))
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG511T 108 Mbps Wireless PC Card (rev.A/B))
pci:v0000168Cd00000013sv00001385sd00004D00*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG311T 108 Mbps Wireless PCI Adapter (rev.A2))
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG311T 108 Mbps Wireless PCI Adapter (rev.A2))
pci:v0000168Cd00000013sv00001385sd00004F00*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG511U Double 108 Mbps Wireless PC Card)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG511U Double 108 Mbps Wireless PC Card)
pci:v0000168Cd00000013sv00001385sd00005A00*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG311T 108 Mbps Wireless PCI Adapter (rev.A3))
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG311T (rev.A3 v1h3/v1h4) 108 Mbps Wireless PCI Adapter [AR2412])
pci:v0000168Cd00000013sv00001385sd00005B00*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WG511T 108 Mbps Wireless PC Card (rev.C))
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WG511T 108 Mbps Wireless PC Card (rev.C))
pci:v0000168Cd00000013sv00001385sd00005D00*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WPN511 RangeMax Wireless PC Card)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WPN511 RangeMax Wireless PC Card)
pci:v0000168Cd00000013sv00001458sd0000E911*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (GN-WIAG02)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (GN-WIAG02)
pci:v0000168Cd00000013sv00001468sd00000403*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (U10H014 802.11g Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (U10H014 802.11g Cardbus Adapter)
pci:v0000168Cd00000013sv00001468sd00000408*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (ThinkPad 11b/g Wireless LAN Mini PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (ThinkPad 11b/g Wireless LAN Mini PCI Adapter)
pci:v0000168Cd00000013sv000014B7sd00000A10*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (8480-WD 802.11abg Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (8480-WD 802.11abg Cardbus Adapter)
pci:v0000168Cd00000013sv000014B7sd00000A60*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (8482-WD ORiNOCO 11a/b/g Wireless PCI Adapter)
pci:v0000168Cd00000013sv000014B7sd0000AA30*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (8800-FC 802.11bg Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (8800-FC 802.11bg Cardbus Adapter)
pci:v0000168Cd00000013sv000014B7sd0000AA40*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (8470-WD 802.11bg Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (8470-WD 802.11bg Cardbus Adapter)
pci:v0000168Cd00000013sv000014B9sd0000CB21*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (CB21 802.11a/b/g Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (CB21 802.11a/b/g Cardbus Adapter)
pci:v0000168Cd00000013sv00001668sd00001026*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (IBM HighRate 11 a/b/g Wireless CardBus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (IBM HighRate 11 a/b/g Wireless CardBus Adapter)
pci:v0000168Cd00000013sv0000168Csd00000013*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (AirPlus XtremeG DWL-G650 Wireless PCMCIA Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (AirPlus XtremeG DWL-G650 Wireless PCMCIA Adapter)
pci:v0000168Cd00000013sv0000168Csd00001025*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (DWL-G650B2 Wireless CardBus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (DWL-G650B2 Wireless CardBus Adapter)
pci:v0000168Cd00000013sv0000168Csd00001027*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Engenius NL-3054CB ARIES b/g CardBus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Engenius NL-3054CB ARIES b/g CardBus Adapter)
pci:v0000168Cd00000013sv0000168Csd00001042*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Ubiquiti Networks SuperRange a/b/g Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Ubiquiti Networks SuperRange a/b/g Cardbus Adapter)
pci:v0000168Cd00000013sv0000168Csd00001051*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (EZ Connect g 802.11g 108Mbps Wireless PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (EZ Connect g 802.11g 108Mbps Wireless PCI Adapter)
pci:v0000168Cd00000013sv0000168Csd00002026*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Netgate 5354MP ARIES a(108Mb turbo)/b/g MiniPCI Adapter)
pci:v0000168Cd00000013sv0000168Csd00002027*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (D-Link AirPlus DWL-G520 Wireless PCI Adapter (rev. A))
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (D-Link AirPlus DWL-G520 Wireless PCI Adapter (rev. A))
pci:v0000168Cd00000013sv0000168Csd00002041*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Engenius 5354MP Plus ARIES2 b/g MiniPCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Engenius 5354MP Plus ARIES2 b/g MiniPCI Adapter)
pci:v0000168Cd00000013sv0000168Csd00002042*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Engenius 5354MP Plus ARIES2 a/b/g MiniPCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Engenius 5354MP Plus ARIES2 a/b/g MiniPCI Adapter)
pci:v0000168Cd00000013sv0000168Csd00002051*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (TRENDnet TEW-443PI Wireless PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (TRENDnet TEW-443PI Wireless PCI Adapter)
pci:v0000168Cd00000013sv000016A5sd0000160A*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (BWP712 802.11bg Wireless CardBus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (BWP712 802.11bg Wireless CardBus Adapter)
pci:v0000168Cd00000013sv000016ABsd00007302*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Trust Speedshare Turbo Pro Wireless PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Trust Speedshare Turbo Pro Wireless PCI Adapter)
pci:v0000168Cd00000013sv00001737sd00000017*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WPC55AG)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WPC55AG)
pci:v0000168Cd00000013sv00001737sd00000026*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WMP55AG v1.1)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WMP55AG v1.1)
pci:v0000168Cd00000013sv00001737sd00000035*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WPC55AG v1.2 802.11abg Cardbus Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WPC55AG v1.2 802.11abg Cardbus Adapter)
pci:v0000168Cd00000013sv00001737sd00000036*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (WMP55AG v1.2 802.11abg PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (WMP55AG v1.2 802.11abg PCI Adapter)
pci:v0000168Cd00000013sv00001799sd00003000*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (F6D3000 Dual-Band Wireless A+G Desktop Card)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (F6D3000 Dual-Band Wireless A+G Desktop Card)
pci:v0000168Cd00000013sv00001799sd00003010*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (F6D3010 Dual-Band Wireless A+G Notebook Card)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (F6D3010 Dual-Band Wireless A+G Notebook Card)
pci:v0000168Cd00000013sv000017CFsd00000042*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Z-COMAX Highpower XG-622H (400mw) 802.11b/g mini-PCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Z-COMAX Highpower XG-622H (400mw) 802.11b/g mini-PCI Adapter)
pci:v0000168Cd00000013sv0000185Fsd00001012*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (CM9 Wireless a/b/g MiniPCI Adapter)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (CM9 Wireless a/b/g MiniPCI Adapter)
pci:v0000168Cd00000013sv0000185Fsd00002012*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (Wistron NeWeb WLAN a+b+g model CB9)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (Wistron NeWeb WLAN a+b+g model CB9)
pci:v0000168Cd00000013sv0000A727sd00006801*
- ID_MODEL_FROM_DATABASE=AR5212/AR5213 Wireless Network Adapter (3CRXJK10075 OfficeConnect Wireless 108Mbps 11g XJACK PC Card)
+ ID_MODEL_FROM_DATABASE=AR5212/5213/2414 Wireless Network Adapter (3CRXJK10075 OfficeConnect Wireless 108Mbps 11g XJACK PC Card)
pci:v0000168Cd0000001A*
ID_MODEL_FROM_DATABASE=AR2413/AR2414 Wireless Network Adapter [AR5005G(S) 802.11bg]
@@ -52733,6 +52805,9 @@ pci:v0000168Cd0000002Asv00000777sd00004F05*
pci:v0000168Cd0000002Asv0000103Csd00003041*
ID_MODEL_FROM_DATABASE=AR928X Wireless Network Adapter (PCI-Express) (AR5BHB92-H 802.11abgn Wireless Half-size Mini PCIe Card [AR9280])
+pci:v0000168Cd0000002Asv0000103Csd00003042*
+ ID_MODEL_FROM_DATABASE=AR928X Wireless Network Adapter (PCI-Express) (AzureWave AW-NE773 802.11abgn Wireless Half-size Mini PCIe Card [AR9280])
+
pci:v0000168Cd0000002Asv0000105Bsd0000E006*
ID_MODEL_FROM_DATABASE=AR928X Wireless Network Adapter (PCI-Express) (T77H053.00 802.11bgn Wireless Mini PCIe Card [AR9281])
@@ -53204,6 +53279,12 @@ pci:v000016D5d00007004*
pci:v000016D5d00007005*
ID_MODEL_FROM_DATABASE=XMC-7K410CC: User-Configurable Kintex-7 FPGA, 410k logic cells, conduction-cooled
+pci:v000016D5d00007006*
+ ID_MODEL_FROM_DATABASE=XMC-7A200: User-Configurable Artix-7 FPGA, 200k logic cells with Plug-In I/O
+
+pci:v000016D5d00007007*
+ ID_MODEL_FROM_DATABASE=XMC-7A200CC: User-Configurable Conduction-Cooled Artix-7 FPGA, with 200k logic cells
+
pci:v000016DA*
ID_VENDOR_FROM_DATABASE=Advantech Co., Ltd.
@@ -53471,6 +53552,12 @@ pci:v0000177Dd00000095*
pci:v0000177Dd00000096*
ID_MODEL_FROM_DATABASE=Octeon III CN70XX Network Processor
+pci:v0000177Dd00009700*
+ ID_MODEL_FROM_DATABASE=Octeon III CN73XX Network Processor
+
+pci:v0000177Dd00009800*
+ ID_MODEL_FROM_DATABASE=Octeon Fusion CNF75XX Processor
+
pci:v0000177Dd0000A001*
ID_MODEL_FROM_DATABASE=THUNDERX MRML Bridge
@@ -55295,6 +55382,9 @@ pci:v00001924d00000923sv00001924sd0000800B*
pci:v00001924d00000923sv00001924sd0000800E*
ID_MODEL_FROM_DATABASE=SFC9140 (SFN7x42Q-R2 Flareon Ultra 7000 Series 10/40G Adapter)
+pci:v00001924d00000923sv00001924sd0000800F*
+ ID_MODEL_FROM_DATABASE=SFC9140 (SFN7xx4F-R1 Flareon Ultra 7000 Series 10G Adapter)
+
pci:v00001924d00001803*
ID_MODEL_FROM_DATABASE=SFC9020 Virtual Function [Solarstorm]
@@ -56819,6 +56909,9 @@ pci:v00001B4Bd00009120*
pci:v00001B4Bd00009123*
ID_MODEL_FROM_DATABASE=88SE9123 PCIe SATA 6.0 Gb/s controller
+pci:v00001B4Bd00009123sv0000DC93sd0000600E*
+ ID_MODEL_FROM_DATABASE=88SE9123 PCIe SATA 6.0 Gb/s controller (DC-6xxe series SATA 6G controller)
+
pci:v00001B4Bd00009125*
ID_MODEL_FROM_DATABASE=88SE9125 PCIe SATA 6.0 Gb/s controller
@@ -56915,6 +57008,9 @@ pci:v00001B73d00001000sv00001D5Csd00001000*
pci:v00001B73d00001009*
ID_MODEL_FROM_DATABASE=FL1009 USB 3.0 Host Controller
+pci:v00001B73d00001100*
+ ID_MODEL_FROM_DATABASE=FL1100 USB 3.0 Host Controller
+
pci:v00001B74*
ID_VENDOR_FROM_DATABASE=OpenVox Communication Co. Ltd.
@@ -57191,6 +57287,9 @@ pci:v00001CE4d00000002*
pci:v00001CF7*
ID_VENDOR_FROM_DATABASE=Subspace Dynamics
+pci:v00001D00*
+ ID_VENDOR_FROM_DATABASE=Pure Storage
+
pci:v00001D21*
ID_VENDOR_FROM_DATABASE=Allo
@@ -57356,6 +57455,36 @@ pci:v00001FC9d00003314sv00000000sd00003012*
pci:v00001FC9d00003314sv00000000sd00003014*
ID_MODEL_FROM_DATABASE=10-Giga TOE Dual Port Low Profile SmartNIC (10-Giga TOE Dual Port CX4 Low Profile SmartNIC)
+pci:v00001FC9d00004010*
+ ID_MODEL_FROM_DATABASE=TN4010 Clean SROM
+
+pci:v00001FC9d00004020*
+ ID_MODEL_FROM_DATABASE=TN9030 10GbE CX4 Ethernet Adapter
+
+pci:v00001FC9d00004022*
+ ID_MODEL_FROM_DATABASE=TN9310 10GbE SFP+ Ethernet Adapter
+
+pci:v00001FC9d00004022sv00001186sd00004D00*
+ ID_MODEL_FROM_DATABASE=TN9310 10GbE SFP+ Ethernet Adapter (DXE-810S 10GbE SFP+ Ethernet Adapter)
+
+pci:v00001FC9d00004022sv00001FC9sd00003015*
+ ID_MODEL_FROM_DATABASE=TN9310 10GbE SFP+ Ethernet Adapter (Ethernet Adapter)
+
+pci:v00001FC9d00004024*
+ ID_MODEL_FROM_DATABASE=TN9210 10GBase-T Ethernet Adapter
+
+pci:v00001FC9d00004025*
+ ID_MODEL_FROM_DATABASE=TN9510 10GBase-T/NBASE-T Ethernet Adapter
+
+pci:v00001FC9d00004025sv00001186sd00002900*
+ ID_MODEL_FROM_DATABASE=TN9510 10GBase-T/NBASE-T Ethernet Adapter (DXE-810T 10GBase-T Ethernet Adapter)
+
+pci:v00001FC9d00004025sv00001FC9sd00003015*
+ ID_MODEL_FROM_DATABASE=TN9510 10GBase-T/NBASE-T Ethernet Adapter (Ethernet Adapter)
+
+pci:v00001FC9d00004026*
+ ID_MODEL_FROM_DATABASE=TN9610 10GbE SFP+ Ethernet Adapter
+
pci:v00001FCC*
ID_VENDOR_FROM_DATABASE=StreamLabs
@@ -63962,6 +64091,12 @@ pci:v00008086d000015A2*
pci:v00008086d000015A3*
ID_MODEL_FROM_DATABASE=Ethernet Connection (3) I218-V
+pci:v00008086d000015A4*
+ ID_MODEL_FROM_DATABASE=Ethernet Switch FM10000 Host Interface
+
+pci:v00008086d000015A5*
+ ID_MODEL_FROM_DATABASE=Ethernet Switch FM10000 Host Virtual Interface
+
pci:v00008086d000015A8*
ID_MODEL_FROM_DATABASE=Ethernet Connection X552 Virtual Function
diff --git a/hwdb/60-evdev.hwdb b/hwdb/60-evdev.hwdb
index 815ac2451..ca82f8a51 100644
--- a/hwdb/60-evdev.hwdb
+++ b/hwdb/60-evdev.hwdb
@@ -43,6 +43,11 @@
# Apple
#########################################
+# Macbook2,1 (late 2006), single-button touchpad
+evdev:input:b0003v05ACp021B*
+ EVDEV_ABS_00=256:1471:12
+ EVDEV_ABS_01=256:831:12
+
# Macbook5,1 (unibody), aka wellspring3
evdev:input:b0003v05ACp0236*
evdev:input:b0003v05ACp0237*
@@ -83,6 +88,16 @@ evdev:input:b0003v05ACp025b*
EVDEV_ABS_35=::94
EVDEV_ABS_36=::92
+#########################################
+# ASUS
+#########################################
+# Asus K52JT
+evdev:name:ETPS/2 Elantech Touchpad:dmi:bvn*:bvr*:bd*:svnASUSTeKComputerInc.:pnK52JT:*
+ EVDEV_ABS_00=::18
+ EVDEV_ABS_01=::16
+ EVDEV_ABS_35=::18
+ EVDEV_ABS_36=::16
+
#########################################
# Google
#########################################
diff --git a/hwdb/70-mouse.hwdb b/hwdb/70-mouse.hwdb
index 76dcfd1b8..e2855095c 100644
--- a/hwdb/70-mouse.hwdb
+++ b/hwdb/70-mouse.hwdb
@@ -36,10 +36,11 @@
# where /dev/input/eventXX is the mouse in question. If in
# doubt, simply use /dev/input/event* to reload all input rules.
#
-# If your changes are generally applicable, open a bug report on
-# http://bugs.freedesktop.org/enter_bug.cgi?product=systemd
-# and include your new rules, a description of the device, and the
-# output of
+# If your changes are generally applicable, preferably send them as a pull
+# request to
+# https://github.com/systemd/
+# or create a bug report on the issue tracker located there and include your
+# new rules, a description of the device, and the output of
# udevadm info /dev/input/eventXX
# (or /dev/input/event*).
#
@@ -238,6 +239,10 @@ mouse:usb:v046dpc245:name:Logitech Gaming Mouse G400:
mouse:usb:v046dpc24c:name:Logitech G400s Optical Gaming Mouse:
MOUSE_DPI=400@1000 *800@1000 2000@1000 4000@1000
+# Logitech G402 Hyperion Fury
+mouse:usb:v046dpc07e:name:Logitech Gaming Mouse G402:
+ MOUSE_DPI=400@1000 *800@1000 1600@1000 3200@1000
+
# Logitech B605 Wireless Mouse (also M505)
mouse:usb:v046dp101d:name:Logitech B605:
mouse:usb:v046dp101d:name:Logitech M505:
diff --git a/man/file-hierarchy.xml b/man/file-hierarchy.xml
index 3a5627d19..058998b51 100644
--- a/man/file-hierarchy.xml
+++ b/man/file-hierarchy.xml
@@ -86,7 +86,7 @@
The boot partition used for bringing up the
system. On EFI systems this is possibly the EFI System
Partition, also see
- systemd-efi-boot-generator8.
+ systemd-gpt-auto-generator8.
This directory is usually strictly local to the host, and
should be considered read-only, except when a new kernel or
boot loader is installed. This directory only exists on
@@ -804,7 +804,7 @@
systemd1,
hier7,
systemd-path1,
- systemd-efi-boot-generator8,
+ systemd-gpt-auto-generator8,
sysctl.d5,
tmpfiles.d5,
pkg-config1,
diff --git a/man/systemd-efi-boot-generator.xml b/man/systemd-efi-boot-generator.xml
deleted file mode 100644
index 23464bcf1..000000000
--- a/man/systemd-efi-boot-generator.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-
-
-
-
-
-
-
- systemd-efi-boot-generator
- systemd
-
-
-
- Developer
- Lennart
- Poettering
- lennart@poettering.net
-
-
-
-
-
- systemd-efi-boot-generator
- 8
-
-
-
- systemd-efi-boot-generator
- Generator for automatically mounting the
- EFI System Partition used by the current boot to
- /boot
-
-
-
- /usr/lib/systemd/system-generators/systemd-efi-boot-generator
-
-
-
- Description
-
- systemd-efi-boot-generator is a
- generator that automatically creates mount and automount units for
- the EFI System Partition (ESP), mounting it to
- /boot. Note that this generator will execute
- no operation on non-EFI systems, on systems where the boot loader
- does not communicate the used ESP to the OS, on systems where
- /boot is an explicitly configured mount (for
- example, listed in
- fstab5)
- or where the /boot mount point is non-empty.
- Since this generator creates an automount unit, the mount will
- only be activated on-demand, when accessed.
-
- systemd-efi-boot-generator implements
- systemd.generator7.
-
-
-
- See Also
-
- systemd1,
- systemd.mount5,
- systemd.automount5,
- systemd-gpt-auto-generator8,
- fstab5
-
-
-
-
diff --git a/man/systemd-gpt-auto-generator.xml b/man/systemd-gpt-auto-generator.xml
index 710c2e065..27ec72c98 100644
--- a/man/systemd-gpt-auto-generator.xml
+++ b/man/systemd-gpt-auto-generator.xml
@@ -150,10 +150,16 @@
/etc/crypttab with a different device mapper
device name.
- Also note that
- systemd-efi-boot-generator8
- will mount the EFI System Partition (ESP) to
- /boot if not otherwise mounted.
+ Mount and automount units for the EFI System Partition (ESP),
+ mounting it to /boot are generated on EFI
+ systems, where the boot loader communicates the used ESP to the operating
+ system. Since this generator creates an automount unit, the mount will
+ only be activated on-demand, when accessed. On systems where
+ /boot is an explicitly configured mount
+ (for example, listed in
+ fstab5)
+ or where the /boot mount point is non-empty, no
+ mount units are generated.
When using this generator in conjunction with btrfs file
systems, make sure to set the correct default subvolumes on them,
@@ -170,7 +176,6 @@
systemd.mount5,
systemd.swap5,
systemd-fstab-generator8,
- systemd-efi-boot-generator8,
systemd-cryptsetup@.service8,
cryptsetup8,
fstab5,
diff --git a/man/systemd-machine-id-commit.xml b/man/systemd-machine-id-commit.xml
index cfb172206..d216aa074 100644
--- a/man/systemd-machine-id-commit.xml
+++ b/man/systemd-machine-id-commit.xml
@@ -66,7 +66,7 @@
This tool will execute no operation if
/etc/machine-id doesn't contain any valid
machine ID, isn't mounted as an independent temporary file system,
- of /etc is read-only. If those conditions are
+ or /etc is read-only. If those conditions are
met, it will then write current machine ID to disk and unmount the
transient /etc/machine-id file in a race-free
manner to ensure that this file is always valid for other
diff --git a/man/systemd-networkd-wait-online.service.xml b/man/systemd-networkd-wait-online.service.xml
index f53b337da..bcc5776a8 100644
--- a/man/systemd-networkd-wait-online.service.xml
+++ b/man/systemd-networkd-wait-online.service.xml
@@ -80,7 +80,8 @@
several interfaces which will be configured, but a particular
one is necessary to access some network resources. This option
may be used more than once to wait for multiple network
- interfaces.
+ interfaces. When used, all other interfaces are ignored.
+
diff --git a/man/systemd.generator.xml b/man/systemd.generator.xml
index 2285e9181..4514c1afd 100644
--- a/man/systemd.generator.xml
+++ b/man/systemd.generator.xml
@@ -331,7 +331,6 @@ find $dir
systemd1,
systemd-cryptsetup-generator8,
systemd-debug-generator8,
- systemd-efi-boot-generator8,
systemd-fstab-generator8,
fstab5,
systemd-getty-generator8,
diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
index 92e20bd53..a78ceb125 100644
--- a/man/systemd.netdev.xml
+++ b/man/systemd.netdev.xml
@@ -441,6 +441,15 @@
A boolean. When true receiving zero checksums in VXLAN/IPv6 is turned on.
+
+ GroupPolicyExtension=
+
+ A boolean. When true it enables Group Policy VXLAN extension security label mechanism
+ across network peers based on VXLAN. For details about the Group Policy VXLAN see the
+
+ VXLAN Group Policy document. Defaults to false.
+
+
diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml
index 0aa1eeac7..407f6d32e 100644
--- a/man/systemd.unit.xml
+++ b/man/systemd.unit.xml
@@ -737,7 +737,7 @@
to 0 (job timeouts disabled), except for device units. NB:
this timeout is independent from any unit-specific timeout
(for example, the timeout set with
- StartTimeoutSec= in service units) as the
+ TimeoutStartSec= in service units) as the
job timeout has no effect on the unit itself, only on the job
that might be pending for it. Or in other words: unit-specific
timeouts are useful to abort unit state changes, and revert
diff --git a/src/basic/calendarspec.c b/src/basic/calendarspec.c
index 2fde3e107..2dcc9c557 100644
--- a/src/basic/calendarspec.c
+++ b/src/basic/calendarspec.c
@@ -253,6 +253,7 @@ int calendar_spec_to_string(const CalendarSpec *c, char **p) {
char *buf = NULL;
size_t sz = 0;
FILE *f;
+ int r;
assert(c);
assert(p);
@@ -278,12 +279,11 @@ int calendar_spec_to_string(const CalendarSpec *c, char **p) {
fputc(':', f);
format_chain(f, 2, c->second);
- fflush(f);
-
- if (ferror(f)) {
+ r = fflush_and_check(f);
+ if (r < 0) {
free(buf);
fclose(f);
- return -ENOMEM;
+ return r;
}
fclose(f);
diff --git a/src/basic/fileio.c b/src/basic/fileio.c
index 221685377..4a9105f42 100644
--- a/src/basic/fileio.c
+++ b/src/basic/fileio.c
@@ -28,21 +28,15 @@
#include "fileio.h"
int write_string_stream(FILE *f, const char *line, bool enforce_newline) {
+
assert(f);
assert(line);
- errno = 0;
-
fputs(line, f);
if (enforce_newline && !endswith(line, "\n"))
fputc('\n', f);
- fflush(f);
-
- if (ferror(f))
- return errno ? -errno : -EIO;
-
- return 0;
+ return fflush_and_check(f);
}
static int write_string_file_atomic(const char *fn, const char *line, bool enforce_newline) {
diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c
index e8bb10dc9..8fd314927 100644
--- a/src/basic/socket-util.c
+++ b/src/basic/socket-util.c
@@ -583,7 +583,7 @@ int sockaddr_pretty(const struct sockaddr *_sa, socklen_t salen, bool translate_
} else {
p = strndup(sa->un.sun_path, sizeof(sa->un.sun_path));
- if (!ret)
+ if (!p)
return -ENOMEM;
}
@@ -662,13 +662,13 @@ int socknameinfo_pretty(union sockaddr_union *sa, socklen_t salen, char **_ret)
r = sockaddr_pretty(&sa->sa, salen, true, true, &ret);
if (r < 0)
- return log_error_errno(r, "sockadd_pretty() failed: %m");
+ return r;
log_debug_errno(saved_errno, "getnameinfo(%s) failed: %m", ret);
} else {
ret = strdup(host);
if (!ret)
- return log_oom();
+ return -ENOMEM;
}
*_ret = ret;
@@ -683,7 +683,7 @@ int getnameinfo_pretty(int fd, char **ret) {
assert(ret);
if (getsockname(fd, &sa.sa, &salen) < 0)
- return log_error_errno(errno, "getsockname(%d) failed: %m", fd);
+ return -errno;
return socknameinfo_pretty(&sa, salen, ret);
}
diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c
index bf52463d8..fa530da45 100644
--- a/src/basic/unit-name.c
+++ b/src/basic/unit-name.c
@@ -673,6 +673,7 @@ int unit_name_mangle_with_suffix(const char *name, UnitNameMangle allow_globs, c
int slice_build_parent_slice(const char *slice, char **ret) {
char *s, *dash;
+ int r;
assert(slice);
assert(ret);
@@ -693,11 +694,11 @@ int slice_build_parent_slice(const char *slice, char **ret) {
if (dash)
strcpy(dash, ".slice");
else {
- free(s);
-
- s = strdup("-.slice");
- if (!s)
- return -ENOMEM;
+ r = free_and_strdup(&s, "-.slice");
+ if (r < 0) {
+ free(s);
+ return r;
+ }
}
*ret = s;
diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c
index 091ea375d..359fde999 100644
--- a/src/boot/bootctl.c
+++ b/src/boot/bootctl.c
@@ -489,9 +489,9 @@ static int copy_file(const char *from, const char *to, bool force) {
}
} while (!feof(f));
- fflush(g);
- if (ferror(g)) {
- r = log_error_errno(EIO, "Failed to write \"%s\": %m", to);
+ r = fflush_and_check(g);
+ if (r < 0) {
+ log_error_errno(r, "Failed to write \"%s\": %m", to);
goto error;
}
@@ -519,7 +519,7 @@ static int copy_file(const char *from, const char *to, bool force) {
return 0;
error:
- unlink(p);
+ (void) unlink(p);
return r;
}
diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c
index e8cd8abd2..4ac193e22 100644
--- a/src/boot/efi/boot.c
+++ b/src/boot/efi/boot.c
@@ -22,6 +22,7 @@
#include "console.h"
#include "graphics.h"
#include "pefile.h"
+#include "disk.h"
#include "linux.h"
#ifndef EFI_OS_INDICATIONS_BOOT_TO_FW_UI
@@ -1139,13 +1140,11 @@ static VOID config_entry_add_from_file(Config *config, EFI_HANDLE *device, CHAR1
config_add_entry(config, entry);
}
-static VOID config_load(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir, CHAR16 *loaded_image_path) {
- EFI_FILE_HANDLE entries_dir;
- EFI_STATUS err;
+static VOID config_load_defaults(Config *config, EFI_FILE *root_dir) {
CHAR8 *content = NULL;
UINTN sec;
UINTN len;
- UINTN i;
+ EFI_STATUS err;
len = file_read(root_dir, L"\\loader\\loader.conf", 0, 0, &content);
if (len > 0)
@@ -1158,6 +1157,11 @@ static VOID config_load(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir,
config->timeout_sec = sec;
} else
config->timeout_sec_efivar = -1;
+}
+
+static VOID config_load_entries(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir, CHAR16 *loaded_image_path) {
+ EFI_FILE_HANDLE entries_dir;
+ EFI_STATUS err;
err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &entries_dir, L"\\loader\\entries", EFI_FILE_MODE_READ, 0ULL);
if (!EFI_ERROR(err)) {
@@ -1194,8 +1198,11 @@ static VOID config_load(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir,
}
uefi_call_wrapper(entries_dir->Close, 1, entries_dir);
}
+}
+
+static VOID config_sort_entries(Config *config) {
+ UINTN i;
- /* sort entries after version number */
for (i = 1; i < config->entry_count; i++) {
BOOLEAN more;
UINTN k;
@@ -1696,11 +1703,11 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
EFI_LOADED_IMAGE *loaded_image;
EFI_FILE *root_dir;
CHAR16 *loaded_image_path;
- EFI_DEVICE_PATH *device_path;
EFI_STATUS err;
Config config;
UINT64 init_usec;
BOOLEAN menu = FALSE;
+ CHAR16 uuid[37];
InitializeLib(image, sys_table);
init_usec = time_usec();
@@ -1722,29 +1729,8 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
}
/* export the device path this image is started from */
- device_path = DevicePathFromHandle(loaded_image->DeviceHandle);
- if (device_path) {
- EFI_DEVICE_PATH *path, *paths;
-
- paths = UnpackDevicePath(device_path);
- for (path = paths; !IsDevicePathEnd(path); path = NextDevicePathNode(path)) {
- HARDDRIVE_DEVICE_PATH *drive;
- CHAR16 uuid[37];
-
- if (DevicePathType(path) != MEDIA_DEVICE_PATH)
- continue;
- if (DevicePathSubType(path) != MEDIA_HARDDRIVE_DP)
- continue;
- drive = (HARDDRIVE_DEVICE_PATH *)path;
- if (drive->SignatureType != SIGNATURE_TYPE_GUID)
- continue;
-
- GuidToString(uuid, (EFI_GUID *)&drive->Signature);
- efivar_set(L"LoaderDevicePartUUID", uuid, FALSE);
- break;
- }
- FreePool(paths);
- }
+ if (disk_get_part_uuid(loaded_image->DeviceHandle, uuid) == EFI_SUCCESS)
+ efivar_set(L"LoaderDevicePartUUID", uuid, FALSE);
root_dir = LibOpenRoot(loaded_image->DeviceHandle);
if (!root_dir) {
@@ -1758,12 +1744,19 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
loaded_image_path = DevicePathToStr(loaded_image->FilePath);
efivar_set(L"LoaderImageIdentifier", loaded_image_path, FALSE);
- /* scan "\loader\entries\*.conf" files */
ZeroMem(&config, sizeof(Config));
- config_load(&config, loaded_image->DeviceHandle, root_dir, loaded_image_path);
+ config_load_defaults(&config, root_dir);
+
+ /* scan /EFI/Linux/ directory */
+ config_entry_add_linux(&config, loaded_image, root_dir);
+
+ /* scan /loader/entries/\*.conf files */
+ config_load_entries(&config, loaded_image->DeviceHandle, root_dir, loaded_image_path);
+
+ /* sort entries after version number */
+ config_sort_entries(&config);
/* if we find some well-known loaders, add them to the end of the list */
- config_entry_add_linux(&config, loaded_image, root_dir);
config_entry_add_loader_auto(&config, loaded_image->DeviceHandle, root_dir, loaded_image_path,
L"auto-windows", 'w', L"Windows Boot Manager", L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi");
config_entry_add_loader_auto(&config, loaded_image->DeviceHandle, root_dir, loaded_image_path,
diff --git a/src/boot/efi/disk.c b/src/boot/efi/disk.c
new file mode 100644
index 000000000..96063fbc2
--- /dev/null
+++ b/src/boot/efi/disk.c
@@ -0,0 +1,51 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * Copyright (C) 2015 Kay Sievers
+ */
+
+#include
+#include
+
+#include "util.h"
+
+EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[37]) {
+ EFI_DEVICE_PATH *device_path;
+ EFI_STATUS r = EFI_NOT_FOUND;
+
+ /* export the device path this image is started from */
+ device_path = DevicePathFromHandle(handle);
+ if (device_path) {
+ EFI_DEVICE_PATH *path, *paths;
+
+ paths = UnpackDevicePath(device_path);
+ for (path = paths; !IsDevicePathEnd(path); path = NextDevicePathNode(path)) {
+ HARDDRIVE_DEVICE_PATH *drive;
+
+ if (DevicePathType(path) != MEDIA_DEVICE_PATH)
+ continue;
+ if (DevicePathSubType(path) != MEDIA_HARDDRIVE_DP)
+ continue;
+ drive = (HARDDRIVE_DEVICE_PATH *)path;
+ if (drive->SignatureType != SIGNATURE_TYPE_GUID)
+ continue;
+
+ GuidToString(uuid, (EFI_GUID *)&drive->Signature);
+ r = EFI_SUCCESS;
+ break;
+ }
+ FreePool(paths);
+ }
+
+ return r;
+}
diff --git a/src/boot/efi/disk.h b/src/boot/efi/disk.h
new file mode 100644
index 000000000..1b25343a0
--- /dev/null
+++ b/src/boot/efi/disk.h
@@ -0,0 +1,21 @@
+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
+
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 2.1 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * Copyright (C) 2015 Kay Sievers
+ */
+
+#ifndef __SDBOOT_DISK_H
+#define __SDBOOT_DISK_H
+
+EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, CHAR16 uuid[37]);
+#endif
diff --git a/src/boot/efi/stub.c b/src/boot/efi/stub.c
index 0b1bc491e..0c5ee4e9f 100644
--- a/src/boot/efi/stub.c
+++ b/src/boot/efi/stub.c
@@ -18,6 +18,7 @@
#include "util.h"
#include "pefile.h"
+#include "disk.h"
#include "graphics.h"
#include "splash.h"
#include "linux.h"
@@ -46,6 +47,7 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
UINTN szs[ELEMENTSOF(sections)-1] = {};
CHAR8 *cmdline = NULL;
UINTN cmdline_len;
+ CHAR16 uuid[37];
EFI_STATUS err;
InitializeLib(image, sys_table);
@@ -99,6 +101,10 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
cmdline = line;
}
+ /* export the device path this image is started from */
+ if (disk_get_part_uuid(loaded_image->DeviceHandle, uuid) == EFI_SUCCESS)
+ efivar_set(L"LoaderDevicePartUUID", uuid, FALSE);
+
if (szs[3] > 0)
graphics_splash((UINT8 *)((UINTN)loaded_image->ImageBase + addrs[3]), szs[3], NULL);
diff --git a/src/bus-proxyd/driver.c b/src/bus-proxyd/driver.c
index 1cb5ea500..951f51580 100644
--- a/src/bus-proxyd/driver.c
+++ b/src/bus-proxyd/driver.c
@@ -71,6 +71,27 @@ static int get_creds_by_message(sd_bus *bus, sd_bus_message *m, uint64_t mask, s
return get_creds_by_name(bus, name, mask, _creds, error);
}
+static int driver_activation(sd_bus_message *reply, void *userdata, sd_bus_error *error) {
+ _cleanup_bus_message_unref_ sd_bus_message *m = NULL;
+ ProxyActivation *activation = userdata;
+
+ /*
+ * The org.freedesktop.DBus.Peer.Ping() call returned. We don't care
+ * whether this succeeded, failed, was not implemented or timed out. We
+ * cannot assume that the target reacts to this properly. Hence, just
+ * send the reply to the activation request and be done.
+ */
+
+ m = activation->request; /* claim reference */
+
+ --activation->proxy->n_activations;
+ LIST_REMOVE(activations_by_proxy, activation->proxy->activations, activation);
+ sd_bus_slot_unref(activation->slot);
+ free(activation);
+
+ return synthetic_reply_method_return(m, "u", BUS_START_REPLY_SUCCESS);
+}
+
int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m, SharedPolicy *sp, const struct ucred *ucred, Set *owned_names) {
int r;
@@ -441,27 +462,29 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m,
name_list = (struct kdbus_info *) ((uint8_t *) a->kdbus_buffer + cmd.offset);
KDBUS_FOREACH(name, name_list, cmd.list_size) {
- const char *entry_name = NULL;
struct kdbus_item *item;
char *n;
- KDBUS_ITEM_FOREACH(item, name, items)
- if (item->type == KDBUS_ITEM_OWNED_NAME)
- entry_name = item->name.name;
+ KDBUS_ITEM_FOREACH(item, name, items) {
+ if (item->type == KDBUS_ITEM_OWNED_NAME) {
+ if (!streq_ptr(item->name.name, arg0))
+ continue;
- if (!streq_ptr(entry_name, arg0))
- continue;
+ if (asprintf(&n, ":1.%llu", (unsigned long long) name->id) < 0) {
+ err = -ENOMEM;
+ break;
+ }
- if (asprintf(&n, ":1.%llu", (unsigned long long) name->id) < 0) {
- err = -ENOMEM;
- break;
+ r = strv_consume(&owners, n);
+ if (r < 0) {
+ err = r;
+ break;
+ }
+ }
}
- r = strv_consume(&owners, n);
- if (r < 0) {
- err = r;
+ if (err < 0)
break;
- }
}
r = bus_kernel_cmd_free(a, cmd.offset);
@@ -585,7 +608,9 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m,
} else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "StartServiceByName")) {
_cleanup_bus_message_unref_ sd_bus_message *msg = NULL;
+ ProxyActivation *activation;
const char *name;
+ uint64_t cookie;
uint32_t flags;
if (!sd_bus_message_has_signature(m, "su"))
@@ -604,21 +629,46 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m,
if (r != -ESRCH)
return synthetic_reply_method_errno(m, r, NULL);
- r = sd_bus_message_new_method_call(
- a,
- &msg,
- name,
- "/",
- "org.freedesktop.DBus.Peer",
- "Ping");
+ if (p->n_activations >= PROXY_ACTIVATIONS_MAX)
+ return synthetic_reply_method_errno(m, -EMFILE, NULL);
+
+ r = sd_bus_message_get_cookie(m, &cookie);
if (r < 0)
return synthetic_reply_method_errno(m, r, NULL);
- r = sd_bus_send(a, msg, NULL);
+ r = sd_bus_message_new_method_call(a,
+ &msg,
+ name,
+ "/",
+ "org.freedesktop.DBus.Peer",
+ "Ping");
if (r < 0)
return synthetic_reply_method_errno(m, r, NULL);
- return synthetic_reply_method_return(m, "u", BUS_START_REPLY_SUCCESS);
+ r = bus_message_seal(msg, cookie, BUS_DEFAULT_TIMEOUT);
+ if (r < 0)
+ return synthetic_reply_method_errno(m, r, NULL);
+
+ activation = new0(ProxyActivation, 1);
+ if (!activation)
+ return synthetic_reply_method_errno(m, -ENOMEM, NULL);
+
+ r = sd_bus_call_async(a,
+ &activation->slot,
+ msg,
+ driver_activation,
+ activation,
+ 0);
+ if (r < 0) {
+ free(activation);
+ return synthetic_reply_method_errno(m, r, NULL);
+ }
+
+ activation->proxy = p;
+ activation->request = sd_bus_message_ref(m);
+ LIST_PREPEND(activations_by_proxy, p->activations, activation);
+ ++p->n_activations;
+ return 1;
} else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "UpdateActivationEnvironment")) {
_cleanup_bus_message_unref_ sd_bus_message *msg = NULL;
@@ -657,8 +707,8 @@ int bus_proxy_process_driver(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m,
if (r < 0)
return synthetic_reply_method_errno(m, r, NULL);
- if (!args)
- return synthetic_reply_method_errno(m, -EINVAL, NULL);
+ if (strv_isempty(args)) /* nothing to do? */
+ return synthetic_reply_method_return(m, NULL);
r = sd_bus_message_new_method_call(
a,
diff --git a/src/bus-proxyd/proxy.c b/src/bus-proxyd/proxy.c
index c37b09b9c..df361ac40 100644
--- a/src/bus-proxyd/proxy.c
+++ b/src/bus-proxyd/proxy.c
@@ -261,9 +261,18 @@ int proxy_new(Proxy **out, int in_fd, int out_fd, const char *destination) {
}
Proxy *proxy_free(Proxy *p) {
+ ProxyActivation *activation;
+
if (!p)
return NULL;
+ while ((activation = p->activations)) {
+ LIST_REMOVE(activations_by_proxy, p->activations, activation);
+ sd_bus_message_unref(activation->request);
+ sd_bus_slot_unref(activation->slot);
+ free(activation);
+ }
+
sd_bus_flush_close_unref(p->local_bus);
sd_bus_flush_close_unref(p->destination_bus);
set_free_free(p->owned_names);
@@ -644,6 +653,10 @@ static int process_hello(Proxy *p, sd_bus_message *m) {
if (r < 0)
return log_error_errno(r, "Failed to append sender to NameAcquired message: %m");
+ r = sd_bus_message_set_destination(n, p->destination_bus->unique_name);
+ if (r < 0)
+ return log_error_errno(r, "Failed to set destination for NameAcquired message: %m");
+
r = bus_seal_synthetic_message(p->local_bus, n);
if (r < 0)
return log_error_errno(r, "Failed to seal NameAcquired message: %m");
diff --git a/src/bus-proxyd/proxy.h b/src/bus-proxyd/proxy.h
index ccb951c10..6aac650ac 100644
--- a/src/bus-proxyd/proxy.h
+++ b/src/bus-proxyd/proxy.h
@@ -25,6 +25,9 @@
#include "bus-xml-policy.h"
typedef struct Proxy Proxy;
+typedef struct ProxyActivation ProxyActivation;
+
+#define PROXY_ACTIVATIONS_MAX (16) /* max parallel activation requests */
struct Proxy {
sd_bus *local_bus;
@@ -37,12 +40,22 @@ struct Proxy {
Set *owned_names;
SharedPolicy *policy;
+ LIST_HEAD(ProxyActivation, activations);
+ size_t n_activations;
+
bool got_hello : 1;
bool queue_overflow : 1;
bool message_matched : 1;
bool synthetic_matched : 1;
};
+struct ProxyActivation {
+ LIST_FIELDS(ProxyActivation, activations_by_proxy);
+ Proxy *proxy;
+ sd_bus_message *request;
+ sd_bus_slot *slot;
+};
+
int proxy_new(Proxy **out, int in_fd, int out_fd, const char *dest);
Proxy *proxy_free(Proxy *p);
diff --git a/src/bus-proxyd/synthesize.c b/src/bus-proxyd/synthesize.c
index 3ecedfd57..15d99103f 100644
--- a/src/bus-proxyd/synthesize.c
+++ b/src/bus-proxyd/synthesize.c
@@ -214,22 +214,13 @@ int synthesize_name_acquired(Proxy *p, sd_bus *a, sd_bus *b, sd_bus_message *m)
if (r < 0)
return r;
+ r = sd_bus_message_set_destination(n, a->unique_name);
+ if (r < 0)
+ return r;
+
r = bus_seal_synthetic_message(b, n);
if (r < 0)
return r;
- /*
- * Make sure to only forward NameLost/NameAcquired messages if they
- * match an installed MATCH rule of the local client. We really must
- * not send messages the client doesn't expect.
- */
-
- r = bus_match_run(b, &b->match_callbacks, n);
- if (r >= 0 && p->message_matched)
- r = sd_bus_send(b, n, NULL);
-
- p->message_matched = false;
- p->synthetic_matched = false;
-
- return r;
+ return sd_bus_send(b, n, NULL);
}
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
index d8b39bdf5..5722e3c2b 100644
--- a/src/core/dbus-manager.c
+++ b/src/core/dbus-manager.c
@@ -1069,10 +1069,9 @@ static int method_dump(sd_bus_message *message, void *userdata, sd_bus_error *er
manager_dump_units(m, f, NULL);
manager_dump_jobs(m, f, NULL);
- fflush(f);
-
- if (ferror(f))
- return -ENOMEM;
+ r = fflush_and_check(f);
+ if (r < 0)
+ return r;
return sd_bus_reply_method_return(message, "s", dump);
}
diff --git a/src/core/manager.c b/src/core/manager.c
index a1f37bbbb..ba107d461 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -1701,6 +1701,7 @@ static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t
ssize_t n;
struct signalfd_siginfo sfsi;
bool sigchld = false;
+ int r;
assert(m);
assert(m->signal_fd == fd);
@@ -1809,20 +1810,16 @@ static int manager_dispatch_signal_fd(sd_event_source *source, int fd, uint32_t
f = open_memstream(&dump, &size);
if (!f) {
- log_warning("Failed to allocate memory stream.");
+ log_warning_errno(errno, "Failed to allocate memory stream: %m");
break;
}
manager_dump_units(m, f, "\t");
manager_dump_jobs(m, f, "\t");
- if (ferror(f)) {
- log_warning("Failed to write status stream");
- break;
- }
-
- if (fflush(f)) {
- log_warning("Failed to flush status stream");
+ r = fflush_and_check(f);
+ if (r < 0) {
+ log_warning_errno(r, "Failed to write status stream: %m");
break;
}
diff --git a/src/efi-boot-generator/Makefile b/src/efi-boot-generator/Makefile
deleted file mode 120000
index d0b0e8e00..000000000
--- a/src/efi-boot-generator/Makefile
+++ /dev/null
@@ -1 +0,0 @@
-../Makefile
\ No newline at end of file
diff --git a/src/efi-boot-generator/efi-boot-generator.c b/src/efi-boot-generator/efi-boot-generator.c
deleted file mode 100644
index e6b15c9bb..000000000
--- a/src/efi-boot-generator/efi-boot-generator.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
-/***
- This file is part of systemd.
-
- Copyright 2013 Lennart Poettering
-
- systemd is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2.1 of the License, or
- (at your option) any later version.
-
- systemd is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with systemd; If not, see .
-***/
-
-#include
-#include
-
-#include "efivars.h"
-#include "path-util.h"
-#include "util.h"
-#include "mkdir.h"
-#include "virt.h"
-#include "generator.h"
-#include "special.h"
-
-static const char *arg_dest = "/tmp";
-
-int main(int argc, char *argv[]) {
- _cleanup_free_ char *what = NULL;
- _cleanup_fclose_ FILE *f = NULL;
- int r = EXIT_SUCCESS;
- sd_id128_t id;
- char *name;
-
- if (argc > 1 && argc != 4) {
- log_error("This program takes three or no arguments.");
- return EXIT_FAILURE;
- }
-
- if (argc > 1)
- arg_dest = argv[3];
-
- log_set_target(LOG_TARGET_SAFE);
- log_parse_environment();
- log_open();
-
- umask(0022);
-
- if (in_initrd()) {
- log_debug("In initrd, exiting.");
- return EXIT_SUCCESS;
- }
-
- if (detect_container(NULL) > 0) {
- log_debug("In a container, exiting.");
- return EXIT_SUCCESS;
- }
-
- if (!is_efi_boot()) {
- log_debug("Not an EFI boot, exiting.");
- return EXIT_SUCCESS;
- }
-
- r = path_is_mount_point("/boot", AT_SYMLINK_FOLLOW);
- if (r > 0) {
- log_debug("/boot is already a mount point, exiting.");
- return EXIT_SUCCESS;
- }
- if (r == -ENOENT)
- log_debug("/boot does not exist, continuing.");
- else if (dir_is_empty("/boot") <= 0) {
- log_debug("/boot already populated, exiting.");
- return EXIT_SUCCESS;
- }
-
- r = efi_loader_get_device_part_uuid(&id);
- if (r == -ENOENT) {
- log_debug("EFI loader partition unknown, exiting.");
- return EXIT_SUCCESS;
- } else if (r < 0) {
- log_error_errno(r, "Failed to read ESP partition UUID: %m");
- return EXIT_FAILURE;
- }
-
- name = strjoina(arg_dest, "/boot.mount");
- f = fopen(name, "wxe");
- if (!f) {
- log_error_errno(errno, "Failed to create mount unit file %s: %m", name);
- return EXIT_FAILURE;
- }
-
- r = asprintf(&what,
- "/dev/disk/by-partuuid/%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
- SD_ID128_FORMAT_VAL(id));
- if (r < 0) {
- log_oom();
- return EXIT_FAILURE;
- }
-
- fprintf(f,
- "# Automatially generated by systemd-efi-boot-generator\n\n"
- "[Unit]\n"
- "Description=EFI System Partition\n"
- "Documentation=man:systemd-efi-boot-generator(8)\n");
-
- r = generator_write_fsck_deps(f, arg_dest, what, "/boot", "vfat");
- if (r < 0)
- return EXIT_FAILURE;
-
- fprintf(f,
- "\n"
- "[Mount]\n"
- "What=%s\n"
- "Where=/boot\n"
- "Type=vfat\n"
- "Options=umask=0077,noauto\n",
- what);
-
- r = fflush_and_check(f);
- if (r < 0) {
- log_error_errno(r, "Failed to write mount unit file: %m");
- return EXIT_FAILURE;
- }
-
- name = strjoina(arg_dest, "/boot.automount");
- fclose(f);
- f = fopen(name, "wxe");
- if (!f) {
- log_error_errno(errno, "Failed to create automount unit file %s: %m", name);
- return EXIT_FAILURE;
- }
-
- fputs("# Automatially generated by systemd-efi-boot-generator\n\n"
- "[Unit]\n"
- "Description=EFI System Partition Automount\n\n"
- "[Automount]\n"
- "Where=/boot\n"
- "TimeoutIdleSec=120\n", f);
-
- r = fflush_and_check(f);
- if (r < 0) {
- log_error_errno(r, "Failed to write automount unit file: %m");
- return EXIT_FAILURE;
- }
-
- name = strjoina(arg_dest, "/" SPECIAL_LOCAL_FS_TARGET ".wants/boot.automount");
- mkdir_parents(name, 0755);
-
- if (symlink("../boot.automount", name) < 0) {
- log_error_errno(errno, "Failed to create symlink %s: %m", name);
- return EXIT_FAILURE;
- }
-
- return EXIT_SUCCESS;
-}
diff --git a/src/firstboot/firstboot.c b/src/firstboot/firstboot.c
index 3805b2943..f06ab3da2 100644
--- a/src/firstboot/firstboot.c
+++ b/src/firstboot/firstboot.c
@@ -728,9 +728,8 @@ static int parse_argv(int argc, char *argv[]) {
return -EINVAL;
}
- free(arg_locale);
- arg_locale = strdup(optarg);
- if (!arg_locale)
+ r = free_and_strdup(&arg_locale, optarg);
+ if (r < 0)
return log_oom();
break;
@@ -741,9 +740,8 @@ static int parse_argv(int argc, char *argv[]) {
return -EINVAL;
}
- free(arg_locale_messages);
- arg_locale_messages = strdup(optarg);
- if (!arg_locale_messages)
+ r = free_and_strdup(&arg_locale_messages, optarg);
+ if (r < 0)
return log_oom();
break;
@@ -754,19 +752,16 @@ static int parse_argv(int argc, char *argv[]) {
return -EINVAL;
}
- free(arg_timezone);
- arg_timezone = strdup(optarg);
- if (!arg_timezone)
+ r = free_and_strdup(&arg_timezone, optarg);
+ if (r < 0)
return log_oom();
break;
case ARG_ROOT_PASSWORD:
- free(arg_root_password);
- arg_root_password = strdup(optarg);
- if (!arg_root_password)
+ r = free_and_strdup(&arg_root_password, optarg);
+ if (r < 0)
return log_oom();
-
break;
case ARG_ROOT_PASSWORD_FILE:
@@ -785,9 +780,8 @@ static int parse_argv(int argc, char *argv[]) {
return -EINVAL;
}
- free(arg_hostname);
- arg_hostname = strdup(optarg);
- if (!arg_hostname)
+ r = free_and_strdup(&arg_hostname, optarg);
+ if (r < 0)
return log_oom();
break;
diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
index da5f3b647..50acb7595 100644
--- a/src/gpt-auto-generator/gpt-auto-generator.c
+++ b/src/gpt-auto-generator/gpt-auto-generator.c
@@ -46,51 +46,6 @@ static bool arg_enabled = true;
static bool arg_root_enabled = true;
static bool arg_root_rw = false;
-static int add_swap(const char *path) {
- _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL;
- _cleanup_fclose_ FILE *f = NULL;
- int r;
-
- assert(path);
-
- log_debug("Adding swap: %s", path);
-
- r = unit_name_from_path(path, ".swap", &name);
- if (r < 0)
- return log_error_errno(r, "Failed to generate unit name: %m");
-
- unit = strjoin(arg_dest, "/", name, NULL);
- if (!unit)
- return log_oom();
-
- f = fopen(unit, "wxe");
- if (!f)
- return log_error_errno(errno, "Failed to create unit file %s: %m", unit);
-
- fprintf(f,
- "# Automatically generated by systemd-gpt-auto-generator\n\n"
- "[Unit]\n"
- "Description=Swap Partition\n"
- "Documentation=man:systemd-gpt-auto-generator(8)\n\n"
- "[Swap]\n"
- "What=%s\n",
- path);
-
- fflush(f);
- if (ferror(f))
- return log_error_errno(errno, "Failed to write unit file %s: %m", unit);
-
- lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
- if (!lnk)
- return log_oom();
-
- mkdir_parents_label(lnk, 0755);
- if (symlink(unit, lnk) < 0)
- return log_error_errno(errno, "Failed to create symlink %s: %m", lnk);
-
- return 0;
-}
-
static int add_cryptsetup(const char *id, const char *what, bool rw, char **device) {
_cleanup_free_ char *e = NULL, *n = NULL, *p = NULL, *d = NULL, *to = NULL;
_cleanup_fclose_ FILE *f = NULL;
@@ -142,9 +97,9 @@ static int add_cryptsetup(const char *id, const char *what, bool rw, char **devi
id, what, rw ? "" : "read-only",
id);
- fflush(f);
- if (ferror(f))
- return log_error_errno(errno, "Failed to write file %s: %m", p);
+ r = fflush_and_check(f);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write file %s: %m", p);
from = strjoina("../", n);
@@ -202,6 +157,7 @@ static int add_mount(
const char *where,
const char *fstype,
bool rw,
+ const char *options,
const char *description,
const char *post) {
@@ -262,11 +218,14 @@ static int add_mount(
if (fstype)
fprintf(f, "Type=%s\n", fstype);
- fprintf(f, "Options=%s\n", rw ? "rw" : "ro");
+ if (options)
+ fprintf(f, "Options=%s,%s\n", options, rw ? "rw" : "ro");
+ else
+ fprintf(f, "Options=%s\n", rw ? "rw" : "ro");
- fflush(f);
- if (ferror(f))
- return log_error_errno(errno, "Failed to write unit file %s: %m", p);
+ r = fflush_and_check(f);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write unit file %s: %m", p);
if (post) {
lnk = strjoin(arg_dest, "/", post, ".requires/", unit, NULL);
@@ -281,6 +240,104 @@ static int add_mount(
return 0;
}
+static int add_automount(
+ const char *id,
+ const char *what,
+ const char *where,
+ const char *fstype,
+ bool rw,
+ const char *options,
+ const char *description,
+ usec_t timeout) {
+
+ _cleanup_free_ char *unit = NULL, *lnk = NULL, *crypto_what = NULL;
+ _cleanup_free_ char *opt, *p = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+ int r;
+
+ assert(id);
+ assert(where);
+ assert(description);
+
+ if (options)
+ opt = strjoin(options, ",noauto", NULL);
+ else
+ opt = strdup("noauto");
+ if (!opt)
+ return log_oom();
+
+ r = add_mount(id,
+ what,
+ where,
+ fstype,
+ rw,
+ opt,
+ description,
+ NULL);
+ if (r < 0)
+ return r;
+
+ r = unit_name_from_path(where, ".automount", &unit);
+ if (r < 0)
+ return log_error_errno(r, "Failed to generate unit name: %m");
+
+ p = strjoin(arg_dest, "/", unit, NULL);
+ if (!p)
+ return log_oom();
+
+ f = fopen(p, "wxe");
+ if (!f)
+ return log_error_errno(errno, "Failed to create unit file %s: %m", unit);
+
+ fprintf(f,
+ "# Automatically generated by systemd-gpt-auto-generator\n\n"
+ "[Unit]\n"
+ "Description=%s\n"
+ "Documentation=man:systemd-gpt-auto-generator(8)\n"
+ "[Automount]\n"
+ "Where=%s\n"
+ "TimeoutIdleSec=%lld\n",
+ description,
+ where,
+ (unsigned long long)timeout / USEC_PER_SEC);
+
+ r = fflush_and_check(f);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write unit file %s: %m", p);
+
+ lnk = strjoin(arg_dest, "/" SPECIAL_LOCAL_FS_TARGET ".wants/", unit, NULL);
+ if (!lnk)
+ return log_oom();
+ mkdir_parents_label(lnk, 0755);
+
+ if (symlink(p, lnk) < 0)
+ return log_error_errno(errno, "Failed to create symlink %s: %m", lnk);
+
+ return 0;
+}
+
+static bool path_is_busy(const char *where) {
+ int r;
+
+ /* already a mountpoint; generators run during reload */
+ r = path_is_mount_point(where, AT_SYMLINK_FOLLOW);
+ if (r > 0)
+ return false;
+
+ /* the directory might not exist on a stateless system */
+ if (r == -ENOENT)
+ return false;
+
+ if (r < 0)
+ return true;
+
+ /* not a mountpoint but it contains files */
+ if (dir_is_empty(where) <= 0)
+ return true;
+
+ return false;
+}
+
static int probe_and_add_mount(
const char *id,
const char *what,
@@ -298,8 +355,7 @@ static int probe_and_add_mount(
assert(where);
assert(description);
- if (path_is_mount_point(where, AT_SYMLINK_FOLLOW) <= 0 &&
- dir_is_empty(where) <= 0) {
+ if (path_is_busy(where)) {
log_debug("%s already populated, ignoring.", where);
return 0;
}
@@ -335,21 +391,163 @@ static int probe_and_add_mount(
where,
fstype,
rw,
+ NULL,
description,
post);
}
+static int add_swap(const char *path) {
+ _cleanup_free_ char *name = NULL, *unit = NULL, *lnk = NULL;
+ _cleanup_fclose_ FILE *f = NULL;
+ int r;
+
+ assert(path);
+
+ log_debug("Adding swap: %s", path);
+
+ r = unit_name_from_path(path, ".swap", &name);
+ if (r < 0)
+ return log_error_errno(r, "Failed to generate unit name: %m");
+
+ unit = strjoin(arg_dest, "/", name, NULL);
+ if (!unit)
+ return log_oom();
+
+ f = fopen(unit, "wxe");
+ if (!f)
+ return log_error_errno(errno, "Failed to create unit file %s: %m", unit);
+
+ fprintf(f,
+ "# Automatically generated by systemd-gpt-auto-generator\n\n"
+ "[Unit]\n"
+ "Description=Swap Partition\n"
+ "Documentation=man:systemd-gpt-auto-generator(8)\n\n"
+ "[Swap]\n"
+ "What=%s\n",
+ path);
+
+ r = fflush_and_check(f);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write unit file %s: %m", unit);
+
+ lnk = strjoin(arg_dest, "/" SPECIAL_SWAP_TARGET ".wants/", name, NULL);
+ if (!lnk)
+ return log_oom();
+
+ mkdir_parents_label(lnk, 0755);
+ if (symlink(unit, lnk) < 0)
+ return log_error_errno(errno, "Failed to create symlink %s: %m", lnk);
+
+ return 0;
+}
+
+static int add_boot(const char *what) {
+#ifdef ENABLE_EFI
+ _cleanup_blkid_free_probe_ blkid_probe b = NULL;
+ const char *fstype = NULL, *uuid = NULL;
+ sd_id128_t id, type_id;
+ int r;
+
+ assert(what);
+
+ if (!is_efi_boot()) {
+ log_debug("Not an EFI boot, ignoring /boot.");
+ return 0;
+ }
+
+ if (in_initrd()) {
+ log_debug("In initrd, ignoring /boot.");
+ return 0;
+ }
+
+ if (detect_container(NULL) > 0) {
+ log_debug("In a container, ignoring /boot.");
+ return 0;
+ }
+
+ if (path_is_busy("/boot")) {
+ log_debug("/boot already populated, ignoring.");
+ return 0;
+ }
+
+ r = efi_loader_get_device_part_uuid(&id);
+ if (r == -ENOENT) {
+ log_debug("EFI loader partition unknown.");
+ return 0;
+ }
+
+ if (r < 0) {
+ log_error_errno(r, "Failed to read ESP partition UUID: %m");
+ return r;
+ }
+
+ errno = 0;
+ b = blkid_new_probe_from_filename(what);
+ if (!b) {
+ if (errno == 0)
+ return log_oom();
+ log_error_errno(errno, "Failed to allocate prober: %m");
+ return -errno;
+ }
+
+ blkid_probe_enable_partitions(b, 1);
+ blkid_probe_set_partitions_flags(b, BLKID_PARTS_ENTRY_DETAILS);
+
+ errno = 0;
+ r = blkid_do_safeprobe(b);
+ if (r == -2 || r == 1) /* no result or uncertain */
+ return 0;
+ else if (r != 0)
+ return log_error_errno(errno ?: EIO, "Failed to probe %s: %m", what);
+
+ (void) blkid_probe_lookup_value(b, "TYPE", &fstype, NULL);
+ if (!streq(fstype, "vfat")) {
+ log_debug("Partition for /boot is not a FAT filesystem, ignoring.");
+ return 0;
+ }
+
+ r = blkid_probe_lookup_value(b, "PART_ENTRY_UUID", &uuid, NULL);
+ if (r != 0) {
+ log_debug_errno(r, "Partition for /boot does not have a UUID, ignoring. %m");
+ return 0;
+ }
+
+ if (sd_id128_from_string(uuid, &type_id) < 0) {
+ log_debug("Partition for /boot does not have a valid UUID, ignoring.");
+ return 0;
+ }
+
+ if (!sd_id128_equal(type_id, id)) {
+ log_debug("Partition for /boot does not appear to be the partition we are booted from.");
+ return 0;
+ }
+
+ r = add_automount("boot",
+ what,
+ "/boot",
+ "vfat",
+ "EFI System Partition Automount",
+ false,
+ "umask=0077",
+ 120 * USEC_PER_SEC);
+
+ return r;
+#else
+ return 0;
+#endif
+}
+
static int enumerate_partitions(dev_t devnum) {
_cleanup_udev_enumerate_unref_ struct udev_enumerate *e = NULL;
_cleanup_udev_device_unref_ struct udev_device *d = NULL;
_cleanup_blkid_free_probe_ blkid_probe b = NULL;
_cleanup_udev_unref_ struct udev *udev = NULL;
- _cleanup_free_ char *home = NULL, *srv = NULL;
+ _cleanup_free_ char *boot = NULL, *home = NULL, *srv = NULL;
struct udev_list_entry *first, *item;
struct udev_device *parent = NULL;
const char *name, *node, *pttype, *devtype;
- int home_nr = -1, srv_nr = -1;
+ int boot_nr = -1, home_nr = -1, srv_nr = -1;
bool home_rw = true, srv_rw = true;
blkid_partlist pl;
int r, k;
@@ -521,6 +719,18 @@ static int enumerate_partitions(dev_t devnum) {
if (k < 0)
r = k;
+ } else if (sd_id128_equal(type_id, GPT_ESP)) {
+
+ /* We only care for the first /boot partition */
+ if (boot && nr >= boot_nr)
+ continue;
+
+ boot_nr = nr;
+
+ r = free_and_strdup(&boot, subnode);
+ if (r < 0)
+ return log_oom();
+
} else if (sd_id128_equal(type_id, GPT_HOME)) {
/* We only care for the first /home partition */
@@ -530,9 +740,8 @@ static int enumerate_partitions(dev_t devnum) {
home_nr = nr;
home_rw = !(flags & GPT_FLAG_READ_ONLY),
- free(home);
- home = strdup(subnode);
- if (!home)
+ r = free_and_strdup(&home, subnode);
+ if (r < 0)
return log_oom();
} else if (sd_id128_equal(type_id, GPT_SRV)) {
@@ -544,13 +753,18 @@ static int enumerate_partitions(dev_t devnum) {
srv_nr = nr;
srv_rw = !(flags & GPT_FLAG_READ_ONLY),
- free(srv);
- srv = strdup(subnode);
- if (!srv)
+ r = free_and_strdup(&srv, subnode);
+ if (r < 0)
return log_oom();
}
}
+ if (boot) {
+ k = add_boot(boot);
+ if (k < 0)
+ r = k;
+ }
+
if (home) {
k = probe_and_add_mount("home", home, "/home", home_rw, "Home Partition", SPECIAL_LOCAL_FS_TARGET);
if (k < 0)
@@ -645,6 +859,7 @@ static int add_root_mount(void) {
in_initrd() ? "/sysroot" : "/",
NULL,
arg_root_rw,
+ NULL,
"Root Partition",
in_initrd() ? SPECIAL_INITRD_ROOT_FS_TARGET : SPECIAL_LOCAL_FS_TARGET);
#else
diff --git a/src/journal-remote/journal-remote.c b/src/journal-remote/journal-remote.c
index 1baedf636..e3bd76051 100644
--- a/src/journal-remote/journal-remote.c
+++ b/src/journal-remote/journal-remote.c
@@ -1114,6 +1114,7 @@ static int accept_connection(const char* type, int fd,
r = socknameinfo_pretty(&addr->sockaddr, addr->size, &b);
if (r < 0) {
+ log_error_errno(r, "Resolving hostname failed: %m");
close(fd2);
return r;
}
diff --git a/src/journal-remote/journal-upload.c b/src/journal-remote/journal-upload.c
index 5d23639ee..172fd80a1 100644
--- a/src/journal-remote/journal-upload.c
+++ b/src/journal-remote/journal-upload.c
@@ -126,26 +126,31 @@ static int update_cursor_state(Uploader *u) {
r = fopen_temporary(u->state_file, &f, &temp_path);
if (r < 0)
- goto finish;
+ goto fail;
fprintf(f,
"# This is private data. Do not parse.\n"
"LAST_CURSOR=%s\n",
u->last_cursor);
- fflush(f);
+ r = fflush_and_check(f);
+ if (r < 0)
+ goto fail;
- if (ferror(f) || rename(temp_path, u->state_file) < 0) {
+ if (rename(temp_path, u->state_file) < 0) {
r = -errno;
- unlink(u->state_file);
- unlink(temp_path);
+ goto fail;
}
-finish:
- if (r < 0)
- log_error_errno(r, "Failed to save state %s: %m", u->state_file);
+ return 0;
- return r;
+fail:
+ if (temp_path)
+ (void) unlink(temp_path);
+
+ (void) unlink(u->state_file);
+
+ return log_error_errno(r, "Failed to save state %s: %m", u->state_file);
}
static int load_cursor_state(Uploader *u) {
diff --git a/src/journal/catalog.c b/src/journal/catalog.c
index 0801e1359..33b053931 100644
--- a/src/journal/catalog.c
+++ b/src/journal/catalog.c
@@ -371,25 +371,23 @@ static long write_catalog(const char *database, Hashmap *h, struct strbuf *sb,
goto error;
}
- fflush(w);
-
- if (ferror(w)) {
- log_error("%s: failed to write database.", p);
+ r = fflush_and_check(w);
+ if (r < 0) {
+ log_error_errno(r, "%s: failed to write database: %m", p);
goto error;
}
fchmod(fileno(w), 0644);
if (rename(p, database) < 0) {
- log_error_errno(errno, "rename (%s -> %s) failed: %m", p, database);
- r = -errno;
+ r = log_error_errno(errno, "rename (%s -> %s) failed: %m", p, database);
goto error;
}
return ftell(w);
error:
- unlink(p);
+ (void) unlink(p);
return r;
}
diff --git a/src/journal/journald-stream.c b/src/journal/journald-stream.c
index db2f58197..69e2d4186 100644
--- a/src/journal/journald-stream.c
+++ b/src/journal/journald-stream.c
@@ -142,7 +142,7 @@ static int stdout_stream_save(StdoutStream *s) {
r = fopen_temporary(s->state_file, &f, &temp_path);
if (r < 0)
- goto finish;
+ goto fail;
fprintf(f,
"# This is private data. Do not parse\n"
@@ -163,7 +163,7 @@ static int stdout_stream_save(StdoutStream *s) {
escaped = cescape(s->identifier);
if (!escaped) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "IDENTIFIER=%s\n", escaped);
@@ -175,7 +175,7 @@ static int stdout_stream_save(StdoutStream *s) {
escaped = cescape(s->unit_id);
if (!escaped) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "UNIT=%s\n", escaped);
@@ -183,16 +183,13 @@ static int stdout_stream_save(StdoutStream *s) {
r = fflush_and_check(f);
if (r < 0)
- goto finish;
+ goto fail;
if (rename(temp_path, s->state_file) < 0) {
r = -errno;
- goto finish;
+ goto fail;
}
- free(temp_path);
- temp_path = NULL;
-
/* Store the connection fd in PID 1, so that we get it passed
* in again on next start */
if (!s->fdstore) {
@@ -200,14 +197,15 @@ static int stdout_stream_save(StdoutStream *s) {
s->fdstore = true;
}
-finish:
+ return 0;
+
+fail:
+ (void) unlink(s->state_file);
+
if (temp_path)
- unlink(temp_path);
+ (void) unlink(temp_path);
- if (r < 0)
- log_error_errno(r, "Failed to save stream data %s: %m", s->state_file);
-
- return r;
+ return log_error_errno(r, "Failed to save stream data %s: %m", s->state_file);
}
static int stdout_stream_log(StdoutStream *s, const char *p) {
diff --git a/src/libsystemd-network/sd-dhcp-lease.c b/src/libsystemd-network/sd-dhcp-lease.c
index 54417b3af..febf9f87f 100644
--- a/src/libsystemd-network/sd-dhcp-lease.c
+++ b/src/libsystemd-network/sd-dhcp-lease.c
@@ -643,13 +643,13 @@ int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) {
r = fopen_temporary(lease_file, &f, &temp_path);
if (r < 0)
- goto finish;
+ goto fail;
fchmod(fileno(f), 0644);
r = sd_dhcp_lease_get_address(lease, &address);
if (r < 0)
- goto finish;
+ goto fail;
fprintf(f,
"# This is private data. Do not parse.\n"
@@ -657,7 +657,7 @@ int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) {
r = sd_dhcp_lease_get_netmask(lease, &address);
if (r < 0)
- goto finish;
+ goto fail;
fprintf(f, "NETMASK=%s\n", inet_ntoa(address));
@@ -713,7 +713,7 @@ int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) {
client_id_hex = hexmem(client_id, client_id_len);
if (!client_id_hex) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "CLIENTID=%s\n", client_id_hex);
}
@@ -725,26 +725,27 @@ int sd_dhcp_lease_save(sd_dhcp_lease *lease, const char *lease_file) {
option_hex = hexmem(data, data_len);
if (!option_hex) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "VENDOR_SPECIFIC=%s\n", option_hex);
}
- r = 0;
+ r = fflush_and_check(f);
+ if (r < 0)
+ goto fail;
- fflush(f);
-
- if (ferror(f) || rename(temp_path, lease_file) < 0) {
+ if (rename(temp_path, lease_file) < 0) {
r = -errno;
- unlink(lease_file);
- unlink(temp_path);
+ goto fail;
}
-finish:
- if (r < 0)
- log_error_errno(r, "Failed to save lease data %s: %m", lease_file);
+ return 0;
- return r;
+fail:
+ if (temp_path)
+ (void) unlink(temp_path);
+
+ return log_error_errno(r, "Failed to save lease data %s: %m", lease_file);
}
int sd_dhcp_lease_load(sd_dhcp_lease **ret, const char *lease_file) {
diff --git a/src/libsystemd-network/sd-lldp.c b/src/libsystemd-network/sd-lldp.c
index 6a2c05185..034163eb9 100644
--- a/src/libsystemd-network/sd-lldp.c
+++ b/src/libsystemd-network/sd-lldp.c
@@ -440,7 +440,7 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) {
r = fopen_temporary(lldp_file, &f, &temp_path);
if (r < 0)
- goto finish;
+ goto fail;
fchmod(fileno(f), 0644);
@@ -457,8 +457,10 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) {
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], type);
s = strdup(buf);
- if (!s)
- return -ENOMEM;
+ if (!s) {
+ r = -ENOMEM;
+ goto fail;
+ }
r = lldp_read_port_id(p->packet, &type, &length, &port_id);
if (r < 0)
@@ -466,8 +468,10 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) {
if (type != LLDP_PORT_SUBTYPE_MAC_ADDRESS) {
k = strndup((char *) port_id, length -1);
- if (!k)
- return -ENOMEM;
+ if (!k) {
+ r = -ENOMEM;
+ goto fail;
+ }
sprintf(buf, "'_Port=%s' '_PType=%d' ", k , type);
free(k);
@@ -478,8 +482,10 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) {
}
k = strappend(s, buf);
- if (!k)
- return -ENOMEM;
+ if (!k) {
+ r = -ENOMEM;
+ goto fail;
+ }
free(s);
s = k;
@@ -493,8 +499,10 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) {
sprintf(buf, "'_TTL="USEC_FMT"' ", p->until);
k = strappend(s, buf);
- if (!k)
- return -ENOMEM;
+ if (!k) {
+ r = -ENOMEM;
+ goto fail;
+ }
free(s);
s = k;
@@ -504,15 +512,19 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) {
k = strappend(s, "'_NAME=N/A' ");
else {
t = strndup(k, length);
- if (!t)
- return -ENOMEM;
+ if (!t) {
+ r = -ENOMEM;
+ goto fail;
+ }
k = strjoin(s, "'_NAME=", t, "' ", NULL);
free(t);
}
- if (!k)
- return -ENOMEM;
+ if (!k) {
+ r = -ENOMEM;
+ goto fail;
+ }
free(s);
s = k;
@@ -522,8 +534,10 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) {
sprintf(buf, "'_CAP=%x'", data);
k = strappend(s, buf);
- if (!k)
- return -ENOMEM;
+ if (!k) {
+ r = -ENOMEM;
+ goto fail;
+ }
free(s);
s = k;
@@ -531,21 +545,23 @@ int sd_lldp_save(sd_lldp *lldp, const char *lldp_file) {
fprintf(f, "%s\n", s);
}
}
- r = 0;
- fflush(f);
+ r = fflush_and_check(f);
+ if (r < 0)
+ goto fail;
- if (ferror(f) || rename(temp_path, lldp_file) < 0) {
+ if (rename(temp_path, lldp_file) < 0) {
r = -errno;
- unlink(lldp_file);
- unlink(temp_path);
+ goto fail;
}
- finish:
- if (r < 0)
- log_error("Failed to save lldp data %s: %s", lldp_file, strerror(-r));
+ return 0;
- return r;
+ fail:
+ if (temp_path)
+ (void) unlink(temp_path);
+
+ return log_error_errno(r, "Failed to save lldp data %s: %m", lldp_file);
}
int sd_lldp_start(sd_lldp *lldp) {
diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c
index c53666ddd..773c264cf 100644
--- a/src/libsystemd/sd-bus/bus-control.c
+++ b/src/libsystemd/sd-bus/bus-control.c
@@ -256,9 +256,7 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
name_list = (struct kdbus_info *) ((uint8_t *) bus->kdbus_buffer + cmd.offset);
KDBUS_FOREACH(name, name_list, cmd.list_size) {
-
struct kdbus_item *item;
- const char *entry_name = NULL;
if ((flags & KDBUS_LIST_UNIQUE) && name->id != previous_id) {
char *n;
@@ -275,15 +273,15 @@ static int kernel_get_list(sd_bus *bus, uint64_t flags, char ***x) {
previous_id = name->id;
}
- KDBUS_ITEM_FOREACH(item, name, items)
- if (item->type == KDBUS_ITEM_OWNED_NAME)
- entry_name = item->name.name;
-
- if (entry_name && service_name_is_valid(entry_name)) {
- r = strv_extend(x, entry_name);
- if (r < 0) {
- r = -ENOMEM;
- goto fail;
+ KDBUS_ITEM_FOREACH(item, name, items) {
+ if (item->type == KDBUS_ITEM_OWNED_NAME) {
+ if (service_name_is_valid(item->name.name)) {
+ r = strv_extend(x, item->name.name);
+ if (r < 0) {
+ r = -ENOMEM;
+ goto fail;
+ }
+ }
}
}
}
diff --git a/src/libsystemd/sd-bus/bus-dump.c b/src/libsystemd/sd-bus/bus-dump.c
index 9db86adb7..a6b05eb88 100644
--- a/src/libsystemd/sd-bus/bus-dump.c
+++ b/src/libsystemd/sd-bus/bus-dump.c
@@ -551,9 +551,8 @@ int bus_pcap_header(size_t snaplen, FILE *f) {
hdr.snaplen = (uint32_t) snaplen;
fwrite(&hdr, 1, sizeof(hdr), f);
- fflush(f);
- return 0;
+ return fflush_and_check(f);
}
int bus_message_pcap_frame(sd_bus_message *m, size_t snaplen, FILE *f) {
@@ -598,7 +597,5 @@ int bus_message_pcap_frame(sd_bus_message *m, size_t snaplen, FILE *f) {
snaplen -= w;
}
- fflush(f);
-
- return 0;
+ return fflush_and_check(f);
}
diff --git a/src/libsystemd/sd-bus/bus-gvariant.c b/src/libsystemd/sd-bus/bus-gvariant.c
index 2d18a4e6c..402d43d66 100644
--- a/src/libsystemd/sd-bus/bus-gvariant.c
+++ b/src/libsystemd/sd-bus/bus-gvariant.c
@@ -75,14 +75,19 @@ int bus_gvariant_get_size(const char *signature) {
case SD_BUS_TYPE_STRUCT_BEGIN:
case SD_BUS_TYPE_DICT_ENTRY_BEGIN: {
- char t[n-1];
+ if (n == 2) {
+ /* unary type () has fixed size of 1 */
+ r = 1;
+ } else {
+ char t[n-1];
- memcpy(t, p + 1, n - 2);
- t[n - 2] = 0;
+ memcpy(t, p + 1, n - 2);
+ t[n - 2] = 0;
- r = bus_gvariant_get_size(t);
- if (r < 0)
- return r;
+ r = bus_gvariant_get_size(t);
+ if (r < 0)
+ return r;
+ }
sum += r;
break;
diff --git a/src/libsystemd/sd-bus/bus-introspect.c b/src/libsystemd/sd-bus/bus-introspect.c
index e2f4550c7..c2233d0cf 100644
--- a/src/libsystemd/sd-bus/bus-introspect.c
+++ b/src/libsystemd/sd-bus/bus-introspect.c
@@ -179,10 +179,10 @@ int introspect_finish(struct introspect *i, sd_bus *bus, sd_bus_message *m, sd_b
assert(reply);
fputs("\n", i->f);
- fflush(i->f);
- if (ferror(i->f))
- return -ENOMEM;
+ r = fflush_and_check(i->f);
+ if (r < 0)
+ return r;
r = sd_bus_message_new_method_return(m, &q);
if (r < 0)
@@ -204,8 +204,6 @@ void introspect_free(struct introspect *i) {
if (i->f)
fclose(i->f);
- if (i->introspection)
- free(i->introspection);
-
+ free(i->introspection);
zero(*i);
}
diff --git a/src/libsystemd/sd-bus/bus-match.c b/src/libsystemd/sd-bus/bus-match.c
index 132b37526..e4cbd793e 100644
--- a/src/libsystemd/sd-bus/bus-match.c
+++ b/src/libsystemd/sd-bus/bus-match.c
@@ -914,6 +914,7 @@ char *bus_match_to_string(struct bus_match_component *components, unsigned n_com
char *buffer = NULL;
size_t size = 0;
unsigned i;
+ int r;
if (n_components <= 0)
return strdup("");
@@ -942,8 +943,8 @@ char *bus_match_to_string(struct bus_match_component *components, unsigned n_com
fputc('\'', f);
}
- fflush(f);
- if (ferror(f))
+ r = fflush_and_check(f);
+ if (r < 0)
return NULL;
return buffer;
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
index 18685be8f..006e4a2b5 100644
--- a/src/libsystemd/sd-bus/bus-message.c
+++ b/src/libsystemd/sd-bus/bus-message.c
@@ -2209,7 +2209,14 @@ static int bus_message_close_struct(sd_bus_message *m, struct bus_container *c,
assert(!c->need_offsets || i == c->n_offsets);
assert(c->need_offsets || n_variable == 0);
- if (n_variable <= 0) {
+ if (isempty(c->signature)) {
+ /* The unary type is encoded as fixed 1 byte padding */
+ a = message_extend_body(m, 1, 1, add_offset, false);
+ if (!a)
+ return -ENOMEM;
+
+ *a = 0;
+ } else if (n_variable <= 0) {
int alignment = 1;
/* Structures with fixed-size members only have to be
@@ -2899,18 +2906,20 @@ static int bus_message_close_header(sd_bus_message *m) {
signature = strempty(m->root_container.signature);
l = strlen(signature);
- sz = bus_gvariant_determine_word_size(sizeof(struct bus_header) + ALIGN8(m->fields_size) + m->body_size + 1 + l, 1);
- d = message_extend_body(m, 1, 1 + l + sz, false, true);
+ sz = bus_gvariant_determine_word_size(sizeof(struct bus_header) + ALIGN8(m->fields_size) + m->body_size + 1 + l + 2, 1);
+ d = message_extend_body(m, 1, 1 + l + 2 + sz, false, true);
if (!d)
return -ENOMEM;
*(uint8_t*) d = 0;
- memcpy((uint8_t*) d + 1, signature, l);
+ *((uint8_t*) d + 1) = SD_BUS_TYPE_STRUCT_BEGIN;
+ memcpy((uint8_t*) d + 2, signature, l);
+ *((uint8_t*) d + 1 + l + 1) = SD_BUS_TYPE_STRUCT_END;
- bus_gvariant_write_word_le((uint8_t*) d + 1 + l, sz, sizeof(struct bus_header) + m->fields_size);
+ bus_gvariant_write_word_le((uint8_t*) d + 1 + l + 2, sz, sizeof(struct bus_header) + m->fields_size);
m->footer = d;
- m->footer_accessible = 1 + l + sz;
+ m->footer_accessible = 1 + l + 2 + sz;
} else {
m->header->dbus1.fields_size = m->fields_size;
m->header->dbus1.body_size = m->body_size;
@@ -3814,6 +3823,14 @@ static int build_struct_offsets(
assert(n_offsets);
if (isempty(signature)) {
+ /* Unary type is encoded as *fixed* 1 byte padding */
+ r = message_peek_body(m, &m->rindex, 1, 1, &q);
+ if (r < 0)
+ return r;
+
+ if (*(uint8_t *) q != 0)
+ return -EBADMSG;
+
*item_size = 0;
*offsets = NULL;
*n_offsets = 0;
@@ -3954,12 +3971,6 @@ static int enter_struct_or_dict_entry(
if (r < 0)
return r;
- } else if (c->item_size <= 0) {
-
- /* gvariant empty struct */
- *item_size = 0;
- *offsets = NULL;
- *n_offsets = 0;
} else
/* gvariant with contents */
return build_struct_offsets(m, contents, c->item_size, item_size, offsets, n_offsets);
@@ -4146,7 +4157,14 @@ _public_ int sd_bus_message_enter_container(sd_bus_message *m,
w->before = before;
w->begin = m->rindex;
- w->end = m->rindex + c->item_size;
+
+ /* Unary type has fixed size of 1, but virtual size of 0 */
+ if (BUS_MESSAGE_IS_GVARIANT(m) &&
+ type == SD_BUS_TYPE_STRUCT &&
+ isempty(signature))
+ w->end = m->rindex + 0;
+ else
+ w->end = m->rindex + c->item_size;
w->array_size = array_size;
w->item_size = item_size;
@@ -4756,7 +4774,6 @@ _public_ int sd_bus_message_skip(sd_bus_message *m, const char *types) {
r = sd_bus_message_skip(m, s);
if (r < 0)
return r;
- assert(r != 0);
r = sd_bus_message_exit_container(m);
if (r < 0)
@@ -5164,11 +5181,21 @@ int bus_message_parse_fields(sd_bus_message *m) {
return -EBADMSG;
if (*p == 0) {
+ size_t l;
char *c;
- /* We found the beginning of the signature string, yay! */
+ /* We found the beginning of the signature
+ * string, yay! We require the body to be a
+ * structure, so verify it and then strip the
+ * opening/closing brackets. */
- c = strndup(p + 1, ((char*) m->footer + m->footer_accessible) - p - (1 + sz));
+ l = ((char*) m->footer + m->footer_accessible) - p - (1 + sz);
+ if (l < 2 ||
+ p[1] != SD_BUS_TYPE_STRUCT_BEGIN ||
+ p[1 + l - 1] != SD_BUS_TYPE_STRUCT_END)
+ return -EBADMSG;
+
+ c = strndup(p + 1 + 1, l - 2);
if (!c)
return -ENOMEM;
diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
index 0ca225c61..767df40e8 100644
--- a/src/libsystemd/sd-bus/sd-bus.c
+++ b/src/libsystemd/sd-bus/sd-bus.c
@@ -896,10 +896,9 @@ static int parse_container_kernel_address(sd_bus *b, const char **p, char **guid
} else
b->nspid = 0;
- free(b->kernel);
- b->kernel = strdup("/sys/fs/kdbus/0-system/bus");
- if (!b->kernel)
- return -ENOMEM;
+ r = free_and_strdup(&b->kernel, "/sys/fs/kdbus/0-system/bus");
+ if (r < 0)
+ return r;
return 0;
}
diff --git a/src/libsystemd/sd-bus/test-bus-gvariant.c b/src/libsystemd/sd-bus/test-bus-gvariant.c
index 9b7dd2e49..b078bdc5f 100644
--- a/src/libsystemd/sd-bus/test-bus-gvariant.c
+++ b/src/libsystemd/sd-bus/test-bus-gvariant.c
@@ -59,7 +59,7 @@ static void test_bus_gvariant_is_fixed_size(void) {
static void test_bus_gvariant_get_size(void) {
assert_se(bus_gvariant_get_size("") == 0);
- assert_se(bus_gvariant_get_size("()") == 0);
+ assert_se(bus_gvariant_get_size("()") == 1);
assert_se(bus_gvariant_get_size("y") == 1);
assert_se(bus_gvariant_get_size("u") == 4);
assert_se(bus_gvariant_get_size("b") == 1);
diff --git a/src/libsystemd/sd-bus/test-bus-marshal.c b/src/libsystemd/sd-bus/test-bus-marshal.c
index 59deaea89..b203707f2 100644
--- a/src/libsystemd/sd-bus/test-bus-marshal.c
+++ b/src/libsystemd/sd-bus/test-bus-marshal.c
@@ -134,6 +134,9 @@ int main(int argc, char *argv[]) {
r = sd_bus_message_append(m, "y(ty)y(yt)y", 8, 777ULL, 7, 9, 77, 7777ULL, 10);
assert_se(r >= 0);
+ r = sd_bus_message_append(m, "()");
+ assert_se(r >= 0);
+
r = sd_bus_message_append(m, "ba(ss)", 255, 3, "aaa", "1", "bbb", "2", "ccc", "3");
assert_se(r >= 0);
@@ -271,6 +274,9 @@ int main(int argc, char *argv[]) {
assert_se(r > 0);
assert_se(v == 10);
+ r = sd_bus_message_read(m, "()");
+ assert_se(r > 0);
+
r = sd_bus_message_read(m, "ba(ss)", &boolean, 3, &x, &y, &a, &b, &c, &d);
assert_se(r > 0);
assert_se(boolean);
@@ -350,7 +356,7 @@ int main(int argc, char *argv[]) {
assert_se(sd_bus_message_verify_type(m, 'a', "{yv}") > 0);
- r = sd_bus_message_skip(m, "a{yv}y(ty)y(yt)y");
+ r = sd_bus_message_skip(m, "a{yv}y(ty)y(yt)y()");
assert_se(r >= 0);
assert_se(sd_bus_message_verify_type(m, 'b', NULL) > 0);
diff --git a/src/libsystemd/sd-bus/test-bus-proxy.c b/src/libsystemd/sd-bus/test-bus-proxy.c
index 369c2f331..aef768dc1 100644
--- a/src/libsystemd/sd-bus/test-bus-proxy.c
+++ b/src/libsystemd/sd-bus/test-bus-proxy.c
@@ -53,7 +53,9 @@ static int test_proxy_acquired(sd_bus_message *m, void *userdata, sd_bus_error *
static void test_proxy_matched(void) {
_cleanup_bus_flush_close_unref_ sd_bus *a = NULL;
+ _cleanup_free_ char *matchstr = NULL;
TestProxyMatch match = {};
+ const char *me;
int r;
/* open bus 'a' */
@@ -70,10 +72,17 @@ static void test_proxy_matched(void) {
r = sd_bus_start(a);
assert_se(r >= 0);
- r = sd_bus_add_match(a, NULL,
- "type='signal',"
- "member='NameAcquired'",
- test_proxy_acquired, &match);
+ r = sd_bus_get_unique_name(a, &me);
+ assert_se(r >= 0);
+
+ matchstr = strjoin("type='signal',"
+ "member='NameAcquired',"
+ "destination='",
+ me,
+ "'",
+ NULL);
+ assert_se(matchstr);
+ r = sd_bus_add_match(a, NULL, matchstr, test_proxy_acquired, &match);
assert_se(r >= 0);
r = sd_bus_get_unique_name(a, &match.sender);
diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c
index 2e6043324..0ec966774 100644
--- a/src/libsystemd/sd-device/device-private.c
+++ b/src/libsystemd/sd-device/device-private.c
@@ -1082,12 +1082,10 @@ int device_update_db(sd_device *device) {
return 0;
fail:
- log_error_errno(r, "failed to create %s file '%s' for '%s'", has_info ? "db" : "empty",
- path, device->devpath);
- unlink(path);
- unlink(path_tmp);
+ (void) unlink(path);
+ (void) unlink(path_tmp);
- return r;
+ return log_error_errno(r, "failed to create %s file '%s' for '%s'", has_info ? "db" : "empty", path, device->devpath);
}
int device_delete_db(sd_device *device) {
diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c
index b0ed2f288..3ba62a6be 100644
--- a/src/libsystemd/sd-netlink/netlink-message.c
+++ b/src/libsystemd/sd-netlink/netlink-message.c
@@ -262,6 +262,24 @@ int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type,
return 0;
}
+int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type) {
+ size_t size;
+ int r;
+
+ assert_return(m, -EINVAL);
+ assert_return(!m->sealed, -EPERM);
+
+ r = message_attribute_has_type(m, &size, type, NETLINK_TYPE_FLAG);
+ if (r < 0)
+ return r;
+
+ r = add_rtattr(m, type, NULL, 0);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uint8_t data) {
int r;
diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c
index 1e747abb2..212832919 100644
--- a/src/libsystemd/sd-netlink/netlink-types.c
+++ b/src/libsystemd/sd-netlink/netlink-types.c
@@ -117,20 +117,30 @@ static const NLType rtnl_link_info_data_vlan_types[IFLA_VLAN_MAX + 1] = {
};
static const NLType rtnl_link_info_data_vxlan_types[IFLA_VXLAN_MAX+1] = {
- [IFLA_VXLAN_ID] = { .type = NETLINK_TYPE_U32 },
- [IFLA_VXLAN_GROUP] = { .type = NETLINK_TYPE_IN_ADDR },
- [IFLA_VXLAN_LINK] = { .type = NETLINK_TYPE_U32 },
- [IFLA_VXLAN_LOCAL] = { .type = NETLINK_TYPE_U32},
- [IFLA_VXLAN_TTL] = { .type = NETLINK_TYPE_U8 },
- [IFLA_VXLAN_TOS] = { .type = NETLINK_TYPE_U8 },
- [IFLA_VXLAN_LEARNING] = { .type = NETLINK_TYPE_U8 },
- [IFLA_VXLAN_AGEING] = { .type = NETLINK_TYPE_U32 },
- [IFLA_VXLAN_LIMIT] = { .type = NETLINK_TYPE_U32 },
- [IFLA_VXLAN_PORT_RANGE] = { .type = NETLINK_TYPE_U32},
- [IFLA_VXLAN_PROXY] = { .type = NETLINK_TYPE_U8 },
- [IFLA_VXLAN_RSC] = { .type = NETLINK_TYPE_U8 },
- [IFLA_VXLAN_L2MISS] = { .type = NETLINK_TYPE_U8 },
- [IFLA_VXLAN_L3MISS] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_ID] = { .type = NETLINK_TYPE_U32 },
+ [IFLA_VXLAN_GROUP] = { .type = NETLINK_TYPE_IN_ADDR },
+ [IFLA_VXLAN_LINK] = { .type = NETLINK_TYPE_U32 },
+ [IFLA_VXLAN_LOCAL] = { .type = NETLINK_TYPE_U32},
+ [IFLA_VXLAN_TTL] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_TOS] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_LEARNING] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_AGEING] = { .type = NETLINK_TYPE_U32 },
+ [IFLA_VXLAN_LIMIT] = { .type = NETLINK_TYPE_U32 },
+ [IFLA_VXLAN_PORT_RANGE] = { .type = NETLINK_TYPE_U32},
+ [IFLA_VXLAN_PROXY] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_RSC] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_L2MISS] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_L3MISS] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_PORT] = { .type = NETLINK_TYPE_U16 },
+ [IFLA_VXLAN_GROUP6] = { .type = NETLINK_TYPE_IN_ADDR },
+ [IFLA_VXLAN_LOCAL6] = { .type = NETLINK_TYPE_IN_ADDR },
+ [IFLA_VXLAN_UDP_CSUM] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_UDP_ZERO_CSUM6_TX] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_UDP_ZERO_CSUM6_RX] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_REMCSUM_TX] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_REMCSUM_RX] = { .type = NETLINK_TYPE_U8 },
+ [IFLA_VXLAN_GBP] = { .type = NETLINK_TYPE_FLAG },
+ [IFLA_VXLAN_REMCSUM_NOPARTIAL] = { .type = NETLINK_TYPE_FLAG },
};
static const NLType rtnl_bond_arp_target_types[BOND_ARP_TARGETS_MAX + 1] = {
diff --git a/src/libsystemd/sd-netlink/netlink-types.h b/src/libsystemd/sd-netlink/netlink-types.h
index 758ffad1b..bf7c64154 100644
--- a/src/libsystemd/sd-netlink/netlink-types.h
+++ b/src/libsystemd/sd-netlink/netlink-types.h
@@ -28,6 +28,7 @@ enum {
NETLINK_TYPE_U32, /* NLA_U32 */
NETLINK_TYPE_U64, /* NLA_U64 */
NETLINK_TYPE_STRING, /* NLA_STRING */
+ NETLINK_TYPE_FLAG, /* NLA_FLAG */
NETLINK_TYPE_IN_ADDR,
NETLINK_TYPE_ETHER_ADDR,
NETLINK_TYPE_CACHE_INFO,
diff --git a/src/locale/localed.c b/src/locale/localed.c
index 88756542f..e8a8f17d8 100644
--- a/src/locale/localed.c
+++ b/src/locale/localed.c
@@ -476,15 +476,25 @@ static int x11_write_data(Context *c) {
fprintf(f, " Option \"XkbOptions\" \"%s\"\n", c->x11_options);
fputs("EndSection\n", f);
- fflush(f);
- if (ferror(f) || rename(temp_path, "/etc/X11/xorg.conf.d/00-keyboard.conf") < 0) {
+ r = fflush_and_check(f);
+ if (r < 0)
+ goto fail;
+
+ if (rename(temp_path, "/etc/X11/xorg.conf.d/00-keyboard.conf") < 0) {
r = -errno;
- unlink("/etc/X11/xorg.conf.d/00-keyboard.conf");
- unlink(temp_path);
- return r;
- } else
- return 0;
+ goto fail;
+ }
+
+ return 0;
+
+fail:
+ (void) unlink("/etc/X11/xorg.conf.d/00-keyboard.conf");
+
+ if (temp_path)
+ (void) unlink(temp_path);
+
+ return r;
}
static int vconsole_reload(sd_bus *bus) {
diff --git a/src/login/loginctl.c b/src/login/loginctl.c
index 9709eca9b..5fa98e069 100644
--- a/src/login/loginctl.c
+++ b/src/login/loginctl.c
@@ -372,11 +372,9 @@ static int prop_map_first_of_struct(sd_bus *bus, const char *member, sd_bus_mess
if (r < 0)
return r;
- free(*p);
- *p = strdup(s);
-
- if (!*p)
- return -ENOMEM;
+ r = free_and_strdup(p, s);
+ if (r < 0)
+ return r;
} else {
r = sd_bus_message_read_basic(m, contents[0], userdata);
if (r < 0)
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
index e6371ff04..397952e7e 100644
--- a/src/login/logind-dbus.c
+++ b/src/login/logind-dbus.c
@@ -1816,17 +1816,22 @@ static int update_schedule_file(Manager *m) {
if (!isempty(m->wall_message))
fprintf(f, "WALL_MESSAGE=%s\n", t);
- (void) fflush_and_check(f);
+ r = fflush_and_check(f);
+ if (r < 0)
+ goto fail;
- if (ferror(f) || rename(temp_path, "/run/systemd/shutdown/scheduled") < 0) {
- log_error_errno(errno, "Failed to write information about scheduled shutdowns: %m");
+ if (rename(temp_path, "/run/systemd/shutdown/scheduled") < 0) {
r = -errno;
-
- (void) unlink(temp_path);
- (void) unlink("/run/systemd/shutdown/scheduled");
+ goto fail;
}
- return r;
+ return 0;
+
+fail:
+ (void) unlink(temp_path);
+ (void) unlink("/run/systemd/shutdown/scheduled");
+
+ return log_error_errno(r, "Failed to write information about scheduled shutdowns: %m");
}
static int manager_scheduled_shutdown_handler(
diff --git a/src/login/logind-inhibit.c b/src/login/logind-inhibit.c
index 855c85402..a261e6a71 100644
--- a/src/login/logind-inhibit.c
+++ b/src/login/logind-inhibit.c
@@ -86,11 +86,11 @@ int inhibitor_save(Inhibitor *i) {
r = mkdir_safe_label("/run/systemd/inhibit", 0755, 0, 0);
if (r < 0)
- goto finish;
+ goto fail;
r = fopen_temporary(i->state_file, &f, &temp_path);
if (r < 0)
- goto finish;
+ goto fail;
fchmod(fileno(f), 0644);
@@ -128,19 +128,24 @@ int inhibitor_save(Inhibitor *i) {
if (i->fifo_path)
fprintf(f, "FIFO=%s\n", i->fifo_path);
- fflush(f);
+ r = fflush_and_check(f);
+ if (r < 0)
+ goto fail;
- if (ferror(f) || rename(temp_path, i->state_file) < 0) {
+ if (rename(temp_path, i->state_file) < 0) {
r = -errno;
- unlink(i->state_file);
- unlink(temp_path);
+ goto fail;
}
-finish:
- if (r < 0)
- log_error_errno(r, "Failed to save inhibit data %s: %m", i->state_file);
+ return 0;
- return r;
+fail:
+ (void) unlink(i->state_file);
+
+ if (temp_path)
+ (void) unlink(temp_path);
+
+ return log_error_errno(r, "Failed to save inhibit data %s: %m", i->state_file);
}
int inhibitor_start(Inhibitor *i) {
diff --git a/src/login/logind-seat.c b/src/login/logind-seat.c
index 495ec50be..8d13a6368 100644
--- a/src/login/logind-seat.c
+++ b/src/login/logind-seat.c
@@ -93,11 +93,11 @@ int seat_save(Seat *s) {
r = mkdir_safe_label("/run/systemd/seats", 0755, 0, 0);
if (r < 0)
- goto finish;
+ goto fail;
r = fopen_temporary(s->state_file, &f, &temp_path);
if (r < 0)
- goto finish;
+ goto fail;
fchmod(fileno(f), 0644);
@@ -141,19 +141,24 @@ int seat_save(Seat *s) {
i->sessions_by_seat_next ? ' ' : '\n');
}
- fflush(f);
+ r = fflush_and_check(f);
+ if (r < 0)
+ goto fail;
- if (ferror(f) || rename(temp_path, s->state_file) < 0) {
+ if (rename(temp_path, s->state_file) < 0) {
r = -errno;
- unlink(s->state_file);
- unlink(temp_path);
+ goto fail;
}
-finish:
- if (r < 0)
- log_error_errno(r, "Failed to save seat data %s: %m", s->state_file);
+ return 0;
- return r;
+fail:
+ (void) unlink(s->state_file);
+
+ if (temp_path)
+ (void) unlink(temp_path);
+
+ return log_error_errno(r, "Failed to save seat data %s: %m", s->state_file);
}
int seat_load(Seat *s) {
diff --git a/src/login/logind-session.c b/src/login/logind-session.c
index 45f4c09d3..9a2da7906 100644
--- a/src/login/logind-session.c
+++ b/src/login/logind-session.c
@@ -165,11 +165,11 @@ int session_save(Session *s) {
r = mkdir_safe_label("/run/systemd/sessions", 0755, 0, 0);
if (r < 0)
- goto finish;
+ goto fail;
r = fopen_temporary(s->state_file, &f, &temp_path);
if (r < 0)
- goto finish;
+ goto fail;
assert(s->user);
@@ -217,7 +217,7 @@ int session_save(Session *s) {
escaped = cescape(s->remote_host);
if (!escaped) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "REMOTE_HOST=%s\n", escaped);
@@ -229,7 +229,7 @@ int session_save(Session *s) {
escaped = cescape(s->remote_user);
if (!escaped) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "REMOTE_USER=%s\n", escaped);
@@ -241,7 +241,7 @@ int session_save(Session *s) {
escaped = cescape(s->service);
if (!escaped) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "SERVICE=%s\n", escaped);
@@ -254,7 +254,7 @@ int session_save(Session *s) {
escaped = cescape(s->desktop);
if (!escaped) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "DESKTOP=%s\n", escaped);
@@ -282,21 +282,27 @@ int session_save(Session *s) {
if (s->controller)
fprintf(f, "CONTROLLER=%s\n", s->controller);
- fflush(f);
+ r = fflush_and_check(f);
+ if (r < 0)
+ goto fail;
- if (ferror(f) || rename(temp_path, s->state_file) < 0) {
+ if (rename(temp_path, s->state_file) < 0) {
r = -errno;
- unlink(s->state_file);
- unlink(temp_path);
+ goto fail;
}
-finish:
- if (r < 0)
- log_error_errno(r, "Failed to save session data %s: %m", s->state_file);
+ return 0;
- return r;
+fail:
+ (void) unlink(s->state_file);
+
+ if (temp_path)
+ (void) unlink(temp_path);
+
+ return log_error_errno(r, "Failed to save session data %s: %m", s->state_file);
}
+
int session_load(Session *s) {
_cleanup_free_ char *remote = NULL,
*seat = NULL,
@@ -630,6 +636,9 @@ int session_stop(Session *s, bool force) {
s->timer_event_source = sd_event_source_unref(s->timer_event_source);
+ if (s->seat)
+ seat_evict_position(s->seat, s);
+
/* We are going down, don't care about FIFOs anymore */
session_remove_fifo(s);
@@ -666,6 +675,9 @@ int session_finalize(Session *s) {
s->timer_event_source = sd_event_source_unref(s->timer_event_source);
+ if (s->seat)
+ seat_evict_position(s->seat, s);
+
/* Kill session devices */
while ((sd = hashmap_first(s->devices)))
session_device_free(sd);
diff --git a/src/login/logind-user.c b/src/login/logind-user.c
index 21d726812..5d8a7571c 100644
--- a/src/login/logind-user.c
+++ b/src/login/logind-user.c
@@ -116,11 +116,11 @@ static int user_save_internal(User *u) {
r = mkdir_safe_label("/run/systemd/users", 0755, 0, 0);
if (r < 0)
- goto finish;
+ goto fail;
r = fopen_temporary(u->state_file, &f, &temp_path);
if (r < 0)
- goto finish;
+ goto fail;
fchmod(fileno(f), 0644);
@@ -241,19 +241,24 @@ static int user_save_internal(User *u) {
fputc('\n', f);
}
- fflush(f);
+ r = fflush_and_check(f);
+ if (r < 0)
+ goto fail;
- if (ferror(f) || rename(temp_path, u->state_file) < 0) {
+ if (rename(temp_path, u->state_file) < 0) {
r = -errno;
- unlink(u->state_file);
- unlink(temp_path);
+ goto fail;
}
-finish:
- if (r < 0)
- log_error_errno(r, "Failed to save user data %s: %m", u->state_file);
+ return 0;
- return r;
+fail:
+ (void) unlink(u->state_file);
+
+ if (temp_path)
+ (void) unlink(temp_path);
+
+ return log_error_errno(r, "Failed to save user data %s: %m", u->state_file);
}
int user_save(User *u) {
diff --git a/src/machine/machine.c b/src/machine/machine.c
index 05fc4f849..ab2680368 100644
--- a/src/machine/machine.c
+++ b/src/machine/machine.c
@@ -112,13 +112,13 @@ int machine_save(Machine *m) {
r = mkdir_safe_label("/run/systemd/machines", 0755, 0, 0);
if (r < 0)
- goto finish;
+ goto fail;
r = fopen_temporary(m->state_file, &f, &temp_path);
if (r < 0)
- goto finish;
+ goto fail;
- fchmod(fileno(f), 0644);
+ (void) fchmod(fileno(f), 0644);
fprintf(f,
"# This is private data. Do not parse.\n"
@@ -131,7 +131,7 @@ int machine_save(Machine *m) {
escaped = cescape(m->unit);
if (!escaped) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "SCOPE=%s\n", escaped); /* We continue to call this "SCOPE=" because it is internal only, and we want to stay compatible with old files */
@@ -146,7 +146,7 @@ int machine_save(Machine *m) {
escaped = cescape(m->service);
if (!escaped) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "SERVICE=%s\n", escaped);
}
@@ -157,7 +157,7 @@ int machine_save(Machine *m) {
escaped = cescape(m->root_directory);
if (!escaped) {
r = -ENOMEM;
- goto finish;
+ goto fail;
}
fprintf(f, "ROOT=%s\n", escaped);
}
@@ -195,16 +195,13 @@ int machine_save(Machine *m) {
r = fflush_and_check(f);
if (r < 0)
- goto finish;
+ goto fail;
if (rename(temp_path, m->state_file) < 0) {
r = -errno;
- goto finish;
+ goto fail;
}
- free(temp_path);
- temp_path = NULL;
-
if (m->unit) {
char *sl;
@@ -215,14 +212,15 @@ int machine_save(Machine *m) {
(void) symlink(m->name, sl);
}
-finish:
+ return 0;
+
+fail:
+ (void) unlink(m->state_file);
+
if (temp_path)
- unlink(temp_path);
+ (void) unlink(temp_path);
- if (r < 0)
- log_error_errno(r, "Failed to save machine data %s: %m", m->state_file);
-
- return r;
+ return log_error_errno(r, "Failed to save machine data %s: %m", m->state_file);
}
static void machine_unlink(Machine *m) {
diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
index f20f68b48..78e96c4e5 100644
--- a/src/network/networkd-link.c
+++ b/src/network/networkd-link.c
@@ -2059,10 +2059,9 @@ int link_update(Link *link, sd_netlink_message *m) {
link_free_carrier_maps(link);
- free(link->ifname);
- link->ifname = strdup(ifname);
- if (!link->ifname)
- return -ENOMEM;
+ r = free_and_strdup(&link->ifname, ifname);
+ if (r < 0)
+ return r;
r = link_new_carrier_maps(link);
if (r < 0)
@@ -2388,14 +2387,13 @@ int link_save(Link *link) {
}
return 0;
-fail:
- log_link_error_errno(link, r, "Failed to save link data to %s: %m", link->state_file);
- (void) unlink(link->state_file);
+fail:
+ (void) unlink(link->state_file);
if (temp_path)
(void) unlink(temp_path);
- return r;
+ return log_link_error_errno(link, r, "Failed to save link data to %s: %m", link->state_file);
}
static const char* const link_state_table[_LINK_STATE_MAX] = {
diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
index a5c2351cf..e718c4840 100644
--- a/src/network/networkd-manager.c
+++ b/src/network/networkd-manager.c
@@ -818,10 +818,10 @@ int manager_save(Manager *m) {
return 0;
fail:
- log_error_errno(r, "Failed to save network state to %s: %m", m->state_file);
- unlink(m->state_file);
- unlink(temp_path);
- return r;
+ (void) unlink(m->state_file);
+ (void) unlink(temp_path);
+
+ return log_error_errno(r, "Failed to save network state to %s: %m", m->state_file);
}
int manager_address_pool_acquire(Manager *m, int family, unsigned prefixlen, union in_addr_union *found) {
diff --git a/src/network/networkd-netdev-gperf.gperf b/src/network/networkd-netdev-gperf.gperf
index 7e46293a0..9469160eb 100644
--- a/src/network/networkd-netdev-gperf.gperf
+++ b/src/network/networkd-netdev-gperf.gperf
@@ -54,6 +54,7 @@ VXLAN.UDPCheckSum, config_parse_bool, 0,
VXLAN.UDP6ZeroCheckSumRx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumrx)
VXLAN.UDP6ZeroCheckSumTx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumtx)
VXLAN.FDBAgeingSec, config_parse_sec, 0, offsetof(VxLan, fdb_ageing)
+VXLAN.GroupPolicyExtension, config_parse_bool, 0, offsetof(VxLan, group_policy)
Tun.OneQueue, config_parse_bool, 0, offsetof(TunTap, one_queue)
Tun.MultiQueue, config_parse_bool, 0, offsetof(TunTap, multi_queue)
Tun.PacketInfo, config_parse_bool, 0, offsetof(TunTap, packet_info)
diff --git a/src/network/networkd-netdev-tunnel.c b/src/network/networkd-netdev-tunnel.c
index 7fd9ef584..265e67b7e 100644
--- a/src/network/networkd-netdev-tunnel.c
+++ b/src/network/networkd-netdev-tunnel.c
@@ -404,12 +404,6 @@ int config_parse_tunnel_address(const char *unit,
return 0;
}
-static const char* const ipv6_flowlabel_table[_NETDEV_IPV6_FLOWLABEL_MAX] = {
- [NETDEV_IPV6_FLOWLABEL_INHERIT] = "inherit",
-};
-
-DEFINE_STRING_TABLE_LOOKUP(ipv6_flowlabel, IPv6FlowLabel);
-
int config_parse_ipv6_flowlabel(const char* unit,
const char *filename,
unsigned line,
@@ -422,7 +416,6 @@ int config_parse_ipv6_flowlabel(const char* unit,
void *userdata) {
IPv6FlowLabel *ipv6_flowlabel = data;
Tunnel *t = userdata;
- IPv6FlowLabel s;
int k = 0;
int r;
@@ -431,12 +424,11 @@ int config_parse_ipv6_flowlabel(const char* unit,
assert(rvalue);
assert(ipv6_flowlabel);
- s = ipv6_flowlabel_from_string(rvalue);
- if (s != _NETDEV_IPV6_FLOWLABEL_INVALID) {
+ if (streq(rvalue, "inherit")) {
*ipv6_flowlabel = IP6_FLOWINFO_FLOWLABEL;
t->flags |= IP6_TNL_F_USE_ORIG_FLOWLABEL;
} else {
- r = config_parse_unsigned(unit, filename, line, section, section_line, lvalue, ltype, rvalue, &k, userdata);
+ r = config_parse_int(unit, filename, line, section, section_line, lvalue, ltype, rvalue, &k, userdata);
if (r >= 0) {
if (k > 0xFFFFF)
log_syntax(unit, LOG_ERR, filename, line, k, "Failed to parse IPv6 flowlabel option, ignoring: %s", rvalue);
diff --git a/src/network/networkd-netdev-tunnel.h b/src/network/networkd-netdev-tunnel.h
index 1fd2b94ae..e4fa74aef 100644
--- a/src/network/networkd-netdev-tunnel.h
+++ b/src/network/networkd-netdev-tunnel.h
@@ -45,6 +45,7 @@ struct Tunnel {
uint8_t encap_limit;
int family;
+ int ipv6_flowlabel;
unsigned ttl;
unsigned tos;
@@ -54,7 +55,6 @@ struct Tunnel {
union in_addr_union remote;
Ip6TnlMode ip6tnl_mode;
- IPv6FlowLabel ipv6_flowlabel;
bool pmtudisc;
bool copy_dscp;
@@ -90,9 +90,6 @@ int config_parse_tunnel_address(const char *unit,
void *data,
void *userdata);
-const char *ipv6_flowlabel_to_string(IPv6FlowLabel d) _const_;
-IPv6FlowLabel ipv6_flowlabel_from_string(const char *d) _pure_;
-
int config_parse_ipv6_flowlabel(const char *unit, const char *filename,
unsigned line, const char *section,
unsigned section_line, const char *lvalue,
diff --git a/src/network/networkd-netdev-vxlan.c b/src/network/networkd-netdev-vxlan.c
index 2a5c5f0ba..2518e2732 100644
--- a/src/network/networkd-netdev-vxlan.c
+++ b/src/network/networkd-netdev-vxlan.c
@@ -3,7 +3,7 @@
/***
This file is part of systemd.
- Copyright 2014 Susant Sahani
+ Copyright 2014 Susant Sahani
systemd is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by
@@ -101,6 +101,12 @@ static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netli
if (r < 0)
return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_UDP_ZERO_CSUM6_RX attribute: %m");
+ if (v->group_policy) {
+ r = sd_netlink_message_append_flag(m, IFLA_VXLAN_GBP);
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GBP attribute: %m");
+ }
+
return r;
}
diff --git a/src/network/networkd-netdev-vxlan.h b/src/network/networkd-netdev-vxlan.h
index e7d1306f1..4ec33946c 100644
--- a/src/network/networkd-netdev-vxlan.h
+++ b/src/network/networkd-netdev-vxlan.h
@@ -50,6 +50,7 @@ struct VxLan {
bool udpcsum;
bool udp6zerocsumtx;
bool udp6zerocsumrx;
+ bool group_policy;
};
extern const NetDevVTable vxlan_vtable;
diff --git a/src/network/networkd-wait-online-manager.c b/src/network/networkd-wait-online-manager.c
index 1fc724f5a..112d92a56 100644
--- a/src/network/networkd-wait-online-manager.c
+++ b/src/network/networkd-wait-online-manager.c
@@ -38,9 +38,15 @@ bool manager_ignore_link(Manager *m, Link *link) {
assert(m);
assert(link);
+ /* always ignore the loopback interface */
if (link->flags & IFF_LOOPBACK)
return true;
+ /* if interfaces are given on the command line, ignore all others */
+ if (m->interfaces && !strv_contains(m->interfaces, link->ifname))
+ return true;
+
+ /* ignore interfaces we explicitly are asked to ignore */
STRV_FOREACH(ignore, m->ignore)
if (fnmatch(*ignore, link->ifname, 0) == 0)
return true;
@@ -77,7 +83,7 @@ bool manager_all_configured(Manager *m) {
return false;
}
- if (streq(l->state, "configuring")) {
+ if (STR_IN_SET(l->state, "configuring", "pending")) {
log_debug("link %s is being processed by networkd",
l->ifname);
return false;
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 65b9a5071..d46f768cf 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -503,9 +503,8 @@ static int parse_argv(int argc, char *argv[]) {
break;
case 'u':
- free(arg_user);
- arg_user = strdup(optarg);
- if (!arg_user)
+ r = free_and_strdup(&arg_user, optarg);
+ if (r < 0)
return log_oom();
break;
diff --git a/src/run/run.c b/src/run/run.c
index 148854a9b..3dd97022d 100644
--- a/src/run/run.c
+++ b/src/run/run.c
@@ -1129,13 +1129,9 @@ int main(int argc, char* argv[]) {
}
if (arg_unit && isempty(description)) {
- free(description);
- description = strdup(arg_unit);
-
- if (!description) {
- r = log_oom();
+ r = free_and_strdup(&description, arg_unit);
+ if (r < 0)
goto finish;
- }
}
arg_description = description;
diff --git a/src/shared/ask-password-api.c b/src/shared/ask-password-api.c
index 3941605ce..ca4c24ebd 100644
--- a/src/shared/ask-password-api.c
+++ b/src/shared/ask-password-api.c
@@ -382,11 +382,9 @@ int ask_password_agent(
if (id)
fprintf(f, "Id=%s\n", id);
- fflush(f);
-
- if (ferror(f)) {
- log_error_errno(errno, "Failed to write query file: %m");
- r = -errno;
+ r = fflush_and_check(f);
+ if (r < 0) {
+ log_error_errno(r, "Failed to write query file: %m");
goto finish;
}
diff --git a/src/systemd/sd-netlink.h b/src/systemd/sd-netlink.h
index 24a9ed8e7..cb462bf48 100644
--- a/src/systemd/sd-netlink.h
+++ b/src/systemd/sd-netlink.h
@@ -69,6 +69,7 @@ int sd_netlink_attach_event(sd_netlink *nl, sd_event *e, int priority);
int sd_netlink_detach_event(sd_netlink *nl);
int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type, const char *data);
+int sd_netlink_message_append_flag(sd_netlink_message *m, unsigned short type);
int sd_netlink_message_append_u8(sd_netlink_message *m, unsigned short type, uint8_t data);
int sd_netlink_message_append_u16(sd_netlink_message *m, unsigned short type, uint16_t data);
int sd_netlink_message_append_u32(sd_netlink_message *m, unsigned short type, uint32_t data);
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
index d7ba48283..b3fa29b84 100644
--- a/src/sysusers/sysusers.c
+++ b/src/sysusers/sysusers.c
@@ -891,8 +891,10 @@ static int add_user(Item *i) {
i->uid = p->pw_uid;
i->uid_set = true;
- free(i->description);
- i->description = strdup(p->pw_gecos);
+ r = free_and_strdup(&i->description, p->pw_gecos);
+ if (r < 0)
+ return log_oom();
+
return 0;
}
if (!IN_SET(errno, 0, ENOENT))
@@ -1149,9 +1151,8 @@ static int process_item(Item *i) {
}
if (i->gid_path) {
- free(j->gid_path);
- j->gid_path = strdup(i->gid_path);
- if (!j->gid_path)
+ r = free_and_strdup(&j->gid_path, i->gid_path);
+ if (r < 0)
return log_oom();
}
diff --git a/src/timesync/timesyncd.c b/src/timesync/timesyncd.c
index b03020694..7b4178c99 100644
--- a/src/timesync/timesyncd.c
+++ b/src/timesync/timesyncd.c
@@ -113,10 +113,6 @@ int main(int argc, char *argv[]) {
if (r < 0)
goto finish;
- /* We need one process for ourselves, plus one thread for the asynchronous resolver */
- if (setrlimit(RLIMIT_NPROC, &RLIMIT_MAKE_CONST(2)) < 0)
- log_warning_errno(errno, "Failed to lower RLIMIT_NPROC to 2: %m");
-
assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0);
r = manager_new(&m);
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index d00f90afa..bbb9f9722 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -2429,8 +2429,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
rules_str(rules, rule->rule.filename_off), rule->rule.filename_line);
break;
}
- free(event->name);
- event->name = strdup(name_str);
+ free_and_strdup(&event->name, name_str);
log_debug("NAME '%s' %s:%u",
event->name,
rules_str(rules, rule->rule.filename_off),