Changeset 0c9330e in network-demos for netdemo


Ignore:
Timestamp:
Aug 21, 1998, 1:22:35 PM (23 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.11, 57a009d5b89e72f488ab655184e6a33bb0fe6b7f, netdemos-4-5-branch, network-demos-4-10-branch, network-demos-4-6-branch, network-demos-4-7-branch, network-demos-4-8-branch, network-demos-4-9-branch, rtems-4-5-branch
Children:
7ba2ac5
Parents:
4cfe89f
Message:

KA9Q -> FreeBSD changes from Eric Norum

Location:
netdemo
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • netdemo/Makefile

    r4cfe89f r0c9330e  
    1 #
    2 #  $Id$
    3 #
    4 
    51SAMPLE=netdemo
    62PGM=${ARCH}/$(SAMPLE).exe
    73
    8 MANAGERS=io message event semaphore timer rate_monotonic region
     4MANAGERS=io event semaphore
    95
    106# C source names, if any, go here -- minus the .c
    11 C_PIECES= init test
     7C_PIECES= init  test
    128C_FILES=$(C_PIECES:%=%.c)
    139C_O_FILES=$(C_PIECES:%=${ARCH}/%.o)
     
    3632CPPFLAGS +=
    3733CFLAGS   +=
    38 CFLAGS_LD += -Wl,--defsym -Wl,HeapSize=0xC0000  # KA9Q needs more space
     34CFLAGS_LD += -Wl,--defsym -Wl,HeapSize=0xC0000 
    3935CFLAGS_OPTIMIZE_V   +=
    4036CFLAGS_DEBUG_V   += -v -qrtems_debug
  • netdemo/init.c

    r4cfe89f r0c9330e  
    1212 * Saskatoon, Saskatchewan, CANADA
    1313 * eric@skatter.usask.ca
    14  *
    15  * $Id$
    1614 */
    17 
    18 /*
    19  *  Include user provided information
    20  */
    21 
    22 #include "../usercfg.h"
    2315
    2416#include <bsp.h>
     
    3123#define CONFIGURE_MAXIMUM_SEMAPHORES    20
    3224#define CONFIGURE_MAXIMUM_TASKS         20
    33 #define CONFIGURE_MAXIMUM_TIMERS        10
    34 #define CONFIGURE_MAXIMUM_PERIODS       1
    3525
    3626#define CONFIGURE_MICROSECONDS_PER_TICK 10486
    3727
    3828#define CONFIGURE_INIT_TASK_STACK_SIZE  (10*1024)
    39 #define CONFIGURE_INIT_TASK_PRIORITY    100
     29#define CONFIGURE_INIT_TASK_PRIORITY    120
    4030#define CONFIGURE_INIT_TASK_INITIAL_MODES (RTEMS_PREEMPT | \
    4131                                           RTEMS_NO_TIMESLICE | \
     
    4939
    5040#include <stdio.h>
    51 #include <rtems_ka9q.h>
    52 
    53 
    54 #if (defined (USE_BOOTP))
    55 #include <bootp.h>
    56 #endif
    57 
    58 /*
    59  * Suspend execution for the specified number of seconds
    60  */
    61 static void
    62 delay_task (int seconds)
    63 {
    64         rtems_interval ticksPerSecond;
    65 
    66         rtems_clock_get (RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticksPerSecond);
    67         rtems_task_wake_after (seconds * ticksPerSecond);
    68 }
     41#include <rtems/rtems_bsdnet.h>
     42#include "../networkconfig.h"
    6943
    7044/*
     
    7448Init (rtems_task_argument ignored)
    7549{
    76         printf( "\n\n*** ETHERNET DEMO TEST ***\n" );
     50        int doSocket(void);
    7751
    78         /*
    79          * Start KA9Q
    80          */
    81         puts( "Starting KA9Q" );
    82         rtems_ka9q_start (50);
    83 
    84         /*
    85          * Hook up drivers
    86          */
    87         puts( "Attaching to the network" );
    88         if (rtems_ka9q_execute_command ("attach rtems broadcast y"
    89 #if !(defined (USE_BOOTP))
    90                                         " ip " MY_IP_ADDRESS
    91 #endif
    92                                         " ether " MY_ETHERNET_ADDRESS))
    93                 rtems_panic ("Can't attach Ethernet driver.\n");
    94 
    95 #if (defined (TRACE_NETWORK_DRIVER))
    96         /*
    97          * Turn on debugging
    98          */
    99         puts( "Enabling debug mode of KA9Q" );
    100         if (rtems_ka9q_execute_command ("trace rtems input <stdout>")
    101          || rtems_ka9q_execute_command ("trace rtems output <stdout>")
    102          || rtems_ka9q_execute_command ("trace rtems ascii <stdout>"))
    103                 rtems_panic ("Can't set tracing for Ethernet driver.\n");
    104 #endif
    105 
    106         /*
    107          * Configure the driver
    108          */
    109         if (rtems_ka9q_execute_command ("ifconfig rtems broadcast 255.255.255.255"))
    110                 rtems_panic ("Can't configure Ethernet driver.\n");
    111 
    112         /*
    113          * Add the ethernet broadcast address to the ARP table.
    114          */
    115         if (rtems_ka9q_execute_command ("arp add 255.255.255.255 ether FF:FF:FF:FF:FF:FF"))
    116                 rtems_panic ("Can't add broadcast entry to ARP table.\n");
    117 
    118 #if (defined (USE_BOOTP))
    119         {
    120         int i;
    121         /*
    122          * Get BOOTP information
    123          */
    124         for (i = 0 ; ; ) {
    125                 if (rtems_ka9q_execute_command ("bootp") == 0)
    126                         break;
    127                 if (++i == 10)
    128                         rtems_panic ("Can't get information from BOOTP server.\n");
    129                 delay_task (i);
    130         }
    131         if (BootpFileName)
    132                 printf ("BOOTP filename: `%s'\n", BootpFileName);
    133         else
    134                 printf ("BOOTP -- No filename!\n");
    135         }
    136 #else
    137         if (rtems_ka9q_execute_command ("ifconfig rtems netmask 255.255.255.0"))
    138                 rtems_panic ("Can't set netmask.\n");
    139         if (rtems_ka9q_execute_command ("route add default rtems"))
    140                 rtems_panic ("Can't add default route.\n");
    141         printf ("Routing table after adding default route\n");
    142         rtems_ka9q_execute_command ("route");
    143 #endif
    144 
    145         /*
    146          * Issue a gratuitous ARP request to update tables in
    147          * other hosts on this network.
    148          */
    149         if (rtems_ka9q_execute_command ("arp gratuitous rtems"))
    150                 rtems_panic ("Can't send gratuitous ARP.\n");
    151        
    152         /*
    153          * Everything is now running
    154          */
    155         printf ("NETWORK INITIALIZED!\n");
    156 
    157         /*
    158          * See if sockets work properly
    159          */
     52        rtems_bsdnet_initialize_network ();
    16053        doSocket ();
    161 
    162         /*
    163          * Wind things up
    164          */
    165         delay_task (2);
    166         rtems_ka9q_execute_command ("detach rtems");
    16754        exit (0);
    16855}
  • netdemo/test.c

    r4cfe89f r0c9330e  
    11/*
    2  * Test KA9Q networking
     2 * Test RTEMS networking
    33 *
    44 * This program may be distributed and used for any purpose.
     
    1212 * Saskatoon, Saskatchewan, CANADA
    1313 * eric@skatter.usask.ca
    14  *
    15  * $Id$
    16  */
    17 
     14 */
    1815#include <stdio.h>
     16#include <string.h>
     17#include <errno.h>
    1918#include <unistd.h>
    2019#include <rtems.h>
     20#include <rtems/rtems_bsdnet.h>
    2121#include <rtems/error.h>
    22 #include <socket.h>
    23 #include <sockaddr.h>
    24 #include <netuser.h>
    25 #include <rtems_ka9q.h>
    26 
    27 #include "../usercfg.h"
    28 
    29 /*
    30  * Display the contents of several KA9Q tables
    31  */
    32 static void
    33 show_ka9q_tables (void)
    34 {
    35         printf ("\n****************** MALLOC Statistics ***************\n");
    36         malloc_dump ();
    37         printf ("\n****************** MBUF Statistics ***************\n");
    38         mbufstat ();
    39         mbufsizes ();
    40         printf ("\n****************** Routing Table ***************\n");
    41         rtems_ka9q_execute_command ("route");
    42         printf ("\n****************** ARP Table ***************\n");
    43         rtems_ka9q_execute_command ("arp");
    44         printf ("\n****************** Driver Statistics ***************\n");
    45         rtems_ka9q_execute_command ("ifconfig rtems");
    46         printf ("\n****************** Ip Statistics ***************\n");
    47         rtems_ka9q_execute_command ("ip status");
    48         printf ("\n****************** ICMP Statistics ***************\n");
    49         rtems_ka9q_execute_command ("icmp status");
    50         printf ("\n****************** UDP Statistics ***************\n");
    51         rtems_ka9q_execute_command ("udp status");
    52         printf ("\n****************** TCP Statistics ***************\n");
    53         rtems_ka9q_execute_command ("tcp status");
     22#include <sys/types.h>
     23#include <sys/socket.h>
     24#include <netinet/in.h>
     25
     26#define NSERVER         2
     27#define BASE_PORT       24742
     28
     29#define DATA_SINK_HOST  ((128 << 24) | (233 << 16) | (14 << 8) | 60)
     30
     31void showbroad(int s)
     32{
     33        int opt;
     34        int optlen = sizeof opt;
     35
     36        if (getsockopt (s, SOL_SOCKET, SO_BROADCAST, &opt, &optlen) < 0)
     37                printf ("getsockopt failed: %s\n", strerror (errno));
     38        printf ("Opt:%d    Optlen:%d\n", opt, optlen);
     39}
     40
     41static
     42void
     43showStatistics (void)
     44{
     45        rtems_bsdnet_show_inet_routes ();
     46        rtems_bsdnet_show_mbuf_stats ();
     47        rtems_bsdnet_show_if_stats ();
     48        rtems_bsdnet_show_ip_stats ();
     49        rtems_bsdnet_show_icmp_stats ();
     50        rtems_bsdnet_show_udp_stats ();
     51        rtems_bsdnet_show_tcp_stats ();
    5452}
    5553
     
    5957static void
    6058transmitUdp (void)
     59{
     60        int s;
     61        int i;
     62        int opt;
     63        static struct sockaddr_in myAddr, farAddr;
     64        static char cbuf[800];
     65        static char bigbuf[9000];
     66
     67        printf ("Create socket.\n");
     68        s = socket (AF_INET, SOCK_DGRAM, 0);
     69        if (s < 0)
     70                rtems_panic ("Can't create socket: %s", strerror (errno));
     71        myAddr.sin_family = AF_INET;
     72        myAddr.sin_port = htons (1234);
     73        myAddr.sin_addr.s_addr = htonl (INADDR_ANY);
     74        printf ("Bind socket.\n");
     75        if (bind (s, (struct sockaddr *)&myAddr, sizeof myAddr) < 0)
     76                rtems_panic ("Can't bind socket: %s", strerror (errno));
     77        farAddr.sin_family = AF_INET;
     78        farAddr.sin_port = htons (9);   /* The `discard' port */
     79#if 1
     80        farAddr.sin_addr.s_addr = htonl (0xFFFFFFFF);
     81        if (sendto (s, cbuf, sizeof cbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) >= 0)
     82                printf ("Broadcast succeeded, but should not have!\n");
     83showbroad (s);
     84        opt = 1;
     85        if (setsockopt (s, SOL_SOCKET, SO_BROADCAST, &opt, sizeof opt) < 0)
     86                rtems_panic ("Can't set socket broadcast: %s", strerror (errno));
     87showbroad (s);
     88        for (i = 0 ; i < 5 ; i++) {
     89                if (sendto (s, cbuf, sizeof cbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) < 0)
     90                        rtems_panic ("Can't broadcast: %s", strerror (errno));
     91        }
     92#endif
     93        farAddr.sin_addr.s_addr = htonl (DATA_SINK_HOST);
     94#if 1
     95        for (i = 0 ; i < 500 ; i++) {
     96                if (sendto (s, cbuf, sizeof cbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) < 0)
     97                        rtems_panic ("Can't send: %s", strerror (errno));
     98                if (sendto (s, cbuf, sizeof cbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) < 0)
     99                        rtems_panic ("Can't send: %s", strerror (errno));
     100        }
     101#endif
     102#if 1
     103        for (i = 0 ; i < 2 ; i++) {
     104                if (sendto (s, bigbuf, sizeof bigbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) < 0)
     105                        rtems_panic ("Can't send: %s", strerror (errno));
     106                if (sendto (s, bigbuf, sizeof bigbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) < 0)
     107                        rtems_panic ("Can't send: %s", strerror (errno));
     108        }
     109#endif
     110        close (s);
     111}
     112       
     113/*
     114 * Stress the transmit queue -- send a large number of TCP packets
     115 */
     116static void
     117transmitTcp (void)
    61118{
    62119        int s;
     
    67124
    68125        printf ("Create socket.\n");
    69         s = socket (AF_INET, SOCK_DGRAM, 0);
     126        s = socket (AF_INET, SOCK_STREAM, 0);
    70127        if (s < 0)
    71128                rtems_panic ("Can't create socket: %s", strerror (errno));
    72129        myAddr.sin_family = AF_INET;
    73         myAddr.sin_port = 1234;
    74         myAddr.sin_addr.s_addr = INADDR_ANY;
     130        myAddr.sin_port = htons (1234);
     131        myAddr.sin_addr.s_addr = htonl (INADDR_ANY);
    75132        printf ("Bind socket.\n");
    76133        if (bind (s, (struct sockaddr *)&myAddr, sizeof myAddr) < 0)
    77134                rtems_panic ("Can't bind socket: %s", strerror (errno));
    78135        farAddr.sin_family = AF_INET;
    79         farAddr.sin_port = 9;   /* The `discard' port */
    80         farAddr.sin_addr.s_addr = 0xFFFFFFFF;
    81         for (i = 0 ; i < 5 ; i++) {
    82                 if (sendto (s, cbuf, sizeof cbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) < 0)
    83                         rtems_panic ("Can't broadcast: %s", strerror (errno));
    84         }
    85         farAddr.sin_addr.s_addr = aton (DATA_SINK_HOST);
    86         for (i = 0 ; i < 500 ; i++) {
    87                 if (sendto (s, cbuf, sizeof cbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) < 0)
    88                         rtems_panic ("Can't send: %s", strerror (errno));
    89                 if (sendto (s, cbuf, sizeof cbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) < 0)
    90                         rtems_panic ("Can't send: %s", strerror (errno));
    91         }
    92         for (i = 0 ; i < 2 ; i++) {
    93                 if (sendto (s, bigbuf, sizeof bigbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) < 0)
    94                         rtems_panic ("Can't send: %s", strerror (errno));
    95                 if (sendto (s, bigbuf, sizeof bigbuf, 0, (struct sockaddr *)&farAddr, sizeof farAddr) < 0)
    96                         rtems_panic ("Can't send: %s", strerror (errno));
    97         }
    98         close (s);
    99 }
    100        
    101 /*
    102  * Stress the transmit queue -- send a large number of TCP packets
    103  */
    104 static void
    105 transmitTcp (void)
    106 {
    107         int s;
    108         int i;
    109         static struct sockaddr_in myAddr, farAddr;
    110         static char cbuf[800];
    111         static char bigbuf[20000];
    112 
    113         printf ("Create socket.\n");
    114         s = socket (AF_INET, SOCK_STREAM, 0);
    115         if (s < 0)
    116                 rtems_panic ("Can't create socket: %s", strerror (errno));
    117         myAddr.sin_family = AF_INET;
    118         myAddr.sin_port = 1234;
    119         myAddr.sin_addr.s_addr = INADDR_ANY;
    120         printf ("Bind socket.\n");
    121         if (bind (s, (struct sockaddr *)&myAddr, sizeof myAddr) < 0)
    122                 rtems_panic ("Can't bind socket: %s", strerror (errno));
    123         farAddr.sin_family = AF_INET;
    124         farAddr.sin_port = 9;   /* The `discard' port */
    125         farAddr.sin_addr.s_addr = aton (DATA_SINK_HOST);
     136        farAddr.sin_port = htons (9);   /* The `discard' port */
     137        farAddr.sin_addr.s_addr = htonl (DATA_SINK_HOST);
     138        printf ("Connect socket.\n");
    126139        if (connect (s, (struct sockaddr *)&farAddr, sizeof farAddr) < 0) {
    127140                printf ("Can't connect socket: %s\n", strerror (errno));
     
    129142                return;
    130143        }
     144        printf ("Write to socket.\n");
    131145        for (i = 0 ; i < 500 ; i++) {
    132146                if (write (s, cbuf, sizeof cbuf) < 0)
     
    155169        rtems_status_code sc;
    156170
    157   printf( "echoTask on %d\n", fd );
    158171        for (;;) {
    159 #if 0
     172#if 1
    160173                n = read (fd, cbuf, sizeof cbuf);
    161174#else
     
    172185                if (send (fd, cbuf, n, 0) < 0)
    173186                        rtems_panic ("Error sending message: %s", strerror (errno));
    174                 if (cbuf[0] == '\007')
    175                         show_ka9q_tables ();
    176187                if (cbuf[0] == 'Q')
    177188                        break;
     
    199210                rtems_panic ("Can't create socket: %s", strerror (errno));
    200211        myAddr.sin_family = AF_INET;
    201         myAddr.sin_port = port;
     212        myAddr.sin_port = htons (port);
    202213        myAddr.sin_addr.s_addr = INADDR_ANY;
    203214        memset (myAddr.sin_zero, '\0', sizeof myAddr.sin_zero);
     
    215226                        rtems_panic ("Can't accept connection: %s", strerror (errno));
    216227                else
    217                         printf ("ACCEPTED:%lX\n", farAddr.sin_addr.s_addr);
     228                        printf ("ACCEPTED:%lX\n", ntohl (farAddr.sin_addr.s_addr));
    218229
    219230                /*
     
    259270        rtems_task_priority my_priority;
    260271
     272#if 1
    261273        /*
    262274         * Spawn other servers
     
    281293                }
    282294        }
     295#endif
    283296
    284297        /*
     
    288301                switch (getchar ()) {
    289302                case '\004':
    290                         printf( "Exiting test\n" );
    291303                        return;
    292304
     
    306318
    307319                case 's':
    308                         /*
    309                          * Show what's been accomplished
    310                          */
    311                         show_ka9q_tables ();
    312                         break;
    313                 }
    314         }
    315 }
     320                        showStatistics ();
     321                        break;
     322                }
     323        }
     324}
Note: See TracChangeset for help on using the changeset viewer.