From b7df69d1cc26b165ef04961a28d648a99b5b262e Mon Sep 17 00:00:00 2001 From: Ryou Kawabata Date: Thu, 4 Aug 2022 22:32:42 +0900 Subject: [PATCH 1/2] =?UTF-8?q?ipv4=E3=82=A2=E3=83=89=E3=83=AC=E3=82=B9?= =?UTF-8?q?=E3=81=AE=E7=AE=97=E5=87=BA=E3=81=ABnet=E3=83=91=E3=83=83?= =?UTF-8?q?=E3=82=B1=E3=83=BC=E3=82=B8=E3=82=92=E5=88=A9=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/subspace/utils.go | 59 +++++++++++++++++++------------------------ 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/cmd/subspace/utils.go b/cmd/subspace/utils.go index f7b2372..444421b 100644 --- a/cmd/subspace/utils.go +++ b/cmd/subspace/utils.go @@ -12,6 +12,7 @@ import ( "path/filepath" "text/template" "time" + "net" "strconv" "strings" ) @@ -72,37 +73,29 @@ set -o xtrace } func ipv4address(Number int,IPv4_POOL string) (string,error) { - var err error = nil - - var hostcidrS[] string = strings.Split(IPv4_POOL,"/") - cidr, _ := strconv.Atoi(hostcidrS[1]) - subnet := ((1<>24)&255, (ip>>16)&255, (ip>>8)&255, (ip>>0)&255} - - var ipS string = fmt.Sprintf("%d.%d.%d.%d",ipOctet[0],ipOctet[1],ipOctet[2],ipOctet[3]) - - if (host&subnet) != 0 { - err = fmt.Errorf("IPv4_POOL=\"%s\"",IPv4_POOL) - }else if (Number&subnetmask) != 0 { - err = fmt.Errorf("Number does not fit in the POOL. Number=%d, POOL=\"/%d\"",Number,cidr) - }else if Number == subnet { - err = fmt.Errorf("Broadcast address. Number=%d, IPv4_POOL=\"%s\", address=\"%s\"",Number,IPv4_POOL,ipS) - }else if Number == 0 { - err = fmt.Errorf("Network address. Number=%d, IPv4_POOL=\"%s\", address=\"%s\"",Number,IPv4_POOL,ipS) - } - - return ipS,err + _, ipnet, err := net.ParseCIDR(IPv4_POOL) + + if err != nil { + return "",err + } + + var int64ip int64 = + int64(ipnet.IP[0])*256*256*256+ + int64(ipnet.IP[1])*256*256+ + int64(ipnet.IP[2])*256+ + int64(ipnet.IP[3])+ + int64(Number) + + var ip net.IP = net.IPv4( + byte(int64ip/256/256/256), + byte(int64ip/256/256%256), + byte(int64ip/256%256), + byte(int64ip%256), + ) + + if !ipnet.Contains(ip) { + return "",fmt.Errorf("%d hosts can't fit in network %s.",Number,ipnet) + } + + return fmt.Sprint(ip),nil } - - From d50dd0fca38377a185578e65d714aa68bbbd025b Mon Sep 17 00:00:00 2001 From: Ryou Kawabata Date: Thu, 4 Aug 2022 22:36:58 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=81=A3=E3=81=9F=E3=83=91=E3=83=83=E3=82=B1=E3=83=BC=E3=82=B8?= =?UTF-8?q?=E3=81=AEimport=E3=82=92=E3=82=84=E3=82=81=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/subspace/utils.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmd/subspace/utils.go b/cmd/subspace/utils.go index 444421b..78083b4 100644 --- a/cmd/subspace/utils.go +++ b/cmd/subspace/utils.go @@ -13,8 +13,6 @@ import ( "text/template" "time" "net" - "strconv" - "strings" ) func RandomString(n int) string {