---
name: "pppoed"
section: "8"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/pppoed"
---

# pppoed(8)

handle incoming PPP over Ethernet connections

## NAME

**pppoed** – handle incoming PPP over Ethernet connections

## SYNOPSIS

**pppoed** \[**-Fd**\] \[**-P** *pidfile*\] \[**-a** *name*\] \[**-e** *exec* \| **-l** *label*\] \[**-n** *ngdebug*\] \[**-p** *provider*\] *interface*

## DESCRIPTION

The **pppoed** utility listens to the given *interface* for PPP over Ethernet (PPPoE) service request packets, and actions them by negotiating a session then invoking a [ppp(8)](/ppp/8.md) program. The negotiation is implemented by the “pppoe” netgraph node. See [ng\_pppoe(4)](/ng_pppoe/4.md) for details.

The **pppoed** utility will only offer services to clients requesting services from the given *provider*, which is taken as an empty name if not provided. If a provider name of “\*” is given, any PPPoE requests will be offered service.

The supplied *name* will be given as the access concentrator name when establishing the connection. If no *name* is given, the current base hostname is used.

After receiving a request (PADI) from the PPPoE netgraph node, **pppoed** [fork(2)](/fork/2.md)s a child process and returns to service further requests. The child process offers service (using *name*) and waits for a SUCCESS indication from the PPPoE node. On receipt of the SUCCESS indication, **pppoed** will execute

**exec** */usr/sbin/ppp* **-direct** *label*

as a shell sub-process. If *label* has not been specified, it defaults to *provider*. It is possible to specify another command using the *exec* argument. This is mandatory if *provider* and *label* are not given. The child process will have standard input and standard output attached to the same [netgraph(4)](/netgraph/4.md) data socket (see [ng\_socket(4)](/ng_socket/4.md)) when started.

The environment variables HISMACADDR and ACNAME are made available to the child process and are set to the MAC address of the peer and the name of the AC respectively.

Upon invocation, **pppoed** will attach a “pppoe” netgraph node to the relevant “ether” node using “*interface*:” as the node name, and then connect that “pppoe” node to a local “socket” node. If the **-F** option has not been given, **pppoed** will then go into the background and disassociate itself from the controlling terminal. When the **-F** option is given, **pppoed** stays in the foreground.

If the **-d** option is given, additional diagnostics are provided (see the DIAGNOSTICS section below). If the **-n** option is given, **NgSetDebug**() is called with an argument of *ngdebug*.

If *pidfile* is given, **pppoed** will write its process ID to this file on startup.

## DIAGNOSTICS

After creating the necessary [netgraph(4)](/netgraph/4.md) nodes as described above, **pppoed** uses [syslogd(8)](/syslogd/8.md) to report all incoming connections. If the **-d** option is given, **pppoed** will report on the child processes creation of a new netgraph socket, its service offer and the invocation of the [ppp(8)](/ppp/8.md) program. If the **-n** option is given, netgraph diagnostic messages are also redirected to [syslogd(8)](/syslogd/8.md).

It is sometimes useful to add the following to */etc/syslog.conf*:

```
!pppoed
*.*				/var/log/pppoed.log
```

and the following to */etc/newsyslog.conf*:

```
/var/log/pppoed.log			640  3	   100	*     Z
```

## SEE ALSO

[NgSetDebug(3)](/NgSetDebug/3.md), [netgraph(4)](/netgraph/4.md), [ng\_ether(4)](/ng_ether/4.md), [ng\_pppoe(4)](/ng_pppoe/4.md), [ng\_socket(4)](/ng_socket/4.md), [syslog.conf(5)](/syslog.conf/5.md), [ppp(8)](/ppp/8.md), [syslogd(8)](/syslogd/8.md)

## HISTORY

The **pppoed** utility was written by Brian Somers ⟨*brian@Awfulhak.org*⟩ and first appeared in FreeBSD 3.4.

## BUGS

If another netgraph node is using the given interface, **pppoed** will fail to start. This is because [netgraph(4)](/netgraph/4.md) does not currently allow node chaining. This may change in the future.
