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