mirror of https://github.com/jetkvm/kvm.git
61 lines
1.2 KiB
Go
61 lines
1.2 KiB
Go
package kvm
|
|
|
|
import (
|
|
"net"
|
|
|
|
"github.com/pion/mdns/v2"
|
|
"golang.org/x/net/ipv4"
|
|
"golang.org/x/net/ipv6"
|
|
)
|
|
|
|
var mDNSConn *mdns.Conn
|
|
|
|
func startMDNS() error {
|
|
// If server was previously running, stop it
|
|
if mDNSConn != nil {
|
|
logger.Info().Msg("stopping mDNS server")
|
|
err := mDNSConn.Close()
|
|
if err != nil {
|
|
logger.Warn().Err(err).Msg("failed to stop mDNS server")
|
|
}
|
|
}
|
|
|
|
// Start a new server
|
|
hostname := "jetkvm.local"
|
|
|
|
scopedLogger := logger.With().Str("hostname", hostname).Logger()
|
|
scopedLogger.Info().Msg("starting mDNS server")
|
|
|
|
addr4, err := net.ResolveUDPAddr("udp4", mdns.DefaultAddressIPv4)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
addr6, err := net.ResolveUDPAddr("udp6", mdns.DefaultAddressIPv6)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
l4, err := net.ListenUDP("udp4", addr4)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
l6, err := net.ListenUDP("udp6", addr6)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
mDNSConn, err = mdns.Server(ipv4.NewPacketConn(l4), ipv6.NewPacketConn(l6), &mdns.Config{
|
|
LocalNames: []string{hostname}, //TODO: make it configurable
|
|
LoggerFactory: defaultLoggerFactory,
|
|
})
|
|
if err != nil {
|
|
scopedLogger.Warn().Err(err).Msg("failed to start mDNS server")
|
|
mDNSConn = nil
|
|
return err
|
|
}
|
|
//defer server.Close()
|
|
return nil
|
|
}
|