2
2
// License, v. 2.0. If a copy of the MPL was not distributed with this
3
3
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
4
5
- use mg_common:: net:: { IpPrefix , Ipv6Prefix , TunnelOrigin } ;
5
+ use mg_common:: net:: TunnelOrigin ;
6
+ use oxnet:: { IpNet , Ipv6Net } ;
6
7
use schemars:: { JsonSchema , JsonSchema_repr } ;
7
8
use serde:: { Deserialize , Serialize } ;
8
9
use serde_repr:: { Deserialize_repr , Serialize_repr } ;
@@ -105,10 +106,7 @@ impl Db {
105
106
}
106
107
}
107
108
108
- pub fn originate (
109
- & self ,
110
- prefixes : & HashSet < Ipv6Prefix > ,
111
- ) -> Result < ( ) , Error > {
109
+ pub fn originate ( & self , prefixes : & HashSet < Ipv6Net > ) -> Result < ( ) , Error > {
112
110
let tree = self . persistent_data . open_tree ( ORIGINATE ) ?;
113
111
for p in prefixes {
114
112
tree. insert ( p. db_key ( ) , "" ) ?;
@@ -130,7 +128,7 @@ impl Db {
130
128
Ok ( ( ) )
131
129
}
132
130
133
- pub fn originated ( & self ) -> Result < HashSet < Ipv6Prefix > , Error > {
131
+ pub fn originated ( & self ) -> Result < HashSet < Ipv6Net > , Error > {
134
132
let tree = self . persistent_data . open_tree ( ORIGINATE ) ?;
135
133
let result = tree
136
134
. scan_prefix ( vec ! [ ] )
@@ -145,7 +143,7 @@ impl Db {
145
143
return None ;
146
144
}
147
145
} ;
148
- Some ( match Ipv6Prefix :: from_db_key ( & key) {
146
+ Some ( match Ipv6Net :: from_db_key ( & key) {
149
147
Ok ( item) => item,
150
148
Err ( e) => {
151
149
error ! (
@@ -200,10 +198,7 @@ impl Db {
200
198
Ok ( self . originated_tunnel ( ) ?. len ( ) )
201
199
}
202
200
203
- pub fn withdraw (
204
- & self ,
205
- prefixes : & HashSet < Ipv6Prefix > ,
206
- ) -> Result < ( ) , Error > {
201
+ pub fn withdraw ( & self , prefixes : & HashSet < Ipv6Net > ) -> Result < ( ) , Error > {
207
202
let tree = self . persistent_data . open_tree ( ORIGINATE ) ?;
208
203
for p in prefixes {
209
204
tree. remove ( p. db_key ( ) ) ?;
@@ -269,7 +264,7 @@ impl Db {
269
264
270
265
pub fn routes_by_vector (
271
266
& self ,
272
- dst : Ipv6Prefix ,
267
+ dst : Ipv6Net ,
273
268
nexthop : Ipv6Addr ,
274
269
) -> Vec < Route > {
275
270
let data = self . data . lock ( ) . unwrap ( ) ;
@@ -356,7 +351,7 @@ pub struct TunnelRoute {
356
351
Debug , Clone , PartialEq , Eq , Hash , Serialize , Deserialize , JsonSchema ,
357
352
) ]
358
353
pub struct Route {
359
- pub destination : Ipv6Prefix ,
354
+ pub destination : Ipv6Net ,
360
355
pub nexthop : Ipv6Addr ,
361
356
pub ifname : String ,
362
357
pub path : Vec < String > ,
@@ -390,7 +385,7 @@ impl EffectiveTunnelRouteSet {
390
385
pub fn effective_route_set (
391
386
full : & HashSet < TunnelRoute > ,
392
387
) -> HashSet < TunnelRoute > {
393
- let mut sets = HashMap :: < IpPrefix , EffectiveTunnelRouteSet > :: new ( ) ;
388
+ let mut sets = HashMap :: < IpNet , EffectiveTunnelRouteSet > :: new ( ) ;
394
389
for x in full. iter ( ) {
395
390
match sets. get_mut ( & x. origin . overlay_prefix ) {
396
391
Some ( set) => {
@@ -458,24 +453,25 @@ trait DbKey: Sized {
458
453
fn from_db_key ( v : & [ u8 ] ) -> Result < Self , Error > ;
459
454
}
460
455
461
- impl DbKey for Ipv6Prefix {
456
+ impl DbKey for Ipv6Net {
462
457
fn db_key ( & self ) -> Vec < u8 > {
463
- let mut buf: Vec < u8 > = self . addr . octets ( ) . into ( ) ;
464
- buf. push ( self . len ) ;
458
+ let mut buf: Vec < u8 > = self . addr ( ) . octets ( ) . into ( ) ;
459
+ buf. push ( self . width ( ) ) ;
465
460
buf
466
461
}
467
462
468
463
fn from_db_key ( v : & [ u8 ] ) -> Result < Self , Error > {
469
464
if v. len ( ) < 17 {
470
465
Err ( Error :: DbKey ( format ! (
471
- "buffer to short for prefix 6 key {} < 17" ,
466
+ "buffer too short for prefix 6 key {} < 17" ,
472
467
v. len( )
473
468
) ) )
474
469
} else {
475
- Ok ( Self {
476
- addr : Ipv6Addr :: from ( <[ u8 ; 16 ] >:: try_from ( & v[ ..16 ] ) . unwrap ( ) ) ,
477
- len : v[ 16 ] ,
478
- } )
470
+ Self :: new (
471
+ Ipv6Addr :: from ( <[ u8 ; 16 ] >:: try_from ( & v[ ..16 ] ) . unwrap ( ) ) ,
472
+ v[ 16 ] ,
473
+ )
474
+ . map_err ( |e| Error :: DbKey ( e. to_string ( ) ) )
479
475
}
480
476
}
481
477
}
@@ -494,7 +490,6 @@ impl From<crate::db::TunnelRoute> for TunnelOrigin {
494
490
#[ cfg( test) ]
495
491
mod test {
496
492
use super :: * ;
497
- use mg_common:: net:: { IpPrefix , Ipv4Prefix } ;
498
493
use pretty_assertions:: assert_eq;
499
494
use std:: collections:: HashSet ;
500
495
@@ -503,10 +498,7 @@ mod test {
503
498
let mut before = HashSet :: < TunnelRoute > :: new ( ) ;
504
499
before. insert ( TunnelRoute {
505
500
origin : TunnelOrigin {
506
- overlay_prefix : IpPrefix :: V4 ( Ipv4Prefix {
507
- addr : "0.0.0.0" . parse ( ) . unwrap ( ) ,
508
- len : 0 ,
509
- } ) ,
501
+ overlay_prefix : "0.0.0.0/0" . parse ( ) . unwrap ( ) ,
510
502
boundary_addr : "fd00:a::1" . parse ( ) . unwrap ( ) ,
511
503
vni : 99 ,
512
504
metric : 0 ,
@@ -515,10 +507,7 @@ mod test {
515
507
} ) ;
516
508
before. insert ( TunnelRoute {
517
509
origin : TunnelOrigin {
518
- overlay_prefix : IpPrefix :: V4 ( Ipv4Prefix {
519
- addr : "0.0.0.0" . parse ( ) . unwrap ( ) ,
520
- len : 0 ,
521
- } ) ,
510
+ overlay_prefix : "0.0.0.0/0" . parse ( ) . unwrap ( ) ,
522
511
boundary_addr : "fd00:b::1" . parse ( ) . unwrap ( ) ,
523
512
vni : 99 ,
524
513
metric : 0 ,
@@ -530,10 +519,7 @@ mod test {
530
519
let mut after = HashSet :: < TunnelRoute > :: new ( ) ;
531
520
after. insert ( TunnelRoute {
532
521
origin : TunnelOrigin {
533
- overlay_prefix : IpPrefix :: V4 ( Ipv4Prefix {
534
- addr : "0.0.0.0" . parse ( ) . unwrap ( ) ,
535
- len : 0 ,
536
- } ) ,
522
+ overlay_prefix : "0.0.0.0/0" . parse ( ) . unwrap ( ) ,
537
523
boundary_addr : "fd00:a::1" . parse ( ) . unwrap ( ) ,
538
524
vni : 99 ,
539
525
metric : 0 ,
@@ -542,10 +528,7 @@ mod test {
542
528
} ) ;
543
529
after. insert ( TunnelRoute {
544
530
origin : TunnelOrigin {
545
- overlay_prefix : IpPrefix :: V4 ( Ipv4Prefix {
546
- addr : "0.0.0.0" . parse ( ) . unwrap ( ) ,
547
- len : 0 ,
548
- } ) ,
531
+ overlay_prefix : "0.0.0.0/0" . parse ( ) . unwrap ( ) ,
549
532
boundary_addr : "fd00:b::1" . parse ( ) . unwrap ( ) ,
550
533
vni : 99 ,
551
534
metric : 100 ,
@@ -570,10 +553,7 @@ mod test {
570
553
let mut expected_del = HashSet :: < TunnelRoute > :: new ( ) ;
571
554
expected_del. insert ( TunnelRoute {
572
555
origin : TunnelOrigin {
573
- overlay_prefix : IpPrefix :: V4 ( Ipv4Prefix {
574
- addr : "0.0.0.0" . parse ( ) . unwrap ( ) ,
575
- len : 0 ,
576
- } ) ,
556
+ overlay_prefix : "0.0.0.0/0" . parse ( ) . unwrap ( ) ,
577
557
boundary_addr : "fd00:a::1" . parse ( ) . unwrap ( ) ,
578
558
vni : 99 ,
579
559
metric : 0 ,
0 commit comments