なんじゃこりゃ

tun/tap で、カーネルプロトコルスタックから tap に同時に 11 個以上のパケットが書き込まれると、先頭 10 個だけユーザーモードに届いて、11 個目以降は捨てられる。
たとえば ping で大きなメッセージを投げてみると、10Kbytes くらいまでは大丈夫だが、20Kbytes くらいになると ping が届かなくなる。
不審に思って、tap のソースコードを見てみた。


/* TX queue size */
#define TUN_TXQ_SIZE 10


... なんじゃこりゃ。定数で 10 って決まってるし。しかも ioctl で変更できなさそう。
これはたまらん。

しかも tun/tap って、ほとんどの Linux ディストリビューションに標準でコンパイル済みのものが入ってるしなぁ。