net/mlx4_en: Fix mixed PFC and Global pause user control requests
[pandora-kernel.git] / net / 8021q / vlan.c
1 /*
2  * INET         802.1Q VLAN
3  *              Ethernet-type device handling.
4  *
5  * Authors:     Ben Greear <greearb@candelatech.com>
6  *              Please send support related email to: netdev@vger.kernel.org
7  *              VLAN Home Page: http://www.candelatech.com/~greear/vlan.html
8  *
9  * Fixes:
10  *              Fix for packet capture - Nick Eggleston <nick@dccinc.com>;
11  *              Add HW acceleration hooks - David S. Miller <davem@redhat.com>;
12  *              Correct all the locking - David S. Miller <davem@redhat.com>;
13  *              Use hash table for VLAN groups - David S. Miller <davem@redhat.com>
14  *
15  *              This program is free software; you can redistribute it and/or
16  *              modify it under the terms of the GNU General Public License
17  *              as published by the Free Software Foundation; either version
18  *              2 of the License, or (at your option) any later version.
19  */
20
21 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
22
23 #include <linux/capability.h>
24 #include <linux/module.h>
25 #include <linux/netdevice.h>
26 #include <linux/skbuff.h>
27 #include <linux/slab.h>
28 #include <linux/init.h>
29 #include <linux/rculist.h>
30 #include <net/p8022.h>
31 #include <net/arp.h>
32 #include <linux/rtnetlink.h>
33 #include <linux/notifier.h>
34 #include <net/rtnetlink.h>
35 #include <net/net_namespace.h>
36 #include <net/netns/generic.h>
37 #include <asm/uaccess.h>
38
39 #include <linux/if_vlan.h>
40 #include "vlan.h"
41 #include "vlanproc.h"
42
43 #define DRV_VERSION "1.8"
44
45 /* Global VLAN variables */
46
47 int vlan_net_id __read_mostly;
48
49 const char vlan_fullname[] = "802.1Q VLAN Support";
50 const char vlan_version[] = DRV_VERSION;
51
52 /* End of global variables definitions. */
53
54 static void vlan_group_free(struct vlan_group *grp)
55 {
56         int i;
57
58         for (i = 0; i < VLAN_GROUP_ARRAY_SPLIT_PARTS; i++)
59                 kfree(grp->vlan_devices_arrays[i]);
60         kfree(grp);
61 }
62
63 static struct vlan_group *vlan_group_alloc(struct net_device *real_dev)
64 {
65         struct vlan_group *grp;
66
67         grp = kzalloc(sizeof(struct vlan_group), GFP_KERNEL);
68         if (!grp)
69                 return NULL;
70
71         grp->real_dev = real_dev;
72         return grp;
73 }
74
75 static int vlan_group_prealloc_vid(struct vlan_group *vg, u16 vlan_id)
76 {
77         struct net_device **array;
78         unsigned int size;
79
80         ASSERT_RTNL();
81
82         array = vg->vlan_devices_arrays[vlan_id / VLAN_GROUP_ARRAY_PART_LEN];
83         if (array != NULL)
84                 return 0;
85
86         size = sizeof(struct net_device *) * VLAN_GROUP_ARRAY_PART_LEN;
87         array = kzalloc(size, GFP_KERNEL);
88         if (array == NULL)
89                 return -ENOBUFS;
90
91         vg->vlan_devices_arrays[vlan_id / VLAN_GROUP_ARRAY_PART_LEN] = array;
92         return 0;
93 }
94
95 static void vlan_rcu_free(struct rcu_head *rcu)
96 {
97         vlan_group_free(container_of(rcu, struct vlan_group, rcu));
98 }
99
100 void unregister_vlan_dev(struct net_device *dev, struct list_head *head)
101 {
102         struct vlan_dev_info *vlan = vlan_dev_info(dev);
103         struct net_device *real_dev = vlan->real_dev;
104         const struct net_device_ops *ops = real_dev->netdev_ops;
105         struct vlan_group *grp;
106         u16 vlan_id = vlan->vlan_id;
107
108         ASSERT_RTNL();
109
110         grp = rtnl_dereference(real_dev->vlgrp);
111         BUG_ON(!grp);
112
113         grp->nr_vlans--;
114
115         if (vlan->flags & VLAN_FLAG_GVRP)
116                 vlan_gvrp_request_leave(dev);
117
118         vlan_group_set_device(grp, vlan_id, NULL);
119         /* Because unregister_netdevice_queue() makes sure at least one rcu
120          * grace period is respected before device freeing,
121          * we dont need to call synchronize_net() here.
122          */
123         unregister_netdevice_queue(dev, head);
124
125         /* If the group is now empty, kill off the group. */
126         if (grp->nr_vlans == 0) {
127                 vlan_gvrp_uninit_applicant(real_dev);
128
129                 RCU_INIT_POINTER(real_dev->vlgrp, NULL);
130
131                 /* Free the group, after all cpu's are done. */
132                 call_rcu(&grp->rcu, vlan_rcu_free);
133         }
134
135         if (real_dev->features & NETIF_F_HW_VLAN_FILTER)
136                 ops->ndo_vlan_rx_kill_vid(real_dev, vlan_id);
137
138         /* Get rid of the vlan's reference to real_dev */
139         dev_put(real_dev);
140 }
141
142 int vlan_check_real_dev(struct net_device *real_dev, u16 vlan_id)
143 {
144         const char *name = real_dev->name;
145         const struct net_device_ops *ops = real_dev->netdev_ops;
146
147         if (real_dev->features & NETIF_F_VLAN_CHALLENGED) {
148                 pr_info("VLANs not supported on %s\n", name);
149                 return -EOPNOTSUPP;
150         }
151
152         if ((real_dev->features & NETIF_F_HW_VLAN_FILTER) &&
153             (!ops->ndo_vlan_rx_add_vid || !ops->ndo_vlan_rx_kill_vid)) {
154                 pr_info("Device %s has buggy VLAN hw accel\n", name);
155                 return -EOPNOTSUPP;
156         }
157
158         if (vlan_find_dev(real_dev, vlan_id) != NULL)
159                 return -EEXIST;
160
161         return 0;
162 }
163
164 int register_vlan_dev(struct net_device *dev)
165 {
166         struct vlan_dev_info *vlan = vlan_dev_info(dev);
167         struct net_device *real_dev = vlan->real_dev;
168         const struct net_device_ops *ops = real_dev->netdev_ops;
169         u16 vlan_id = vlan->vlan_id;
170         struct vlan_group *grp, *ngrp = NULL;
171         int err;
172
173         grp = rtnl_dereference(real_dev->vlgrp);
174         if (!grp) {
175                 ngrp = grp = vlan_group_alloc(real_dev);
176                 if (!grp)
177                         return -ENOBUFS;
178                 err = vlan_gvrp_init_applicant(real_dev);
179                 if (err < 0)
180                         goto out_free_group;
181         }
182
183         err = vlan_group_prealloc_vid(grp, vlan_id);
184         if (err < 0)
185                 goto out_uninit_applicant;
186
187         err = register_netdevice(dev);
188         if (err < 0)
189                 goto out_uninit_applicant;
190
191         /* Account for reference in struct vlan_dev_info */
192         dev_hold(real_dev);
193
194         netif_stacked_transfer_operstate(real_dev, dev);
195         linkwatch_fire_event(dev); /* _MUST_ call rfc2863_policy() */
196
197         /* So, got the sucker initialized, now lets place
198          * it into our local structure.
199          */
200         vlan_group_set_device(grp, vlan_id, dev);
201         grp->nr_vlans++;
202
203         if (ngrp) {
204                 rcu_assign_pointer(real_dev->vlgrp, ngrp);
205         }
206         if (real_dev->features & NETIF_F_HW_VLAN_FILTER)
207                 ops->ndo_vlan_rx_add_vid(real_dev, vlan_id);
208
209         return 0;
210
211 out_uninit_applicant:
212         if (ngrp)
213                 vlan_gvrp_uninit_applicant(real_dev);
214 out_free_group:
215         if (ngrp) {
216                 /* Free the group, after all cpu's are done. */
217                 call_rcu(&ngrp->rcu, vlan_rcu_free);
218         }
219         return err;
220 }
221
222 /*  Attach a VLAN device to a mac address (ie Ethernet Card).
223  *  Returns 0 if the device was created or a negative error code otherwise.
224  */
225 static int register_vlan_device(struct net_device *real_dev, u16 vlan_id)
226 {
227         struct net_device *new_dev;
228         struct net *net = dev_net(real_dev);
229         struct vlan_net *vn = net_generic(net, vlan_net_id);
230         char name[IFNAMSIZ];
231         int err;
232
233         if (vlan_id >= VLAN_VID_MASK)
234                 return -ERANGE;
235
236         err = vlan_check_real_dev(real_dev, vlan_id);
237         if (err < 0)
238                 return err;
239
240         /* Gotta set up the fields for the device. */
241         switch (vn->name_type) {
242         case VLAN_NAME_TYPE_RAW_PLUS_VID:
243                 /* name will look like:  eth1.0005 */
244                 snprintf(name, IFNAMSIZ, "%s.%.4i", real_dev->name, vlan_id);
245                 break;
246         case VLAN_NAME_TYPE_PLUS_VID_NO_PAD:
247                 /* Put our vlan.VID in the name.
248                  * Name will look like:  vlan5
249                  */
250                 snprintf(name, IFNAMSIZ, "vlan%i", vlan_id);
251                 break;
252         case VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD:
253                 /* Put our vlan.VID in the name.
254                  * Name will look like:  eth0.5
255                  */
256                 snprintf(name, IFNAMSIZ, "%s.%i", real_dev->name, vlan_id);
257                 break;
258         case VLAN_NAME_TYPE_PLUS_VID:
259                 /* Put our vlan.VID in the name.
260                  * Name will look like:  vlan0005
261                  */
262         default:
263                 snprintf(name, IFNAMSIZ, "vlan%.4i", vlan_id);
264         }
265
266         new_dev = alloc_netdev(sizeof(struct vlan_dev_info), name, vlan_setup);
267
268         if (new_dev == NULL)
269                 return -ENOBUFS;
270
271         dev_net_set(new_dev, net);
272         /* need 4 bytes for extra VLAN header info,
273          * hope the underlying device can handle it.
274          */
275         new_dev->mtu = real_dev->mtu;
276
277         vlan_dev_info(new_dev)->vlan_id = vlan_id;
278         vlan_dev_info(new_dev)->real_dev = real_dev;
279         vlan_dev_info(new_dev)->dent = NULL;
280         vlan_dev_info(new_dev)->flags = VLAN_FLAG_REORDER_HDR;
281
282         new_dev->rtnl_link_ops = &vlan_link_ops;
283         err = register_vlan_dev(new_dev);
284         if (err < 0)
285                 goto out_free_newdev;
286
287         return 0;
288
289 out_free_newdev:
290         free_netdev(new_dev);
291         return err;
292 }
293
294 static void vlan_sync_address(struct net_device *dev,
295                               struct net_device *vlandev)
296 {
297         struct vlan_dev_info *vlan = vlan_dev_info(vlandev);
298
299         /* May be called without an actual change */
300         if (!compare_ether_addr(vlan->real_dev_addr, dev->dev_addr))
301                 return;
302
303         /* vlan address was different from the old address and is equal to
304          * the new address */
305         if (compare_ether_addr(vlandev->dev_addr, vlan->real_dev_addr) &&
306             !compare_ether_addr(vlandev->dev_addr, dev->dev_addr))
307                 dev_uc_del(dev, vlandev->dev_addr);
308
309         /* vlan address was equal to the old address and is different from
310          * the new address */
311         if (!compare_ether_addr(vlandev->dev_addr, vlan->real_dev_addr) &&
312             compare_ether_addr(vlandev->dev_addr, dev->dev_addr))
313                 dev_uc_add(dev, vlandev->dev_addr);
314
315         memcpy(vlan->real_dev_addr, dev->dev_addr, ETH_ALEN);
316 }
317
318 static void vlan_transfer_features(struct net_device *dev,
319                                    struct net_device *vlandev)
320 {
321         vlandev->gso_max_size = dev->gso_max_size;
322
323         if (dev->features & NETIF_F_HW_VLAN_TX)
324                 vlandev->hard_header_len = dev->hard_header_len;
325         else
326                 vlandev->hard_header_len = dev->hard_header_len + VLAN_HLEN;
327
328 #if defined(CONFIG_FCOE) || defined(CONFIG_FCOE_MODULE)
329         vlandev->fcoe_ddp_xid = dev->fcoe_ddp_xid;
330 #endif
331
332         netdev_update_features(vlandev);
333 }
334
335 static void __vlan_device_event(struct net_device *dev, unsigned long event)
336 {
337         switch (event) {
338         case NETDEV_CHANGENAME:
339                 vlan_proc_rem_dev(dev);
340                 if (vlan_proc_add_dev(dev) < 0)
341                         pr_warn("failed to change proc name for %s\n",
342                                 dev->name);
343                 break;
344         case NETDEV_REGISTER:
345                 if (vlan_proc_add_dev(dev) < 0)
346                         pr_warn("failed to add proc entry for %s\n", dev->name);
347                 break;
348         case NETDEV_UNREGISTER:
349                 vlan_proc_rem_dev(dev);
350                 break;
351         }
352 }
353
354 static int vlan_device_event(struct notifier_block *unused, unsigned long event,
355                              void *ptr)
356 {
357         struct net_device *dev = ptr;
358         struct vlan_group *grp;
359         int i, flgs;
360         struct net_device *vlandev;
361         struct vlan_dev_info *vlan;
362         LIST_HEAD(list);
363
364         if (is_vlan_dev(dev))
365                 __vlan_device_event(dev, event);
366
367         if ((event == NETDEV_UP) &&
368             (dev->features & NETIF_F_HW_VLAN_FILTER) &&
369             dev->netdev_ops->ndo_vlan_rx_add_vid) {
370                 pr_info("adding VLAN 0 to HW filter on device %s\n",
371                         dev->name);
372                 dev->netdev_ops->ndo_vlan_rx_add_vid(dev, 0);
373         }
374
375         grp = rtnl_dereference(dev->vlgrp);
376         if (!grp)
377                 goto out;
378
379         /* It is OK that we do not hold the group lock right now,
380          * as we run under the RTNL lock.
381          */
382
383         switch (event) {
384         case NETDEV_CHANGE:
385                 /* Propagate real device state to vlan devices */
386                 for (i = 0; i < VLAN_N_VID; i++) {
387                         vlandev = vlan_group_get_device(grp, i);
388                         if (!vlandev)
389                                 continue;
390
391                         netif_stacked_transfer_operstate(dev, vlandev);
392                 }
393                 break;
394
395         case NETDEV_CHANGEADDR:
396                 /* Adjust unicast filters on underlying device */
397                 for (i = 0; i < VLAN_N_VID; i++) {
398                         vlandev = vlan_group_get_device(grp, i);
399                         if (!vlandev)
400                                 continue;
401
402                         flgs = vlandev->flags;
403                         if (!(flgs & IFF_UP))
404                                 continue;
405
406                         vlan_sync_address(dev, vlandev);
407                 }
408                 break;
409
410         case NETDEV_CHANGEMTU:
411                 for (i = 0; i < VLAN_N_VID; i++) {
412                         vlandev = vlan_group_get_device(grp, i);
413                         if (!vlandev)
414                                 continue;
415
416                         if (vlandev->mtu <= dev->mtu)
417                                 continue;
418
419                         dev_set_mtu(vlandev, dev->mtu);
420                 }
421                 break;
422
423         case NETDEV_FEAT_CHANGE:
424                 /* Propagate device features to underlying device */
425                 for (i = 0; i < VLAN_N_VID; i++) {
426                         vlandev = vlan_group_get_device(grp, i);
427                         if (!vlandev)
428                                 continue;
429
430                         vlan_transfer_features(dev, vlandev);
431                 }
432
433                 break;
434
435         case NETDEV_DOWN:
436                 /* Put all VLANs for this dev in the down state too.  */
437                 for (i = 0; i < VLAN_N_VID; i++) {
438                         vlandev = vlan_group_get_device(grp, i);
439                         if (!vlandev)
440                                 continue;
441
442                         flgs = vlandev->flags;
443                         if (!(flgs & IFF_UP))
444                                 continue;
445
446                         vlan = vlan_dev_info(vlandev);
447                         if (!(vlan->flags & VLAN_FLAG_LOOSE_BINDING))
448                                 dev_change_flags(vlandev, flgs & ~IFF_UP);
449                         netif_stacked_transfer_operstate(dev, vlandev);
450                 }
451                 break;
452
453         case NETDEV_UP:
454                 /* Put all VLANs for this dev in the up state too.  */
455                 for (i = 0; i < VLAN_N_VID; i++) {
456                         vlandev = vlan_group_get_device(grp, i);
457                         if (!vlandev)
458                                 continue;
459
460                         flgs = vlandev->flags;
461                         if (flgs & IFF_UP)
462                                 continue;
463
464                         vlan = vlan_dev_info(vlandev);
465                         if (!(vlan->flags & VLAN_FLAG_LOOSE_BINDING))
466                                 dev_change_flags(vlandev, flgs | IFF_UP);
467                         netif_stacked_transfer_operstate(dev, vlandev);
468                 }
469                 break;
470
471         case NETDEV_UNREGISTER:
472                 /* twiddle thumbs on netns device moves */
473                 if (dev->reg_state != NETREG_UNREGISTERING)
474                         break;
475
476                 for (i = 0; i < VLAN_N_VID; i++) {
477                         vlandev = vlan_group_get_device(grp, i);
478                         if (!vlandev)
479                                 continue;
480
481                         /* unregistration of last vlan destroys group, abort
482                          * afterwards */
483                         if (grp->nr_vlans == 1)
484                                 i = VLAN_N_VID;
485
486                         unregister_vlan_dev(vlandev, &list);
487                 }
488                 unregister_netdevice_many(&list);
489                 break;
490
491         case NETDEV_PRE_TYPE_CHANGE:
492                 /* Forbid underlaying device to change its type. */
493                 return NOTIFY_BAD;
494
495         case NETDEV_NOTIFY_PEERS:
496         case NETDEV_BONDING_FAILOVER:
497                 /* Propagate to vlan devices */
498                 for (i = 0; i < VLAN_N_VID; i++) {
499                         vlandev = vlan_group_get_device(grp, i);
500                         if (!vlandev)
501                                 continue;
502
503                         call_netdevice_notifiers(event, vlandev);
504                 }
505                 break;
506         }
507
508 out:
509         return NOTIFY_DONE;
510 }
511
512 static struct notifier_block vlan_notifier_block __read_mostly = {
513         .notifier_call = vlan_device_event,
514 };
515
516 /*
517  *      VLAN IOCTL handler.
518  *      o execute requested action or pass command to the device driver
519  *   arg is really a struct vlan_ioctl_args __user *.
520  */
521 static int vlan_ioctl_handler(struct net *net, void __user *arg)
522 {
523         int err;
524         struct vlan_ioctl_args args;
525         struct net_device *dev = NULL;
526
527         if (copy_from_user(&args, arg, sizeof(struct vlan_ioctl_args)))
528                 return -EFAULT;
529
530         /* Null terminate this sucker, just in case. */
531         args.device1[23] = 0;
532         args.u.device2[23] = 0;
533
534         rtnl_lock();
535
536         switch (args.cmd) {
537         case SET_VLAN_INGRESS_PRIORITY_CMD:
538         case SET_VLAN_EGRESS_PRIORITY_CMD:
539         case SET_VLAN_FLAG_CMD:
540         case ADD_VLAN_CMD:
541         case DEL_VLAN_CMD:
542         case GET_VLAN_REALDEV_NAME_CMD:
543         case GET_VLAN_VID_CMD:
544                 err = -ENODEV;
545                 dev = __dev_get_by_name(net, args.device1);
546                 if (!dev)
547                         goto out;
548
549                 err = -EINVAL;
550                 if (args.cmd != ADD_VLAN_CMD && !is_vlan_dev(dev))
551                         goto out;
552         }
553
554         switch (args.cmd) {
555         case SET_VLAN_INGRESS_PRIORITY_CMD:
556                 err = -EPERM;
557                 if (!capable(CAP_NET_ADMIN))
558                         break;
559                 vlan_dev_set_ingress_priority(dev,
560                                               args.u.skb_priority,
561                                               args.vlan_qos);
562                 err = 0;
563                 break;
564
565         case SET_VLAN_EGRESS_PRIORITY_CMD:
566                 err = -EPERM;
567                 if (!capable(CAP_NET_ADMIN))
568                         break;
569                 err = vlan_dev_set_egress_priority(dev,
570                                                    args.u.skb_priority,
571                                                    args.vlan_qos);
572                 break;
573
574         case SET_VLAN_FLAG_CMD:
575                 err = -EPERM;
576                 if (!capable(CAP_NET_ADMIN))
577                         break;
578                 err = vlan_dev_change_flags(dev,
579                                             args.vlan_qos ? args.u.flag : 0,
580                                             args.u.flag);
581                 break;
582
583         case SET_VLAN_NAME_TYPE_CMD:
584                 err = -EPERM;
585                 if (!capable(CAP_NET_ADMIN))
586                         break;
587                 if ((args.u.name_type >= 0) &&
588                     (args.u.name_type < VLAN_NAME_TYPE_HIGHEST)) {
589                         struct vlan_net *vn;
590
591                         vn = net_generic(net, vlan_net_id);
592                         vn->name_type = args.u.name_type;
593                         err = 0;
594                 } else {
595                         err = -EINVAL;
596                 }
597                 break;
598
599         case ADD_VLAN_CMD:
600                 err = -EPERM;
601                 if (!capable(CAP_NET_ADMIN))
602                         break;
603                 err = register_vlan_device(dev, args.u.VID);
604                 break;
605
606         case DEL_VLAN_CMD:
607                 err = -EPERM;
608                 if (!capable(CAP_NET_ADMIN))
609                         break;
610                 unregister_vlan_dev(dev, NULL);
611                 err = 0;
612                 break;
613
614         case GET_VLAN_REALDEV_NAME_CMD:
615                 err = 0;
616                 vlan_dev_get_realdev_name(dev, args.u.device2);
617                 if (copy_to_user(arg, &args,
618                                  sizeof(struct vlan_ioctl_args)))
619                         err = -EFAULT;
620                 break;
621
622         case GET_VLAN_VID_CMD:
623                 err = 0;
624                 args.u.VID = vlan_dev_vlan_id(dev);
625                 if (copy_to_user(arg, &args,
626                                  sizeof(struct vlan_ioctl_args)))
627                       err = -EFAULT;
628                 break;
629
630         default:
631                 err = -EOPNOTSUPP;
632                 break;
633         }
634 out:
635         rtnl_unlock();
636         return err;
637 }
638
639 static int __net_init vlan_init_net(struct net *net)
640 {
641         struct vlan_net *vn = net_generic(net, vlan_net_id);
642         int err;
643
644         vn->name_type = VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD;
645
646         err = vlan_proc_init(net);
647
648         return err;
649 }
650
651 static void __net_exit vlan_exit_net(struct net *net)
652 {
653         vlan_proc_cleanup(net);
654 }
655
656 static struct pernet_operations vlan_net_ops = {
657         .init = vlan_init_net,
658         .exit = vlan_exit_net,
659         .id   = &vlan_net_id,
660         .size = sizeof(struct vlan_net),
661 };
662
663 static int __init vlan_proto_init(void)
664 {
665         int err;
666
667         pr_info("%s v%s\n", vlan_fullname, vlan_version);
668
669         err = register_pernet_subsys(&vlan_net_ops);
670         if (err < 0)
671                 goto err0;
672
673         err = register_netdevice_notifier(&vlan_notifier_block);
674         if (err < 0)
675                 goto err2;
676
677         err = vlan_gvrp_init();
678         if (err < 0)
679                 goto err3;
680
681         err = vlan_netlink_init();
682         if (err < 0)
683                 goto err4;
684
685         vlan_ioctl_set(vlan_ioctl_handler);
686         return 0;
687
688 err4:
689         vlan_gvrp_uninit();
690 err3:
691         unregister_netdevice_notifier(&vlan_notifier_block);
692 err2:
693         unregister_pernet_subsys(&vlan_net_ops);
694 err0:
695         return err;
696 }
697
698 static void __exit vlan_cleanup_module(void)
699 {
700         vlan_ioctl_set(NULL);
701         vlan_netlink_fini();
702
703         unregister_netdevice_notifier(&vlan_notifier_block);
704
705         unregister_pernet_subsys(&vlan_net_ops);
706         rcu_barrier(); /* Wait for completion of call_rcu()'s */
707
708         vlan_gvrp_uninit();
709 }
710
711 module_init(vlan_proto_init);
712 module_exit(vlan_cleanup_module);
713
714 MODULE_LICENSE("GPL");
715 MODULE_VERSION(DRV_VERSION);