Skip to content

Commit 4ddeb27

Browse files
rewrite this to be not-stupid
1 parent b43d716 commit 4ddeb27

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

netutil.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,11 @@ package kasa
22

33
import (
44
"net"
5-
"strings"
65
)
76

87
// BroadcastAddresses - probably belongs in its own library, get all broadcast addresses
98
func BroadcastAddresses() ([]net.IP, error) {
10-
var broadcasts []net.IP
9+
broadcasts := make([]net.IP, 0, 4)
1110
ifaces, err := net.Interfaces()
1211
if err != nil {
1312
return broadcasts, err
@@ -20,20 +19,23 @@ func BroadcastAddresses() ([]net.IP, error) {
2019
}
2120

2221
for _, addr := range addrs {
23-
as := addr.String()
24-
25-
// ignore IPv6 and loopback since Kasa devices are v4 only (for now)
26-
if !strings.Contains(as, ":") && !strings.HasPrefix(as, "127.") {
27-
_, ipnet, err := net.ParseCIDR(as)
28-
if err != nil {
29-
return broadcasts, err
22+
switch a := addr.(type) {
23+
case *net.IPNet:
24+
// skip non-IPv4 and non-loopback
25+
v4 := a.IP.To4()
26+
if v4 == nil || v4[0] == 127 {
27+
continue
3028
}
31-
broadcast := net.IP(make([]byte, 4))
32-
for i := range ipnet.IP {
33-
broadcast[i] = ipnet.IP[i] | ^ipnet.Mask[i]
29+
30+
for i := 0; i < 4; i++ {
31+
v4[i] = v4[i] | ^a.Mask[i]
3432
}
35-
broadcasts = append(broadcasts, broadcast)
33+
broadcasts = append(broadcasts, v4)
34+
default:
35+
// skip all non-IP
36+
continue
3637
}
38+
3739
}
3840
}
3941
return broadcasts, nil

0 commit comments

Comments
 (0)