# SPDX-License-Identifier: GPL-2.0-or-later

Changes from version 3.15 to 4.0:

- Release 4.0 (2023-04-26)

- SPDX-License-Identifier: tags added to most source files

- rp-pppoe.so plugin: Modified to compile against both pppd >= 2.5.0 and
  pppd < 2.5.0.

- pppoe-server: If -L or -R option is specified as 0.0.0.0, then IP allocation
  is delegated to pppd.

- pppoe-server: New -g option specifies the path of the rp-pppoe.so plugin to
  use with pppd in kernel-mode PPPoE.

- pppoe-server: New -U option specifies a UNIX-domain control socket.  This
  lets you send control commands to the server while it is running; see the
  pppoe-server man page for details.

- All source code: Many cleanups and use of standard types like uint16_t rather
  than ones we define.

- All source code: Support for OSes other than Linux has been dropped.

- Documentation: Updated fro modern Linux systems.

- Cleanup: The following old and obsolete files have been removed:
  - Old connection scripts scripts/pppoe-connect.in, scripts/pppoe-start.in,
    scripts/pppoe-init-suse.in, scripts/pppoe-setup.in, scripts/pppoe-status,
    scripts/pppoe-init.in, and scripts/pppoe-stop.in
  - Obsolete firewall scripts configs/firewall-standalone and
    configs/firewall-masq
  - Obsolete configuration files configs/pppoe.conf and configs/pap-secrets
  - The Tcl/Tk gui script gui/tkpppoe.in and supporting files
  - The RPM spec file rp-pppoe.spec

Changes from version 3.14 to 3.15:

- Release 3.15 (2021-05-07)

- src/pppoe.c: Don't ignore SIGTERM and SIGINT.  Send PADT and exit
  if one of those signals is received.

- General: Switch from net-tools (ifconfig and friends) to iproute2 (ip ...)
  on Linux.

Changes from version 3.13 to 3.14:

- Release 3.14 (2020-05-26)

- Delete scripts/pppoe-init-turbolinux.in - TurboLinux is defunct.

- pppoe-server: Add -H and -M options for sending HURL and MOTM packets
  respectively.

- Change VERSION macro to RP_VERSION to avoid conflict with pppd macro.

- Apply all of the patches at
  https://github.com/nabijaczleweli/rp-pppoe/tree/patches/0006-touchups-3.14-BETA-2-v1
  which fix up various compile-time warnings.

- Apply all of the patches at
  https://github.com/nabijaczleweli/rp-pppoe/tree/patches/0004-mostly-cosmetic-3.14-BETA-1-v1
  which implement the following 6 changes:

- 1. Clarify a couple of comments
- 2. Remove the '@' before the command that installs the plugin, in the Makefile
- 3. Fix a typo in doc/HOW-TO-CONNECT
- 4. Use echo instead of /bin/echo in scripts
- 5. Fix potential snprintf(...) truncation
- 6. Cosmetic fix to copyright printout

- Apply all the patches at
  https://github.com/nabijaczleweli/rp-pppoe/tree/patches/0002-pppd-bugfixes-3.13-v1
  which implement the following 13 changes:

- 1. Don't exit if we time out waiting for PADO/PADS packets if
  persist option set
- 2. Remove unused variable
- 3. Don't error out if device is not Ethernet if doit is 0 in PPPoEDevnameHook
- 4. Use one 8-bit bitfield and macros for both ver and type in PPPoEPacket
- 5. Remove unnecessary casts from common.c
- 6. Replace strDup() with POSIX strdup(3)
- 7. Extract expiration check into time_left() function
- 8. Suppress false error message on PPPoE disconnect
- 9. Send PADT on PPPoE disconnect
- 10. Various fixes for errors found by coverity static analysis
- 11. Remove all references to cdefs.h
- 12. Eliminate snprintf-related compiler warning in plugin.c
- 13. Make tag parsing loop condition more accurate

Changes from version 3.12 to 3.13:

- Release 3.13 (2018-11-25)

- Fix potential use-after-free bug

- Properly detecte kernel-mode PPPoE; fix compilation problems on
  Debian Jessie and Debian Stretch.

Changes from version 3.11 to 3.12:

- Update author's name to "Dianne Skoll"

- Add "-W" option to pppoe executable to explicitly set a Host-Unique value

- Fix a few compiler warnings and configure script bugs.

- Removed dead code

Changes from Version 3.10 to 3.11:

- Make the rp-pppoe.so plugin avoid calling exit() if the "persist" pppd
  option was given.

- Permit both PPPoE server and client to specify an MTU/MRU of 1500 assuming
  the underlying Ethernet interface has an MTU of at least 1508.  The larger
  MTU is negotiated per RFC 4638.  NOTE: Only available with kernel-mode
  plugin, not user-mode pty redirector.

- Get rid of hard-coded nobsdcomp, nodeflate, novj and novjccomp options
  in pppoe-server.

- Apply patch from Philip Prindeville to allow cross-compiling.

- Handle UNIT=xxx directive in pppoe-connect. (Keith Waters)

- Add "-i" flag to pppoe-server to ignore PADIs if there are no free sessions.
  Change suggested by Miroslav Lednicky.

- Ignore PADTs not destined for our ethernet address.

- Add "-X <pidfile>" option to pppoe-server.

- Cleanup Makefile.in. (Philip Prindeville)

- In plugin, don't set devnam if it's already set. (Mike Ireton)

- Eliminate race condition in signal handling.

- pppoe-server: Add -q and -Q options to allow specification of path to
  pppd and pppoe programs respectively.

- Add a few more sanity checks to pppoe-server packet handling.

- Use -fno-strict-aliasing when compiling with gcc to avoid possible problems
  from -O2 optimization level.

Changes from Version 3.9 to 3.10: (30 June 2008)

- Fixed compilation problems on various platforms.

- The Makefiles now use (standard) DESTDIR instead of (non-standard)
  RPM_INSTALL_ROOT to relocate installed files.

- Spec file has been updated (it had languished since 3.6.)

Changes from Version 3.8 to 3.9: (21 June 2008)

- pppoe-server has new "-x" option to limit the number of sessions per
  MAC address.

- Added proper timeout handling while waiting for PADO/PADS.

- Fix race condition with some access concentrators that move very quickly
  into session mode (problem noted by Luigi Sgro)

- Fixed compilation problem on BSD.

- Fixed compilation problems with old versions of gcc

- Remove superfluous options in scripts/pppoe-connect.in

Changes from Version 3.7 to 3.8: (2 April 2006)

- Adjusted code and made it possible to disable debugging code to shrink
  size of pppoe executable.

- Fixed bug in MD5 code that caused pppoe-server to segfault on 64-bit
  machines.

- Made various functions and variables static that didn't need to be visible
  outside their source files.

Changes from Version 3.6 to 3.7:

- Fixed typo in the firewall-standalone sample firewall script.
  Fix courtesy of Robert Vogelgesang <vogel@users.sourceforge.net>

- Added -O option to pppoe-server to let you specify a different default
  options file for pppd instead of /etc/ppp/pppoe-server-options
  Feature courtesy of Robert Vogelgesang <vogel@users.sourceforge.net>

- Fixed some silliness and incorrectness in configure.in.
  Feature courtesy of Robert Vogelgesang <vogel@users.sourceforge.net>

- Fixed a typo in pppoe-connect.in that made it fail if used with the
  kernel-mode plugin.

- Make pppoe-server prepend "nic-" to interface name if used with
  kernel-mode plugin.  This lets you use interfaces that don't start
  with "eth" more easily.


Changes from Version 3.5 to 3.6:

- Changed the names of commands from adsl-* to pppoe-* to more logically
  name the scripts.  NOTE INCOMPATIBILITY:

  OLD NAME                   NEW NAME
  adsl-start                 pppoe-start
  adsl-stop                  pppoe-stop
  adsl-status                pppoe-status
  adsl-connect               pppoe-connect
  adsl-setup                 pppoe-setup

- Changed sample firewall scripts to use iptables instead of the old ipchains
  command.

- Updated KERNEL-MODE-PPPOE instructions to reflect more modern pppd that
  is commonly distributed.

- Make the userland pppoe daemon run as "nobody" if possible, once session
  has started.

- Make userland pppoe program somewhat safe if it is installed SUID or
  SGID.  Note that I still do *NOT* recommend a SUID/SGID pppoe.

- Fix long-standing bug in pppoe-server that passed arguments to pppd in the
  wrong order.

- Fix kernel-mode plugin.  It was broken by changes to pppd.  The pppd
  maintainers fixed their version of the plugin, but neglected to inform me.
  Thanks a lot, guys!

- Make plugin accept argument of the form "nix-XXXX" to force it to use
  device "XXXX" as the Ethernet interface.  This allows the use of devices
  whose names do not start with "eth"


Changes from Version 3.4 to 3.5:

- Fixes for compilation on Solaris.


Changes from Version 3.3 to 3.4:

- INCOMPATIBILITY WITH EARLIER VERSIONS:
  Kernel-mode plugin now is built against latest CVS ppp source rather than
  Michal Ostrowski's patched version.  If you use kernel-mode PPPoE, you
  MUST use the CVS version of the ppp source code with rp-pppoe 3.4.

- Print PPPoE session number when connection terminates.  Thanks to
  Alexander Dalloz for suggesting this.

- Fixed a bug in MSS clamping -- it now works with protocol-field compression.
  Thanks to Gerd v. Egidy for the patch.

- Ignore SIGINT and SIGTERM so LCP termination packets make it out.


Changes from Version 3.2 to 3.3:

- Client works on Solaris again.  It was broken in 3.2.

- Added DEFAULTROUTE=yes|no option to configuration file.

- Server parses address pool file better.

- Server address pool allows ranges of addresses on a line: a.b.c.d-e

- Added "-d" (=debug) and "-P" (=check pool file syntax) options to
  pppoe-server.


Changes from Version 3.1 to 3.2:

- Client now ignores PADT's if they are from the wrong source MAC address
  or to the wrong destination MAC address.

- Minor fixes to Makefile.in for Turbolinux.


Changes from Version 3.0 to 3.1:

- Improved KERNEL-MODE-PPPOE instructions

- Works with patched pppd 2.4.1

- Many improvements to server:  Added "-u" and "-r" options; server can
  now respond to request on multiple Ethernet interfaces.

- SECURITY BUG FIX: Server now ignores PADT's if they are from the wrong
  source MAC address.  You are STRONGLY RECOMMENDED to upgrade to 3.1
  if you use pppoe-server in production.


Changes from Version 2.8 to 3.0:

- Many small improvements to server.  Server now only makes one
  discovery socket, systemwide, with addition of "-n" option to pppoe.

- Fixes for compilation problems on BSD, Solaris and some Linux platforms.

- Added "-p" option to pppoe-server to allow you to specify a pool of
  IP addresses to assign to clients.

- Added GUI system (tkpppoe).  This work was funded by Iospan
  Wireless, Inc.  The GUI includes a Set-UID wrapper (pppoe-wrapper)
  which allows ordinary users to control a link (if so authorized.)
  I believe the wrapper script is secure, but please audit the
  source code (gui/wrapper.c) if you have any concerns.

- Changes to scripts and pppoe.conf.  DNS setup is now dynamic (happens
  each time adsl-connect runs.)

- Made relay.c check packet lengths rigorously; made it throw out Ethernet
  frame padding on session packets as well as discovery packets.


Changes from Version 2.7 to 2.8:

- Added init scripts for TurboLinux, courtesy of Yasuhiro Sumi.

- Made relay.c check packet lengths rigorously; made it throw out Ethernet
  frame padding on discovery packets.

*** NOTE: 2.7 was not released publicly


Changes from Version 2.6 to 2.7:

- Completely restructured source file tree.

- Much internal restructuring to eliminate a bunch of global variables.

- adsl-connect now executes /etc/ppp/adsl-lost whenever connection is dropped
  or cannot be established.

- Split pppoe.c into pppoe.c and discovery.c.

- Added relay agent (pppoe-relay).

- Made adsl-connect script use the "-U" (host-unique) option to better support
  multiple PPPoE links.

- Added support for kernel-mode PPPoE (EXPERIMENTAL, UNSUPPORTED!)

- Added "-o" option to PPPoE server; encoded server PID in pppoe-server
  cookie.


Changes from Version 2.5 to 2.6:

- Code should now compile cleanly on Caldera and Slackware Linux

- Fixed rp-pppoe.spec file to work on Mandrake and Red Hat.

- Deleted some obsolete files

- Fixed bug in Solaris/x86 port (thanks to Philippe Levan)

- Made shell scripts nicer under Solaris (again, Philippe Levan)

- Made adsl-status look under /var/run and /etc/ppp for PID files.  Should
  fix problems with NetBSD.

- Added PPPD_EXTRA to pppoe.conf; made the PID file depend on the config
  file name.  This makes it easier to run multiple PPPoE sessions.


Changes from Version 2.4 to 2.5:

- Tested for zero-length TCP option-length field, and for reverse-packing
  of type/code bitfields.  Thanks to Robert Schlabbach for pointing out
  these problems.

- Set umask to 077 in adsl-setup.in to protect created files like
  /etc/ppp/pap-secrets.


Changes from Version 2.3 to 2.4:

- Fixed spec file to automatically add .gz extension to man files as required

- Tightened firewall rules.

- Better check for /var/run in adsl-status; minor shell script fixes and
  cleanups for NetBSD and Solaris.

- Added FAQ to HOW-TO-CONNECT regarding running a script each time a
  connection is made.


Changes from Version 2.2 to 2.3:

- Fixed the init script to create/remove /var/lock/subsys/adsl (patch
  courtesy of Charley Carter.)

- Added support (under Linux) for N_HDLC line discipline which should
  greatly reduce CPU usage.  My tests show it cuts CPU usage in half.
  My 486 DX2/66 gets 800 kb/s at 22% CPU usage.

- adsl-connect uses "setsid" (if available) so that adsl-stop doesn't kill
  its caller.  There is (IMO) a bug in pppd which kills all processes in
  its process group if the "pty" option is used.  The setsid program gets
  around this bug, on Linux at least.

- Port to Solaris, courtesy of David Holland.

- Renamed spec file from "spec" to "rp-pppoe.spec" and made some cleanups.
  NOTE: Red Hat, in their infinite wisdom, decided to make the new RPM
  compress man pages automatically.  You may have problems building RPM's
  from source unless you get the latest rpm package and make sure it
  compresses man pages.


Changes from Version 2.1 to 2.2:

- Added "-f" option to pppoe to allow use of any Ethernet frame type
  for PPPoE.  USE WITH CAUTION -- this is a workaround for broken DSL
  providers, not something you should monkey with freely!

- Added pppoe-sniff program to help expose non-standard PPPoE implementations.


Changes from Version 2.0 to 2.1:

- Fixed minor bugs in bounds-checking

- Modified adsl-status to use output of "netstat -r -n" to determine whether
  or not link is up.  This should make it independent of locale, I hope!

- Added "-k" and "-d" options to pppoe.


Changes from Version 1.9 to 2.0:

- Addition of pppoe-server

- Massive internal code restructuring

- Zealous bounds-checking everywhere.

- adsl-setup now quotes user name and password in /etc/ppp/pap-secrets.

- Ported to OpenBSD, FreeBSD and NetBSD, courtesy of Geoff Mottram
  and Yannis Sismanis.

- Rearranged adsl-* shell scripts, courtesy of Heiko Schlittermann.

- Fixed bug in which Host-Uniq did not work if access concentrator sent
  a cookie.

- Addition of SuSE-specific "init" script, courtesy of Gary Cameron.


Changes from Version 1.8 to 1.9:

- Added some more documentation to HOW-TO-CONNECT

- Demand-dialling option now works correctly

- SIGHUP terminates pppoe after sending a PADT to the access concentrator

- Minor cleanups to connection shell scripts


Changes from Version 1.7 to 1.8:

- Added demand-dialling option

- Clarified HOW-TO-CONNECT

- Added adsl-status script

- Added "restart" and "status" options to Red Hat /etc/rc.d/init.d/adsl script

- Made adsl-setup check for existence of pppd

- Wildcarded external interface in firewall rules

- Made pppoe send a PADT frame if connection is terminated

$Id$
