Skip to content

Commit

Permalink
fix: restart openvpn without vrf master.
Browse files Browse the repository at this point in the history
  • Loading branch information
danieldin95 committed Sep 29, 2024
1 parent 58f4d6f commit 11b4e86
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 32 deletions.
2 changes: 1 addition & 1 deletion pkg/api/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ type Router interface {
}

type VPNer interface {
RestartVpn()
RestartVPN()
}

type Qoser interface {
Expand Down
2 changes: 1 addition & 1 deletion pkg/api/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ func (h Network) RestartVPN(w http.ResponseWriter, r *http.Request) {
return
}

worker.RestartVpn()
worker.RestartVPN()

ResponseJson(w, true)
}
67 changes: 37 additions & 30 deletions pkg/switch/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,38 @@ func (w *WorkerImpl) UndoZTrust() {
}
}

func (w *WorkerImpl) letVPN2VRF() {
_, vpn := w.GetCfgs()
promise := libol.NewPromise()
promise.Go(func() error {
link, err := nl.LinkByName(vpn.Device)
if link == nil {
w.out.Info("Link %s %s", vpn.Device, err)
return err
}

attr := link.Attrs()
if err := w.vrf.AddSlave(attr.Name); err != nil {
w.out.Info("VRF AddSlave: %s", err)
return err
}

dest, _ := libol.ParseNet(vpn.Subnet)
rt := &nl.Route{
Dst: dest,
Table: w.table,
LinkIndex: attr.Index,
}
w.out.Debug("WorkerImpl.LoadRoute: %s", rt.String())
if err := nl.RouteAdd(rt); err != nil {
w.out.Warn("Route add: %s", err)
return err
}

return nil
})
}

func (w *WorkerImpl) Start(v api.Switcher) {
cfg, vpn := w.GetCfgs()

Expand All @@ -447,36 +479,8 @@ func (w *WorkerImpl) Start(v api.Switcher) {
if !(w.vpn == nil) {
w.vpn.Start()
if !(w.vrf == nil) {
promise := libol.NewPromise()
promise.Go(func() error {
link, err := nl.LinkByName(vpn.Device)
if link == nil {
w.out.Info("Link %s %s", vpn.Device, err)
return err
}

attr := link.Attrs()
if err := w.vrf.AddSlave(attr.Name); err != nil {
w.out.Info("VRF AddSlave: %s", err)
return err
}

dest, _ := libol.ParseNet(vpn.Subnet)
rt := &nl.Route{
Dst: dest,
Table: w.table,
LinkIndex: attr.Index,
}
w.out.Debug("WorkerImpl.LoadRoute: %s", rt.String())
if err := nl.RouteAdd(rt); err != nil {
w.out.Warn("Route add: %s", err)
return err
}

return nil
})
w.letVPN2VRF()
}

w.fire.Mangle.In.AddRule(cn.IPRule{
Input: vpn.Device,
Jump: w.qos.ChainIn(),
Expand Down Expand Up @@ -559,9 +563,12 @@ func (w *WorkerImpl) unloadRoutes() {
}
}

func (w *WorkerImpl) RestartVpn() {
func (w *WorkerImpl) RestartVPN() {
if w.vpn != nil {
w.vpn.Restart()
if !(w.vrf == nil) {
w.letVPN2VRF()
}
}
}

Expand Down

0 comments on commit 11b4e86

Please sign in to comment.