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

4.104.114.84.95
Last change on this file since d778b4a was d778b4a, checked in by Joel Sherrill <joel.sherrill@…>, on 09/08/98 at 13:17:08

Fixed include file path.

  • Property mode set to 100644
File size: 8.4 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 KA9Q 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@end table
124
125@subsection Network device configuration
126Network devices are specified and configured by declaring and initializing a
127@code{struct rtems_bsdnet_ifcontig} structure for each network device.
128
129The structure entries are described in the following table.  An application
130which uses a single network interface, gets network configuration information
131from a BOOTP server, and uses the default values for all driver
132parameters needs to initialize only the first two entries in the
133structure.
134
135@table @code
136@item char *name
137The full name of the network device.  This name consists of the
138driver name and the unit number (e.g. @code{"scc1"}).
139The @code{bsp.h} include file usually defines RTEMS_BSP_NETWORK_DRIVER_NAME as
140the name of the primary (or only) network driver.
141
142@item int (*attach)(struct rtems_bsdnet_ifconfig *conf)
143The address of the driver @code{attach} function.   The network
144initialization function calls this function to configure the driver and
145attach it to the network stack.
146The @code{bsp.h} include file usually defines RTEMS_BSP_NETWORK_DRIVER_ATTACH as
147the name of the  attach function of the primary (or only) network driver.
148
149@item struct rtems_bsdnet_ifconfig *next
150A pointer to the network device configuration structure for the next network
151interface, or @code{NULL} if this is the configuration structure of the
152last network interface.
153
154@item char *ip_address
155The Internet address of the device,
156specified in `dotted decimal' (@code{129.128.4.2}) form, or @code{NULL}
157if the device configuration information is being obtained from a
158BOOTP server.
159
160@item char *ip_netmask
161The Internet inetwork mask of the device,
162specified in `dotted decimal' (@code{255.255.255.0}) form, or @code{NULL}
163if the device configuration information is being obtained from a
164BOOTP server.
165
166
167@item void *hardware_address
168The hardware address of the device, or @code{NULL} if the driver is
169to obtain the hardware address in some other way (usually  by reading
170it from the device or from the bootstrap ROM).
171
172@item int ignore_broadcast
173Zero if the device is to accept broadcast packets, non-zero if the device
174is to ignore broadcast packets.
175
176@item int mtu
177The maximum transmission unit of the device, or zero if the driver
178is to choose a default value (typically 1500 for Ethernet devices).
179
180@item int rbuf_count
181The number of receive buffers to use, or zero if the driver is to
182choose a default value
183
184@item int xbuf_count
185The number of transmit buffers to use, or zero if the driver is to
186choose a default value
187Keep in mind that some network devices may use 4 or more
188transmit descriptors for a single transmit buffer.
189
190@end table
191
192A complete network configuration specification can be as simple as the one
193shown in the following example.
194This configuration uses a single network interface, gets
195network configuration information
196from a BOOTP server, and uses the default values for all driver
197parameters.
198
199@example
200static struct rtems_bsdnet_ifconfig netdriver_config = @{
201        RTEMS_BSP_NETWORK_DRIVER_NAME,
202        RTEMS_BSP_NETWORK_DRIVER_ATTACH
203@};
204struct rtems_bsdnet_config rtems_bsdnet_config = @{
205        &netdriver_config,
206        rtems_bsdnet_do_bootp,
207@};
208@end example
209
210
211@subsection Network initialization
212The networking tasks must be started before any
213network I/O operations can be performed.  This is done by calling:
214@example
215rtems_bsdnet_initialize_network ();
216@end example
217
218This function is declared in @code{rtems/rtems_bsdnet.h}.
219
220
221
222@section Application code
223The RTEMS network package provides almost a complete set of BSD network
224services.  The network functions work like their BSD counterparts
225with the following exceptions:
226
227@itemize @bullet
228@item A given socket can be read or written by only one task at a time.
229@item There is no @code{select} function.
230@item You must call @code{openlog} before calling any of the @code{syslog} functions.
231@item @b{Some of the network functions are not thread-safe.}
232For example the following functions return a pointer to a static
233buffer which remains valid only until the next call:
234
235@table @code
236@item gethostbyaddr
237@item gethostbyname
238@item inet_ntoa
239(@code{inet_ntop} is thread-safe, though).
240@end table
241@end itemize
242
243@subsection Network Statistics
244There are a number of functions to print statistics gathered by the network stack.
245These function are declared in @code{rtems/rtems_bsdnet.h}.
246@table @code
247@item rtems_bsdnet_show_if_stats
248Display statistics gathered by network interfaces.
249
250@item rtems_bsdnet_show_ip_stats
251Display IP packet statistics.
252
253@item rtems_bsdnet_show_icmp_stats
254Display ICMP packet statistics.
255
256@item rtems_bsdnet_show_tcp_stats
257Display TCP packet statistics.
258
259@item rtems_bsdnet_show_udp_stats
260Display UDP packet statistics.
261
262@item rtems_bsdnet_show_mbuf_stats
263Display mbuf statistics.
264
265@item rtems_bsdnet_show_inet_routes
266Display the routing table.
267
268@end table
Note: See TracBrowser for help on using the repository browser.