include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=ppp
-PKG_VERSION:=2.5.1
+PKG_VERSION:=2.5.2
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/ppp-project/ppp
-PKG_SOURCE_DATE:=2024-09-18
-PKG_SOURCE_VERSION:=d5aeec65752d4a9b3bb46771d0b221c4a4a6539e
-PKG_MIRROR_HASH:=b98125933d8160ff3476b053414e787e65a94948c0ecee53f6261cd403ff4b03
+PKG_SOURCE_DATE:=2024-12-31
+PKG_SOURCE_VERSION:=9f612dc02c34509f062ed63b60bcc7e937e25178
+PKG_MIRROR_HASH:=677b71d23b668db986146e13b0c651f2ac506eb4fb244ffba1ff406cbae3511b
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
PKG_LICENSE:=BSD-4-Clause
PKG_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
-CONFIGURE_VARS += \
- enable_eaptls=no \
- enable_microsoft_extensions=yes \
- enable_peap=no
-
CONFIGURE_ARGS += \
- with_openssl=no \
- with_pam=no \
- with_pcap=no \
- with_srp=no \
- with_static_pcap=yes
+ --disable-cbcp \
+ --disable-eaptls \
+ --disable-mslanman \
+ --disable-openssl-engine \
+ --disable-peap \
+ --disable-systemd \
+ --enable-ipv6cp \
+ --enable-microsoft-extensions \
+ --enable-plugins \
+ --with-atm \
+ --with-static-pcap \
+ --without-openssl \
+ --without-pam \
+ --without-pcap \
+ --without-srp
define Package/ppp/Default
SECTION:=net
endef
ifeq ($(BUILD_VARIANT),multilink)
- CONFIGURE_VARS += \
- enable_multilink=yes
+ CONFIGURE_ARGS += \
+ --enable-multilink
endif
define Build/InstallDev
+++ /dev/null
-From: Shiji Yang <yangshiji66@outlook.com>
-Date: Fri, 4 Oct 2024 12:19:42 +0000
-Subject: [PATCH] pppd/crypto: fix build without openssl
-
-Compile openssl relevant code only when PPP_WITH_OPENSSL is defined.
-
-Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
----
- pppd/crypto.c | 4 ++++
- 1 file changed, 4 insertions(+)
-
---- a/pppd/crypto.c
-+++ b/pppd/crypto.c
-@@ -199,6 +199,7 @@ int PPP_crypto_init()
- {
- int retval = 0;
-
-+#ifdef PPP_WITH_OPENSSL
- #if OPENSSL_VERSION_NUMBER >= 0x30000000L
- g_crypto_ctx.legacy = OSSL_PROVIDER_load(NULL, "legacy");
- if (g_crypto_ctx.legacy == NULL)
-@@ -214,6 +215,7 @@ int PPP_crypto_init()
- goto done;
- }
- #endif
-+#endif
-
- retval = 1;
-
-@@ -224,6 +226,7 @@ done:
-
- int PPP_crypto_deinit()
- {
-+#ifdef PPP_WITH_OPENSSL
- #if OPENSSL_VERSION_NUMBER >= 0x30000000L
- if (g_crypto_ctx.legacy) {
- OSSL_PROVIDER_unload(g_crypto_ctx.legacy);
-@@ -239,6 +242,7 @@ int PPP_crypto_deinit()
- #if OPENSSL_VERSION_NUMBER < 0x10100000L
- ERR_free_strings();
- #endif
-+#endif
- return 1;
- }
-
+++ /dev/null
-From: Shiji Yang <yangshiji66@outlook.com>
-Date: Fri, 4 Oct 2024 14:02:14 +0000
-Subject: [PATCH] pppd: make pid directory before create the pid file
-
-If multilink feature is not enabled, the '/var/run/pppd' directory
-won't be created before adding pid file.
-
-Fixes error message:
-'Failed to create pid file /var/run/pppd/pppoe-wan.pid: No such file or directory'
-
-Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
----
- pppd/main.c | 3 +++
- 1 file changed, 3 insertions(+)
-
---- a/pppd/main.c
-+++ b/pppd/main.c
-@@ -921,6 +921,9 @@ create_pidfile(int pid)
- {
- FILE *pidfile;
-
-+#ifndef PPP_WITH_TDB
-+ mkdir_recursive(PPP_PATH_VARRUN);
-+#endif
- slprintf(pidfilename, sizeof(pidfilename), "%s/%s.pid",
- PPP_PATH_VARRUN, ifname);
- if ((pidfile = fopen(pidfilename, "w")) != NULL) {
+++ /dev/null
-From: Tan Zien <nabsdh9@gmail.com>
-Date: Tue, 1 Oct 2024 10:38:45 +0800
-Subject: [PATCH] pppd/crypto: fix gcc 14 build
-
-fix this:
-
-crypto.c: In function 'PPP_crypto_error':
-crypto.c:178:11: error: implicit declaration of function 'vsnprintf' [-Wimplicit-function-declaration]
- 178 | off = vsnprintf(buf, len, fmt, args);
- | ^~~~~~~~~
-crypto.c:41:1: note: include '<stdio.h>' or provide a declaration of 'vsnprintf'
- 40 | #include "crypto-priv.h"
- +++ |+#include <stdio.h>
- 41 |
-crypto.c:178:26: warning: 'vsnprintf' argument 2 type is 'int' where 'long unsigned int' is expected in a call to built-in function declared without prototype [-Wbuiltin-declaration-mismatch]
- 178 | off = vsnprintf(buf, len, fmt, args);
- | ^~~
-<built-in>: note: built-in 'vsnprintf' declared here
-
-Signed-off-by: Tan Zien <nabsdh9@gmail.com>
----
- pppd/crypto.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
---- a/pppd/crypto.c
-+++ b/pppd/crypto.c
-@@ -34,6 +34,7 @@
-
- #include <stdlib.h>
- #include <string.h>
-+#include <stdio.h>
-
- #include "pppd.h"
- #include "crypto.h"
-@@ -247,7 +248,6 @@ int PPP_crypto_deinit()
- }
-
- #ifdef UNIT_TEST
--#include <stdio.h>
-
- int debug;
- int error_count;
--- a/pppd/demand.c
+++ b/pppd/demand.c
-@@ -40,6 +40,8 @@
+@@ -34,6 +34,8 @@
#include <errno.h>
#include <fcntl.h>
#include <netdb.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/wait.h>
-@@ -47,6 +49,8 @@
+@@ -41,6 +43,8 @@
#include <sys/resource.h>
#include <sys/stat.h>
#include <sys/socket.h>
#ifdef PPP_WITH_FILTER
#include <pcap-bpf.h>
#endif
-@@ -223,6 +227,14 @@ loop_chars(unsigned char *p, int n)
+@@ -217,6 +221,14 @@ loop_chars(unsigned char *p, int n)
int c, rv;
rv = 0;
for (; n > 0; --n) {
c = *p++;
if (c == PPP_FLAG) {
-@@ -299,16 +311,100 @@ loop_frame(unsigned char *frame, int len
+@@ -293,16 +305,100 @@ loop_frame(unsigned char *frame, int len
* loopback, now that the real serial link is up.
*/
void
} else {
--- a/pppd/pppd-private.h
+++ b/pppd/pppd-private.h
-@@ -368,7 +368,7 @@ void demand_conf(void); /* config interf
+@@ -370,7 +370,7 @@ void demand_conf(void); /* config interf
void demand_block(void); /* set all NPs to queue up packets */
void demand_unblock(void); /* set all NPs to pass packets */
void demand_discard(void); /* set all NPs to discard packets */
--- a/pppd/plugins/radius/config.c
+++ b/pppd/plugins/radius/config.c
-@@ -381,31 +381,37 @@ static int test_config(char *filename)
+@@ -379,31 +379,37 @@ static int test_config(char *filename)
}
#endif
}
--- a/pppd/plugins/radius/options.h
+++ b/pppd/plugins/radius/options.h
-@@ -31,24 +31,21 @@ typedef struct _option {
+@@ -29,24 +29,21 @@ typedef struct _option {
static SERVER acctserver = {0};
static SERVER authserver = {0};
--- a/pppd/main.c
+++ b/pppd/main.c
-@@ -1152,7 +1152,8 @@ get_input(void)
+@@ -1150,7 +1150,8 @@ get_input(void)
}
notice("Modem hangup");
hungup = 1;
- code = EXIT_HANGUP;
+ if (code == EXIT_OK)
+ code = EXIT_HANGUP;
+ need_holdoff = 0;
lcp_lowerdown(0); /* serial link is no longer available */
link_terminated(0);
- return;
#
# SunOS provides a version of libpcap that would work, but SunOS has no support for activity filter
AM_CONDITIONAL([PPP_WITH_FILTER], [ test "x${with_pcap}" = "xyes" && test "x${build_sunos}" != "xyes" ])
-@@ -359,6 +362,7 @@ $PACKAGE_NAME version $PACKAGE_VERSION
+@@ -348,6 +351,7 @@ $PACKAGE_NAME version $PACKAGE_VERSION
With libatm..........: ${with_atm:-no}
With libpam..........: ${with_pam:-no}
With libpcap.........: ${with_pcap:-no}
Linker...............: $LD $LDFLAGS $LIBS
--- a/pppd/Makefile.am
+++ b/pppd/Makefile.am
-@@ -138,6 +138,12 @@ pppd_LDFLAGS += $(PCAP_LDFLAGS)
+@@ -137,6 +137,12 @@ pppd_LDFLAGS += $(PCAP_LDFLAGS)
pppd_LIBS += $(PCAP_LIBS)
endif
2 files changed, 53 insertions(+), 14 deletions(-)
--- a/pppd/multilink.c
+++ b/pppd/multilink.c
-@@ -40,6 +40,7 @@
+@@ -36,6 +36,7 @@
#include <signal.h>
#include <netinet/in.h>
#include <unistd.h>
#include "pppd-private.h"
#include "fsm.h"
-@@ -62,7 +63,8 @@ static void iterate_bundle_links(void (*
+@@ -58,7 +59,8 @@ static void iterate_bundle_links(void (*
static int get_default_epdisc(struct epdisc *);
static int parse_num(char *str, const char *key, int *valp);
#define set_ip_epdisc(ep, addr) do { \
ep->length = 4; \
-@@ -215,35 +217,38 @@ mp_join_bundle(void)
+@@ -211,35 +213,38 @@ mp_join_bundle(void)
key.dptr = bundle_id;
key.dsize = p - bundle_id;
pid = tdb_fetch(pppdb, key);
}
/* we have to make a new bundle */
-@@ -423,20 +428,39 @@ parse_num(char *str, const char *key, in
+@@ -419,20 +424,39 @@ parse_num(char *str, const char *key, in
return 0;
}
&& memcmp(vd.dptr, key.dptr, vd.dsize) == 0;
--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
-@@ -984,6 +984,16 @@ void cfg_bundle(int mrru, int mtru, int
+@@ -980,6 +980,16 @@ void cfg_bundle(int mrru, int mtru, int
add_fd(ppp_dev_fd);
}
/*
* make_new_bundle - create a new PPP unit (i.e. a bundle)
* and connect our channel to it. This should only get called
-@@ -1002,6 +1012,8 @@ void make_new_bundle(int mrru, int mtru,
+@@ -998,6 +1008,8 @@ void make_new_bundle(int mrru, int mtru,
/* set the mrru and flags */
cfg_bundle(mrru, mtru, rssn, tssn);
--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
-@@ -2251,6 +2251,9 @@ int sifdefaultroute (int unit, u_int32_t
+@@ -2247,6 +2247,9 @@ int sifdefaultroute (int unit, u_int32_t
memset (&rt, 0, sizeof (rt));
SET_SA_FAMILY (rt.rt_dst, AF_INET);
rt.rt_dev = ifname;
rt.rt_metric = dfl_route_metric + 1; /* +1 for binary compatibility */
-@@ -2259,7 +2262,7 @@ int sifdefaultroute (int unit, u_int32_t
+@@ -2255,7 +2258,7 @@ int sifdefaultroute (int unit, u_int32_t
SIN_ADDR(rt.rt_genmask) = 0L;
}
--- a/pppd/sys-linux.c
+++ b/pppd/sys-linux.c
-@@ -224,14 +224,10 @@ static fd_set in_fds; /* set of fds tha
+@@ -220,14 +220,10 @@ static fd_set in_fds; /* set of fds tha
static int max_in_fd; /* highest fd set in in_fds */
static int has_proxy_arp = 0;
static char loop_name[20];
static unsigned char inbuf[512]; /* buffer for chars read from loopback */
-@@ -249,9 +245,8 @@ static int dynaddr_set; /* 1 if ip_dyna
+@@ -245,9 +241,8 @@ static int dynaddr_set; /* 1 if ip_dyna
static int looped; /* 1 if using loop */
static int link_mtu; /* mtu for the link (not bundle) */
#define MAX_IFS 100
-@@ -1970,11 +1965,12 @@ int ccp_fatal_error (int unit)
+@@ -1966,11 +1961,12 @@ int ccp_fatal_error (int unit)
*
* path_to_procfs - find the path to the proc file system mount point
*/
struct mntent *mntent;
FILE *fp;
-@@ -1996,6 +1992,7 @@ static char *path_to_procfs(const char *
+@@ -1992,6 +1988,7 @@ static char *path_to_procfs(const char *
fclose (fp);
}
}
strlcpy(proc_path + proc_path_len, tail,
sizeof(proc_path) - proc_path_len);
-@@ -2889,6 +2886,8 @@ ppp_registered(void)
+@@ -2883,6 +2880,8 @@ ppp_registered(void)
int ppp_check_kernel_support(void)
{
int s, ok, fd;
struct ifreq ifr;
int size;
-@@ -3016,6 +3015,7 @@ int ppp_check_kernel_support(void)
+@@ -3010,6 +3009,7 @@ int ppp_check_kernel_support(void)
}
close(s);
return ok;
}
#ifndef HAVE_LOGWTMP
-@@ -3577,6 +3577,7 @@ get_pty(int *master_fdp, int *slave_fdp,
+@@ -3571,6 +3571,7 @@ get_pty(int *master_fdp, int *slave_fdp,
}
#endif /* TIOCGPTN */
if (sfd < 0) {
/* the old way - scan through the pty name space */
for (i = 0; i < 64; ++i) {
-@@ -3601,6 +3602,7 @@ get_pty(int *master_fdp, int *slave_fdp,
+@@ -3595,6 +3596,7 @@ get_pty(int *master_fdp, int *slave_fdp,
}
}
}
if (sfd < 0)
return 0;
-@@ -3716,6 +3718,7 @@ get_host_seed(void)
+@@ -3710,6 +3712,7 @@ get_host_seed(void)
int
sys_check_options(void)
{
if (demand && driver_is_old) {
ppp_option_error("demand dialling is not supported by kernel driver "
"version %d.%d.%d", driver_version, driver_modification,
-@@ -3726,6 +3729,7 @@ sys_check_options(void)
+@@ -3720,6 +3723,7 @@ sys_check_options(void)
warn("Warning: multilink is not supported by the kernel driver");
multilink = 0;
}
#endif
--- a/pppd/plugins/pppoe/plugin.c
+++ b/pppd/plugins/pppoe/plugin.c
-@@ -57,9 +57,6 @@ static char const RCSID[] =
+@@ -54,9 +54,6 @@
char pppd_version[] = PPPD_VERSION;
char *pppd_pppoe_service = NULL;
static char *acName = NULL;
static char *existingSession = NULL;
-@@ -421,10 +418,6 @@ PPPoEDevnameHook(char *cmd, char **argv,
+@@ -418,10 +415,6 @@ PPPoEDevnameHook(char *cmd, char **argv,
void
plugin_init(void)
{
--- a/pppd/pppd-private.h
+++ b/pppd/pppd-private.h
-@@ -187,7 +187,6 @@ extern int holdoff; /* Dead time before
+@@ -189,7 +189,6 @@ extern int holdoff; /* Dead time before
extern bool holdoff_specified; /* true if user gave a holdoff value */
extern bool notty; /* Stdin/out is not a tty */
extern char *pty_socket; /* Socket to connect to pty */
extern bool tune_kernel; /* May alter kernel settings as necessary */
--- a/pppd/tty.c
+++ b/pppd/tty.c
-@@ -150,7 +150,7 @@ char *disconnect_script = NULL; /* Scrip
+@@ -146,7 +146,7 @@ char *disconnect_script = NULL; /* Scrip
char *welcomer = NULL; /* Script to run after phys link estab. */
char *ptycommand = NULL; /* Command to run on other side of pty */
bool notty = 0; /* Stdin/out is not a tty */
int max_data_rate; /* max bytes/sec through charshunt */
bool sync_serial = 0; /* Device is synchronous serial device */
char *pty_socket = NULL; /* Socket to connect to pty */
-@@ -206,8 +206,10 @@ static struct option tty_options[] = {
+@@ -202,8 +202,10 @@ static struct option tty_options[] = {
"Send and receive over socket, arg is host:port",
OPT_PRIO | OPT_DEVNAM },
--- a/pppd/main.c
+++ b/pppd/main.c
-@@ -984,14 +984,17 @@ struct protocol_list {
+@@ -982,14 +982,17 @@ struct protocol_list {
const char *name;
} protocol_list[] = {
{ 0x21, "IP" },
{ 0x33, "Stream Protocol ST-II" },
{ 0x35, "Banyan Vines" },
{ 0x39, "AppleTalk EDDP" },
-@@ -1005,8 +1008,11 @@ struct protocol_list {
+@@ -1003,8 +1006,11 @@ struct protocol_list {
{ 0x49, "Serial Data Transport Protocol (PPP-SDTP)" },
{ 0x4b, "SNA over 802.2" },
{ 0x4d, "SNA" },
{ 0x53, "Encryption" },
{ 0x55, "Individual Link Encryption" },
{ 0x57, "IPv6" },
-@@ -1017,12 +1023,15 @@ struct protocol_list {
+@@ -1015,12 +1021,15 @@ struct protocol_list {
{ 0x65, "RTP IPHC Compressed non-TCP" },
{ 0x67, "RTP IPHC Compressed UDP 8" },
{ 0x69, "RTP IPHC Compressed RTP 8" },
{ 0x0203, "IBM Source Routing BPDU" },
{ 0x0205, "DEC LANBridge100 Spanning Tree" },
{ 0x0207, "Cisco Discovery Protocol" },
-@@ -1034,15 +1043,19 @@ struct protocol_list {
+@@ -1032,15 +1041,19 @@ struct protocol_list {
{ 0x0231, "Luxcom" },
{ 0x0233, "Sigma Network Systems" },
{ 0x0235, "Apple Client Server Protocol" },
{ 0x4001, "Cray Communications Control Protocol" },
{ 0x4003, "CDPD Mobile Network Registration Protocol" },
{ 0x4005, "Expand accelerator protocol" },
-@@ -1053,8 +1066,10 @@ struct protocol_list {
+@@ -1051,8 +1064,10 @@ struct protocol_list {
{ 0x4023, "RefTek Protocol" },
{ 0x4025, "Fibre Channel" },
{ 0x4027, "EMIT Protocols" },
{ 0x8023, "OSI Network Layer Control Protocol" },
{ 0x8025, "Xerox NS IDP Control Protocol" },
{ 0x8027, "DECnet Phase IV Control Protocol" },
-@@ -1063,7 +1078,9 @@ struct protocol_list {
+@@ -1061,7 +1076,9 @@ struct protocol_list {
{ 0x8031, "Bridging NCP" },
{ 0x8033, "Stream Protocol Control Protocol" },
{ 0x8035, "Banyan Vines Control Protocol" },
{ 0x803f, "NETBIOS Framing Control Protocol" },
{ 0x8041, "Cisco Systems Control Protocol" },
{ 0x8043, "Ascom Timeplex" },
-@@ -1072,18 +1089,24 @@ struct protocol_list {
+@@ -1070,18 +1087,24 @@ struct protocol_list {
{ 0x8049, "Serial Data Control Protocol (PPP-SDCP)" },
{ 0x804b, "SNA over 802.2 Control Protocol" },
{ 0x804d, "SNA Control Protocol" },
{ 0x8207, "Cisco Discovery Protocol Control" },
{ 0x8209, "Netcs Twin Routing" },
{ 0x820b, "STP - Control Protocol" },
-@@ -1092,24 +1115,29 @@ struct protocol_list {
+@@ -1090,24 +1113,29 @@ struct protocol_list {
{ 0x8281, "MPLSCP" },
{ 0x8285, "IEEE p1284.4 standard - Protocol Control" },
{ 0x8287, "ETSI TETRA TNP1 Control Protocol" },
--- a/configure.ac
+++ b/configure.ac
-@@ -344,6 +344,7 @@ AC_CONFIG_FILES([
+@@ -333,6 +333,7 @@ AC_CONFIG_FILES([
pppd/plugins/pppoatm/Makefile
pppd/plugins/pppol2tp/Makefile
pppd/plugins/radius/Makefile
scripts/Makefile
--- a/pppd/plugins/Makefile.am
+++ b/pppd/plugins/Makefile.am
-@@ -21,5 +21,5 @@ winbind_la_LDFLAGS = $(PLUGIN_LDFLAGS)
+@@ -17,5 +17,5 @@ winbind_la_LDFLAGS = $(PLUGIN_LDFLAGS)
winbind_la_SOURCES = winbind.c
if !SUNOS