source: network-demos/tftpTest/test.c @ 3b67d88

4.11netdemos-4-5-branchnetwork-demos-4-10-branchnetwork-demos-4-6-branchnetwork-demos-4-7-branchnetwork-demos-4-8-branchnetwork-demos-4-9-branchrtems-4-5-branch
Last change on this file since 3b67d88 was 3b67d88, checked in by Joel Sherrill <joel.sherrill@…>, on Aug 12, 1998 at 11:15:45 PM

Added gratuitous arp and commented out a confusing printf.

  • Property mode set to 100644
File size: 3.5 KB
Line 
1/*
2 * Test RTEMS/KA9Q TFTP device driver
3 *
4 * This program may be distributed and used for any purpose.
5 * I ask only that you:
6 *      1. Leave this author information intact.
7 *      2. Document any changes you make.
8 *
9 * W. Eric Norum
10 * Saskatchewan Accelerator Laboratory
11 * University of Saskatchewan
12 * Saskatoon, Saskatchewan, CANADA
13 * eric@skatter.usask.ca
14 */
15
16#include <stdio.h>
17#include <rtems.h>
18#include <rtems/error.h>
19#include <sys/fcntl.h>
20#include <unistd.h>
21#include <bootp.h>
22#include <netuser.h>
23
24#include "../usercfg.h"
25
26static char cbuf[1024];
27static char *fullname;
28static rtems_interval then, now;
29
30static void
31showRate (unsigned long totalRead)
32{
33        int elapsed;
34
35        printf ("Read %lu bytes", totalRead);
36        elapsed = now - then;
37        if (elapsed) {
38                rtems_interval ticksPerSecond;
39                rtems_clock_get (RTEMS_CLOCK_GET_TICKS_PER_SECOND, &ticksPerSecond);
40                printf (" (%ld bytes/sec)",
41                                (long)(((long long)totalRead * ticksPerSecond)
42                                                                / elapsed));
43        }
44        printf (".\n");
45rtems_ka9q_execute_command ("ifconfig rtems");
46}
47
48static void
49testRawRead (void)
50{
51        int fd;
52        int nread;
53        unsigned long totalRead = 0;
54
55        fd = open (fullname, O_RDONLY);
56        if (fd < 0) {
57                printf ("Open failed: %s\n", strerror (errno));
58                return;
59        }
60
61        rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then);
62        for (;;) {
63                nread = read (fd, cbuf, sizeof cbuf);
64                if (nread < 0) {
65                        printf ("Read failed: %s\n", strerror (errno));
66                        close (fd);
67                        return;
68                }
69                if (nread == 0)
70                        break;
71                totalRead += nread;
72        }
73        rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now);
74        close (fd);
75        showRate (totalRead);
76}
77
78static void
79testFread (void)
80{
81        FILE *fp;
82        int nread;
83        unsigned long totalRead = 0;
84
85        fp = fopen (fullname, "r");
86        if (fp == NULL) {
87                printf ("Open failed: %s\n", strerror (errno));
88                return;
89        }
90
91        rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &then);
92        for (;;) {
93                nread = fread (cbuf, sizeof cbuf[0], sizeof cbuf, fp);
94                if (nread < 0) {
95                        printf ("Read failed: %s\n", strerror (errno));
96                        fclose (fp);
97                        return;
98                }
99                if (nread == 0)
100                        break;
101                totalRead += nread;
102        }
103        rtems_clock_get (RTEMS_CLOCK_GET_TICKS_SINCE_BOOT, &now);
104        fclose (fp);
105        showRate (totalRead);
106}
107
108static int
109makeFullname (rtems_unsigned32 host, const char *file)
110{
111        const char *hostname;
112#if !defined(USE_BOOTP)
113        static char name[16];
114#endif
115
116#if 0
117        printf( "makeFullname(0x08%x, %s)\n", host, file);
118#endif
119
120#if (defined (USE_BOOTP))
121        if (host) {
122                hostname = rtems_hostname_for_address (BootpHost.s_addr, 0);
123                if (hostname == NULL) {
124                        printf ("No host to read from!\n");
125                        return 0;
126                }
127        } else {
128                hostname = "";
129        }
130#else
131        if (host) {
132                sprintf( name, "%d.%d.%d.%d", host >> 24, (host >> 16) & 0xff, 
133                        (host >> 8) & 0xff, host & 0xff
134                );
135                hostname = name;
136        } else {
137                hostname = "";
138        }
139#endif
140        fullname = realloc (fullname, 8 + strlen (file) + strlen (hostname));
141        sprintf (fullname, "/TFTP/%s/%s", hostname, file);
142        printf ("Read `%s'.\n", fullname);
143        return 1;
144}
145
146void
147testTFTP (void)
148{
149        /*
150         * Check that invalid file names are reported as such
151         */
152        if (makeFullname (0, "")) {
153                testRawRead ();
154                testFread ();
155        }
156
157        /*
158         * Check that non-existent files are reported as such
159         */
160        if (makeFullname (0, "BAD-FILE-NAME")) {
161                testRawRead ();
162                testFread ();
163        }
164
165        /*
166         * Check read speed
167         */
168#if (defined (USE_BOOTP))
169        if (BootpFileName == NULL) {
170                printf ("Nothing to read!\n");
171                return;
172        }
173        if (makeFullname (BootpHost.s_addr, BootpFileName)) {
174#else
175        if (makeFullname (aton (DATA_SOURCE_HOST), DATA_SOURCE_FILE)) {
176#endif
177
178                testRawRead ();
179                testFread ();
180        }
181}
Note: See TracBrowser for help on using the repository browser.