Dear Wolf-Bastian,

if you have several patches for the same topic - please send them once
in one patch-set, do not annoy other developers by updating their
mailbox once per 15 minutes.

Alex

2013/3/13 Wolf-Bastian Pöttner <poett...@ibr.cs.tu-bs.de>:
> 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.
>
> 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;
>
>         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);
>         if (err < 0)
>                 goto out_skb;
> --
> 1.7.5.4
>
>
> ------------------------------------------------------------------------------
> 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

------------------------------------------------------------------------------
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