瀏覽代碼

lib/beacon: Only send to appropriately flagged interfaces (ref #5957) (#6404)

saves some traffic (potential mobile wakeups), may help with #5957.
Alex Xu 5 年之前
父節點
當前提交
1e68ab3f90
共有 2 個文件被更改,包括 21 次插入5 次删除
  1. 17 5
      lib/beacon/broadcast.go
  2. 4 0
      lib/beacon/multicast.go

+ 17 - 5
lib/beacon/broadcast.go

@@ -44,17 +44,29 @@ func writeBroadcasts(ctx context.Context, inbox <-chan []byte, port int) error {
 			return nil
 		}
 
-		addrs, err := net.InterfaceAddrs()
+		intfs, err := net.Interfaces()
 		if err != nil {
 			l.Debugln(err)
 			return err
 		}
 
 		var dsts []net.IP
-		for _, addr := range addrs {
-			if iaddr, ok := addr.(*net.IPNet); ok && len(iaddr.IP) >= 4 && iaddr.IP.IsGlobalUnicast() && iaddr.IP.To4() != nil {
-				baddr := bcast(iaddr)
-				dsts = append(dsts, baddr.IP)
+		for _, intf := range intfs {
+			if intf.Flags&net.FlagBroadcast == 0 {
+				continue
+			}
+
+			addrs, err := intf.Addrs()
+			if err != nil {
+				l.Debugln(err)
+				return err
+			}
+
+			for _, addr := range addrs {
+				if iaddr, ok := addr.(*net.IPNet); ok && len(iaddr.IP) >= 4 && iaddr.IP.IsGlobalUnicast() && iaddr.IP.To4() != nil {
+					baddr := bcast(iaddr)
+					dsts = append(dsts, baddr.IP)
+				}
 			}
 		}
 

+ 4 - 0
lib/beacon/multicast.go

@@ -67,6 +67,10 @@ func writeMulticasts(ctx context.Context, inbox <-chan []byte, addr string) erro
 
 		success := 0
 		for _, intf := range intfs {
+			if intf.Flags&net.FlagMulticast == 0 {
+				continue
+			}
+
 			wcm.IfIndex = intf.Index
 			pconn.SetWriteDeadline(time.Now().Add(time.Second))
 			_, err = pconn.WriteTo(bs, wcm, gaddr)