Skip to content

Commit 4094097

Browse files
swordqiuQiu Jian
andauthored
fix: network manager keyfile static routes (#23479)
Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
1 parent 77aa8a7 commit 4094097

File tree

3 files changed

+36
-12
lines changed

3 files changed

+36
-12
lines changed

pkg/hostman/guestfs/fsdriver/linux.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1460,17 +1460,21 @@ func (r *sRedhatLikeRootFs) deployNetworkManagerConfigurations(rootFs IDiskParti
14601460
return errors.Wrap(err, "enableBondingModule")
14611461
}
14621462
}
1463-
// nicCnt := len(allNics) - len(bondNics)
1463+
nicCnt := len(allNics) - len(bondNics)
14641464

14651465
mainNic := getMainNic(allNics)
1466-
var mainIp, mainIp6 string
1466+
var mainIp string
14671467
if mainNic != nil {
14681468
mainIp = mainNic.Ip
1469-
mainIp6 = mainNic.Ip6
1469+
}
1470+
mainNic6 := getMainNic6(allNics)
1471+
var mainIp6 string
1472+
if mainNic6 != nil {
1473+
mainIp6 = mainNic6.Ip6
14701474
}
14711475
for i := range allNics {
14721476
nicDesc := allNics[i]
1473-
profile := nicDescToNetworkManager(nicDesc, mainIp, mainIp6)
1477+
profile := nicDescToNetworkManager(nicDesc, mainIp, mainIp6, nicCnt)
14741478
var fn = fmt.Sprintf("%s/%s.nmconnection", scriptPath, nicDesc.Name)
14751479
if err := rootFs.FilePutContents(fn, profile, false, false); err != nil {
14761480
return err

pkg/hostman/guestfs/fsdriver/networkmaanger.go

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
"yunion.io/x/onecloud/pkg/util/stringutils2"
2525
)
2626

27-
func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 string) string {
27+
func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 string, nicCnt int) string {
2828
var profile strings.Builder
2929

3030
profile.WriteString("[connection]\n")
@@ -57,12 +57,6 @@ func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 s
5757

5858
if len(nicDesc.Mac) > 0 && nicDesc.NicType != api.NIC_TYPE_INFINIBAND {
5959
profile.WriteString("[ethernet]\n")
60-
if len(nicDesc.TeamingSlaves) == 0 {
61-
// only real physical nic can set HWADDR
62-
// cmds.WriteString("HWADDR=")
63-
// cmds.WriteString(nicDesc.Mac)
64-
// cmds.WriteString("\n")
65-
}
6660
profile.WriteString(fmt.Sprintf("mac-address=%s\n", nicDesc.Mac))
6761
if nicDesc.Mtu > 0 {
6862
profile.WriteString(fmt.Sprintf("mtu=%d\n", nicDesc.Mtu))
@@ -83,6 +77,10 @@ func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 s
8377
profile.WriteString(fmt.Sprintf("address1=%s/32\n", netutils2.PSEUDO_VIP))
8478
profile.WriteString("\n")
8579
} else if nicDesc.Manual {
80+
routes4 := make([]netutils2.SRouteInfo, 0)
81+
routes6 := make([]netutils2.SRouteInfo, 0)
82+
routes4, routes6 = netutils2.AddNicRoutes(routes4, routes6, nicDesc, mainIp, mainIp6, nicCnt)
83+
8684
// manual interface
8785
if len(nicDesc.Ip) > 0 {
8886
profile.WriteString("[ipv4]\n")
@@ -91,10 +89,20 @@ func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 s
9189
if len(nicDesc.Gateway) > 0 && nicDesc.Ip == mainIp {
9290
profile.WriteString(fmt.Sprintf("gateway=%s\n", nicDesc.Gateway))
9391
}
92+
// dns
9493
dnslist, _ := netutils2.GetNicDns(nicDesc)
9594
if len(dnslist) > 0 {
9695
profile.WriteString(fmt.Sprintf("dns=%s\n", strings.Join(dnslist, ",")))
9796
}
97+
// static routes
98+
for i := range routes4 {
99+
gwstr := routes4[i].Gateway.String()
100+
if gwstr == "0.0.0.0" {
101+
profile.WriteString(fmt.Sprintf("route%d=%s\n", i+1, routes4[i].SPrefixInfo.String()))
102+
} else {
103+
profile.WriteString(fmt.Sprintf("route%d=%s,%s\n", i+1, routes4[i].SPrefixInfo.String(), gwstr))
104+
}
105+
}
98106
profile.WriteString("\n")
99107
}
100108
if len(nicDesc.Ip6) > 0 {
@@ -104,10 +112,20 @@ func nicDescToNetworkManager(nicDesc *types.SServerNic, mainIp string, mainIp6 s
104112
if len(nicDesc.Gateway6) > 0 && nicDesc.Ip6 == mainIp6 {
105113
profile.WriteString(fmt.Sprintf("gateway=%s\n", nicDesc.Gateway6))
106114
}
115+
// dns
107116
_, dns6list := netutils2.GetNicDns(nicDesc)
108117
if len(dns6list) > 0 {
109118
profile.WriteString(fmt.Sprintf("dns=%s\n", strings.Join(dns6list, ",")))
110119
}
120+
// static routes
121+
for i := range routes6 {
122+
gwstr := routes6[i].Gateway.String()
123+
if gwstr == "::" {
124+
profile.WriteString(fmt.Sprintf("route%d=%s\n", i+1, routes6[i].SPrefixInfo.String()))
125+
} else {
126+
profile.WriteString(fmt.Sprintf("route%d=%s,%s\n", i+1, routes6[i].SPrefixInfo.String(), gwstr))
127+
}
128+
}
111129
profile.WriteString("\n")
112130
}
113131
} else {

pkg/hostman/guestfs/fsdriver/networkmanager_test.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,11 +89,13 @@ mac-address=00:22:0a:0b:0c:0d
8989
method=manual
9090
address1=192.168.1.100/24
9191
gateway=192.168.1.1
92+
route1=169.254.169.254/32
9293
9394
[ipv6]
9495
method=manual
9596
address1=2001:db8::200/64
9697
gateway=2001:db8::1
98+
route1=fd00:ec2::254/128
9799
98100
`,
99101
},
@@ -220,7 +222,7 @@ method=disabled
220222
}
221223

222224
for _, c := range cases {
223-
got := nicDescToNetworkManager(c.nicDesc, c.mainIp, c.mainIp6)
225+
got := nicDescToNetworkManager(c.nicDesc, c.mainIp, c.mainIp6, 1)
224226
if got != c.want {
225227
t.Errorf("[[got]]\n%s\n[[want]]\n%s\n[[end]]", got, c.want)
226228
}

0 commit comments

Comments
 (0)