| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- Index: linux-2.4.35.4/include/linux/atmdev.h
- ===================================================================
- --- linux-2.4.35.4.orig/include/linux/atmdev.h
- +++ linux-2.4.35.4/include/linux/atmdev.h
- @@ -400,6 +400,7 @@ extern rwlock_t vcc_sklist_lock;
- struct atm_dev *atm_dev_register(const char *type,const struct atmdev_ops *ops,
- int number,atm_dev_flags_t *flags); /* number == -1: pick first available */
- struct atm_dev *atm_dev_lookup(int number);
- +void atm_dev_set_link_status(struct atm_dev *dev, int status);
- void atm_dev_deregister(struct atm_dev *dev);
- void shutdown_atm_dev(struct atm_dev *dev);
- void vcc_insert_socket(struct sock *sk);
- Index: linux-2.4.35.4/net/atm/resources.c
- ===================================================================
- --- linux-2.4.35.4.orig/net/atm/resources.c
- +++ linux-2.4.35.4/net/atm/resources.c
- @@ -10,6 +10,7 @@
- #include <linux/sonet.h>
- #include <linux/kernel.h> /* for barrier */
- #include <linux/module.h>
- +#include <linux/kmod.h>
- #include <linux/bitops.h>
- #include <net/sock.h> /* for struct sock */
- #include <asm/segment.h> /* for get_fs_long and put_fs_long */
- @@ -70,6 +71,44 @@ struct atm_dev *atm_dev_lookup(int numbe
- return dev;
- }
-
- +#ifdef CONFIG_HOTPLUG
- +static void atm_run_sbin_hotplug(struct atm_dev *dev, char *action)
- +{
- + char *argv[3], *envp[5], ifname[12 + IFNAMSIZ], atmname[255], action_str[32];
- + int i;
- +
- + sprintf(ifname, "INTERFACE=atm%d", dev->number);
- + sprintf(atmname, "ATMDRIVER=%s", dev->type);
- + sprintf(action_str, "ACTION=%s", action);
- +
- + i = 0;
- + argv[i++] = hotplug_path;
- + argv[i++] = "net";
- + argv[i] = 0;
- +
- + i = 0;
- + /* minimal command environment */
- + envp [i++] = "HOME=/";
- + envp [i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
- + envp [i++] = ifname;
- + envp [i++] = atmname;
- + envp [i++] = action_str;
- + envp [i] = 0;
- +
- + return call_usermodehelper(argv [0], argv, envp);
- +}
- +#endif
- +
- +void atm_dev_set_link_status(struct atm_dev *dev, int status)
- +{
- +#ifdef CONFIG_HOTPLUG
- + if (status)
- + atm_run_sbin_hotplug(dev, "up");
- + else
- + atm_run_sbin_hotplug(dev, "down");
- +#endif
- +}
- +
- struct atm_dev *atm_dev_register(const char *type, const struct atmdev_ops *ops,
- int number, atm_dev_flags_t *flags)
- {
- @@ -123,7 +162,10 @@ struct atm_dev *atm_dev_register(const c
- }
- }
- #endif
- -
- +#ifdef CONFIG_HOTPLUG
- + atm_run_sbin_hotplug(dev, "register");
- +#endif
- +
- return dev;
- }
-
- @@ -131,6 +173,10 @@ struct atm_dev *atm_dev_register(const c
- void atm_dev_deregister(struct atm_dev *dev)
- {
- unsigned long warning_time;
- +
- +#ifdef CONFIG_HOTPLUG
- + atm_run_sbin_hotplug(dev, "unregister");
- +#endif
-
- #ifdef CONFIG_PROC_FS
- if (dev->ops->proc_read)
- @@ -399,6 +445,7 @@ done:
- }
-
-
- +EXPORT_SYMBOL(atm_dev_set_link_status);
- EXPORT_SYMBOL(atm_dev_register);
- EXPORT_SYMBOL(atm_dev_deregister);
- EXPORT_SYMBOL(atm_dev_lookup);
|