@@ -4,13 +4,12 @@ use log::debug;
4
4
use std:: collections:: BTreeMap ;
5
5
use std:: fmt:: Write ;
6
6
use std:: os:: unix:: io:: AsRawFd ;
7
- use std:: str;
8
7
9
8
#[ cfg( any(
10
9
feature = "proto-sixlowpan-fragmentation" ,
11
10
feature = "proto-ipv4-fragmentation"
12
11
) ) ]
13
- use smoltcp:: iface:: FragmentsCache ;
12
+ use smoltcp:: iface:: ReassemblyBuffer ;
14
13
use smoltcp:: iface:: { InterfaceBuilder , NeighborCache , SocketSet } ;
15
14
use smoltcp:: phy:: { wait as phy_wait, Device , Medium } ;
16
15
use smoltcp:: socket:: { tcp, udp} ;
@@ -32,8 +31,14 @@ fn main() {
32
31
33
32
let neighbor_cache = NeighborCache :: new ( BTreeMap :: new ( ) ) ;
34
33
35
- let udp_rx_buffer = udp:: PacketBuffer :: new ( vec ! [ udp:: PacketMetadata :: EMPTY ] , vec ! [ 0 ; 65535 ] ) ;
36
- let udp_tx_buffer = udp:: PacketBuffer :: new ( vec ! [ udp:: PacketMetadata :: EMPTY ] , vec ! [ 0 ; 65535 ] ) ;
34
+ let udp_rx_buffer = udp:: PacketBuffer :: new (
35
+ vec ! [ udp:: PacketMetadata :: EMPTY , udp:: PacketMetadata :: EMPTY ] ,
36
+ vec ! [ 0 ; 65535 ] ,
37
+ ) ;
38
+ let udp_tx_buffer = udp:: PacketBuffer :: new (
39
+ vec ! [ udp:: PacketMetadata :: EMPTY , udp:: PacketMetadata :: EMPTY ] ,
40
+ vec ! [ 0 ; 65535 ] ,
41
+ ) ;
37
42
let udp_socket = udp:: Socket :: new ( udp_rx_buffer, udp_tx_buffer) ;
38
43
39
44
let tcp1_rx_buffer = tcp:: SocketBuffer :: new ( vec ! [ 0 ; 64 ] ) ;
@@ -62,20 +67,31 @@ fn main() {
62
67
let medium = device. capabilities ( ) . medium ;
63
68
let mut builder = InterfaceBuilder :: new ( ) . ip_addrs ( ip_addrs) ;
64
69
70
+ builder = builder. random_seed (
71
+ std:: time:: SystemTime :: now ( )
72
+ . duration_since ( std:: time:: UNIX_EPOCH )
73
+ . unwrap ( )
74
+ . as_secs ( ) ,
75
+ ) ;
76
+
77
+ #[ cfg( feature = "proto-ipv4-fragmentation" ) ]
78
+ let mut ipv4_out_packet_cache = [ 0u8 ; 10_000 ] ;
65
79
#[ cfg( feature = "proto-ipv4-fragmentation" ) ]
66
80
{
67
- let ipv4_frag_cache = FragmentsCache :: new ( vec ! [ ] , BTreeMap :: new ( ) ) ;
68
- builder = builder. ipv4_fragments_cache ( ipv4_frag_cache) ;
81
+ let ipv4_frag_cache = ReassemblyBuffer :: new ( vec ! [ ] , BTreeMap :: new ( ) ) ;
82
+ builder = builder
83
+ . ipv4_reassembly_buffer ( ipv4_frag_cache)
84
+ . ipv4_fragmentation_buffer ( & mut ipv4_out_packet_cache[ ..] ) ;
69
85
}
70
86
71
87
#[ cfg( feature = "proto-sixlowpan-fragmentation" ) ]
72
- let mut out_packet_buffer = [ 0u8 ; 1280 ] ;
88
+ let mut sixlowpan_out_packet_cache = [ 0u8 ; 1280 ] ;
73
89
#[ cfg( feature = "proto-sixlowpan-fragmentation" ) ]
74
90
{
75
- let sixlowpan_frag_cache = FragmentsCache :: new ( vec ! [ ] , BTreeMap :: new ( ) ) ;
91
+ let sixlowpan_frag_cache = ReassemblyBuffer :: new ( vec ! [ ] , BTreeMap :: new ( ) ) ;
76
92
builder = builder
77
- . sixlowpan_fragments_cache ( sixlowpan_frag_cache)
78
- . sixlowpan_out_packet_cache ( & mut out_packet_buffer [ ..] ) ;
93
+ . sixlowpan_reassembly_buffer ( sixlowpan_frag_cache)
94
+ . sixlowpan_fragmentation_buffer ( & mut sixlowpan_out_packet_cache [ ..] ) ;
79
95
}
80
96
81
97
if medium == Medium :: Ethernet {
@@ -110,22 +126,16 @@ fn main() {
110
126
111
127
let client = match socket. recv ( ) {
112
128
Ok ( ( data, endpoint) ) => {
113
- debug ! (
114
- "udp:6969 recv data: {:?} from {}" ,
115
- str :: from_utf8( data) . unwrap( ) ,
116
- endpoint
117
- ) ;
118
- Some ( endpoint)
129
+ debug ! ( "udp:6969 recv data: {:?} from {}" , data, endpoint) ;
130
+ let mut data = data. to_vec ( ) ;
131
+ data. reverse ( ) ;
132
+ Some ( ( endpoint, data) )
119
133
}
120
134
Err ( _) => None ,
121
135
} ;
122
- if let Some ( endpoint) = client {
123
- let data = b"hello\n " ;
124
- debug ! (
125
- "udp:6969 send data: {:?}" ,
126
- str :: from_utf8( data. as_ref( ) ) . unwrap( )
127
- ) ;
128
- socket. send_slice ( data, endpoint) . unwrap ( ) ;
136
+ if let Some ( ( endpoint, data) ) = client {
137
+ debug ! ( "udp:6969 send data: {:?} to {}" , data, endpoint, ) ;
138
+ socket. send_slice ( & data, endpoint) . unwrap ( ) ;
129
139
}
130
140
131
141
// tcp:6969: respond "hello"
@@ -160,10 +170,7 @@ fn main() {
160
170
let recvd_len = buffer. len ( ) ;
161
171
let mut data = buffer. to_owned ( ) ;
162
172
if !data. is_empty ( ) {
163
- debug ! (
164
- "tcp:6970 recv data: {:?}" ,
165
- str :: from_utf8( data. as_ref( ) ) . unwrap_or( "(invalid utf8)" )
166
- ) ;
173
+ debug ! ( "tcp:6970 recv data: {:?}" , data) ;
167
174
data = data. split ( |& b| b == b'\n' ) . collect :: < Vec < _ > > ( ) . concat ( ) ;
168
175
data. reverse ( ) ;
169
176
data. extend ( b"\n " ) ;
@@ -172,10 +179,7 @@ fn main() {
172
179
} )
173
180
. unwrap ( ) ;
174
181
if socket. can_send ( ) && !data. is_empty ( ) {
175
- debug ! (
176
- "tcp:6970 send data: {:?}" ,
177
- str :: from_utf8( data. as_ref( ) ) . unwrap_or( "(invalid utf8)" )
178
- ) ;
182
+ debug ! ( "tcp:6970 send data: {:?}" , data) ;
179
183
socket. send_slice ( & data[ ..] ) . unwrap ( ) ;
180
184
}
181
185
} else if socket. may_send ( ) {
0 commit comments