Updated: May 06, 2022

Point-to-Point protocol daemon


pppd [options]

Runs on:

QNX Neutrino


For details about the options, see pppd in the NetBSD documentation. The following options are supported by NetBSD but aren't documented there:

Require the peer to authenticate itself using CHAP (Challenge-Handshake Authentication Protocol) authentication. Default is no authentication required (usually a server option).
netmask n
Set the interface netmask to n, a 32-bit netmask in “decimal dot” notation (e.g., The default depends on the class of the IP address (usually a server option).
Don't send log messages to any file descriptor.
Require the peer to authenticate itself using PAP (Password Authentication Protocol). The default is no authentication required (usually a server option).

The terminal/serial driver can be configured to only send data via PPP whenever it detects a specific framing character. Because PPP does its own packet frame checking as part of its processing, by default, frame checking occurs twice (once in the serial driver and once in PPP).

This frame checking at the serial driver level reduces the number of message passes between the terminal driver and PPP because data is passed to PPP on PPP frame boundaries rather than whenever bytes are available.

The +/-pktcheck option tells PPP to not configure the terminal/serial driver to do this packet frame checking and to simply pass data to PPP when it is available.

With USB modems, because data comes in chunks rather than byte-by-byte, the terminal/serial driver generally gets full PPP packets anyway and frame checking in the serial driver does not reduce the number of message passes. In a real-hardware, UART case, because the data streams is byte-by-byte (rather than USB block transfers), the frame checking at the serial driver level is more helpful.

QNX Neutrino supports multilink PPP, so our pppd daemon supports the following options, contrary to what the NetBSD documentation says:

The following are specific to QNX Neutrino:

Write the server-supplied nameserver address to the _CS_RESOLVE configuration string (the default).
Don't write the server-supplied nameserver address to the _CS_RESOLVE configuration string.
Don't write the server-supplied nameserver address to /etc/resolv.conf file(the default).
Write the server-supplied nameserver address to the /etc/resolv.conf file.
Read PAP or CHAP secrets from standard input. If you use this option, you need to specify explicitly a serial device on the command line.
usefd filedes
Use this file descriptor to send or receive pppd packets instead of opening a tty_name.
useuserdns nameserver_IP
Specify the nameserver to use. This overrides any nameservers provided by the server.


The pppd daemon is used to establish TCP/IP serial connections using the point-to-point protocol (PPP). For more information, see pppd in the NetBSD documentation.

  • This utility needs to have the setuid (“set user ID”) bit set in its permissions. If you use mkefs, mketfs, mkifs, or mkqnx6fs on a Windows host to include this utility in an image, use the perms attribute to specify its permissions explicitly, and the uid and gid attributes to set the ownership correctly.
  • This utility is PAM-aware and supported by the PAM framework. For more information about how QNX Neutrino uses the OpenPAM framework, see “PAM” in the System Security Guide.

Based on:

RFC 1144, RFC 1321, RFC 1332, RFC 1334, RFC 1549, RFC 1661, RFC 1662, RFC 1962, RFC 1990


The following signals have the specified effect when sent to the pppd process:

These signals cause pppd to terminate the link (by closing LCP), restore the serial device settings, and exit.
Indicates that the physical layer has been disconnected; pppd attempts to restore the serial device settings and then exits.

For MS-CHAP, authentication support is client-side only; it can be used to authenticate ourselves, but not the peer.

If you spawn pppd from another program and specify the nodetach or updetach option, and if a signal is dropped on pppd while it's running a connect or disconnect script, pppd raises the signal on the entire process group, including the parent (i.e., the program that spawned pppd). This could cause the parent to terminate unexpectedly. To avoid this, spawn pppd with the SPAWN_SETGROUP set in the inheritance structure. For more information, see spawn() in the QNX Neutrino C Library Reference.