[Click] Runtime errors from Kernel level roofnet config file
Juncheol Park
jcpark at cs.utah.edu
Tue May 15 16:19:43 EDT 2007
Hi all,
I'm using the latest releases of roofnet, click and madwifi-ng.
I have installed all three packages on FC4 (linux-2.6.16.13) patched
by linux-2.6.16.13-patch (under click/etc).
I've minimally updated the file, gen_config_roofnet.sh (attached here)
so that it can generate a KERNEL-level click config file as well as
a user-level config file for 802.11a.
The user-level click config seems working (not completely, I mean
sometimes too slow when pinging).
However, whenever I did "click-install" with the kernel-level click file
(also attached here),
I got the following error messages (from dmesg).
Any ideas?
$ dmesg
===========================================================
click: starting router thread pid 4671 (f756d340)
chatter: srcr2/querier :: SR2Querier: got invalid dst 0.0.0.0
chatter: srcr1/querier :: SRQuerier: got invalid dst 0.0.0.0
chatter: srcr2/querier :: SR2Querier: got invalid dst 0.0.0.0
chatter: srcr1/querier :: SRQuerier: got invalid dst 0.0.0.0
chatter: srcr2/querier :: SR2Querier: got invalid dst 0.0.0.0
chatter: srcr1/querier :: SRQuerier: got invalid dst 0.0.0.0
chatter: srcr1/querier :: SRQuerier: got invalid dst 0.0.0.0
chatter: srcr2/querier :: SR2Querier: got invalid dst 0.0.0.0
chatter: srcr1/querier :: SRQuerier: got invalid dst 0.0.0.0
chatter: srcr2/querier :: SR2Querier: got invalid dst 0.0.0.0
chatter: srcr2/querier :: SR2Querier: got invalid dst 0.0.0.0
chatter: srcr1/querier :: SRQuerier: got invalid dst 0.0.0.0
===========================================================
The following are my network setups:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
155.98.36.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 lo
5.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 srcr1
6.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 srcr2
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 ath0
0.0.0.0 155.98.36.1 0.0.0.0 UG 0 0 0 eth0
$ iwconfig ath0 (I'm using 802.11a channel 48 cell 00:00:00:00:00:11)
ath0 IEEE 802.11a ESSID:"lan0_27595"
Mode:Ad-Hoc Frequency:5.24 GHz Cell: 00:00:00:00:00:11
Bit Rate:0 kb/s Tx-Power:14 dBm Sensitivity=0/3
Retry:off RTS thr:off Fragment thr:off
Encryption key:off
Power Management:off
Link Quality=18/94 Signal level=-70 dBm Noise level=-88 dBm
Rx invalid nwid:47 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
$ ifconfig
wifi0 Link encap:UNSPEC HWaddr
00-09-5B-93-0B-14-00-00-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6733 errors:0 dropped:42 overruns:0 frame:8
TX packets:148 errors:12 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:199
RX bytes:929230 (907.4 KiB) TX bytes:64012 (62.5 KiB)
Interrupt:20
ath0 Link encap:Ethernet HWaddr 00:09:5B:93:0B:14
inet addr:10.1.1.4 Bcast:10.255.255.255 Mask:255.0.0.0
inet6 addr: fe80::209:5bff:fe93:b14/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1900 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:5
RX bytes:896 (896.0 b) TX bytes:1196 (1.1 KiB)
ath2 Link encap:UNSPEC HWaddr 06-09-5B-93-0B-14-00-00-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1900 Metric:1
RX packets:3382 errors:0 dropped:0 overruns:0 frame:0
TX packets:36 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:5
RX bytes:609880 (595.5 KiB) TX bytes:48888 (47.7 KiB)
srcr1 Link encap:Ethernet HWaddr 00:09:5B:93:0B:14
inet addr:5.147.11.20 Bcast:5.255.255.255 Mask:255.0.0.0
inet6 addr: fe80::209:5bff:fe93:b14/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:468 (468.0 b)
srcr2 Link encap:Ethernet HWaddr 00:09:5B:93:0B:14
inet addr:6.147.11.20 Bcast:6.255.255.255 Mask:255.0.0.0
inet6 addr: fe80::209:5bff:fe93:b14/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:468 (468.0 b)
#######################################################################
#### The file "gen_config_roofnet.sh" which I'm using for now.
#######################################################################
if [ $# -ne 1 ]; then
echo
echo 1>&2 Usage: $0 1, For kernel
echo 1>&2 Usage: $0 0, For userlevel
echo
exit 127
fi
KERNEL=$1
DEV="ath2"
GATEWAY="false"
if [ -f /tmp/is_gateway ]; then
GATEWAY="true"
fi
mac=$(ifconfig ath0 | sed -n 's/^.*HWaddr \([0-9A-Za-z:]*\).*/\1/p')
# I made sure this variable mac should be correctly set up for any cases.
# So sometimes I used a different way to extract mac...
# extract the bottom three octects to use as IP
hi_hex=$(echo $mac | sed -n 's/.*:.*:.*:\([0-9A-Za-z:]*\):.*:.*.*/\1/p')
mid_hex=$(echo $mac | sed -n 's/.*:.*:.*:.*:\([0-9A-Za-z:]*\):.*.*/\1/p')
lo_hex=$(echo $mac | sed -n 's/.*:.*:.*:.*:.*:\([0-9A-Za-z:]*\).*/\1/p')
hi="0x$hi_hex";
mid="0x$mid_hex";
lo="0x$lo_hex";
SUFFIX=$(printf "%d.%d.%d" $hi $mid $lo)
WIRELESS_MAC=$mac
SRCR_IP="5.$SUFFIX"
SRCR_NM="255.0.0.0"
SRCR_NET="5.0.0.0"
SRCR_BCAST="5.255.255.255"
SRCR2_IP="6.$SUFFIX"
SRCR2_NM="255.0.0.0"
SRCR2_NET="6.0.0.0"
SRCR2_BCAST="5.255.255.255"
WLANCONFIG=/usr/local/bin/wlanconfig
$WLANCONFIG $DEV destroy > /dev/null 2>&1
$WLANCONFIG $DEV create wlandev wifi0 wlanmode monitor > /dev/null
/sbin/ifconfig $DEV mtu 1900
/sbin/ifconfig $DEV txqueuelen 5
/sbin/ifconfig $DEV up
echo '804' > /proc/sys/net/$DEV/dev_type
/sbin/modprobe tun > /dev/null 2>&1
MODE="a"
# PROBES="2 60 2 1500 4 1500 11 1500 22 1500"
PROBES="12 60 12 1500 18 1500 24 1500 36 1500 48 1500 72 1500 96 1500 108
1500";
# $probes = "2 60 12 60 2 1500 4 1500 11 1500 22 1500 12 1500 18 1500
24 1500 36 1500 48 1500 72 1500 96 1500";
echo "rates :: AvailableRates(DEFAULT 12 18 24 36 48 72 96 108,
$WIRELESS_MAC 12 18 24 36 48 72 96 108);
";
SRCR_FILE="srcr.click"
if [ ! -f $SRCR_FILE ]; then
SRCR_FILE="/home/roofnet/click/conf/wifi/srcr.click"
if [ ! -f $SRCR_FILE ]; then
SRCR_FILE="/tmp/srcr.click"
if [ ! -f $SRCR_FILE ]; then
SRCR_FILE="/tmp/srcr.click"
fi
fi
fi
if [ ! -f $SRCR_FILE ]; then
echo "couldn't find srcr.click";
exit 1;
fi
cat $SRCR_FILE
if [ $KERNEL -eq 0 ]; then
echo "
control :: ControlSocket(\"TCP\", 7777);
chatter :: ChatterSocket(\"TCP\", 7778);
";
fi
echo "
// has one input and one output
// takes and spits out ip packets
elementclass LinuxHost {
\$dev, \$ip, \$nm, \$mac |
input -> ToHost(\$dev);
FromHost(\$dev, \$ip/\$nm, ETHER \$mac) -> output;
}
// has one input and one output
// takes and spits out ip packets
elementclass LinuxIPHost {
\$dev, \$ip, \$nm |
input -> KernelTun(\$ip/\$nm, MTU 1500, DEV_NAME \$dev)
-> MarkIPHeader(0)
-> CheckIPHeader(CHECKSUM false)
-> output;
}
elementclass SniffDevice {
\$device, \$promisc|
// we only want txf for NODS packets
// ether[2:2] == 0x1200 means it has an ath_rx_radiotap header (it
is 18 bytes long)
// ether[2:2] == 0x1000 means it has an ath_tx_radiotap header (it
is 16 bytes long)
// ether[18] == 0x08 means NODS
from_dev :: FromDevice(\$device,
PROMISC \$promisc)
-> output;
input -> to_dev :: ToDevice(\$device);
}
sniff_dev :: SniffDevice($DEV, false);
sched :: PrioSched()
-> set_power :: SetTXPower(POWER 60)
-> athdesc_encap :: AthdescEncap()
//-> radiotap_encap :: RadiotapEncap()
-> sniff_dev;
route_q :: FullNoteQueue(10)
-> [0] sched;
data_q :: FullNoteQueue(10)
-> data_static_rate :: SetTXRate(RATE 108)
//-> data_madwifi_rate :: MadwifiRate(OFFSET 4,
// ALT_RATE true,
// RT rates,
// ACTIVE true)
-> [1] sched;
//Idle -> [1] data_madwifi_rate;
route_encap :: WifiEncap(0x0, 00:00:00:00:00:00)
-> route_q;
data_encap :: WifiEncap(0x0, 00:00:00:00:00:00)
-> data_q;
srcr1 :: srcr_ett($SRCR_IP, $SRCR_NM, $WIRELESS_MAC, $GATEWAY,
\"$PROBES\");
";
if [ $KERNEL -eq 1 ]; then
echo "
srcr1_host :: LinuxHost(srcr1, $SRCR_IP, $SRCR_NM, $WIRELESS_MAC)
-> srcr1_cl :: IPClassifier(dst net 10.1.0.0/8, -);
";
else
echo "
srcr1_host :: LinuxIPHost(srcr1, $SRCR_IP, $SRCR_NM)
-> srcr1_cl :: IPClassifier(dst net 10.1.0.0/8, -);
";
fi
#srcr1_host :: LinuxIPHost(srcr1, $SRCR_IP, $SRCR_NM)
#-> srcr1_cl :: IPClassifier(dst net 10.0.0.0/8, -);
echo "
ap_to_srcr1 :: SRDestCache();
srcr1_cl [0] -> [0] ap_to_srcr1 [0] -> [1] srcr1;
srcr1_cl [1] -> [1] srcr1;
srcr1 [0] -> route_encap; // queries, replies
srcr1 [1] -> route_encap; // bcast_stats
srcr1 [2] -> data_encap; // data
srcr1 [3] -> srcr1_cl2 :: IPClassifier(src net 10.0.0.0/8, -); //data to
me
srcr1_cl2 [0] -> [1] ap_to_srcr1 [1] -> srcr1_host;
srcr1_cl2 [1] -> srcr1_host; // data to me
srcr2 :: sr2($SRCR2_IP, $SRCR2_NM, $WIRELESS_MAC, $GATEWAY,
\"$PROBES\");
";
#srcr2_host :: LinuxIPHost(srcr2, $SRCR2_IP, $SRCR2_NM)
#-> srcr2_cl :: IPClassifier(dst net 10.0.0.0/8, -);
if [ $KERNEL -eq 1 ]; then
echo "
srcr2_host :: LinuxHost(srcr2, $SRCR2_IP, $SRCR_NM, $WIRELESS_MAC)
-> srcr2_cl :: IPClassifier(dst net 10.1.0.0/8, -);
";
else
echo "
srcr2_host :: LinuxIPHost(srcr2, $SRCR2_IP, $SRCR_NM)
-> srcr2_cl :: IPClassifier(dst net 10.1.0.0/8, -);
"
fi
echo "
ap_to_srcr2 :: SRDestCache();
srcr2_cl [0] -> [0] ap_to_srcr2 [0] -> [1] srcr2;
srcr2_cl [1] -> [1] srcr2;
srcr2 [0] -> route_encap; // queries, replies
srcr2 [1] -> route_encap; // bcast_stats
srcr2 [2] -> data_encap; // data
srcr2 [3] -> srcr2_cl2 :: IPClassifier(src net 10.0.0.0/8, -); //data to
me
srcr2_cl2 [0] -> [1] ap_to_srcr2 [1] -> srcr2_host;
srcr2_cl2 [1] -> srcr2_host; // data to me
sniff_dev
-> athdesc_decap :: AthdescDecap()
-> phyerr_filter :: FilterPhyErr()
-> Classifier(0/08%0c) //data
-> tx_filter :: FilterTX()
-> dupe :: WifiDupeFilter()
-> WifiDecap()
-> HostEtherFilter($WIRELESS_MAC, DROP_OTHER true, DROP_OWN true)
-> ncl :: Classifier(12/09??, 12/06??);
ncl[0] -> srcr1;
ncl[1] -> srcr2;
tx_filter[1] -> Discard;
//tx_filter [1] -> [1] data_madwifi_rate;
";
#######################################################################
#### The file "kernel_level.click" generated by "gen_config_roofnet.sh".
#######################################################################
rates :: AvailableRates(DEFAULT 12 18 24 36 48 72 96 108,
00:09:5B:93:0B:14 12 18 24 36 48 72 96 108);
elementclass srcr_ett {
$srcr_ip, $srcr_nm, $wireless_mac, $gateway, $probes|
arp :: ARPTable();
lt :: LinkTable(IP $srcr_ip);
gw :: GatewaySelector(ETHTYPE 0x092c,
IP $srcr_ip,
ETH $wireless_mac,
LT lt,
ARP arp,
PERIOD 15,
GW $gateway);
gw -> SetSRChecksum -> [0] output;
set_gw :: SetGateway(SEL gw);
gw_reply :: SR1GatewayResponder(SEL gw,
ETHTYPE 0x0945,
IP $srcr_ip,
ETH $wireless_mac,
ARP arp,
DEBUG false,
LT lt,
PERIOD 15);
gw_reply -> SetSRChecksum -> [1] output;
es :: ETTStat(ETHTYPE 0x0941,
ETH $wireless_mac,
IP $srcr_ip,
PERIOD 30000,
TAU 300000,
ARP arp,
PROBES $probes,
ETT metric,
RT rates);
metric :: ETTMetric(LT lt);
forwarder :: SRForwarder(ETHTYPE 0x0943,
IP $srcr_ip,
ETH $wireless_mac,
ARP arp,
LT lt);
querier :: SRQuerier(ETH $wireless_mac,
SR forwarder,
LT lt,
ROUTE_DAMPENING true,
TIME_BEFORE_SWITCH 5,
DEBUG false);
query_forwarder :: MetricFlood(ETHTYPE 0x0944,
IP $srcr_ip,
ETH $wireless_mac,
LT lt,
ARP arp,
DEBUG false);
query_responder :: SRQueryResponder(ETHTYPE 0x0945,
IP $srcr_ip,
ETH $wireless_mac,
LT lt,
ARP arp,
DEBUG false);
query_responder -> SetSRChecksum -> [0] output;
query_forwarder -> SetSRChecksum -> [0] output;
query_forwarder [1] -> query_responder;
data_ck :: SetSRChecksum()
input [1]
-> host_cl :: IPClassifier(dst net $srcr_ip mask $srcr_nm,
-)
-> querier
-> data_ck;
host_cl [1] -> [0] set_gw [0] -> querier;
forwarder[0]
-> dt ::DecIPTTL
-> data_ck
-> [2] output;
dt[1]
-> ICMPError($srcr_ip, timeexceeded, 0)
-> querier;
// queries
querier [1] -> [1] query_forwarder;
es -> [1] output;
forwarder[1] //ip packets to me
-> StripSRHeader()
-> CheckIPHeader(CHECKSUM false)
-> from_gw_cl :: IPClassifier(src net $srcr_ip mask $srcr_nm,
-)
-> [3] output;
from_gw_cl [1] -> [1] set_gw [1] -> [3] output;
input [0]
-> ncl :: Classifier(
12/0943 , //srcr_forwarder
12/0944 , //srcr
12/0945 , //replies
12/0941 , //srcr_es
12/092c , //srcr_gw
);
ncl[0] -> CheckSRHeader() -> [0] forwarder;
ncl[1] -> CheckSRHeader() -> query_forwarder
ncl[2] -> CheckSRHeader() -> query_responder;
ncl[3] -> es;
ncl[4] -> CheckSRHeader() -> gw;
}
elementclass sr2 {
$sr2_ip, $sr2_nm, $wireless_mac, $gateway, $probes|
arp :: ARPTable();
lt :: LinkTable(IP $sr2_ip);
gw :: SR2GatewaySelector(ETHTYPE 0x062c,
IP $sr2_ip,
ETH $wireless_mac,
LT lt,
ARP arp,
PERIOD 15,
GW $gateway);
gw -> SR2SetChecksum -> [0] output;
set_gw :: SR2SetGateway(SEL gw);
es :: SR2ETTStat(ETHTYPE 0x0641,
ETH $wireless_mac,
IP $sr2_ip,
PERIOD 30000,
TAU 300000,
ARP arp,
PROBES $probes,
ETT metric,
RT rates);
metric :: SR2ETTMetric(LT lt);
forwarder :: SR2Forwarder(ETHTYPE 0x0643,
IP $sr2_ip,
ETH $wireless_mac,
ARP arp,
LT lt);
querier :: SR2Querier(ETH $wireless_mac,
SR forwarder,
LT lt,
ROUTE_DAMPENING true,
TIME_BEFORE_SWITCH 5,
DEBUG false);
query_forwarder :: SR2MetricFlood(ETHTYPE 0x0644,
IP $sr2_ip,
ETH $wireless_mac,
LT lt,
ARP arp,
DEBUG false);
query_responder :: SR2QueryResponder(ETHTYPE 0x0645,
IP $sr2_ip,
ETH $wireless_mac,
LT lt,
ARP arp,
DEBUG false);
gw_reply :: SR2GatewayResponder(SEL gw,
ETHTYPE 0x0645,
IP $sr2_ip,
ETH $wireless_mac,
ARP arp,
DEBUG false,
LT lt,
PERIOD 15);
gw_reply -> SR2SetChecksum -> [1] output;
query_responder -> SR2SetChecksum -> [0] output;
query_forwarder -> SR2SetChecksum -> [0] output;
query_forwarder [1] -> query_responder;
data_ck :: SR2SetChecksum()
input [1]
-> host_cl :: IPClassifier(dst net $sr2_ip mask $sr2_nm,
-)
-> querier
-> data_ck;
host_cl [1] -> [0] set_gw [0] -> querier;
forwarder[0]
-> dt ::DecIPTTL
-> data_ck
-> [2] output;
dt[1]
-> ICMPError($sr2_ip, timeexceeded, 0)
-> querier;
// queries
querier [1] -> [1] query_forwarder;
es -> SetTimestamp() -> [1] output;
forwarder[1] //ip packets to me
-> SR2StripHeader()
-> CheckIPHeader(CHECKSUM false)
-> from_gw_cl :: IPClassifier(src net $sr2_ip mask $sr2_nm,
-)
-> [3] output;
from_gw_cl [1] -> [1] set_gw [1] -> [3] output;
input [0]
-> ncl :: Classifier(
12/0643 , //sr2_forwarder
12/0644 , //sr2
12/0645 , //replies
12/0641 , //sr2_es
12/062c , //sr2_gw
);
ncl[0] -> SR2CheckHeader() -> [0] forwarder;
ncl[1] -> SR2CheckHeader() -> query_forwarder
ncl[2] -> SR2CheckHeader() -> query_responder;
ncl[3] -> es;
ncl[4] -> SR2CheckHeader() -> gw;
}
// has one input and one output
// takes and spits out ip packets
elementclass LinuxHost {
$dev, $ip, $nm, $mac |
input -> ToHost($dev);
FromHost($dev, $ip/$nm, ETHER $mac) -> output;
}
// has one input and one output
// takes and spits out ip packets
elementclass LinuxIPHost {
$dev, $ip, $nm |
input -> KernelTun($ip/$nm, MTU 1500, DEV_NAME $dev)
-> MarkIPHeader(0)
-> CheckIPHeader(CHECKSUM false)
-> output;
}
elementclass SniffDevice {
$device, $promisc|
// we only want txf for NODS packets
// ether[2:2] == 0x1200 means it has an ath_rx_radiotap header (it
is 18 bytes long)
// ether[2:2] == 0x1000 means it has an ath_tx_radiotap header (it
is 16 bytes long)
// ether[18] == 0x08 means NODS
from_dev :: FromDevice($device,
PROMISC $promisc)
-> output;
input -> to_dev :: ToDevice($device);
}
sniff_dev :: SniffDevice(ath2, false);
sched :: PrioSched()
-> set_power :: SetTXPower(POWER 60)
-> athdesc_encap :: AthdescEncap()
//-> radiotap_encap :: RadiotapEncap()
-> sniff_dev;
route_q :: FullNoteQueue(10)
-> [0] sched;
data_q :: FullNoteQueue(10)
-> data_static_rate :: SetTXRate(RATE 108)
//-> data_madwifi_rate :: MadwifiRate(OFFSET 4,
// ALT_RATE true,
// RT rates,
// ACTIVE true)
-> [1] sched;
//Idle -> [1] data_madwifi_rate;
route_encap :: WifiEncap(0x0, 00:00:00:00:00:00)
-> route_q;
data_encap :: WifiEncap(0x0, 00:00:00:00:00:00)
-> data_q;
srcr1 :: srcr_ett(5.147.11.20, 255.0.0.0, 00:09:5B:93:0B:14, false,
"12 60 12 1500 18 1500 24 1500 36 1500 48 1500 72 1500 96
1500 108 1500");
srcr1_host :: LinuxHost(srcr1, 5.147.11.20, 255.0.0.0, 00:09:5B:93:0B:14)
-> srcr1_cl :: IPClassifier(dst net 10.1.0.0/8, -);
ap_to_srcr1 :: SRDestCache();
srcr1_cl [0] -> [0] ap_to_srcr1 [0] -> [1] srcr1;
srcr1_cl [1] -> [1] srcr1;
srcr1 [0] -> route_encap; // queries, replies
srcr1 [1] -> route_encap; // bcast_stats
srcr1 [2] -> data_encap; // data
srcr1 [3] -> srcr1_cl2 :: IPClassifier(src net 10.0.0.0/8, -); //data to
me
srcr1_cl2 [0] -> [1] ap_to_srcr1 [1] -> srcr1_host;
srcr1_cl2 [1] -> srcr1_host; // data to me
srcr2 :: sr2(6.147.11.20, 255.0.0.0, 00:09:5B:93:0B:14, false,
"12 60 12 1500 18 1500 24 1500 36 1500 48 1500 72 1500 96
1500 108 1500");
srcr2_host :: LinuxHost(srcr2, 6.147.11.20, 255.0.0.0, 00:09:5B:93:0B:14)
-> srcr2_cl :: IPClassifier(dst net 10.1.0.0/8, -);
ap_to_srcr2 :: SRDestCache();
srcr2_cl [0] -> [0] ap_to_srcr2 [0] -> [1] srcr2;
srcr2_cl [1] -> [1] srcr2;
srcr2 [0] -> route_encap; // queries, replies
srcr2 [1] -> route_encap; // bcast_stats
srcr2 [2] -> data_encap; // data
srcr2 [3] -> srcr2_cl2 :: IPClassifier(src net 10.0.0.0/8, -); //data to
me
srcr2_cl2 [0] -> [1] ap_to_srcr2 [1] -> srcr2_host;
srcr2_cl2 [1] -> srcr2_host; // data to me
sniff_dev
-> athdesc_decap :: AthdescDecap()
-> phyerr_filter :: FilterPhyErr()
-> Classifier(0/08%0c) //data
-> tx_filter :: FilterTX()
-> dupe :: WifiDupeFilter()
-> WifiDecap()
-> HostEtherFilter(00:09:5B:93:0B:14, DROP_OTHER true, DROP_OWN true)
-> ncl :: Classifier(12/09??, 12/06??);
ncl[0] -> srcr1;
ncl[1] -> srcr2;
tx_filter[1] -> Discard;
//tx_filter [1] -> [1] data_madwifi_rate;
===================================
Juncheol Park
MEB #2172, 801-587-3977
School of Computing
University of Utah
More information about the click
mailing list