This commit is contained in:
Adam Ierymenko 2019-09-25 13:32:46 -07:00
parent 105023bd87
commit 9c37fc1a5f
No known key found for this signature in database
GPG Key ID: C8877CF2D7A5D7F3
3 changed files with 19 additions and 0 deletions

View File

@ -13,12 +13,19 @@
package zerotier
import "fmt"
// MulticastGroup represents a normal Ethernet multicast or broadcast address plus 32 additional ZeroTier-specific bits
type MulticastGroup struct {
MAC MAC
ADI uint32
}
// String returns MAC#ADI
func (mg *MulticastGroup) String() string {
return fmt.Sprintf("%s#%.8x", mg.MAC.String(), mg.ADI)
}
// Less returns true if this MulticastGroup is less than another.
func (mg *MulticastGroup) Less(mg2 *MulticastGroup) bool {
return (mg.MAC < mg2.MAC || (mg.MAC == mg2.MAC && mg.ADI < mg2.ADI))

View File

@ -196,6 +196,7 @@ func (n *Network) SetLocalSettings(ls *NetworkLocalSettings) { n.updateConfig(ni
// MulticastSubscribe subscribes to a multicast group
func (n *Network) MulticastSubscribe(mg *MulticastGroup) {
n.node.log.Printf("%.16x joined multicast group %s", mg.String())
k := mg.key()
n.multicastSubscriptionsLock.Lock()
if _, have := n.multicastSubscriptions[k]; have {
@ -209,6 +210,7 @@ func (n *Network) MulticastSubscribe(mg *MulticastGroup) {
// MulticastUnsubscribe removes a subscription to a multicast group
func (n *Network) MulticastUnsubscribe(mg *MulticastGroup) {
n.node.log.Printf("%.16x left multicast group %s", mg.String())
n.multicastSubscriptionsLock.Lock()
delete(n.multicastSubscriptions, mg.key())
n.multicastSubscriptionsLock.Unlock()
@ -297,6 +299,7 @@ func (n *Network) updateConfig(nc *NetworkConfig, ls *NetworkLocalSettings) {
k := ipNetToKey(&ip)
wantAssignedIPs[k] = true
if _, have := haveAssignedIPs[k]; !have {
n.node.log.Printf("%.16x adding managed IP %s", n.ID, ip.String())
n.tap.AddIP(&ip)
}
}
@ -304,6 +307,7 @@ func (n *Network) updateConfig(nc *NetworkConfig, ls *NetworkLocalSettings) {
}
for k, ip := range haveAssignedIPs {
if _, want := wantAssignedIPs[k]; !want {
n.node.log.Printf("%.16x removing managed IP %s", n.ID, ip.String())
n.tap.RemoveIP(ip)
}
}
@ -324,6 +328,7 @@ func (n *Network) updateConfig(nc *NetworkConfig, ls *NetworkLocalSettings) {
k := r.key()
wantManagedRoutes[k] = true
if _, have := haveManagedRoutes[k]; !have {
n.node.log.Printf("%.16x adding managed route %s", n.ID, r.Target.String())
n.tap.AddRoute(&r)
}
}
@ -331,6 +336,7 @@ func (n *Network) updateConfig(nc *NetworkConfig, ls *NetworkLocalSettings) {
}
for k, r := range haveManagedRoutes {
if _, want := wantManagedRoutes[k]; !want {
n.node.log.Printf("%.16x removing managed route %s", n.ID, r.Target.String())
n.tap.RemoveRoute(r)
}
}

View File

@ -540,6 +540,7 @@ func (n *Node) AddStaticRoot(id *Identity, addrs []InetAddress) {
// RemoveStaticRoot removes a statically defined root server from this node.
func (n *Node) RemoveStaticRoot(id *Identity) {
n.log.Printf("removing static root %s", id.String())
ids := C.CString(id.String())
C.ZT_Node_removeStaticRoot(unsafe.Pointer(n.zn), ids)
C.free(unsafe.Pointer(ids))
@ -550,6 +551,7 @@ func (n *Node) RemoveStaticRoot(id *Identity) {
// to use if (or until) one can be fetched via DNS.
func (n *Node) AddDynamicRoot(dnsName string, locator []byte) {
dn := C.CString(dnsName)
n.log.Printf("adding dynamic root %s", dnsName)
if len(locator) > 0 {
C.ZT_Node_setDynamicRoot(unsafe.Pointer(n.zn), dn, unsafe.Pointer(&locator[0]), C.uint(len(locator)))
} else {
@ -560,6 +562,7 @@ func (n *Node) AddDynamicRoot(dnsName string, locator []byte) {
// RemoveDynamicRoot removes a dynamic root from this node.
func (n *Node) RemoveDynamicRoot(dnsName string) {
n.log.Printf("removing dynamic root %s", dnsName)
dn := C.CString(dnsName)
C.ZT_Node_removeDynamicRoot(unsafe.Pointer(n.zn), dn)
C.free(unsafe.Pointer(dn))
@ -730,6 +733,9 @@ func (n *Node) stateObjectGet(objType int, id [2]uint64) ([]byte, bool) {
}
func (n *Node) handleTrace(traceMessage string) {
if len(traceMessage) > 0 {
n.log.Print("TRACE: " + traceMessage)
}
}
func (n *Node) handleUserMessage(originAddress, messageTypeID uint64, data []byte) {