Title: A RealTek Application
1A RealTek Application
- Using our own device-driver and a standard
networking protocol to discover the active
workstations
2 Our rxplustx.c driver
my_isr()
my_fops
ioctl
my_ioctl()
open
my_open()
read
my_read()
write
my_write()
release
my_release()
init_module()
cleanup_module()
3Our arpquery.cpp program
parent-process
Opens device-file Gets netaddress then
forks Installs a signal-handler While-loop rece
ives ARP replies until signaled
child-process
For-loop transmits ARP request to all stations on
local network then signals parent and exits
4ARP 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
5 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.
6Format for ARP Frames
Source MAC address
0x0806
Destination MAC address
PTYPE 0x0800
HLEN 0x06
PLEN 0x04
ARP command
Source hardware address
HTYPE 0x0001
Source protocol address
Destination hardware address
Destination protocol address
Legend ARP commands (0x0001request,
0x0002reply)
7 roomview.cpp
8
9
10
15
16
17
18
19
20
28
29
30
4
5
6
7
11
12
13
14
24
25
26
27
1
2
3
21
22
23
8Terminal 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
- ---------------
- ---------------
9Uniform 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 ltterm.hgt
- Need linkage with ncurses function-library
10How terminfo is used
- Initialize with the setupterm() function
- Extract your terminals 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
11Line-graphic character-codes
- Your terminals mapping of the numbers for the
line-graphics glyphs can be found by a
string-search of terminfos 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
12Special terminal effects
- You can enable (or disable) use of glyphs from
the terminals 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 -
13 roomview.cpp
8
9
10
15
16
17
18
19
20
28
29
30
4
5
6
7
11
12
13
14
24
25
26
27
1
2
3
21
22
23
14In-class exercise
- Combine the programming ideas used in
roomview.cpp and arpquery.cpp so you get a
view of all the Kudlick Classrooms workstations,
but with those that sent ARP reply-packets shown
with reverse-video so as to highlight their
presence online