'\" t .\" Title: NetworkManager-dispatcher .\" Author: .\" Generator: DocBook XSL Stylesheets vsnapshot .\" Date: 02/24/2024 .\" Manual: Network management daemons .\" Source: NetworkManager-dispatcher 1.46.0 .\" Language: English .\" .TH "NETWORKMANAGER\-DISPATCHER" "8" "" "NetworkManager\-dispatcher 1\&" "Network management daemons" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" NetworkManager-dispatcher \- Dispatch user scripts for NetworkManager .SH "SYNOPSIS" .HP \w'\fBNetworkManager\ \fR\fB[OPTIONS...]\fR\ 'u \fBNetworkManager \fR\fB[OPTIONS...]\fR .SH "DESCRIPTION" .PP NetworkManager\-dispatcher service is a D\-Bus activated service that runs user provided scripts upon certain changes in NetworkManager\&. .PP NetworkManager\-dispatcher will execute scripts in the /{etc,usr/lib}/NetworkManager/dispatcher\&.d directory or subdirectories in alphabetical order in response to network events\&. Each script should be a regular executable file owned by root\&. Furthermore, it must not be writable by group or other, and not setuid\&. .PP Each script receives two arguments, the first being the interface name of the device an operation just happened on, and second the action\&. For device actions, the interface is the name of the kernel interface suitable for IP configuration\&. Thus it is either VPN_IP_IFACE, DEVICE_IP_IFACE, or DEVICE_IFACE, as applicable\&. For the \fIhostname\fR action the device name is always "none"\&. For \fIconnectivity\-change\fR and \fIdns\-change\fR it is empty\&. .PP The actions are: .PP \fIpre\-up\fR .RS 4 The interface is connected to the network but is not yet fully activated\&. Scripts acting on this event must be placed or symlinked into the /etc/NetworkManager/dispatcher\&.d/pre\-up\&.d directory, and NetworkManager will wait for script execution to complete before indicating to applications that the interface is fully activated\&. .RE .PP \fIup\fR .RS 4 The interface has been activated\&. .RE .PP \fIpre\-down\fR .RS 4 The interface will be deactivated but has not yet been disconnected from the network\&. Scripts acting on this event must be placed or symlinked into the /etc/NetworkManager/dispatcher\&.d/pre\-down\&.d directory, and NetworkManager will wait for script execution to complete before disconnecting the interface from its network\&. Note that this event is not emitted for forced disconnections, like when carrier is lost or a wireless signal fades\&. It is only emitted when there is an opportunity to cleanly handle a network disconnection event\&. .RE .PP \fIdown\fR .RS 4 The interface has been deactivated\&. .RE .PP \fIvpn\-pre\-up\fR .RS 4 The VPN is connected to the network but is not yet fully activated\&. Scripts acting on this event must be placed or symlinked into the /etc/NetworkManager/dispatcher\&.d/pre\-up\&.d directory, and NetworkManager will wait for script execution to complete before indicating to applications that the VPN is fully activated\&. .RE .PP \fIvpn\-up\fR .RS 4 A VPN connection has been activated\&. .RE .PP \fIvpn\-pre\-down\fR .RS 4 The VPN will be deactivated but has not yet been disconnected from the network\&. Scripts acting on this event must be placed or symlinked into the /etc/NetworkManager/dispatcher\&.d/pre\-down\&.d directory, and NetworkManager will wait for script execution to complete before disconnecting the VPN from its network\&. Note that this event is not emitted for forced disconnections, like when the VPN terminates unexpectedly or general connectivity is lost\&. It is only emitted when there is an opportunity to cleanly handle a VPN disconnection event\&. .RE .PP \fIvpn\-down\fR .RS 4 A VPN connection has been deactivated\&. .RE .PP \fIhostname\fR .RS 4 The system hostname has been updated\&. Use gethostname(2) to retrieve it\&. The interface name (first argument) is empty and no environment variable is set for this action\&. .RE .PP \fIdhcp4\-change\fR .RS 4 The DHCPv4 lease has changed (renewed, rebound, etc)\&. .RE .PP \fIdhcp6\-change\fR .RS 4 The DHCPv6 lease has changed (renewed, rebound, etc)\&. .RE .PP \fIconnectivity\-change\fR .RS 4 The network connectivity state has changed (no connectivity, went online, etc)\&. .RE .PP \fIreapply\fR .RS 4 The connection was reapplied on the device\&. .RE .PP \fIdns\-change\fR .RS 4 The DNS configuration has changed\&. This action is raised even if NetworkManager is configured to not manage resolv\&.conf (for example, via dns=none)\&. In such case, the dispatch script can discover the DNS configuration provided by currently active connections by looking at file /run/NetworkManager/resolv\&.conf .RE .PP \fIdevice\-add\fR .RS 4 This action is called when a connection of type generic has the generic\&.device\-handler property set\&. The property indicates the name of a dispatcher script to be executed in directory /{etc,usr/lib}/NetworkManager/dispatcher\&.d/device\&. Note that differently from other actions, only one script is executed\&. .sp The script needs to perform any action needed to create the device for the generic connection\&. On successful termination, the script returns zero\&. Otherwise, it returns a non\-zero value to indicate an error\&. The script can return values to NetworkManager by writing to standard output; each line should contain a key name followed by the equal sign \*(Aq=\*(Aq and a key value\&. The keys understood at the moment are: .PP \fIIFINDEX\fR .RS 4 Indicates the interface index of the interface created by the script\&. This key is required when the script succeeds; if it is not set, the activation will fail\&. The key is ignored in case of script failure\&. .RE .PP \fIERROR\fR .RS 4 Specifies an error message indicating the cause of the script failure\&. It is ignored when the script succeeds\&. .RE .sp Since the dispatcher service captures stdout for parsing those keys, anything written to stdout will not appear in the dispatcher service journal log\&. Use stderr if you want to print messages to the journal (for example, for debugging)\&. Only the first 8KiB of stdout are considered and among those, only the first 64 lines; the rest is ignored\&. .RE .PP \fIdevice\-delete\fR .RS 4 This action is the counterpart of device\-add and is called to delete the device for a generic connection\&. All the aspects described for device\-add also apply to this action, with the only exception that key \fIIFINDEX\fR is ignored\&. It is not necessary to delete the kernel link in the handler because NetworkManager already does that; therefore the action is useful for any additional cleanup needed\&. .RE .PP The environment contains more information about the interface and the connection\&. The following variables are available for the use in the dispatcher scripts: .PP \fINM_DISPATCHER_ACTION\fR .RS 4 The dispatcher action like "up" or "dhcp4\-change", identical to the first command line argument\&. Since NetworkManager 1\&.12\&.0\&. .RE .PP \fICONNECTION_UUID\fR .RS 4 The UUID of the connection profile\&. .RE .PP \fICONNECTION_ID\fR .RS 4 The name (ID) of the connection profile\&. .RE .PP \fICONNECTION_DBUS_PATH\fR .RS 4 The NetworkManager D\-Bus path of the connection\&. .RE .PP \fICONNECTION_FILENAME\fR .RS 4 The backing file name of the connection profile (if any)\&. .RE .PP \fICONNECTION_EXTERNAL\fR .RS 4 If "1", this indicates that the connection describes a network configuration created outside of NetworkManager\&. .RE .PP \fIDEVICE_IFACE\fR .RS 4 The interface name of the control interface of the device\&. Depending on the device type, this differs from \fIDEVICE_IP_IFACE\fR\&. For example for ADSL devices, this could be \*(Aqatm0\*(Aq or for WWAN devices it might be \*(AqttyUSB0\*(Aq\&. .RE .PP \fIDEVICE_IP_IFACE\fR .RS 4 The IP interface name of the device\&. This is the network interface on which IP addresses and routes will be configured\&. .RE .PP \fIIP4_ADDRESS_N\fR .RS 4 The IPv4 address in the format "address/prefix gateway", where N is a number from 0 to (# IPv4 addresses \- 1)\&. gateway item in this variable is deprecated, use IP4_GATEWAY instead\&. .RE .PP \fIIP4_NUM_ADDRESSES\fR .RS 4 The variable contains the number of IPv4 addresses the script may expect\&. .RE .PP \fIIP4_GATEWAY\fR .RS 4 The gateway IPv4 address in traditional numbers\-and\-dots notation\&. .RE .PP \fIIP4_ROUTE_N\fR .RS 4 The IPv4 route in the format "address/prefix next\-hop metric", where N is a number from 0 to (# IPv4 routes \- 1)\&. .RE .PP \fIIP4_NUM_ROUTES\fR .RS 4 The variable contains the number of IPv4 routes the script may expect\&. .RE .PP \fIIP4_NAMESERVERS\fR .RS 4 The variable contains a space\-separated list of the DNS servers\&. .RE .PP \fIIP4_DOMAINS\fR .RS 4 The variable contains a space\-separated list of the search domains\&. .RE .PP \fIDHCP4_\fR .RS 4 If the connection used DHCP for address configuration, the received DHCP configuration is passed in the environment using standard DHCP option names, prefixed with "DHCP4_", like "DHCP4_HOST_NAME=foobar"\&. .RE .PP \fIIP6_ and DHCP6_\fR .RS 4 The same variables as for IPv4 are available for IPv6, but the prefixes are IP6_ and DHCP6_ instead\&. .RE .PP \fICONNECTIVITY_STATE\fR .RS 4 The network connectivity state, which can take the values defined by the NMConnectivityState type, from the org\&.freedesktop\&.NetworkManager D\-Bus API: UNKNOWN, NONE, PORTAL, LIMITED or FULL\&. Note: this variable will only be set for connectivity\-change actions\&. .RE .PP In case of VPN, VPN_IP_IFACE is set, and IP4_*, IP6_* variables with VPN prefix are exported too, like VPN_IP4_ADDRESS_0, VPN_IP4_NUM_ADDRESSES\&. .PP The content of the user setting for the connection being activated is also passed via environment variables\&. Each key is stored in a variable with name CONNECTION_USER_ concatenated with the encoding of the key name\&. The encoding works as follows: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} lowercase letters become uppercase .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} uppercase letters are prefixed with an underscore .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} numbers do not change .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} a dot is replaced with a double underscore .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} any other character is encoded with an underscore followed by its 3\-digit octal representation .RE .sp For example, key test\&.foo\-Bar2 is stored in a variable named CONNECTION_USER_TEST__FOO_055_BAR2\&. .PP Dispatcher scripts are run one at a time, but asynchronously from the main NetworkManager process, and will be killed if they run for too long\&. If your script might take arbitrarily long to complete, you should spawn a child process and have the parent return immediately\&. Scripts that are symbolic links pointing inside the /etc/NetworkManager/dispatcher\&.d/no\-wait\&.d/ directory are run immediately, without waiting for the termination of previous scripts, and in parallel\&. Also beware that once a script is queued, it will always be run, even if a later event renders it obsolete\&. (Eg, if an interface goes up, and then back down again quickly, it is possible that one or more "up" scripts will be run after the interface has gone down\&.) .SH "BUGS" .PP Please report any bugs you find in NetworkManager at the \m[blue]\fBNetworkManager issue tracker\fR\m[]\&\s-2\u[1]\d\s+2\&. .SH "SEE ALSO" .PP \m[blue]\fBNetworkManager home page\fR\m[]\&\s-2\u[2]\d\s+2, \fBNetworkManager\fR(8), .SH "NOTES" .IP " 1." 4 NetworkManager issue tracker .RS 4 \%https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues .RE .IP " 2." 4 NetworkManager home page .RS 4 \%https://networkmanager.dev .RE