Compare commits

..

13 Commits

Author SHA1 Message Date
Yu Watanabe b9cbb08e0a sd-device: drop unwanted newline in netlink message 2020-11-18 05:32:44 +09:00
Zbigniew Jędrzejewski-Szmek d407638382 test/udev-test: gracefully exit when imports fail
In Fedora rawhide various perl modules are now available as separate
packages that are not pulled in by dependencies. If we don't have some
package, skip the tests.

This ugly code is apparently the way to do conditional imports:
https://www.cs.ait.ac.th/~on/O/oreilly/perl/cookbook/ch12_03.htm.
2020-11-18 03:50:17 +09:00
Roman Beranek 07e4a8dc23 Revert "resolve: check DNSSD service name template before assigning it"
This reverts commit 34136e1503.

Having the "%H" host name specifier in a DNSSD service name template
triggers a failed assertion during name template instantiation as
specifier_dnssd_host_name expects DnssdService in its userdata
pointer but finds NULL instead.
2020-11-18 03:16:57 +09:00
Zbigniew Jędrzejewski-Szmek 478f5aac07 hwdb/60-keyboard: untabify and move comments to the same column
Follow-up for b0a3a3ff5d.
2020-11-18 02:14:32 +09:00
Zbigniew Jędrzejewski-Szmek 1598b07da3
Merge pull request #17640 from keszybz/meson-test-c++20
Also test headers against c++20
2020-11-17 17:14:49 +01:00
Zbigniew Jędrzejewski-Szmek 485a9202ba
Merge pull request #17643 from keszybz/man-news-independent
NEWS and man page tweaks
2020-11-17 17:14:14 +01:00
Zbigniew Jędrzejewski-Szmek 905a03e71d NEWS,man: improve descriptions of Independent=
In NEWS, the new option was described twice, most likely because the first
description was tucked away in a paragraph about some other subject.

While at it, improve the descriptions in the man page to make it easier to grok
what that option really does.
2020-11-17 12:37:44 +01:00
Zbigniew Jędrzejewski-Szmek de70ff66dc man: drop misplaced phrase
I think it was added in 6c2b9c8da1 as c&p.
2020-11-17 11:46:50 +01:00
Zbigniew Jędrzejewski-Szmek dbc29e9175 network: use the common "cannot" form
Just for consistency.
2020-11-17 10:55:36 +01:00
Zbigniew Jędrzejewski-Szmek 7ad41997d1 man/systemd.netdev: remove bogus markup
There is no "Multicast" constant, and NULL doesn't make sense in the
context of addresses.
2020-11-17 10:55:12 +01:00
Zbigniew Jędrzejewski-Szmek e375ceb640 man/systemd.netdev: don't say "ranges" 2020-11-17 10:43:13 +01:00
Zbigniew Jędrzejewski-Szmek 2e5811521d test: let's start getting ready for 2020
It'll be a wonderful year, I'm sure.
2020-11-17 10:03:15 +01:00
Zbigniew Jędrzejewski-Szmek e318c2a444 meson: use proper variable for libudev.h path 2020-11-17 10:01:05 +01:00
13 changed files with 218 additions and 200 deletions

9
NEWS
View File

@ -457,9 +457,7 @@ CHANGES WITH 247 in spe:
discipline in the [FlowQueuePIE] sections. discipline in the [FlowQueuePIE] sections.
* systemd-networkd's .netdev files may now be used to create "BareUDP" * systemd-networkd's .netdev files may now be used to create "BareUDP"
tunnels, configured in the new [BareUDP] setting. VXLAN tunnels may tunnels, configured in the new [BareUDP] setting.
now be marked to be independent of any underlying network interface
via the new Independent= boolean setting.
* systemd-networkd's Gateway= setting in .network files now accepts the * systemd-networkd's Gateway= setting in .network files now accepts the
special values "_dhcp4" and "_ipv6ra" to configure additional, special values "_dhcp4" and "_ipv6ra" to configure additional,
@ -482,9 +480,8 @@ CHANGES WITH 247 in spe:
prefix will be announced through IPv6 router advertisement (IPv6 RA). prefix will be announced through IPv6 router advertisement (IPv6 RA).
The setting is enabled by default. The setting is enabled by default.
* systemd-networkd's .netdev files gained the Independent= boolean * VXLAN tunnels may now be marked as independent of any underlying
setting in [VXLAN] section. When enabled, the vxlan interface will be network interface via the new Independent= boolean setting.
created without underlying interfaces. Defaults to false.
* systemctl gained support for two new verbs: "service-log-level" and * systemctl gained support for two new verbs: "service-log-level" and
"service-log-target" may be used on services that implement the "service-log-target" may be used on services that implement the

View File

@ -373,7 +373,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS12-9Q33*:*
evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:* evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:*
# Dell Precision microphone mute # Dell Precision microphone mute
evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:* evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
KEYBOARD_KEY_100150=f20 # Mic mute toggle, should be micmute KEYBOARD_KEY_100150=f20 # Mic mute toggle, should be micmute
# Dell Latitude privacy microphone mute # Dell Latitude privacy microphone mute
evdev:name:Dell Privacy Driver:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:sku0A3E:* evdev:name:Dell Privacy Driver:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:sku0A3E:*
@ -488,7 +488,7 @@ evdev:input:b0003v0458p0708*
########################################################### ###########################################################
evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pn*:* evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pn*:*
KEYBOARD_KEY_8=unknown # Use hp-wireless instead KEYBOARD_KEY_8=unknown # Use hp-wireless instead
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*:* evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*:*
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pn*:* evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pn*:*
@ -863,7 +863,7 @@ evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO:pn81Q7*:pvrLenovoYogaS940:*
# Lenovo Y50-70 # Lenovo Y50-70
evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*20378*:* evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*20378*:*
KEYBOARD_KEY_f3=f21 # Fn+F6 (toggle touchpad) KEYBOARD_KEY_f3=f21 # Fn+F6 (toggle touchpad)
# V480 # V480
evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*Lenovo*V480*:* evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*Lenovo*V480*:*
@ -894,54 +894,54 @@ evdev:input:b0003v04B3p301B*
# logitech custom consumer usage-page codes. The mappings below are the most # logitech custom consumer usage-page codes. The mappings below are the most
# common, but some mapping may differ, especially the Fn F1-F12 mappings # common, but some mapping may differ, especially the Fn F1-F12 mappings
evdev:input:b0003v046Dp00* evdev:input:b0003v046Dp00*
KEYBOARD_KEY_c0183=media # HUT:config, kbd:Media/Music player button KEYBOARD_KEY_c0183=media # HUT:config, kbd:Media/Music player button
KEYBOARD_KEY_c1001=chat # Messenger button KEYBOARD_KEY_c1001=chat # Messenger button
KEYBOARD_KEY_c1002=camera # Webcam button KEYBOARD_KEY_c1002=camera # Webcam button
KEYBOARD_KEY_c1003=audio # Music Browser button KEYBOARD_KEY_c1003=audio # Music Browser button
KEYBOARD_KEY_c1004=video # Video Browser button KEYBOARD_KEY_c1004=video # Video Browser button
KEYBOARD_KEY_c1005=images # Image Browser button KEYBOARD_KEY_c1005=images # Image Browser button
KEYBOARD_KEY_c100a=documents # Document Browser button KEYBOARD_KEY_c100a=documents # Document Browser button
KEYBOARD_KEY_c100b=rewind # Rewind button KEYBOARD_KEY_c100b=rewind # Rewind button
KEYBOARD_KEY_c100c=fastforward # Fast Forward button KEYBOARD_KEY_c100c=fastforward # Fast Forward button
KEYBOARD_KEY_c100f=f14 # Track 1 button → f14 → XF86Launch5 KEYBOARD_KEY_c100f=f14 # Track 1 button → f14 → XF86Launch5
KEYBOARD_KEY_c1010=f15 # Track 2 button → f15 → XF86Launch6 KEYBOARD_KEY_c1010=f15 # Track 2 button → f15 → XF86Launch6
KEYBOARD_KEY_c1011=channeldown # Playlist back button KEYBOARD_KEY_c1011=channeldown # Playlist back button
KEYBOARD_KEY_c1012=channelup # Playlist advance button KEYBOARD_KEY_c1012=channelup # Playlist advance button
KEYBOARD_KEY_c1013=camera # Webcam button KEYBOARD_KEY_c1013=camera # Webcam button
KEYBOARD_KEY_c1014=coffee # Status button KEYBOARD_KEY_c1014=coffee # Status button
KEYBOARD_KEY_c1015=record # Record symbol button KEYBOARD_KEY_c1015=record # Record symbol button
KEYBOARD_KEY_c1016=sound # Flame/CD burning → sound → XF86AudioPreset KEYBOARD_KEY_c1016=sound # Flame/CD burning → sound → XF86AudioPreset
KEYBOARD_KEY_c1017=ejectcd # Eject button KEYBOARD_KEY_c1017=ejectcd # Eject button
KEYBOARD_KEY_c1018=config # Remote-control ico KEYBOARD_KEY_c1018=config # Remote-control ico
KEYBOARD_KEY_c1019=f14 # Preset 1 → f14 → XF86Launch5 KEYBOARD_KEY_c1019=f14 # Preset 1 → f14 → XF86Launch5
KEYBOARD_KEY_c101a=f15 # Preset 2 → f15 → XF86Launch6 KEYBOARD_KEY_c101a=f15 # Preset 2 → f15 → XF86Launch6
KEYBOARD_KEY_c101b=f16 # Preset 3 → f16 → XF86Launch7 KEYBOARD_KEY_c101b=f16 # Preset 3 → f16 → XF86Launch7
KEYBOARD_KEY_c101c=cyclewindows # 2 overlapping windows icon KEYBOARD_KEY_c101c=cyclewindows # 2 overlapping windows icon
KEYBOARD_KEY_c101f=zoomout # zoom - button / - side of zoomrocker KEYBOARD_KEY_c101f=zoomout # zoom - button / - side of zoomrocker
KEYBOARD_KEY_c1020=zoomin # zoom + button / + side off zoom rocker KEYBOARD_KEY_c1020=zoomin # zoom + button / + side off zoom rocker
KEYBOARD_KEY_c1021=zoomreset # 100% symbol on kbd left side KEYBOARD_KEY_c1021=zoomreset # 100% symbol on kbd left side
KEYBOARD_KEY_c1023=close # [x] symbol on kbd left side KEYBOARD_KEY_c1023=close # [x] symbol on kbd left side
KEYBOARD_KEY_c1027=menu # Hamburger menu icon KEYBOARD_KEY_c1027=menu # Hamburger menu icon
KEYBOARD_KEY_c1028=angle # Rotate button KEYBOARD_KEY_c1028=angle # Rotate button
KEYBOARD_KEY_c1029=shuffle # Shuffle button KEYBOARD_KEY_c1029=shuffle # Shuffle button
KEYBOARD_KEY_c102a=back # Back button KEYBOARD_KEY_c102a=back # Back button
KEYBOARD_KEY_c102b=cyclewindows # Empty window icon KEYBOARD_KEY_c102b=cyclewindows # Empty window icon
KEYBOARD_KEY_c102c=fn # Fn key KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c102d=www # www text + magnifierglass icon KEYBOARD_KEY_c102d=www # www text + magnifierglass icon
KEYBOARD_KEY_c1031=connect # Pickup phone button → connect → XF86Go KEYBOARD_KEY_c1031=connect # Pickup phone button → connect → XF86Go
KEYBOARD_KEY_c1032=cancel # Hangup phone button → cancel → Cancel KEYBOARD_KEY_c1032=cancel # Hangup phone button → cancel → Cancel
KEYBOARD_KEY_c1041=help # Help text or icon (Fn + F1) KEYBOARD_KEY_c1041=help # Help text or icon (Fn + F1)
KEYBOARD_KEY_c1042=wordprocessor # Word icon (Fn + F2) KEYBOARD_KEY_c1042=wordprocessor # Word icon (Fn + F2)
KEYBOARD_KEY_c1043=spreadsheet # Excel icon (Fn + F3) KEYBOARD_KEY_c1043=spreadsheet # Excel icon (Fn + F3)
KEYBOARD_KEY_c1044=presentation # Presentation icon (Fn + F4) KEYBOARD_KEY_c1044=presentation # Presentation icon (Fn + F4)
KEYBOARD_KEY_c1045=undo # Undo Icon (Fn + F5) KEYBOARD_KEY_c1045=undo # Undo Icon (Fn + F5)
KEYBOARD_KEY_c1046=redo # Redo Icon (Fn + F6) KEYBOARD_KEY_c1046=redo # Redo Icon (Fn + F6)
KEYBOARD_KEY_c1047=print # Printer Icon (Fn + F7) KEYBOARD_KEY_c1047=print # Printer Icon (Fn + F7)
KEYBOARD_KEY_c1048=save # Floppy Icon (Fn + F8) KEYBOARD_KEY_c1048=save # Floppy Icon (Fn + F8)
KEYBOARD_KEY_c1049=prog1 # Smartkey A (Fn + F9) → XF86Launch1 KEYBOARD_KEY_c1049=prog1 # Smartkey A (Fn + F9) → XF86Launch1
KEYBOARD_KEY_c104a=prog2 # Smartkey B (Fn + F10) → XF86Launch2 KEYBOARD_KEY_c104a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
KEYBOARD_KEY_c104b=prog3 # Smartkey C (Fn + F11) → XF86Launch3 KEYBOARD_KEY_c104b=prog3 # Smartkey C (Fn + F11) → XF86Launch3
KEYBOARD_KEY_c104c=prog4 # Smartkey D (Fn + F12) → XF86Launch4 KEYBOARD_KEY_c104c=prog4 # Smartkey D (Fn + F12) → XF86Launch4
# Cordless Access Keyboard (27 MHz, modelnumber Y-RH35) # Cordless Access Keyboard (27 MHz, modelnumber Y-RH35)
evdev:input:b0003v046Dp0042* evdev:input:b0003v046Dp0042*
@ -971,7 +971,7 @@ evdev:input:b0003v046Dp0045*
# S510 keyboard (27 MHz, modelnumber Y-RAK73) # S510 keyboard (27 MHz, modelnumber Y-RAK73)
evdev:input:b0003v046Dp0056* evdev:input:b0003v046Dp0056*
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1) KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
# MX3000 keyboard (27 MHz, modelnumber Y-RAM74) # MX3000 keyboard (27 MHz, modelnumber Y-RAM74)
# We ignore the scroll up / down keypress events since these buttons also # We ignore the scroll up / down keypress events since these buttons also
@ -980,7 +980,7 @@ evdev:input:b0003v046Dp0056*
# cleared then the scroll-wheel events for these buttons go away and then # cleared then the scroll-wheel events for these buttons go away and then
# tilting the scrollwheel left/right starts sending c1022 / c1024 events # tilting the scrollwheel left/right starts sending c1022 / c1024 events
evdev:input:b0003v046Dp0057* evdev:input:b0003v046Dp0057*
KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1) KEYBOARD_KEY_c1041=battery # Battery icon (Fn + F1)
#KEYBOARD_KEY_c101d=scrolldown # Button below scrollwheel (see note above) #KEYBOARD_KEY_c101d=scrolldown # Button below scrollwheel (see note above)
#KEYBOARD_KEY_c101e=scrollup # Button above scrollwheel (see note above) #KEYBOARD_KEY_c101e=scrollup # Button above scrollwheel (see note above)
@ -989,82 +989,82 @@ evdev:input:b0003v046Dp0057*
# MX3200 keyboard (27 MHz, modelnumber Y-RAV80) # MX3200 keyboard (27 MHz, modelnumber Y-RAV80)
evdev:input:b0003v046Dp005C* evdev:input:b0003v046Dp005C*
KEYBOARD_KEY_c1001=phone # VOIP button KEYBOARD_KEY_c1001=phone # VOIP button
KEYBOARD_KEY_c1016=record # Record button KEYBOARD_KEY_c1016=record # Record button
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1) KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2) KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2)
KEYBOARD_KEY_c1043=calendar # Calendar icon (Fn + F3) KEYBOARD_KEY_c1043=calendar # Calendar icon (Fn + F3)
KEYBOARD_KEY_c1044=documents # My Documents icon (Fn + F4) KEYBOARD_KEY_c1044=documents # My Documents icon (Fn + F4)
KEYBOARD_KEY_c1045=prog1 # Smartkey A (Fn + F5) → XF86Launch1 KEYBOARD_KEY_c1045=prog1 # Smartkey A (Fn + F5) → XF86Launch1
KEYBOARD_KEY_c1046=prog2 # Smartkey B (Fn + F6) → XF86Launch2 KEYBOARD_KEY_c1046=prog2 # Smartkey B (Fn + F6) → XF86Launch2
KEYBOARD_KEY_c1047=prog3 # Smartkey C (Fn + F7) → XF86Launch3 KEYBOARD_KEY_c1047=prog3 # Smartkey C (Fn + F7) → XF86Launch3
KEYBOARD_KEY_c1048=prog4 # Smartkey D (Fn + F8) → XF86Launch4 KEYBOARD_KEY_c1048=prog4 # Smartkey D (Fn + F8) → XF86Launch4
# EX100 keyboard (27 MHz, modelnumber Y-RBH94) # EX100 keyboard (27 MHz, modelnumber Y-RBH94)
evdev:input:b0003v046Dp0065* evdev:input:b0003v046Dp0065*
KEYBOARD_KEY_c104b=battery # Battery icon (Fn + F11) KEYBOARD_KEY_c104b=battery # Battery icon (Fn + F11)
KEYBOARD_KEY_c104c=ejectcd # Eject icon (Fn + F12) KEYBOARD_KEY_c104c=ejectcd # Eject icon (Fn + F12)
# S520 keyboard (27 MHz, modelnumber Y-RBA97) # S520 keyboard (27 MHz, modelnumber Y-RBA97)
# Note this one uses non-standard codes for FN + F9 - Fn + F12? # Note this one uses non-standard codes for FN + F9 - Fn + F12?
evdev:input:b0003v046Dp0066* evdev:input:b0003v046Dp0066*
KEYBOARD_KEY_c100e=prog4 # Smartkey D (Fn + F12) → XF86Launch4 KEYBOARD_KEY_c100e=prog4 # Smartkey D (Fn + F12) → XF86Launch4
KEYBOARD_KEY_c1019=prog1 # Smartkey A (Fn + F9) → XF86Launch1 KEYBOARD_KEY_c1019=prog1 # Smartkey A (Fn + F9) → XF86Launch1
KEYBOARD_KEY_c101a=prog2 # Smartkey B (Fn + F10) → XF86Launch2 KEYBOARD_KEY_c101a=prog2 # Smartkey B (Fn + F10) → XF86Launch2
KEYBOARD_KEY_c101b=prog3 # Smartkey C (Fn + F11) → XF86Launch3 KEYBOARD_KEY_c101b=prog3 # Smartkey C (Fn + F11) → XF86Launch3
KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1) KEYBOARD_KEY_c1041=wordprocessor # Word icon (Fn + F1)
KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2) KEYBOARD_KEY_c1042=spreadsheet # Excel icon (Fn + F2)
KEYBOARD_KEY_c1043=presentation # Presentation icon (Fn + F3) KEYBOARD_KEY_c1043=presentation # Presentation icon (Fn + F3)
KEYBOARD_KEY_c1044=calendar # Calendar icon (Fn + F4) KEYBOARD_KEY_c1044=calendar # Calendar icon (Fn + F4)
KEYBOARD_KEY_c1045=homepage # Home icon (Fn + F5) KEYBOARD_KEY_c1045=homepage # Home icon (Fn + F5)
KEYBOARD_KEY_c1046=email # Letter icon (Fn + F6) KEYBOARD_KEY_c1046=email # Letter icon (Fn + F6)
KEYBOARD_KEY_c1047=search # Magnifying glass icon (Fn + F7) KEYBOARD_KEY_c1047=search # Magnifying glass icon (Fn + F7)
KEYBOARD_KEY_c1048=config # Window with gear icon (Fn + F8) KEYBOARD_KEY_c1048=config # Window with gear icon (Fn + F8)
KEYBOARD_KEY_c106f=battery # Battery icon KEYBOARD_KEY_c106f=battery # Battery icon
# S510 remote control (27 MHz) # S510 remote control (27 MHz)
evdev:input:b0003v046Dp00FE* evdev:input:b0003v046Dp00FE*
KEYBOARD_KEY_c1018=media # Media button KEYBOARD_KEY_c1018=media # Media button
# MX5000 keyboard (HID proxy mode and bluetooth matches) # MX5000 keyboard (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB305* evdev:input:b0003v046DpB305*
evdev:input:b0005v046DpB305* evdev:input:b0005v046DpB305*
KEYBOARD_KEY_c0183=media # HUT says config, kbd says Media KEYBOARD_KEY_c0183=media # HUT says config, kbd says Media
KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100% KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100%
KEYBOARD_KEY_c1004=send # Send and receive / sync button KEYBOARD_KEY_c1004=send # Send and receive / sync button
KEYBOARD_KEY_c1006=coffee # Status (online/away) button KEYBOARD_KEY_c1006=coffee # Status (online/away) button
KEYBOARD_KEY_c1007=camera # Webcam button KEYBOARD_KEY_c1007=camera # Webcam button
KEYBOARD_KEY_c100c=kbd_lcd_menu1 # 1st button below the builtin LCD KEYBOARD_KEY_c100c=kbd_lcd_menu1 # 1st button below the builtin LCD
KEYBOARD_KEY_c100d=kbd_lcd_menu4 # 4th button below the builtin LCD KEYBOARD_KEY_c100d=kbd_lcd_menu4 # 4th button below the builtin LCD
KEYBOARD_KEY_c100e=kbd_lcd_menu2 # 2nd button below the builtin LCD KEYBOARD_KEY_c100e=kbd_lcd_menu2 # 2nd button below the builtin LCD
KEYBOARD_KEY_c100f=kbd_lcd_menu3 # 3th button below the builtin LCD KEYBOARD_KEY_c100f=kbd_lcd_menu3 # 3th button below the builtin LCD
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1 KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2 KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3 KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4 KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
KEYBOARD_KEY_c1040=fn_esc # Fn mode on/off toggle KEYBOARD_KEY_c1040=fn_esc # Fn mode on/off toggle
# Dinovo Edge (HID proxy mode and bluetooth matches) # Dinovo Edge (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB309* evdev:input:b0003v046DpB309*
evdev:input:b0005v046DpB309* evdev:input:b0005v046DpB309*
KEYBOARD_KEY_c102c=fn # Fn key KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c1038=prog1 # Fn + F9 Smartkey A → XF86Launch1 KEYBOARD_KEY_c1038=prog1 # Fn + F9 Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Fn + F10 Smartkey B → XF86Launch2 KEYBOARD_KEY_c1039=prog2 # Fn + F10 Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Fn + F11 Smartkey C → XF86Launch3 KEYBOARD_KEY_c103a=prog3 # Fn + F11 Smartkey C → XF86Launch3
KEYBOARD_KEY_c103b=prog4 # Fn + F12 Smartkey D → XF86Launch4 KEYBOARD_KEY_c103b=prog4 # Fn + F12 Smartkey D → XF86Launch4
KEYBOARD_KEY_c1050=phone # Fn + F1 Phone button KEYBOARD_KEY_c1050=phone # Fn + F1 Phone button
# MX5500 keyboard (HID proxy mode and bluetooth matches) # MX5500 keyboard (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB30B* evdev:input:b0003v046DpB30B*
evdev:input:b0005v046DpB30B* evdev:input:b0005v046DpB30B*
KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center
KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery" KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery"
KEYBOARD_KEY_c100f=config # Window with gear icon KEYBOARD_KEY_c100f=config # Window with gear icon
KEYBOARD_KEY_c102c=fn # Fn key KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1 KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2 KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3 KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4 KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
# Logitech K811 # Logitech K811
evdev:input:b0005v046DpB317* evdev:input:b0005v046DpB317*
@ -1143,22 +1143,22 @@ evdev:input:b0003v046DpC52D*
# Internet Navigator # Internet Navigator
evdev:input:b0003v046DpC309* evdev:input:b0003v046DpC309*
KEYBOARD_KEY_90001=chat # Messenger/SMS KEYBOARD_KEY_90001=chat # Messenger/SMS
KEYBOARD_KEY_90002=camera # webcam KEYBOARD_KEY_90002=camera # webcam
KEYBOARD_KEY_90003=prog1 # iTouch KEYBOARD_KEY_90003=prog1 # iTouch
KEYBOARD_KEY_90004=shop # Shopping KEYBOARD_KEY_90004=shop # Shopping
KEYBOARD_KEY_c0201=new # New (F1) KEYBOARD_KEY_c0201=new # New (F1)
KEYBOARD_KEY_c0289=reply # Reply mail (F2) KEYBOARD_KEY_c0289=reply # Reply mail (F2)
KEYBOARD_KEY_c028b=forwardmail # Forward mail (F3) KEYBOARD_KEY_c028b=forwardmail # Forward mail (F3)
KEYBOARD_KEY_c028c=send # Send (F4) KEYBOARD_KEY_c028c=send # Send (F4)
KEYBOARD_KEY_c021a=undo # Undo (F5) KEYBOARD_KEY_c021a=undo # Undo (F5)
KEYBOARD_KEY_c0279=redo # Redo (F6) KEYBOARD_KEY_c0279=redo # Redo (F6)
KEYBOARD_KEY_c0208=print # Print (F7) KEYBOARD_KEY_c0208=print # Print (F7)
KEYBOARD_KEY_c0207=save # Save (F8) KEYBOARD_KEY_c0207=save # Save (F8)
KEYBOARD_KEY_c0194=file # My Computer (F9) KEYBOARD_KEY_c0194=file # My Computer (F9)
KEYBOARD_KEY_c01a7=documents # My Documents (F10) KEYBOARD_KEY_c01a7=documents # My Documents (F10)
KEYBOARD_KEY_c01b6=images # My Pictures (F11) KEYBOARD_KEY_c01b6=images # My Pictures (F11)
KEYBOARD_KEY_c01b7=audio # My Music (F12) KEYBOARD_KEY_c01b7=audio # My Music (F12)
########################################################### ###########################################################
@ -1400,25 +1400,25 @@ evdev:input:b0003v05A4p9735*
KEYBOARD_KEY_c000c=stop KEYBOARD_KEY_c000c=stop
KEYBOARD_KEY_c0018=refresh KEYBOARD_KEY_c0018=refresh
KEYBOARD_KEY_c00b9=search KEYBOARD_KEY_c00b9=search
KEYBOARD_KEY_c0006=bookmarks # Button labeled "Favorites" KEYBOARD_KEY_c0006=bookmarks # Button labeled "Favorites"
KEYBOARD_KEY_c00a8=homepage # Button labeled "Web/Home" KEYBOARD_KEY_c00a8=homepage # Button labeled "Web/Home"
KEYBOARD_KEY_c0010=mute KEYBOARD_KEY_c0010=mute
KEYBOARD_KEY_c0011=volumedown KEYBOARD_KEY_c0011=volumedown
KEYBOARD_KEY_c0014=volumeup KEYBOARD_KEY_c0014=volumeup
KEYBOARD_KEY_c000e=close KEYBOARD_KEY_c000e=close
KEYBOARD_KEY_c00a7=print KEYBOARD_KEY_c00a7=print
KEYBOARD_KEY_c0013=documents # Button labeled "Stickies" KEYBOARD_KEY_c0013=documents # Button labeled "Stickies"
KEYBOARD_KEY_c000d=find # Button labeled "Sherlock2" KEYBOARD_KEY_c000d=find # Button labeled "Sherlock2"
KEYBOARD_KEY_c000f=mail KEYBOARD_KEY_c000f=mail
KEYBOARD_KEY_c000a=calc KEYBOARD_KEY_c000a=calc
KEYBOARD_KEY_c000b=sleep KEYBOARD_KEY_c000b=sleep
KEYBOARD_KEY_c0007=previoussong # Button with standard |<< icon KEYBOARD_KEY_c0007=previoussong # Button with standard |<< icon
KEYBOARD_KEY_c0008=playpause # Button with standad >/|| icon KEYBOARD_KEY_c0008=playpause # Button with standad >/|| icon
KEYBOARD_KEY_c0009=nextsong # Button with standard >>| icon KEYBOARD_KEY_c0009=nextsong # Button with standard >>| icon
KEYBOARD_KEY_c00b2=stopcd # Button with standard square box icon KEYBOARD_KEY_c00b2=stopcd # Button with standard square box icon
KEYBOARD_KEY_c0016=prog1 # Key labeled "pf1" KEYBOARD_KEY_c0016=prog1 # Key labeled "pf1"
KEYBOARD_KEY_c00bb=prog2 # Key labeled "pf2" KEYBOARD_KEY_c00bb=prog2 # Key labeled "pf2"
KEYBOARD_KEY_c00b8=prog3 # Key labeled "pf3" KEYBOARD_KEY_c00b8=prog3 # Key labeled "pf3"
########################################################### ###########################################################
# Pine64 # Pine64
@ -1436,7 +1436,7 @@ evdev:input:b0003v258Ap001E*
# Plantronics .Audio 626 DSP # Plantronics .Audio 626 DSP
evdev:input:b0003v047FpC006* evdev:input:b0003v047FpC006*
KEYBOARD_KEY_b002f=f20 # Microphone mute button; should be micmute KEYBOARD_KEY_b002f=f20 # Microphone mute button; should be micmute
########################################################### ###########################################################
# Purism # Purism

View File

@ -84,7 +84,7 @@
</row></thead> </row></thead>
<tbody> <tbody>
<row><entry><varname>bond</varname></entry> <row><entry><varname>bond</varname></entry>
<entry>A bond device is an aggregation of all its slave devices. See <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">Linux Ethernet Bonding Driver HOWTO</ulink> for details.Local configuration</entry></row> <entry>A bond device is an aggregation of all its slave devices. See <ulink url="https://www.kernel.org/doc/Documentation/networking/bonding.txt">Linux Ethernet Bonding Driver HOWTO</ulink> for details.</entry></row>
<row><entry><varname>bridge</varname></entry> <row><entry><varname>bridge</varname></entry>
<entry>A bridge device is a software switch, and each of its slave devices and the bridge itself are ports of the switch.</entry></row> <entry>A bridge device is a software switch, and each of its slave devices and the bridge itself are ports of the switch.</entry></row>
@ -754,7 +754,8 @@
<varlistentry> <varlistentry>
<term><varname>Id=</varname></term> <term><varname>Id=</varname></term>
<listitem> <listitem>
<para>Specifies the Virtual Network Identifier (VNI) to use. Ranges [0-16777215]. This field is mandatory.</para> <para>Specifies the Virtual Network Identifier (VNI) to use, a number between 0 and 16777215. This
field is mandatory.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -766,7 +767,7 @@
<varlistentry> <varlistentry>
<term><varname>TOS=</varname></term> <term><varname>TOS=</varname></term>
<listitem> <listitem>
<para>Specifies the TOS value to use in outgoing packets. Ranges [1-255].</para> <para>Specifies the TOS value to use in outgoing packets. Takes a number between 1 and 255.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -818,8 +819,9 @@
<varlistentry> <varlistentry>
<term><varname>Independent=</varname></term> <term><varname>Independent=</varname></term>
<listitem> <listitem>
<para>Takes a boolean. When true, the vxlan interface is created without underlying interfaces. <para>Takes a boolean. When true, the vxlan interface is created without any underlying network
Defaults to <literal>false</literal>.</para> interface. Defaults to false, which means that a .network file that requests this tunnel using
<varname>Tunnel=</varname> is required for the tunnel to be created.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist> </variablelist>
@ -1276,9 +1278,10 @@
<varlistentry> <varlistentry>
<term><varname>Independent=</varname></term> <term><varname>Independent=</varname></term>
<listitem> <listitem>
<para>Takes a boolean. When true tunnel does not require .network file. Created as "tunnel@NONE". <para>Takes a boolean. When false (the default), the tunnel is always created over some network
Defaults to <literal>false</literal>. device, and a .network file that requests this tunnel using <varname>Tunnel=</varname> is required
</para> for the tunnel to be created. When true, the tunnel is created independently of any network as
"tunnel@NONE".</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
@ -1770,8 +1773,8 @@
<varlistentry> <varlistentry>
<term><varname>AdActorSystem=</varname></term> <term><varname>AdActorSystem=</varname></term>
<listitem> <listitem>
<para>Specifies the 802.3ad system mac address. This can not be either <para>Specifies the 802.3ad system MAC address. This cannot be a null or multicast address.
<constant>NULL</constant> or <constant>Multicast</constant>.</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -1948,10 +1951,8 @@
<varlistentry> <varlistentry>
<term><varname>Independent=</varname></term> <term><varname>Independent=</varname></term>
<listitem> <listitem>
<para>Takes a boolean. If set to <literal>no</literal>, the xfrm interface should have an <para>Takes a boolean. If false (the default), the xfrm interface must have an underlying device
underlying device which can be used for hardware offloading. Defaults to <literal>no</literal>. which can be used for hardware offloading.</para>
See <citerefentry><refentrytitle>systemd.network</refentrytitle><manvolnum>5</manvolnum></citerefentry>
for how to configure the underlying device.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
</variablelist> </variablelist>

View File

@ -1594,6 +1594,7 @@ generate_gperfs = find_program('tools/generate-gperfs.py')
subdir('po') subdir('po')
subdir('catalog') subdir('catalog')
subdir('src/libudev')
subdir('src/systemd') subdir('src/systemd')
subdir('src/basic') subdir('src/basic')
subdir('src/libsystemd') subdir('src/libsystemd')
@ -1673,7 +1674,6 @@ update_dbus_docs_py = find_program('tools/update-dbus-docs.py')
# usually, but not always, installed in /bin. # usually, but not always, installed in /bin.
public_programs = [] public_programs = []
subdir('src/libudev')
subdir('src/shared') subdir('src/shared')
subdir('src/core') subdir('src/core')
subdir('src/shutdown') subdir('src/shutdown')

View File

@ -468,6 +468,10 @@ int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len) {
i += end - key + 1; i += end - key + 1;
/* netlink messages for some devices contain an unwanted newline at the end of value.
* Let's drop the newline and remaining characters after the newline. */
truncate_nl(key);
r = device_append(device, key, &major, &minor); r = device_append(device, key, &major, &minor);
if (r < 0) if (r < 0)
return r; return r;

View File

@ -469,7 +469,7 @@ int config_parse_ad_actor_system(
} }
if (ether_addr_is_null(&n) || (n.ether_addr_octet[0] & 0x01)) { if (ether_addr_is_null(&n) || (n.ether_addr_octet[0] & 0x01)) {
log_syntax(unit, LOG_WARNING, filename, line, 0, log_syntax(unit, LOG_WARNING, filename, line, 0,
"Not a valid MAC address %s, can not be null or multicast. Ignoring assignment.", "Not an appropriate MAC address %s, cannot be null or multicast. Ignoring assignment.",
rvalue); rvalue);
return 0; return 0;
} }

View File

@ -649,7 +649,7 @@ int netdev_join(NetDev *netdev, Link *link, link_netlink_message_handler_t callb
return r; return r;
break; break;
default: default:
assert_not_reached("Can not join independent netdev"); assert_not_reached("Cannot join independent netdev");
} }
return 0; return 0;

View File

@ -1795,6 +1795,7 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
_cleanup_(dnssd_service_freep) DnssdService *service = NULL; _cleanup_(dnssd_service_freep) DnssdService *service = NULL;
_cleanup_(sd_bus_track_unrefp) sd_bus_track *bus_track = NULL; _cleanup_(sd_bus_track_unrefp) sd_bus_track *bus_track = NULL;
_cleanup_free_ char *path = NULL; _cleanup_free_ char *path = NULL;
_cleanup_free_ char *instance_name = NULL;
Manager *m = userdata; Manager *m = userdata;
DnssdService *s = NULL; DnssdService *s = NULL;
const char *name; const char *name;
@ -1835,10 +1836,6 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
if (!dnssd_srv_type_is_valid(type)) if (!dnssd_srv_type_is_valid(type))
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "DNS-SD service type '%s' is invalid", type); return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "DNS-SD service type '%s' is invalid", type);
r = dnssd_render_instance_name(name_template, NULL);
if (r < 0)
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "DNS-SD service name '%s' is invalid", name_template);
service->name = strdup(name); service->name = strdup(name);
if (!service->name) if (!service->name)
return log_oom(); return log_oom();
@ -1851,6 +1848,10 @@ static int bus_method_register_service(sd_bus_message *message, void *userdata,
if (!service->type) if (!service->type)
return log_oom(); return log_oom();
r = dnssd_render_instance_name(service, &instance_name);
if (r < 0)
return r;
r = sd_bus_message_enter_container(message, SD_BUS_TYPE_ARRAY, "a{say}"); r = sd_bus_message_enter_container(message, SD_BUS_TYPE_ARRAY, "a{say}");
if (r < 0) if (r < 0)
return r; return r;

View File

@ -217,19 +217,21 @@ int config_parse_search_domains(
return 0; return 0;
} }
int config_parse_dnssd_service_name( int config_parse_dnssd_service_name(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) {
const char *unit, static const Specifier specifier_table[] = {
const char *filename, { 'm', specifier_machine_id, NULL },
unsigned line, { 'b', specifier_boot_id, NULL },
const char *section, { 'H', specifier_host_name, NULL },
unsigned section_line, { 'v', specifier_kernel_release, NULL },
const char *lvalue, { 'a', specifier_architecture, NULL },
int ltype, { 'o', specifier_os_id, NULL },
const char *rvalue, { 'w', specifier_os_version_id, NULL },
void *data, { 'B', specifier_os_build_id, NULL },
void *userdata) { { 'W', specifier_os_variant_id, NULL },
{}
};
DnssdService *s = userdata; DnssdService *s = userdata;
_cleanup_free_ char *name = NULL;
int r; int r;
assert(filename); assert(filename);
@ -238,23 +240,23 @@ int config_parse_dnssd_service_name(
assert(s); assert(s);
if (isempty(rvalue)) { if (isempty(rvalue)) {
s->name_template = mfree(s->name_template); log_syntax(unit, LOG_ERR, filename, line, 0, "Service instance name can't be empty. Ignoring.");
return 0; return -EINVAL;
}
r = dnssd_render_instance_name(rvalue, NULL);
if (r == -ENOMEM)
return log_oom();
if (r < 0) {
log_syntax(unit, LOG_WARNING, filename, line, r,
"Invalid service instance name template '%s', ignoring: %m", rvalue);
return 0;
} }
r = free_and_strdup(&s->name_template, rvalue); r = free_and_strdup(&s->name_template, rvalue);
if (r < 0) if (r < 0)
return log_oom(); return log_oom();
r = specifier_printf(s->name_template, specifier_table, NULL, &name);
if (r < 0)
return log_debug_errno(r, "Failed to replace specifiers: %m");
if (!dns_service_name_is_valid(name)) {
log_syntax(unit, LOG_ERR, filename, line, 0, "Service instance name template renders to invalid name '%s'. Ignoring.", name);
return -EINVAL;
}
return 0; return 0;
} }

View File

@ -155,7 +155,7 @@ static int specifier_dnssd_host_name(char specifier, const void *data, const voi
return 0; return 0;
} }
int dnssd_render_instance_name(const char *name_template, char **ret_name) { int dnssd_render_instance_name(DnssdService *s, char **ret_name) {
static const Specifier specifier_table[] = { static const Specifier specifier_table[] = {
{ 'm', specifier_machine_id, NULL }, { 'm', specifier_machine_id, NULL },
{ 'b', specifier_boot_id, NULL }, { 'b', specifier_boot_id, NULL },
@ -171,17 +171,19 @@ int dnssd_render_instance_name(const char *name_template, char **ret_name) {
_cleanup_free_ char *name = NULL; _cleanup_free_ char *name = NULL;
int r; int r;
assert(name_template); assert(s);
assert(s->name_template);
r = specifier_printf(name_template, specifier_table, NULL, &name); r = specifier_printf(s->name_template, specifier_table, s, &name);
if (r < 0) if (r < 0)
return r; return log_debug_errno(r, "Failed to replace specifiers: %m");
if (!dns_service_name_is_valid(name)) if (!dns_service_name_is_valid(name))
return -EINVAL; return log_debug_errno(SYNTHETIC_ERRNO(EINVAL),
"Service instance name '%s' is invalid.",
name);
if (ret_name) *ret_name = TAKE_PTR(name);
*ret_name = TAKE_PTR(name);
return 0; return 0;
} }
@ -225,7 +227,7 @@ int dnssd_update_rrs(DnssdService *s) {
LIST_FOREACH(items, txt_data, s->txt_data_items) LIST_FOREACH(items, txt_data, s->txt_data_items)
txt_data->rr = dns_resource_record_unref(txt_data->rr); txt_data->rr = dns_resource_record_unref(txt_data->rr);
r = dnssd_render_instance_name(s->name_template, &n); r = dnssd_render_instance_name(s, &n);
if (r < 0) if (r < 0)
return r; return r;

View File

@ -53,7 +53,7 @@ DnssdTxtData *dnssd_txtdata_free_all(DnssdTxtData *txt_data);
DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free); DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdService*, dnssd_service_free);
DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free); DEFINE_TRIVIAL_CLEANUP_FUNC(DnssdTxtData*, dnssd_txtdata_free);
int dnssd_render_instance_name(const char *name_template, char **ret_name); int dnssd_render_instance_name(DnssdService *s, char **ret_name);
int dnssd_load(Manager *manager); int dnssd_load(Manager *manager);
int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item); int dnssd_txt_item_new_from_string(const char *key, const char *value, DnsTxtItem **ret_item);
int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item); int dnssd_txt_item_new_from_data(const char *key, const void *value, const size_t size, DnsTxtItem **ret_item);

View File

@ -64,9 +64,12 @@ if add_languages('cpp', required : false)
if cxx.has_argument('-std=c++17') if cxx.has_argument('-std=c++17')
opts += [['c++', '-std=c++17']] opts += [['c++', '-std=c++17']]
endif endif
if cxx.has_argument('-std=c++20')
opts += [['c++', '-std=c++20']]
endif
endif endif
foreach header : _systemd_headers + _not_installed_headers + ['../libudev/libudev.h'] foreach header : _systemd_headers + _not_installed_headers + [libudev_h_path]
foreach opt : opts foreach opt : opts
std_name = opt.length() == 2 ? '_'.join(opt[1].split(':')) : '' std_name = opt.length() == 2 ? '_'.join(opt[1].split(':')) : ''
name = ''.join(['cc-', header.split('/')[-1], '_', opt[0], std_name]) name = ''.join(['cc-', header.split('/')[-1], '_', opt[0], std_name])

View File

@ -18,11 +18,19 @@
use warnings; use warnings;
use strict; use strict;
use POSIX qw(WIFEXITED WEXITSTATUS);
use IPC::SysV qw(IPC_PRIVATE S_IRUSR S_IWUSR IPC_CREAT); BEGIN {
use IPC::Semaphore; my $EXIT_TEST_SKIP = 77;
use Time::HiRes qw(usleep);
use Cwd qw(getcwd abs_path); unless (eval "use POSIX qw(WIFEXITED WEXITSTATUS);
use Cwd qw(getcwd abs_path);
use IPC::Semaphore;
use IPC::SysV qw(IPC_PRIVATE S_IRUSR S_IWUSR IPC_CREAT);
use Time::HiRes qw(usleep); 1") {
warn "Failed to import dependencies, skipping the test: $@";
exit($EXIT_TEST_SKIP);
}
}
my $udev_bin = "./test-udev"; my $udev_bin = "./test-udev";
my $valgrind = 0; my $valgrind = 0;