@@ -602,10 +602,9 @@ int link_request_static_nexthops(Link *link, bool only_ipv4) {
602602 return 0 ;
603603}
604604
605- static int manager_drop_nexthops (Manager * manager , bool foreign , const Link * except ) {
605+ static void manager_mark_nexthops (Manager * manager , bool foreign , const Link * except ) {
606606 NextHop * nexthop ;
607607 Link * link ;
608- int k , r = 0 ;
609608
610609 assert (manager );
611610
@@ -641,8 +640,14 @@ static int manager_drop_nexthops(Manager *manager, bool foreign, const Link *exc
641640 nexthop_unmark (existing );
642641 }
643642 }
643+ }
644+
645+ static int manager_drop_nexthops (Manager * manager ) {
646+ NextHop * nexthop ;
647+ int k , r = 0 ;
648+
649+ assert (manager );
644650
645- /* Finally, remove all marked nexthops. */
646651 SET_FOREACH (nexthop , manager -> nexthops ) {
647652 if (!nexthop_is_marked (nexthop ))
648653 continue ;
@@ -698,7 +703,9 @@ int link_drop_foreign_nexthops(Link *link) {
698703 r = k ;
699704 }
700705
701- k = manager_drop_nexthops (link -> manager , /* foreign = */ true, NULL );
706+ manager_mark_nexthops (link -> manager , /* foreign = */ true, NULL );
707+
708+ k = manager_drop_nexthops (link -> manager );
702709 if (k < 0 && r >= 0 )
703710 r = k ;
704711
@@ -726,13 +733,33 @@ int link_drop_nexthops(Link *link) {
726733 r = k ;
727734 }
728735
729- k = manager_drop_nexthops (link -> manager , /* foreign = */ false, link );
736+ manager_mark_nexthops (link -> manager , /* foreign = */ false, link );
737+
738+ k = manager_drop_nexthops (link -> manager );
730739 if (k < 0 && r >= 0 )
731740 r = k ;
732741
733742 return r ;
734743}
735744
745+ void link_foreignize_nexthops (Link * link ) {
746+ NextHop * nexthop ;
747+
748+ assert (link );
749+
750+ SET_FOREACH (nexthop , link -> nexthops )
751+ nexthop -> source = NETWORK_CONFIG_SOURCE_FOREIGN ;
752+
753+ manager_mark_nexthops (link -> manager , /* foreign = */ false, link );
754+
755+ SET_FOREACH (nexthop , link -> manager -> nexthops ) {
756+ if (!nexthop_is_marked (nexthop ))
757+ continue ;
758+
759+ nexthop -> source = NETWORK_CONFIG_SOURCE_FOREIGN ;
760+ }
761+ }
762+
736763static bool nexthop_is_ready_to_configure (Link * link , const NextHop * nexthop ) {
737764 struct nexthop_grp * nhg ;
738765
0 commit comments