6 Commits

Author SHA1 Message Date
dependabot[bot]
b1514aa5de Bump golang.org/x/net from 0.0.0-20190125091013-d26f9f9a57f3 to 0.7.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.0.0-20190125091013-d26f9f9a57f3 to 0.7.0.
- [Release notes](https://github.com/golang/net/releases)
- [Commits](https://github.com/golang/net/commits/v0.7.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-24 17:44:12 +00:00
ad8a5c5b3e minor tweaks for go-micro mdns registry
* allow to receive multicast on the same host
  via multicast loopback flag
* export SendMulticast function, needed for async
  notification on registry updates

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2019-06-21 23:37:13 +03:00
2304dca2ca use net.ParseIP for ipv4 multicast addr
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
2019-06-12 19:13:19 +03:00
Milos Gajdos
9decd6b803 Multipacket Known-Answer Suppression: Ignore some answers
We are setting Truncated bit to false when mDNS has a lot of queries as
Hashicorp fork does not handle the case when Truncated bit is set.
We are happy to do this for the time being until we fix the server later
on.
2019-06-04 18:09:26 +01:00
Asim Aslam
32c17f6b3e Merge pull request #11 from nikosk686/bugfix-ipv4-or-6-unavailability
Fixes new client or server creation failure when one of ipv4 or ipv6 is unavailable
2019-05-23 08:37:24 +01:00
Nikos Kitmeridis
a56f86575d Fixes new client or server creation failure when one of ipv4 or ipv6 is unavailable 2019-05-22 22:53:26 +03:00
4 changed files with 41 additions and 19 deletions

View File

@@ -191,6 +191,13 @@ func newClient() (*client, error) {
return nil, fmt.Errorf("failed to bind to any unicast udp port")
}
if uconn4 == nil {
uconn4 = &net.UDPConn{}
}
if uconn6 == nil {
uconn6 = &net.UDPConn{}
}
mconn4, err := net.ListenUDP("udp4", mdnsWildcardAddrIPv4)
if err != nil {
log.Printf("[ERR] mdns: Failed to bind to udp4 port: %v", err)
@@ -207,6 +214,9 @@ func newClient() (*client, error) {
p1 := ipv4.NewPacketConn(mconn4)
p2 := ipv6.NewPacketConn(mconn6)
p1.SetMulticastLoopback(true)
p2.SetMulticastLoopback(true)
ifaces, err := net.Interfaces()
if err != nil {
return nil, err

10
go.mod
View File

@@ -2,7 +2,11 @@ module github.com/micro/mdns
require (
github.com/miekg/dns v1.1.3
golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664 // indirect
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc // indirect
golang.org/x/net v0.7.0
)
require (
golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664 // indirect
golang.org/x/sync v0.1.0 // indirect
golang.org/x/sys v0.5.0 // indirect
)

10
go.sum
View File

@@ -2,7 +2,9 @@ github.com/miekg/dns v1.1.3 h1:1g0r1IvskvgL8rR+AcHzUA+oFmGcQlaIm4IqakufeMM=
github.com/miekg/dns v1.1.3/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664 h1:YbZJ76lQ1BqNhVe7dKTSB67wDrc2VPRR75IyGyyPDX8=
golang.org/x/crypto v0.0.0-20190130090550-b01c7a725664/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3 h1:ulvT7fqt0yHWzpJwI57MezWnYDVpCAYBVuYst/L+fAY=
golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc h1:WiYx1rIFmx8c0mXAFtv5D/mHyKe1+jmuP7PViuwqwuQ=
golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=

View File

@@ -14,7 +14,7 @@ import (
)
var (
mdnsGroupIPv4 = net.IPv4(224, 0, 0, 251)
mdnsGroupIPv4 = net.ParseIP("224.0.0.251")
mdnsGroupIPv6 = net.ParseIP("ff02::fb")
// mDNS wildcard addresses
@@ -73,6 +73,13 @@ func NewServer(config *Config) (*Server, error) {
return nil, fmt.Errorf("[ERR] mdns: Failed to bind to any udp port!")
}
if ipv4List == nil {
ipv4List = &net.UDPConn{}
}
if ipv6List == nil {
ipv6List = &net.UDPConn{}
}
// Join multicast groups to receive announcements
p1 := ipv4.NewPacketConn(ipv4List)
p2 := ipv6.NewPacketConn(ipv6List)
@@ -112,13 +119,8 @@ func NewServer(config *Config) (*Server, error) {
shutdownCh: make(chan struct{}),
}
if ipv4List != nil {
go s.recv(s.ipv4List)
}
if ipv6List != nil {
go s.recv(s.ipv6List)
}
go s.recv(s.ipv4List)
go s.recv(s.ipv6List)
s.wg.Add(1)
go s.probe()
@@ -180,6 +182,10 @@ func (s *Server) parsePacket(packet []byte, from net.Addr) error {
log.Printf("[ERR] mdns: Failed to unpack packet: %v", err)
return err
}
// TODO: This is a bit of a hack
// We decided to ignore some mDNS answers for the time being
// See: https://tools.ietf.org/html/rfc6762#section-7.2
msg.Truncated = false
return s.handleQuery(&msg, from)
}
@@ -352,7 +358,7 @@ func (s *Server) probe() {
randomizer := rand.New(rand.NewSource(time.Now().UnixNano()))
for i := 0; i < 3; i++ {
if err := s.multicastResponse(q); err != nil {
if err := s.SendMulticast(q); err != nil {
log.Println("[ERR] mdns: failed to send probe:", err.Error())
}
time.Sleep(time.Duration(randomizer.Intn(250)) * time.Millisecond)
@@ -378,7 +384,7 @@ func (s *Server) probe() {
timeout := 1 * time.Second
timer := time.NewTimer(timeout)
for i := 0; i < 3; i++ {
if err := s.multicastResponse(resp); err != nil {
if err := s.SendMulticast(resp); err != nil {
log.Println("[ERR] mdns: failed to send announcement:", err.Error())
}
select {
@@ -393,7 +399,7 @@ func (s *Server) probe() {
}
// multicastResponse us used to send a multicast response packet
func (s *Server) multicastResponse(msg *dns.Msg) error {
func (s *Server) SendMulticast(msg *dns.Msg) error {
buf, err := msg.Pack()
if err != nil {
return err
@@ -443,5 +449,5 @@ func (s *Server) unregister() error {
resp.MsgHdr.Response = true
resp.Answer = append(resp.Answer, s.config.Zone.Records(q.Question[0])...)
return s.multicastResponse(resp)
return s.SendMulticast(resp)
}