@@ -607,6 +607,59 @@ func handleNetdevResources(resourceName string) (string, error) {
607607 return netdevice , nil
608608}
609609
610+ // configureMgmtPortNetdevFromResource uses device plugin resources to determine and set
611+ // the management port netdevice if a DP resource name is provided via configuration.
612+ func configureMgmtPortNetdevFromResource () error {
613+ if config .OvnKubeNode .MgmtPortDPResourceName == "" {
614+ return nil
615+ }
616+ if err := handleDevicePluginResources (); err != nil {
617+ return err
618+ }
619+ netdevice , err := handleNetdevResources (config .OvnKubeNode .MgmtPortDPResourceName )
620+ if err != nil {
621+ return err
622+ }
623+ if config .OvnKubeNode .MgmtPortNetdev != "" {
624+ klog .Warningf ("MgmtPortNetdev is set explicitly (%s), overriding with resource..." ,
625+ config .OvnKubeNode .MgmtPortNetdev )
626+ }
627+ config .OvnKubeNode .MgmtPortNetdev = netdevice
628+ klog .V (5 ).Infof ("Using MgmtPortNetdev (Netdev %s) passed via resource %s" ,
629+ config .OvnKubeNode .MgmtPortNetdev , config .OvnKubeNode .MgmtPortDPResourceName )
630+ return nil
631+ }
632+
633+ // Resolve gateway interface from PCI address when configured as "derive-from-mgmt-port"
634+ // configureGatewayInterfaceFromMgmtPort resolves and sets the gateway interface derived
635+ // from the management port's PF when `config.Gateway.Interface` is set to derive-from-mgmt-port.
636+ func configureGatewayInterfaceFromMgmtPort () error {
637+ if config .Gateway .Interface != types .DeriveFromMgmtPort {
638+ return nil
639+ }
640+ netdevName , err := getManagementPortNetDev (config .OvnKubeNode .MgmtPortNetdev )
641+ if err != nil {
642+ return err
643+ }
644+ pciAddr , err := util .GetSriovnetOps ().GetPciFromNetDevice (netdevName )
645+ if err != nil {
646+ return err
647+ }
648+ pfPciAddr , err := util .GetSriovnetOps ().GetPfPciFromVfPci (pciAddr )
649+ if err != nil {
650+ return err
651+ }
652+ netdevs , err := util .GetSriovnetOps ().GetNetDevicesFromPci (pfPciAddr )
653+ if err != nil {
654+ return err
655+ }
656+ if len (netdevs ) == 0 {
657+ return fmt .Errorf ("no netdevs found for pci address %s" , pfPciAddr )
658+ }
659+ config .Gateway .Interface = netdevs [0 ]
660+ return nil
661+ }
662+
610663func exportManagementPortAnnotation (netdevName string , nodeAnnotator kube.Annotator ) error {
611664 klog .Infof ("Exporting management port annotation for netdev '%v'" , netdevName )
612665 deviceID , err := util .GetDeviceIDFromNetdevice (netdevName )
@@ -927,6 +980,17 @@ func (nc *DefaultNodeNetworkController) Init(ctx context.Context) error {
927980
928981 nodeAnnotator := kube .NewNodeAnnotator (nc .Kube , node .Name )
929982
983+ // Use the device from environment when the DP resource name is specified.
984+ if err := configureMgmtPortNetdevFromResource (); err != nil {
985+ return err
986+ }
987+
988+ if config .OvnKubeNode .Mode == types .NodeModeDPUHost {
989+ if err := configureGatewayInterfaceFromMgmtPort (); err != nil {
990+ return err
991+ }
992+ }
993+
930994 // Setup management ports
931995 nc .mgmtPortController , err = createNodeManagementPortController (
932996 node ,
@@ -1011,58 +1075,8 @@ func (nc *DefaultNodeNetworkController) Start(ctx context.Context) error {
10111075 nodeAnnotator := kube .NewNodeAnnotator (nc .Kube , node .Name )
10121076 waiter := newStartupWaiter ()
10131077
1014- // Use the device from environment when the DP resource name is specified.
1015- if config .OvnKubeNode .MgmtPortDPResourceName != "" {
1016- if err := handleDevicePluginResources (); err != nil {
1017- return err
1018- }
1019-
1020- netdevice , err := handleNetdevResources (config .OvnKubeNode .MgmtPortDPResourceName )
1021- if err != nil {
1022- return err
1023- }
1024-
1025- if config .OvnKubeNode .MgmtPortNetdev != "" {
1026- klog .Warningf ("MgmtPortNetdev is set explicitly (%s), overriding with resource..." ,
1027- config .OvnKubeNode .MgmtPortNetdev )
1028- }
1029- config .OvnKubeNode .MgmtPortNetdev = netdevice
1030- klog .V (5 ).Infof ("Using MgmtPortNetdev (Netdev %s) passed via resource %s" ,
1031- config .OvnKubeNode .MgmtPortNetdev , config .OvnKubeNode .MgmtPortDPResourceName )
1032- }
1033-
10341078 // Complete gateway initialization
10351079 if config .OvnKubeNode .Mode == types .NodeModeDPUHost {
1036- // Resolve gateway interface from PCI address when configured as "derive-from-mgmt-port"
1037- // This performs the following steps:
1038- // Get the management port network device name
1039- // Retrieve the PCI address of the management port device
1040- // Get the Physical Function (PF) PCI address from the Virtual Function (VF) PCI address
1041- // Retrieve all network devices associated with the PF PCI address
1042- // Select the first available network device as the gateway interface
1043- if config .Gateway .Interface == types .DeriveFromMgmtPort {
1044- netdevName , err := getManagementPortNetDev (config .OvnKubeNode .MgmtPortNetdev )
1045- if err != nil {
1046- return err
1047- }
1048- pciAddr , err := util .GetSriovnetOps ().GetPciFromNetDevice (netdevName )
1049- if err != nil {
1050- return err
1051- }
1052- pfPciAddr , err := util .GetSriovnetOps ().GetPfPciFromVfPci (pciAddr )
1053- if err != nil {
1054- return err
1055- }
1056- netdevs , err := util .GetSriovnetOps ().GetNetDevicesFromPci (pfPciAddr )
1057- if err != nil {
1058- return err
1059- }
1060- if len (netdevs ) == 0 {
1061- return fmt .Errorf ("no netdevs found for pci address %s" , pfPciAddr )
1062- }
1063- netdevName = netdevs [0 ]
1064- config .Gateway .Interface = netdevName
1065- }
10661080 err = nc .initGatewayDPUHost (nc .nodeAddress , nodeAnnotator )
10671081 if err != nil {
10681082 return err
0 commit comments