Skip to content

Commit f1c8bc1

Browse files
committed
mgmt: mcumgr: serial transport rework
cuts down some unused Kconfigs Signed-off-by: Mateusz Michalek <mateusz.michalek@nordicsemi.no>
1 parent 6dfe64e commit f1c8bc1

2 files changed

Lines changed: 41 additions & 122 deletions

File tree

subsys/mgmt/mcumgr/transport/include/serial.h

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,6 @@ struct mcumgr_serial_rx_ctxt {
4848
/** Length of full packet, as read from header. */
4949
uint16_t pkt_len;
5050

51-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE) && \
52-
defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_RAW_BINARY_NON_SMP_OVER_CONSOLE)
53-
/**
54-
* Set to true by transports which use raw MCUmgr over UART (not SMP over console) to know
55-
* not to deal with the extra base64 etc. processing.
56-
*/
57-
const bool raw_transport;
58-
#endif
5951
};
6052

6153
/** @typedef mcumgr_serial_tx_cb

subsys/mgmt/mcumgr/transport/src/serial_util.c

Lines changed: 41 additions & 114 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,7 @@
1515
#include <zephyr/sys/base64.h>
1616
#include <zephyr/mgmt/mcumgr/mgmt/mgmt.h>
1717
#include <zephyr/mgmt/mcumgr/smp/smp.h>
18-
#include <zephyr/mgmt/mcumgr/transport/serial.h>
19-
20-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_RAW_BINARY_NON_SMP_OVER_CONSOLE)
21-
#include <mgmt/mcumgr/transport/smp_internal.h>
22-
#endif
18+
#include <serial.h>
2319

2420
static void mcumgr_serial_free_rx_ctxt(struct mcumgr_serial_rx_ctxt *rx_ctxt)
2521
{
@@ -29,7 +25,6 @@ static void mcumgr_serial_free_rx_ctxt(struct mcumgr_serial_rx_ctxt *rx_ctxt)
2925
}
3026
}
3127

32-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE)
3328
static uint16_t mcumgr_serial_calc_crc(const uint8_t *data, int len)
3429
{
3530
return crc16_itu_t(0x0000, data, len);
@@ -62,49 +57,7 @@ static int mcumgr_serial_decode_frag(struct mcumgr_serial_rx_ctxt *rx_ctxt,
6257

6358
return 0;
6459
}
65-
#endif
66-
67-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_RAW_BINARY_NON_SMP_OVER_CONSOLE)
68-
static inline bool mcumgr_serial_process_frag_raw(struct mcumgr_serial_rx_ctxt *rx_ctxt,
69-
const uint8_t *frag, int frag_len,
70-
struct smp_hdr *rec_hdr)
71-
{
72-
uint16_t total_size;
7360

74-
net_buf_add_mem(rx_ctxt->nb, frag, frag_len);
75-
76-
if (rx_ctxt->nb->len < sizeof(struct smp_hdr)) {
77-
/* Missing header */
78-
return false;
79-
}
80-
81-
/*
82-
* Perform some basic cursory checks to ensure some fields of the packet are
83-
* actually valid.
84-
*/
85-
rec_hdr = (struct smp_hdr *)rx_ctxt->nb->data;
86-
total_size = sys_be16_to_cpu(rec_hdr->nh_len) + sizeof(struct smp_hdr);
87-
88-
if (total_size > CONFIG_MCUMGR_TRANSPORT_NETBUF_SIZE) {
89-
/* Payload is longer than the maximum supported MTU. */
90-
mcumgr_serial_free_rx_ctxt(rx_ctxt);
91-
return false;
92-
} else if (rec_hdr->nh_op >= MGMT_OP_COUNT) {
93-
/* Unknown op-code, likely not a valid MCUmgr message. */
94-
mcumgr_serial_free_rx_ctxt(rx_ctxt);
95-
return false;
96-
} else if (rx_ctxt->nb->len < total_size) {
97-
/* More fragments expected. */
98-
return false;
99-
} else if (rx_ctxt->nb->len > total_size) {
100-
/* Payload longer than indicated in header. */
101-
mcumgr_serial_free_rx_ctxt(rx_ctxt);
102-
return false;
103-
}
104-
105-
return true;
106-
}
107-
#endif
10861

10962
/**
11063
* Processes a received mcumgr frame.
@@ -118,14 +71,9 @@ struct net_buf *mcumgr_serial_process_frag(struct mcumgr_serial_rx_ctxt *rx_ctxt
11871
{
11972
struct net_buf *nb;
12073

121-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE)
12274
int rc;
12375
uint16_t crc;
12476
uint16_t op;
125-
#endif
126-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_RAW_BINARY_NON_SMP_OVER_CONSOLE)
127-
struct smp_hdr *rec_hdr;
128-
#endif
12977

13078
if (rx_ctxt->nb == NULL) {
13179
rx_ctxt->nb = smp_packet_alloc();
@@ -135,86 +83,66 @@ struct net_buf *mcumgr_serial_process_frag(struct mcumgr_serial_rx_ctxt *rx_ctxt
13583
}
13684
}
13785

138-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE) && \
139-
defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_RAW_BINARY_NON_SMP_OVER_CONSOLE)
140-
if (rx_ctxt->raw_transport == true) {
141-
#endif
142-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_RAW_BINARY_NON_SMP_OVER_CONSOLE)
143-
if (mcumgr_serial_process_frag_raw(rx_ctxt, frag, frag_len, rec_hdr) == false) {
144-
return NULL;
145-
}
146-
#endif
147-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE) && \
148-
defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_RAW_BINARY_NON_SMP_OVER_CONSOLE)
149-
} else {
150-
#endif
151-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE)
152-
if (frag_len < sizeof(op)) {
153-
return NULL;
154-
}
155-
156-
op = sys_be16_to_cpu(*(uint16_t *)frag);
157-
switch (op) {
158-
case MCUMGR_SERIAL_HDR_PKT:
159-
net_buf_reset(rx_ctxt->nb);
160-
break;
161-
162-
case MCUMGR_SERIAL_HDR_FRAG:
163-
if (rx_ctxt->nb->len == 0U) {
164-
mcumgr_serial_free_rx_ctxt(rx_ctxt);
165-
return NULL;
166-
}
167-
break;
86+
if (frag_len < sizeof(op)) {
87+
return NULL;
88+
}
16889

169-
default:
170-
return NULL;
171-
}
90+
op = sys_be16_to_cpu(*(uint16_t *)frag);
91+
switch (op) {
92+
case MCUMGR_SERIAL_HDR_PKT:
93+
net_buf_reset(rx_ctxt->nb);
94+
break;
17295

173-
rc = mcumgr_serial_decode_frag(rx_ctxt,
174-
frag + sizeof(op),
175-
frag_len - sizeof(op));
176-
if (rc != 0) {
96+
case MCUMGR_SERIAL_HDR_FRAG:
97+
if (rx_ctxt->nb->len == 0U) {
17798
mcumgr_serial_free_rx_ctxt(rx_ctxt);
17899
return NULL;
179100
}
101+
break;
180102

181-
if (op == MCUMGR_SERIAL_HDR_PKT) {
182-
rc = mcumgr_serial_extract_len(rx_ctxt);
183-
if (rc < 0) {
184-
mcumgr_serial_free_rx_ctxt(rx_ctxt);
185-
return NULL;
186-
}
187-
}
103+
default:
104+
return NULL;
105+
}
188106

189-
if (rx_ctxt->nb->len < rx_ctxt->pkt_len) {
190-
/* More fragments expected. */
191-
return NULL;
192-
} else if (rx_ctxt->nb->len > rx_ctxt->pkt_len) {
193-
/* Payload longer than indicated in header. */
194-
mcumgr_serial_free_rx_ctxt(rx_ctxt);
195-
return NULL;
196-
}
107+
rc = mcumgr_serial_decode_frag(rx_ctxt,
108+
frag + sizeof(op),
109+
frag_len - sizeof(op));
110+
if (rc != 0) {
111+
mcumgr_serial_free_rx_ctxt(rx_ctxt);
112+
return NULL;
113+
}
197114

198-
crc = mcumgr_serial_calc_crc(rx_ctxt->nb->data, rx_ctxt->nb->len);
199-
if (crc != 0U) {
115+
if (op == MCUMGR_SERIAL_HDR_PKT) {
116+
rc = mcumgr_serial_extract_len(rx_ctxt);
117+
if (rc < 0) {
200118
mcumgr_serial_free_rx_ctxt(rx_ctxt);
201119
return NULL;
202120
}
121+
}
122+
123+
if (rx_ctxt->nb->len < rx_ctxt->pkt_len) {
124+
/* More fragments expected. */
125+
return NULL;
126+
} else if (rx_ctxt->nb->len > rx_ctxt->pkt_len) {
127+
/* Payload longer than indicated in header. */
128+
mcumgr_serial_free_rx_ctxt(rx_ctxt);
129+
return NULL;
130+
}
131+
132+
crc = mcumgr_serial_calc_crc(rx_ctxt->nb->data, rx_ctxt->nb->len);
133+
if (crc != 0U) {
134+
mcumgr_serial_free_rx_ctxt(rx_ctxt);
135+
return NULL;
136+
}
203137

204138
/* Packet is complete; strip the CRC. */
205139
rx_ctxt->nb->len -= 2U;
206-
#endif
207-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE) && \
208-
defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_RAW_BINARY_NON_SMP_OVER_CONSOLE)
209-
}
210-
#endif
211140

212141
nb = rx_ctxt->nb;
213142
rx_ctxt->nb = NULL;
214143
return nb;
215144
}
216145

217-
#if defined(CONFIG_MCUMGR_TRANSPORT_SERIAL_HAS_SMP_OVER_CONSOLE)
218146
/**
219147
* Base64-encodes a small chunk of data and transmits it. The data must be no larger than three
220148
* bytes.
@@ -386,4 +314,3 @@ int mcumgr_serial_tx_pkt(const uint8_t *data, int len, mcumgr_serial_tx_cb cb)
386314

387315
return 0;
388316
}
389-
#endif

0 commit comments

Comments
 (0)