]>
Commit | Line | Data |
---|---|---|
b72f6f51 AA |
1 | /* This program is free software; you can redistribute it and/or modify |
2 | * it under the terms of the GNU General Public License version 2 | |
3 | * as published by the Free Software Foundation. | |
4 | * | |
5 | * This program is distributed in the hope that it will be useful, | |
6 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
7 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
8 | * GNU General Public License for more details. | |
9 | * | |
10 | * Authors: | |
11 | * (C) 2015 Pengutronix, Alexander Aring <aar@pengutronix.de> | |
12 | */ | |
13 | ||
4ae935c1 AA |
14 | #include <linux/module.h> |
15 | ||
b72f6f51 AA |
16 | #include <net/6lowpan.h> |
17 | ||
b1815fd9 AA |
18 | #include "6lowpan_i.h" |
19 | ||
00f59314 AA |
20 | int lowpan_register_netdevice(struct net_device *dev, |
21 | enum lowpan_lltypes lltype) | |
b72f6f51 | 22 | { |
b1815fd9 AA |
23 | int ret; |
24 | ||
4d6a6aed AA |
25 | dev->addr_len = EUI64_ADDR_LEN; |
26 | dev->type = ARPHRD_6LOWPAN; | |
27 | dev->mtu = IPV6_MIN_MTU; | |
28 | dev->priv_flags |= IFF_NO_QUEUE; | |
29 | ||
b72f6f51 | 30 | lowpan_priv(dev)->lltype = lltype; |
00f59314 | 31 | |
b1815fd9 AA |
32 | ret = lowpan_dev_debugfs_init(dev); |
33 | if (ret < 0) | |
34 | return ret; | |
35 | ||
36 | ret = register_netdevice(dev); | |
37 | if (ret < 0) | |
38 | lowpan_dev_debugfs_exit(dev); | |
39 | ||
40 | return ret; | |
00f59314 AA |
41 | } |
42 | EXPORT_SYMBOL(lowpan_register_netdevice); | |
43 | ||
44 | int lowpan_register_netdev(struct net_device *dev, | |
45 | enum lowpan_lltypes lltype) | |
46 | { | |
47 | int ret; | |
48 | ||
49 | rtnl_lock(); | |
50 | ret = lowpan_register_netdevice(dev, lltype); | |
51 | rtnl_unlock(); | |
52 | return ret; | |
53 | } | |
54 | EXPORT_SYMBOL(lowpan_register_netdev); | |
55 | ||
56 | void lowpan_unregister_netdevice(struct net_device *dev) | |
57 | { | |
58 | unregister_netdevice(dev); | |
b1815fd9 | 59 | lowpan_dev_debugfs_exit(dev); |
00f59314 AA |
60 | } |
61 | EXPORT_SYMBOL(lowpan_unregister_netdevice); | |
62 | ||
63 | void lowpan_unregister_netdev(struct net_device *dev) | |
64 | { | |
65 | rtnl_lock(); | |
66 | lowpan_unregister_netdevice(dev); | |
67 | rtnl_unlock(); | |
b72f6f51 | 68 | } |
00f59314 | 69 | EXPORT_SYMBOL(lowpan_unregister_netdev); |
4ae935c1 AA |
70 | |
71 | static int __init lowpan_module_init(void) | |
72 | { | |
b1815fd9 AA |
73 | int ret; |
74 | ||
75 | ret = lowpan_debugfs_init(); | |
76 | if (ret < 0) | |
77 | return ret; | |
78 | ||
4ae935c1 AA |
79 | request_module_nowait("ipv6"); |
80 | ||
81 | request_module_nowait("nhc_dest"); | |
82 | request_module_nowait("nhc_fragment"); | |
83 | request_module_nowait("nhc_hop"); | |
84 | request_module_nowait("nhc_ipv6"); | |
85 | request_module_nowait("nhc_mobility"); | |
86 | request_module_nowait("nhc_routing"); | |
87 | request_module_nowait("nhc_udp"); | |
88 | ||
89 | return 0; | |
90 | } | |
b1815fd9 AA |
91 | |
92 | static void __exit lowpan_module_exit(void) | |
93 | { | |
94 | lowpan_debugfs_exit(); | |
95 | } | |
96 | ||
4ae935c1 | 97 | module_init(lowpan_module_init); |
b1815fd9 | 98 | module_exit(lowpan_module_exit); |
4ae935c1 AA |
99 | |
100 | MODULE_LICENSE("GPL"); |