diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2001-08-16 20:42:09 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2001-08-16 20:42:09 +0000 |
commit | 2f1b9304ac4ba89a2dcb6047cb584a5603a33987 (patch) | |
tree | f2339e3f2230b73ee4818d55d4154795e712d803 /c/src/libnetworking/pppd/example | |
parent | 2001-08-16 Mike Siers <mikes@poliac.com> (diff) | |
download | rtems-2f1b9304ac4ba89a2dcb6047cb584a5603a33987.tar.bz2 |
2001-08-16 Mike Siers <mikes@poliac.com>
* 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.
Diffstat (limited to 'c/src/libnetworking/pppd/example')
-rw-r--r-- | c/src/libnetworking/pppd/example/Makefile | 45 | ||||
-rw-r--r-- | c/src/libnetworking/pppd/example/README | 6 | ||||
-rw-r--r-- | c/src/libnetworking/pppd/example/init.c | 24 | ||||
-rw-r--r-- | c/src/libnetworking/pppd/example/netconfig.h | 37 | ||||
-rw-r--r-- | c/src/libnetworking/pppd/example/ppp.conf | 27 | ||||
-rw-r--r-- | c/src/libnetworking/pppd/example/pppdapp.c | 146 | ||||
-rw-r--r-- | c/src/libnetworking/pppd/example/system.h | 42 |
7 files changed, 327 insertions, 0 deletions
diff --git a/c/src/libnetworking/pppd/example/Makefile b/c/src/libnetworking/pppd/example/Makefile new file mode 100644 index 0000000000..69cc8aab50 --- /dev/null +++ b/c/src/libnetworking/pppd/example/Makefile @@ -0,0 +1,45 @@ +# +# Makefile +# + +# +# RTEMS_MAKEFILE_PATH is typically set in an environment variable +# + +EXEC=ppptest.exe +PGM=${ARCH}/$(EXEC) + +# optional managers required +MANAGERS=io event semaphore + +# C source names +CSRCS = init.c pppdapp.c + +COBJS_ = $(CSRCS:.c=.o) +COBJS = $(COBJS_:%=${ARCH}/%) + +# C++ source names +CXXSRCS = +CXXOBJS_ = $(CXXSRCS:.cc=.o) +CXXOBJS = $(CXXOBJS_:%=${ARCH}/%) + +# AS source names +ASSRCS = +ASOBJS_ = $(ASSRCS:.s=.o) +ASOBJS = $(ASOBJS_:%=${ARCH}/%) + +# Libraries +LIBS = -lrtemsall -lc + +include $(RTEMS_MAKEFILE_PATH)/Makefile.inc + +include $(RTEMS_CUSTOM) +include $(PROJECT_ROOT)/make/leaf.cfg + +OBJS= $(COBJS) $(CXXOBJS) $(ASOBJS) + +all: ${ARCH} $(PGM) + +$(PGM): $(OBJS) + $(make-exe) + diff --git a/c/src/libnetworking/pppd/example/README b/c/src/libnetworking/pppd/example/README new file mode 100644 index 0000000000..786d03844b --- /dev/null +++ b/c/src/libnetworking/pppd/example/README @@ -0,0 +1,6 @@ +# +# $Id$ +# + +This is an example user application using pppd. It is built using +the RTEMS application Makefiles. diff --git a/c/src/libnetworking/pppd/example/init.c b/c/src/libnetworking/pppd/example/init.c new file mode 100644 index 0000000000..f35d195bf2 --- /dev/null +++ b/c/src/libnetworking/pppd/example/init.c @@ -0,0 +1,24 @@ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <rtems/rtems_bsdnet.h> +#include <rtemspppd.h> + +#define CONFIGURE_INIT +#include "system.h" +#include "netconfig.h" + + +extern int pppdapp_initialize(void); + + +rtems_task Init(rtems_task_argument argument) +{ + /* initialize network */ + rtems_bsdnet_initialize_network(); + rtems_pppd_initialize(); + pppdapp_initialize(); + + rtems_task_delete(RTEMS_SELF); +} diff --git a/c/src/libnetworking/pppd/example/netconfig.h b/c/src/libnetworking/pppd/example/netconfig.h new file mode 100644 index 0000000000..6a95cce189 --- /dev/null +++ b/c/src/libnetworking/pppd/example/netconfig.h @@ -0,0 +1,37 @@ + +#ifndef NETCONFIG_H_ +#define NETCONFIG_H_ + +#include <bsp.h> + +/* external function prototypes */ +extern int rtems_ppp_driver_attach(struct rtems_bsdnet_ifconfig *config, + int attaching); + +/* Default network interface */ +static struct rtems_bsdnet_ifconfig netdriver_config = { + "ppp0", /* name */ + rtems_ppp_driver_attach, /* attach function */ + NULL, /* No more interfaces */ + "192.168.2.123", /* IP address */ + "255.255.255.0", /* IP net mask */ + NULL, /* Driver supplies hardware address */ + 0 /* Use default driver parameters */ +}; + +/* Network configuration */ +struct rtems_bsdnet_config rtems_bsdnet_config = { + &netdriver_config, + NULL, + 0, /* Default network task priority */ + 0, /* Default mbuf capacity */ + 0, /* Default mbuf cluster capacity */ + "rtems", /* Host name */ + "xxxyyy.com", /* Domain name */ + 0, /* Gateway */ + 0, /* Log host */ + { 0 }, /* Name server(s) */ + { 0 }, /* NTP server(s) */ +}; + +#endif diff --git a/c/src/libnetworking/pppd/example/ppp.conf b/c/src/libnetworking/pppd/example/ppp.conf new file mode 100644 index 0000000000..094b1946a8 --- /dev/null +++ b/c/src/libnetworking/pppd/example/ppp.conf @@ -0,0 +1,27 @@ + +# +# Example configuration file for setting up a ppp server +# using a null-modem serial cable: +# +# Tested using ppp on OpenBSD 2.9 +# - just follow instructions in man page for accepting +# ppp connections over the serial port +# - if pap and/or chap is enabled, you must have a ppp.secret +# file which will be used for user authentication +# - found useful to turn on syslog for ppp +# + +default: + set log Phase Chat LQM LCP IPCP CCP command + set device /dev/cua00 + set speed 57600 + set ctsrts on + set dial "" + +openbsd-server: + set timeout 0 + set ifaddr 192.168.2.100 192.168.2.123 + enable dns + allow users + enable chap + enable pap 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 <stdio.h> +#include <rtemspppd.h> +#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 ); +} diff --git a/c/src/libnetworking/pppd/example/system.h b/c/src/libnetworking/pppd/example/system.h new file mode 100644 index 0000000000..87678da1b6 --- /dev/null +++ b/c/src/libnetworking/pppd/example/system.h @@ -0,0 +1,42 @@ + +#ifndef SYSTEM_H +#define SYSTEM_H + +#include <rtems.h> +#include <tty_drv.h> + +/* functions */ +extern rtems_task Init(rtems_task_argument argument); + +#include <bsp.h> + +#define CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE +#ifdef CONFIGURE_INIT +rtems_driver_address_table Device_drivers[5] = { + CONSOLE_DRIVER_TABLE_ENTRY, + CLOCK_DRIVER_TABLE_ENTRY, + TTY1_DRIVER_TABLE_ENTRY, + TTY2_DRIVER_TABLE_ENTRY, + {NULL, NULL, NULL, NULL, NULL, NULL} +}; +#endif + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE +#define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS 8 + +#define CONFIGURE_EXECUTIVE_RAM_SIZE (512*1024) +#define CONFIGURE_MAXIMUM_SEMAPHORES 20 +#define CONFIGURE_MAXIMUM_TASKS 20 + +#define CONFIGURE_MICROSECONDS_PER_TICK 10000 + +#define CONFIGURE_INIT_TASK_STACK_SIZE (10*1024) +#define CONFIGURE_INIT_TASK_PRIORITY 120 +#define CONFIGURE_INIT_TASK_INITIAL_MODES (RTEMS_PREEMPT | \ + RTEMS_NO_TIMESLICE | \ + RTEMS_NO_ASR | \ + RTEMS_INTERRUPT_LEVEL(0)) + +#include <confdefs.h> + +#endif |