From 478bb1e63d1ddecd7579a0628f3f54cc4f5afa7f Mon Sep 17 00:00:00 2001 From: Ralf Corsepius Date: Tue, 29 Apr 2003 02:04:26 +0000 Subject: 2003-04-29 Ralf Corsepius Adding pppd: * pppd/Makefile-user: New, copied over from libnetworking/pppd/example. * pppd/README: New, copied over from libnetworking/pppd/example. * pppd/init.c: New, copied over from libnetworking/pppd/example. * pppd/netconfig.h: New, copied over from libnetworking/pppd/example. * pppd/ppp.conf: New, copied over from libnetworking/pppd/example. * pppd/pppdapp.c: New, copied over from libnetworking/pppd/example. * pppd/system.h: New, copied over from libnetworking/pppd/example. * pppd/pppd.options: New, copied over from libnetworking/pppd/example. * pppd/Makefile.am: New, converted to automake from Makefile-user. * pppd/.cvsignore: New. --- c/src/tests/samples/ChangeLog | 14 ++++ c/src/tests/samples/pppd/.cvsignore | 2 + c/src/tests/samples/pppd/Makefile-user | 45 ++++++++++ c/src/tests/samples/pppd/Makefile.am | 43 ++++++++++ c/src/tests/samples/pppd/README | 15 ++++ c/src/tests/samples/pppd/init.c | 24 ++++++ c/src/tests/samples/pppd/netconfig.h | 36 ++++++++ c/src/tests/samples/pppd/ppp.conf | 27 ++++++ c/src/tests/samples/pppd/pppd.options | 9 ++ c/src/tests/samples/pppd/pppdapp.c | 146 +++++++++++++++++++++++++++++++++ c/src/tests/samples/pppd/system.h | 42 ++++++++++ 11 files changed, 403 insertions(+) create mode 100644 c/src/tests/samples/pppd/.cvsignore create mode 100644 c/src/tests/samples/pppd/Makefile-user create mode 100644 c/src/tests/samples/pppd/Makefile.am create mode 100644 c/src/tests/samples/pppd/README create mode 100644 c/src/tests/samples/pppd/init.c create mode 100644 c/src/tests/samples/pppd/netconfig.h create mode 100644 c/src/tests/samples/pppd/ppp.conf create mode 100644 c/src/tests/samples/pppd/pppd.options create mode 100644 c/src/tests/samples/pppd/pppdapp.c create mode 100644 c/src/tests/samples/pppd/system.h (limited to 'c/src') diff --git a/c/src/tests/samples/ChangeLog b/c/src/tests/samples/ChangeLog index a96cfe3243..fe93752b3c 100644 --- a/c/src/tests/samples/ChangeLog +++ b/c/src/tests/samples/ChangeLog @@ -1,3 +1,17 @@ +2003-04-29 Ralf Corsepius + + Adding pppd: + * pppd/Makefile-user: New, copied over from libnetworking/pppd/example. + * pppd/README: New, copied over from libnetworking/pppd/example. + * pppd/init.c: New, copied over from libnetworking/pppd/example. + * pppd/netconfig.h: New, copied over from libnetworking/pppd/example. + * pppd/ppp.conf: New, copied over from libnetworking/pppd/example. + * pppd/pppdapp.c: New, copied over from libnetworking/pppd/example. + * pppd/system.h: New, copied over from libnetworking/pppd/example. + * pppd/pppd.options: New, copied over from libnetworking/pppd/example. + * pppd/Makefile.am: New, converted to automake from Makefile-user. + * pppd/.cvsignore: New. + 2003-03-06 Ralf Corsepius * configure.ac: Remove AC_CONFIG_AUX_DIR. diff --git a/c/src/tests/samples/pppd/.cvsignore b/c/src/tests/samples/pppd/.cvsignore new file mode 100644 index 0000000000..282522db03 --- /dev/null +++ b/c/src/tests/samples/pppd/.cvsignore @@ -0,0 +1,2 @@ +Makefile +Makefile.in diff --git a/c/src/tests/samples/pppd/Makefile-user b/c/src/tests/samples/pppd/Makefile-user new file mode 100644 index 0000000000..69cc8aab50 --- /dev/null +++ b/c/src/tests/samples/pppd/Makefile-user @@ -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/tests/samples/pppd/Makefile.am b/c/src/tests/samples/pppd/Makefile.am new file mode 100644 index 0000000000..7e429e499d --- /dev/null +++ b/c/src/tests/samples/pppd/Makefile.am @@ -0,0 +1,43 @@ +## +## $Id$ +## + + +SAMPLE = pppd +PGM = ${ARCH}/$(SAMPLE).exe + +MANAGERS = io event semaphore + +C_FILES = init.c pppdapp.c +C_O_FILES = $(C_FILES:%.c=${ARCH}/%.$(OBJEXT)) + +H_FILES = netconfig.h system.h + +DOCTYPES = scn +DOCS = $(DOCTYPES:%=$(SAMPLE).%) + +SRCS = $(DOCS) $(C_FILES) $(H_FILES) +OBJS = $(C_O_FILES) + +PRINT_SRCS = $(DOCS) + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../../../../automake/compile.am +include $(top_srcdir)/../../../../automake/leaf.am +include $(top_srcdir)/sample.am + +# +# (OPTIONAL) Add local stuff here using += +# + + +if HAS_NETWORKING +all-local: ${ARCH} $(TMPINSTALL_FILES) + +${PGM}: $(OBJS) $(LINK_FILES) + $(make-exe) +endif + +EXTRA_DIST = $(C_FILES) $(H_FILES) $(DOCS) + +include $(top_srcdir)/../../../../automake/local.am diff --git a/c/src/tests/samples/pppd/README b/c/src/tests/samples/pppd/README new file mode 100644 index 0000000000..677e00af33 --- /dev/null +++ b/c/src/tests/samples/pppd/README @@ -0,0 +1,15 @@ +# +# $Id$ +# + +This is an example user application using pppd. It is built using +the RTEMS application Makefiles. The file Makefile-user should +be renamed to Makefile or the -f option given to make. The file +is renamed to avoid bootstrap -c removing it. + +The files ppp.conf and pppd.options are sample configuration files +that have successfully used to make ppp connections over a null +modem serial cable to a UNIX box. Please review the man pages +for either the ppp or pppd applications to ensure they are configured +correctly. + diff --git a/c/src/tests/samples/pppd/init.c b/c/src/tests/samples/pppd/init.c new file mode 100644 index 0000000000..f35d195bf2 --- /dev/null +++ b/c/src/tests/samples/pppd/init.c @@ -0,0 +1,24 @@ + +#include +#include +#include +#include +#include + +#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/tests/samples/pppd/netconfig.h b/c/src/tests/samples/pppd/netconfig.h new file mode 100644 index 0000000000..3428288cd2 --- /dev/null +++ b/c/src/tests/samples/pppd/netconfig.h @@ -0,0 +1,36 @@ + +#ifndef NETCONFIG_H_ +#define NETCONFIG_H_ + +#include + +/* 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 */ + NULL, /* IP address */ + NULL, /* 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, + 30, /* Default network task priority */ + (256*1024), /* Default mbuf capacity */ + (512*1024), /* Default mbuf cluster capacity */ + 0, /* Host name */ + 0, /* Domain name */ + 0, /* Gateway */ + 0, /* Log host */ + { 0 }, /* Name server(s) */ + { 0 }, /* NTP server(s) */ +}; + +#endif diff --git a/c/src/tests/samples/pppd/ppp.conf b/c/src/tests/samples/pppd/ppp.conf new file mode 100644 index 0000000000..094b1946a8 --- /dev/null +++ b/c/src/tests/samples/pppd/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/tests/samples/pppd/pppd.options b/c/src/tests/samples/pppd/pppd.options new file mode 100644 index 0000000000..c0706e6ec5 --- /dev/null +++ b/c/src/tests/samples/pppd/pppd.options @@ -0,0 +1,9 @@ +/dev/tty00 +57600 +crtscts +passive +local +noauth +debug +persist +192.168.2.222:192.168.2.111 diff --git a/c/src/tests/samples/pppd/pppdapp.c b/c/src/tests/samples/pppd/pppdapp.c new file mode 100644 index 0000000000..59e5029088 --- /dev/null +++ b/c/src/tests/samples/pppd/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 ); +} diff --git a/c/src/tests/samples/pppd/system.h b/c/src/tests/samples/pppd/system.h new file mode 100644 index 0000000000..87678da1b6 --- /dev/null +++ b/c/src/tests/samples/pppd/system.h @@ -0,0 +1,42 @@ + +#ifndef SYSTEM_H +#define SYSTEM_H + +#include +#include + +/* functions */ +extern rtems_task Init(rtems_task_argument argument); + +#include + +#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 + +#endif -- cgit v1.2.3