219 Commits

Author SHA1 Message Date
Sylvain Rochet
25f9f55878 PPP, removed PPP_INPROC_OWNTHREAD feature, which almost only make things harder
I consider to remove the PPP_INPROC_OWNTHREAD crap in ppp-new,
as said in bugs #37278 and #37353.

1. It requires the ppp_input_thread() function to be modified to match
user system, like some did by adding the vTaskDelete(NULL); FreeRTOS
call at the end of the function, for example.

This is a tiny-tiny fonction that should be, in my opinion, on the user
port, like the Ethernet input thread we see in many Ethernet port.

2. It is actually not that thread safe.

2.1. pcb->phase IS modified by the lwIP core thread so it should at
least be set to volatile, otherwise the pcb->phase copy may live
indefinitely in CPU register. It works because of the sio_read()
function call which without doubt flush pcb->phase copy from CPU
register. I dont want to set ppp_pcb struct to volatile for obvious
performance reasons.

2.2. This function assume PCB still exists whatever is happening, which
is not the case after you called ppp_delete() function outside of this
thread. If sio_read() is blocking waiting data and pcb destroyed, it is
going to read a deallocated pcb which luckily should still have
pcb->phase set to 0 (=PHASE_DEAD) due to preallocated "control block"
structures of lwIP. Even with sio_read_abort(), there might be timings
issue due to a lack of a synchronization mechanism.

3. I dislike the sys_msleep(1), it means that systems should have at
least a 11 chr buffer at 115200/10 byte/s, and bigger with higher serial
speed, for example with 3G/HSDPA modems accessed through SPI, at 20
Mbits/s this is a ~2000 bytes buffer required to keep incoming data
during this sleep, I don't see why we require systems to do so,
sio_read() should obviously be a blocking call. I cannot easily
remove this sleep because some systems might have wrongfully used this
call as a CPU idle feature with a non blocking sio_read() call.
2013-04-26 20:30:01 +02:00
Sylvain Rochet
f47a93b0c1 PPP, cleared compilation warning about unused variable 'pcb' in ppp_drop() if neither VJ nor SNMP support are enabled 2013-04-26 14:02:30 +02:00
Sylvain Rochet
a1555e0615 PPP, added ppp_free()
Free the control block, clean everything except the PPP PCB itself
and the netif, it allows you to change the underlying PPP protocol
(eg. from PPPoE to PPPoS to switch from DSL to GPRS) without losing
your PPP and netif handlers.
2013-04-23 00:19:07 +02:00
Sylvain Rochet
44b527415f PPP, slight API change, great code factorisation
Created new ppp_over_X_create() functions which only prepare the PPP session without starting it
Removed ppp_reopen() and all of its sub ppp_over_X_reopen()
Removed PPPoL2TP reconnect() function, merged to connect()
Added ppp_open() able to start or restart any session
2013-04-22 23:58:51 +02:00
Sylvain Rochet
58ffa8d526 PPP, free input pbuf left in ppp_delete() 2013-02-27 22:29:22 +01:00
Sylvain Rochet
bfe8c15a29 PPP, fixed return code coherency for ppp_netif_output_*() callbacks (using ERR_* as expected by lwIP core instead of PPPERR_*) 2013-02-22 11:52:44 +01:00
Sylvain Rochet
bdfbac2aa6 PPP, added missing semicolon (dammit) 2012-12-23 22:58:52 +01:00
Sylvain Rochet
211a889528 PPP, fixed some IAR warnings
these are the compiler warnings I get with the head of ppp-new. All
of them are trivial, [...] (I'm using IAR EWARM 6.4).

ppp.c
Warning[Pe550]: variable "c" was set but never used
lwip\src\netif\ppp\ppp.c 1012

Warning[Pe111]: statement is unreachable
lwip\src\netif\ppp\ppp.c 1132

Warning[Pe111]: statement is unreachable
lwip\src\netif\ppp\ppp.c 1377

Warning[Pe111]: statement is unreachable
lwip\src\netif\ppp\ppp.c 1412

utils.c
Warning[Pe186]: pointless comparison of unsigned integer with zero
lwip\src\netif\ppp\utils.c 210
2012-12-23 22:52:58 +01:00
Sylvain Rochet
6751ac4970 PPP, moved FSM configuration to ppp_settings struct 2012-12-09 22:25:28 +01:00
Sylvain Rochet
6764957d06 PPP, moved EAP configuration to ppp_settings struct 2012-12-09 21:45:14 +01:00
Sylvain Rochet
c719ba7bf3 PPP, moved PAP configuration to ppp_settings struct 2012-12-09 21:22:19 +01:00
Sylvain Rochet
defef2222a PPP, improved PAP and CHAP timeout/request/maxrequests configuration values 2012-12-09 20:24:22 +01:00
Sylvain Rochet
63459f65fb PPP, moved DEFLOOPBACKFAIL from ppp/lcp.h to lwip/opt.h 2012-12-09 19:28:53 +01:00
Sylvain Rochet
c68e1ceb64 PPP, using timeouts values defined in opt.h instead of values defined in PPP headers or statically assigned values 2012-12-09 18:42:06 +01:00
Sylvain Rochet
07e72d2ac8 PPP, correctly cast int to u8_t in PPPCTLS_ERRCODE in ppp_ioctl() 2012-11-08 14:39:30 +01: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
a0298728df PPP, disable persist mode by default, so the default behavior does not look like a buggy behavior. Fixes bug #37279. 2012-10-12 20:32:05 +02:00
Sylvain Rochet
af56eebc6a PPP, cleaned MTU,MRU variables 2012-09-01 19:44:43 +02:00
Sylvain Rochet
387c778496 PPP, added PPPoS reopen support 2012-09-01 19:29:17 +02:00
Sylvain Rochet
fbbde125d9 PPP, removed unnecessary ethif from ppp_pcb 2012-09-01 15:05:21 +02:00
Sylvain Rochet
dbaefd6126 PPP, cleaned persist and holdoff features 2012-09-01 14:43:31 +02:00
Sylvain Rochet
b84ab718b0 PPP, ppp_input() code cleaning, removed dead code, fixed indentation 2012-08-25 20:38:54 +02:00
Sylvain Rochet
6144deb6b6 PPP, moved out PPPoS code into their own functions, improved ppp.c readability 2012-08-25 20:30:14 +02:00
Sylvain Rochet
7920b6e163 PPP, don't allocate twice struct eth_hdr per PPPoE pbuf 2012-08-25 16:21:58 +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
1ddebcc862 Moved PPP headers into include/netif/ppp/, fixing bug #37040. 2012-08-18 22:40:19 +02:00
Sylvain Rochet
59567b43b0 pcb->link_status_cb must be set, we don't need to check each time we use it if not NULL 2012-07-23 00:55:24 +02:00
Sylvain Rochet
e067e84d69 switch to phase dead if PPPoE or PPPoL2TP failed to connect 2012-07-23 00:48:27 +02:00
Sylvain Rochet
35c670513f fixed some more PPP phase state machine issues
The only way PPPoE or PPPoL2TP disconnect it through ppp_link_terminated(),
therefore PPP is always already down, so we don't need to ask PPP to hup or stop.
2012-07-22 23:53:27 +02:00
Sylvain Rochet
8ec92b6fe7 don't call ppp_hup() and ppp_stop() if PPPoE or PPPoL2TP failed to connect
This is useless because PPP is not started yet, it confuses the PPP phase
state machine.
2012-07-22 23:37:35 +02:00
Sylvain Rochet
5552f082e8 handle cases when ppp_close() is called while session is in dead or holdoff phase 2012-07-22 21:42:56 +02:00
Sylvain Rochet
3c122117fc improved PPP API, added ppp_reopen()
This is now the user choice to re-establish the session in the link status callback
by either calling the ppp_reopen() to re-establish or ppp_delete() to free the PPP
control block. Without user intervention, the PPP control block now stay in the dead
phase, allowing the user to re-establish or delete the control block later.
2012-07-22 20:53:54 +02:00
Sylvain Rochet
a467d21eba ppp_close() PPPoL2TP support added 2012-07-22 18:05:19 +02:00
Sylvain Rochet
bc724ea206 Do not destroy the PPP control block automatically anymore, added ppp_delete() API function.
Without that, PPP user don't know when and how the PPP control block is free()ed, which
can lead to hard fault.
2012-07-22 17:20:40 +02:00
Sylvain Rochet
4ea5c1d973 improved persist mode, we now clear everything we can in the PPP control block structure, ensuring we start a new session from a clean state 2012-07-21 00:26:23 +02:00
Sylvain Rochet
9e021cd1a8 improved PPP default interface management, added ppp_set_default() API call 2012-07-14 17:25:24 +02:00
Sylvain Rochet
78565026ac L2TP output netif is now selectable, making it useful to select a default route for the L2TP tunnel, in case the default interface is set to the L2TP PPP interface 2012-07-12 01:11:08 +02:00
Sylvain Rochet
de6be743c6 added holdoff support for PPPoE and PPPoL2TP when persist mode is used 2012-07-11 23:50:33 +02:00
Sylvain Rochet
f534e80c71 added L2TPv2 (PPP over L2TP, a.k.a. UDP tunnels) support
Supported:
 - L2TPv2 (PPP over L2TP, a.k.a. UDP tunnels)
 - LAC

 Not supported:
 - LNS (require PPP server support)
 - L2TPv3 ethernet pseudowires
 - L2TPv3 VLAN pseudowire
 - L2TPv3 PPP pseudowires
 - L2TPv3 IP encapsulation
 - L2TPv3 IP pseudowire
 - L2TP tunnel switching - http://tools.ietf.org/html/draft-ietf-l2tpext-tunnel-switching-08
 - Multiple tunnels per UDP socket, as well as multiple sessions per tunnel
 - Hidden AVPs
2012-07-09 23:25:32 +02:00
Sylvain Rochet
b4df26a75d some buggy compiler get confused with duplicated labels used in enum tcp_state and fsm.h, prepending PPP's ones 2012-07-09 22:04:09 +02:00
Sylvain Rochet
d92c462466 added PPP Sequential API module, based from the Network Interface Sequential API module 2012-07-07 19:50:56 +02:00
Sylvain Rochet
572e457e77 improved PPP API header documentation 2012-07-07 15:05:15 +02:00
Sylvain Rochet
90faecd86e replaced u_int{8,16,32}_t to lwIP u{8,16,32}_t types
added padding to compiler generated bitfield, this is seen as best practice,
maybe it helps buggy compilers
2012-07-03 22:59:50 +02:00
Sylvain Rochet
2e069429c2 removed bool type, replaced by u8_t 2012-07-03 22:03:51 +02:00
Erik Ekman
11a3057e8e PPP: Add option to skip FCS table
Option PPP_FCS_TABLE is created which controls if PPPoS FCS calculation
should be done against precalculated table or by using a short algorithm.

Default value is 1, keeps old behaviour.
Setting it to 0 saves around 0.5 kB flash.
2012-06-23 15:11:49 +02:00
Sylvain Rochet
a83fb30836 fixed PPPoS multithread support 2012-06-23 13:07:43 +02:00
Sylvain Rochet
dc092653f4 now displaying sent packet before PPPoS add its escaping, trailing flags, ... 2012-06-23 12:04:27 +02:00
Sylvain Rochet
25c6278000 fixed some endianess issues with PPPoS 2012-06-23 02:27:03 +02:00
Sylvain Rochet
5033e0e752 display IPV6CP packets 2012-06-23 01:44:52 +02:00
Sylvain Rochet
295eeef9b6 "ISO C forbids conversion of function pointer to object pointer type" - removed callback function pointer display in debug messages. Anyway, this is quite a meaningless information. 2012-06-22 21:48:21 +02:00