Skip to content

Commit 39baf32

Browse files
committed
[SQUASH ME] slip: port to netapi change
1 parent cde28bd commit 39baf32

File tree

3 files changed

+84
-72
lines changed

3 files changed

+84
-72
lines changed

sys/net/include/slip.h

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include <stdint.h>
2727

2828
#include "netapi.h"
29+
#include "pkt.h"
2930
#include "periph/uart.h"
3031
#include "ringbuffer.h"
3132

@@ -59,22 +60,19 @@ kernel_pid_t slip_init(uart_t uart, uint32_t baudrate, ringbuffer_t *in_buf);
5960
* @func slip_send_l3_packet
6061
* @brief Send a layer 3 packet over the UART device
6162
*
62-
* @param[in] pid The PID for the @ref slip control thread
63-
* @param[in] upper_layer_hdrs All upper layer headers including layer 3.
64-
* @param[in] data Data (*without* all upper layer headers) to send
65-
* over the UART device
66-
* @param[in] data_len Length of *data*
63+
* @param[in] pid The PID for the @ref slip control thread.
64+
* @param[in] pkt Packet to send over the UART device.
65+
*
66+
* @return Number of bytes transmitted.
6767
*/
6868

6969
#ifdef MODULE_NETAPI
70-
static inline int slip_send_l3_packet(kernel_pid_t pid, netdev_hlist_t *upper_layer_hdrs,
71-
void *data, size_t data_len)
70+
static inline int slip_send_l3_packet(kernel_pid_t pid, pkt_t *pkt)
7271
{
73-
return netapi_send_packet(pid, upper_layer_hdrs, NULL, 0, data, data_len);
72+
return netapi_send_packet(pid, NULL, 0, pkt);
7473
}
7574
#else
76-
int slip_send_l3_packet(kernel_pid_t pid, netdev_hlist_t *upper_layer_hdrs,
77-
void *data, size_t data_len);
75+
int slip_send_l3_packet(kernel_pid_t pid, pkt_t *pkt);
7876
#endif
7977

8078
#ifdef __cplusplus

sys/net/link_layer/slip/slip.c

Lines changed: 41 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -135,35 +135,35 @@ static int _slip_putc(uart_t uart, char c)
135135

136136
static void _slip_receive(msg_t *uart_msg, _uart_ctx_t *ctx)
137137
{
138-
netapi_rcv_pkt_t packet;
138+
netapi_pkt_t rcv;
139139
netapi_ack_t ack_mem;
140140
msg_t l3_pkt, l3_ack, uart_reply;
141141
size_t bytes = ctx->bytes;
142-
char *pkt = (char *)pktbuf_alloc(bytes);
143-
144-
ringbuffer_get(ctx->in_buf, pkt, bytes);
145142

146143
msg_reply(uart_msg, &uart_reply);
147144

148-
packet.type = NETAPI_CMD_RCV;
149-
packet.ack = &ack_mem;
150-
packet.src = NULL;
151-
packet.src_len = 0;
152-
packet.dest = NULL;
153-
packet.dest_len = 0;
145+
rcv.type = NETAPI_CMD_RCV;
146+
rcv.ack = &ack_mem;
147+
rcv.src = NULL;
148+
rcv.src_len = 0;
149+
rcv.dest = NULL;
150+
rcv.dest_len = 0;
154151
l3_pkt.type = NETAPI_MSG_TYPE;
155-
l3_pkt.content.ptr = (char *)(&packet);
152+
l3_pkt.content.ptr = (char *)(&rcv);
156153

157154
for (int i = 0; i < _SLIP_REGISTRY_SIZE; i++) {
158155
if (ctx->registry[i] != KERNEL_PID_UNDEF) {
159156
size_t offset = 0;
160157

161158
while (offset < ctx->bytes) {
162-
packet.data = (void *)(pkt + offset);
163-
packet.data_len = bytes - offset;
159+
pkt_t *pkt = pktbuf_alloc(bytes);
160+
161+
ringbuffer_get(ctx->in_buf, pkt->payload_data, bytes - offset);
162+
rcv.pkt = pkt;
164163
netapi_ack_t *ack;
165164

166165
msg_send_receive(&l3_pkt, &l3_ack, ctx->registry[i]);
166+
pktbuf_release(pkt);
167167
ack = (netapi_ack_t *)(l3_ack.content.ptr);
168168

169169
if (l3_ack.type == NETAPI_MSG_TYPE &&
@@ -186,8 +186,6 @@ static void _slip_receive(msg_t *uart_msg, _uart_ctx_t *ctx)
186186
return;
187187
}
188188
}
189-
190-
pktbuf_release(pkt);
191189
}
192190
}
193191
}
@@ -227,40 +225,35 @@ static int _slip_write(uart_t uart, uint8_t *bytes, size_t len)
227225
return len;
228226
}
229227

230-
static int _slip_send(uart_t uart, netapi_snd_pkt_t *snd)
228+
static int _slip_send(uart_t uart, netapi_pkt_t *snd)
231229
{
232230
int snd_byte = 0, res;
231+
pkt_hlist_t *ptr = snd->pkt->headers;
233232

234-
if (snd->ulh != NULL) {
235-
netdev_hlist_t *ptr = snd->ulh;
236-
237-
do {
238-
pktbuf_hold(ptr->header);
233+
pktbuf_hold(snd->pkt);
239234

240-
if ((res = _slip_write(uart, ptr->header, ptr->header_len)) < 0) {
241-
return res;
242-
}
235+
while (ptr) {
236+
if ((res = _slip_write(uart, ptr->header_data, ptr->header_len)) < 0) {
237+
return res;
238+
}
243239

244-
pktbuf_release(ptr->header);
245-
snd_byte += res;
246-
netdev_hlist_advance(&ptr);
247-
} while (ptr != snd->ulh);
240+
snd_byte += res;
241+
pkt_hlist_advance(&ptr);
248242
}
249243

250-
if (snd->data != NULL) {
251-
pktbuf_hold(snd->data);
252-
253-
if ((res = _slip_write(uart, snd->data, snd->data_len))) {
244+
if (snd->pkt->payload_data != NULL) {
245+
if ((res = _slip_write(uart, snd->pkt->payload_data,
246+
snd->pkt->payload_len))) {
254247
return res;
255248
}
256249

257-
pktbuf_release(snd->data);
258-
259250
snd_byte += res;
260251
}
261252

262253
_slip_putc(uart, _SLIP_END);
263254

255+
pktbuf_release(snd->pkt);
256+
264257
return snd_byte;
265258
}
266259

@@ -278,7 +271,7 @@ static void _slip_handle_cmd(uart_t uart, msg_t *msg_cmd)
278271

279272
switch (cmd->type) {
280273
case NETAPI_CMD_SND:
281-
ack->result = _slip_send(uart, (netapi_snd_pkt_t *)cmd);
274+
ack->result = _slip_send(uart, (netapi_pkt_t *)cmd);
282275
break;
283276

284277
case NETAPI_CMD_GET:
@@ -405,31 +398,32 @@ kernel_pid_t slip_init(uart_t uart, uint32_t baudrate, ringbuffer_t *in_buf)
405398
}
406399

407400
#ifndef MODULE_NETAPI
408-
int slip_send_l3_packet(kernel_pid_t pid, netdev_hlist_t *upper_layer_hdrs,
409-
void *data, size_t data_len)
401+
int slip_send_l3_packet(kernel_pid_t pid, pkt_t *pkt)
410402
{
411403
msg_t msg_pkt, msg_ack;
412-
netapi_snd_pkt_t pkt;
404+
netapi_pkt_t snd;
413405
netapi_ack_t ack;
414406
int ack_result;
415407

416408
msg_pkt.type = NETAPI_MSG_TYPE;
417-
msg_pkt.content.ptr = (char *)(&pkt);
409+
msg_pkt.content.ptr = (char *)(&snd);
410+
411+
pktbuf_hold(pkt);
418412

419-
pkt.type = NETAPI_CMD_SND;
420-
pkt.ack = &ack;
421-
pkt.ulh = upper_layer_hdrs;
422-
pkt.dest = NULL;
423-
pkt.dest_len = 0;
424-
pkt.data = data;
425-
pkt.data_len = data_len;
413+
snd.type = NETAPI_CMD_SND;
414+
snd.ack = &ack;
415+
snd.dest = NULL;
416+
snd.dest_len = 0;
417+
snd.pkt = pkt;
426418

427419
msg_send_receive(&msg_pkt, &msg_ack, pid);
428420

421+
pktbuf_release(pkt);
422+
429423
if (msg_ack.content.ptr != (char *)(&ack) ||
430424
msg_ack.type != NETAPI_MSG_TYPE ||
431425
ack.type != NETAPI_CMD_ACK ||
432-
ack.orig != pkt.type) {
426+
ack.orig != snd.type) {
433427
return -ENOMSG;
434428
}
435429

tests/slip/main.c

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,34 +35,54 @@
3535
#define INBUF_SIZE (64)
3636
#define READER_STACK_SIZE (KERNEL_CONF_STACKSIZE_DEFAULT)
3737

38+
#ifndef LED_ON
39+
# ifdef LED_GREEN_ON
40+
# define LED_ON LED_GREEN_ON;
41+
# elif defined(LED_ORANGE_ON)
42+
# define LED_ON LED_ORANGE_ON;
43+
# elif defined(LED_RED_ON)
44+
# define LED_ON LED_RED_ON;
45+
# endif
46+
#endif
47+
48+
#ifndef LED_OFF
49+
# ifdef LED_GREEN_OFF
50+
# define LED_OFF LED_GREEN_OFF;
51+
# elif defined(LED_ORANGE_OFF)
52+
# define LED_OFF LED_ORANGE_OFF;
53+
# elif defined(LED_RED_OFF)
54+
# define LED_OFF LED_RED_OFF;
55+
# endif
56+
#endif
57+
3858
static char inbuf_mem[INBUF_SIZE], reader_stack[READER_STACK_SIZE];
3959
static ringbuffer_t inbuf = RINGBUFFER_INIT(inbuf_mem);
4060
static kernel_pid_t slip_pid;
4161

42-
static void blink_led(uint8_t *data, size_t data_len)
62+
static void blink_led(pkt_t *pkt)
4363
{
44-
for (size_t i = 0; i < data_len; i++) {
45-
if (data[i] > 127) {
46-
LED_RED_ON;
47-
LED_GREEN_ON;
64+
uint8_t *data = pkt->payload_data;
65+
66+
for (size_t i = 0; i < pkt->payload_len; i++) {
67+
if (data[i] % 2) {
68+
LED_ON;
4869
}
4970
else {
50-
LED_RED_OFF;
51-
LED_GREEN_OFF;
71+
LED_OFF;
5272
}
5373
}
5474
}
5575

56-
static inline void echo(void *data, size_t size)
76+
static inline void echo(pkt_t *pkt)
5777
{
58-
slip_send_l3_packet(slip_pid, NULL, data, size);
78+
slip_send_l3_packet(slip_pid, pkt);
5979
}
6080

6181
static void *reader(void *args)
6282
{
6383
msg_t msg_rcv, msg_ack, msg_queue[MSG_QUEUE_SIZE];
6484

65-
netapi_rcv_pkt_t *rcv;
85+
netapi_pkt_t *rcv;
6686
netapi_ack_t *ack;
6787

6888
(void)args;
@@ -80,7 +100,7 @@ static void *reader(void *args)
80100
continue;
81101
}
82102

83-
rcv = (netapi_rcv_pkt_t *)(msg_rcv.content.ptr);
103+
rcv = (netapi_pkt_t *)(msg_rcv.content.ptr);
84104
msg_ack.content.ptr = (char *)rcv->ack;
85105
ack = rcv->ack;
86106

@@ -90,12 +110,12 @@ static void *reader(void *args)
90110
continue;
91111
}
92112

93-
pktbuf_hold(rcv->data);
113+
pktbuf_hold(rcv->pkt);
94114
msg_reply(&msg_rcv, &msg_ack);
95115

96-
blink_led(rcv->data, rcv->data_len);
97-
echo(rcv->data, rcv->data_len);
98-
pktbuf_release(rcv->data);
116+
blink_led(rcv->pkt);
117+
echo(rcv->pkt);
118+
pktbuf_release(rcv->pkt);
99119
}
100120

101121
return NULL;

0 commit comments

Comments
 (0)