Configurability updates

This commit is contained in:
Neil Alexander 2021-02-19 17:19:45 +00:00
parent 73c0ea9ff1
commit 8d195e12be
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
3 changed files with 29 additions and 21 deletions

View file

@ -46,6 +46,12 @@ import (
yggdrasilConfig "github.com/yggdrasil-network/yggdrasil-go/src/config" yggdrasilConfig "github.com/yggdrasil-network/yggdrasil-go/src/config"
) )
const (
PeerTypeRemote = pineconeRouter.PeerTypeRemote
PeerTypeMulticast = pineconeRouter.PeerTypeMulticast
PeerTypeBluetooth = pineconeRouter.PeerTypeBluetooth
)
type DendriteMonolith struct { type DendriteMonolith struct {
logger logrus.Logger logger logrus.Logger
config *yggdrasilConfig.NodeConfig config *yggdrasilConfig.NodeConfig
@ -72,25 +78,32 @@ func (m *DendriteMonolith) SessionCount() int {
} }
func (m *DendriteMonolith) SetMulticastEnabled(enabled bool) { func (m *DendriteMonolith) SetMulticastEnabled(enabled bool) {
// TODO if enabled {
m.PineconeMulticast.Start()
} else {
m.PineconeMulticast.Stop()
m.DisconnectType(pineconeRouter.PeerTypeMulticast)
}
} }
func (m *DendriteMonolith) SetStaticPeer(uri string) error { func (m *DendriteMonolith) SetStaticPeer(uri string) {
go conn.ConnectToPeer(m.PineconeRouter, uri) m.DisconnectType(pineconeRouter.PeerTypeRemote)
return nil if uri != "" {
go conn.ConnectToPeer(m.PineconeRouter, uri)
}
} }
func (m *DendriteMonolith) DisconnectNonMulticastPeers() { func (m *DendriteMonolith) DisconnectType(peertype int) {
for _, p := range m.PineconeRouter.Peers() { for _, p := range m.PineconeRouter.Peers() {
if p.Zone == "static" { if peertype == p.PeerType {
_ = m.PineconeRouter.Disconnect(types.SwitchPortID(p.Port)) _ = m.PineconeRouter.Disconnect(types.SwitchPortID(p.Port))
} }
} }
} }
func (m *DendriteMonolith) DisconnectMulticastPeers() { func (m *DendriteMonolith) DisconnectZone(zone string) {
for _, p := range m.PineconeRouter.Peers() { for _, p := range m.PineconeRouter.Peers() {
if p.Zone != "static" { if zone == p.Zone {
_ = m.PineconeRouter.Disconnect(types.SwitchPortID(p.Port)) _ = m.PineconeRouter.Disconnect(types.SwitchPortID(p.Port))
} }
} }
@ -100,7 +113,7 @@ func (m *DendriteMonolith) DisconnectPort(port int) error {
return m.PineconeRouter.Disconnect(types.SwitchPortID(port)) return m.PineconeRouter.Disconnect(types.SwitchPortID(port))
} }
func (m *DendriteMonolith) Conduit(zone string) (*Conduit, error) { func (m *DendriteMonolith) Conduit(zone string, peertype int) (*Conduit, error) {
l, r := net.Pipe() l, r := net.Pipe()
conduit := &Conduit{conn: r, port: 0} conduit := &Conduit{conn: r, port: 0}
go func() { go func() {
@ -110,7 +123,7 @@ func (m *DendriteMonolith) Conduit(zone string) (*Conduit, error) {
for i := 1; i <= 10; i++ { for i := 1; i <= 10; i++ {
logrus.Errorf("Attempting authenticated connect (attempt %d)", i) logrus.Errorf("Attempting authenticated connect (attempt %d)", i)
var err error var err error
conduit.port, err = m.PineconeRouter.AuthenticatedConnect(l, zone) conduit.port, err = m.PineconeRouter.AuthenticatedConnect(l, zone, peertype)
switch err { switch err {
case io.ErrClosedPipe: case io.ErrClosedPipe:
logrus.Errorf("Authenticated connect failed due to closed pipe (attempt %d)", i) logrus.Errorf("Authenticated connect failed due to closed pipe (attempt %d)", i)
@ -360,13 +373,6 @@ func (m *DendriteMonolith) Stop() {
_ = m.PineconeRouter.Close() _ = m.PineconeRouter.Close()
} }
func (m *DendriteMonolith) Suspend() {
m.logger.Info("Suspending monolith")
if err := m.httpServer.Close(); err != nil {
m.logger.Warn("Error stopping HTTP server:", err)
}
}
type Conduit struct { type Conduit struct {
conn net.Conn conn net.Conn
port types.SwitchPortID port types.SwitchPortID

View file

@ -35,7 +35,7 @@ func ConnectToPeer(pRouter *pineconeRouter.Router, peer string) {
if parent == nil { if parent == nil {
return return
} }
if _, err := pRouter.AuthenticatedConnect(parent, "static"); err != nil { if _, err := pRouter.AuthenticatedConnect(parent, "static", pineconeRouter.PeerTypeRemote); err != nil {
logrus.WithError(err).Errorf("Failed to connect Pinecone static peer to switch") logrus.WithError(err).Errorf("Failed to connect Pinecone static peer to switch")
} }
} }

View file

@ -48,6 +48,7 @@ import (
"github.com/matrix-org/dendrite/userapi" "github.com/matrix-org/dendrite/userapi"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
pineconeMulticast "github.com/matrix-org/pinecone/multicast"
pineconeRouter "github.com/matrix-org/pinecone/router" pineconeRouter "github.com/matrix-org/pinecone/router"
pineconeSessions "github.com/matrix-org/pinecone/sessions" pineconeSessions "github.com/matrix-org/pinecone/sessions"
@ -109,7 +110,7 @@ func main() {
continue continue
} }
port, err := pRouter.AuthenticatedConnect(conn, "") port, err := pRouter.AuthenticatedConnect(conn, "", pineconeRouter.PeerTypeRemote)
if err != nil { if err != nil {
logrus.WithError(err).Error("pSwitch.AuthenticatedConnect failed") logrus.WithError(err).Error("pSwitch.AuthenticatedConnect failed")
continue continue
@ -120,7 +121,8 @@ func main() {
}() }()
pQUIC := pineconeSessions.NewQUIC(logger, pRouter) pQUIC := pineconeSessions.NewQUIC(logger, pRouter)
//_ = pineconeMulticast.NewMulticast(logger, pRouter) pMulticast := pineconeMulticast.NewMulticast(logger, pRouter)
pMulticast.Start()
cfg := &config.Dendrite{} cfg := &config.Dendrite{}
cfg.Defaults() cfg.Defaults()
@ -206,7 +208,7 @@ func main() {
return return
} }
conn := conn.WrapWebSocketConn(c) conn := conn.WrapWebSocketConn(c)
if _, err = pRouter.AuthenticatedConnect(conn, "websocket"); err != nil { if _, err = pRouter.AuthenticatedConnect(conn, "websocket", pineconeRouter.PeerTypeRemote); err != nil {
logrus.WithError(err).Error("Failed to connect WebSocket peer to Pinecone switch") logrus.WithError(err).Error("Failed to connect WebSocket peer to Pinecone switch")
} }
}) })