パケット届いているのかよ調査2

実況中継気味。

todo

1. QEMU内でパケットが消失しているか?
2. プロトコルスタックの後半でパケットが捨てられていないか?
3.MonaからのパケットのIPヘッダのFlagsは0
4.MSSが1446になっているが、データサイズが安定していない
5.MonaからのAckパケットに’GET / HTTP/1.0’というデータが存在する

1.QEMU内でパケットが消失しているか?

QEMU内のvoid ne2000_receiveあたりで、受け取りパケットが取れそう。
当然のことながらQEMUはパケットの種類には関知しません。
なので、net2000.cに

    typedef struct{
        byte  dstmac[6];
        byte  srcmac[6];
        word    type;   
        byte   data[0x600];
    } Frame;

    typedef struct{
        byte  verhead;
        byte  tos;    
        word len;     
        word id;      
        word frag;    
        byte  ttl;    
        byte  prot;   
        word chksum;  
        dword srcip;  
        dword dstip;  
        char     data[0];
    } IPHeader;

EtherFrame, IPHeaderの定義を埋め込んで

    const Frame* frame = (const Frame*)buf;
    if (frame->type == 0x800) { // IP

このような感じで覗き見る必要があります。(だいぶバッドノウハウになってきたな。)