Bind send interface for sacn
This commit is contained in:
3
main.go
3
main.go
@@ -34,6 +34,7 @@ func main() {
|
|||||||
configPath := flag.String("config", "config.toml", "path to config file")
|
configPath := flag.String("config", "config.toml", "path to config file")
|
||||||
artnetListen := flag.String("artnet-listen", ":6454", "artnet listen address (empty to disable)")
|
artnetListen := flag.String("artnet-listen", ":6454", "artnet listen address (empty to disable)")
|
||||||
artnetBroadcast := flag.String("artnet-broadcast", "auto", "artnet broadcast addresses (comma-separated, or 'auto')")
|
artnetBroadcast := flag.String("artnet-broadcast", "auto", "artnet broadcast addresses (comma-separated, or 'auto')")
|
||||||
|
sacnInterface := flag.String("sacn-interface", "", "network interface for sACN multicast")
|
||||||
debug := flag.Bool("debug", false, "log incoming/outgoing dmx packets")
|
debug := flag.Bool("debug", false, "log incoming/outgoing dmx packets")
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
@@ -107,7 +108,7 @@ func main() {
|
|||||||
defer artSender.Close()
|
defer artSender.Close()
|
||||||
|
|
||||||
// Create sACN sender
|
// Create sACN sender
|
||||||
sacnSender, err := sacn.NewSender("artmap")
|
sacnSender, err := sacn.NewSender("artmap", *sacnInterface)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("sacn sender error: %v", err)
|
log.Fatalf("sacn sender error: %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import (
|
|||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"net"
|
"net"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"golang.org/x/net/ipv4"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Sender sends sACN (E1.31) packets
|
// Sender sends sACN (E1.31) packets
|
||||||
@@ -16,13 +18,25 @@ type Sender struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewSender creates a new sACN sender
|
// NewSender creates a new sACN sender
|
||||||
func NewSender(sourceName string) (*Sender, error) {
|
func NewSender(sourceName string, ifaceName string) (*Sender, error) {
|
||||||
conn, err := net.ListenUDP("udp4", &net.UDPAddr{IP: net.IPv4zero, Port: 0})
|
conn, err := net.ListenUDP("udp4", &net.UDPAddr{IP: net.IPv4zero, Port: 0})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate random CID
|
if ifaceName != "" {
|
||||||
|
iface, err := net.InterfaceByName(ifaceName)
|
||||||
|
if err != nil {
|
||||||
|
conn.Close()
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
p := ipv4.NewPacketConn(conn)
|
||||||
|
if err := p.SetMulticastInterface(iface); err != nil {
|
||||||
|
conn.Close()
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var cid [16]byte
|
var cid [16]byte
|
||||||
rand.Read(cid[:])
|
rand.Read(cid[:])
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user