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
@ -291,6 +291,9 @@ static int dgram_recvmsg(struct kiocb *iocb, struct sock *sk,
|
|||||||
size_t copied = 0;
|
size_t copied = 0;
|
||||||
int err = -EOPNOTSUPP;
|
int err = -EOPNOTSUPP;
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
|
struct sockaddr_ieee802154 *saddr;
|
||||||
|
|
||||||
|
saddr = (struct sockaddr_ieee802154 *)msg->msg_name;
|
||||||
|
|
||||||
skb = skb_recv_datagram(sk, flags, noblock, &err);
|
skb = skb_recv_datagram(sk, flags, noblock, &err);
|
||||||
if (!skb)
|
if (!skb)
|
||||||
@ -309,6 +312,13 @@ static int dgram_recvmsg(struct kiocb *iocb, struct sock *sk,
|
|||||||
|
|
||||||
sock_recv_ts_and_drops(msg, sk, skb);
|
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)
|
if (flags & MSG_TRUNC)
|
||||||
copied = skb->len;
|
copied = skb->len;
|
||||||
done:
|
done:
|
||||||
|
Loading…
Reference in New Issue
Block a user