ieee802154/dgram: Pass source address in dgram_recvmsg
This patch lets dgram_recvmsg fill in the sockaddr struct in msg->msg_name with the source address of the packet. This is used by the userland functions recvmsg and recvfrom to get the senders address. [Stefan: Changed from old zigbee legacy tree to mainline] Signed-off-by: Stephen Röttger <stephen.roettger@zero-entropy.de> Signed-off-by: Stefan Schmidt <stefan@datenfreihafen.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
5abb0029c8
commit
6364e6ee78
1 changed files with 10 additions and 0 deletions
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue