diff options
Diffstat (limited to 'net/ieee802154/dgram.c')
-rw-r--r-- | net/ieee802154/dgram.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/net/ieee802154/dgram.c b/net/ieee802154/dgram.c index 4f0ed8780194..ef2ad8aaef13 100644 --- a/net/ieee802154/dgram.c +++ b/net/ieee802154/dgram.c | |||
@@ -149,8 +149,7 @@ static int dgram_ioctl(struct sock *sk, int cmd, unsigned long arg) | |||
149 | spin_lock_bh(&sk->sk_receive_queue.lock); | 149 | spin_lock_bh(&sk->sk_receive_queue.lock); |
150 | skb = skb_peek(&sk->sk_receive_queue); | 150 | skb = skb_peek(&sk->sk_receive_queue); |
151 | if (skb != NULL) { | 151 | if (skb != NULL) { |
152 | /* | 152 | /* We will only return the amount |
153 | * We will only return the amount | ||
154 | * of this packet since that is all | 153 | * of this packet since that is all |
155 | * that will be read. | 154 | * that will be read. |
156 | */ | 155 | */ |
@@ -161,12 +160,13 @@ static int dgram_ioctl(struct sock *sk, int cmd, unsigned long arg) | |||
161 | } | 160 | } |
162 | 161 | ||
163 | } | 162 | } |
163 | |||
164 | return -ENOIOCTLCMD; | 164 | return -ENOIOCTLCMD; |
165 | } | 165 | } |
166 | 166 | ||
167 | /* FIXME: autobind */ | 167 | /* FIXME: autobind */ |
168 | static int dgram_connect(struct sock *sk, struct sockaddr *uaddr, | 168 | static int dgram_connect(struct sock *sk, struct sockaddr *uaddr, |
169 | int len) | 169 | int len) |
170 | { | 170 | { |
171 | struct sockaddr_ieee802154 *addr = (struct sockaddr_ieee802154 *)uaddr; | 171 | struct sockaddr_ieee802154 *addr = (struct sockaddr_ieee802154 *)uaddr; |
172 | struct dgram_sock *ro = dgram_sk(sk); | 172 | struct dgram_sock *ro = dgram_sk(sk); |
@@ -205,7 +205,7 @@ static int dgram_disconnect(struct sock *sk, int flags) | |||
205 | } | 205 | } |
206 | 206 | ||
207 | static int dgram_sendmsg(struct kiocb *iocb, struct sock *sk, | 207 | static int dgram_sendmsg(struct kiocb *iocb, struct sock *sk, |
208 | struct msghdr *msg, size_t size) | 208 | struct msghdr *msg, size_t size) |
209 | { | 209 | { |
210 | struct net_device *dev; | 210 | struct net_device *dev; |
211 | unsigned int mtu; | 211 | unsigned int mtu; |
@@ -248,8 +248,8 @@ static int dgram_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
248 | hlen = LL_RESERVED_SPACE(dev); | 248 | hlen = LL_RESERVED_SPACE(dev); |
249 | tlen = dev->needed_tailroom; | 249 | tlen = dev->needed_tailroom; |
250 | skb = sock_alloc_send_skb(sk, hlen + tlen + size, | 250 | skb = sock_alloc_send_skb(sk, hlen + tlen + size, |
251 | msg->msg_flags & MSG_DONTWAIT, | 251 | msg->msg_flags & MSG_DONTWAIT, |
252 | &err); | 252 | &err); |
253 | if (!skb) | 253 | if (!skb) |
254 | goto out_dev; | 254 | goto out_dev; |
255 | 255 | ||
@@ -262,7 +262,8 @@ static int dgram_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
262 | cb->ackreq = ro->want_ack; | 262 | cb->ackreq = ro->want_ack; |
263 | 263 | ||
264 | if (msg->msg_name) { | 264 | if (msg->msg_name) { |
265 | DECLARE_SOCKADDR(struct sockaddr_ieee802154*, daddr, msg->msg_name); | 265 | DECLARE_SOCKADDR(struct sockaddr_ieee802154*, |
266 | daddr, msg->msg_name); | ||
266 | 267 | ||
267 | ieee802154_addr_from_sa(&dst_addr, &daddr->addr); | 268 | ieee802154_addr_from_sa(&dst_addr, &daddr->addr); |
268 | } else { | 269 | } else { |
@@ -304,8 +305,8 @@ out: | |||
304 | } | 305 | } |
305 | 306 | ||
306 | static int dgram_recvmsg(struct kiocb *iocb, struct sock *sk, | 307 | static int dgram_recvmsg(struct kiocb *iocb, struct sock *sk, |
307 | struct msghdr *msg, size_t len, int noblock, int flags, | 308 | struct msghdr *msg, size_t len, int noblock, |
308 | int *addr_len) | 309 | int flags, int *addr_len) |
309 | { | 310 | { |
310 | size_t copied = 0; | 311 | size_t copied = 0; |
311 | int err = -EOPNOTSUPP; | 312 | int err = -EOPNOTSUPP; |
@@ -398,6 +399,7 @@ int ieee802154_dgram_deliver(struct net_device *dev, struct sk_buff *skb) | |||
398 | dgram_sk(sk))) { | 399 | dgram_sk(sk))) { |
399 | if (prev) { | 400 | if (prev) { |
400 | struct sk_buff *clone; | 401 | struct sk_buff *clone; |
402 | |||
401 | clone = skb_clone(skb, GFP_ATOMIC); | 403 | clone = skb_clone(skb, GFP_ATOMIC); |
402 | if (clone) | 404 | if (clone) |
403 | dgram_rcv_skb(prev, clone); | 405 | dgram_rcv_skb(prev, clone); |
@@ -407,9 +409,9 @@ int ieee802154_dgram_deliver(struct net_device *dev, struct sk_buff *skb) | |||
407 | } | 409 | } |
408 | } | 410 | } |
409 | 411 | ||
410 | if (prev) | 412 | if (prev) { |
411 | dgram_rcv_skb(prev, skb); | 413 | dgram_rcv_skb(prev, skb); |
412 | else { | 414 | } else { |
413 | kfree_skb(skb); | 415 | kfree_skb(skb); |
414 | ret = NET_RX_DROP; | 416 | ret = NET_RX_DROP; |
415 | } | 417 | } |
@@ -419,7 +421,7 @@ int ieee802154_dgram_deliver(struct net_device *dev, struct sk_buff *skb) | |||
419 | } | 421 | } |
420 | 422 | ||
421 | static int dgram_getsockopt(struct sock *sk, int level, int optname, | 423 | static int dgram_getsockopt(struct sock *sk, int level, int optname, |
422 | char __user *optval, int __user *optlen) | 424 | char __user *optval, int __user *optlen) |
423 | { | 425 | { |
424 | struct dgram_sock *ro = dgram_sk(sk); | 426 | struct dgram_sock *ro = dgram_sk(sk); |
425 | 427 | ||
@@ -463,7 +465,7 @@ static int dgram_getsockopt(struct sock *sk, int level, int optname, | |||
463 | } | 465 | } |
464 | 466 | ||
465 | static int dgram_setsockopt(struct sock *sk, int level, int optname, | 467 | static int dgram_setsockopt(struct sock *sk, int level, int optname, |
466 | char __user *optval, unsigned int optlen) | 468 | char __user *optval, unsigned int optlen) |
467 | { | 469 | { |
468 | struct dgram_sock *ro = dgram_sk(sk); | 470 | struct dgram_sock *ro = dgram_sk(sk); |
469 | struct net *net = sock_net(sk); | 471 | struct net *net = sock_net(sk); |