2012年2月23日木曜日

ifconfig

ネットワークインタフェースを追加し、ifconfig できるところまで行います。

■ネットワークインタフェースの確保
  struct net_device *mynet_dev;
  mynet_dev = alloc_netdev(PRIV_SIZE, NDEV_NAME, ether_setup);
  // PRIV_SIZE にプライベートデータを保存する領域のサイズ(int。特になければ 0)
  // NDEV_NAME にネットワークインタフェースの名前 (char *)

■ネットワークインタフェースの登録
  mynet_dev->netdev_ops = &mynet_dev_ops;
  register_netdev(mynet_dev);

これで、カーネルにネットワークインタフェースの登録が完了する。
ただし、最低限、下記の netdev_ops を定義しておかなければならない。

static struct net_device_ops mynet_dev_ops = {
  .ndo_init = mynet_init,
  .ndo_open = mynet_open,
  .ndo_start_xmit = mynet_xmit,
};

.ndo_open が ifconfig を実行したとき呼ばれる関数である。
また、.ndo_init は reigster_netdev() 実行時に呼ばれる関数、
ndo_start_xmit は、パケット送信時に呼ばれる関数である。

0 件のコメント:

コメントを投稿