@@ -135,35 +135,35 @@ static int _slip_putc(uart_t uart, char c)
135
135
136
136
static void _slip_receive (msg_t * uart_msg , _uart_ctx_t * ctx )
137
137
{
138
- netapi_rcv_pkt_t packet ;
138
+ netapi_pkt_t rcv ;
139
139
netapi_ack_t ack_mem ;
140
140
msg_t l3_pkt , l3_ack , uart_reply ;
141
141
size_t bytes = ctx -> bytes ;
142
- char * pkt = (char * )pktbuf_alloc (bytes );
143
-
144
- ringbuffer_get (ctx -> in_buf , pkt , bytes );
145
142
146
143
msg_reply (uart_msg , & uart_reply );
147
144
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 ;
154
151
l3_pkt .type = NETAPI_MSG_TYPE ;
155
- l3_pkt .content .ptr = (char * )(& packet );
152
+ l3_pkt .content .ptr = (char * )(& rcv );
156
153
157
154
for (int i = 0 ; i < _SLIP_REGISTRY_SIZE ; i ++ ) {
158
155
if (ctx -> registry [i ] != KERNEL_PID_UNDEF ) {
159
156
size_t offset = 0 ;
160
157
161
158
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 ;
164
163
netapi_ack_t * ack ;
165
164
166
165
msg_send_receive (& l3_pkt , & l3_ack , ctx -> registry [i ]);
166
+ pktbuf_release (pkt );
167
167
ack = (netapi_ack_t * )(l3_ack .content .ptr );
168
168
169
169
if (l3_ack .type == NETAPI_MSG_TYPE &&
@@ -186,8 +186,6 @@ static void _slip_receive(msg_t *uart_msg, _uart_ctx_t *ctx)
186
186
return ;
187
187
}
188
188
}
189
-
190
- pktbuf_release (pkt );
191
189
}
192
190
}
193
191
}
@@ -227,40 +225,35 @@ static int _slip_write(uart_t uart, uint8_t *bytes, size_t len)
227
225
return len ;
228
226
}
229
227
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 )
231
229
{
232
230
int snd_byte = 0 , res ;
231
+ pkt_hlist_t * ptr = snd -> pkt -> headers ;
233
232
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 );
239
234
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
+ }
243
239
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 );
248
242
}
249
243
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 ))) {
254
247
return res ;
255
248
}
256
249
257
- pktbuf_release (snd -> data );
258
-
259
250
snd_byte += res ;
260
251
}
261
252
262
253
_slip_putc (uart , _SLIP_END );
263
254
255
+ pktbuf_release (snd -> pkt );
256
+
264
257
return snd_byte ;
265
258
}
266
259
@@ -278,7 +271,7 @@ static void _slip_handle_cmd(uart_t uart, msg_t *msg_cmd)
278
271
279
272
switch (cmd -> type ) {
280
273
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 );
282
275
break ;
283
276
284
277
case NETAPI_CMD_GET :
@@ -405,31 +398,32 @@ kernel_pid_t slip_init(uart_t uart, uint32_t baudrate, ringbuffer_t *in_buf)
405
398
}
406
399
407
400
#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 )
410
402
{
411
403
msg_t msg_pkt , msg_ack ;
412
- netapi_snd_pkt_t pkt ;
404
+ netapi_pkt_t snd ;
413
405
netapi_ack_t ack ;
414
406
int ack_result ;
415
407
416
408
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 );
418
412
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 ;
426
418
427
419
msg_send_receive (& msg_pkt , & msg_ack , pid );
428
420
421
+ pktbuf_release (pkt );
422
+
429
423
if (msg_ack .content .ptr != (char * )(& ack ) ||
430
424
msg_ack .type != NETAPI_MSG_TYPE ||
431
425
ack .type != NETAPI_CMD_ACK ||
432
- ack .orig != pkt .type ) {
426
+ ack .orig != snd .type ) {
433
427
return - ENOMSG ;
434
428
}
435
429
0 commit comments