source: rtems/doc/networking/networkapp.t @ febb47e

4.104.114.84.95
Last change on this file since febb47e was 4b8bf95, checked in by Joel Sherrill <joel.sherrill@…>, on 10/12/98 at 21:25:10

Added some fields and changed last KA9Q reference to FreeBSD.

  • Property mode set to 100644
File size: 8.7 KB
Line 
1@c
2@c  Written by Eric Norum
3@c
4@c  COPYRIGHT (c) 1988-1998.
5@c  On-Line Applications Research Corporation (OAR).
6@c  All rights reserved.
7@c
8@c  $Id$
9@c
10
11@chapter Using Networking in an RTEMS Application
12
13@section Makefile changes
14@subsection Including the required managers
15The FreeBSD networking code requires several RTEMS managers
16in the application:
17
18@example
19MANAGERS = io event semaphore
20@end example
21
22@subsection Increasing the size of the heap
23The networking tasks allocate a lot of memory.  For most applications
24the heap should be at least 256 kbytes.
25The amount of memory set aside for the heap can be adjusted by setting
26the @code{CFLAGS_LD} definition as shown below:
27
28@example
29CFLAGS_LD += -Wl,--defsym -Wl,HeapSize=0x80000
30@end example
31
32This sets aside 512 kbytes of memory for the heap.
33
34@section System Configuration
35
36The networking tasks allocate some RTEMS objects.  These
37must be accounted for in the application configuration table.  The following
38lists the requirements.
39
40@table @b
41@item TASKS
42One network task plus a receive and transmit task for each device.
43
44@item SEMAPHORES
45One network semaphore plus one syslog mutex semaphore if the application uses
46openlog/syslog.
47
48@item EVENTS
49The network stack uses @code{RTEMS_EVENT_24} and @code{RTEMS_EVENT_25}.
50This has no effect on the application configuration, but
51application tasks which call the network functions should not
52use these events for other purposes.
53
54@end table
55
56@section Initialization
57@subsection Additional include files
58The source file which declares the network configuration
59structures and calls the network initialization function must include
60
61@example
62#include <rtems/rtems_bsdnet.h>
63@end example
64
65@subsection Network configuration
66The network configuration is specified by declaring
67and initializing the @code{rtems_bsdnet_configuration}
68structure.
69
70The structure entries are described in the following table.
71If your application uses BOOTP to obtain network configuration
72information and if you are happy with the default values described
73below, you need to provide only the first two entries in this structure.
74
75@table @code
76
77@item struct rtems_bsdnet_ifconfig *ifconfig
78A pointer to the first configuration structure of the first network
79device.  This structure is described in the following section.
80You must provide a value for this entry since there is no default value for it.
81
82
83@item void (*bootp)(void)
84This entry should be set to @code{rtems_bsdnet_do_bootp}
85if your application will use BOOTP to obtain network configuration information.
86It should be set to @code{NULL}
87if your application does not use BOOTP.
88
89
90@item int network_task_priority
91The priority at which the network task and network device
92receive and transmit tasks will run.
93If a value of 0 is specified the tasks will run at priority 100.
94
95@item unsigned long mbuf_bytecount
96The number of bytes to allocate from the heap for use as mbufs. 
97If a value of 0 is specified, 64 kbytes will be allocated.
98
99@item unsigned long mbuf_cluster_bytecount
100The number of bytes to allocate from the heap for use as mbuf clusters. 
101If a value of 0 is specified, 128 kbytes will be allocated.
102
103@item char *hostname
104The host name of the system.
105If this, or any of the following, entries are @code{NULL} the value
106may be obtained from a BOOTP server.
107
108@item char *domainname
109The name of the Internet domain to which the system belongs.
110
111@item char *gateway
112The Internet host number of the network gateway machine,
113specified in `dotted decimal' (@code{129.128.4.1}) form.
114
115@item char *log_host
116The Internet host number of the machine to which @code{syslog} messages
117will be sent.
118
119@item char *name_server[3]
120The Internet host numbers of up to three machines to be used as
121Internet Domain Name Servers.
122
123@item int port
124The I/O port number (ex: 0x240) on which the external Ethernet
125can be accessed.
126
127@item int irno
128The interrupt number of the external Ethernet controller.
129
130@item int bpar
131The address of the shared memory on the external Ethernet controller.
132
133
134@end table
135
136@subsection Network device configuration
137Network devices are specified and configured by declaring and initializing a
138@code{struct rtems_bsdnet_ifcontig} structure for each network device.
139
140The structure entries are described in the following table.  An application
141which uses a single network interface, gets network configuration information
142from a BOOTP server, and uses the default values for all driver
143parameters needs to initialize only the first two entries in the
144structure.
145
146@table @code
147@item char *name
148The full name of the network device.  This name consists of the
149driver name and the unit number (e.g. @code{"scc1"}).
150The @code{bsp.h} include file usually defines RTEMS_BSP_NETWORK_DRIVER_NAME as
151the name of the primary (or only) network driver.
152
153@item int (*attach)(struct rtems_bsdnet_ifconfig *conf)
154The address of the driver @code{attach} function.   The network
155initialization function calls this function to configure the driver and
156attach it to the network stack.
157The @code{bsp.h} include file usually defines RTEMS_BSP_NETWORK_DRIVER_ATTACH as
158the name of the  attach function of the primary (or only) network driver.
159
160@item struct rtems_bsdnet_ifconfig *next
161A pointer to the network device configuration structure for the next network
162interface, or @code{NULL} if this is the configuration structure of the
163last network interface.
164
165@item char *ip_address
166The Internet address of the device,
167specified in `dotted decimal' (@code{129.128.4.2}) form, or @code{NULL}
168if the device configuration information is being obtained from a
169BOOTP server.
170
171@item char *ip_netmask
172The Internet inetwork mask of the device,
173specified in `dotted decimal' (@code{255.255.255.0}) form, or @code{NULL}
174if the device configuration information is being obtained from a
175BOOTP server.
176
177
178@item void *hardware_address
179The hardware address of the device, or @code{NULL} if the driver is
180to obtain the hardware address in some other way (usually  by reading
181it from the device or from the bootstrap ROM).
182
183@item int ignore_broadcast
184Zero if the device is to accept broadcast packets, non-zero if the device
185is to ignore broadcast packets.
186
187@item int mtu
188The maximum transmission unit of the device, or zero if the driver
189is to choose a default value (typically 1500 for Ethernet devices).
190
191@item int rbuf_count
192The number of receive buffers to use, or zero if the driver is to
193choose a default value
194
195@item int xbuf_count
196The number of transmit buffers to use, or zero if the driver is to
197choose a default value
198Keep in mind that some network devices may use 4 or more
199transmit descriptors for a single transmit buffer.
200
201@end table
202
203A complete network configuration specification can be as simple as the one
204shown in the following example.
205This configuration uses a single network interface, gets
206network configuration information
207from a BOOTP server, and uses the default values for all driver
208parameters.
209
210@example
211static struct rtems_bsdnet_ifconfig netdriver_config = @{
212        RTEMS_BSP_NETWORK_DRIVER_NAME,
213        RTEMS_BSP_NETWORK_DRIVER_ATTACH
214@};
215struct rtems_bsdnet_config rtems_bsdnet_config = @{
216        &netdriver_config,
217        rtems_bsdnet_do_bootp,
218@};
219@end example
220
221
222@subsection Network initialization
223The networking tasks must be started before any
224network I/O operations can be performed.  This is done by calling:
225@example
226rtems_bsdnet_initialize_network ();
227@end example
228
229This function is declared in @code{rtems/rtems_bsdnet.h}.
230
231
232
233@section Application code
234The RTEMS network package provides almost a complete set of BSD network
235services.  The network functions work like their BSD counterparts
236with the following exceptions:
237
238@itemize @bullet
239@item A given socket can be read or written by only one task at a time.
240@item There is no @code{select} function.
241@item You must call @code{openlog} before calling any of the @code{syslog} functions.
242@item @b{Some of the network functions are not thread-safe.}
243For example the following functions return a pointer to a static
244buffer which remains valid only until the next call:
245
246@table @code
247@item gethostbyaddr
248@item gethostbyname
249@item inet_ntoa
250(@code{inet_ntop} is thread-safe, though).
251@end table
252@end itemize
253
254@subsection Network Statistics
255There are a number of functions to print statistics gathered by the network stack.
256These function are declared in @code{rtems/rtems_bsdnet.h}.
257@table @code
258@item rtems_bsdnet_show_if_stats
259Display statistics gathered by network interfaces.
260
261@item rtems_bsdnet_show_ip_stats
262Display IP packet statistics.
263
264@item rtems_bsdnet_show_icmp_stats
265Display ICMP packet statistics.
266
267@item rtems_bsdnet_show_tcp_stats
268Display TCP packet statistics.
269
270@item rtems_bsdnet_show_udp_stats
271Display UDP packet statistics.
272
273@item rtems_bsdnet_show_mbuf_stats
274Display mbuf statistics.
275
276@item rtems_bsdnet_show_inet_routes
277Display the routing table.
278
279@end table
Note: See TracBrowser for help on using the repository browser.