Skip to content

Commit 0eb4f79

Browse files
authored
fix ipam random get (#3200)
* fix ipam random get --------- Signed-off-by: bobz965 <zhangbingbing2_yewu@cmss.chinamobile.com>
1 parent a71201a commit 0eb4f79

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

pkg/ipam/ip.go

+30-1
Original file line numberDiff line numberDiff line change
@@ -147,27 +147,56 @@ func convertExcludeIps(excludeIps []string) IPRangeList {
147147

148148
func splitRange(a, b *IPRange) IPRangeList {
149149
if b.End.LessThan(a.Start) || b.Start.GreaterThan(a.End) {
150+
// bs----be----as----ae or as----ae----bs----be
151+
// a is aready splited with b
152+
150153
return IPRangeList{a}
151154
}
152155

153156
if (a.Start.Equal(b.Start) || a.Start.GreaterThan(b.Start)) &&
154157
(a.End.Equal(b.End) || a.End.LessThan(b.End)) {
158+
// as(bs)---- or bs----as----
159+
// ae(be) or ae----be
160+
// a is the same as b
161+
// a in b
162+
155163
return nil
156164
}
157165

158166
if (a.Start.Equal(b.Start) || a.Start.GreaterThan(b.Start)) &&
159167
a.End.GreaterThan(b.End) {
168+
// as(bs)---- or bs----as----
169+
// be----ae
170+
// as(bs)----be----ae
171+
// bs----as----be----ae
172+
// get be----ae
173+
160174
ipr := IPRange{Start: b.End.Add(1), End: a.End}
161175
return IPRangeList{&ipr}
162176
}
163177

164178
if (a.End.Equal(b.End) || a.End.LessThan(b.End)) &&
165179
a.Start.LessThan(b.Start) {
180+
// -----ae(be) or ----ae----be
181+
// -----as----bs
182+
// -----as----bs-----ae(be)
183+
// -----as----bs-----ae----be
184+
// get as----bs
185+
166186
ipr := IPRange{Start: a.Start, End: b.Start.Add(-1)}
167187
return IPRangeList{&ipr}
168188
}
169189

170190
ipr1 := IPRange{Start: a.Start, End: b.Start.Add(-1)}
171191
ipr2 := IPRange{Start: b.End.Add(1), End: a.End}
172-
return IPRangeList{&ipr1, &ipr2}
192+
results := IPRangeList{}
193+
if !ipr1.Start.GreaterThan(ipr1.End) {
194+
// start <= end
195+
results = append(results, &ipr1)
196+
}
197+
if !ipr2.Start.GreaterThan(ipr2.End) {
198+
// start <= end
199+
results = append(results, &ipr2)
200+
}
201+
return results
173202
}

pkg/ipam/subnet.go

+6
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,13 @@ func (subnet *Subnet) getV4RandomAddress(podName, nicName string, mac string, sk
220220
var ip IP
221221
var idx int
222222
for i, ipr := range subnet.V4FreeIPList {
223+
klog.Infof("allocate pod %s v4 ip in the range of start: %s, end: %s", podName, ipr.Start, ipr.End)
223224
for next := ipr.Start; !next.GreaterThan(ipr.End); next = next.Add(1) {
224225
if !util.ContainsString(skippedAddrs, string(next)) {
225226
ip = next
226227
break
228+
} else {
229+
klog.Infof("v4 ip %s is in skipped addrs %+v", skippedAddrs)
227230
}
228231
}
229232
if ip != "" {
@@ -282,10 +285,13 @@ func (subnet *Subnet) getV6RandomAddress(podName, nicName string, mac string, sk
282285
var ip IP
283286
var idx int
284287
for i, ipr := range subnet.V6FreeIPList {
288+
klog.Infof("allocate pod %s v6 ip in the range of start: %s, end: %s", podName, ipr.Start, ipr.End)
285289
for next := ipr.Start; !next.GreaterThan(ipr.End); next = next.Add(1) {
286290
if !util.ContainsString(skippedAddrs, string(next)) {
287291
ip = next
288292
break
293+
} else {
294+
klog.Infof("v6 ip %s is in skipped addrs %+v", skippedAddrs)
289295
}
290296
}
291297
if ip != "" {

0 commit comments

Comments
 (0)