@@ -8,7 +8,7 @@ use std::{
8
8
use netlink_packet_route:: {
9
9
route:: {
10
10
RouteAddress , RouteAttribute , RouteFlags , RouteHeader , RouteMessage ,
11
- RouteProtocol , RouteScope , RouteType ,
11
+ RouteProtocol , RouteScope , RouteType , RouteVia ,
12
12
} ,
13
13
AddressFamily ,
14
14
} ;
@@ -360,25 +360,15 @@ impl RouteMessageBuilder<IpAddr> {
360
360
mut self ,
361
361
addr : IpAddr ,
362
362
) -> Result < Self , InvalidRouteMessage > {
363
- self . set_address_family_from_ip_addr ( addr) ;
364
- match self . message . header . address_family {
365
- AddressFamily :: Inet => {
366
- if addr. is_ipv6 ( ) {
367
- return Err ( InvalidRouteMessage :: Gateway ( addr) ) ;
368
- } ;
369
- }
370
- AddressFamily :: Inet6 => {
371
- if addr. is_ipv4 ( ) {
372
- return Err ( InvalidRouteMessage :: Gateway ( addr) ) ;
373
- } ;
374
- }
375
- af => {
376
- return Err ( InvalidRouteMessage :: AddressFamily ( af) ) ;
363
+ use AddressFamily :: * ;
364
+ let attr = match ( self . message . header . address_family , addr) {
365
+ ( Inet , addr @ IpAddr :: V4 ( _) ) | ( Inet6 , addr @ IpAddr :: V6 ( _) ) => {
366
+ RouteAttribute :: Gateway ( addr. into ( ) )
377
367
}
378
- }
379
- self . message
380
- . attributes
381
- . push ( RouteAttribute :: Gateway ( addr . into ( ) ) ) ;
368
+ ( Inet , IpAddr :: V6 ( v6 ) ) => RouteAttribute :: Via ( RouteVia :: Inet6 ( v6 ) ) ,
369
+ ( af , _ ) => return Err ( InvalidRouteMessage :: AddressFamily ( af ) ) ,
370
+ } ;
371
+ self . message . attributes . push ( attr ) ;
382
372
Ok ( self )
383
373
}
384
374
0 commit comments