On 03/13/2013 03:57 AM, Wolf-Bastian Pöttner wrote:
> This patch lets dgram_sendmsg determine the destination address
> based on if the socket has been connect()ed before. If so, the
> address passed to connect() is used. Otherwise, the address
> passed to sendto() is used as destination.

This confused me as to what was happening here. How about:
Make dgram_sendmsg() able to handle sendto() from userspace. The
previous implementation required connect() to be used and caused the
address in sendto() to be ignored.

>
> Signed-off-by: Wolf-Bastian Pöttner <poett...@ibr.cs.tu-bs.de>
> ---
>  net/ieee802154/dgram.c |   11 ++++++++++-
>  1 files changed, 10 insertions(+), 1 deletions(-)
>
> diff --git a/net/ieee802154/dgram.c b/net/ieee802154/dgram.c
> index 94df6b1..955c30b 100644
> --- a/net/ieee802154/dgram.c
> +++ b/net/ieee802154/dgram.c
> @@ -46,6 +46,7 @@ struct dgram_sock {
>  
>       unsigned int bound:1;
>       unsigned int want_ack:1;
> +     unsigned int connected:1;
>  };
>  
>  static inline struct dgram_sock *dgram_sk(const struct sock *sk)
> @@ -76,6 +77,7 @@ static int dgram_init(struct sock *sk)
>       ro->dst_addr.addr_type = IEEE802154_ADDR_LONG;
>       ro->dst_addr.pan_id = 0xffff;
>       ro->want_ack = 1;
> +     ro->connected = 0;
>       memset(&ro->dst_addr.hwaddr, 0xff, sizeof(ro->dst_addr.hwaddr));
>       return 0;
>  }
> @@ -181,6 +183,8 @@ static int dgram_connect(struct sock *sk, struct sockaddr 
> *uaddr,
>               goto out;
>       }
>  
> +     ro->connected = 1;
> +
>       memcpy(&ro->dst_addr, &addr->addr, sizeof(struct ieee802154_addr));
>  
>  out:
> @@ -197,6 +201,8 @@ static int dgram_disconnect(struct sock *sk, int flags)
>       ro->dst_addr.addr_type = IEEE802154_ADDR_LONG;
>       memset(&ro->dst_addr.hwaddr, 0xff, sizeof(ro->dst_addr.hwaddr));
>  
> +     ro->connected = 0;
> +
>       release_sock(sk);
>  
>       return 0;
> @@ -211,6 +217,9 @@ static int dgram_sendmsg(struct kiocb *iocb, struct sock 
> *sk,
>       struct dgram_sock *ro = dgram_sk(sk);
>       int hlen, tlen;
>       int err;
> +     struct sockaddr_ieee802154 *saddr;
> +
> +     saddr = (struct sockaddr_ieee802154 *)msg->msg_name;

Add a space after the cast.

>       if (msg->msg_flags & MSG_OOB) {
>               pr_debug("msg->msg_flags = 0x%x\n", msg->msg_flags);
> @@ -253,7 +262,7 @@ static int dgram_sendmsg(struct kiocb *iocb, struct sock 
> *sk,
>               mac_cb(skb)->flags |= MAC_CB_FLAG_ACKREQ;
>  
>       mac_cb(skb)->seq = ieee802154_mlme_ops(dev)->get_dsn(dev);
> -     err = dev_hard_header(skb, dev, ETH_P_IEEE802154, &ro->dst_addr,
> +     err = dev_hard_header(skb, dev, ETH_P_IEEE802154, ro->connected ? 
> &ro->dst_addr : &saddr->addr,
>                       ro->bound ? &ro->src_addr : NULL, size);

break the line at 80.

>       if (err < 0)
>               goto out_skb;


Make sure to run scripts/checkpatch.pl on patches before sending.

Alan.


------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
_______________________________________________
Linux-zigbee-devel mailing list
Linux-zigbee-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel

Reply via email to