Я пытаюсь зарегистрировать новое net_device
в Linux ... я могу выделить и зарегистрировать его правильно и ifconfig
показывает это. Проблема возникает, когда я пытаюсь подключить интерфейс:
ifconfig my_dev up
Ядро зависает ... проблема присутствует только на машинах x86, и я не могу понять причину ... на машине pcc все работает хорошо. Код очень прост:
static struct net_device *my_dev;
static int veth_dev_init(struct net_device *dev);
static int veth_open(struct net_device *dev);
static int veth_close(struct net_device *dev);
static int veth_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
static struct veth_priv
{
...
};
static struct net_device_ops veth_ops =
{
.ndo_init = veth_dev_init,
.ndo_open = veth_open,
.ndo_stop = veth_close,
.ndo_do_ioctl = veth_ioctl
};
static int __init veth_init()
{
my_dev = alloc_netdev(sizeof(struct veth_priv), "my_dev", ether_setup);
if (my_dev == NULL)
return -ENOMEM;
my_dev->netdev_ops = &veth_ops;
register_netdev(my_dev);
return 0;
}
static void __exit veth_exit()
{
unregister_netdev(my_dev);
free_netdev(my_dev);
}
module_init(veth_init);
module_exit(veth_exit);
Первые четыре функции veth_dev_init, veth_open, veth_close
и veth_ioctl
просто возвращают 0.
Может быть, в структуре veth_ops
отсутствует поле?
Всем спасибо!