Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SIG: Split egress setup into a single function #2994

Merged
merged 1 commit into from
Aug 16, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 0 additions & 14 deletions go/sig/base/core/as.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,13 +112,6 @@ Top:
return s
}

// AddNet idempotently adds a network for the remote IA.
func (ae *ASEntry) AddNet(ipnet *net.IPNet) error {
ae.Lock()
defer ae.Unlock()
return ae.addNet(ipnet)
}

func (ae *ASEntry) addNet(ipnet *net.IPNet) error {
if ae.egressRing == nil {
// Ensure that the network setup is done
Expand All @@ -145,13 +138,6 @@ func (ae *ASEntry) addNet(ipnet *net.IPNet) error {
return nil
}

// DelNet removes a network for the remote IA.
func (ae *ASEntry) DelNet(ipnet *net.IPNet) error {
ae.Lock()
defer ae.Unlock()
return ae.delNet(ipnet)
}

func (ae *ASEntry) delNet(ipnet *net.IPNet) error {
key := ipnet.String()
if _, ok := ae.Nets[key]; !ok {
Expand Down
74 changes: 36 additions & 38 deletions go/sig/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,27 +80,27 @@ func realMain() int {
log.Crit("Unable to create & configure TUN device", "err", err)
return 1
}
if err := setup(); err != nil {
log.Crit("Setup failed", "err", err)
// Export prometheus metrics.
metrics.Init(cfg.Sig.ID)
if err := sigcmn.Init(cfg.Sig, cfg.Sciond); err != nil {
log.Crit("Error during initialization", err)
return 1
}
go func() {
defer log.LogPanicAndExit()
base.PollReqHdlr()
}()
env.SetupEnv(
func() {
success := loadConfig(cfg.Sig.SIGConfig)
// Errors already logged in loadConfig
log.Info("reloadOnSIGHUP: reload done", "success", success)
},
)
// Spawn egress reader
go func() {
defer log.LogPanicAndExit()
reader.NewReader(tunIO).Run()
}()
spawnIngressDispatcher(tunIO)
disp.Init(sigcmn.CtrlConn)
// Parse sig config
if loadConfig(cfg.Sig.SIGConfig) != true {
log.Crit("Unable to load sig config on startup")
return 1
}
setupEgress(tunIO)
setupIngress(tunIO)
cfg.Metrics.StartPrometheus()
select {
case <-fatal.ShutdownChan():
Expand Down Expand Up @@ -167,6 +167,30 @@ func setupTun() (io.ReadWriteCloser, error) {
return tunIO, nil
}

func setupEgress(tunIO io.ReadWriteCloser) {
egress.Init()
go func() {
defer log.LogPanicAndExit()
base.PollReqHdlr()
}()
// Spawn egress reader
go func() {
defer log.LogPanicAndExit()
reader.NewReader(tunIO).Run()
}()
}

func setupIngress(tunIO io.ReadWriteCloser) {
d := ingress.NewDispatcher(tunIO)
go func() {
defer log.LogPanicAndExit()
if err := d.Run(); err != nil {
log.Crit("Ingress dispatcher error", "err", err)
fatal.Fatal(err)
}
}()
}

func checkPerms() error {
user, err := user.Current()
if err != nil {
Expand All @@ -186,21 +210,6 @@ func checkPerms() error {
return nil
}

func setup() error {
// Export prometheus metrics.
metrics.Init(cfg.Sig.ID)
if err := sigcmn.Init(cfg.Sig, cfg.Sciond); err != nil {
return common.NewBasicError("Error during initialization", err)
}
egress.Init()
disp.Init(sigcmn.CtrlConn)
// Parse sig config
if loadConfig(cfg.Sig.SIGConfig) != true {
return common.NewBasicError("Unable to load sig config on startup", nil)
}
return nil
}

func loadConfig(path string) bool {
cfg, err := config.LoadFromFile(path)
if err != nil {
Expand All @@ -214,14 +223,3 @@ func loadConfig(path string) bool {
atomic.StoreUint64(&metrics.ConfigVersion, cfg.ConfigVersion)
return true
}

func spawnIngressDispatcher(tunIO io.ReadWriteCloser) {
d := ingress.NewDispatcher(tunIO)
go func() {
defer log.LogPanicAndExit()
if err := d.Run(); err != nil {
log.Crit("Ingress dispatcher error", "err", err)
fatal.Fatal(err)
}
}()
}