@@ -7,6 +7,9 @@ package main
77
88import (
99 "encoding/json"
10+ "log"
11+ "net"
12+ "os/exec"
1013 "strings"
1114
1215 "fmt"
@@ -85,11 +88,16 @@ func injectMaster(inData []byte, selectedNetAddrs []string, selectedMasters []st
8588 return outBytes
8689}
8790
88- // getHostIPConfig returns IP of host for a specific devName
89- func getHostIPConfig (index int , devName string ) * current.IPConfig {
90- devLink , err := netlink . LinkByName ( devName )
91+ // getHostIPConfig returns IP of host for a specific device ID and correct devName if needed
92+ func getHostIPConfig (index int , devName , deviceID string ) * current.IPConfig {
93+ presentName , err := getLinkNameFromPciAddress ( deviceID )
9194 if err != nil {
92- utils .Logger .Debug (fmt .Sprintf ("cannot find link %s: %v" , devName , err ))
95+ utils .Logger .Debug (fmt .Sprintf ("failed to get link name from device ID %s: %v" , deviceID , err ))
96+ return nil
97+ }
98+ devLink , err := netlink .LinkByName (presentName )
99+ if err != nil {
100+ utils .Logger .Debug (fmt .Sprintf ("cannot find link %s: %v" , presentName , err ))
93101 return nil
94102 }
95103 addrs , err := netlink .AddrList (devLink , netlink .FAMILY_V4 )
@@ -102,5 +110,41 @@ func getHostIPConfig(index int, devName string) *current.IPConfig {
102110 Address : * addr ,
103111 Interface : current .Int (index ),
104112 }
113+ if devName != "" && presentName != devName {
114+ if devLink .Attrs ().Flags & net .FlagUp == net .FlagUp {
115+ if err = netlink .LinkSetDown (devLink ); err != nil {
116+ log .Printf ("WARNING: cannot set link down: %v" , err )
117+ }
118+ defer func () {
119+ _ = netlink .LinkSetUp (devLink )
120+ }()
121+ }
122+ if err = netlink .LinkSetAlias (devLink , "" ); err != nil {
123+ log .Printf ("WARNING: cannot reset alias: %v" , err )
124+ }
125+
126+ if err = delAltName (presentName , devName ); err != nil {
127+ log .Printf ("WARNING: cannot del altname: %v" , err )
128+ } else {
129+ log .Printf ("successfully delete altname %s (%s)" , devName , presentName )
130+ }
131+
132+ // correct the device to the expected name
133+ if err = netlink .LinkSetName (devLink , devName ); err != nil {
134+ utils .Logger .Debug (fmt .Sprintf ("failed to rename host device %s to %s: %v" , presentName , devName , err ))
135+ } else {
136+ utils .Logger .Debug (fmt .Sprintf ("successfully rename host device %s to %s" , presentName , devName ))
137+ }
138+ }
105139 return ipConf
106140}
141+
142+ // delAltName
143+ // temporary solution, need upgrade to netlink 1.3.1 for using LinkDelAltName
144+ func delAltName (presentName , devName string ) error {
145+ cmd := exec .Command ("ip" , "link" , "property" , "del" , "dev" , presentName , "altname" , devName )
146+ if err := cmd .Run (); err != nil {
147+ return err
148+ }
149+ return nil
150+ }
0 commit comments