X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fkernel%2Fsamples%2Fnetdev%2F.git;a=blobdiff_plain;f=ndeth.c;h=613ef64a53b8e353510a56328949009925b4f331;hp=ec6be595262fcf0942dff29ba2d940fbc6ba67fd;hb=HEAD;hpb=503f35d0bd433376e5d990797c95d706787d456b diff --git a/ndeth.c b/ndeth.c index ec6be59..613ef64 100644 --- a/ndeth.c +++ b/ndeth.c @@ -20,18 +20,28 @@ #include #include #include +#include MODULE_LICENSE("GPL"); +static void work_ndeth(struct work_struct *work) +{ + printk(KERN_DEBUG "doing ndeth work\n"); +} + +static DECLARE_DELAYED_WORK(ndeth_work, work_ndeth); + static int ndeth_open(struct net_device *dev) { printk(KERN_DEBUG "ndeth open\n"); + schedule_delayed_work(&ndeth_work, 4 * HZ); return 0; } static int ndeth_stop(struct net_device *dev) { printk(KERN_DEBUG "ndeth stop\n"); + cancel_delayed_work_sync(&ndeth_work); return 0; } @@ -45,6 +55,7 @@ static const struct net_device_ops ndeth_ops = { .ndo_open = ndeth_open, .ndo_stop = ndeth_stop, .ndo_start_xmit = ndeth_tx, + .ndo_set_mac_address = eth_mac_addr, }; struct net_device *ndeth; @@ -52,10 +63,13 @@ struct net_device *ndeth; static __init int ndeth_init(void) { int r = -ENOMEM; + char addr[ETH_ALEN]; ndeth = alloc_etherdev(0); if (!ndeth) goto out; ndeth->netdev_ops = &ndeth_ops; + random_ether_addr(addr); + memcpy(ndeth->dev_addr, addr, ETH_ALEN); r = register_netdev(ndeth); if (r) goto reg_out;