Hash the service address before advertising it to the network.
This commit is contained in:
parent
e586763301
commit
38d6ffdf9a
@ -2,6 +2,8 @@ package network
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"hash/fnv"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -553,7 +555,7 @@ func (n *network) processCtrlChan(client transport.Client, listener tunnel.Liste
|
|||||||
if pbRtrAdvert.Id == n.options.Id {
|
if pbRtrAdvert.Id == n.options.Id {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
log.Debugf("Network received advert message with %d events from: %s", len(pbRtrAdvert.Events), pbRtrAdvert.Id)
|
log.Debugf("Network received advert message from: %s", pbRtrAdvert.Id)
|
||||||
// loookup advertising node in our peer topology
|
// loookup advertising node in our peer topology
|
||||||
advertNode := n.node.GetPeerNode(pbRtrAdvert.Id)
|
advertNode := n.node.GetPeerNode(pbRtrAdvert.Id)
|
||||||
if advertNode == nil {
|
if advertNode == nil {
|
||||||
@ -642,6 +644,7 @@ func (n *network) processCtrlChan(client transport.Client, listener tunnel.Liste
|
|||||||
|
|
||||||
// advertise advertises routes to the network
|
// advertise advertises routes to the network
|
||||||
func (n *network) advertise(client transport.Client, advertChan <-chan *router.Advert) {
|
func (n *network) advertise(client transport.Client, advertChan <-chan *router.Advert) {
|
||||||
|
hasher := fnv.New64()
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
// process local adverts and randomly fire them at other nodes
|
// process local adverts and randomly fire them at other nodes
|
||||||
@ -649,10 +652,13 @@ func (n *network) advertise(client transport.Client, advertChan <-chan *router.A
|
|||||||
// create a proto advert
|
// create a proto advert
|
||||||
var events []*pbRtr.Event
|
var events []*pbRtr.Event
|
||||||
for _, event := range advert.Events {
|
for _, event := range advert.Events {
|
||||||
// NOTE: we override the Gateway and Link fields here
|
// hash the service before advertising it
|
||||||
|
hasher.Reset()
|
||||||
|
hasher.Write([]byte(event.Route.Address + n.node.id))
|
||||||
|
// NOTE: we override Gateway, Link and Service here
|
||||||
route := &pbRtr.Route{
|
route := &pbRtr.Route{
|
||||||
Service: event.Route.Service,
|
Service: event.Route.Service,
|
||||||
Address: event.Route.Address,
|
Address: fmt.Sprintf("%d", hasher.Sum64()),
|
||||||
Gateway: n.node.id,
|
Gateway: n.node.id,
|
||||||
Network: event.Route.Network,
|
Network: event.Route.Network,
|
||||||
Router: event.Route.Router,
|
Router: event.Route.Router,
|
||||||
|
Loading…
Reference in New Issue
Block a user