Set the bytes value in the mptp_dest structure when sending message.
[swifty.git] / src / kernel / mptp.c
index e7c3396..c4f5644 100644 (file)
@@ -97,6 +97,8 @@ static int mptp_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
 
        log_debug("Bind received port=%u (network order)\n", mptp_addr->dests[0].port);
        port = ntohs(mptp_addr->dests[0].port);
+       if (port == 0)
+               port = get_next_free_port();
 
        if (unlikely(port == 0 || port >= MAX_MPTP_PORT)) {
                log_error("Invalid value for sockaddr port (%u)\n", port);
@@ -339,8 +341,11 @@ static int mptp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *
         if (likely(!err)) {
             log_debug("Sent %u bytes on wire\n", len);
                        ret += len;
-               } else
+                       dest->bytes = len;
+               } else {
             log_error("ip_queue_xmit failed\n");
+                       dest->bytes = -1;
+               }
     }
 
        return ret;
@@ -360,6 +365,7 @@ static int mptp_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *
        int err, copied;
        int i;
        struct sockaddr_mptp *ret_addr = (struct sockaddr_mptp *) msg->msg_name;
+       ret_addr->count = 0;
 
     log_debug("Trying to receive sock=%p sk=%p flags=%d\n", sock, sk, flags);
 
@@ -386,6 +392,7 @@ static int mptp_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *
                        goto out_free;
                }
                log_debug("Received %d bytes\n", copied);
+               msg->msg_iov[i].iov_len = copied;
 
                sock_recv_ts_and_drops(msg, sk, skb);