core: Fix flags on tx packetisation

We need to set proper SOM, EOM and sequence number tags.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Change-Id: I9daaa8edf7df3779a0ea7f77bad17933dc4a081d
diff --git a/core.c b/core.c
index b855ced..560a4a7 100644
--- a/core.c
+++ b/core.c
@@ -393,11 +393,12 @@
 	struct mctp_hdr *hdr;
 	struct mctp_bus *bus;
 	size_t pkt_len, p;
+	int i;
 
 	bus = find_bus_for_eid(mctp, eid);
 
 	/* queue up packets, each of max MCTP_MTU size */
-	for (p = 0; p < msg_len; ) {
+	for (p = 0, i = 0; p < msg_len; i++) {
 		pkt_len = msg_len - p;
 		if (pkt_len > MCTP_MTU)
 			pkt_len = MCTP_MTU;
@@ -409,12 +410,16 @@
 		hdr->ver = bus->binding->version & 0xf;
 		hdr->dest = eid;
 		hdr->src = bus->eid;
-		hdr->flags_seq_tag = MCTP_HDR_FLAG_SOM |
-			MCTP_HDR_FLAG_EOM |
-			(0 << MCTP_HDR_SEQ_SHIFT) |
-			MCTP_HDR_FLAG_TO |
+		hdr->flags_seq_tag = MCTP_HDR_FLAG_TO |
 			(0 << MCTP_HDR_TAG_SHIFT);
 
+		if (i == 0)
+			hdr->flags_seq_tag |= MCTP_HDR_FLAG_SOM;
+		if (p + pkt_len >= msg_len)
+			hdr->flags_seq_tag |= MCTP_HDR_FLAG_EOM;
+		hdr->flags_seq_tag |=
+			(i & MCTP_HDR_SEQ_MASK) << MCTP_HDR_SEQ_SHIFT;
+
 		memcpy(mctp_pktbuf_data(pkt), msg + p, pkt_len);
 
 		/* add to tx queue */