]> git.pld-linux.org Git - packages/kernel.git/blame - atm-10-modular-atm.patch
- added description of djurban's branch
[packages/kernel.git] / atm-10-modular-atm.patch
CommitLineData
b5a39c4d
JR
1the following patch makes atm a module. this patch also fixes a
2number of other problems: MOD_INC/MOD_DEC are gone in lec and mpc
3(however i needed to use module_put() inside lec, mpc and clip due to
4the way the user space 'clients' unregister from the modules), clip
5is a module (i wrote the clip module_exit() function -- its *probably*
6correct), structs are now exported as pointers (if someone has a
7compelling reason it should remain the old way let me know), ipcommon.c
8is included by clip.c and doesnt export symbols -- it should probably
9just be split eventually with only llc_oui residing in the kernel
10(and exported) and skb_migrate moved to clip -- this really depends
11on the status of CONFIG_NET_SCH_ATM.
12
13Index: linux/net/atm/clip.c
14===================================================================
15RCS file: /home/chas/CVSROOT/linux/net/atm/clip.c,v
16retrieving revision 1.1.1.1
17diff -u -r1.1.1.1 clip.c
18--- linux/net/atm/clip.c 20 Feb 2003 13:46:30 -0000 1.1.1.1
19+++ linux/net/atm/clip.c 3 Mar 2003 19:33:38 -0000
20@@ -7,6 +7,7 @@
21 #include <linux/string.h>
22 #include <linux/errno.h>
23 #include <linux/kernel.h> /* for UINT_MAX */
24+#include <linux/module.h>
25 #include <linux/netdevice.h>
26 #include <linux/skbuff.h>
27 #include <linux/wait.h>
28@@ -48,6 +49,7 @@
29 static struct timer_list idle_timer;
30 static int start_timer = 1;
31
32+#include "ipcommon.c"
33
34 static int to_atmarpd(enum atmarp_ctrl_type type,int itf,unsigned long ip)
35 {
36@@ -696,6 +698,7 @@
37 "pending\n");
38 skb_queue_purge(&vcc->recvq);
39 DPRINTK("(done)\n");
40+ MOD_DEC_USE_COUNT;
41 }
42
43
44@@ -747,10 +750,50 @@
45 return 0;
46 }
47
48+static struct atm_clip_ops __atm_clip_ops = {
49+ clip_create: clip_create,
50+ clip_mkip: clip_mkip,
51+ clip_setentry: clip_setentry,
52+ clip_encap: clip_encap,
53+ clip_push: clip_push,
54+ atm_init_atmarp: atm_init_atmarp,
55+ clip_tbl: &clip_tbl,
56+ owner: THIS_MODULE
57+};
58
59-void atm_clip_init(void)
60+static int __init atm_clip_init(void)
61 {
62+ extern struct atm_clip_ops *atm_clip_ops;
63+
64 clip_tbl.lock = RW_LOCK_UNLOCKED;
65 clip_tbl.kmem_cachep = kmem_cache_create(clip_tbl.id,
66 clip_tbl.entry_size, 0, SLAB_HWCACHE_ALIGN, NULL, NULL);
67+
68+ atm_clip_ops = &__atm_clip_ops;
69+
70+ return 0;
71 }
72+
73+static void __exit atm_clip_exit(void)
74+{
75+ extern struct atm_clip_ops *atm_clip_ops;
76+ struct net_device *dev, *next;
77+
78+ atm_clip_ops = NULL;
79+
80+ next = clip_devs;
81+ while (next) {
82+ dev = next;
83+ next = PRIV(dev)->next;
84+ unregister_netdev(dev);
85+ kfree(dev);
86+ }
87+ if (start_timer == 0) del_timer(&idle_timer);
88+
89+ kmem_cache_destroy(clip_tbl.kmem_cachep);
90+}
91+
92+module_init(atm_clip_init);
93+module_exit(atm_clip_exit);
94+
95+MODULE_LICENSE("GPL");
96Index: linux/net/atm/common.c
97===================================================================
98RCS file: /home/chas/CVSROOT/linux/net/atm/common.c,v
99retrieving revision 1.5
100diff -u -r1.5 common.c
101--- linux/net/atm/common.c 26 Feb 2003 15:52:44 -0000 1.5
102+++ linux/net/atm/common.c 3 Mar 2003 19:41:21 -0000
92bb4c6c
JR
103@@ -5,6 +5,7 @@
104
105 #include <linux/config.h>
106 #include <linux/module.h>
107+#include <linux/init.h>
108 #include <linux/kmod.h>
109 #include <linux/net.h> /* struct socket, struct net_proto, struct
110 proto_ops */
b5a39c4d
JR
111@@ -33,16 +33,16 @@
112 #include <linux/atmlec.h>
113 #include "lec.h"
114 #include "lec_arpc.h"
115-struct atm_lane_ops atm_lane_ops;
116-#endif
117+struct atm_lane_ops *atm_lane_ops = NULL;
118 #ifdef CONFIG_ATM_LANE_MODULE
119 EXPORT_SYMBOL(atm_lane_ops);
120 #endif
121+#endif
122
123 #if defined(CONFIG_ATM_MPOA) || defined(CONFIG_ATM_MPOA_MODULE)
124 #include <linux/atmmpc.h>
125 #include "mpc.h"
126-struct atm_mpoa_ops atm_mpoa_ops;
127+struct atm_mpoa_ops *atm_mpoa_ops = NULL;
128 #endif
129 #ifdef CONFIG_ATM_MPOA_MODULE
130 EXPORT_SYMBOL(atm_mpoa_ops);
131@@ -59,6 +59,14 @@
132 #endif
133 #endif
134
135+#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
136+#include <net/atmclip.h>
137+struct atm_clip_ops *atm_clip_ops = NULL;
138+#ifdef CONFIG_ATM_CLIP_MODULE
139+EXPORT_SYMBOL(atm_clip_ops);
140+#endif
141+#endif
142+
143 #if defined(CONFIG_PPPOATM) || defined(CONFIG_PPPOATM_MODULE)
144 int (*pppoatm_ioctl_hook)(struct atm_vcc *, unsigned int, unsigned long);
145 EXPORT_SYMBOL(pppoatm_ioctl_hook);
146@@ -68,9 +76,6 @@
147 #include "common.h" /* prototypes */
148 #include "protocols.h" /* atm_init_<transport> */
149 #include "addr.h" /* address registry */
150-#ifdef CONFIG_ATM_CLIP
151-#include <net/atmclip.h> /* for clip_create */
152-#endif
153 #include "signaling.h" /* for WAITING and sigd_attach */
154
155
156@@ -642,39 +647,50 @@
157 if (!error) sock->state = SS_CONNECTED;
158 ret_val = error;
159 goto done;
160-#ifdef CONFIG_ATM_CLIP
161+#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
162 case SIOCMKCLIP:
163 if (!capable(CAP_NET_ADMIN))
164 ret_val = -EPERM;
165 else
166- ret_val = clip_create(arg);
167+ ret_val = atm_clip_ops->clip_create(arg);
168 goto done;
169 case ATMARPD_CTRL:
170 if (!capable(CAP_NET_ADMIN)) {
171 ret_val = -EPERM;
172 goto done;
173 }
174- error = atm_init_atmarp(vcc);
175- if (!error) sock->state = SS_CONNECTED;
176+#if defined(CONFIG_ATM_CLIP_MODULE)
177+ if (atm_clip_ops == NULL)
178+ request_module("clip");
179+#endif
180+ if (atm_clip_ops && !try_inc_mod_count(atm_clip_ops->owner)) {
181+ ret_val = -ENOSYS;
182+ goto done;
183+ }
184+ error = atm_clip_ops->atm_init_atmarp(vcc);
185+ if (!error)
186+ sock->state = SS_CONNECTED;
187+ else if (atm_clip_ops->owner)
188+ __MOD_DEC_USE_COUNT(atm_clip_ops->owner);
189 ret_val = error;
190 goto done;
191 case ATMARP_MKIP:
192 if (!capable(CAP_NET_ADMIN))
193 ret_val = -EPERM;
194 else
195- ret_val = clip_mkip(vcc,arg);
196+ ret_val = atm_clip_ops->clip_mkip(vcc,arg);
197 goto done;
198 case ATMARP_SETENTRY:
199 if (!capable(CAP_NET_ADMIN))
200 ret_val = -EPERM;
201 else
202- ret_val = clip_setentry(vcc,arg);
203+ ret_val = atm_clip_ops->clip_setentry(vcc,arg);
204 goto done;
205 case ATMARP_ENCAP:
206 if (!capable(CAP_NET_ADMIN))
207 ret_val = -EPERM;
208 else
209- ret_val = clip_encap(vcc,arg);
210+ ret_val = atm_clip_ops->clip_encap(vcc,arg);
211 goto done;
212 #endif
213 #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
214@@ -683,30 +699,32 @@
215 ret_val = -EPERM;
216 goto done;
217 }
218- if (atm_lane_ops.lecd_attach == NULL)
219- atm_lane_init();
220- if (!try_module_get(atm_lane_ops.owner)) { /* try again */
221+#if defined(CONFIG_ATM_LANE_MODULE)
222+ if (atm_lane_ops == NULL)
223+ request_module("lec");
224+#endif
225+ if (atm_lane_ops && !try_inc_mod_count(atm_lane_ops->owner)) {
226 ret_val = -ENOSYS;
227 goto done;
228 }
229- error = atm_lane_ops.lecd_attach(vcc, (int)arg);
230+ error = atm_lane_ops->lecd_attach(vcc, (int)arg);
231 if (error >= 0)
232 sock->state = SS_CONNECTED;
233- else
234- module_put(atm_lane_ops.owner);
235+ else if (atm_lane_ops->owner)
236+ __MOD_DEC_USE_COUNT(atm_lane_ops->owner);
237 ret_val = error;
238 goto done;
239 case ATMLEC_MCAST:
240 if (!capable(CAP_NET_ADMIN))
241 ret_val = -EPERM;
242 else
243- ret_val = atm_lane_ops.mcast_attach(vcc, (int)arg);
244+ ret_val = atm_lane_ops->mcast_attach(vcc, (int)arg);
245 goto done;
246 case ATMLEC_DATA:
247 if (!capable(CAP_NET_ADMIN))
248 ret_val = -EPERM;
249 else
250- ret_val = atm_lane_ops.vcc_attach(vcc, (void*)arg);
251+ ret_val = atm_lane_ops->vcc_attach(vcc, (void*)arg);
252 goto done;
253 #endif
254 #if defined(CONFIG_ATM_MPOA) || defined(CONFIG_ATM_MPOA_MODULE)
255@@ -715,21 +733,26 @@
256 ret_val = -EPERM;
257 goto done;
258 }
259- if (atm_mpoa_ops.mpoad_attach == NULL)
260- atm_mpoa_init();
261- if (atm_mpoa_ops.mpoad_attach == NULL) { /* try again */
262+#if defined(CONFIG_ATM_MPOA_MODULE)
263+ if (atm_mpoa_ops == NULL)
264+ request_module("mpoa");
265+#endif
266+ if (atm_mpoa_ops && !try_inc_mod_count(atm_mpoa_ops->owner)) {
267 ret_val = -ENOSYS;
268 goto done;
269 }
270- error = atm_mpoa_ops.mpoad_attach(vcc, (int)arg);
271- if (error >= 0) sock->state = SS_CONNECTED;
272+ error = atm_mpoa_ops->mpoad_attach(vcc, (int)arg);
273+ if (error >= 0)
274+ sock->state = SS_CONNECTED;
275+ else if (atm_mpoa_ops->owner)
276+ __MOD_DEC_USE_COUNT(atm_mpoa_ops->owner);
277 ret_val = error;
278 goto done;
279 case ATMMPC_DATA:
280 if (!capable(CAP_NET_ADMIN))
281 ret_val = -EPERM;
282 else
283- ret_val = atm_mpoa_ops.vcc_attach(vcc, arg);
284+ ret_val = atm_mpoa_ops->vcc_attach(vcc, arg);
285 goto done;
286 #endif
287 #if defined(CONFIG_ATM_TCP) || defined(CONFIG_ATM_TCP_MODULE)
288@@ -1105,40 +1128,6 @@
289 }
290
291
292-/*
293- * lane_mpoa_init.c: A couple of helper functions
294- * to make modular LANE and MPOA client easier to implement
295- */
296-
297-/*
298- * This is how it goes:
299- *
300- * if xxxx is not compiled as module, call atm_xxxx_init_ops()
301- * from here
302- * else call atm_mpoa_init_ops() from init_module() within
303- * the kernel when xxxx module is loaded
304- *
305- * In either case function pointers in struct atm_xxxx_ops
306- * are initialized to their correct values. Either they
307- * point to functions in the module or in the kernel
308- */
309-
310-extern struct atm_mpoa_ops atm_mpoa_ops; /* in common.c */
311-extern struct atm_lane_ops atm_lane_ops; /* in common.c */
312-
313-#if defined(CONFIG_ATM_MPOA) || defined(CONFIG_ATM_MPOA_MODULE)
314-void atm_mpoa_init(void)
315-{
316-#ifndef CONFIG_ATM_MPOA_MODULE /* not module */
317- atm_mpoa_init_ops(&atm_mpoa_ops);
318-#else
319- request_module("mpoa");
320-#endif
321-
322- return;
323-}
324-#endif
325-
326 #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
327 #if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE)
328 struct net_bridge_fdb_entry *(*br_fdb_get_hook)(struct net_bridge *br,
329@@ -1149,15 +1138,33 @@
330 EXPORT_SYMBOL(br_fdb_put_hook);
331 #endif /* defined(CONFIG_ATM_LANE_MODULE) || defined(CONFIG_BRIDGE_MODULE) */
332 #endif /* defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) */
333+#endif /* defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE) */
334+
335
336-void atm_lane_init(void)
337+static int __init atm_init(void)
338 {
339-#ifndef CONFIG_ATM_LANE_MODULE /* not module */
340- atm_lane_init_ops(&atm_lane_ops);
341-#else
342- request_module("lec");
343+ int error = 0;
344+
345+ if (atmpvc_init() < 0)
346+ return -1;
347+ if (atmsvc_init() < 0)
348+ return -1;
349+#ifdef CONFIG_PROC_FS
350+ error = atm_proc_init();
351+ if (error) printk("atm_proc_init fails with %d\n",error);
352 #endif
353+ return error;
354+}
355
356- return;
357-}
358+static void __exit atm_exit(void)
359+{
360+#ifdef CONFIG_PROC_FS
361+ atm_proc_exit();
362 #endif
363+ atmsvc_exit();
364+ atmpvc_exit();
365+}
366+
367+module_init(atm_init);
368+module_exit(atm_exit);
369+MODULE_LICENSE("GPL");
370Index: linux/net/atm/common.h
371===================================================================
372RCS file: /home/chas/CVSROOT/linux/net/atm/common.h,v
373retrieving revision 1.1.1.1
374diff -u -r1.1.1.1 common.h
375--- linux/net/atm/common.h 20 Feb 2003 13:46:30 -0000 1.1.1.1
376+++ linux/net/atm/common.h 27 Feb 2003 16:47:15 -0000
377@@ -28,7 +28,14 @@
378 void atm_release_vcc_sk(struct sock *sk,int free_sk);
379 void atm_shutdown_dev(struct atm_dev *dev);
380
381+int atmsvc_init(void);
382+void atmsvc_exit(void);
383+
384+int atmpvc_init(void);
385+void atmpvc_exit(void);
386+
387 int atm_proc_init(void);
388+void atm_proc_exit(void);
389
390 /* SVC */
391
392Index: linux/net/atm/ipcommon.c
393===================================================================
394RCS file: /home/chas/CVSROOT/linux/net/atm/ipcommon.c,v
395retrieving revision 1.1.1.1
396diff -u -r1.1.1.1 ipcommon.c
397--- linux/net/atm/ipcommon.c 20 Feb 2003 13:46:30 -0000 1.1.1.1
398+++ linux/net/atm/ipcommon.c 3 Mar 2003 16:51:32 -0000
399@@ -65,6 +65,3 @@
400 from->qlen = 0;
401 spin_unlock_irqrestore(&from->lock,flags);
402 }
403-
404-
405-EXPORT_SYMBOL(skb_migrate);
406Index: linux/net/atm/ipcommon.h
407===================================================================
408RCS file: /home/chas/CVSROOT/linux/net/atm/ipcommon.h,v
409retrieving revision 1.1.1.1
410diff -u -r1.1.1.1 ipcommon.h
411--- linux/net/atm/ipcommon.h 20 Feb 2003 13:46:30 -0000 1.1.1.1
412+++ linux/net/atm/ipcommon.h 3 Mar 2003 16:52:24 -0000
413@@ -13,8 +13,6 @@
414 #include <linux/atmdev.h>
415
416
417-extern struct net_device *clip_devs;
418-
419 /*
420 * Appends all skbs from "from" to "to". The operation is atomic with respect
421 * to all other skb operations on "from" or "to".
422Index: linux/net/atm/lec.c
423===================================================================
424RCS file: /home/chas/CVSROOT/linux/net/atm/lec.c,v
425retrieving revision 1.11
426diff -u -r1.11 lec.c
427--- linux/net/atm/lec.c 3 Mar 2003 21:25:05 -0000 1.11
428+++ linux/net/atm/lec.c 3 Mar 2003 21:27:05 -0000
429@@ -790,7 +790,6 @@
430 dev_lec[i] = init_etherdev(NULL, size);
431 if (!dev_lec[i])
432 return -ENOMEM;
433-
434 priv = dev_lec[i]->priv;
435 priv->is_trdev = is_trdev;
436 sprintf(dev_lec[i]->name, "lec%d", i);
437@@ -828,24 +827,20 @@
438 return i;
439 }
440
441-void atm_lane_init_ops(struct atm_lane_ops *ops)
442-{
443- ops->lecd_attach = lecd_attach;
444- ops->mcast_attach = lec_mcast_attach;
445- ops->vcc_attach = lec_vcc_attach;
446- ops->get_lecs = get_dev_lec;
447- ops->owner = lecdev_ops.owner;
448-
449- printk("lec.c: " __DATE__ " " __TIME__ " initialized\n");
450-
451- return;
452-}
453+static struct atm_lane_ops __atm_lane_ops = {
454+ lecd_attach: lecd_attach,
455+ mcast_attach: lec_mcast_attach,
456+ vcc_attach: lec_vcc_attach,
457+ get_lecs: get_dev_lec,
458+ owner: THIS_MODULE
459+};
460
461 static int __init lane_module_init(void)
462 {
463- extern struct atm_lane_ops atm_lane_ops;
464+ extern struct atm_lane_ops *atm_lane_ops;
465
466- atm_lane_init_ops(&atm_lane_ops);
467+ atm_lane_ops = &__atm_lane_ops;
468+ printk("lec.c: " __DATE__ " " __TIME__ " initialized\n");
469
470 return 0;
471 }
472@@ -852,14 +847,10 @@
473 static void __exit lane_module_cleanup(void)
474 {
475 int i;
476- extern struct atm_lane_ops atm_lane_ops;
477+ extern struct atm_lane_ops *atm_lane_ops;
478 struct lec_priv *priv;
479
480- atm_lane_ops.lecd_attach = NULL;
481- atm_lane_ops.mcast_attach = NULL;
482- atm_lane_ops.vcc_attach = NULL;
483- atm_lane_ops.get_lecs = NULL;
484- atm_lane_ops.owner = NULL;
485+ atm_lane_ops = NULL;
486
487 for (i = 0; i < MAX_LEC_ITF; i++) {
488 if (dev_lec[i] != NULL) {
489@@ -871,7 +863,7 @@
490 unregister_netdev(dev_lec[i]);
491 kfree(dev_lec[i]);
492 dev_lec[i] = NULL;
493- }
494+ }
495 }
496
497 return;
498@@ -1021,7 +1013,7 @@
499 #include <linux/timer.h>
500 #include <asm/param.h>
501 #include <asm/atomic.h>
502-#include <linux/inetdevice.h>
503+#include <linux/netdevice.h>
504 #include <net/route.h>
505
506
507Index: linux/net/atm/lec.h
508===================================================================
509RCS file: /home/chas/CVSROOT/linux/net/atm/lec.h,v
510retrieving revision 1.5
511diff -u -r1.5 lec.h
512--- linux/net/atm/lec.h 3 Mar 2003 21:25:05 -0000 1.5
513+++ linux/net/atm/lec.h 3 Mar 2003 21:25:17 -0000
514@@ -155,7 +156,5 @@
515 unsigned char *atm_addr, struct sk_buff *data);
516 void lec_push(struct atm_vcc *vcc, struct sk_buff *skb);
517
518-void atm_lane_init(void);
519-void atm_lane_init_ops(struct atm_lane_ops *ops);
520 #endif /* _LEC_H_ */
521
522Index: linux/net/atm/mpc.c
523===================================================================
524RCS file: /home/chas/CVSROOT/linux/net/atm/mpc.c,v
525retrieving revision 1.3
526diff -u -r1.3 mpc.c
527--- linux/net/atm/mpc.c 3 Mar 2003 21:25:05 -0000 1.3
528+++ linux/net/atm/mpc.c 3 Mar 2003 21:25:19 -0000
529@@ -799,7 +799,6 @@
530 send_set_mps_ctrl_addr(mpc->mps_ctrl_addr, mpc);
531 }
532
533- MOD_INC_USE_COUNT;
534 return arg;
535 }
536
537@@ -1390,11 +1389,17 @@
538 return;
539 }
540
541-void atm_mpoa_init_ops(struct atm_mpoa_ops *ops)
542+struct atm_mpoa_ops __atm_mpoa_ops = {
543+ mpoad_attach: atm_mpoa_mpoad_attach,
544+ vcc_attach: atm_mpoa_vcc_attach,
545+ owner: THIS_MODULE
546+};
547+
548+static int __init atm_mpoa_init(void)
549 {
550- ops->mpoad_attach = atm_mpoa_mpoad_attach;
551- ops->vcc_attach = atm_mpoa_vcc_attach;
552+ extern struct atm_mpoa_ops *atm_mpoa_ops;
553
554+ atm_mpoa_ops = &__atm_mpoa_ops;
555 #ifdef CONFIG_PROC_FS
556 if(mpc_proc_init() != 0)
557 printk(KERN_INFO "mpoa: failed to initialize /proc/mpoa\n");
558@@ -1404,22 +1409,12 @@
559
560 printk("mpc.c: " __DATE__ " " __TIME__ " initialized\n");
561
562- return;
563-}
564-
565-#ifdef MODULE
566-int init_module(void)
567-{
568- extern struct atm_mpoa_ops atm_mpoa_ops;
569-
570- atm_mpoa_init_ops(&atm_mpoa_ops);
571-
572 return 0;
573 }
574
575-void cleanup_module(void)
576+static void __exit atm_mpoa_cleanup(void)
577 {
578- extern struct atm_mpoa_ops atm_mpoa_ops;
579+ extern struct atm_mpoa_ops *atm_mpoa_ops;
580 struct mpoa_client *mpc, *tmp;
581 struct atm_mpoa_qos *qos, *nextqos;
582 struct lec_priv *priv;
583@@ -1430,8 +1425,7 @@
584
585 del_timer(&mpc_timer);
586 unregister_netdevice_notifier(&mpoa_notifier);
587- atm_mpoa_ops.mpoad_attach = NULL;
588- atm_mpoa_ops.vcc_attach = NULL;
589+ atm_mpoa_ops = NULL;
590
591 mpc = mpcs;
592 mpcs = NULL;
593@@ -1463,8 +1457,9 @@
594 kfree(qos);
595 qos = nextqos;
596 }
597-
598- return;
599 }
600-#endif /* MODULE */
601+
602+module_init(atm_mpoa_init);
603+module_exit(atm_mpoa_cleanup);
604+
605 MODULE_LICENSE("GPL");
606Index: linux/net/atm/mpc.h
607===================================================================
608RCS file: /home/chas/CVSROOT/linux/net/atm/mpc.h,v
609retrieving revision 1.1.1.1
610diff -u -r1.1.1.1 mpc.h
611--- linux/net/atm/mpc.h 20 Feb 2003 13:46:30 -0000 1.1.1.1
612+++ linux/net/atm/mpc.h 1 Mar 2003 13:37:05 -0000
613@@ -48,11 +48,8 @@
614 struct atm_mpoa_ops {
615 int (*mpoad_attach)(struct atm_vcc *vcc, int arg); /* attach mpoa daemon */
616 int (*vcc_attach)(struct atm_vcc *vcc, long arg); /* attach shortcut vcc */
617+ struct module *owner;
618 };
619-
620-/* Boot/module initialization function */
621-void atm_mpoa_init(void);
622-void atm_mpoa_init_ops(struct atm_mpoa_ops *ops);
623
624 /* MPOA QoS operations */
625 struct atm_mpoa_qos *atm_mpoa_add_qos(uint32_t dst_ip, struct atm_qos *qos);
626Index: linux/net/atm/proc.c
627===================================================================
628RCS file: /home/chas/CVSROOT/linux/net/atm/proc.c,v
629retrieving revision 1.2
630diff -u -r1.2 proc.c
631--- linux/net/atm/proc.c 26 Feb 2003 15:52:44 -0000 1.2
632+++ linux/net/atm/proc.c 1 Mar 2003 14:39:12 -0000
633@@ -39,16 +39,15 @@
634 #include "common.h" /* atm_proc_init prototype */
635 #include "signaling.h" /* to get sigd - ugly too */
636
637-#ifdef CONFIG_ATM_CLIP
638+#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
639 #include <net/atmclip.h>
640-#include "ipcommon.h"
641-extern void clip_push(struct atm_vcc *vcc,struct sk_buff *skb);
642+extern struct atm_clip_ops *atm_clip_ops; /* in common.c */
643 #endif
644
645 #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
646 #include "lec.h"
647 #include "lec_arpc.h"
648-extern struct atm_lane_ops atm_lane_ops; /* in common.c */
649+extern struct atm_lane_ops *atm_lane_ops; /* in common.c */
650 #endif
651
652 static ssize_t proc_dev_atm_read(struct file *file,char *buf,size_t count,
653@@ -89,7 +88,7 @@
654 }
655
656
657-#ifdef CONFIG_ATM_CLIP
658+#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
659
660
661 static int svc_addr(char *buf,struct sockaddr_atmsvc *addr)
662@@ -178,8 +177,8 @@
663 aal_name[vcc->qos.aal],vcc->qos.rxtp.min_pcr,
664 class_name[vcc->qos.rxtp.traffic_class],vcc->qos.txtp.min_pcr,
665 class_name[vcc->qos.txtp.traffic_class]);
666-#ifdef CONFIG_ATM_CLIP
667- if (vcc->push == clip_push) {
668+#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
669+ if (atm_clip_ops && (vcc->push == atm_clip_ops->clip_push)) {
670 struct clip_vcc *clip_vcc = CLIP_VCC(vcc);
671 struct net_device *dev;
672
673@@ -393,7 +392,7 @@
674 return 0;
675 }
676
677-#ifdef CONFIG_ATM_CLIP
678+#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
679 static int atm_arp_info(loff_t pos,char *buf)
680 {
681 struct neighbour *n;
682@@ -403,28 +402,30 @@
683 return sprintf(buf,"IPitf TypeEncp Idle IP address "
684 "ATM address\n");
685 }
686+ if (!atm_clip_ops)
687+ return 0;
688 count = pos;
689- read_lock_bh(&clip_tbl.lock);
690+ read_lock_bh(&atm_clip_ops->clip_tbl->lock);
691 for (i = 0; i <= NEIGH_HASHMASK; i++)
692- for (n = clip_tbl.hash_buckets[i]; n; n = n->next) {
693+ for (n = atm_clip_ops->clip_tbl->hash_buckets[i]; n; n = n->next) {
694 struct atmarp_entry *entry = NEIGH2ENTRY(n);
695 struct clip_vcc *vcc;
696
697 if (!entry->vccs) {
698 if (--count) continue;
699 atmarp_info(n->dev,entry,NULL,buf);
700- read_unlock_bh(&clip_tbl.lock);
701+ read_unlock_bh(&atm_clip_ops->clip_tbl->lock);
702 return strlen(buf);
703 }
704 for (vcc = entry->vccs; vcc;
705 vcc = vcc->next) {
706 if (--count) continue;
707 atmarp_info(n->dev,entry,vcc,buf);
708- read_unlock_bh(&clip_tbl.lock);
709+ read_unlock_bh(&atm_clip_ops->clip_tbl->lock);
710 return strlen(buf);
711 }
712 }
713- read_unlock_bh(&clip_tbl.lock);
714+ read_unlock_bh(&atm_clip_ops->clip_tbl->lock);
715 return 0;
716 }
717 #endif
718@@ -442,13 +443,13 @@
719 " Status Flags "
720 "VPI/VCI Recv VPI/VCI\n");
721 }
722- if (atm_lane_ops.get_lecs == NULL)
723+ if (!atm_lane_ops)
724 return 0; /* the lane module is not there yet */
725
726- if (!try_module_get(atm_lane_ops.owner))
727+ if (!try_inc_mod_count(atm_lane_ops->owner))
728 return 0;
729
730- dev_lec = atm_lane_ops.get_lecs();
731+ dev_lec = atm_lane_ops->get_lecs();
732
733 count = pos;
734 for(d=0;d<MAX_LEC_ITF;d++) {
735@@ -461,7 +462,8 @@
736 e=sprintf(buf,"%s ",
737 dev_lec[d]->name);
738 lec_info(entry,buf+e);
739- module_put(atm_lane_ops.owner);
740+ if (atm_lane_ops->owner)
741+ __MOD_DEC_USE_COUNT(atm_lane_ops->owner);
742 return strlen(buf);
743 }
744 }
745@@ -470,7 +471,8 @@
746 if (--count) continue;
747 e=sprintf(buf,"%s ",dev_lec[d]->name);
748 lec_info(entry, buf+e);
749- module_put(atm_lane_ops.owner);
750+ if (atm_lane_ops->owner)
751+ __MOD_DEC_USE_COUNT(atm_lane_ops->owner);
752 return strlen(buf);
753 }
754 for(entry=priv->lec_no_forward; entry;
755@@ -478,7 +479,8 @@
756 if (--count) continue;
757 e=sprintf(buf,"%s ",dev_lec[d]->name);
758 lec_info(entry, buf+e);
759- module_put(atm_lane_ops.owner);
760+ if (atm_lane_ops->owner)
761+ __MOD_DEC_USE_COUNT(atm_lane_ops->owner);
762 return strlen(buf);
763 }
764 for(entry=priv->mcast_fwds; entry;
765@@ -486,11 +487,13 @@
766 if (--count) continue;
767 e=sprintf(buf,"%s ",dev_lec[d]->name);
768 lec_info(entry, buf+e);
769- module_put(atm_lane_ops.owner);
770+ if (atm_lane_ops->owner)
771+ __MOD_DEC_USE_COUNT(atm_lane_ops->owner);
772 return strlen(buf);
773 }
774 }
775- module_put(atm_lane_ops.owner);
776+ if (atm_lane_ops->owner)
777+ __MOD_DEC_USE_COUNT(atm_lane_ops->owner);
778 return 0;
779 }
780 #endif
781@@ -591,12 +592,11 @@
782 name->proc_fops = &proc_spec_atm_operations; \
783 name->owner = THIS_MODULE
784
785+struct proc_dir_entry *devices = NULL, *pvc = NULL, *svc = NULL;
786+struct proc_dir_entry *arp = NULL, *lec = NULL, *vc = NULL;
787
788 int __init atm_proc_init(void)
789 {
790- struct proc_dir_entry *devices = NULL,*pvc = NULL,*svc = NULL;
791- struct proc_dir_entry *arp = NULL,*lec = NULL,*vc = NULL;
792-
793 atm_proc_root = proc_mkdir("net/atm",NULL);
794 if (!atm_proc_root)
795 return -ENOMEM;
796@@ -604,7 +604,7 @@
797 CREATE_ENTRY(pvc);
798 CREATE_ENTRY(svc);
799 CREATE_ENTRY(vc);
800-#ifdef CONFIG_ATM_CLIP
801+#if defined(CONFIG_ATM_CLIP) || defined(CONFIG_ATM_CLIP_MODULE)
802 CREATE_ENTRY(arp);
803 #endif
804 #if defined(CONFIG_ATM_LANE) || defined(CONFIG_ATM_LANE_MODULE)
805@@ -621,4 +621,15 @@
806 if (vc) remove_proc_entry("vc",atm_proc_root);
807 remove_proc_entry("net/atm",NULL);
808 return -ENOMEM;
809+}
810+
811+void __exit atm_proc_exit(void)
812+{
813+ if (vc) remove_proc_entry("vc",atm_proc_root);
814+ if (lec) remove_proc_entry("lec",atm_proc_root);
815+ if (arp) remove_proc_entry("arp",atm_proc_root);
816+ if (svc) remove_proc_entry("svc",atm_proc_root);
817+ if (pvc) remove_proc_entry("pvc",atm_proc_root);
818+ if (devices) remove_proc_entry("devices",atm_proc_root);
819+ remove_proc_entry("net/atm",NULL);
820 }
821Index: linux/net/atm/pvc.c
822===================================================================
823RCS file: /home/chas/CVSROOT/linux/net/atm/pvc.c,v
824retrieving revision 1.1.1.1
825diff -u -r1.1.1.1 pvc.c
826--- linux/net/atm/pvc.c 20 Feb 2003 13:46:30 -0000 1.1.1.1
827+++ linux/net/atm/pvc.c 1 Mar 2003 14:11:17 -0000
828@@ -15,9 +15,6 @@
829 #include <linux/skbuff.h>
830 #include <linux/bitops.h>
831 #include <net/sock.h> /* for sock_no_* */
832-#ifdef CONFIG_ATM_CLIP
833-#include <net/atmclip.h>
834-#endif
835
836 #include "resources.h" /* devs and vccs */
837 #include "common.h" /* common for PVCs and SVCs */
838@@ -121,23 +118,20 @@
839 */
840
841
842-static int __init atmpvc_init(void)
843+int __init atmpvc_init(void)
844 {
845 int error;
846
847 error = sock_register(&pvc_family_ops);
848 if (error < 0) {
849- printk(KERN_ERR "ATMPVC: can't register (%d)",error);
850+ printk(KERN_ERR "ATMPVC: can't register (%d)", error);
851 return error;
852 }
853-#ifdef CONFIG_ATM_CLIP
854- atm_clip_init();
855-#endif
856-#ifdef CONFIG_PROC_FS
857- error = atm_proc_init();
858- if (error) printk("atm_proc_init fails with %d\n",error);
859-#endif
860- return 0;
861+
862+ return error;
863 }
864
865-module_init(atmpvc_init);
866+void __exit atmpvc_exit(void)
867+{
868+ sock_unregister(PF_ATMPVC);
869+}
870Index: linux/net/atm/svc.c
871===================================================================
872RCS file: /home/chas/CVSROOT/linux/net/atm/svc.c,v
873retrieving revision 1.1.1.1
874diff -u -r1.1.1.1 svc.c
875--- linux/net/atm/svc.c 20 Feb 2003 13:46:30 -0000 1.1.1.1
876+++ linux/net/atm/svc.c 27 Feb 2003 16:48:54 -0000
877@@ -439,13 +439,19 @@
878 * Initialize the ATM SVC protocol family
879 */
880
881-static int __init atmsvc_init(void)
882+int __init atmsvc_init(void)
883 {
884- if (sock_register(&svc_family_ops) < 0) {
885- printk(KERN_ERR "ATMSVC: can't register");
886+ int error;
887+
888+ error = sock_register(&svc_family_ops);
889+ if (error < 0) {
890+ printk(KERN_ERR "ATMSVC: can't register (%d)\n", error);
891 return -1;
892 }
893 return 0;
894 }
895
896-module_init(atmsvc_init);
897+void __exit atmsvc_exit(void)
898+{
899+ sock_unregister(PF_ATMSVC);
900+}
901Index: linux/include/net/atmclip.h
902===================================================================
903RCS file: /home/chas/CVSROOT/linux/include/net/atmclip.h,v
904retrieving revision 1.1.1.1
905diff -u -r1.1.1.1 atmclip.h
906--- linux/include/net/atmclip.h 20 Feb 2003 13:45:58 -0000 1.1.1.1
907+++ linux/include/net/atmclip.h 1 Mar 2003 13:59:31 -0000
908@@ -62,6 +62,16 @@
909 int clip_mkip(struct atm_vcc *vcc,int timeout);
910 int clip_setentry(struct atm_vcc *vcc,u32 ip);
911 int clip_encap(struct atm_vcc *vcc,int mode);
912-void atm_clip_init(void);
913+
914+struct atm_clip_ops {
915+ int (*clip_create)(int number);
916+ int (*clip_mkip)(struct atm_vcc *vcc,int timeout);
917+ int (*clip_setentry)(struct atm_vcc *vcc,u32 ip);
918+ int (*clip_encap)(struct atm_vcc *vcc,int mode);
919+ void (*clip_push)(struct atm_vcc *vcc,struct sk_buff *skb);
920+ int (*atm_init_atmarp)(struct atm_vcc *vcc);
921+ struct neigh_table *clip_tbl;
922+ struct module *owner;
923+};
924
925 #endif
926--- linux-2.4.20/net/atm/clip.c.orig Wed Mar 5 22:54:57 2003
927+++ linux-2.4.20/net/atm/clip.c Thu Mar 6 00:03:50 2003
928@@ -49,7 +49,13 @@
929 static struct timer_list idle_timer;
930 static int start_timer = 1;
931
932-#include "ipcommon.c"
933+const unsigned char llc_oui[] = {
934+ 0xaa, /* DSAP: non-ISO */
935+ 0xaa, /* SSAP: non-ISO */
936+ 0x03, /* Ctrl: Unnumbered Information Command PDU */
937+ 0x00, /* OUI: EtherType */
938+ 0x00,
939+ 0x00 };
940
941 static int to_atmarpd(enum atmarp_ctrl_type type,int itf,unsigned long ip)
942 {
943--- linux-2.4.20/net/atm/ipcommon.c.orig Wed Mar 5 22:54:57 2003
944+++ linux-2.4.20/net/atm/ipcommon.c Thu Mar 6 00:03:48 2003
945@@ -22,15 +22,6 @@
946 #endif
947
948
949-const unsigned char llc_oui[] = {
950- 0xaa, /* DSAP: non-ISO */
951- 0xaa, /* SSAP: non-ISO */
952- 0x03, /* Ctrl: Unnumbered Information Command PDU */
953- 0x00, /* OUI: EtherType */
954- 0x00,
955- 0x00 };
956-
957-
958 /*
959 * skb_migrate appends the list at "from" to "to", emptying "from" in the
960 * process. skb_migrate is atomic with respect to all other skb operations on
961@@ -65,3 +56,5 @@
962 from->qlen = 0;
963 spin_unlock_irqrestore(&from->lock,flags);
964 }
965+
966+EXPORT_SYMBOL(skb_migrate);
967--- linux-2.4.20/net/Config.in.orig Sat Aug 3 02:39:46 2002
968+++ linux-2.4.20/net/Config.in Wed Mar 5 03:16:08 2003
969@@ -31,23 +31,13 @@
970 fi
971 fi
972 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
973- bool 'Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)' CONFIG_ATM
974- if [ "$CONFIG_ATM" = "y" ]; then
975- if [ "$CONFIG_INET" = "y" ]; then
976- bool ' Classical IP over ATM' CONFIG_ATM_CLIP
977- if [ "$CONFIG_ATM_CLIP" = "y" ]; then
978- bool ' Do NOT send ICMP if no neighbour' CONFIG_ATM_CLIP_NO_ICMP
979- fi
980- fi
981- tristate ' LAN Emulation (LANE) support' CONFIG_ATM_LANE
982- if [ "$CONFIG_INET" = "y" -a "$CONFIG_ATM_LANE" != "n" ]; then
983- tristate ' Multi-Protocol Over ATM (MPOA) support' CONFIG_ATM_MPOA
984- fi
985- tristate ' RFC1483/2684 Bridged protocols' CONFIG_ATM_BR2684
986- if [ "$CONFIG_ATM_BR2684" != "n" ]; then
987- bool ' Per-VC IP filter kludge' CONFIG_ATM_BR2684_IPFILTER
988- fi
989- fi
990+ tristate 'Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)' CONFIG_ATM
991+ dep_tristate ' Classical IP over ATM' CONFIG_ATM_CLIP $CONFIG_ATM $CONFIG_INET
992+ dep_mbool ' Do NOT send ICMP if no neighbour' CONFIG_ATM_CLIP_NO_ICMP $CONFIG_ATM_CLIP
993+ dep_tristate ' LAN Emulation (LANE) support' CONFIG_ATM_LANE $CONFIG_ATM $CONFIG_INET
994+ dep_tristate ' Multi-Protocol Over ATM (MPOA) support' CONFIG_ATM_MPOA $CONFIG_ATM_LANE
995+ dep_tristate ' RFC1483/2684 Bridged protocols' CONFIG_ATM_BR2684 $CONFIG_ATM $CONFIG_INET
996+ dep_mbool ' Per-VC IP filter kludge' CONFIG_ATM_BR2684_IPFILTER $CONFIG_ATM_BR2684
997 fi
998 tristate '802.1Q VLAN Support' CONFIG_VLAN_8021Q
999
1000--- linux/arch/alpha/config.in.orig Wed Mar 5 22:24:02 2003
1001+++ linux/arch/alpha/config.in Wed Mar 5 22:24:10 2003
1002@@ -344,7 +344,7 @@
1003 bool 'Network device support' CONFIG_NETDEVICES
1004 if [ "$CONFIG_NETDEVICES" = "y" ]; then
1005 source drivers/net/Config.in
1006- if [ "$CONFIG_ATM" = "y" ]; then
1007+ if [ "$CONFIG_ATM" != "n" ]; then
1008 source drivers/atm/Config.in
1009 fi
1010 fi
1011--- linux/arch/cris/config.in.orig Wed Mar 5 22:24:24 2003
1012+++ linux/arch/cris/config.in Wed Mar 5 22:24:31 2003
1013@@ -198,7 +198,7 @@
1014 bool 'Network device support' CONFIG_NETDEVICES
1015 if [ "$CONFIG_NETDEVICES" = "y" ]; then
1016 source drivers/net/Config.in
1017- if [ "$CONFIG_ATM" = "y" ]; then
1018+ if [ "$CONFIG_ATM" != "n" ]; then
1019 source drivers/atm/Config.in
1020 fi
1021 fi
1022--- linux/arch/i386/config.in.orig Wed Mar 5 22:24:33 2003
1023+++ linux/arch/i386/config.in Wed Mar 5 22:24:39 2003
1024@@ -406,7 +406,7 @@
1025 bool 'Network device support' CONFIG_NETDEVICES
1026 if [ "$CONFIG_NETDEVICES" = "y" ]; then
1027 source drivers/net/Config.in
1028- if [ "$CONFIG_ATM" = "y" ]; then
1029+ if [ "$CONFIG_ATM" != "n" ]; then
1030 source drivers/atm/Config.in
1031 fi
1032 fi
1033--- linux/arch/parisc/config.in.orig Wed Mar 5 22:25:34 2003
1034+++ linux/arch/parisc/config.in Wed Mar 5 22:25:40 2003
1035@@ -144,7 +144,7 @@
1036
1037 if [ "$CONFIG_NETDEVICES" = "y" ]; then
1038 source drivers/net/Config.in
1039- if [ "$CONFIG_ATM" = "y" ]; then
1040+ if [ "$CONFIG_ATM" != "n" ]; then
1041 source drivers/atm/Config.in
1042 fi
1043 fi
1044--- linux/arch/ppc/config.in.orig Wed Mar 5 22:25:42 2003
1045+++ linux/arch/ppc/config.in Wed Mar 5 22:25:48 2003
1046@@ -292,7 +292,7 @@
1047 bool 'Network device support' CONFIG_NETDEVICES
1048 if [ "$CONFIG_NETDEVICES" = "y" ]; then
1049 source drivers/net/Config.in
1050- if [ "$CONFIG_ATM" = "y" ]; then
1051+ if [ "$CONFIG_ATM" != "n" ]; then
1052 source drivers/atm/Config.in
1053 fi
1054 fi
1055--- linux/arch/ppc64/config.in.orig Wed Mar 5 22:25:50 2003
1056+++ linux/arch/ppc64/config.in Wed Mar 5 22:25:55 2003
1057@@ -138,7 +138,7 @@
1058 bool 'Network device support' CONFIG_NETDEVICES
1059 if [ "$CONFIG_NETDEVICES" = "y" ]; then
1060 source drivers/net/Config.in
1061- if [ "$CONFIG_ATM" = "y" ]; then
1062+ if [ "$CONFIG_ATM" != "n" ]; then
1063 source drivers/atm/Config.in
1064 fi
1065 fi
1066--- linux/arch/sh/config.in.orig Wed Mar 5 22:26:08 2003
1067+++ linux/arch/sh/config.in Wed Mar 5 22:26:14 2003
1068@@ -264,7 +264,7 @@
1069 bool 'Network device support' CONFIG_NETDEVICES
1070 if [ "$CONFIG_NETDEVICES" = "y" ]; then
1071 source drivers/net/Config.in
1072- if [ "$CONFIG_ATM" = "y" ]; then
1073+ if [ "$CONFIG_ATM" != "n" ]; then
1074 source drivers/atm/Config.in
1075 fi
1076 fi
1077--- linux/arch/sparc/config.in.orig Wed Mar 5 22:26:16 2003
1078+++ linux/arch/sparc/config.in Wed Mar 5 22:26:32 2003
1079@@ -217,7 +217,7 @@
1080 dep_tristate ' PPP BSD-Compress compression' CONFIG_PPP_BSDCOMP m
1081 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
1082 dep_tristate ' PPP over Ethernet (EXPERIMENTAL)' CONFIG_PPPOE $CONFIG_PPP
1083- if [ "$CONFIG_ATM" = "y" ]; then
1084+ if [ "$CONFIG_ATM" != "n" ]; then
1085 dep_tristate ' PPP over ATM (EXPERIMENTAL)' CONFIG_PPPOATM $CONFIG_PPP
1086 fi
1087 fi
1088@@ -243,7 +243,7 @@
1089 # if [ "$CONFIG_FDDI" = "y" ]; then
1090 # fi
1091
1092- if [ "$CONFIG_ATM" = "y" ]; then
1093+ if [ "$CONFIG_ATM" != "n" ]; then
1094 source drivers/atm/Config.in
1095 fi
1096 fi
1097--- linux/arch/sparc64/config.in.orig Wed Mar 5 22:26:39 2003
1098+++ linux/arch/sparc64/config.in Wed Mar 5 22:26:45 2003
1099@@ -242,7 +242,7 @@
1100 bool 'Network device support' CONFIG_NETDEVICES
1101 if [ "$CONFIG_NETDEVICES" = "y" ]; then
1102 source drivers/net/Config.in
1103- if [ "$CONFIG_ATM" = "y" ]; then
1104+ if [ "$CONFIG_ATM" != "n" ]; then
1105 source drivers/atm/Config.in
1106 fi
1107 fi
1108--- linux/arch/x86_64/config.in.orig Wed Mar 5 22:26:51 2003
1109+++ linux/arch/x86_64/config.in Wed Mar 5 22:27:11 2003
1110@@ -173,7 +173,7 @@
1111 if [ "$CONFIG_NETDEVICES" = "y" ]; then
1112 source drivers/net/Config.in
1113 # seems to be largely not 64bit safe
1114-# if [ "$CONFIG_ATM" = "y" ]; then
1115+# if [ "$CONFIG_ATM" != "n" ]; then
1116 # source drivers/atm/Config.in
1117 # fi
1118 fi
1119--- linux/arch/mips/config-shared.in.orig Wed Mar 5 22:25:13 2003
1120+++ linux/arch/mips/config-shared.in Wed Mar 5 22:25:19 2003
1121@@ -691,7 +691,7 @@
1122 bool 'Network device support' CONFIG_NETDEVICES
1123 if [ "$CONFIG_NETDEVICES" = "y" ]; then
1124 source drivers/net/Config.in
1125- if [ "$CONFIG_ATM" = "y" ]; then
1126+ if [ "$CONFIG_ATM" != "n" ]; then
1127 source drivers/atm/Config.in
1128 fi
1129 fi
9d87a16a
JR
1130--- linux-2.4.20/net/sched/Config.in.orig Thu Mar 6 17:20:59 2003
1131+++ linux-2.4.20/net/sched/Config.in Thu Mar 6 17:46:02 2003
1132@@ -6,9 +6,7 @@
1133 tristate ' CSZ packet scheduler' CONFIG_NET_SCH_CSZ
1134 #tristate ' H-PFQ packet scheduler' CONFIG_NET_SCH_HPFQ
1135 #tristate ' H-FSC packet scheduler' CONFIG_NET_SCH_HFCS
1136-if [ "$CONFIG_ATM" = "y" ]; then
1137- bool ' ATM pseudo-scheduler' CONFIG_NET_SCH_ATM
1138-fi
1139+dep_tristate ' ATM pseudo-scheduler' CONFIG_NET_SCH_ATM $CONFIG_ATM
1140 tristate ' The simplest PRIO pseudoscheduler' CONFIG_NET_SCH_PRIO
1141 tristate ' WRR packet scheduler' CONFIG_NET_SCH_WRR
1142 tristate ' RED queue' CONFIG_NET_SCH_RED
b5a39c4d
JR
1143-
1144To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
1145the body of a message to majordomo@vger.kernel.org
1146More majordomo info at http://vger.kernel.org/majordomo-info.html
1147Please read the FAQ at http://www.tux.org/lkml/
This page took 3.746311 seconds and 4 git commands to generate.