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"
)
const (
PeerTypeRemote = pineconeRouter.PeerTypeRemote
PeerTypeMulticast = pineconeRouter.PeerTypeMulticast
PeerTypeBluetooth = pineconeRouter.PeerTypeBluetooth
)
type DendriteMonolith struct {
logger logrus.Logger
config *yggdrasilConfig.NodeConfig
@ -72,25 +78,32 @@ func (m *DendriteMonolith) SessionCount() int {
}
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 {
go conn.ConnectToPeer(m.PineconeRouter, uri)
return nil
func (m *DendriteMonolith) SetStaticPeer(uri string) {
m.DisconnectType(pineconeRouter.PeerTypeRemote)
if uri != "" {
go conn.ConnectToPeer(m.PineconeRouter, uri)
}
}
func (m *DendriteMonolith) DisconnectNonMulticastPeers() {
func (m *DendriteMonolith) DisconnectType(peertype int) {
for _, p := range m.PineconeRouter.Peers() {
if p.Zone == "static" {
if peertype == p.PeerType {
_ = m.PineconeRouter.Disconnect(types.SwitchPortID(p.Port))
}
}
}
func (m *DendriteMonolith) DisconnectMulticastPeers() {
func (m *DendriteMonolith) DisconnectZone(zone string) {
for _, p := range m.PineconeRouter.Peers() {
if p.Zone != "static" {
if zone == p.Zone {
_ = 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))
}
func (m *DendriteMonolith) Conduit(zone string) (*Conduit, error) {
func (m *DendriteMonolith) Conduit(zone string, peertype int) (*Conduit, error) {
l, r := net.Pipe()
conduit := &Conduit{conn: r, port: 0}
go func() {
@ -110,7 +123,7 @@ func (m *DendriteMonolith) Conduit(zone string) (*Conduit, error) {
for i := 1; i <= 10; i++ {
logrus.Errorf("Attempting authenticated connect (attempt %d)", i)
var err error
conduit.port, err = m.PineconeRouter.AuthenticatedConnect(l, zone)
conduit.port, err = m.PineconeRouter.AuthenticatedConnect(l, zone, peertype)
switch err {
case io.ErrClosedPipe:
logrus.Errorf("Authenticated connect failed due to closed pipe (attempt %d)", i)
@ -360,13 +373,6 @@ func (m *DendriteMonolith) Stop() {
_ = 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 {
conn net.Conn
port types.SwitchPortID

View file

@ -35,7 +35,7 @@ func ConnectToPeer(pRouter *pineconeRouter.Router, peer string) {
if parent == nil {
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")
}
}

View file

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