summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README5
-rw-r--r--TODO11
-rw-r--r--configure.ac1
-rw-r--r--hwdb/20-OUI.hwdb785
-rw-r--r--hwdb/60-keyboard.hwdb3
-rw-r--r--man/hostnamectl.xml1
-rw-r--r--man/machine-info.xml1
-rw-r--r--man/systemctl.xml15
-rw-r--r--man/systemd.netdev.xml10
-rw-r--r--rules/50-udev-default.rules2
-rw-r--r--shell-completion/bash/hostnamectl2
-rw-r--r--shell-completion/zsh/_hostnamectl2
-rw-r--r--src/basic/architecture.h16
-rw-r--r--src/basic/in-addr-util.c12
-rw-r--r--src/basic/in-addr-util.h2
-rw-r--r--src/basic/socket-util.c20
-rw-r--r--src/basic/socket-util.h1
-rw-r--r--src/boot/efi/stub.c2
-rw-r--r--src/core/automount.c78
-rw-r--r--src/core/dbus-unit.c4
-rw-r--r--src/core/service.c14
-rw-r--r--src/core/unit.c1
-rw-r--r--src/cryptsetup/cryptsetup-generator.c8
-rw-r--r--src/gpt-auto-generator/gpt-auto-generator.c2
-rw-r--r--src/hostname/hostnamed.c5
-rw-r--r--src/libsystemd/sd-netlink/netlink-types.c2
l---------src/network/netdev/Makefile1
-rw-r--r--src/network/netdev/netdev-gperf.gperf184
-rw-r--r--src/network/netdev/tunnel.c4
-rw-r--r--src/network/netdev/vxlan.c70
-rw-r--r--src/network/netdev/vxlan.h27
-rw-r--r--src/network/networkd-address.c4
l---------src/network/wait-online/Makefile1
-rw-r--r--src/resolve/resolved-dns-trust-anchor.c72
-rw-r--r--src/run/run.c3
-rw-r--r--src/systemctl/systemctl.c1
-rw-r--r--src/test/test-socket-util.c19
37 files changed, 900 insertions, 491 deletions
diff --git a/README b/README
index ac8620c75b..a4a6493959 100644
--- a/README
+++ b/README
@@ -50,6 +50,11 @@ REQUIREMENTS:
CONFIG_PROC_FS
CONFIG_FHANDLE (libudev, mount and bind mount handling)
+ Kernel crypto/hash API
+ CONFIG_CRYPTO_USER_API_HASH
+ CONFIG_CRYPTO_HMAC
+ CONFIG_CRYPTO_SHA256
+
udev will fail to work with the legacy sysfs layout:
CONFIG_SYSFS_DEPRECATED=n
diff --git a/TODO b/TODO
index 3270dff402..3cf4ce393c 100644
--- a/TODO
+++ b/TODO
@@ -24,6 +24,10 @@ Janitorial Clean-ups:
Features:
+* sort generated hwdb files alphabetically when we import them, so that git
+ diffs remain minimal (in particular: the OUI databases we import are not
+ sorted, and not stable)
+
* set SystemCallArchitectures=native on all our services
* maybe add call sd_journal_set_block_timeout() or so to set SO_SNDTIMEO for
@@ -31,6 +35,9 @@ Features:
O_NONBLOCK on it. That way people can control if and when to block for
logging.
+* tighten sd_notify() MAINPID= checks a bit: don't accept foreign PIDs (i.e.
+ PIDs not managed by the service manager)
+
* journald: when we recv a log datagram via the native or syslog transports,
search for the PID in the active stream connections, and let's make sure to
always process the datagrams before the streams. Then, cache client metadata
@@ -38,6 +45,10 @@ Features:
quickly exiting processes which log as long as they had their own stream
connection...
+* hostnamed: populate form factor data from a new hwdb database, so that old
+ yogas can be recognized as "convertible" too, even if they predate the DMI
+ "convertible" form factor
+
* Maybe add a small tool invoked early at boot, that adds in or resizes
partitions automatically, to be used when the media used is actually larger
than the image written onto it is.
diff --git a/configure.ac b/configure.ac
index d98cc4d9ba..3835413ad5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -167,6 +167,7 @@ CC_CHECK_FLAGS_APPEND([with_cflags], [CFLAGS], [\
-Werror=implicit-function-declaration \
-Werror=missing-declarations \
-Werror=return-type \
+ -Werror=incompatible-pointer-types \
-Werror=format=2 \
-Wstrict-prototypes \
-Wredundant-decls \
diff --git a/hwdb/20-OUI.hwdb b/hwdb/20-OUI.hwdb
index f638b0dc34..2f0dbc9e74 100644
--- a/hwdb/20-OUI.hwdb
+++ b/hwdb/20-OUI.hwdb
@@ -1103,21 +1103,21 @@ OUI:70B3D58EC*
OUI:70B3D5CF5*
ID_OUI_FROM_DATABASE=Petring Energietechnik GmbH
-OUI:70B3D5269*
- ID_OUI_FROM_DATABASE=Gilbarco Veeder-Root ‎
-
OUI:70B3D5FF7*
ID_OUI_FROM_DATABASE=Cybercom AB
OUI:70B3D5DCC*
ID_OUI_FROM_DATABASE=Eutron SPA
-OUI:70B3D515C*
- ID_OUI_FROM_DATABASE=Woods Hole Oceanographic Institution
+OUI:70B3D5269*
+ ID_OUI_FROM_DATABASE=Gilbarco Veeder-Root ‎
OUI:70B3D5173*
ID_OUI_FROM_DATABASE=National TeleConsultants LLC
+OUI:70B3D515C*
+ ID_OUI_FROM_DATABASE=Woods Hole Oceanographic Institution
+
OUI:70B3D5CAE*
ID_OUI_FROM_DATABASE=THEMA
@@ -1133,12 +1133,12 @@ OUI:70B3D585A*
OUI:70B3D5FAF*
ID_OUI_FROM_DATABASE=Radig Hard & Software
-OUI:70B3D50BC*
- ID_OUI_FROM_DATABASE=Practical Software Studio LLC
-
OUI:70B3D57A2*
ID_OUI_FROM_DATABASE=Alpha ESS Co., Ltd.
+OUI:70B3D50BC*
+ ID_OUI_FROM_DATABASE=Practical Software Studio LLC
+
OUI:70B3D5724*
ID_OUI_FROM_DATABASE=Quan International Co., Ltd.
@@ -1196,6 +1196,15 @@ OUI:70B3D590D*
OUI:70B3D5C60*
ID_OUI_FROM_DATABASE=Gogo BA
+OUI:70B3D5A73*
+ ID_OUI_FROM_DATABASE=MobiPromo
+
+OUI:70B3D5585*
+ ID_OUI_FROM_DATABASE=Nefteavtomatika
+
+OUI:70B3D5495*
+ ID_OUI_FROM_DATABASE=Fiem Industries Ltd.
+
OUI:70B3D5D60*
ID_OUI_FROM_DATABASE=Flintab AB
@@ -2267,12 +2276,12 @@ OUI:70B3D521D*
OUI:70B3D5E9C*
ID_OUI_FROM_DATABASE=ATG UV Technology
-OUI:70B3D5267*
- ID_OUI_FROM_DATABASE=Zehntner Testing Instruments
-
OUI:70B3D539E*
ID_OUI_FROM_DATABASE=Lanmark Controls Inc.
+OUI:70B3D5267*
+ ID_OUI_FROM_DATABASE=Zehntner Testing Instruments
+
OUI:70B3D5C2E*
ID_OUI_FROM_DATABASE=Triax A/S
@@ -2315,12 +2324,12 @@ OUI:70B3D5DFD*
OUI:70B3D5B30*
ID_OUI_FROM_DATABASE=Systolé Hardware B.V.
-OUI:70B3D5745*
- ID_OUI_FROM_DATABASE=TMSI LLC
-
OUI:70B3D53BF*
ID_OUI_FROM_DATABASE=Star Electronics GmbH & Co. KG
+OUI:70B3D5745*
+ ID_OUI_FROM_DATABASE=TMSI LLC
+
OUI:70B3D5D1C*
ID_OUI_FROM_DATABASE=Specialised Imaging Limited
@@ -2333,12 +2342,12 @@ OUI:70B3D5ADF*
OUI:70B3D522C*
ID_OUI_FROM_DATABASE=Hiquel Elektronik- und Anlagenbau GmbH
-OUI:70B3D52A2*
- ID_OUI_FROM_DATABASE=Visualware, Inc.
-
OUI:70B3D5DCE*
ID_OUI_FROM_DATABASE=Stahl GmbH
+OUI:70B3D52A2*
+ ID_OUI_FROM_DATABASE=Visualware, Inc.
+
OUI:70B3D5D08*
ID_OUI_FROM_DATABASE=Veeco Instruments
@@ -2360,6 +2369,15 @@ OUI:70B3D5AF6*
OUI:70B3D5F37*
ID_OUI_FROM_DATABASE=Mitsubishi Electric Micro-Computer Application Software Co.,Ltd.
+OUI:70B3D58C3*
+ ID_OUI_FROM_DATABASE=Wyebot, Inc.
+
+OUI:70B3D542D*
+ ID_OUI_FROM_DATABASE=RCH Italia SpA
+
+OUI:70B3D5332*
+ ID_OUI_FROM_DATABASE=InnoSenT
+
OUI:70B3D5494*
ID_OUI_FROM_DATABASE=Schildknecht AG
@@ -3413,15 +3431,15 @@ OUI:70B3D516F*
OUI:70B3D59C0*
ID_OUI_FROM_DATABASE=Schneider Displaytechnik GmbH
-OUI:70B3D5149*
- ID_OUI_FROM_DATABASE=eleven-x
-
OUI:70B3D5E98*
ID_OUI_FROM_DATABASE=JSC Kaluga Astral
OUI:70B3D5443*
ID_OUI_FROM_DATABASE=Slot3 GmbH
+OUI:70B3D5149*
+ ID_OUI_FROM_DATABASE=eleven-x
+
OUI:70B3D5952*
ID_OUI_FROM_DATABASE=REQUEA
@@ -3434,12 +3452,12 @@ OUI:70B3D5C5C*
OUI:70B3D5F3B*
ID_OUI_FROM_DATABASE=Epdm Pty Ltd
-OUI:70B3D59F6*
- ID_OUI_FROM_DATABASE=Edgeware AB
-
OUI:70B3D536F*
ID_OUI_FROM_DATABASE=BuddyGuard GmbH
+OUI:70B3D59F6*
+ ID_OUI_FROM_DATABASE=Edgeware AB
+
OUI:70B3D5222*
ID_OUI_FROM_DATABASE=Marioff Corporation Oy
@@ -3500,6 +3518,21 @@ OUI:70B3D5572*
OUI:70B3D5927*
ID_OUI_FROM_DATABASE=LG Electronics
+OUI:70B3D5489*
+ ID_OUI_FROM_DATABASE=ard sa
+
+OUI:70B3D52B1*
+ ID_OUI_FROM_DATABASE=WIXCON Co., Ltd
+
+OUI:70B3D5B6A*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+
+OUI:70B3D5579*
+ ID_OUI_FROM_DATABASE=Chelsea Technologies Group Ltd
+
+OUI:70B3D59B2*
+ ID_OUI_FROM_DATABASE=CONTINENT, Ltd
+
OUI:70B3D566B*
ID_OUI_FROM_DATABASE=Innitive B.V.
@@ -4526,12 +4559,12 @@ OUI:70B3D590B*
OUI:70B3D5C4B*
ID_OUI_FROM_DATABASE=ANKER-EAST
-OUI:70B3D568E*
- ID_OUI_FROM_DATABASE=CEA Technologies Pty Ltd
-
OUI:70B3D5542*
ID_OUI_FROM_DATABASE=RTDS Technologies Inc.
+OUI:70B3D568E*
+ ID_OUI_FROM_DATABASE=CEA Technologies Pty Ltd
+
OUI:70B3D51E4*
ID_OUI_FROM_DATABASE=Tecnologix s.r.l.
@@ -4556,15 +4589,15 @@ OUI:70B3D5FBF*
OUI:70B3D5825*
ID_OUI_FROM_DATABASE=TATTILE SRL
-OUI:70B3D5D37*
- ID_OUI_FROM_DATABASE=Sicon srl
-
OUI:70B3D5039*
ID_OUI_FROM_DATABASE=DoWoo Digitech
OUI:70B3D527E*
ID_OUI_FROM_DATABASE=Mettler Toledo Hi Speed
+OUI:70B3D5D37*
+ ID_OUI_FROM_DATABASE=Sicon srl
+
OUI:70B3D5F83*
ID_OUI_FROM_DATABASE=Tata Communications Ltd.
@@ -4577,33 +4610,33 @@ OUI:70B3D50D9*
OUI:70B3D537C*
ID_OUI_FROM_DATABASE=Merus Power Dynamics Ltd.
-OUI:70B3D5EF8*
- ID_OUI_FROM_DATABASE=DKS Dienstl.ges. f. Komm.anl. d. Stadt- u. Reg.verk. mbH
-
OUI:70B3D54CF*
ID_OUI_FROM_DATABASE=GREEN HOUSE CO., LTD.
+OUI:70B3D5EF8*
+ ID_OUI_FROM_DATABASE=DKS Dienstl.ges. f. Komm.anl. d. Stadt- u. Reg.verk. mbH
+
OUI:70B3D5D58*
ID_OUI_FROM_DATABASE=Idyllic Engineering Pte Ltd
OUI:70B3D5954*
ID_OUI_FROM_DATABASE=Dot System S.r.l.
-OUI:70B3D5D40*
- ID_OUI_FROM_DATABASE=CRDE
-
OUI:70B3D5880*
ID_OUI_FROM_DATABASE=Skopei B.V.
+OUI:70B3D5D40*
+ ID_OUI_FROM_DATABASE=CRDE
+
OUI:70B3D551C*
ID_OUI_FROM_DATABASE=ATX Networks Corp
-OUI:70B3D5FBD*
- ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
-
OUI:70B3D5511*
ID_OUI_FROM_DATABASE=Next Sight srl
+OUI:70B3D5FBD*
+ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+
OUI:70B3D5FA7*
ID_OUI_FROM_DATABASE=Nordson Corporation
@@ -4622,12 +4655,12 @@ OUI:70B3D5902*
OUI:70B3D5AD1*
ID_OUI_FROM_DATABASE=Sensile Technologies SA
-OUI:70B3D5397*
- ID_OUI_FROM_DATABASE=Guangxi Hunter Information Industry Co.,Ltd
-
OUI:70B3D5637*
ID_OUI_FROM_DATABASE=INEO-SENSE
+OUI:70B3D5397*
+ ID_OUI_FROM_DATABASE=Guangxi Hunter Information Industry Co.,Ltd
+
OUI:70B3D5378*
ID_OUI_FROM_DATABASE=synchrotron SOLEIL
@@ -4661,11 +4694,23 @@ OUI:70B3D5022*
OUI:70B3D5135*
ID_OUI_FROM_DATABASE=DORLET SAU
+OUI:70B3D5FF1*
+ ID_OUI_FROM_DATABASE=Data Strategy Limited
+
OUI:70B3D5002*
ID_OUI_FROM_DATABASE=Gogo BA
-OUI:70B3D5FF1*
- ID_OUI_FROM_DATABASE=Data Strategy Limited
+OUI:70B3D50B0*
+ ID_OUI_FROM_DATABASE=Raven Systems Design, Inc
+
+OUI:70B3D5596*
+ ID_OUI_FROM_DATABASE=Mencom Corporation
+
+OUI:70B3D5138*
+ ID_OUI_FROM_DATABASE=SMITEC S.p.A.
+
+OUI:70B3D517A*
+ ID_OUI_FROM_DATABASE=Gencoa Ltd
OUI:70B3D58AB*
ID_OUI_FROM_DATABASE=EMAC, Inc.
@@ -5681,12 +5726,12 @@ OUI:70B3D520D*
OUI:70B3D5D55*
ID_OUI_FROM_DATABASE=WM Design s.r.o
-OUI:70B3D5E67*
- ID_OUI_FROM_DATABASE=APPLIED PROCESSING
-
OUI:70B3D5523*
ID_OUI_FROM_DATABASE=Tibit Communications
+OUI:70B3D5E67*
+ ID_OUI_FROM_DATABASE=APPLIED PROCESSING
+
OUI:70B3D5241*
ID_OUI_FROM_DATABASE=Bolide Technology Group, Inc.
@@ -5717,15 +5762,15 @@ OUI:70B3D5A05*
OUI:70B3D5AA6*
ID_OUI_FROM_DATABASE=Proximus
-OUI:70B3D51D4*
- ID_OUI_FROM_DATABASE=Brinkmann Audio GmbH
-
OUI:70B3D55E5*
ID_OUI_FROM_DATABASE=HAIYANG OLIX CO.,LTD.
OUI:70B3D5E2C*
ID_OUI_FROM_DATABASE=Fourth Frontier Technologies Private Limited
+OUI:70B3D51D4*
+ ID_OUI_FROM_DATABASE=Brinkmann Audio GmbH
+
OUI:70B3D55CA*
ID_OUI_FROM_DATABASE=ACD Elekronik GmbH
@@ -5759,12 +5804,12 @@ OUI:70B3D5EC8*
OUI:70B3D53F0*
ID_OUI_FROM_DATABASE=Intervala
-OUI:70B3D5BD1*
- ID_OUI_FROM_DATABASE=CableLabs
-
OUI:70B3D5B1A*
ID_OUI_FROM_DATABASE=Aaronia AG
+OUI:70B3D5BD1*
+ ID_OUI_FROM_DATABASE=CableLabs
+
OUI:70B3D5F0D*
ID_OUI_FROM_DATABASE=MeQ Inc.
@@ -5795,6 +5840,18 @@ OUI:70B3D52C2*
OUI:70B3D5BF3*
ID_OUI_FROM_DATABASE=CG-WIRELESS
+OUI:70B3D59A1*
+ ID_OUI_FROM_DATABASE=ITS Industrial Turbine Services GmbH
+
+OUI:70B3D5861*
+ ID_OUI_FROM_DATABASE=KST technology
+
+OUI:70B3D5442*
+ ID_OUI_FROM_DATABASE=Blair Companies
+
+OUI:70B3D5C74*
+ ID_OUI_FROM_DATABASE=Qtechnology A/S
+
OUI:1C8776D*
ID_OUI_FROM_DATABASE=Qivivo
@@ -6554,12 +6611,12 @@ OUI:40F3854*
OUI:40F3859*
ID_OUI_FROM_DATABASE=Fast Precision Technologies Co. Ltd.
-OUI:40F3850*
- ID_OUI_FROM_DATABASE=SubPac
-
OUI:1CA0D32*
ID_OUI_FROM_DATABASE=NovTech, Inc.
+OUI:40F3850*
+ ID_OUI_FROM_DATABASE=SubPac
+
OUI:38FDFEC*
ID_OUI_FROM_DATABASE=New Garden Co., Ltd.
@@ -6599,12 +6656,12 @@ OUI:98AAFC8*
OUI:98AAFCC*
ID_OUI_FROM_DATABASE=dots Inc.
-OUI:08ED023*
- ID_OUI_FROM_DATABASE=Jiangsu Logread Network Technology Co., LTD.
-
OUI:08ED026*
ID_OUI_FROM_DATABASE=SANGO ELECTRONICS CO
+OUI:08ED023*
+ ID_OUI_FROM_DATABASE=Jiangsu Logread Network Technology Co., LTD.
+
OUI:08ED024*
ID_OUI_FROM_DATABASE=Fio Corporation
@@ -6623,6 +6680,21 @@ OUI:60D7E30*
OUI:F023B98*
ID_OUI_FROM_DATABASE=G3 TECHNOLOGIES< INC
+OUI:F023B9E*
+ ID_OUI_FROM_DATABASE=Domotz Ltd
+
+OUI:F023B92*
+ ID_OUI_FROM_DATABASE=Raysgem Electronics and Technology Co.Ltd
+
+OUI:F023B95*
+ ID_OUI_FROM_DATABASE=Audeara Pty. Ltd.
+
+OUI:8C147DC*
+ ID_OUI_FROM_DATABASE=Reynaers Aluminium
+
+OUI:8C147D0*
+ ID_OUI_FROM_DATABASE=Nio
+
OUI:1C8776C*
ID_OUI_FROM_DATABASE=Strone Technology
@@ -7400,15 +7472,15 @@ OUI:40F3855*
OUI:1CA0D35*
ID_OUI_FROM_DATABASE=Dynamic Connect (Suzhou) Hi-Tech Electronic Co.,Ltd.
+OUI:1CA0D33*
+ ID_OUI_FROM_DATABASE=SAVELEC
+
OUI:1CA0D37*
ID_OUI_FROM_DATABASE=Private
OUI:A411634*
ID_OUI_FROM_DATABASE=AlterG, Inc.
-OUI:1CA0D33*
- ID_OUI_FROM_DATABASE=SAVELEC
-
OUI:A411631*
ID_OUI_FROM_DATABASE=INTER CONTROL Hermann Köhler Elektrik GmbH & Co.KG
@@ -7454,6 +7526,18 @@ OUI:04714B2*
OUI:04714B8*
ID_OUI_FROM_DATABASE=Energport Inc
+OUI:8C147D5*
+ ID_OUI_FROM_DATABASE=Unwired Networks
+
+OUI:F023B94*
+ ID_OUI_FROM_DATABASE=EZVIS LIMITED
+
+OUI:F023B9A*
+ ID_OUI_FROM_DATABASE=annapurnalabs
+
+OUI:8C147D2*
+ ID_OUI_FROM_DATABASE=Agilent S.p.A
+
OUI:1C87765*
ID_OUI_FROM_DATABASE=Zhuhai MYZR Technology Co.,Ltd
@@ -9245,6 +9329,15 @@ OUI:F023B9D*
OUI:F023B96*
ID_OUI_FROM_DATABASE=Xiamen Jinhaode Electronic Co.,Ltd
+OUI:F023B9C*
+ ID_OUI_FROM_DATABASE=Shenzhen Lachesis Mhealth Co., Ltd.
+
+OUI:8C147DA*
+ ID_OUI_FROM_DATABASE=Bluemega Document & Print Services
+
+OUI:8C147D1*
+ ID_OUI_FROM_DATABASE=Private
+
OUI:1C87740*
ID_OUI_FROM_DATABASE=Philips Personal Health Solutions
@@ -10034,6 +10127,18 @@ OUI:04714BA*
OUI:F023B97*
ID_OUI_FROM_DATABASE=Transcend Building Automation control network corporation
+OUI:F023B93*
+ ID_OUI_FROM_DATABASE=BSP RUS Ltd.
+
+OUI:8C147DD*
+ ID_OUI_FROM_DATABASE=Shenzhen Lanxus technology Co. Ltd.
+
+OUI:8C147D3*
+ ID_OUI_FROM_DATABASE=Remotec Technology Limited
+
+OUI:8C147D4*
+ ID_OUI_FROM_DATABASE=Nanjing bilian information Technology Co.,Ltd.
+
OUI:E043DB*
ID_OUI_FROM_DATABASE=Shenzhen ViewAt Technology Co.,Ltd.
@@ -10535,30 +10640,6 @@ OUI:781DBA*
OUI:001E10*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:B0ADAA*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:10CDAE*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:50CD22*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:FCA841*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:3CB15B*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:C8F406*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:2CF4C5*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:7038EE*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:88F031*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -22577,9 +22658,6 @@ OUI:00B0B3*
OUI:14825B*
ID_OUI_FROM_DATABASE=Hefei Radio Communication Technology Co., Ltd
-OUI:00549F*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:00562B*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -23384,9 +23462,6 @@ OUI:A49B13*
OUI:542F8A*
ID_OUI_FROM_DATABASE=TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO
-OUI:6049C1*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:DCC64B*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -23891,6 +23966,51 @@ OUI:30C3D9*
OUI:FC4D8C*
ID_OUI_FROM_DATABASE=SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD
+OUI:B01F29*
+ ID_OUI_FROM_DATABASE=Helvetia INC.
+
+OUI:CC0677*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
+OUI:28070D*
+ ID_OUI_FROM_DATABASE=GUANGZHOU WINSOUND INFORMATION TECHNOLOGY CO.,LTD.
+
+OUI:7038EE*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:2CF4C5*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:C8F406*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:3CB15B*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:FCA841*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:50CD22*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:10CDAE*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:B0ADAA*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:00549F*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:6049C1*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:E0D848*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
+OUI:145BE1*
+ ID_OUI_FROM_DATABASE=nyantec UG (haftungsbeschränkt)
+
OUI:0C6F9C*
ID_OUI_FROM_DATABASE=Shaw Communications Inc.
@@ -24152,21 +24272,6 @@ OUI:0019C6*
OUI:0015EB*
ID_OUI_FROM_DATABASE=zte corporation
-OUI:A051C6*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:24D921*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:848371*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:7052C5*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:001B4F*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:F0EBD0*
ID_OUI_FROM_DATABASE=Shanghai Feixun Communication Co.,Ltd.
@@ -24302,15 +24407,6 @@ OUI:00259E*
OUI:001882*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:D4EA0E*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:B4475E*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:90FB5B*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:00906F*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -26522,9 +26618,6 @@ OUI:BC811F*
OUI:34E0CF*
ID_OUI_FROM_DATABASE=zte corporation
-OUI:801DAA*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:6C40C6*
ID_OUI_FROM_DATABASE=Nimbus Data Systems, Inc.
@@ -36125,9 +36218,6 @@ OUI:B824F0*
OUI:B456B9*
ID_OUI_FROM_DATABASE=Teraspek Technologies Co.,Ltd
-OUI:A009ED*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:68B35E*
ID_OUI_FROM_DATABASE=Shenzhen Neostra Technology Co.Ltd
@@ -37736,6 +37826,51 @@ OUI:206BE7*
OUI:4857DD*
ID_OUI_FROM_DATABASE=Facebook Inc
+OUI:30074D*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
+OUI:681DEF*
+ ID_OUI_FROM_DATABASE=Shenzhen CYX Technology Co., Ltd.
+
+OUI:AC203E*
+ ID_OUI_FROM_DATABASE=Wuhan Tianyu Information Industry Co., Ltd.
+
+OUI:00A3D1*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:801DAA*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:001B4F*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:7052C5*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:848371*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:24D921*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:A051C6*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:90EC50*
+ ID_OUI_FROM_DATABASE=C.O.B.O. SPA
+
+OUI:B4475E*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:D4EA0E*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:A009ED*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:90FB5B*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
OUI:5846E1*
ID_OUI_FROM_DATABASE=Baxter International Inc
@@ -38057,18 +38192,6 @@ OUI:005053*
OUI:00500F*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:048A15*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:44322A*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:FC8399*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:00040D*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:D842AC*
ID_OUI_FROM_DATABASE=Shanghai Feixun Communication Co.,Ltd.
@@ -38174,24 +38297,6 @@ OUI:308730*
OUI:002568*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:D47856*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:C057BC*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:38BB3C*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:E45D52*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:A4251B*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:6CA849*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:30D17E*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -50576,9 +50681,6 @@ OUI:407183*
OUI:0059DC*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:14612F*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:ACF85C*
ID_OUI_FROM_DATABASE=Private
@@ -50699,9 +50801,6 @@ OUI:0060BD*
OUI:AC83F3*
ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
-OUI:707C69*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:18DBF2*
ID_OUI_FROM_DATABASE=Dell Inc.
@@ -50894,45 +50993,45 @@ OUI:04DEF2*
OUI:00D071*
ID_OUI_FROM_DATABASE=ECHELON CORP.
-OUI:504061*
- ID_OUI_FROM_DATABASE=Nokia
-
OUI:0030C5*
ID_OUI_FROM_DATABASE=CADENCE DESIGN SYSTEMS, INC.
-OUI:54E3F6*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent
+OUI:504061*
+ ID_OUI_FROM_DATABASE=Nokia
OUI:7467F7*
ID_OUI_FROM_DATABASE=Extreme Networks
-OUI:B0C205*
- ID_OUI_FROM_DATABASE=BIONIME
-
-OUI:0C61CF*
- ID_OUI_FROM_DATABASE=Texas Instruments
-
OUI:B4C799*
ID_OUI_FROM_DATABASE=Extreme Networks
+OUI:54E3F6*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent
+
OUI:5C0E8B*
ID_OUI_FROM_DATABASE=Extreme Networks
OUI:00E02B*
ID_OUI_FROM_DATABASE=Extreme Networks
+OUI:B0C205*
+ ID_OUI_FROM_DATABASE=BIONIME
+
+OUI:0C61CF*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
OUI:7C2664*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+OUI:E47DEB*
+ ID_OUI_FROM_DATABASE=Shanghai Notion Information Technology CO.,LTD.
+
OUI:A002DC*
ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
OUI:0C47C9*
ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
-OUI:E47DEB*
- ID_OUI_FROM_DATABASE=Shanghai Notion Information Technology CO.,LTD.
-
OUI:28EF01*
ID_OUI_FROM_DATABASE=Private
@@ -51011,15 +51110,15 @@ OUI:90F305*
OUI:00093A*
ID_OUI_FROM_DATABASE=Molex
-OUI:C8F86D*
- ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
-
OUI:B8D50B*
ID_OUI_FROM_DATABASE=Sunitec Enterprise Co.,Ltd
OUI:28A6DB*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+OUI:C8F86D*
+ ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd
+
OUI:D45F25*
ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
@@ -51044,12 +51143,6 @@ OUI:F4DE0C*
OUI:BC8AE8*
ID_OUI_FROM_DATABASE=QING DAO HAIER TELECOM CO.,LTD.
-OUI:A81B5A*
- ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-
-OUI:DC6DCD*
- ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-
OUI:440444*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
@@ -51065,8 +51158,11 @@ OUI:38295A*
OUI:4C1A3D*
ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
-OUI:185207*
- ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO., LTD
+OUI:A81B5A*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
+OUI:DC6DCD*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
OUI:70D379*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
@@ -51074,6 +51170,9 @@ OUI:70D379*
OUI:7C4F7D*
ID_OUI_FROM_DATABASE=Sawwave
+OUI:185207*
+ ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO., LTD
+
OUI:9874DA*
ID_OUI_FROM_DATABASE=Infinix mobility limited
@@ -51101,48 +51200,57 @@ OUI:EC363F*
OUI:54FA3E*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:B8BBAF*
+OUI:0C8910*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:60C5AD*
+OUI:FCF136*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:28395E*
+OUI:981DFA*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:C4AE12*
+OUI:84A466*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:10D07A*
- ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
-
-OUI:0C8910*
+OUI:1867B0*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:FCF136*
+OUI:CCB11A*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:981DFA*
+OUI:B8BBAF*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:84A466*
+OUI:60C5AD*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:1867B0*
+OUI:28395E*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:CCB11A*
+OUI:C4AE12*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+OUI:10D07A*
+ ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
+
OUI:80B234*
ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
OUI:B877C3*
ID_OUI_FROM_DATABASE=METER Group
+OUI:003676*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:84E058*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:F07485*
ID_OUI_FROM_DATABASE=NGD Systems, Inc.
+OUI:347A60*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:BC644B*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
@@ -51167,6 +51275,24 @@ OUI:745612*
OUI:E46449*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:C005C2*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:6455B1*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:203D66*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:D404CD*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:446AB7*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
+OUI:2C9924*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
OUI:001BDD*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
@@ -51254,69 +51380,42 @@ OUI:8C09F4*
OUI:3CDFA9*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-OUI:003676*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:84E058*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:347A60*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:C005C2*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:6455B1*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:203D66*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:D404CD*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:446AB7*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
-OUI:2C9924*
- ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
-
OUI:105611*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:2C3AE8*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
OUI:DC74A8*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
OUI:C087EB*
ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
-OUI:2C3AE8*
- ID_OUI_FROM_DATABASE=Espressif Inc.
-
-OUI:74F61C*
- ID_OUI_FROM_DATABASE=HTC Corporation
-
OUI:E8B6C2*
ID_OUI_FROM_DATABASE=Juniper Networks
OUI:B0DAF9*
ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+OUI:74F61C*
+ ID_OUI_FROM_DATABASE=HTC Corporation
+
OUI:3438B7*
ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
OUI:5C1A6F*
ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd.
-OUI:487D2E*
- ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
-
OUI:B089C2*
ID_OUI_FROM_DATABASE=Zyptonite
OUI:F0D4F6*
ID_OUI_FROM_DATABASE=Lars Thrane A/S
+OUI:487D2E*
+ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+
OUI:0403D6*
ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
@@ -51326,11 +51425,74 @@ OUI:A0AFBD*
OUI:34D954*
ID_OUI_FROM_DATABASE=WiBotic Inc.
+OUI:6C60EB*
+ ID_OUI_FROM_DATABASE=ZHI YUAN ELECTRONICS CO., LIMITED
+
+OUI:AC4E2E*
+ ID_OUI_FROM_DATABASE=Shenzhen JingHanDa Electronics Co.Ltd
+
+OUI:B40016*
+ ID_OUI_FROM_DATABASE=INGENICO TERMINALS SAS
+
+OUI:0027E3*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:A0341B*
+ ID_OUI_FROM_DATABASE=TrackR, Inc
+
+OUI:FCA667*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
+OUI:784501*
+ ID_OUI_FROM_DATABASE=Biamp Systems
+
+OUI:488D36*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
+OUI:986F60*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
+OUI:4C189A*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
+OUI:E45D52*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:38BB3C*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:C057BC*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:D47856*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:14612F*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:707C69*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
OUI:A47886*
ID_OUI_FROM_DATABASE=Avaya Inc
-OUI:6C60EB*
- ID_OUI_FROM_DATABASE=ZHI YUAN ELECTRONICS CO., LIMITED
+OUI:44322A*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:048A15*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:6CA849*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:A4251B*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:00040D*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:FC8399*
+ ID_OUI_FROM_DATABASE=Avaya Inc
OUI:D86CE9*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
@@ -51698,24 +51860,6 @@ OUI:F4C714*
OUI:286ED4*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:A01290*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:F81547*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:506184*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:BCADAB*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:B4A95A*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:3C3A73*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:04F938*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -57197,9 +57341,6 @@ OUI:0018FB*
OUI:0019EE*
ID_OUI_FROM_DATABASE=CARLO GAVAZZI CONTROLS SPA-Controls Division
-OUI:0019F0*
- ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
-
OUI:0019F5*
ID_OUI_FROM_DATABASE=Imagination Technologies Ltd
@@ -65162,11 +65303,50 @@ OUI:F40E83*
OUI:7C8BCA*
ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
+OUI:88B111*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
+OUI:54D751*
+ ID_OUI_FROM_DATABASE=Proximus
+
OUI:D8F1F0*
ID_OUI_FROM_DATABASE=Pepxim International Limited
-OUI:88B111*
- ID_OUI_FROM_DATABASE=Intel Corporate
+OUI:0019F0*
+ ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+
+OUI:506E92*
+ ID_OUI_FROM_DATABASE=Innocent Technology Co., Ltd.
+
+OUI:CC4B73*
+ ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
+
+OUI:900A1A*
+ ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+
+OUI:CC03D9*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
+OUI:506184*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:F81547*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:A01290*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:B4A95A*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:BCADAB*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:3C3A73*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:60271C*
+ ID_OUI_FROM_DATABASE=VIDEOR E. Hartig GmbH
OUI:2C3996*
ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
@@ -65495,12 +65675,6 @@ OUI:08181A*
OUI:002512*
ID_OUI_FROM_DATABASE=zte corporation
-OUI:CCF954*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:703018*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:B0A37E*
ID_OUI_FROM_DATABASE=Qingdao Haier Telecom Co.,Ltd
@@ -65564,30 +65738,6 @@ OUI:84A8E4*
OUI:202BC1*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
-OUI:3475C7*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:6CFA58*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:64A7DD*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:646A52*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:F873A2*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:64C354*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:B4B017*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
-OUI:581626*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:741BB2*
ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -72836,9 +72986,6 @@ OUI:000C03*
OUI:000CA4*
ID_OUI_FROM_DATABASE=Prompttec Product Management GmbH
-OUI:000CAB*
- ID_OUI_FROM_DATABASE=COMMEND International
-
OUI:000C98*
ID_OUI_FROM_DATABASE=LETEK Communications Inc.
@@ -77210,9 +77357,6 @@ OUI:0C5A9E*
OUI:00C164*
ID_OUI_FROM_DATABASE=Cisco Systems, Inc
-OUI:C4BED4*
- ID_OUI_FROM_DATABASE=Avaya Inc
-
OUI:98E7F5*
ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -79063,3 +79207,60 @@ OUI:14780B*
OUI:74DADA*
ID_OUI_FROM_DATABASE=D-Link International
+
+OUI:4C910C*
+ ID_OUI_FROM_DATABASE=Corporativo Lanix S.A. de C.V.
+
+OUI:BCD713*
+ ID_OUI_FROM_DATABASE=Owl Labs
+
+OUI:E8E1E1*
+ ID_OUI_FROM_DATABASE=Gemtek Technology Co., Ltd.
+
+OUI:98F2B3*
+ ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
+
+OUI:BC1C81*
+ ID_OUI_FROM_DATABASE=Sichuan iLink Technology Co., Ltd.
+
+OUI:CCF954*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:581626*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:B4B017*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:64C354*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:F873A2*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:646A52*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:64A7DD*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:6CFA58*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:3475C7*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:C4BED4*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:30FE31*
+ ID_OUI_FROM_DATABASE=Nokia
+
+OUI:703018*
+ ID_OUI_FROM_DATABASE=Avaya Inc
+
+OUI:78B28D*
+ ID_OUI_FROM_DATABASE=Beijing Tengling Technology CO.Ltd
+
+OUI:000CAB*
+ ID_OUI_FROM_DATABASE=Commend International GmbH
diff --git a/hwdb/60-keyboard.hwdb b/hwdb/60-keyboard.hwdb
index 4201ad76fc..1aa729f047 100644
--- a/hwdb/60-keyboard.hwdb
+++ b/hwdb/60-keyboard.hwdb
@@ -133,6 +133,9 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:*
KEYBOARD_KEY_89=fastforward
KEYBOARD_KEY_9e=back
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*7750G:pvr*
+ KEYBOARD_KEY_e0=!pageup
+
# Travelmate C300
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:pvr*
KEYBOARD_KEY_67=f24 # FIXME: rotate screen
diff --git a/man/hostnamectl.xml b/man/hostnamectl.xml
index 9e1b593e6d..81bce2da6a 100644
--- a/man/hostnamectl.xml
+++ b/man/hostnamectl.xml
@@ -173,6 +173,7 @@
defined:
<literal>desktop</literal>,
<literal>laptop</literal>,
+ <literal>convertible</literal>,
<literal>server</literal>,
<literal>tablet</literal>,
<literal>handset</literal>,
diff --git a/man/machine-info.xml b/man/machine-info.xml
index 351133670b..cd5997d4e2 100644
--- a/man/machine-info.xml
+++ b/man/machine-info.xml
@@ -120,6 +120,7 @@
chassis types are defined:
<literal>desktop</literal>,
<literal>laptop</literal>,
+ <literal>convertible</literal>,
<literal>server</literal>,
<literal>tablet</literal>,
<literal>handset</literal>,
diff --git a/man/systemctl.xml b/man/systemctl.xml
index d0b39d771b..7e1864c4f1 100644
--- a/man/systemctl.xml
+++ b/man/systemctl.xml
@@ -712,8 +712,23 @@ kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
<listitem>
<para>List timer units currently in memory, ordered by the time they elapse next. If one or more
<replaceable>PATTERN</replaceable>s are specified, only units matching one of them are shown.
+ Produces output similar to
+ <programlisting>
+NEXT LEFT LAST PASSED UNIT ACTIVATES
+n/a n/a Thu 2017-02-23 13:40:29 EST 3 days ago ureadahead-stop.timer ureadahead-stop.service
+Sun 2017-02-26 18:55:42 EST 1min 14s left Thu 2017-02-23 13:54:44 EST 3 days ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
+Sun 2017-02-26 20:37:16 EST 1h 42min left Sun 2017-02-26 11:56:36 EST 6h ago apt-daily.timer apt-daily.service
+Sun 2017-02-26 20:57:49 EST 2h 3min left Sun 2017-02-26 11:56:36 EST 6h ago snapd.refresh.timer snapd.refresh.service
+ </programlisting>
</para>
+ <para><emphasis>NEXT</emphasis> shows the next time the timer will run.</para>
+ <para><emphasis>LEFT</emphasis> shows how long till the next time the timer runs.</para>
+ <para><emphasis>LAST</emphasis> shows the last time the timer ran.</para>
+ <para><emphasis>PASSED</emphasis> shows has long as passed since the timer laset ran.</para>
+ <para><emphasis>UNIT</emphasis> shows the name of the timer</para>
+ <para><emphasis>ACTIVATES</emphasis> shows the the name the service the timer activates when it runs.</para>
+
<para>Also see <option>--all</option> and <option>--state=</option>.</para>
</listitem>
</varlistentry>
diff --git a/man/systemd.netdev.xml b/man/systemd.netdev.xml
index ef6a37fe76..39e69480ec 100644
--- a/man/systemd.netdev.xml
+++ b/man/systemd.netdev.xml
@@ -469,12 +469,18 @@
</listitem>
</varlistentry>
<varlistentry>
- <term><varname>Group=</varname></term>
+ <term><varname>Remote=</varname></term>
<listitem>
- <para>An assigned multicast group IP address.</para>
+ <para>Configures destination multicast group IP address.</para>
</listitem>
</varlistentry>
<varlistentry>
+ <term><varname>Local=</varname></term>
+ <listitem>
+ <para>Configures local IP address.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
<term><varname>TOS=</varname></term>
<listitem>
<para>The Type Of Service byte value for a vxlan interface.</para>
diff --git a/rules/50-udev-default.rules b/rules/50-udev-default.rules
index e9eeb8518e..3347c8cd89 100644
--- a/rules/50-udev-default.rules
+++ b/rules/50-udev-default.rules
@@ -74,4 +74,6 @@ KERNEL=="tun", MODE="0666", OPTIONS+="static_node=net/tun"
KERNEL=="fuse", MODE="0666", OPTIONS+="static_node=fuse"
+SUBSYSTEM=="ptp", ATTR{clock_name}=="KVM virtual PTP", SYMLINK += "ptp_kvm"
+
LABEL="default_end"
diff --git a/shell-completion/bash/hostnamectl b/shell-completion/bash/hostnamectl
index 6a252188ea..7cf8b6f631 100644
--- a/shell-completion/bash/hostnamectl
+++ b/shell-completion/bash/hostnamectl
@@ -52,7 +52,7 @@ _hostnamectl() {
if [[ -z $verb ]]; then
comps=${VERBS[*]}
elif __contains_word "$verb" ${VERBS[CHASSIS]}; then
- comps='desktop laptop server tablet handset watch embedded vm container'
+ comps='desktop laptop convertible server tablet handset watch embedded vm container'
elif __contains_word "$verb" ${VERBS[STANDALONE]} ${VERBS[ICONS]} ${VERBS[NAME]}; then
comps=''
fi
diff --git a/shell-completion/zsh/_hostnamectl b/shell-completion/zsh/_hostnamectl
index 7528e0649d..8c4a354af2 100644
--- a/shell-completion/zsh/_hostnamectl
+++ b/shell-completion/zsh/_hostnamectl
@@ -18,7 +18,7 @@ _hostnamectl_set-icon-name() {
_hostnamectl_set-chassis() {
if (( CURRENT <= 3 )); then
- _chassis=( desktop laptop server tablet handset watch embedded vm container )
+ _chassis=( desktop laptop convertible server tablet handset watch embedded vm container )
_describe chassis _chassis
else
_message "no more options"
diff --git a/src/basic/architecture.h b/src/basic/architecture.h
index d6b8603b06..46883719d1 100644
--- a/src/basic/architecture.h
+++ b/src/basic/architecture.h
@@ -124,13 +124,21 @@ int uname_architecture(void);
#elif defined(__sparc__)
# define native_architecture() ARCHITECTURE_SPARC
# define LIB_ARCH_TUPLE "sparc-linux-gnu"
-#elif defined(__mips64__)
+#elif defined(__mips64) && defined(__LP64__)
# if __BYTE_ORDER == __BIG_ENDIAN
# define native_architecture() ARCHITECTURE_MIPS64
-# error "Missing LIB_ARCH_TUPLE for MIPS64"
+# define LIB_ARCH_TUPLE "mips64-linux-gnuabi64"
# else
# define native_architecture() ARCHITECTURE_MIPS64_LE
-# error "Missing LIB_ARCH_TUPLE for MIPS64_LE"
+# define LIB_ARCH_TUPLE "mips64el-linux-gnuabi64"
+# endif
+#elif defined(__mips64)
+# if __BYTE_ORDER == __BIG_ENDIAN
+# define native_architecture() ARCHITECTURE_MIPS64
+# define LIB_ARCH_TUPLE "mips64-linux-gnuabin32"
+# else
+# define native_architecture() ARCHITECTURE_MIPS64_LE
+# define LIB_ARCH_TUPLE "mips64el-linux-gnuabin32"
# endif
#elif defined(__mips__)
# if __BYTE_ORDER == __BIG_ENDIAN
@@ -187,7 +195,7 @@ int uname_architecture(void);
# define LIB_ARCH_TUPLE "m68k-linux-gnu"
#elif defined(__tilegx__)
# define native_architecture() ARCHITECTURE_TILEGX
-# error "Missing LIB_ARCH_TUPLE for TILEGX"
+# define LIB_ARCH_TUPLE "tilegx-linux-gnu"
#elif defined(__cris__)
# define native_architecture() ARCHITECTURE_CRIS
# error "Missing LIB_ARCH_TUPLE for CRIS"
diff --git a/src/basic/in-addr-util.c b/src/basic/in-addr-util.c
index 3b06cb00ad..3927df2955 100644
--- a/src/basic/in-addr-util.c
+++ b/src/basic/in-addr-util.c
@@ -66,6 +66,18 @@ int in_addr_is_link_local(int family, const union in_addr_union *u) {
return -EAFNOSUPPORT;
}
+int in_addr_is_multicast(int family, const union in_addr_union *u) {
+ assert(u);
+
+ if (family == AF_INET)
+ return IN_MULTICAST(be32toh(u->in.s_addr));
+
+ if (family == AF_INET6)
+ return IN6_IS_ADDR_MULTICAST(&u->in6);
+
+ return -EAFNOSUPPORT;
+}
+
bool in4_addr_is_localhost(const struct in_addr *a) {
assert(a);
diff --git a/src/basic/in-addr-util.h b/src/basic/in-addr-util.h
index 64a812c322..51a5aa67e4 100644
--- a/src/basic/in-addr-util.h
+++ b/src/basic/in-addr-util.h
@@ -39,6 +39,8 @@ struct in_addr_data {
bool in4_addr_is_null(const struct in_addr *a);
int in_addr_is_null(int family, const union in_addr_union *u);
+int in_addr_is_multicast(int family, const union in_addr_union *u);
+
bool in4_addr_is_link_local(const struct in_addr *a);
int in_addr_is_link_local(int family, const union in_addr_union *u);
diff --git a/src/basic/socket-util.c b/src/basic/socket-util.c
index 17e90a8994..e5847dce00 100644
--- a/src/basic/socket-util.c
+++ b/src/basic/socket-util.c
@@ -900,6 +900,26 @@ bool ifname_valid(const char *p) {
return true;
}
+bool address_label_valid(const char *p) {
+
+ if (isempty(p))
+ return false;
+
+ if (strlen(p) >= IFNAMSIZ)
+ return false;
+
+ while (*p) {
+ if ((uint8_t) *p >= 127U)
+ return false;
+
+ if ((uint8_t) *p <= 31U)
+ return false;
+ p++;
+ }
+
+ return true;
+}
+
int getpeercred(int fd, struct ucred *ucred) {
socklen_t n = sizeof(struct ucred);
struct ucred u;
diff --git a/src/basic/socket-util.h b/src/basic/socket-util.h
index 3c42e220e5..73c3a339fc 100644
--- a/src/basic/socket-util.h
+++ b/src/basic/socket-util.h
@@ -126,6 +126,7 @@ int ip_tos_to_string_alloc(int i, char **s);
int ip_tos_from_string(const char *s);
bool ifname_valid(const char *p);
+bool address_label_valid(const char *p);
int getpeercred(int fd, struct ucred *ucred);
int getpeersec(int fd, char **ret);
diff --git a/src/boot/efi/stub.c b/src/boot/efi/stub.c
index 7c1ffb1bca..b7d5d3cdae 100644
--- a/src/boot/efi/stub.c
+++ b/src/boot/efi/stub.c
@@ -87,7 +87,7 @@ EFI_STATUS efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *sys_table) {
cmdline_len = szs[0];
/* if we are not in secure boot mode, accept a custom command line and replace the built-in one */
- if (!secure && loaded_image->LoadOptionsSize > 0) {
+ if (!secure && loaded_image->LoadOptionsSize > 0 && *(CHAR16 *)loaded_image->LoadOptions != 0) {
CHAR16 *options;
CHAR8 *line;
UINTN i;
diff --git a/src/core/automount.c b/src/core/automount.c
index 8ff1ca90f7..99e8047620 100644
--- a/src/core/automount.c
+++ b/src/core/automount.c
@@ -101,17 +101,17 @@ static void unmount_autofs(Automount *a) {
a->pipe_event_source = sd_event_source_unref(a->pipe_event_source);
a->pipe_fd = safe_close(a->pipe_fd);
- /* If we reload/reexecute things we keep the mount point
- * around */
- if (a->where &&
- (UNIT(a)->manager->exit_code != MANAGER_RELOAD &&
- UNIT(a)->manager->exit_code != MANAGER_REEXECUTE)) {
+ /* If we reload/reexecute things we keep the mount point around */
+ if (!IN_SET(UNIT(a)->manager->exit_code, MANAGER_RELOAD, MANAGER_REEXECUTE)) {
+
automount_send_ready(a, a->tokens, -EHOSTDOWN);
automount_send_ready(a, a->expire_tokens, -EHOSTDOWN);
- r = repeat_unmount(a->where, MNT_DETACH);
- if (r < 0)
- log_error_errno(r, "Failed to unmount: %m");
+ if (a->where) {
+ r = repeat_unmount(a->where, MNT_DETACH);
+ if (r < 0)
+ log_error_errno(r, "Failed to unmount: %m");
+ }
}
}
@@ -186,6 +186,22 @@ static int automount_verify(Automount *a) {
return 0;
}
+static int automount_set_where(Automount *a) {
+ int r;
+
+ assert(a);
+
+ if (a->where)
+ return 0;
+
+ r = unit_name_to_path(UNIT(a)->id, &a->where);
+ if (r < 0)
+ return r;
+
+ path_kill_slashes(a->where);
+ return 1;
+}
+
static int automount_load(Unit *u) {
Automount *a = AUTOMOUNT(u);
int r;
@@ -201,13 +217,9 @@ static int automount_load(Unit *u) {
if (u->load_state == UNIT_LOADED) {
Unit *x;
- if (!a->where) {
- r = unit_name_to_path(u->id, &a->where);
- if (r < 0)
- return r;
- }
-
- path_kill_slashes(a->where);
+ r = automount_set_where(a);
+ if (r < 0)
+ return r;
r = unit_load_related_unit(u, ".mount", &x);
if (r < 0)
@@ -256,26 +268,30 @@ static int automount_coldplug(Unit *u) {
assert(a);
assert(a->state == AUTOMOUNT_DEAD);
- if (a->deserialized_state != a->state) {
+ if (a->deserialized_state == a->state)
+ return 0;
+
+ if (IN_SET(a->deserialized_state, AUTOMOUNT_WAITING, AUTOMOUNT_RUNNING)) {
+
+ r = automount_set_where(a);
+ if (r < 0)
+ return r;
r = open_dev_autofs(u->manager);
if (r < 0)
return r;
- if (a->deserialized_state == AUTOMOUNT_WAITING ||
- a->deserialized_state == AUTOMOUNT_RUNNING) {
- assert(a->pipe_fd >= 0);
+ assert(a->pipe_fd >= 0);
- r = sd_event_add_io(u->manager->event, &a->pipe_event_source, a->pipe_fd, EPOLLIN, automount_dispatch_io, u);
- if (r < 0)
- return r;
+ r = sd_event_add_io(u->manager->event, &a->pipe_event_source, a->pipe_fd, EPOLLIN, automount_dispatch_io, u);
+ if (r < 0)
+ return r;
- (void) sd_event_source_set_description(a->pipe_event_source, "automount-io");
- if (a->deserialized_state == AUTOMOUNT_RUNNING) {
- r = automount_start_expire(a);
- if (r < 0)
- log_unit_warning_errno(UNIT(a), r, "Failed to start expiration timer, ignoring: %m");
- }
+ (void) sd_event_source_set_description(a->pipe_event_source, "automount-io");
+ if (a->deserialized_state == AUTOMOUNT_RUNNING) {
+ r = automount_start_expire(a);
+ if (r < 0)
+ log_unit_warning_errno(UNIT(a), r, "Failed to start expiration timer, ignoring: %m");
}
automount_set_state(a, a->deserialized_state);
@@ -733,6 +749,12 @@ static void automount_enter_runnning(Automount *a) {
assert(a);
+ /* If the user masked our unit in the meantime, fail */
+ if (UNIT(a)->load_state != UNIT_LOADED) {
+ log_unit_error(UNIT(a), "Suppressing automount event since unit is no longer loaded.");
+ goto fail;
+ }
+
/* We don't take mount requests anymore if we are supposed to
* shut down anyway */
if (unit_stop_pending(UNIT(a))) {
diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c
index f1306a023f..f15bb2196c 100644
--- a/src/core/dbus-unit.c
+++ b/src/core/dbus-unit.c
@@ -1131,7 +1131,7 @@ void bus_unit_send_change_signal(Unit *u) {
if (!u->id)
return;
- r = bus_foreach_bus(u->manager, NULL, u->sent_dbus_new_signal ? send_changed_signal : send_new_signal, u);
+ r = bus_foreach_bus(u->manager, u->bus_track, u->sent_dbus_new_signal ? send_changed_signal : send_new_signal, u);
if (r < 0)
log_unit_debug_errno(u, r, "Failed to send unit change signal for %s: %m", u->id);
@@ -1177,7 +1177,7 @@ void bus_unit_send_removed_signal(Unit *u) {
if (!u->id)
return;
- r = bus_foreach_bus(u->manager, NULL, send_removed_signal, u);
+ r = bus_foreach_bus(u->manager, u->bus_track, send_removed_signal, u);
if (r < 0)
log_unit_debug_errno(u, r, "Failed to send unit remove signal for %s: %m", u->id);
}
diff --git a/src/core/service.c b/src/core/service.c
index 5581ec8b06..74054887b9 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -849,11 +849,8 @@ static int service_load_pid_file(Service *s, bool may_warn) {
return r;
r = unit_watch_pid(UNIT(s), pid);
- if (r < 0) {
- /* FIXME: we need to do something here */
- log_unit_warning_errno(UNIT(s), r, "Failed to watch PID "PID_FMT" for service: %m", pid);
- return r;
- }
+ if (r < 0) /* FIXME: we need to do something here */
+ return log_unit_warning_errno(UNIT(s), r, "Failed to watch PID "PID_FMT" for service: %m", pid);
return 0;
}
@@ -1374,8 +1371,7 @@ static int service_spawn(
return r;
r = unit_watch_pid(UNIT(s), pid);
- if (r < 0)
- /* FIXME: we need to do something here */
+ if (r < 0) /* FIXME: we need to do something here */
return r;
*_pid = pid;
@@ -3097,6 +3093,8 @@ static void service_notify_message(Unit *u, pid_t pid, char **tags, FDSet *fds)
log_unit_warning(u, "Failed to parse MAINPID= field in notification message: %s", e);
else if (pid == s->control_pid)
log_unit_warning(u, "A control process cannot also be the main process");
+ else if (pid == getpid() || pid == 1)
+ log_unit_warning(u, "Service manager can't be main process, ignoring sd_notify() MAINPID= field");
else {
service_set_main_pid(s, pid);
unit_watch_pid(UNIT(s), pid);
@@ -3286,7 +3284,7 @@ static void service_bus_name_owner_change(
if (r >= 0)
r = sd_bus_creds_get_pid(creds, &pid);
if (r >= 0) {
- log_unit_debug(u, "D-Bus name %s is now owned by process %u", name, (unsigned) pid);
+ log_unit_debug(u, "D-Bus name %s is now owned by process " PID_FMT, name, pid);
service_set_main_pid(s, pid);
unit_watch_pid(UNIT(s), pid);
diff --git a/src/core/unit.c b/src/core/unit.c
index 174dd42819..b091a0999b 100644
--- a/src/core/unit.c
+++ b/src/core/unit.c
@@ -402,6 +402,7 @@ void unit_add_to_dbus_queue(Unit *u) {
/* Shortcut things if nobody cares */
if (sd_bus_track_count(u->manager->subscribed) <= 0 &&
+ sd_bus_track_count(u->bus_track) <= 0 &&
set_isempty(u->manager->private_buses)) {
u->sent_dbus_new_signal = true;
return;
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
index 23bf014929..b58b6db7c9 100644
--- a/src/cryptsetup/cryptsetup-generator.c
+++ b/src/cryptsetup/cryptsetup-generator.c
@@ -144,13 +144,17 @@ static int create_disk(
}
}
- if (is_device_path(u))
+ if (is_device_path(u)) {
fprintf(f,
"BindsTo=%s\n"
"After=%s\n"
"Before=umount.target\n",
d, d);
- else
+
+ if (swap)
+ fputs("Before=dev-mapper-%i.swap\n",
+ f);
+ } else
fprintf(f,
"RequiresMountsFor=%s\n",
u);
diff --git a/src/gpt-auto-generator/gpt-auto-generator.c b/src/gpt-auto-generator/gpt-auto-generator.c
index b958070c90..80f676e477 100644
--- a/src/gpt-auto-generator/gpt-auto-generator.c
+++ b/src/gpt-auto-generator/gpt-auto-generator.c
@@ -475,7 +475,7 @@ static int add_esp(DissectedPartition *p) {
120 * USEC_PER_SEC);
}
#else
-static int add_esp(const char *what) {
+static int add_esp(DissectedPartition *p) {
return 0;
}
#endif
diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c
index 4657cf8c77..fe0aa00efb 100644
--- a/src/hostname/hostnamed.c
+++ b/src/hostname/hostnamed.c
@@ -133,6 +133,7 @@ static bool valid_chassis(const char *chassis) {
"container\0"
"desktop\0"
"laptop\0"
+ "convertible\0"
"server\0"
"tablet\0"
"handset\0"
@@ -199,6 +200,10 @@ static const char* fallback_chassis(void) {
case 0x1E: /* Tablet */
return "tablet";
+
+ case 0x1F: /* Convertible */
+ case 0x20: /* Detachable */
+ return "convertible";
}
try_acpi:
diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c
index 0f8b0cc70b..ff0e99558e 100644
--- a/src/libsystemd/sd-netlink/netlink-types.c
+++ b/src/libsystemd/sd-netlink/netlink-types.c
@@ -149,7 +149,7 @@ static const NLType rtnl_link_info_data_vxlan_types[] = {
[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_LOCAL] = { .type = NETLINK_TYPE_IN_ADDR },
[IFLA_VXLAN_TTL] = { .type = NETLINK_TYPE_U8 },
[IFLA_VXLAN_TOS] = { .type = NETLINK_TYPE_U8 },
[IFLA_VXLAN_LEARNING] = { .type = NETLINK_TYPE_U8 },
diff --git a/src/network/netdev/Makefile b/src/network/netdev/Makefile
new file mode 120000
index 0000000000..94aaae2c4d
--- /dev/null
+++ b/src/network/netdev/Makefile
@@ -0,0 +1 @@
+../../Makefile \ No newline at end of file
diff --git a/src/network/netdev/netdev-gperf.gperf b/src/network/netdev/netdev-gperf.gperf
index e74ae9eb9f..e19fa9817e 100644
--- a/src/network/netdev/netdev-gperf.gperf
+++ b/src/network/netdev/netdev-gperf.gperf
@@ -26,94 +26,96 @@ struct ConfigPerfItem;
%struct-type
%includes
%%
-Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(NetDev, match_host)
-Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(NetDev, match_virt)
-Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(NetDev, match_kernel)
-Match.Architecture, config_parse_net_condition, CONDITION_ARCHITECTURE, offsetof(NetDev, match_arch)
-NetDev.Description, config_parse_string, 0, offsetof(NetDev, description)
-NetDev.Name, config_parse_ifname, 0, offsetof(NetDev, ifname)
-NetDev.Kind, config_parse_netdev_kind, 0, offsetof(NetDev, kind)
-NetDev.MTUBytes, config_parse_iec_size, 0, offsetof(NetDev, mtu)
-NetDev.MACAddress, config_parse_hwaddr, 0, offsetof(NetDev, mac)
-VLAN.Id, config_parse_vlanid, 0, offsetof(VLan, id)
-MACVLAN.Mode, config_parse_macvlan_mode, 0, offsetof(MacVlan, mode)
-MACVTAP.Mode, config_parse_macvlan_mode, 0, offsetof(MacVlan, mode)
-IPVLAN.Mode, config_parse_ipvlan_mode, 0, offsetof(IPVlan, mode)
-Tunnel.Local, config_parse_tunnel_address, 0, offsetof(Tunnel, local)
-Tunnel.Remote, config_parse_tunnel_address, 0, offsetof(Tunnel, remote)
-Tunnel.TOS, config_parse_unsigned, 0, offsetof(Tunnel, tos)
-Tunnel.TTL, config_parse_unsigned, 0, offsetof(Tunnel, ttl)
-Tunnel.Key, config_parse_tunnel_key, 0, offsetof(Tunnel, key)
-Tunnel.InputKey, config_parse_tunnel_key, 0, offsetof(Tunnel, ikey)
-Tunnel.OutputKey, config_parse_tunnel_key, 0, offsetof(Tunnel, okey)
-Tunnel.DiscoverPathMTU, config_parse_bool, 0, offsetof(Tunnel, pmtudisc)
-Tunnel.Mode, config_parse_ip6tnl_mode, 0, offsetof(Tunnel, ip6tnl_mode)
-Tunnel.IPv6FlowLabel, config_parse_ipv6_flowlabel, 0, offsetof(Tunnel, ipv6_flowlabel)
-Tunnel.CopyDSCP, config_parse_bool, 0, offsetof(Tunnel, copy_dscp)
-Tunnel.EncapsulationLimit, config_parse_encap_limit, 0, offsetof(Tunnel, encap_limit)
-Peer.Name, config_parse_ifname, 0, offsetof(Veth, ifname_peer)
-Peer.MACAddress, config_parse_hwaddr, 0, offsetof(Veth, mac_peer)
-VXLAN.Id, config_parse_uint64, 0, offsetof(VxLan, id)
-VXLAN.Group, config_parse_vxlan_group_address, 0, offsetof(VxLan, group)
-VXLAN.TOS, config_parse_unsigned, 0, offsetof(VxLan, tos)
-VXLAN.TTL, config_parse_unsigned, 0, offsetof(VxLan, ttl)
-VXLAN.MacLearning, config_parse_bool, 0, offsetof(VxLan, learning)
-VXLAN.ARPProxy, config_parse_bool, 0, offsetof(VxLan, arp_proxy)
-VXLAN.ReduceARPProxy, config_parse_bool, 0, offsetof(VxLan, arp_proxy)
-VXLAN.L2MissNotification, config_parse_bool, 0, offsetof(VxLan, l2miss)
-VXLAN.L3MissNotification, config_parse_bool, 0, offsetof(VxLan, l3miss)
-VXLAN.RouteShortCircuit, config_parse_bool, 0, offsetof(VxLan, route_short_circuit)
-VXLAN.UDPCheckSum, config_parse_bool, 0, offsetof(VxLan, udpcsum)
-VXLAN.UDPChecksum, config_parse_bool, 0, offsetof(VxLan, udpcsum)
-VXLAN.UDP6ZeroCheckSumRx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumrx)
-VXLAN.UDP6ZeroChecksumRx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumrx)
-VXLAN.UDP6ZeroCheckSumTx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumtx)
-VXLAN.UDP6ZeroChecksumTx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumtx)
-VXLAN.RemoteChecksumTx, config_parse_bool, 0, offsetof(VxLan, remote_csum_tx)
-VXLAN.RemoteChecksumRx, config_parse_bool, 0, offsetof(VxLan, remote_csum_rx)
-VXLAN.FDBAgeingSec, config_parse_sec, 0, offsetof(VxLan, fdb_ageing)
-VXLAN.GroupPolicyExtension, config_parse_bool, 0, offsetof(VxLan, group_policy)
-VXLAN.MaximumFDBEntries, config_parse_unsigned, 0, offsetof(VxLan, max_fdb)
-VXLAN.PortRange, config_parse_port_range, 0, 0
-VXLAN.DestinationPort, config_parse_destination_port, 0, offsetof(VxLan, dest_port)
-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)
-Tun.User, config_parse_string, 0, offsetof(TunTap, user_name)
-Tun.Group, config_parse_string, 0, offsetof(TunTap, group_name)
-Tap.OneQueue, config_parse_bool, 0, offsetof(TunTap, one_queue)
-Tap.MultiQueue, config_parse_bool, 0, offsetof(TunTap, multi_queue)
-Tap.PacketInfo, config_parse_bool, 0, offsetof(TunTap, packet_info)
-Tap.VNetHeader, config_parse_bool, 0, offsetof(TunTap, vnet_hdr)
-Tap.User, config_parse_string, 0, offsetof(TunTap, user_name)
-Tap.Group, config_parse_string, 0, offsetof(TunTap, group_name)
-Bond.Mode, config_parse_bond_mode, 0, offsetof(Bond, mode)
-Bond.TransmitHashPolicy, config_parse_bond_xmit_hash_policy, 0, offsetof(Bond, xmit_hash_policy)
-Bond.LACPTransmitRate, config_parse_bond_lacp_rate, 0, offsetof(Bond, lacp_rate)
-Bond.AdSelect, config_parse_bond_ad_select, 0, offsetof(Bond, ad_select)
-Bond.FailOverMACPolicy, config_parse_bond_fail_over_mac, 0, offsetof(Bond, fail_over_mac)
-Bond.ARPIPTargets, config_parse_arp_ip_target_address, 0, 0
-Bond.ARPValidate, config_parse_bond_arp_validate, 0, offsetof(Bond, arp_validate)
-Bond.ARPAllTargets, config_parse_bond_arp_all_targets, 0, offsetof(Bond, arp_all_targets)
-Bond.PrimaryReselectPolicy, config_parse_bond_primary_reselect, 0, offsetof(Bond, primary_reselect)
-Bond.ResendIGMP, config_parse_unsigned, 0, offsetof(Bond, resend_igmp)
-Bond.PacketsPerSlave, config_parse_unsigned, 0, offsetof(Bond, packets_per_slave)
-Bond.GratuitousARP, config_parse_unsigned, 0, offsetof(Bond, num_grat_arp)
-Bond.AllSlavesActive, config_parse_unsigned, 0, offsetof(Bond, all_slaves_active)
-Bond.MinLinks, config_parse_unsigned, 0, offsetof(Bond, min_links)
-Bond.MIIMonitorSec, config_parse_sec, 0, offsetof(Bond, miimon)
-Bond.UpDelaySec, config_parse_sec, 0, offsetof(Bond, updelay)
-Bond.DownDelaySec, config_parse_sec, 0, offsetof(Bond, downdelay)
-Bond.ARPIntervalSec, config_parse_sec, 0, offsetof(Bond, arp_interval)
-Bond.LearnPacketIntervalSec, config_parse_sec, 0, offsetof(Bond, lp_interval)
-Bridge.HelloTimeSec, config_parse_sec, 0, offsetof(Bridge, hello_time)
-Bridge.MaxAgeSec, config_parse_sec, 0, offsetof(Bridge, max_age)
-Bridge.AgeingTimeSec, config_parse_sec, 0, offsetof(Bridge, ageing_time)
-Bridge.ForwardDelaySec, config_parse_sec, 0, offsetof(Bridge, forward_delay)
-Bridge.Priority, config_parse_uint16, 0, offsetof(Bridge, priority)
-Bridge.DefaultPVID, config_parse_vlanid, 0, offsetof(Bridge, default_pvid)
-Bridge.MulticastQuerier, config_parse_tristate, 0, offsetof(Bridge, mcast_querier)
-Bridge.MulticastSnooping, config_parse_tristate, 0, offsetof(Bridge, mcast_snooping)
-Bridge.VLANFiltering, config_parse_tristate, 0, offsetof(Bridge, vlan_filtering)
-Bridge.STP, config_parse_tristate, 0, offsetof(Bridge, stp)
-VRF.TableId, config_parse_uint32, 0, offsetof(Vrf, table_id)
+Match.Host, config_parse_net_condition, CONDITION_HOST, offsetof(NetDev, match_host)
+Match.Virtualization, config_parse_net_condition, CONDITION_VIRTUALIZATION, offsetof(NetDev, match_virt)
+Match.KernelCommandLine, config_parse_net_condition, CONDITION_KERNEL_COMMAND_LINE, offsetof(NetDev, match_kernel)
+Match.Architecture, config_parse_net_condition, CONDITION_ARCHITECTURE, offsetof(NetDev, match_arch)
+NetDev.Description, config_parse_string, 0, offsetof(NetDev, description)
+NetDev.Name, config_parse_ifname, 0, offsetof(NetDev, ifname)
+NetDev.Kind, config_parse_netdev_kind, 0, offsetof(NetDev, kind)
+NetDev.MTUBytes, config_parse_iec_size, 0, offsetof(NetDev, mtu)
+NetDev.MACAddress, config_parse_hwaddr, 0, offsetof(NetDev, mac)
+VLAN.Id, config_parse_vlanid, 0, offsetof(VLan, id)
+MACVLAN.Mode, config_parse_macvlan_mode, 0, offsetof(MacVlan, mode)
+MACVTAP.Mode, config_parse_macvlan_mode, 0, offsetof(MacVlan, mode)
+IPVLAN.Mode, config_parse_ipvlan_mode, 0, offsetof(IPVlan, mode)
+Tunnel.Local, config_parse_tunnel_address, 0, offsetof(Tunnel, local)
+Tunnel.Remote, config_parse_tunnel_address, 0, offsetof(Tunnel, remote)
+Tunnel.TOS, config_parse_unsigned, 0, offsetof(Tunnel, tos)
+Tunnel.TTL, config_parse_unsigned, 0, offsetof(Tunnel, ttl)
+Tunnel.Key, config_parse_tunnel_key, 0, offsetof(Tunnel, key)
+Tunnel.InputKey, config_parse_tunnel_key, 0, offsetof(Tunnel, ikey)
+Tunnel.OutputKey, config_parse_tunnel_key, 0, offsetof(Tunnel, okey)
+Tunnel.DiscoverPathMTU, config_parse_bool, 0, offsetof(Tunnel, pmtudisc)
+Tunnel.Mode, config_parse_ip6tnl_mode, 0, offsetof(Tunnel, ip6tnl_mode)
+Tunnel.IPv6FlowLabel, config_parse_ipv6_flowlabel, 0, offsetof(Tunnel, ipv6_flowlabel)
+Tunnel.CopyDSCP, config_parse_bool, 0, offsetof(Tunnel, copy_dscp)
+Tunnel.EncapsulationLimit, config_parse_encap_limit, 0, offsetof(Tunnel, encap_limit)
+Peer.Name, config_parse_ifname, 0, offsetof(Veth, ifname_peer)
+Peer.MACAddress, config_parse_hwaddr, 0, offsetof(Veth, mac_peer)
+VXLAN.Id, config_parse_uint64, 0, offsetof(VxLan, id)
+VXLAN.Group, config_parse_vxlan_address, 0, offsetof(VxLan, remote)
+VXLAN.Local, config_parse_vxlan_address, 0, offsetof(VxLan, local)
+VXLAN.Remote, config_parse_vxlan_address, 0, offsetof(VxLan, remote)
+VXLAN.TOS, config_parse_unsigned, 0, offsetof(VxLan, tos)
+VXLAN.TTL, config_parse_unsigned, 0, offsetof(VxLan, ttl)
+VXLAN.MacLearning, config_parse_bool, 0, offsetof(VxLan, learning)
+VXLAN.ARPProxy, config_parse_bool, 0, offsetof(VxLan, arp_proxy)
+VXLAN.ReduceARPProxy, config_parse_bool, 0, offsetof(VxLan, arp_proxy)
+VXLAN.L2MissNotification, config_parse_bool, 0, offsetof(VxLan, l2miss)
+VXLAN.L3MissNotification, config_parse_bool, 0, offsetof(VxLan, l3miss)
+VXLAN.RouteShortCircuit, config_parse_bool, 0, offsetof(VxLan, route_short_circuit)
+VXLAN.UDPCheckSum, config_parse_bool, 0, offsetof(VxLan, udpcsum)
+VXLAN.UDPChecksum, config_parse_bool, 0, offsetof(VxLan, udpcsum)
+VXLAN.UDP6ZeroCheckSumRx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumrx)
+VXLAN.UDP6ZeroChecksumRx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumrx)
+VXLAN.UDP6ZeroCheckSumTx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumtx)
+VXLAN.UDP6ZeroChecksumTx, config_parse_bool, 0, offsetof(VxLan, udp6zerocsumtx)
+VXLAN.RemoteChecksumTx, config_parse_bool, 0, offsetof(VxLan, remote_csum_tx)
+VXLAN.RemoteChecksumRx, config_parse_bool, 0, offsetof(VxLan, remote_csum_rx)
+VXLAN.FDBAgeingSec, config_parse_sec, 0, offsetof(VxLan, fdb_ageing)
+VXLAN.GroupPolicyExtension, config_parse_bool, 0, offsetof(VxLan, group_policy)
+VXLAN.MaximumFDBEntries, config_parse_unsigned, 0, offsetof(VxLan, max_fdb)
+VXLAN.PortRange, config_parse_port_range, 0, 0
+VXLAN.DestinationPort, config_parse_destination_port, 0, offsetof(VxLan, dest_port)
+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)
+Tun.User, config_parse_string, 0, offsetof(TunTap, user_name)
+Tun.Group, config_parse_string, 0, offsetof(TunTap, group_name)
+Tap.OneQueue, config_parse_bool, 0, offsetof(TunTap, one_queue)
+Tap.MultiQueue, config_parse_bool, 0, offsetof(TunTap, multi_queue)
+Tap.PacketInfo, config_parse_bool, 0, offsetof(TunTap, packet_info)
+Tap.VNetHeader, config_parse_bool, 0, offsetof(TunTap, vnet_hdr)
+Tap.User, config_parse_string, 0, offsetof(TunTap, user_name)
+Tap.Group, config_parse_string, 0, offsetof(TunTap, group_name)
+Bond.Mode, config_parse_bond_mode, 0, offsetof(Bond, mode)
+Bond.TransmitHashPolicy, config_parse_bond_xmit_hash_policy, 0, offsetof(Bond, xmit_hash_policy)
+Bond.LACPTransmitRate, config_parse_bond_lacp_rate, 0, offsetof(Bond, lacp_rate)
+Bond.AdSelect, config_parse_bond_ad_select, 0, offsetof(Bond, ad_select)
+Bond.FailOverMACPolicy, config_parse_bond_fail_over_mac, 0, offsetof(Bond, fail_over_mac)
+Bond.ARPIPTargets, config_parse_arp_ip_target_address, 0, 0
+Bond.ARPValidate, config_parse_bond_arp_validate, 0, offsetof(Bond, arp_validate)
+Bond.ARPAllTargets, config_parse_bond_arp_all_targets, 0, offsetof(Bond, arp_all_targets)
+Bond.PrimaryReselectPolicy, config_parse_bond_primary_reselect, 0, offsetof(Bond, primary_reselect)
+Bond.ResendIGMP, config_parse_unsigned, 0, offsetof(Bond, resend_igmp)
+Bond.PacketsPerSlave, config_parse_unsigned, 0, offsetof(Bond, packets_per_slave)
+Bond.GratuitousARP, config_parse_unsigned, 0, offsetof(Bond, num_grat_arp)
+Bond.AllSlavesActive, config_parse_unsigned, 0, offsetof(Bond, all_slaves_active)
+Bond.MinLinks, config_parse_unsigned, 0, offsetof(Bond, min_links)
+Bond.MIIMonitorSec, config_parse_sec, 0, offsetof(Bond, miimon)
+Bond.UpDelaySec, config_parse_sec, 0, offsetof(Bond, updelay)
+Bond.DownDelaySec, config_parse_sec, 0, offsetof(Bond, downdelay)
+Bond.ARPIntervalSec, config_parse_sec, 0, offsetof(Bond, arp_interval)
+Bond.LearnPacketIntervalSec, config_parse_sec, 0, offsetof(Bond, lp_interval)
+Bridge.HelloTimeSec, config_parse_sec, 0, offsetof(Bridge, hello_time)
+Bridge.MaxAgeSec, config_parse_sec, 0, offsetof(Bridge, max_age)
+Bridge.AgeingTimeSec, config_parse_sec, 0, offsetof(Bridge, ageing_time)
+Bridge.ForwardDelaySec, config_parse_sec, 0, offsetof(Bridge, forward_delay)
+Bridge.Priority, config_parse_uint16, 0, offsetof(Bridge, priority)
+Bridge.DefaultPVID, config_parse_vlanid, 0, offsetof(Bridge, default_pvid)
+Bridge.MulticastQuerier, config_parse_tristate, 0, offsetof(Bridge, mcast_querier)
+Bridge.MulticastSnooping, config_parse_tristate, 0, offsetof(Bridge, mcast_snooping)
+Bridge.VLANFiltering, config_parse_tristate, 0, offsetof(Bridge, vlan_filtering)
+Bridge.STP, config_parse_tristate, 0, offsetof(Bridge, stp)
+VRF.TableId, config_parse_uint32, 0, offsetof(Vrf, table_id)
diff --git a/src/network/netdev/tunnel.c b/src/network/netdev/tunnel.c
index c11ac0c539..67f4fab400 100644
--- a/src/network/netdev/tunnel.c
+++ b/src/network/netdev/tunnel.c
@@ -410,10 +410,10 @@ static int netdev_tunnel_verify(NetDev *netdev, const char *filename) {
return -EINVAL;
}
- if (netdev->kind == NETDEV_KIND_VTI6 &&
+ if (IN_SET(netdev->kind, NETDEV_KIND_VTI6, NETDEV_KIND_IP6TNL, NETDEV_KIND_IP6GRE) &&
(t->family != AF_INET6 || in_addr_is_null(t->family, &t->local))) {
log_netdev_error(netdev,
- "vti6 tunnel without a local IPv4 address configured in %s. Ignoring", filename);
+ "vti6/ip6tnl/ip6gre tunnel without a local IPv6 address configured in %s. Ignoring", filename);
return -EINVAL;
}
diff --git a/src/network/netdev/vxlan.c b/src/network/netdev/vxlan.c
index 231f5cb442..b677b000fd 100644
--- a/src/network/netdev/vxlan.c
+++ b/src/network/netdev/vxlan.c
@@ -24,6 +24,8 @@
#include "conf-parser.h"
#include "alloc-util.h"
#include "extract-word.h"
+#include "string-util.h"
+#include "strv.h"
#include "parse-util.h"
#include "missing.h"
@@ -48,9 +50,29 @@ static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netli
return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_ID attribute: %m");
}
- r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_GROUP, &v->group.in);
- if (r < 0)
- return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GROUP attribute: %m");
+ if (!in_addr_is_null(v->remote_family, &v->remote)) {
+
+ if (v->remote_family == AF_INET)
+ r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_GROUP, &v->remote.in);
+ else
+ r = sd_netlink_message_append_in6_addr(m, IFLA_VXLAN_GROUP6, &v->remote.in6);
+
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_GROUP attribute: %m");
+
+ }
+
+ if (!in_addr_is_null(v->local_family, &v->local)) {
+
+ if (v->local_family == AF_INET)
+ r = sd_netlink_message_append_in_addr(m, IFLA_VXLAN_LOCAL, &v->local.in);
+ else
+ r = sd_netlink_message_append_in6_addr(m, IFLA_VXLAN_LOCAL6, &v->local.in6);
+
+ if (r < 0)
+ return log_netdev_error_errno(netdev, r, "Could not append IFLA_VXLAN_LOCAL attribute: %m");
+
+ }
r = sd_netlink_message_append_u32(m, IFLA_VXLAN_LINK, link->ifindex);
if (r < 0)
@@ -144,16 +166,16 @@ static int netdev_vxlan_fill_message_create(NetDev *netdev, Link *link, sd_netli
return r;
}
-int config_parse_vxlan_group_address(const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- unsigned section_line,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
+int config_parse_vxlan_address(const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
VxLan *v = userdata;
union in_addr_union *addr = data, buffer;
int r, f;
@@ -165,16 +187,28 @@ int config_parse_vxlan_group_address(const char *unit,
r = in_addr_from_string_auto(rvalue, &f, &buffer);
if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, r, "vxlan multicast group address is invalid, ignoring assignment: %s", rvalue);
+ log_syntax(unit, LOG_ERR, filename, line, r, "vxlan '%s' address is invalid, ignoring assignment: %s", lvalue, rvalue);
return 0;
}
- if (v->family != AF_UNSPEC && v->family != f) {
- log_syntax(unit, LOG_ERR, filename, line, 0, "vxlan multicast group incompatible, ignoring assignment: %s", rvalue);
- return 0;
+ r = in_addr_is_multicast(f, &buffer);
+
+ if (STR_IN_SET(lvalue, "Group", "Remote")) {
+ if (r <= 0) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "vxlan invalid multicast '%s' address, ignoring assignment: %s", lvalue, rvalue);
+ return 0;
+ }
+
+ v->remote_family = f;
+ } else {
+ if (r > 0) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "vxlan %s can not be multicast address, ignoring assignment: %s", lvalue, rvalue);
+ return 0;
+ }
+
+ v->local_family = f;
}
- v->family = f;
*addr = buffer;
return 0;
diff --git a/src/network/netdev/vxlan.h b/src/network/netdev/vxlan.h
index 6c3081d5fc..dca58e7fe6 100644
--- a/src/network/netdev/vxlan.h
+++ b/src/network/netdev/vxlan.h
@@ -31,8 +31,11 @@ struct VxLan {
uint64_t id;
- int family;
- union in_addr_union group;
+ int remote_family;
+ int local_family;
+
+ union in_addr_union remote;
+ union in_addr_union local;
unsigned tos;
unsigned ttl;
@@ -60,16 +63,16 @@ struct VxLan {
DEFINE_NETDEV_CAST(VXLAN, VxLan);
extern const NetDevVTable vxlan_vtable;
-int config_parse_vxlan_group_address(const char *unit,
- const char *filename,
- unsigned line,
- const char *section,
- unsigned section_line,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata);
+int config_parse_vxlan_address(const char *unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata);
int config_parse_port_range(const char *unit,
const char *filename,
unsigned line,
diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c
index e34793e50b..2e6c763aba 100644
--- a/src/network/networkd-address.c
+++ b/src/network/networkd-address.c
@@ -821,8 +821,8 @@ int config_parse_label(
if (r < 0)
return r;
- if (strlen(rvalue) >= IFNAMSIZ) {
- log_syntax(unit, LOG_ERR, filename, line, 0, "Interface label is too long, ignoring assignment: %s", rvalue);
+ if (!address_label_valid(rvalue)) {
+ log_syntax(unit, LOG_ERR, filename, line, 0, "Interface label is too long or invalid, ignoring assignment: %s", rvalue);
return 0;
}
diff --git a/src/network/wait-online/Makefile b/src/network/wait-online/Makefile
new file mode 120000
index 0000000000..94aaae2c4d
--- /dev/null
+++ b/src/network/wait-online/Makefile
@@ -0,0 +1 @@
+../../Makefile \ No newline at end of file
diff --git a/src/resolve/resolved-dns-trust-anchor.c b/src/resolve/resolved-dns-trust-anchor.c
index 7e08cba4e1..7e9f9e5a20 100644
--- a/src/resolve/resolved-dns-trust-anchor.c
+++ b/src/resolve/resolved-dns-trust-anchor.c
@@ -35,11 +35,16 @@
static const char trust_anchor_dirs[] = CONF_PATHS_NULSTR("dnssec-trust-anchors.d");
-/* The DS RR from https://data.iana.org/root-anchors/root-anchors.xml, retrieved December 2015 */
-static const uint8_t root_digest[] =
+/* The first DS RR from https://data.iana.org/root-anchors/root-anchors.xml, retrieved December 2015 */
+static const uint8_t root_digest1[] =
{ 0x49, 0xAA, 0xC1, 0x1D, 0x7B, 0x6F, 0x64, 0x46, 0x70, 0x2E, 0x54, 0xA1, 0x60, 0x73, 0x71, 0x60,
0x7A, 0x1A, 0x41, 0x85, 0x52, 0x00, 0xFD, 0x2C, 0xE1, 0xCD, 0xDE, 0x32, 0xF2, 0x4E, 0x8F, 0xB5 };
+/* The second DS RR from https://data.iana.org/root-anchors/root-anchors.xml, retrieved February 2017 */
+static const uint8_t root_digest2[] =
+ { 0xE0, 0x6D, 0x44, 0xB8, 0x0B, 0x8F, 0x1D, 0x39, 0xA9, 0x5C, 0x0B, 0x0D, 0x7C, 0x65, 0xD0, 0x84,
+ 0x58, 0xE8, 0x80, 0x40, 0x9B, 0xBC, 0x68, 0x34, 0x57, 0x10, 0x42, 0x37, 0xC7, 0xF8, 0xEC, 0x8D };
+
static bool dns_trust_anchor_knows_domain_positive(DnsTrustAnchor *d, const char *name) {
assert(d);
@@ -51,9 +56,40 @@ static bool dns_trust_anchor_knows_domain_positive(DnsTrustAnchor *d, const char
hashmap_contains(d->positive_by_key, &DNS_RESOURCE_KEY_CONST(DNS_CLASS_IN, DNS_TYPE_DS, name));
}
-static int dns_trust_anchor_add_builtin_positive(DnsTrustAnchor *d) {
+static int add_root_ksk(
+ DnsAnswer *answer,
+ DnsResourceKey *key,
+ uint16_t key_tag,
+ uint8_t algorithm,
+ uint8_t digest_type,
+ const void *digest,
+ size_t digest_size) {
+
_cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
+ int r;
+
+ rr = dns_resource_record_new(key);
+ if (!rr)
+ return -ENOMEM;
+
+ rr->ds.key_tag = key_tag;
+ rr->ds.algorithm = algorithm;
+ rr->ds.digest_type = digest_type;
+ rr->ds.digest_size = digest_size;
+ rr->ds.digest = memdup(digest, rr->ds.digest_size);
+ if (!rr->ds.digest)
+ return -ENOMEM;
+
+ r = dns_answer_add(answer, rr, 0, DNS_ANSWER_AUTHENTICATED);
+ if (r < 0)
+ return r;
+
+ return 0;
+}
+
+static int dns_trust_anchor_add_builtin_positive(DnsTrustAnchor *d) {
_cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
+ _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL;
int r;
assert(d);
@@ -62,35 +98,29 @@ static int dns_trust_anchor_add_builtin_positive(DnsTrustAnchor *d) {
if (r < 0)
return r;
- /* Only add the built-in trust anchor if there's neither a DS
- * nor a DNSKEY defined for the root domain. That way users
- * have an easy way to override the root domain DS/DNSKEY
- * data. */
+ /* Only add the built-in trust anchor if there's neither a DS nor a DNSKEY defined for the root domain. That
+ * way users have an easy way to override the root domain DS/DNSKEY data. */
if (dns_trust_anchor_knows_domain_positive(d, "."))
return 0;
- /* Add the RR from https://data.iana.org/root-anchors/root-anchors.xml */
- rr = dns_resource_record_new_full(DNS_CLASS_IN, DNS_TYPE_DS, "");
- if (!rr)
+ key = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_DS, "");
+ if (!key)
return -ENOMEM;
- rr->ds.key_tag = 19036;
- rr->ds.algorithm = DNSSEC_ALGORITHM_RSASHA256;
- rr->ds.digest_type = DNSSEC_DIGEST_SHA256;
- rr->ds.digest_size = sizeof(root_digest);
- rr->ds.digest = memdup(root_digest, rr->ds.digest_size);
- if (!rr->ds.digest)
- return -ENOMEM;
-
- answer = dns_answer_new(1);
+ answer = dns_answer_new(2);
if (!answer)
return -ENOMEM;
- r = dns_answer_add(answer, rr, 0, DNS_ANSWER_AUTHENTICATED);
+ /* Add the two RRs from https://data.iana.org/root-anchors/root-anchors.xml */
+ r = add_root_ksk(answer, key, 19036, DNSSEC_ALGORITHM_RSASHA256, DNSSEC_DIGEST_SHA256, root_digest1, sizeof(root_digest1));
+ if (r < 0)
+ return r;
+
+ r = add_root_ksk(answer, key, 20326, DNSSEC_ALGORITHM_RSASHA256, DNSSEC_DIGEST_SHA256, root_digest2, sizeof(root_digest2));
if (r < 0)
return r;
- r = hashmap_put(d->positive_by_key, rr->key, answer);
+ r = hashmap_put(d->positive_by_key, key, answer);
if (r < 0)
return r;
diff --git a/src/run/run.c b/src/run/run.c
index f8257abc93..2e6765aa18 100644
--- a/src/run/run.c
+++ b/src/run/run.c
@@ -497,7 +497,7 @@ static int transient_service_set_properties(sd_bus_message *m, char **argv, cons
if (r < 0)
return r;
- if (arg_wait) {
+ if (arg_wait || arg_pty) {
r = sd_bus_message_append(m, "(sv)", "AddRef", "b", 1);
if (r < 0)
return r;
@@ -1026,7 +1026,6 @@ static int start_transient_service(
pty_forward_set_handler(c.forward, pty_forward_handler, &c);
}
-
path = unit_dbus_path_from_name(service);
if (!path)
return log_oom();
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
index 157a46865f..d78e56d777 100644
--- a/src/systemctl/systemctl.c
+++ b/src/systemctl/systemctl.c
@@ -5964,6 +5964,7 @@ static int mangle_names(char **original_names, char ***mangled_names) {
} else {
r = unit_name_mangle(*name, UNIT_NAME_NOGLOB, i);
if (r < 0) {
+ *i = NULL;
strv_free(l);
return log_error_errno(r, "Failed to mangle unit name: %m");
}
diff --git a/src/test/test-socket-util.c b/src/test/test-socket-util.c
index d80613dc84..8ac1d7989f 100644
--- a/src/test/test-socket-util.c
+++ b/src/test/test-socket-util.c
@@ -456,6 +456,23 @@ static void test_sockaddr_un_len(void) {
assert_se(SOCKADDR_UN_LEN(abstract) == offsetof(struct sockaddr_un, sun_path) + 1 + strlen(abstract.sun_path + 1));
}
+static void test_in_addr_is_multicast(void) {
+ union in_addr_union a, b;
+ int f;
+
+ assert_se(in_addr_from_string_auto("192.168.3.11", &f, &a) >= 0);
+ assert_se(in_addr_is_multicast(f, &a) == 0);
+
+ assert_se(in_addr_from_string_auto("224.0.0.1", &f, &a) >= 0);
+ assert_se(in_addr_is_multicast(f, &a) == 1);
+
+ assert_se(in_addr_from_string_auto("FF01:0:0:0:0:0:0:1", &f, &b) >= 0);
+ assert_se(in_addr_is_multicast(f, &b) == 1);
+
+ assert_se(in_addr_from_string_auto("2001:db8::c:69b:aeff:fe53:743e", &f, &b) >= 0);
+ assert_se(in_addr_is_multicast(f, &b) == 0);
+}
+
int main(int argc, char *argv[]) {
log_set_max_level(LOG_DEBUG);
@@ -482,5 +499,7 @@ int main(int argc, char *argv[]) {
test_sockaddr_un_len();
+ test_in_addr_is_multicast();
+
return 0;
}