|
@@ -291,6 +291,9 @@ static int dgram_recvmsg(struct kiocb *iocb, struct sock *sk,
|
|
|
size_t copied = 0;
|
|
|
int err = -EOPNOTSUPP;
|
|
|
struct sk_buff *skb;
|
|
|
+ struct sockaddr_ieee802154 *saddr;
|
|
|
+
|
|
|
+ saddr = (struct sockaddr_ieee802154 *)msg->msg_name;
|
|
|
|
|
|
skb = skb_recv_datagram(sk, flags, noblock, &err);
|
|
|
if (!skb)
|
|
@@ -309,6 +312,13 @@ static int dgram_recvmsg(struct kiocb *iocb, struct sock *sk,
|
|
|
|
|
|
sock_recv_ts_and_drops(msg, sk, skb);
|
|
|
|
|
|
+ if (saddr) {
|
|
|
+ saddr->family = AF_IEEE802154;
|
|
|
+ saddr->addr = mac_cb(skb)->sa;
|
|
|
+ }
|
|
|
+ if (addr_len)
|
|
|
+ *addr_len = sizeof(*saddr);
|
|
|
+
|
|
|
if (flags & MSG_TRUNC)
|
|
|
copied = skb->len;
|
|
|
done:
|