finally move buildroot-ng to trunk
[openwrt.git] / target / linux / generic-2.4 / patches / 224-atm_hotplug.patch
1 diff -urN linux.old/include/linux/atmdev.h linux.dev/include/linux/atmdev.h
2 --- linux.old/include/linux/atmdev.h    2005-11-17 12:51:55.883585000 +0100
3 +++ linux.dev/include/linux/atmdev.h    2005-11-17 13:49:22.012671000 +0100
4 @@ -408,6 +408,7 @@
5  struct atm_dev *atm_dev_register(const char *type,const struct atmdev_ops *ops,
6      int number,atm_dev_flags_t *flags); /* number == -1: pick first available */
7  struct atm_dev *atm_dev_lookup(int number);
8 +void atm_dev_set_link_status(struct atm_dev *dev, int status);
9  void atm_dev_deregister(struct atm_dev *dev);
10  void shutdown_atm_dev(struct atm_dev *dev);
11  void vcc_insert_socket(struct sock *sk);
12 diff -urN linux.old/net/atm/resources.c linux.dev/net/atm/resources.c
13 --- linux.old/net/atm/resources.c       2003-11-28 19:26:21.000000000 +0100
14 +++ linux.dev/net/atm/resources.c       2005-11-17 14:27:26.514267750 +0100
15 @@ -10,6 +10,7 @@
16  #include <linux/sonet.h>
17  #include <linux/kernel.h> /* for barrier */
18  #include <linux/module.h>
19 +#include <linux/kmod.h>
20  #include <linux/bitops.h>
21  #include <net/sock.h>   /* for struct sock */
22  #include <asm/segment.h> /* for get_fs_long and put_fs_long */
23 @@ -70,6 +71,44 @@
24         return dev;
25  }
26  
27 +#ifdef CONFIG_HOTPLUG
28 +static void atm_run_sbin_hotplug(struct atm_dev *dev, char *action)
29 +{
30 +       char *argv[3], *envp[5], ifname[12 + IFNAMSIZ], atmname[255], action_str[32];
31 +       int i;
32 +
33 +       sprintf(ifname, "INTERFACE=atm%d", dev->number);
34 +       sprintf(atmname, "ATMDRIVER=%s", dev->type);
35 +       sprintf(action_str, "ACTION=%s", action);
36 +
37 +       i = 0;
38 +       argv[i++] = hotplug_path;
39 +       argv[i++] = "net";
40 +       argv[i] = 0;
41 +
42 +       i = 0;
43 +       /* minimal command environment */
44 +       envp [i++] = "HOME=/";
45 +       envp [i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
46 +       envp [i++] = ifname;
47 +       envp [i++] = atmname;
48 +       envp [i++] = action_str;
49 +       envp [i] = 0;
50 +
51 +       return call_usermodehelper(argv [0], argv, envp);
52 +}
53 +#endif
54 +
55 +void atm_dev_set_link_status(struct atm_dev *dev, int status)
56 +{
57 +#ifdef CONFIG_HOTPLUG
58 +       if (status)
59 +               atm_run_sbin_hotplug(dev, "up");
60 +       else
61 +               atm_run_sbin_hotplug(dev, "down");
62 +#endif
63 +}
64 +
65  struct atm_dev *atm_dev_register(const char *type, const struct atmdev_ops *ops,
66                                  int number, atm_dev_flags_t *flags)
67  {
68 @@ -123,7 +162,10 @@
69                 }
70         }
71  #endif
72 -
73 +#ifdef CONFIG_HOTPLUG
74 +       atm_run_sbin_hotplug(dev, "register");
75 +#endif
76 +       
77         return dev;
78  }
79  
80 @@ -131,6 +173,10 @@
81  void atm_dev_deregister(struct atm_dev *dev)
82  {
83         unsigned long warning_time;
84 +       
85 +#ifdef CONFIG_HOTPLUG
86 +       atm_run_sbin_hotplug(dev, "unregister");
87 +#endif
88  
89  #ifdef CONFIG_PROC_FS
90         if (dev->ops->proc_read)
91 @@ -399,6 +445,7 @@
92  }
93  
94  
95 +EXPORT_SYMBOL(atm_dev_set_link_status);
96  EXPORT_SYMBOL(atm_dev_register);
97  EXPORT_SYMBOL(atm_dev_deregister);
98  EXPORT_SYMBOL(atm_dev_lookup);