1 // Copyright 2022-2025 The sacloud/iaas-api-go Authors
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 15 package accessor
16 17 import (
18 "net"
19 20 "github.com/sacloud/packages-go/cidr"
21 )
22 23 // AssignedIPAddress スイッチ+ルータの割り当てられたIPアドレスリスト
24 type AssignedIPAddress interface {
25 GetAssignedIPAddressMax() string
26 SetAssignedIPAddressMax(v string)
27 GetAssignedIPAddressMin() string
28 SetAssignedIPAddressMin(v string)
29 }
30 31 // GetAssignedIPAddresses 最小/最大IPアドレスからIPアドレスリストを算出して返す
32 func GetAssignedIPAddresses(target AssignedIPAddress) []string {
33 base := net.ParseIP(target.GetAssignedIPAddressMin())
34 max := net.ParseIP(target.GetAssignedIPAddressMax())
35 addresses := []string{base.String()}
36 37 for {
38 current := cidr.Inc(base)
39 addresses = append(addresses, current.String())
40 41 if current.Equal(max) {
42 break
43 }
44 base = current
45 }
46 47 return addresses
48 }
49