From 2f1b9304ac4ba89a2dcb6047cb584a5603a33987 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 16 Aug 2001 20:42:09 +0000 Subject: 2001-08-16 Mike Siers * Update of PPPD to 2.3.11 from 2.3.5 and addition of an example application. Mike's notes on the modifications: - renamed error() function because of namespace problems - removed calls to the exit() funciton - removed extra files from the pppd source directory - defined pppd task constant values in rtemspppd.h - modifyied example code to get actual tick per second value - placed the pppd 2.3.11 man page file (pppd.8) into the pppd directory * pppd/cbcp.c, pppd/cbcp.h, pppd/main.c, pppd/ppp_tty.c, pppd/pppmain.c, pppd/rtems-ppp.c, pppd/rtems-ppp.c: Deleted. * pppd/pppd.8, pppd/rtemsmain.c, pppd/rtemspppd.c, pppd/rtemspppd.h, pppd/sys-rtems.c, pppd/utils.c, pppd/example/Makefile, pppd/example/README, pppd/example/init.c, pppd/example/netconfig.h, pppd/example/ppp.conf, pppd/example/pppdapp.c, pppd/example/system.h: New files. * modem/ppp_tty.c, net/if_ppp.h, pppd/Makefile.am, pppd/README, pppd/STATUS, pppd/auth.c, pppd/ccp.c, pppd/ccp.h, pppd/chap.c, pppd/chap.h, pppd/chap_ms.c, pppd/chap_ms.h, pppd/chat.c, pppd/demand.c, pppd/fsm.c, pppd/fsm.h, pppd/ipcp.c, pppd/ipcp.h, pppd/ipxcp.c, pppd/ipxcp.h, pppd/lcp.c, pppd/lcp.h, pppd/magic.c, pppd/magic.h, pppd/options.c, pppd/patchlevel.h, pppd/pathnames.h, pppd/pppd.h, pppd/upap.c, pppd/upap.h: Modified. --- c/src/libnetworking/pppd/example/pppdapp.c | 146 +++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 c/src/libnetworking/pppd/example/pppdapp.c (limited to 'c/src/libnetworking/pppd/example/pppdapp.c') diff --git a/c/src/libnetworking/pppd/example/pppdapp.c b/c/src/libnetworking/pppd/example/pppdapp.c new file mode 100644 index 0000000000..59e5029088 --- /dev/null +++ b/c/src/libnetworking/pppd/example/pppdapp.c @@ -0,0 +1,146 @@ + +#include +#include +#include "system.h" + + +/* define global variables */ +static unsigned int pppdapp_linkcount = 0; +static rtems_id pppdapp_taskid; + + +static void pppdapp_linkup_hook(void) +{ + pppdapp_linkcount++; + printf("PPP LINK UP [%d]\n", pppdapp_linkcount); +} + +static void pppdapp_linkdown_hook(void) +{ + printf("PPP LINK DOWN [%d]\n", pppdapp_linkcount); +} + +static void pppdapp_ipup_hook(void) +{ + /* send ipup signal to pppdapp task */ + rtems_event_send(pppdapp_taskid, RTEMS_EVENT_10); +} + +static void pppdapp_ipdown_hook(void) +{ + /* send ip down signal to pppdapp task */ + rtems_event_send(pppdapp_taskid, RTEMS_EVENT_11); +} + +static void pppdapp_setup(void) +{ + const char *pUser = "oscar"; + const char *pPassword = "goldman"; + +#undef USE_MODEM +#ifdef USE_MODEM + const char *pTelephone = "5551234"; + const char *pInitScript = "TIMEOUT@5@@AT@@OK@"; + const char *pConnectScript = "TIMEOUT@90@@ATDT%s@CONNECT@@name:@%s@word:@%s@"; + const char *pDisconnectScript = "TIMEOUT@5@@ATH0@@OK@"; + char pConnect[128]; + + /* set the connect string */ + sprintf(pConnect, pConnectScript, pTelephone, pUser, pPassword); + + /* set pppd options for modem */ + rtems_pppd_set_option("/dev/ttyS2", NULL); + rtems_pppd_set_option("57600", NULL); + rtems_pppd_set_option("crtscts", NULL); + rtems_pppd_set_option("modem", NULL); + rtems_pppd_set_option("noauth", NULL); + rtems_pppd_set_option("debug", NULL); + rtems_pppd_set_option("init", pInitScript); + rtems_pppd_set_option("connect", pConnect); + rtems_pppd_set_option("disconnect", pDisconnectScript); +#else + /* set pppd options for null modem direct link serial cable */ + rtems_pppd_set_option("/dev/ttyS1", NULL); + rtems_pppd_set_option("57600", NULL); + rtems_pppd_set_option("crtscts", NULL); + rtems_pppd_set_option("local", NULL); + rtems_pppd_set_option("noauth", NULL); + rtems_pppd_set_option("debug", NULL); + rtems_pppd_set_option("user", pUser); + rtems_pppd_set_option("password", pPassword); +#endif + + /* set up pppd hooks */ + rtems_pppd_set_hook(RTEMS_PPPD_LINKUP_HOOK, pppdapp_linkup_hook); + rtems_pppd_set_hook(RTEMS_PPPD_LINKDOWN_HOOK, pppdapp_linkdown_hook); + rtems_pppd_set_hook(RTEMS_PPPD_IPUP_HOOK, pppdapp_ipup_hook); + rtems_pppd_set_hook(RTEMS_PPPD_IPDOWN_HOOK, pppdapp_ipdown_hook); +} + +static rtems_task pppdapp(rtems_task_argument arg) +{ + rtems_status_code sc = RTEMS_SUCCESSFUL; + rtems_interval tickspersecond = 0; + rtems_option options; + rtems_event_set in; + rtems_event_set out; + + /* initialize ticks per second */ + rtems_clock_get(RTEMS_CLOCK_GET_TICKS_PER_SECOND, &tickspersecond); + if ( tickspersecond == 0 ) { + /* ensure value is greater than zero */ + tickspersecond = 100; + } + + /* initiate connection */ + pppdapp_setup(); + rtems_pppd_connect(); + + /* enter processing loop */ + in = (RTEMS_EVENT_10 | RTEMS_EVENT_11); + options = (RTEMS_EVENT_ANY | RTEMS_WAIT); + while ( sc == RTEMS_SUCCESSFUL ) { + /* wait for the next event */ + sc = rtems_event_receive(in, options, RTEMS_NO_TIMEOUT, &out); + if ( sc == RTEMS_SUCCESSFUL ) { + /* determine which event was sent */ + if ( out & RTEMS_EVENT_10 ) { + /* ip up recived */ + /* call disconnect function */ + rtems_pppd_disconnect(); + } + if ( out & RTEMS_EVENT_11 ) { + /* ip down recived */ + /* sleep 10 seconds and call connect function */ + rtems_task_wake_after(10*tickspersecond); + rtems_pppd_connect(); + } + } + } + + /* terminate myself */ + rtems_task_delete(RTEMS_SELF); +} + +int pppdapp_initialize(void) +{ + int iReturn = (int)-1; + rtems_status_code status; + rtems_name taskName; + + taskName = rtems_build_name( 'p', 'a', 'p', 'p' ); + status = rtems_task_create(taskName, + CONFIGURE_INIT_TASK_PRIORITY, + CONFIGURE_INIT_TASK_STACK_SIZE, + CONFIGURE_INIT_TASK_INITIAL_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &pppdapp_taskid); + if ( status == RTEMS_SUCCESSFUL ) { + status = rtems_task_start(pppdapp_taskid, pppdapp, 0); + if ( status == RTEMS_SUCCESSFUL ) { + iReturn = (int)0; + } + } + + return ( iReturn ); +} -- cgit v1.2.3