@@ -147,27 +147,56 @@ func convertExcludeIps(excludeIps []string) IPRangeList {
147
147
148
148
func splitRange (a , b * IPRange ) IPRangeList {
149
149
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
+
150
153
return IPRangeList {a }
151
154
}
152
155
153
156
if (a .Start .Equal (b .Start ) || a .Start .GreaterThan (b .Start )) &&
154
157
(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
+
155
163
return nil
156
164
}
157
165
158
166
if (a .Start .Equal (b .Start ) || a .Start .GreaterThan (b .Start )) &&
159
167
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
+
160
174
ipr := IPRange {Start : b .End .Add (1 ), End : a .End }
161
175
return IPRangeList {& ipr }
162
176
}
163
177
164
178
if (a .End .Equal (b .End ) || a .End .LessThan (b .End )) &&
165
179
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
+
166
186
ipr := IPRange {Start : a .Start , End : b .Start .Add (- 1 )}
167
187
return IPRangeList {& ipr }
168
188
}
169
189
170
190
ipr1 := IPRange {Start : a .Start , End : b .Start .Add (- 1 )}
171
191
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
173
202
}
0 commit comments