@@ -2,12 +2,11 @@ package kasa
2
2
3
3
import (
4
4
"net"
5
- "strings"
6
5
)
7
6
8
7
// BroadcastAddresses - probably belongs in its own library, get all broadcast addresses
9
8
func BroadcastAddresses () ([]net.IP , error ) {
10
- var broadcasts []net.IP
9
+ broadcasts := make ( []net.IP , 0 , 4 )
11
10
ifaces , err := net .Interfaces ()
12
11
if err != nil {
13
12
return broadcasts , err
@@ -20,20 +19,23 @@ func BroadcastAddresses() ([]net.IP, error) {
20
19
}
21
20
22
21
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
30
28
}
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 ]
34
32
}
35
- broadcasts = append (broadcasts , broadcast )
33
+ broadcasts = append (broadcasts , v4 )
34
+ default :
35
+ // skip all non-IP
36
+ continue
36
37
}
38
+
37
39
}
38
40
}
39
41
return broadcasts , nil
0 commit comments