A RealTek Application Using our own device-driver and a

advertisement
A RealTek Application
Using our own device-driver and a
standard networking protocol to
discover the ‘active’ workstations
Our ‘rxplustx.c’ driver
my_fops
my_isr()
ioctl
my_ioctl()
open
my_open()
read
my_read()
write
my_write()
release
my_release()
init_module()
cleanup_module()
Our ‘arpquery.cpp’ program
parent-process
Opens device-file
Gets netaddress
then forks
Installs a
signal-handler
While-loop
receives
ARP replies
until signaled
child-process
For-loop
transmits
ARP request
to all stations
on local network
then signals parent
and exits
ARP request
A
B
request
C
D
E
Station ‘A’ wants to know the Ethernet Address for station ‘B’
So ‘A’ broadcasts an ARP request-packet to all other stations
ARP reply
A
B
reply
C
D
E
Station ‘B’ recognizes that the request is for its Ethernet Address.
So ‘B’ replies directly to ‘A’, and other stations ignore the request.
Format for ARP Frames
Destination MAC address
HTYPE
0x0001
PTYPE
0x0800
Source
protocol address
Source MAC address
ARP
HLEN PLEN
0x06 0x04 command
Destination
hardware address
0x0806
Source
hardware address
Destination
protocol address
Legend: ARP commands (0x0001=request, 0x0002=reply)
‘roomview.cpp’
8
9
10
15
4
5
6
7
1
2
3
16
17
18
19
11
12
13
14
20
28
29
30
24
25
26
27
21
22
23
Terminal ‘line graphics’
• Most text-mode terminals can draw ‘boxes’
by using an ‘alternate character set’ which
includes the so-called ‘line graphic’ glyphs:
Upper-Left: ┌
Upper-Right: ┐
Horizontal-bar: ─ Vertical-bar: │
Lower-left: └
Lower-right: ┘
┌───────────────┐
└───────────────┘
Uniform terminal interface
• Because terminal hardware may differ, we
need a standard software interface to get
the same desired effects on all platforms
• UNIX programming environments offer a
long-established mechanism for doing this
• Need this header-file: #include <term.h>
• Need linkage with ‘ncurses’ function-library
How ‘terminfo’ is used
• Initialize with the ‘setupterm()’ function
• Extract your terminal’s parameters (e.g.,
numbers or special control-strings) using
the functions ‘tigetnum()’ and ‘tigetstr()’
• Parametrize control-strings with ‘tparm()’
• Output these control-strings with ‘putp()’
• Our ‘roomview.cpp’ demonstrates these
Line-graphic character-codes
• Your terminal’s mapping of the numbers
for the line-graphics glyphs can be found
by a string-search of terminfo’s database
• This is illustrated in our ‘roomview’ demo
• Examples:
char
*acsc = tigetstr( “acsc” );
char
HZ = strchr( acsc, ‘q’ )[ 1 ];
char
VT = strchr( scsc, ‘x’ )[ 1 ];
Special terminal effects
• You can enable (or disable) use of glyphs from
the terminal’s alternate character set, by using
special control-sequences: ‘smacs’ and ‘rmacs’
• You can put the cursor where you want it, by
outputting a special control-sequence: ‘cup’
• You can draw characters in ‘reverse-video’, by
outputting a special control-sequence: ‘rev’
• You can draw characters in ‘normal’ mode, by
outputting a special control-sequence: ‘sgr0’
‘roomview.cpp’
8
9
10
15
4
5
6
7
1
2
3
16
17
18
19
11
12
13
14
20
28
29
30
24
25
26
27
21
22
23
In-class exercise
• Combine the programming ideas used in
‘roomview.cpp’ and ‘arpquery.cpp’ so you
get a view of all the Kudlick Classroom’s
workstations, but with those that sent ARP
reply-packets shown with ‘reverse-video’
so as to highlight their presence online
Download