networks: 确保外部network也有ifname_hint

This commit is contained in:
Yousong Zhou
2020-01-01 10:50:51 +08:00
parent 67c29cc9b3
commit 79904e8c20
2 changed files with 22 additions and 0 deletions
+4
View File
@@ -238,6 +238,9 @@ func (self *SGuestnetwork) getVirtualRand(width int, randomized bool) string {
}
func (self *SGuestnetwork) generateIfname(network *SNetwork, virtual bool, randomized bool) string {
// It may happen that external networks when synced can miss ifname hint
network.ensureIfnameHint()
pattern := regexp.MustCompile(`\W+`)
nName := pattern.ReplaceAllString(network.IfnameHint, "")
if len(nName) > MAX_IFNAME_SIZE-4 {
@@ -254,6 +257,7 @@ func (self *SGuestnetwork) generateIfname(network *SNetwork, virtual bool, rando
}
func (man *SGuestnetworkManager) ifnameUsed(ifname string) bool {
// inviable names are always used
if ifname == "" {
return true
}
+18
View File
@@ -1163,6 +1163,24 @@ func isValidMaskLen(maskLen int64) bool {
}
}
func (self *SNetwork) ensureIfnameHint() {
if self.IfnameHint != "" {
return
}
hint, err := NetworkManager.newIfnameHint(self.Name)
if err != nil {
panic(errors.Wrap(err, "ensureIfnameHint: allocate hint"))
}
_, err = db.Update(self, func() error {
self.IfnameHint = hint
return nil
})
if err != nil {
panic(errors.Wrap(err, "ensureIfnameHint: db update"))
}
log.Infof("network %s(%s): initialized ifname hint: %s", self.Name, self.Id, hint)
}
func (manager *SNetworkManager) newIfnameHint(hint string) (string, error) {
isa := func(c byte) bool {
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')