lkml.org 
[lkml]   [2007]   [Jul]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH -mm 4/9] netconsole: Introduce netconsole_netdev_notifier
    From: Satyam Sharma <ssatyam@cse.iitk.ac.in>

    [4/9] netconsole: Introduce netconsole_netdev_notifier

    To update fields of underlying netpoll structure at runtime on
    corresponding NETDEV_CHANGEADDR or NETDEV_CHANGENAME notifications.

    Signed-off-by: Satyam Sharma <ssatyam@cse.iitk.ac.in>
    Cc: Keiichi Kii <k-keiichi@bx.jp.nec.com>
    Cc: Takayoshi Kochi <t-kochi@bq.jp.nec.com>

    ---

    drivers/net/netconsole.c | 36 ++++++++++++++++++++++++++++++++++++
    1 file changed, 36 insertions(+)

    ---

    diff -ruNp a/drivers/net/netconsole.c b/drivers/net/netconsole.c
    --- a/drivers/net/netconsole.c 2007-07-03 21:51:40.000000000 +0530
    +++ b/drivers/net/netconsole.c 2007-07-03 22:02:11.000000000 +0530
    @@ -81,6 +81,37 @@ static struct netconsole_target default_
    },
    };

    +/* Handle network interface device notifications */
    +static int netconsole_netdev_event(struct notifier_block *this,
    + unsigned long event,
    + void *ptr)
    +{
    + struct net_device *dev = ptr;
    + struct netconsole_target *nt = &default_target;
    +
    + if (!(event == NETDEV_CHANGEADDR || event == NETDEV_CHANGENAME))
    + goto done;
    +
    + if (nt->np.dev == dev) {
    + switch (event) {
    + case NETDEV_CHANGEADDR:
    + memcpy(nt->np.local_mac, dev->dev_addr, ETH_ALEN);
    + break;
    +
    + case NETDEV_CHANGENAME:
    + strlcpy(nt->np.dev_name, dev->name, IFNAMSIZ);
    + break;
    + }
    + }
    +
    +done:
    + return NOTIFY_DONE;
    +}
    +
    +static struct notifier_block netconsole_netdev_notifier = {
    + .notifier_call = netconsole_netdev_event,
    +};
    +
    static void write_msg(struct console *con, const char *msg, unsigned int len)
    {
    int frag, left;
    @@ -123,6 +154,10 @@ static int __init init_netconsole(void)
    if (err)
    goto out;

    + err = register_netdevice_notifier(&netconsole_netdev_notifier);
    + if (err)
    + return err;
    +
    register_console(&netconsole);
    printk(KERN_INFO "netconsole: network logging started\n");

    @@ -135,6 +170,7 @@ static void __exit cleanup_netconsole(vo
    struct netconsole_target *nt = &default_target;

    unregister_console(&netconsole);
    + unregister_netdevice_notifier(&netconsole_netdev_notifier);
    netpoll_cleanup(&nt->np);
    }

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-07-04 13:13    [W:0.023 / U:0.620 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site