32 Commits

Author SHA1 Message Date
Sylvain Rochet
29f3f2e1d8 PPP, PPPoS, moved VJ protocol handler to PPPoS
New callback, netif input, allow low level drivers to extend
ppp_input call, moved PPPoS VJ support to pppos.c.
2015-02-20 00:40:45 +01:00
Sylvain Rochet
729e24da78 PPP, PPPoS, added sub-ioctl commands
Allow low level drivers to extend ioctl call, moved PPPoS ioctl
commands to pppos.c.
2015-02-20 00:40:45 +01:00
Sylvain Rochet
b92fe3eecb PPP, CORE, new callbacks, send_config, recv_config, vj_config
Removed some calls from PPP core to PPPoS low level protocols,
the const struct allows us to have more and more callbacks
without using more RAM.
2015-02-20 00:40:44 +01:00
Sylvain Rochet
985de035bc PPP, CORE, now using const callbacks struct from lower level protocols
Saving some RAM by using callbacks struct in rodata for required
callbacks called by PPP core to PPP low level protocols.
2015-02-20 00:40:44 +01:00
Sylvain Rochet
f511bec26c PPP, PPPoS, only check PPPoS PCB pointer if PPPoS is not the only enabled lower protocol
We only need to keep track of existing PPPoS interfaces if PPPoS
is not the only enabled protocol.

PPP CORE does not have callbacks pointers for all PPPoS callbacks
which should actually be required for PPPoS (VJ config, asyncmap, ...),
there is too much callbacks to create and PPPoS must be kept light,
especially for users who are only using PPPoS.

But there is a drawback, PPP CORE does not know which
lower protocols it is talking to thanks to the abstraction,
therefore if PPPoS is enabled as well as PPPoE or PPPoL2TP there
might be situation where PPP CORE calls pppos_ config functions
on interfaces which are NOT PPPoS one. This is very unlikely to
happen because protocols not supported by PPPoE or PPPoL2TP are
disabled at LCP/IPCP negotiation but we are better safe than sorry.

So we check if passed PPP pointer to PPPoS configuration functions
is a PPPoS interface by checking against a linked list of existing
PPPoS interfaces.
2015-02-18 23:14:30 +01:00
Sylvain Rochet
892e75ca92 PPP, CORE, removed useless include of chap-new.h 2015-02-18 23:14:29 +01:00
Sylvain Rochet
5e73068e09 PPP, CORE, Removed (*datainput) from struct protent if not used
Data input is only used by CCP and ECP, which are not supported at this time,
remove this entry from struct protent to save some flash.
2015-02-18 23:14:29 +01:00
Sylvain Rochet
b71d9ce3f6 PPP, CORE, Removed useless enabled_flag from struct protent
Our struct protent are const everywhere to save RAM, enable/disable
flag on a const struct is useless, saving some flash, removed.
2015-02-18 23:14:29 +01:00
Sylvain Rochet
bce29ac353 PPP, CORE, code cleaning
Reordered functions in the order they are declared in headers.
Removed useless ppp_link_down() function.
Merged ppp_stop() and ppp_close().
Merged ppp_hup() and ppp_sighup().
2015-02-17 23:22:14 +01:00
Sylvain Rochet
69469496e2 PPP, PPPoS, moved out_accm from PPP core to PPPoS
Last PPPoS variable in PPP core moved to PPPoS.
2015-02-17 23:22:14 +01:00
Sylvain Rochet
9c15ffbb74 PPP: Moved PPPoS from ppp.c to pppos.c
Started removing from PPP core most of low level protocol PPPoS
handling to separate files, using the new low level PPP callbacks.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
09b4485870 PPP, generalized callbacks calls from PPP core, removed all PPPoE and PPPoL2TP references
Almost there, removed all PPPoE and PPPoL2TP references from PPP core,
using the generic callbacks interface everywhere.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
19282d6d6c PPP, moved low level protocol connect init to low level protocol files
Low level protocol init machine state does not belong to PPP core,
moved those init to respective low level protocol files.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
45bfccfddc PPP, prepare new callbacks for low level protocols
New callbacks: write and netif_output
2015-02-17 23:22:13 +01:00
Sylvain Rochet
f8501478f6 PPP: prepared callbacks from PPP core to low level protocols
New PPP callback from PPP core to low level protocols, first
step about removing named calls to low level protocols from PPP core.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
48f7678771 PPP: re-order prototypes, ppp_init before ppp_new
Cosmetic only.
2015-02-17 23:22:13 +01:00
Sylvain Rochet
808098413c PPP: removed PPPoE and PPPoL2TP callback status notifier
Added necessary PPP core functions for PPPoE and PPPoL2TP status
notificaton (ppp_link_failed and ppp_link_end), removed callback,
low level protocol are now calling PPP core "link" functions.
2015-02-17 23:22:12 +01:00
Sylvain Rochet
74fd2dc9ad PPP: moved ppp_new() to low level protocol init for PPPoE and PPPoL2TP
First step of a rework of how low level protocols are using the
PPP core. Low level protocols are now going to use the core instead
of core using the low level protocols.

Final goal: separate PPP core code from low level protocols.
2015-02-17 23:22:12 +01:00
Sylvain Rochet
e39d012312 PPP, from PPPD upstream, separate IPv6 handling for sifup/sifdown
The current code is buggy regarding handling of link state when using
both IPCP and IPv6CP: if IPv6CP has been set up and if during IPCP
negociation, ipcp_up() fails, it will incorrectly take the interface
down. The simple solution here is to change the platform code to do the
same as on Solaris: separate IPv6CP up/down state handling with sif6up()
and sif6down(), so that we really know when the interface is allowed to
go down.

(Based from pppd commit b04d2dc6df5c6b5650fea44250d58757ee3dac4a)
2014-12-24 23:01:06 +01:00
Sylvain Rochet
7d077a2260 PPP,SLIP include lwip/sio.h after lwip/sys.h to prevent functions prototype collision
User port may redefine sio_* functions, we must ensure we are loading
user functions prototypes before loading default prototypes.
2014-12-24 21:23:54 +01:00
Sylvain Rochet
b30faa577d PPP, moved ppp_init() from public API (ppp.h) to private API (ppp_impl.h)
ppp_init() is called by lwip_init(), users don't need to init PPP by themselves
2014-12-24 19:08:58 +01:00
Sylvain Rochet
482a18e6de PPP, added const modifier on auth strings 2014-12-24 17:17:00 +01:00
Sylvain Rochet
2b3e020152 PPP, fixed some compiler warnings
Using -Wall -pedantic -Wparentheses -Wsequence-point
-Wswitch-default -Wextra -Wundef -Wshadow -Wpointer-arith
-Wbad-function-cast -Wc++-compat -Wwrite-strings -Wold-style-definition
-Wmissing-prototypes -Wredundant-decls -Wnested-externs -Wno-address
2014-12-24 15:16:03 +01:00
Sylvain Rochet
08dd32d32d PPP, most PPP headers are using u_long, u_int, u_short and u_char types, moved typedef of those types before we include any PPP header 2014-04-04 20:42:01 +02:00
Sylvain Rochet
4fda366b67 PPP, added PPP notify phase support
PPP notify phase support, using compile-time PPP_NOTIFY_PHASE macro.

This can be used for example to set a LED pattern depending on the
current phase of the PPP session.

Callback example:

static void ppp_notify_phase_cb(ppp_pcb *pcb, u8_t phase, void *ctx) {
  switch(phase) {
      case PPP_PHASE_DEAD:  /* Kept off */
      case PPP_PHASE_MASTER:
        /* LED Off */
        break;
      case PPP_PHASE_INITIALIZE:  /* Session opened */
        /* LED FastBlink */
        break;
      case PPP_PHASE_RUNNING:  /* Session running */
        /* LED On */
        break;
      default:
        /* LED SlowBlink */
   }
}
2013-04-30 15:16:09 +02:00
Sylvain Rochet
2350d941a5 PPP, added PPP_USE_PBUF_RAM compile time option
pbuf_type PPP is using for LCP, PAP, CHAP, EAP, IPCP and IP6CP packets.

Memory allocated must be single buffered for PPP to works, it requires pbuf
that are not going to be chained when allocated. This requires setting
PBUF_POOL_BUFSIZE to at least 512 bytes, which is quite huge for small systems.

Setting PPP_USE_PBUF_RAM to 1 makes PPP use memory from heap where continuous
buffers are required, allowing you to use a smaller PBUF_POOL_BUFSIZE.
2013-04-26 21:51:15 +02:00
Sylvain Rochet
bd3ade31fa PPP, added define for u_long, u_int, u_short, u_char for compilers or toolchains which don't have them 2013-04-22 21:16:02 +02:00
Sylvain Rochet
9e4aa79278 PPP, adding const pragma to struct protent, saving about 200 bytes in .data segment 2012-10-13 18:38:18 +02:00
Sylvain Rochet
e9b29184d0 PPP, renamed all functions using common names in utils.c that can conflict with lwIP user code during link operation 2012-08-21 20:21:38 +02:00
Sylvain Rochet
0d02b8d1f6 added <stdlib.h> to ppp_impl.h, some PPP modules are using strtol() 2012-08-21 20:03:57 +02:00
Sylvain Rochet
98c0fcc659 Added <string.h> header to ppp_impl.h, this appears to be required, found out by Ivan Delamer. 2012-08-18 22:43:23 +02:00
Sylvain Rochet
1ddebcc862 Moved PPP headers into include/netif/ppp/, fixing bug #37040. 2012-08-18 22:40:19 +02:00