socket.c (7ae9fb1b7ecbb5d85d07857943f677fd1a559b18) socket.c (e1d001fa5b477c4da46a29be1fcece91db7c7c6f)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * IEEE802154.4 socket interface
4 *
5 * Copyright 2007, 2008 Siemens AG
6 *
7 * Written by:
8 * Sergey Lapin <slapin@ossfans.org>

--- 148 unchanged lines hidden (view full) ---

157 switch (cmd) {
158 case SIOCGIFADDR:
159 case SIOCSIFADDR:
160 return ieee802154_dev_ioctl(sk, (struct ifreq __user *)arg,
161 cmd);
162 default:
163 if (!sk->sk_prot->ioctl)
164 return -ENOIOCTLCMD;
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * IEEE802154.4 socket interface
4 *
5 * Copyright 2007, 2008 Siemens AG
6 *
7 * Written by:
8 * Sergey Lapin <slapin@ossfans.org>

--- 148 unchanged lines hidden (view full) ---

157 switch (cmd) {
158 case SIOCGIFADDR:
159 case SIOCSIFADDR:
160 return ieee802154_dev_ioctl(sk, (struct ifreq __user *)arg,
161 cmd);
162 default:
163 if (!sk->sk_prot->ioctl)
164 return -ENOIOCTLCMD;
165 return sk->sk_prot->ioctl(sk, cmd, arg);
165 return sk_ioctl(sk, cmd, (void __user *)arg);
166 }
167}
168
169/* RAW Sockets (802.15.4 created in userspace) */
170static HLIST_HEAD(raw_head);
171static DEFINE_RWLOCK(raw_lock);
172
173static int raw_hash(struct sock *sk)

--- 352 unchanged lines hidden (view full) ---

526out_put:
527 dev_put(dev);
528out:
529 release_sock(sk);
530
531 return err;
532}
533
166 }
167}
168
169/* RAW Sockets (802.15.4 created in userspace) */
170static HLIST_HEAD(raw_head);
171static DEFINE_RWLOCK(raw_lock);
172
173static int raw_hash(struct sock *sk)

--- 352 unchanged lines hidden (view full) ---

526out_put:
527 dev_put(dev);
528out:
529 release_sock(sk);
530
531 return err;
532}
533
534static int dgram_ioctl(struct sock *sk, int cmd, unsigned long arg)
534static int dgram_ioctl(struct sock *sk, int cmd, int *karg)
535{
536 switch (cmd) {
537 case SIOCOUTQ:
538 {
535{
536 switch (cmd) {
537 case SIOCOUTQ:
538 {
539 int amount = sk_wmem_alloc_get(sk);
539 *karg = sk_wmem_alloc_get(sk);
540
540
541 return put_user(amount, (int __user *)arg);
541 return 0;
542 }
543
544 case SIOCINQ:
545 {
546 struct sk_buff *skb;
542 }
543
544 case SIOCINQ:
545 {
546 struct sk_buff *skb;
547 unsigned long amount;
548
547
549 amount = 0;
548 *karg = 0;
550 spin_lock_bh(&sk->sk_receive_queue.lock);
551 skb = skb_peek(&sk->sk_receive_queue);
552 if (skb) {
553 /* We will only return the amount
554 * of this packet since that is all
555 * that will be read.
556 */
549 spin_lock_bh(&sk->sk_receive_queue.lock);
550 skb = skb_peek(&sk->sk_receive_queue);
551 if (skb) {
552 /* We will only return the amount
553 * of this packet since that is all
554 * that will be read.
555 */
557 amount = skb->len - ieee802154_hdr_length(skb);
556 *karg = skb->len - ieee802154_hdr_length(skb);
558 }
559 spin_unlock_bh(&sk->sk_receive_queue.lock);
557 }
558 spin_unlock_bh(&sk->sk_receive_queue.lock);
560 return put_user(amount, (int __user *)arg);
559 return 0;
561 }
562 }
563
564 return -ENOIOCTLCMD;
565}
566
567/* FIXME: autobind */
568static int dgram_connect(struct sock *sk, struct sockaddr *uaddr,

--- 575 unchanged lines hidden ---
560 }
561 }
562
563 return -ENOIOCTLCMD;
564}
565
566/* FIXME: autobind */
567static int dgram_connect(struct sock *sk, struct sockaddr *uaddr,

--- 575 unchanged lines hidden ---