24 #include <linux/net.h>
25 #include <linux/capability.h>
26 #include <linux/module.h>
27 #include <linux/if_arp.h>
30 #include <linux/list.h>
31 #include <linux/slab.h>
51 u16 pan_id, short_addr;
62 if (addr->
pan_id == 0xffff ||
77 if (pan_id == addr->
pan_id &&
88 pr_warning(
"Unsupported ieee802154 address type: %d\n",
96 static int ieee802154_sock_release(
struct socket *
sock)
98 struct sock *
sk = sock->
sk;
102 sk->sk_prot->close(sk, 0);
106 static int ieee802154_sock_sendmsg(
struct kiocb *
iocb,
struct socket *sock,
109 struct sock *sk = sock->
sk;
111 return sk->sk_prot->sendmsg(iocb, sk, msg, len);
117 struct sock *sk = sock->
sk;
119 if (sk->sk_prot->bind)
120 return sk->sk_prot->bind(sk, uaddr, addr_len);
125 static int ieee802154_sock_connect(
struct socket *sock,
struct sockaddr *uaddr,
126 int addr_len,
int flags)
128 struct sock *sk = sock->
sk;
134 return sk->sk_prot->disconnect(sk, flags);
136 return sk->sk_prot->connect(sk, uaddr, addr_len);
139 static int ieee802154_dev_ioctl(
struct sock *sk,
struct ifreq __user *
arg,
151 dev_load(sock_net(sk), ifr.ifr_name);
158 ret = dev->
netdev_ops->ndo_do_ioctl(dev, &ifr, cmd);
167 static int ieee802154_sock_ioctl(
struct socket *sock,
unsigned int cmd,
170 struct sock *sk = sock->
sk;
179 return ieee802154_dev_ioctl(sk, (
struct ifreq __user *)arg,
182 if (!sk->sk_prot->ioctl)
184 return sk->sk_prot->ioctl(sk, cmd, arg);
188 static const struct proto_ops ieee802154_raw_ops = {
191 .release = ieee802154_sock_release,
192 .bind = ieee802154_sock_bind,
193 .connect = ieee802154_sock_connect,
198 .ioctl = ieee802154_sock_ioctl,
203 .sendmsg = ieee802154_sock_sendmsg,
213 static const struct proto_ops ieee802154_dgram_ops = {
216 .release = ieee802154_sock_release,
217 .bind = ieee802154_sock_bind,
218 .connect = ieee802154_sock_connect,
223 .ioctl = ieee802154_sock_ioctl,
228 .sendmsg = ieee802154_sock_sendmsg,
243 static int ieee802154_create(
struct net *
net,
struct socket *sock,
254 switch (sock->
type) {
257 ops = &ieee802154_raw_ops;
261 ops = &ieee802154_dgram_ops;
283 if (sk->sk_prot->hash)
284 sk->sk_prot->hash(sk);
286 if (sk->sk_prot->init) {
287 rc = sk->sk_prot->init(sk);
297 .create = ieee802154_create,
304 if (!netif_running(dev))
306 pr_debug(
"got frame, type %d, dev %p\n", dev->
type, dev);
311 if (!net_eq(dev_net(dev), &
init_net))
328 static struct packet_type ieee802154_packet_type = {
330 .func = ieee802154_rcv,
333 static int __init af_ieee802154_init(
void)
361 static void __exit af_ieee802154_remove(
void)