mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-08-23 01:27:13 +02:00
all: refactor router code to use interface
So the code is more modular, easier to read/maintain.
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
package pfsense
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/Control-D-Inc/ctrld"
|
||||
"github.com/kardianos/service"
|
||||
)
|
||||
|
||||
const (
|
||||
Name = "pfsens"
|
||||
|
||||
rcPath = "/usr/local/etc/rc.d"
|
||||
unboundRcPath = rcPath + "/unbound"
|
||||
dnsmasqRcPath = rcPath + "/dnsmasq"
|
||||
)
|
||||
|
||||
const pfsenseInitScript = `#!/bin/sh
|
||||
|
||||
# PROVIDE: {{.Name}}
|
||||
# REQUIRE: SERVERS
|
||||
# REQUIRE: unbound dnsmasq securelevel
|
||||
# KEYWORD: shutdown
|
||||
|
||||
. /etc/rc.subr
|
||||
|
||||
name="{{.Name}}"
|
||||
{{.Name}}_env="IS_DAEMON=1"
|
||||
pidfile="/var/run/${name}.pid"
|
||||
command="/usr/sbin/daemon"
|
||||
daemon_args="-P ${pidfile} -r -t \"${name}: daemon\"{{if .WorkingDirectory}} -c {{.WorkingDirectory}}{{end}}"
|
||||
command_args="${daemon_args} {{.Path}}{{range .Arguments}} {{.}}{{end}}"
|
||||
|
||||
run_rc_command "$1"
|
||||
`
|
||||
|
||||
type Pfsense struct {
|
||||
cfg *ctrld.Config
|
||||
svcName string
|
||||
}
|
||||
|
||||
// New returns a router.Router for configuring/setup/run ctrld on Pfsense routers.
|
||||
func New(cfg *ctrld.Config) *Pfsense {
|
||||
return &Pfsense{cfg: cfg}
|
||||
}
|
||||
|
||||
func (p *Pfsense) ConfigureService(svc *service.Config) error {
|
||||
svc.Option["SysvScript"] = pfsenseInitScript
|
||||
p.svcName = svc.Name
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Pfsense) Install(config *service.Config) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Pfsense) Uninstall(config *service.Config) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Pfsense) PreRun() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Pfsense) Configure() error {
|
||||
p.cfg.Listener["0"].IP = "127.0.0.1"
|
||||
p.cfg.Listener["0"].Port = 53
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Pfsense) Setup() error {
|
||||
// If Pfsense is in DNS Resolver mode, ensure no unbound processes running.
|
||||
_ = exec.Command("killall", "unbound").Run()
|
||||
|
||||
// If Pfsense is in DNS Forwarder mode, ensure no dnsmasq processes running.
|
||||
_ = exec.Command("killall", "dnsmasq").Run()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (p *Pfsense) Cleanup() error {
|
||||
if err := os.Remove(filepath.Join(rcPath, p.svcName+".sh")); err != nil {
|
||||
return fmt.Errorf("os.Remove: %w", err)
|
||||
}
|
||||
_ = exec.Command(unboundRcPath, "onerestart").Run()
|
||||
_ = exec.Command(dnsmasqRcPath, "onerestart").Run()
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user