PPPOED(8)
π PPPOED(8) β the pppoed girlies' guide
okay so real talk, <rainbow>pppoed</rainbow> is from the System Manager's Manual section 8, and she is that girl for handling incoming PPP over Ethernet connections. buckle up bestie, we're going in π
β¨ SYNOPSIS β¨
pppoed [-Fd] [-P pidfile] [-a name] [-e exec | -l label] [-n ngdebug]
[-p provider] interface
like, that's the whole vibe. one interface, a bunch of flags, iconic behavior π
πΈ DESCRIPTION πΈ
so <pink>pppoed</pink> sits and listens on the interface you hand her, waiting for PPP over Ethernet (PPPoE) service request packets to show up. when one does? she actions it β negotiates a session, then invokes a ppp(8) program. and the negotiation itself is done by the βpppoeβ netgraph node, so go read ng_pppoe(4) for the juicy details π
here's the thing: <pink>pppoed</pink> will only offer services to clients who are requesting services from the provider you specified β and if you didn't specify one, that's taken as an empty name. but if you pass a provider name of β*β? then any PPPoE request gets offered service. she's generous like that π
the name you supply gets used as the access concentrator name when the connection is established. no name given? she just uses the current base hostname. periodt.
π¦ what actually happens when a request comes in
after receiving a request (PADI) from the PPPoE netgraph node, <pink>pppoed</pink> calls fork(2) and makes a whole child process, then goes right back to servicing more requests. like a true multitasking queen β¨
that child process offers service (using name) and then waits for a SUCCESS indication from the PPPoE node. and the moment she gets that SUCCESS? <pink>pppoed</pink> executes
exec /usr/sbin/ppp -direct label
as a shell sub-process π«Ά
- no
labelspecified? it defaults toprovider, easy. - you can specify a different command with the
execargument. - and that
execargument is mandatory if neitherprovidernorlabelare given β no cap, it's required.
when the child is started, its standard input and standard output are attached to the same netgraph(4) data socket (check ng_socket(4) for that one).
π environment variables, aka the little extras
the child process gets these two env vars handed to it:
HISMACADDRβ set to the MAC address of the peer πACNAMEβ set to the name of the AC π
β startup behavior (the part where she vanishes into the background)
upon invocation, <pink>pppoed</pink> attaches a βpppoeβ netgraph node to the relevant βetherβ node using βinterface:β as the node name, and then connects that βpppoeβ node to a local βsocketβ node.
then:
- if the
-Foption has not been given,<pink>pppoed</pink>goes into the background and disassociates herself from the controlling terminal π«₯ - if
-Fis given, she stays in the foreground, main character energy, watching everything π
π OPTIONS π
-Fβ stay in the foreground instead of backgrounding and detaching from the controlling terminal. she's not leaving, she's invested.-dβ turn on additional diagnostics (peep the βDIAGNOSTICSβ section below for the deets π).-Ppidfileβ ifpidfileis given,<pink>pppoed</pink>writes her process ID to that file on startup π-anameβ the name handed over as the access concentrator name when establishing the connection. if nonameis given, the current base hostname is used πΈ-eexecβ specify another command to run instead of the defaultexec /usr/sbin/ppp -direct label. this is mandatory ifproviderandlabelare both not given. (mutually exclusive with-l, iykyk)-llabelβ the label passed to/usr/sbin/ppp -direct label. iflabelhas not been specified, it defaults toprovider. (mutually exclusive with-e)-nngdebugβ if given,NgSetDebug()is called with an argument ofngdebugπ-pproviderβ only offer services to clients requesting services from thisprovider. taken as an empty name if not provided. a provider name ofβ*βmeans any PPPoE requests will be offered service π₯
and don't forget the trailing interface argument β that's the whole point bestie π
π DIAGNOSTICS π
after creating all those necessary netgraph(4) nodes we talked about up there, <pink>pppoed</pink> uses syslogd(8) to report all incoming connections π’
- with
-d, she reports on the child processes' creation of a new netgraph socket, its service offer, and the invocation of theppp(8)program. - with
-n, netgraph diagnostic messages are also redirected tosyslogd(8).
ngl it's 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
like, do it. your future self will thank you π«Ά
π§ SEE ALSO π§
NgSetDebug(3), netgraph(4), ng_ether(4), ng_pppoe(4), ng_socket(4), syslog.conf(5), ppp(8), syslogd(8)
the whole friend group, honestly π
π HISTORY π
<pink>pppoed</pink> was written by Brian Somers <brian@Awfulhak.org> and first appeared in FreeBSD 3.4. a legend, fr fr π
π BUGS π
okay so this is the messy part π if another netgraph node is already using the given interface, <pink>pppoed</pink> will fail to start. why? because netgraph(4) does not currently allow node chaining. that's just how it is rn. this may change in the future though, so manifesting β¨
and that's the page bestie, every single detail intact, no cap π
Debian Β· dated <hotpink>November 8, 1999</hotpink> Β· that's the source and version and date, mwah π slay, go configure your PPPoE π
π¦ where this page comes from
- freebsd 14.5: base 14.5
- freebsd 15.1: base 15.1
- Copyright (c) 1999-2001 Brian Somers <brian@Awfulhak.org>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms