2007年8月18日土曜日

LSRR の受信?

受信か送信かどうでも良くなってしまったが、LSRR 使えなかった原因の一つは NIC によるものだったらしい。とっても古い (らしい) 3Com の 3c905C というもので /sys/class/net/eth0/features の値は 3。意味するところは include/linux/netdevce.h から
....
#define NETIF_F_SG 1 /* Scatter/gather IO. */
#define NETIF_F_IP_CSUM 2 /* Can checksum only TCP/UDP over IPv4. */
#define NETIF_F_NO_CSUM 4 /* Does not require checksum. F.e. loopack. */
#define NETIF_F_HW_CSUM 8 /* Can checksum all the packets. */
....
boot パラメタに 3c59x.hw_checksums=0 と指定したら動いた...けど features も 0 に? scatter/gather は checksum 必須なの?

ポリシング

以前 egress も police でできるのでは? と書いて、試してみた。
# tc qdisc add dev eth1 root handle 10: prio
# tc filter add dev eth1 parent 10: protocol ip prio 20 u32 match u8 0 0 police rate 1Mbit buffer 64Kb drop flowid :1
# iperf -c toptor4
------------------------------------------------------------
Client connecting to toptor4, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 172.27.129.1 port 57260 connected with 172.27.129.2 port 5001
[ 3] 0.0-10.0 sec 1.26 MBytes 1.05 Mbits/sec
それなり。ingress も同様で burst の値でだいぶ変わるけど、まぁそれなり....
あと flowid :1 も ingress 同様どうでも良いのか?

2007年8月15日水曜日

lguest のネットワーク

(ユーザスペースの) lguest のオプションは、何も指定しないと
lguest: Usage: lguest [--verbose] [--sharenet=<filename>|--tunnet=(<ipaddr>|bridge:<bridgename>)
|--block=<filename>|--initrd=<filename>]...
<mem-in-mb> vmlinux [args...]
となる。この内ネットワークに関する部分は
--sharenet=<filename>
どうもゲスト間のインターフェース。ファイル名だし

--tunnet
TUN/TAPを使う。TUN と TAP って linux で区別されているのか知らない...
<ipaddr>
よくある? peer to peer のインターフェース。試していないが一番てっとり早いと思われる

bridge:<bridgename>
これが本題。README にはホストと同じセグメントにすべく例があるけど、別共有ネットワークも簡単に作れる。当初個々ゲストに上の ipaddr を指定して、後で tap# をブリッジに加えてあげれば良いかな。と考えていたが、良く考えてくれてあってブリッジだけ作っておけば、勝手に tap# 作って加えてくれる。
なので conntrack-tools のテストケースであればホストを A として
# brctl addbr lguest
# ... ブリッジいろいろ
# lguest 64m --block FW1.img --tunnet bridge:lgbr --sharenet ether0 --sharenet ether2 vmlinux root=/dev/lgba
# lguest 64m --block FW2.img --tunnet bridge:lgbr --sharenet ether0 --sharenet ether2 vmlinux root=/dev/lgba
# lguest 64m --block B.img --sharenet ether0 vmlinux root=/dev/lgba
でイケそうな感じ。eth0 eth2 のパケットも見たいのであれば、取り急ぎ sharenet 止めてブリッジ作ってあげれば良い?

2007年8月14日火曜日

lguest のコンソール

2.6.23-rc に入ったので lguest 再度試してみる。まだ FAQ には反映されていないけど、patch の中にこんな記述があった。
Q: Why don't I have a console when I boot my image?

A: Most images are set up to create a console virtual consoles (/dev/tty0 etc), but the lguest console is /dev/hvc0: look for a line like "1:2345:respawn:/sbin/getty 38400 tty1" in /etc/inittab and change "tty1" to o "hvc0".
debootstrap でイメージ作った後にゲストの /dev に移動して
mknod hvc0 c 229 0
上記通り inittab を書き換えて... root でログインできん。で /etc/securetty に hvc0 を追記。やっと最初の一歩。

2007年8月8日水曜日

TCP の checksum

なさけないはなしー
 /* This routine computes an IPv4 TCP checksum. */
を見付けるまでに 1時間以上。イカンですな。未だ netcat の -g 使った lsrr を動作できたりできなかったり。tcpdump の出力信じるならば checksum がおかしい。ということで追ってみたところ net/ipv4/tcp_ipv4.c::tcp_v4_send_check() にて上記コメント発見。SYN_SENT で ack を受け取った場合を追ってみると
tcp_v4_do_rcv()
>> tcp_rcv_state_process()
>>>> tcp_rcv_synsent_state_process()
>>>>>> tcp_send_ack()
>>>>>>>> tcp_transmit_skb() この中で
inet_connection_sock_af_ops ipv4_specific->send_check() が...
tcp_v4_send_check() では CHECKSUM_PARTIAL で処理分け。lwn を見ると
That value has been replaced with CHECKSUM_PARTIAL (intended for outgoing packets where the job must be completed by the hardware) and CHECKSUM_COMPLETE (for incoming packets which have been completely checksummed by the hardware).
仰しゃる通り関数名からも、送信側の話。送受信双方共にethtook -K で変更できるらしい。TCP もドライバも何でも...深いから、まだまだ時間かかるだろうなぁ。

2007年8月6日月曜日

zd1211rw のその後

2.6.22 にて 802.11 スタックが新たに追加され、以前のものを softmac とか ieee80211。新しいモノを mac80211 と呼ぶらしい。で vanilla kernel では zd1211rw は以前の ieee80211 にしか対応していない。その後は? と検索してみると、新しい zd1211rw-mac80211 なるものの開発も始まっているらしい。曰く
Although some driver-level code is still required,
it does fill in many blanks in our feature table:
it has stack-level support for master mode, ad-hoc, automatic rate adjustment, ...
でも developers only だそうで。 git 使えない...日本語の Git 入門 大変ありがたいです。今後も頑張って下さい。

libkeepalive

つらつらと web を彷徨って TLDP に行ってみたら TCP Keepalive HOWTO なる HOWTO があった。まぁ細かいとこ...と眺めていったところ libkeepalive という pre load するとレガシなアプリケーションでも keepalive 投げるようになる wrapper の紹介でした。ファイアウォールのタイムアウト値上限で悩んでいる方は良いカモ。

XORP その後

Open Tech Press に Vyatta 2.2ベータがリリース なる記事が掲載されていた。大元? の XORP 1.4 の release notes 眺めると...
ALL:
...
- Implementation of OSPFv3 (draft-ietf-ospf-ospfv3-update-14.txt).
おぉ。でも deb パッケージが無いので根性ナシはここまで