All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sven Eckelmann <sven@narfation.org>
To: b.a.t.m.a.n@lists.open-mesh.org
Subject: [B.A.T.M.A.N.] [PATCH 5/7] alfred: Use expected packet count to finished transactions
Date: Sat, 12 Nov 2016 10:25:22 +0100	[thread overview]
Message-ID: <20161112092524.13170-5-sven@narfation.org> (raw)
In-Reply-To: <4404358.R7R4S15M79@sven-edge>

The TXEND packet will specify the number of PUSH_DATA packets are required
to finish a transaction. This number has therefore to be stored when a
TXEND packet is receiver to later be able to decide whether the
transaction can be finished or not.

Signed-off-by: Sven Eckelmann <sven@narfation.org>
---
 alfred.h    |  8 +++++++-
 recv.c      | 11 +++++------
 unix_sock.c |  2 +-
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/alfred.h b/alfred.h
index 9d0f6a6..eb8200c 100644
--- a/alfred.h
+++ b/alfred.h
@@ -71,7 +71,7 @@ struct transaction_head {
 	struct ether_addr server_addr;
 	uint16_t id;
 	uint8_t requested_type;
-	uint16_t finished;
+	uint16_t txend_packets;
 	int num_packet;
 	int client_socket;
 	struct timespec last_rx_time;
@@ -161,6 +161,12 @@ struct transaction_head *
 transaction_add(struct globals *globals, struct ether_addr mac, uint16_t id);
 struct transaction_head *transaction_clean(struct globals *globals,
 					   struct transaction_head *head);
+
+static inline bool transaction_finished(struct transaction_head *head)
+{
+	return head->txend_packets == head->num_packet;
+}
+
 /* send.c */
 int push_data(struct globals *globals, struct interface *interface,
 	      struct in6_addr *destination, enum data_source max_source_level,
diff --git a/recv.c b/recv.c
index dd0b021..1f56016 100644
--- a/recv.c
+++ b/recv.c
@@ -131,7 +131,7 @@ transaction_add(struct globals *globals, struct ether_addr mac, uint16_t id)
 	head->server_addr = mac;
 	head->id = id;
 	head->requested_type = 0;
-	head->finished = 0;
+	head->txend_packets = 0;
 	head->num_packet = 0;
 	head->client_socket = -1;
 	clock_gettime(CLOCK_MONOTONIC, &head->last_rx_time);
@@ -162,16 +162,14 @@ struct transaction_head *transaction_clean(struct globals *globals,
 
 static int finish_alfred_transaction(struct globals *globals,
 				     struct transaction_head *head,
-				     struct ether_addr mac,
-				     uint16_t num_packets)
+				     struct ether_addr mac)
 {
 	struct transaction_packet *transaction_packet, *safe;
 
 	/* finish when all packets received */
-	if (head->num_packet != num_packets)
+	if (!transaction_finished(head))
 		return 0;
 
-	head->finished = 1;
 	list_for_each_entry_safe(transaction_packet, safe, &head->packet_list,
 				 list) {
 		finish_alfred_push_data(globals, mac, transaction_packet->push);
@@ -362,7 +360,8 @@ static int process_alfred_status_txend(struct globals *globals,
 	if (!head)
 		return -1;
 
-	finish_alfred_transaction(globals, head, mac, ntohs(request->tx.seqno));
+	head->txend_packets = ntohs(request->tx.seqno);
+	finish_alfred_transaction(globals, head, mac);
 
 	return 0;
 }
diff --git a/unix_sock.c b/unix_sock.c
index 150ad32..edc7e0b 100644
--- a/unix_sock.c
+++ b/unix_sock.c
@@ -276,7 +276,7 @@ int unix_sock_req_data_finish(struct globals *globals,
 	requested_type = head->requested_type;
 	id = head->id;
 	client_sock = head->client_socket;
-	if (head->finished != 1)
+	if (!transaction_finished(head))
 		send_data = 0;
 
 	free(head);
-- 
2.10.2


  parent reply	other threads:[~2016-11-12  9:25 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-12  9:24 [B.A.T.M.A.N.] [PATCH 0/7] alfred: Allow out-of-order TXEND Sven Eckelmann
2016-11-12  9:25 ` [B.A.T.M.A.N.] [PATCH 1/7] alfred: Avoid hash search for transaction cleanup Sven Eckelmann
2016-11-12  9:25 ` [B.A.T.M.A.N.] [PATCH 2/7] alfred: Move tx finish functionality in extra function Sven Eckelmann
2016-11-12  9:25 ` [B.A.T.M.A.N.] [PATCH 3/7] alfred: Remove checks for committed/dropped transaction Sven Eckelmann
2016-11-12  9:25 ` [B.A.T.M.A.N.] [PATCH 4/7] alfred: Don't force cleanup of transaction on TXEND Sven Eckelmann
2016-11-12  9:25 ` Sven Eckelmann [this message]
2016-11-12  9:25 ` [B.A.T.M.A.N.] [PATCH 6/7] alfred: Allow PUSH_DATA to finish transactions Sven Eckelmann
2016-11-12  9:25 ` [B.A.T.M.A.N.] [PATCH 7/7] alfred: Allow TXEND to start new transaction Sven Eckelmann
2016-11-17 16:06 ` [B.A.T.M.A.N.] [PATCH 0/7] alfred: Allow out-of-order TXEND Simon Wunderlich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161112092524.13170-5-sven@narfation.org \
    --to=sven@narfation.org \
    --cc=b.a.t.m.a.n@lists.open-mesh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.