Hi,
I was going to add a sequence number to message header
to match responses to requests. It would be better if we
could detect responses to retransmitted requests, for example.
I was going steal one byte from nh_id field and have one
byte worth of sequence number. I feel one byte being
sufficient width, as I don’t think there would be that many
outstanding requests at any given time. Just one or two.
I think keeping the header size as 8 bytes is valuable, as well as
keeping it a multiple of 4 bytes.
Here’s the old header:
struct nmgr_hdr {
uint8_t nh_op;
uint8_t nh_flags;
uint16_t nh_len;
uint16_t nh_group;
uint16_t nh_id;
};
Here is what the new header would look like:
struct nmgr_hdr {
uint8_t nh_op; /* NMGR_OP_XXX */
uint8_t nh_flags;
uint16_t nh_len; /* length of the payload */
uint16_t nh_group; /* NMGR_GROUP_XXX */
uint8_t nh_seq; /* sequence number */
uint8_t nh_id; /* message ID within group */
};
This will break backwards compatibility, when requester starts
filling in the sequence number.
Any objections, or other comments?
I was also going to add a CRC at the end of the message, when
newtmgr goes over serial line. You can run this protocol over
UARTs with no flow control, so we should detect errors on this.
—
M