@@ -396,27 +396,17 @@ impl PortSettingsDiff {
396396 spec : & Modify < LinkSpec > ,
397397 rb : & mut Rollback ,
398398 ) -> DpdResult < ( ) > {
399- // unsupported things
400- // XXX: we actually could support this now, as the reconciler task will
401- // do the necessary cleanup before attempting to apply the changes.
402- if spec. before . speed != spec. after . speed {
403- return Err ( DpdError :: Invalid (
404- "changing link speed not supported, recreate required" . into ( ) ,
405- ) ) ;
406- }
407- if spec. before . fec != spec. after . fec {
408- return Err ( DpdError :: Invalid (
409- "changing link fec not supported, recreate required" . into ( ) ,
410- ) ) ;
411- }
412-
413399 let link_lock = ctx. link ( link_id) ?;
414400 let mut link = link_lock. lock ( ) . unwrap ( ) ;
415401
402+ let speed_before = spec. before . speed ;
403+ let fec_before = spec. before . fec ;
416404 let an_before = spec. before . autoneg ;
417405 let kr_before = spec. before . kr ;
418406 let txeq_before = spec. before . tx_eq ;
419407 let delete_before = spec. before . delete_me ;
408+ link. config . speed = spec. after . speed ;
409+ link. config . fec = spec. after . fec ;
420410 link. config . autoneg = spec. after . autoneg ;
421411 link. config . kr = spec. after . kr ;
422412 link. tx_eq = spec. after . tx_eq ;
@@ -427,6 +417,8 @@ impl PortSettingsDiff {
427417 rb. wind ( move |ctx : & mut Context < ' _ > | -> DpdResult < ( ) > {
428418 let link_lock = ctx. link ( link_id) ?;
429419 let mut link = link_lock. lock ( ) . unwrap ( ) ;
420+ link. config . speed = speed_before;
421+ link. config . fec = fec_before;
430422 link. config . autoneg = an_before;
431423 link. config . kr = kr_before;
432424 link. tx_eq = txeq_before;
0 commit comments