--- /dev/null
+#
+# Copyright (C) 2006-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=rp-pppoe
+PKG_VERSION:=3.11
+PKG_RELEASE:=1
+PKG_MAINTAINER:=Daniel Dickinson <lede@daniel.thecshore.com>
+PKG_LICENSE:=LGPL-2.0+
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://roaringpenguin.com/files/download
+PKG_MD5SUM:=13b5900c56bd602df6cc526e5e520722
+
+PKG_BUILD_DEPENDS:=ppp
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/rp-pppoe/Default
+ SECTION:=net
+ CATEGORY:=Network
+ TITLE:=PPPoE (PPP over Ethernet)
+ URL:=http://roaringpenguin.com/products/pppoe
+ SUBMENU:=dial-in/up
+endef
+
+define Package/rp-pppoe/Default/description
+ Dubbed RP-PPPoE, this open-source product is ideal for Linux users with
+ a DSL "modem" whose Internet service provider uses PPPoE.
+endef
+
+define Package/rp-pppoe-common
+ $(call Package/rp-pppoe/Default)
+ TITLE+= common
+ DEPENDS:=+ppp
+endef
+
+define Package/rp-pppoe-common/description
+$(call Package/rp-pppoe/Default/description)
+
+ This package contains files common to server and relay.
+endef
+
+define Package/rp-pppoe-common/conffiles
+/etc/config/pppoe
+endef
+
+define Package/rp-pppoe-relay
+ $(call Package/rp-pppoe/Default)
+ DEPENDS:=+rp-pppoe-common
+ TITLE+= relay
+ DEFAULT:=n
+endef
+
+define Package/rp-pppoe-relay/description
+$(call Package/rp-pppoe/Default/description)
+
+ This package contains pppoe-relay.
+endef
+
+define Package/rp-pppoe-relay/conffiles
+/etc/default/pppoe-relay
+endef
+
+define Package/rp-pppoe-server
+ $(call Package/rp-pppoe/Default)
+ DEPENDS:=+rp-pppoe-common
+ TITLE+= server
+endef
+
+define Package/rp-pppoe-server/conffiles
+/etc/ppp/pppoe-server-options
+/etc/ppp/options
+/etc/ppp/pap-secrets
+/etc/ppp/chap-secrets
+/etc/default/pppoe-server
+endef
+
+define Package/rp-pppoe-server/description
+$(call Package/rp-pppoe/Default/description)
+
+ This package contains pppoe-server.
+endef
+
+define Package/rp-pppoe-sniff
+ $(call Package/rp-pppoe/Default)
+ DEPENDS:=+ppp @BROKEN
+ TITLE+= sniffer
+endef
+
+define Package/rp-pppoe-sniff/description
+$(call Package/rp-pppoe/Default/description)
+
+ This package contains pppoe-sniff.
+endef
+
+TARGET_CFLAGS += -I$(PKG_BUILD_DIR)/src/libevent -isystem $(PKG_BUILD_DIR)/missing-headers
+CONFIGURE_PATH := ./src
+CONFIGURE_ARGS += ac_cv_path_PPPD=/usr/sbin/pppd --enable-plugin=$(STAGING_DIR)/usr/include/
+MAKE_FLAGS := DESTDIR="$(PKG_INSTALL_DIR)" install
+MAKE_PATH := ./src
+
+define Build/Prepare
+ mkdir -p $(PKG_BUILD_DIR)/missing-headers/net
+ $(CP) ./files/ppp_defs.h $(PKG_BUILD_DIR)/missing-headers/net/
+ $(call Build/Prepare/Default,$(1),$(2),$(3))
+endef
+
+define Package/rp-pppoe-common/install
+ $(INSTALL_DIR) $(1)/etc/config
+ $(INSTALL_CONF) ./files/pppoe.config $(1)/etc/config/pppoe
+endef
+
+define Package/rp-pppoe-relay/install
+ $(INSTALL_DIR) $(1)/etc/init.d $(1)/etc/uci-defaults
+ $(INSTALL_BIN) ./files/pppoe-relay.init $(1)/etc/init.d/pppoe-relay
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(CP) $(PKG_INSTALL_DIR)/usr/sbin/pppoe-relay $(1)/usr/sbin/
+ $(INSTALL_DATA) ./files/pppoe-relay.default $(1)/etc/uci-defaults/
+endef
+
+define Package/rp-pppoe-server/install
+ $(INSTALL_DIR) $(1)/etc/init.d $(1)/etc/uci-defaults
+ $(INSTALL_BIN) ./files/pppoe-server.init $(1)/etc/init.d/pppoe-server
+ $(INSTALL_DIR) $(1)/etc/ppp
+ $(INSTALL_CONF) ./files/ppp/{options,pap-secrets,pppoe-server-options} $(1)/etc/ppp/
+ $(INSTALL_DIR) $(1)/etc/ppp/plugins
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(CP) $(PKG_INSTALL_DIR)/usr/sbin/pppoe-server $(1)/usr/sbin/
+ $(CP) $(PKG_INSTALL_DIR)/etc/ppp/plugins/rp-pppoe.so $(1)/etc/ppp/plugins/
+ $(INSTALL_DATA) ./files/pppoe-server.default $(1)/etc/uci-defaults/
+endef
+
+define Package/rp-pppoe-sniff/install
+ $(INSTALL_DIR) $(1)/usr/sbin
+ $(CP) $(PKG_INSTALL_DIR)/usr/sbin/pppoe-sniff $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,rp-pppoe-common))
+$(eval $(call BuildPackage,rp-pppoe-relay))
+$(eval $(call BuildPackage,rp-pppoe-server))
+$(eval $(call BuildPackage,rp-pppoe-sniff))
--- /dev/null
+#debug
+logfile /dev/null
+noipdefault
+noaccomp
+nopcomp
+nocrtscts
+lock
+maxfail 0
+lcp-echo-failure 5
+lcp-echo-interval 1
--- /dev/null
+# client server secret IP addresses
+* * * *
--- /dev/null
+# PPP options for the PPPoE server
+# LIC: GPL
+require-pap
+login
+lcp-echo-interval 10
+lcp-echo-failure 2
+mru 1492
+mtu 1492
+
--- /dev/null
+#ifndef _NET_PPP_DEFS_H
+#define _NET_PPP_DEFS_H
+
+#define __need_time_t
+#include <time.h>
+
+#include <asm/types.h>
+#include <linux/ppp_defs.h>
+
+#endif
+
--- /dev/null
+#!/bin/sh
+
+if [ -e /etc/default/pppoe-relay ]; then
+ if [ -z "$(uci get pppoe.@pppoe_relay[-1] 2>/dev/null)" ]; then
+ uci add pppoe pppoe_relay
+ fi
+ uci set pppoe.@pppoe-relay[-1].use_non_uci_config=1
+ uci commit pppoe
+fi
+
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2011 OpenWrt.org
+
+START=50
+USE_PROCD=1
+
+pppoe_triggers() {
+ local cfg="$1"
+ local interface server_interfaces client_interfaces both_interfaces
+ config_get server_interfaces "$cfg" server_interface
+ config_get client_interfaces "$cfg" client_interface
+ config_get both_interfaces "$cfg" both_interfaces
+ for interface in $server_interfaces; do
+ append interfaces "$interface" "|"
+ done
+ for interface in $client_interfaces; do
+ append interfaces "$interface" "|"
+ done
+ for interface in $both_interfaces; do
+ append interfaces "$interface" "|"
+ done
+}
+
+pppoe_relay_instance() {
+ local cfg="$1"
+ local interface server_interfaces client_interfaces both_interfaces maxsessions timeout OPTIONS
+ config_get server_interfaces "$cfg" server_interface
+ config_get client_interfaces "$cfg" client_interface
+ config_get both_interfaces "$cfg" both_interfaces
+ config_get maxsessions "$cfg" maxsesssions
+ config_get timeout "$cfg" timeout
+ config_get_bool use_non_uci_config "$cfg" use_non_uci_config 0
+
+ if [ "$use_non_uci_config" -gt 0 ]; then
+ . /etc/default/pppoe-relay
+ else
+ [ -z "${server_interfaces}${client_interfaces}${both_interfaces}" ] && return 1
+ for interface in $server_interfaces; do
+ append OPTIONS "-S $interface"
+ done
+ for interface in $client_interfaces; do
+ append OPTIONS "-C $interface"
+ done
+ for interface in $both_interfaces; do
+ append OPTIONS "-B $interface"
+ done
+ [ -n "$maxsesssions" ] && append OPTIONS "-n $maxsesssions"
+ [ -n "$timeout" ] && append OPTIONS "-i $timeout"
+ fi
+
+ procd_open_instance
+ procd_set_param command /usr/sbin/pppoe-relay -F
+ procd_append_param command $OPTIONS
+ procd_close_instance
+}
+
+start_service() {
+ local use_non_uci_config
+
+ config_load pppoe
+ config_foreach pppoe_relay_instance pppoe_relay
+}
+
+reload_triggers() {
+ local interfaces
+
+ config_load pppoe
+ config_foreach pppoe_triggers pppoe_relay
+
+ procd_add_reload_trigger "pppoe"
+ procd_add_interface_trigger "$interfaces"
+}
--- /dev/null
+#!/bin/sh
+
+if [ -e /etc/default/pppoe-server ]; then
+ if [ -z "$(uci get pppoe.@pppoe_server[-1] 2>/dev/null)" ]; then
+ uci add pppoe pppoe_server_
+ fi
+ uci set pppoe.@pppoe-server[-1].use_non_uci_config=1
+ uci commit pppoe
+fi
+
--- /dev/null
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2011 OpenWrt.org
+
+START=50
+USE_PROCD=1
+
+pppoe_triggers() {
+ local cfg="$1"
+ local interface
+ config_get interface "$cfg" interface
+}
+
+pppoe_instance() {
+ local cfg="$1"
+ local interface ac_name service_names service_name maxsessionsperpeer localip firstremoteip maxsessions optionsfiles randomsession unit offset timeout mss sync OPTIONS
+ config_get interface "$cfg" interface
+ config_get ac_name "$cfg" ac_name
+ config_get service_names "$cfg" service_name
+ config_get maxsessionsperpeer "$cfg" maxsesssionsperpeer
+ config_get localip "$cfg" localip
+ config_get firstremoteip "$cfg" firstremoteip
+ config_get maxsessions "$cfg" maxsessions
+ config_get optionsfile "$cfg" optionsfile
+ config_get_bool randomsession "$cfg" randomsession 1
+ config_get_bool unit "$cfg" unit 0
+ config_get offset "$cfg" offset
+ config_get timeout "$cfg" timeout
+ config_get mss "$cfg" mss
+ config_get_bool sync "$cfg" sync 0
+ config_get use_non_uci_config "$cfg" use_non_uci_config 0
+
+ if [ "$use_non_uci_config" -gt 0 ]; then
+ . /etc/default/pppoe-server
+ else
+ [ -z "$interface" ] && return 1
+ [ -n "$ac_name" ] && append OPTIONS "-C $ac_name"
+ for service_name in $service_names; do
+ append OPTIONS "-S $service_name"
+ done
+ append OPTIONS "-I $interface"
+ [ -n "$maxsesssionsperpeer" ] && append OPTIONS "-x $maxsesssionsperpeer"
+ [ -n "$localip" ] && append OPTIONS "-L $localip"
+ [ -n "$firstremoteip" ] && append OPTIONS "-R $firstremoteip"
+ [ -n "maxsessions" ] && append OPTIONS "-N $maxsessions"
+ [ -n "optionsfile" ] && append OPTIONS "-O $optionsfile"
+ [ "$randomsession" = "1" ] && append OPTIONS "-r"
+ [ "$unit" = "1" ] && append OPTIONS "-u"
+ [ -n "$offset" ] && append OPTIONS "-o $offset"
+ [ -n "$timeout" ] && append OPTIONS "-T $timeout"
+ [ -n "$mss" ] && append OPTIONS "-m $mss"
+ [ "$sync" = "1" ] && append OPTIONS "-s"
+ fi
+
+ procd_open_instance
+ procd_set_param command /usr/sbin/pppoe-server -F
+ procd_append_param command $OPTIONS
+ procd_set_param file /etc/ppp/options
+ procd_append_param file /etc/ppp/pppoe-server-options
+ procd_close_instance
+}
+
+start_service() {
+ config_load pppoe
+ config_foreach pppoe_instance pppoe_server
+}
+
+service_triggers() {
+ local interface
+ config_load pppoe
+ config_foreach pppoe_triggers pppoe_server
+
+ procd_add_reload_trigger "pppoe"
+ procd_add_interface_trigger "$interface"
+}
--- /dev/null
+#config pppoe_server
+# option interface eth1
+# option ac_name access-concentrator-name
+# list service_name service-name1
+# list service_name service-name2
+# option maxsessionsperpeer 0
+# option localip 192.168.2.1
+# option firsremoteip 192.168.2.2
+# option maxsessions 64
+# option optionsfile /etc/ppp/pppoe-server-options
+# option randomsessions 1
+# option unit 0
+# option offset 0
+# option timeout 60
+# option mss 1468
+# option sync 0
+
+#config pppoe_relay
+# list server_interface eth1
+# list client_interface eth0
+# list both_interface eth2
+# option maxsessions 64
+# option timeout 60
--- /dev/null
+--- a/src/configure
++++ b/src/configure
+@@ -3661,7 +3661,7 @@ done
+
+ for ac_header in linux/if.h
+ do :
+- ac_fn_c_check_header_compile "$LINENO" "linux/if.h" "ac_cv_header_linux_if_h" "#include<sys/socket.h>
++ ac_fn_c_check_header_compile "$LINENO" "linux/if.h" "ac_cv_header_linux_if_h" "#include <sys/socket.h>
+ "
+ if test "x$ac_cv_header_linux_if_h" = x""yes; then :
+ cat >>confdefs.h <<_ACEOF
+@@ -3675,10 +3675,11 @@ done
+ for ac_header in linux/if_pppox.h
+ do :
+ ac_fn_c_check_header_compile "$LINENO" "linux/if_pppox.h" "ac_cv_header_linux_if_pppox_h" "
+-#include<sys/socket.h>
+-#include<net/ethernet.h>
+-#include<linux/if.h>
+-#include<linux/in.h>
++#include <sys/socket.h>
++#include <net/ethernet.h>
++#include <linux/if.h>
++#include <linux/in.h>
++#include <linux/in6.h>
+
+ "
+ if test "x$ac_cv_header_linux_if_pppox_h" = x""yes; then :
+@@ -4611,7 +4612,7 @@ esac
+ $as_echo_n "checking packing order of bit fields... " >&6; }
+ if test "${rpppoe_cv_pack_bitfields+set}" != set ; then
+ if test "$cross_compiling" = yes; then :
+- $ECHO "no defaults for cross-compiling"; exit 0
++ rpppoe_cv_pack_bitfields="$ac_cv_pack_bitfields"
+ else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h. */
--- /dev/null
+--- a/src/Makefile.in
++++ b/src/Makefile.in
+@@ -71,7 +71,7 @@ pppoe-sniff: pppoe-sniff.o if.o common.o
+ @CC@ -o $@ $^ $(LDFLAGS)
+
+ pppoe-server: pppoe-server.o if.o debug.o common.o md5.o libevent/libevent.a @PPPOE_SERVER_DEPS@
+- @CC@ -o $@ @RDYNAMIC@ $^ $(LDFLAGS) $(PPPOE_SERVER_LIBS) -Llibevent -levent
++ @CC@ -o $@ @RDYNAMIC@ $^ $(LDFLAGS) $(PPPOE_SERVER_LIBS)
+
+ pppoe: pppoe.o if.o debug.o common.o ppp.o discovery.o
+ @CC@ -o $@ $^ $(LDFLAGS)
--- /dev/null
+Index: rp-pppoe-3.11/src/configure
+===================================================================
+--- rp-pppoe-3.11.orig/src/configure 2016-05-21 23:42:58.142423086 -0400
++++ rp-pppoe-3.11/src/configure 2016-05-21 23:42:58.178423086 -0400
+@@ -3646,7 +3646,7 @@
+ done
+
+
+-for ac_header in fcntl.h sys/dlpi.h sys/ioctl.h sys/time.h syslog.h unistd.h net/if_arp.h netinet/if_ether.h getopt.h sys/uio.h sys/param.h fcntl.h net/bpf.h netpacket/packet.h net/ethernet.h asm/types.h linux/if_packet.h linux/if_ether.h sys/socket.h sys/cdefs.h net/if.h net/if_dl.h net/if_ether.h net/if_types.h netinet/if_ether.h net/if_types.h net/if_dl.h
++for ac_header in fcntl.h sys/dlpi.h sys/ioctl.h sys/time.h syslog.h unistd.h net/if_arp.h getopt.h sys/uio.h sys/param.h fcntl.h net/bpf.h netpacket/packet.h asm/types.h linux/if_packet.h linux/if_ether.h sys/socket.h sys/cdefs.h net/if.h net/if_dl.h net/if_types.h net/if_types.h net/if_dl.h
+ do :
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+Index: rp-pppoe-3.11/src/if.c
+===================================================================
+--- rp-pppoe-3.11.orig/src/if.c 2012-08-17 14:31:25.000000000 -0400
++++ rp-pppoe-3.11/src/if.c 2016-05-21 23:45:13.546423086 -0400
+@@ -30,10 +30,6 @@
+ #include <linux/if_packet.h>
+ #endif
+
+-#ifdef HAVE_NET_ETHERNET_H
+-#include <net/ethernet.h>
+-#endif
+-
+ #ifdef HAVE_ASM_TYPES_H
+ #include <asm/types.h>
+ #endif
+Index: rp-pppoe-3.11/src/plugin.c
+===================================================================
+--- rp-pppoe-3.11.orig/src/plugin.c 2012-08-17 14:31:25.000000000 -0400
++++ rp-pppoe-3.11/src/plugin.c 2016-05-21 23:43:55.314423086 -0400
+@@ -49,7 +49,6 @@
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <signal.h>
+-#include <net/ethernet.h>
+ #include <net/if_arp.h>
+ #include <linux/ppp_defs.h>
+ #include <linux/if_pppox.h>