]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - doc/html/ref/devs-eth-synth-ecosynth.html
RedBoot TX53 Release 2012-02-15
[karo-tx-redboot.git] / doc / html / ref / devs-eth-synth-ecosynth.html
1 <!-- Copyright (C) 2003 Red Hat, Inc.                                -->
2 <!-- This material may be distributed only subject to the terms      -->
3 <!-- and conditions set forth in the Open Publication License, v1.0  -->
4 <!-- or later (the latest version is presently available at          -->
5 <!-- http://www.opencontent.org/openpub/).                           -->
6 <!-- Distribution of the work or derivative of the work in any       -->
7 <!-- standard (paper) book form is prohibited unless prior           -->
8 <!-- permission is obtained from the copyright holder.               -->
9 <HTML
10 ><HEAD
11 ><TITLE
12 >Synthetic Target Ethernet Driver</TITLE
13 ><meta name="MSSmartTagsPreventParsing" content="TRUE">
14 <META
15 NAME="GENERATOR"
16 CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
17 "><LINK
18 REL="HOME"
19 TITLE="eCos Reference Manual"
20 HREF="ecos-ref.html"><LINK
21 REL="UP"
22 TITLE="Synthetic Target Ethernet Driver"
23 HREF="devs-eth-synth-ecosynth-ref.html"><LINK
24 REL="PREVIOUS"
25 TITLE="Synthetic Target Ethernet Driver"
26 HREF="devs-eth-synth-ecosynth-ref.html"><LINK
27 REL="NEXT"
28 TITLE="Synthetic Target Watchdog Device"
29 HREF="devs-watchdog-synth-ref.html"></HEAD
30 ><BODY
31 CLASS="REFENTRY"
32 BGCOLOR="#FFFFFF"
33 TEXT="#000000"
34 LINK="#0000FF"
35 VLINK="#840084"
36 ALINK="#0000FF"
37 ><DIV
38 CLASS="NAVHEADER"
39 ><TABLE
40 SUMMARY="Header navigation table"
41 WIDTH="100%"
42 BORDER="0"
43 CELLPADDING="0"
44 CELLSPACING="0"
45 ><TR
46 ><TH
47 COLSPAN="3"
48 ALIGN="center"
49 >eCos Reference Manual</TH
50 ></TR
51 ><TR
52 ><TD
53 WIDTH="10%"
54 ALIGN="left"
55 VALIGN="bottom"
56 ><A
57 HREF="devs-eth-synth-ecosynth-ref.html"
58 ACCESSKEY="P"
59 >Prev</A
60 ></TD
61 ><TD
62 WIDTH="80%"
63 ALIGN="center"
64 VALIGN="bottom"
65 ></TD
66 ><TD
67 WIDTH="10%"
68 ALIGN="right"
69 VALIGN="bottom"
70 ><A
71 HREF="devs-watchdog-synth-ref.html"
72 ACCESSKEY="N"
73 >Next</A
74 ></TD
75 ></TR
76 ></TABLE
77 ><HR
78 ALIGN="LEFT"
79 WIDTH="100%"></DIV
80 ><H1
81 ><A
82 NAME="DEVS-ETH-SYNTH-ECOSYNTH">Synthetic Target Ethernet Driver</H1
83 ><DIV
84 CLASS="REFNAMEDIV"
85 ><A
86 NAME="AEN18897"
87 ></A
88 ><H2
89 >Name</H2
90 >Synthetic Target Ethernet Support&nbsp;--&nbsp;Allow synthetic target applications to perform ethernet I/O</DIV
91 ><DIV
92 CLASS="REFSECT1"
93 ><A
94 NAME="AEN18900"
95 ></A
96 ><H2
97 >Overview</H2
98 ><P
99 >The synthetic target ethernet package can provide up to four network
100 devices, <TT
101 CLASS="VARNAME"
102 >eth0</TT
103 > to <TT
104 CLASS="VARNAME"
105 >eth3</TT
106 >. These can
107 be used directly by the eCos application or, more commonly, by a
108 TCP/IP stack that is linked with the eCos application. Each eCos
109 device can be mapped on to a real Linux network device. For example,
110 if the Linux PC has two ethernet cards and <TT
111 CLASS="VARNAME"
112 >eth1</TT
113 > is
114 not currently being used by Linux itself, then one of the eCos devices
115 can be mapped on to this Linux device. Alternatively, it is possible
116 to map some or all of the eCos devices on to the ethertap support
117 provided by the Linux kernel.
118     </P
119 ><P
120 >The ethernet package depends on the I/O auxiliary provided by the
121 synthetic target architectural HAL package. During initialization the
122 eCos application will attempt to instantiate the desired devices, by
123 sending a request to the auxiliary. This will load a Tcl script
124 <TT
125 CLASS="FILENAME"
126 >ethernet.tcl</TT
127 > that is responsible for handling the
128 instantiation request and subsequent I/O operations, for example
129 transmitting an ethernet packet. However, some of the low-level I/O
130 operations cannot conveniently be done by a Tcl script so
131 <TT
132 CLASS="FILENAME"
133 >ethernet.tcl</TT
134 > will actually run a separate program
135 <B
136 CLASS="COMMAND"
137 >rawether</B
138 > to interact with the Linux network device. 
139     </P
140 ><DIV
141 CLASS="INFORMALFIGURE"
142 ><A
143 NAME="AEN18910"><P
144 ></P
145 ><DIV
146 CLASS="MEDIAOBJECT"
147 ><P
148 ><IMG
149 SRC="overview.png"
150 ALIGN="CENTER"></P
151 ></DIV
152 ><P
153 ></P
154 ></DIV
155 ><P
156 >On the target-side there are configuration options to control which
157 network devices should be present. For many applications a single
158 device will be sufficient, but if the final eCos application is
159 something like a network bridge then the package can support multiple
160 devices. On the host-side each eCos network device needs to be mapped
161 on to a Linux one, either a real ethernet device or an ethertap
162 device. This is handled by an entry in the target definition file:
163     </P
164 ><TABLE
165 BORDER="5"
166 BGCOLOR="#E0E0F0"
167 WIDTH="70%"
168 ><TR
169 ><TD
170 ><PRE
171 CLASS="PROGRAMLISTING"
172 >synth_device ethernet {
173     eth0 real eth1
174     eth1 ethertap tap3 00:01:02:03:FE:05
175     &#8230;
176 }</PRE
177 ></TD
178 ></TR
179 ></TABLE
180 ><P
181 >The ethernet package also comes with support for packet logging,
182 and provides various facilities for use by user Tcl scripts.
183     </P
184 ></DIV
185 ><DIV
186 CLASS="REFSECT1"
187 ><A
188 NAME="DEVS-ETH-ECOSYNTH-INSTALL"
189 ></A
190 ><H2
191 >Installation</H2
192 ><P
193 >Before a synthetic target eCos application can access ethernet devices
194 it is necessary to build and install host-side support. The relevant
195 code resides in the <TT
196 CLASS="FILENAME"
197 >host</TT
198 >
199 subdirectory of the synthetic target ethernet package, and building it
200 involves the standard <B
201 CLASS="COMMAND"
202 >configure</B
203 >,
204 <B
205 CLASS="COMMAND"
206 >make</B
207 > and <B
208 CLASS="COMMAND"
209 >make install</B
210 > steps.
211 The build involves a new executable <B
212 CLASS="COMMAND"
213 >rawether</B
214 > which
215 must be able to access a raw Linux network device. This is achieved by
216 installing it suid root, so the <B
217 CLASS="COMMAND"
218 >make install</B
219 > step
220 has to be run with superuser privileges.
221     </P
222 ><DIV
223 CLASS="CAUTION"
224 ><P
225 ></P
226 ><TABLE
227 CLASS="CAUTION"
228 BORDER="1"
229 WIDTH="100%"
230 ><TR
231 ><TD
232 ALIGN="CENTER"
233 ><B
234 >Caution</B
235 ></TD
236 ></TR
237 ><TR
238 ><TD
239 ALIGN="LEFT"
240 ><P
241 >Installing <B
242 CLASS="COMMAND"
243 >rawether</B
244 > suid root introduces a
245 potential security problem. Although normally
246 <B
247 CLASS="COMMAND"
248 >rawether</B
249 > is executed only by the I/O auxiliary,
250 theoretically it can be run by any program. Effectively it gives any
251 user the ability to monitor all ethernet traffic and to inject
252 arbitrary packets into the network. Also, as with any suid root
253 programs there may be as yet undiscovered exploits. Users and system
254 administrators should consider the risks before running <B
255 CLASS="COMMAND"
256 >make
257 install</B
258 >. 
259     </P
260 ></TD
261 ></TR
262 ></TABLE
263 ></DIV
264 ><P
265 >There are two main ways of building the host-side software. It is
266 possible to build both the generic host-side software and all
267 package-specific host-side software, including the ethernet support,
268 in a single build tree. This involves using the
269 <B
270 CLASS="COMMAND"
271 >configure</B
272 > script at the toplevel of the eCos
273 repository. For more information on this, see the
274 <TT
275 CLASS="FILENAME"
276 >README.host</TT
277 > file at the top of the repository.
278 Note that if you have an existing build tree which does not include
279 the synthetic target ethernet support then it will be necessary to
280 rerun the toplevel configure script: the search for appropriate
281 packages happens at configure time.
282     </P
283 ><P
284 >The alternative is to build just the host-side for this package.
285 This requires a separate build directory, building directly in the
286 source tree is disallowed. The <B
287 CLASS="COMMAND"
288 >configure</B
289 > options
290 are much the same as for a build from the toplevel, and the
291 <TT
292 CLASS="FILENAME"
293 >README.host</TT
294 > file can be consulted for more
295 details. It is essential that the ethernet support be configured with
296 the same <TT
297 CLASS="OPTION"
298 >--prefix</TT
299 > option as other eCos host-side
300 software, especially the I/O auxiliary provided by the architectural
301 synthetic target HAL package, otherwise the I/O auxiliary will be
302 unable to locate the ethernet support.
303     </P
304 ></DIV
305 ><DIV
306 CLASS="REFSECT1"
307 ><A
308 NAME="DEVS-ETH-ECOSYNTH-OPTIONS"
309 ></A
310 ><H2
311 >Target-side Configuration Options</H2
312 ><P
313 >The target-side code can be configured to support up to four ethernet
314 devices, <TT
315 CLASS="VARNAME"
316 >eth0</TT
317 > to <TT
318 CLASS="VARNAME"
319 >eth3</TT
320 >. By
321 default <TT
322 CLASS="VARNAME"
323 >eth0</TT
324 > is enabled if the configuration
325 includes a TCP/IP stack, otherwise it is disabled. The other three
326 devices are always disabled by default. If any of the devices are
327 enabled then there will also be the usual configuration options
328 related to building this package. Other options related to network
329 devices, for example whether or not to use DHCP, are provided by
330 the generic network device package.
331     </P
332 ></DIV
333 ><DIV
334 CLASS="REFSECT1"
335 ><A
336 NAME="DEVS-ETH-ECOSYNTH-REAL"
337 ></A
338 ><H2
339 >Real Ethernet</H2
340 ><P
341 >One obvious way of providing a synthetic target eCos application with
342 ethernet I/O is to use a real ethernet device in the PC: transmitted
343 packets go out on a real network, and packets on the network addressed
344 to the right MAC address are passed on to eCos. This way synthetic
345 target networking behaves just like networking on a real target with
346 ethernet hardware. For example, if there is a DHCP server anywhere on
347 the network then eCos will be able to contact it during networking
348 startup and get hold of IP address information.
349     </P
350 ><P
351 >Configuring the ethernet support to use a real ethernet device
352 requires a simple entry in the target definition file:
353     </P
354 ><TABLE
355 BORDER="5"
356 BGCOLOR="#E0E0F0"
357 WIDTH="70%"
358 ><TR
359 ><TD
360 ><PRE
361 CLASS="PROGRAMLISTING"
362 >synth_device ethernet {
363     &lt;eCos device&gt; real &lt;linux device&gt;
364     &#8230;
365 }</PRE
366 ></TD
367 ></TR
368 ></TABLE
369 ><P
370 >For example, to map the eCos network device <TT
371 CLASS="VARNAME"
372 >eth0</TT
373 > to
374 the Linux device <TT
375 CLASS="VARNAME"
376 >eth1</TT
377 >:
378     </P
379 ><TABLE
380 BORDER="5"
381 BGCOLOR="#E0E0F0"
382 WIDTH="70%"
383 ><TR
384 ><TD
385 ><PRE
386 CLASS="PROGRAMLISTING"
387 >synth_device ethernet {
388     eth0 real eth1
389     &#8230;
390 }</PRE
391 ></TD
392 ></TR
393 ></TABLE
394 ><P
395 >It is not possible for an ethernet device to be shared by both the
396 eCos TCP/IP stack and the Linux one: there would be no simple way to
397 work out which stack incoming packets are intended for. In theory
398 it might be possible to do some demultiplexing using distinct IP
399 addresses, but it would be impossible to support some functionality
400 such as DHCP. Therefore the <B
401 CLASS="COMMAND"
402 >rawether</B
403 > program will
404 refuse to access any ethernet device already in use. On a typical
405 Linux system <TT
406 CLASS="VARNAME"
407 >eth0</TT
408 > will be used for Linux
409 networking, and the PC will have to be equipped with additional
410 ethernet devices for use by eCos.
411     </P
412 ><P
413 >The <B
414 CLASS="COMMAND"
415 >rawether</B
416 > program will access the hardware via
417 the appropriate Linux device driver, so it is important that the
418 system is set up such that the relevant module will be automatically
419 loaded or is already loaded. The details of this will depend on the
420 installed distribution and version, but typically it will involve an
421 entry in <TT
422 CLASS="FILENAME"
423 >/etc/modules.conf</TT
424 >.
425     </P
426 ></DIV
427 ><DIV
428 CLASS="REFSECT1"
429 ><A
430 NAME="DEVS-ETH-ECOSYNTH-ETHERTAP"
431 ></A
432 ><H2
433 >Ethertap</H2
434 ><P
435 >The Linux kernel's ethertap facility provides a virtual network
436 interface. A Linux application, for example the
437 <B
438 CLASS="COMMAND"
439 >rawether</B
440 > program, can open a special character
441 device <TT
442 CLASS="FILENAME"
443 >/dev/net/tun</TT
444 >, perform various
445 <TT
446 CLASS="FUNCTION"
447 >ioctl</TT
448 > calls, and then <TT
449 CLASS="FILENAME"
450 >write</TT
451 >
452 and <TT
453 CLASS="FILENAME"
454 >read</TT
455 > ethernet packets. When the device is
456 opened the Linux kernel automatically creates a new network interface,
457 for example <TT
458 CLASS="VARNAME"
459 >tap0</TT
460 >. The Linux TCP/IP stack can be
461 made to use this network interface like any other interface, receiving
462 and transmitting ethernet packets. The net effect is a virtual network
463 connecting just the Linux and eCos TCP/IP stacks, with no other nodes
464 attached. By default all traffic remains inside this virtual network
465 and is never forwarded to a real network.
466     </P
467 ><P
468 >Support for the ethertap facility may or may not be provided
469 automatically, depending on your Linux distribution and version. If
470 your system does not have a device <TT
471 CLASS="FILENAME"
472 >/dev/net/tun</TT
473 >
474 or a module <TT
475 CLASS="FILENAME"
476 >tun.o</TT
477 > then the appropriate kernel
478 documentation should be consulted, for example
479 <TT
480 CLASS="FILENAME"
481 >/usr/src/linux-2.4/Documentation/networking/tuntap.txt</TT
482 >.
483 If you are using an old Linux kernel then the ethertap functionality
484 may be missing completely. When the <B
485 CLASS="COMMAND"
486 >rawether</B
487 >
488 program is configured and built, the <B
489 CLASS="COMMAND"
490 >configure</B
491 >
492 script will check for a file <TT
493 CLASS="FILENAME"
494 >/usr/include/linux/if_tun.h</TT
495 >. If that
496 file is missing then <B
497 CLASS="COMMAND"
498 >rawether</B
499 > will be built without
500 ethertap functionality, and only real ethernet interfaces will be
501 supported.
502     </P
503 ><P
504 >The target definition file is used to map eCos network devices on to
505 ethertap devices. The simplest usage is:
506     </P
507 ><TABLE
508 BORDER="5"
509 BGCOLOR="#E0E0F0"
510 WIDTH="70%"
511 ><TR
512 ><TD
513 ><PRE
514 CLASS="PROGRAMLISTING"
515 >synth_device ethernet {
516     eth0 ethertap
517     &#8230;
518 }</PRE
519 ></TD
520 ></TR
521 ></TABLE
522 ><P
523 >The Linux kernel will automatically allocate the next available tap
524 network interface. Usually this will be <TT
525 CLASS="VARNAME"
526 >tap0</TT
527 > but if
528 other software is using the ethertap facility, for example to
529 implement a VPN, then a different number may be allocated. Usually it
530 will be better to specify the particular tap device that should be
531 used for each eCos device, for example:
532     </P
533 ><TABLE
534 BORDER="5"
535 BGCOLOR="#E0E0F0"
536 WIDTH="70%"
537 ><TR
538 ><TD
539 ><PRE
540 CLASS="PROGRAMLISTING"
541 >synth_device ethernet {
542     eth0 ethertap tap3
543     eth1 ethertap tap4
544     &#8230;
545 }</PRE
546 ></TD
547 ></TR
548 ></TABLE
549 ><P
550 >The user now knows exactly which eCos device is mapped onto which
551 Linux device, avoiding much potential confusion. Because the virtual
552 devices are emulated ethernet devices, they require MAC addresses.
553 There is no physical hardware to provide these addresses, so normally
554 MAC addresses will be invented. That means that each time the eCos
555 application is run it will have different MAC addresses, which makes
556 it more difficult to compare the results of different runs. To get
557 more deterministic behaviour it is possible to specify the MAC
558 addresses in the target definition file:
559     </P
560 ><TABLE
561 BORDER="5"
562 BGCOLOR="#E0E0F0"
563 WIDTH="70%"
564 ><TR
565 ><TD
566 ><PRE
567 CLASS="PROGRAMLISTING"
568 >synth_device ethernet {
569     eth0 ethertap tap3 00:01:02:03:FE:05
570     eth1 ethertap tap4 00:01:02:03:FE:06
571     &#8230;
572 }</PRE
573 ></TD
574 ></TR
575 ></TABLE
576 ><P
577 >During the initialization phase the eCos application will instantiate
578 the various network devices. This will cause the I/O auxiliary to load
579 the <TT
580 CLASS="FILENAME"
581 >ethernet.tcl</TT
582 > script and spawn
583 <B
584 CLASS="COMMAND"
585 >rawether</B
586 > processes, which in turn will
587 <TT
588 CLASS="FUNCTION"
589 >open</TT
590 > <TT
591 CLASS="FILENAME"
592 >/dev/net/tun</TT
593 > and
594 perform the appropriate <TT
595 CLASS="FILENAME"
596 >ioctl</TT
597 > calls. On the Linux
598 side there will now be new network interfaces such as
599 <TT
600 CLASS="VARNAME"
601 >tap3</TT
602 >, and these can be configured like any other
603 network interface using commands such as <B
604 CLASS="COMMAND"
605 >ifconfig</B
606 >.
607 In addition, if the Linux system is set up with hotplug support then
608 it may be possible to arrange for the network interface to become
609 active automatically. On a Red Hat Linux system this would require
610 files such as
611 <TT
612 CLASS="FILENAME"
613 >/etc/sysconfig/network-scripts/ifcfg-tap3</TT
614 >,
615 containing data like:
616     </P
617 ><TABLE
618 BORDER="5"
619 BGCOLOR="#E0E0F0"
620 WIDTH="70%"
621 ><TR
622 ><TD
623 ><PRE
624 CLASS="PROGRAMLISTING"
625 >DEVICE="tap3"
626 BOOTPROTO="none"
627 BROADCAST=10.2.2.255
628 IPADDR="10.2.2.1"
629 NETMASK="255.255.255.0"
630 NETWORK=10.2.2.0
631 ONBOOT="no"</PRE
632 ></TD
633 ></TR
634 ></TABLE
635 ><P
636 >This gives the Linux interface the address <TT
637 CLASS="LITERAL"
638 >10.2.2.1</TT
639 >
640 on the network <TT
641 CLASS="LITERAL"
642 >10.2.2.0</TT
643 >. The eCos network device
644 should be configured with a compatible address. One way of doing this
645 would be to enable <TT
646 CLASS="VARNAME"
647 >CYGHWR_NET_DRIVER_ETH0_ADDRS</TT
648 >,
649 set <TT
650 CLASS="VARNAME"
651 >CYGHWR_NET_DRIVER_ETH0_ADDRS_IP</TT
652 > to
653 <TT
654 CLASS="LITERAL"
655 >10.2.2.2</TT
656 >, and similarly update the
657 <TT
658 CLASS="VARNAME"
659 >NETMASK</TT
660 >, <TT
661 CLASS="VARNAME"
662 >BROADCAST</TT
663 >,
664 <TT
665 CLASS="VARNAME"
666 >GATEWAY</TT
667 > and <TT
668 CLASS="VARNAME"
669 >SERVER</TT
670 > configuration
671 options. 
672     </P
673 ><P
674 >It should be noted that the ethertap facility provides a virtual
675 network, and any packets transmitted by the eCos application will
676 not appear on a real network. Therefore usually there will no
677 accessible DHCP server, and eCos cannot use DHCP or BOOTP to obtain IP
678 address information. Instead the eCos configuration should use manual
679 or static addresses.
680     </P
681 ><P
682 >An alternative approach would be to set up the Linux box as a network
683 bridge, using commands like <B
684 CLASS="COMMAND"
685 >brctl</B
686 > to connect the
687 virtual network interface <TT
688 CLASS="VARNAME"
689 >tap3</TT
690 > to a physical
691 network interface such as <TT
692 CLASS="VARNAME"
693 >eth0</TT
694 >. Any packets sent by
695 the eCos application will get forwarded automatically to the real
696 network, and some packets on the real network will get forwarded over
697 the virtual network to the eCos application. Note that the eCos
698 application might also get some packets that were not intended for it,
699 but usually those will just be discarded by the eCos TCP/IP stack. The
700 exact details of setting up a network bridge are left as an exercise
701 to the reader.
702     </P
703 ></DIV
704 ><DIV
705 CLASS="REFSECT1"
706 ><A
707 NAME="DEVS-ETH-ECOSYNTH-LOGGING"
708 ></A
709 ><H2
710 >Packet Logging</H2
711 ><P
712 >The ethernet support comes with support for logging the various
713 packets that are transferred, including a simple protocol analyser.
714 This generates simple text output using the filter mechanisms provided
715 by the I/O auxiliary, so it is possible to control the appearance and
716 visibility of different types of output. For example the user might
717 want to see IPv4 headers and all ICMPv4 and ARP operations, but not
718 TCP headers or any of the packet data.
719     </P
720 ><P
721 >The protocol analyser is not intended to be a fully functional
722 analyser with knowledge of many different TCP/IP protocols, advanced
723 search facilities, graphical traffic displays, and so on.
724 Functionality like that is already provided by other tools such as
725 <SPAN
726 CLASS="APPLICATION"
727 >ethereal</SPAN
728 > and
729 <SPAN
730 CLASS="APPLICATION"
731 >tcpdump</SPAN
732 >. Achieving similar levels of
733 functionality would require a lot of work, for very little gain. It is
734 still useful to have some protocol analysis functionality available
735 because the output will be interleaved with other output, for example
736 <TT
737 CLASS="FILENAME"
738 >printf</TT
739 > calls from the application. That may make
740 it easier to understand the sequence of events.
741     </P
742 ><P
743 >One problem with logging ethernet traffic is that it can involve very
744 large amounts of data. If the application is expected to run for a
745 long time or is very I/O intensive then it is easy to end up with many
746 megabytes. When running in graphical mode all the logging data will be
747 held in memory, even data that is not currently visible. At some point
748 the system will begin to run low on memory and performance will
749 suffer. To avoid problems, the ethernet script maintains a flag that
750 controls whether or not packet logging is active. The default is to
751 run with logging disabled, but this can be changed in the target
752 definition file:
753     </P
754 ><TABLE
755 BORDER="5"
756 BGCOLOR="#E0E0F0"
757 WIDTH="70%"
758 ><TR
759 ><TD
760 ><PRE
761 CLASS="PROGRAMLISTING"
762 >synth_device ethernet {
763     &#8230;
764     logging 1
765 }</PRE
766 ></TD
767 ></TR
768 ></TABLE
769 ><P
770 >The ethernet script will add a toolbar button that allows this flag to
771 be changed at run-time, allowing the user to capture traffic for
772 certain periods of time while the application continues running.
773     </P
774 ><P
775 >The target definition file can contain the following entries for the
776 various packet logging filters:
777     </P
778 ><TABLE
779 BORDER="5"
780 BGCOLOR="#E0E0F0"
781 WIDTH="70%"
782 ><TR
783 ><TD
784 ><PRE
785 CLASS="PROGRAMLISTING"
786 >synth_device ethernet {
787     &#8230;
788     filter ether  -hide 0 -background LightBlue -foreground "#000080"
789     filter arp    -hide 0 -background LightBlue -foreground "#000050"
790     filter ipv4   -hide 0 -background LightBlue -foreground "#000040"
791     filter ipv6   -hide 1 -background LightBlue -foreground "#000040"
792     filter icmpv4 -hide 0 -background LightBlue -foreground "#000070"
793     filter icmpv6 -hide 1 -background LightBlue -foreground "#000070"
794     filter udp    -hide 0 -background LightBlue -foreground "#000030"
795     filter tcp    -hide 0 -background LightBlue -foreground "#000020"
796     filter hexdata   -hide 1 -background LightBlue -foreground "#000080"
797     filter asciidata -hide 1 -background LightBlue -foreground "#000080"
798 }</PRE
799 ></TD
800 ></TR
801 ></TABLE
802 ><P
803 >All output will show the eCos network device, for example
804 <TT
805 CLASS="LITERAL"
806 >eth0</TT
807 >, and the direction relative to the eCos
808 application. Some of the filters will show packet headers, for example
809 <TT
810 CLASS="LITERAL"
811 >ether</TT
812 > gives details of the ethernet packet header
813 and <TT
814 CLASS="LITERAL"
815 >tcp</TT
816 > gives information about TCP headers such as
817 whether or not the SYN flag is set. The TCP and UDP filters will also
818 show source and destination addresses, using numerical addresses and
819 if possible host names. However, host names will only be shown if the
820 host appears in <TT
821 CLASS="FILENAME"
822 >/etc/hosts</TT
823 >: doing full DNS
824 lookups while the data is being captured would add significantly to
825 complexity and overhead. The <TT
826 CLASS="LITERAL"
827 >hexdata</TT
828 > and
829 <TT
830 CLASS="LITERAL"
831 >asciidata</TT
832 > filters show the remainder of the packets
833 after the ethernet, IP and TCP or UDP headers have been stripped.
834     </P
835 ><P
836 >Some of the filters will provide raw dumps of some of the packet data.
837 Showing up to 1500 bytes of data for each packet would be expensive,
838 and often the most interesting information is near the start of the
839 packet. Therefore it is possible to set a limit on the number of bytes
840 that will be shown using the target definition file. The default limit
841 is 64 bytes.
842     </P
843 ><TABLE
844 BORDER="5"
845 BGCOLOR="#E0E0F0"
846 WIDTH="70%"
847 ><TR
848 ><TD
849 ><PRE
850 CLASS="PROGRAMLISTING"
851 >synth_device ethernet {
852     &#8230;
853     max_show 128
854 }</PRE
855 ></TD
856 ></TR
857 ></TABLE
858 ></DIV
859 ><DIV
860 CLASS="REFSECT1"
861 ><A
862 NAME="DEVS-ETH-ECOSYNTH-GUI"
863 ></A
864 ><H2
865 >User Interface Additions</H2
866 ><P
867 >When running in graphical mode the ethernet script extends the user
868 interface in two ways: a button is added to the toolbar so that users
869 can enable or disable packet logging; and an entry is added to the
870 <SPAN
871 CLASS="GUIMENU"
872 >Help</SPAN
873 > menu for the ethernet-specific documentation.
874     </P
875 ></DIV
876 ><DIV
877 CLASS="REFSECT1"
878 ><A
879 NAME="DEVS-ETH-ECOSYNTH-ARGS"
880 ></A
881 ><H2
882 >Command Line Arguments</H2
883 ><P
884 >The synthetic target ethernet support does not use any command line
885 arguments. All configuration is handled through the target definition
886 file. 
887     </P
888 ></DIV
889 ><DIV
890 CLASS="REFSECT1"
891 ><A
892 NAME="DEVS-ETH-ECOSYNTH-HOOKS"
893 ></A
894 ><H2
895 >Hooks</H2
896 ><P
897 >The ethernet support defines two hooks that can be used by other
898 scripts, especially user scripts: <TT
899 CLASS="LITERAL"
900 >ethernet_tx</TT
901 > and
902 <TT
903 CLASS="LITERAL"
904 >ethernet_rx</TT
905 >. The tx hook is called whenever eCos
906 tries to transmit a packet. The rx hook is called whenever an incoming
907 packet is passed to the eCos application. Note that this may be a
908 little bit after the packet was actually received by the I/O auxiliary
909 since it can buffer some packets. Both hooks are called with two
910 arguments, the name of the network device and the packet being
911 transferred. Typical usage might look like:
912     </P
913 ><TABLE
914 BORDER="5"
915 BGCOLOR="#E0E0F0"
916 WIDTH="70%"
917 ><TR
918 ><TD
919 ><PRE
920 CLASS="PROGRAMLISTING"
921 >  proc my_tx_hook { arg_list } {
922     set dev [lindex $arg_list 0]
923     incr ::my_ethernet_tx_packets($dev)
924     incr ::my_ethernet_tx_bytes($dev) [string length [lindex $arg_list 1]]
925   }
926   proc my_rx_hook { arg_list } {
927     set dev [lindex $arg_list 0]
928     incr ::my_ethernet_rx_packets($dev)
929     incr ::my_ethernet_rx_bytes($dev) [string length [lindex $arg_list 1]]
930   }
931   synth::hook_add "ethernet_tx" my_tx_hook
932   synth::hook_add "ethernet_rx" my_rx_hook</PRE
933 ></TD
934 ></TR
935 ></TABLE
936 ><P
937 >The global arrays <TT
938 CLASS="VARNAME"
939 >my_ethernet_tx_packets</TT
940 > etc. will
941 now be updated whenever there is ethernet traffic. Other code,
942 probably running at regular intervals by use of the Tcl
943 <B
944 CLASS="COMMAND"
945 >after</B
946 > procedure, can then use this information to
947 update a graphical monitor of some sort.
948     </P
949 ></DIV
950 ><DIV
951 CLASS="REFSECT1"
952 ><A
953 NAME="DEVS-ETH-ECOSYNTH-TCL"
954 ></A
955 ><H2
956 >Additional Tcl Procedures</H2
957 ><P
958 >The ethernet support provides one additional Tcl procedure that can be
959 used by other scripts;
960     </P
961 ><TABLE
962 BORDER="5"
963 BGCOLOR="#E0E0F0"
964 WIDTH="70%"
965 ><TR
966 ><TD
967 ><PRE
968 CLASS="PROGRAMLISTING"
969 >ethernet::devices_get_list    </PRE
970 ></TD
971 ></TR
972 ></TABLE
973 ><P
974 >This procedure returns a list of the ethernet devices that have been
975 instantiated, for example <TT
976 CLASS="LITERAL"
977 >{eth0 eth1}</TT
978 >.
979     </P
980 ></DIV
981 ><DIV
982 CLASS="NAVFOOTER"
983 ><HR
984 ALIGN="LEFT"
985 WIDTH="100%"><TABLE
986 SUMMARY="Footer navigation table"
987 WIDTH="100%"
988 BORDER="0"
989 CELLPADDING="0"
990 CELLSPACING="0"
991 ><TR
992 ><TD
993 WIDTH="33%"
994 ALIGN="left"
995 VALIGN="top"
996 ><A
997 HREF="devs-eth-synth-ecosynth-ref.html"
998 ACCESSKEY="P"
999 >Prev</A
1000 ></TD
1001 ><TD
1002 WIDTH="34%"
1003 ALIGN="center"
1004 VALIGN="top"
1005 ><A
1006 HREF="ecos-ref.html"
1007 ACCESSKEY="H"
1008 >Home</A
1009 ></TD
1010 ><TD
1011 WIDTH="33%"
1012 ALIGN="right"
1013 VALIGN="top"
1014 ><A
1015 HREF="devs-watchdog-synth-ref.html"
1016 ACCESSKEY="N"
1017 >Next</A
1018 ></TD
1019 ></TR
1020 ><TR
1021 ><TD
1022 WIDTH="33%"
1023 ALIGN="left"
1024 VALIGN="top"
1025 >Synthetic Target Ethernet Driver</TD
1026 ><TD
1027 WIDTH="34%"
1028 ALIGN="center"
1029 VALIGN="top"
1030 ><A
1031 HREF="devs-eth-synth-ecosynth-ref.html"
1032 ACCESSKEY="U"
1033 >Up</A
1034 ></TD
1035 ><TD
1036 WIDTH="33%"
1037 ALIGN="right"
1038 VALIGN="top"
1039 >Synthetic Target Watchdog Device</TD
1040 ></TR
1041 ></TABLE
1042 ></DIV
1043 ></BODY
1044 ></HTML
1045 >