@@ -11,6 +11,7 @@ mod tests {
11
11
use hex:: encode;
12
12
#[ cfg( not( target_arch = "arm" ) ) ]
13
13
use ring:: rand:: * ;
14
+ use slog:: * ;
14
15
use std:: io:: prelude:: * ;
15
16
use std:: io:: { BufReader , Read , Write } ;
16
17
use std:: net:: * ;
@@ -246,12 +247,19 @@ mod tests {
246
247
impl WGHandle {
247
248
/// Create a new interface for the tunnel with the given address
248
249
fn init ( addr_v4 : IpAddr , addr_v6 : IpAddr ) -> WGHandle {
250
+ let logger = Logger :: root (
251
+ slog_term:: FullFormat :: new ( slog_term:: PlainSyncDecorator :: new ( std:: io:: stdout ( ) ) )
252
+ . build ( )
253
+ . fuse ( ) ,
254
+ slog:: o!( ) ,
255
+ ) ;
256
+
249
257
WGHandle :: init_with_config (
250
258
addr_v4,
251
259
addr_v6,
252
260
DeviceConfig {
253
261
n_threads : 2 ,
254
- log_level : Verbosity :: None ,
262
+ logger ,
255
263
use_connected_socket : true ,
256
264
#[ cfg( target_os = "linux" ) ]
257
265
use_multi_queue : true ,
@@ -529,12 +537,19 @@ mod tests {
529
537
let addr_v4 = next_ip ( ) ;
530
538
let addr_v6 = next_ip_v6 ( ) ;
531
539
540
+ let logger = Logger :: root (
541
+ slog_term:: FullFormat :: new ( slog_term:: PlainSyncDecorator :: new ( std:: io:: stdout ( ) ) )
542
+ . build ( )
543
+ . fuse ( ) ,
544
+ slog:: o!( ) ,
545
+ ) ;
546
+
532
547
let mut wg = WGHandle :: init_with_config (
533
548
addr_v4,
534
549
addr_v6,
535
550
DeviceConfig {
536
551
n_threads : 2 ,
537
- log_level : Verbosity :: None ,
552
+ logger ,
538
553
use_connected_socket : false ,
539
554
#[ cfg( target_os = "linux" ) ]
540
555
use_multi_queue : true ,
@@ -672,6 +687,61 @@ mod tests {
672
687
assert_eq ! ( response, encode( peer. key. public_key( ) . as_bytes( ) ) ) ;
673
688
}
674
689
690
+ /// Test if wireguard can handle connection with an ipv6 endpoint
691
+ #[ test]
692
+ #[ cfg( target_os = "linux" ) ] // Can't make docker work with ipv6 on macOS ATM
693
+ fn test_wg_start_ipv6_endpoint_not_connected ( ) {
694
+ let port = next_port ( ) ;
695
+ let private_key = X25519SecretKey :: new ( ) ;
696
+ let public_key = private_key. public_key ( ) ;
697
+ let addr_v4 = next_ip ( ) ;
698
+ let addr_v6 = next_ip_v6 ( ) ;
699
+
700
+ let logger = Logger :: root (
701
+ slog_term:: FullFormat :: new ( slog_term:: PlainSyncDecorator :: new ( std:: io:: stdout ( ) ) )
702
+ . build ( )
703
+ . fuse ( ) ,
704
+ slog:: o!( ) ,
705
+ ) ;
706
+
707
+ let mut wg = WGHandle :: init_with_config (
708
+ addr_v4,
709
+ addr_v6,
710
+ DeviceConfig {
711
+ n_threads : 2 ,
712
+ logger,
713
+ use_connected_socket : false ,
714
+ #[ cfg( target_os = "linux" ) ]
715
+ use_multi_queue : true ,
716
+ } ,
717
+ ) ;
718
+
719
+ assert_eq ! ( wg. wg_set_port( port) , "errno=0\n \n " ) ;
720
+ assert_eq ! ( wg. wg_set_key( & private_key) , "errno=0\n \n " ) ;
721
+
722
+ let mut peer = Peer :: new (
723
+ SocketAddr :: new (
724
+ IpAddr :: V6 ( Ipv6Addr :: new ( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ) ) ,
725
+ next_port ( ) ,
726
+ ) ,
727
+ vec ! [ AllowedIp {
728
+ ip: next_ip_v6( ) ,
729
+ cidr: 128 ,
730
+ } ] ,
731
+ ) ;
732
+
733
+ peer. start_in_container ( & public_key, & addr_v6, port) ;
734
+
735
+ let peer = Arc :: new ( peer) ;
736
+
737
+ wg. add_peer ( Arc :: clone ( & peer) ) ;
738
+ wg. start ( ) ;
739
+
740
+ let response = peer. get_request ( ) ;
741
+
742
+ assert_eq ! ( response, encode( peer. key. public_key( ) . as_bytes( ) ) ) ;
743
+ }
744
+
675
745
/// Test many concurrent connections
676
746
#[ test]
677
747
fn test_wg_concurrent ( ) {
0 commit comments