From 73e0063a9e007a17f2acbf88f46b8508f7b995ce Mon Sep 17 00:00:00 2001 From: "zhihui.ding" Date: Wed, 5 Apr 2023 10:41:52 +0800 Subject: [PATCH] fix: wherelist during monitoring db --- Makefile | 8 +++-- docker/{openlan.docker => openlan.centos} | 0 docker/openlan.debian | 19 ++++++++++ pkg/database/client.go | 23 +++++++----- pkg/models/esp.go | 4 +-- pkg/switch/confd.go | 5 ++- pkg/switch/ipsec.go | 44 +++++++++++------------ pkg/switch/openlan.go | 4 +-- 8 files changed, 69 insertions(+), 38 deletions(-) rename docker/{openlan.docker => openlan.centos} (100%) create mode 100755 docker/openlan.debian diff --git a/Makefile b/Makefile index 853e3ff..238d508 100755 --- a/Makefile +++ b/Makefile @@ -39,9 +39,12 @@ bin: linux windows darwin ## build all platform binary ## -v /var/run:/var/run -v /etc/openlan/switch:/etc/openlan/switch \ ## openlan-switch:5.8.13 docker: pkg - cp $(SD)/docker/openlan.docker $(BD) - cd $(BD) && docker build -t openlan:$(VER) --build-arg BIN=$(LINUX_DIR).bin -f openlan.docker . + cp $(SD)/docker/openlan.centos $(BD) + cd $(BD) && docker build -t openlan:$(VER) --build-arg BIN=$(LINUX_DIR).bin -f openlan.centos . +docker-deb: pkg + cp $(SD)/docker/openlan.debian $(BD) + cd $(BD) && docker build -t openlan:d$(VER) --build-arg BIN=$(LINUX_DIR).bin -f openlan.debian . clean: ## clean cache rm -rvf ./build @@ -132,6 +135,7 @@ install: env linux ## install packages @cp -rf $(SD)/dist/resource/cert/openlan/ca/ca.crt $(LINUX_DIR)/var/openlan/cert @mkdir -p $(LINUX_DIR)/var/openlan/point @mkdir -p $(LINUX_DIR)/var/openlan/openvpn + @mkdir -p $(LINUX_DIR)/var/openlan/l2tp @mkdir -p $(LINUX_DIR)/var/openlan/dhcp @mkdir -p $(LINUX_DIR)/var/openlan/confd @mkdir -p $(LINUX_DIR)/etc/sysconfig/openlan diff --git a/docker/openlan.docker b/docker/openlan.centos similarity index 100% rename from docker/openlan.docker rename to docker/openlan.centos diff --git a/docker/openlan.debian b/docker/openlan.debian new file mode 100755 index 0000000..4d733fa --- /dev/null +++ b/docker/openlan.debian @@ -0,0 +1,19 @@ +FROM debian:buster + +ARG BIN + +WORKDIR /root + +ADD ${BIN} /tmp + +RUN apt-get update -y + +RUN DOCKER=yes /tmp/${BIN} +RUN cd /usr/sbin && rm -rf iptables && ln -s xtables-legacy-multi iptables + +RUN rm -rf /tmp/* + +LABEL application="OpenLAN Switch Application" +LABEL maintainer="danieldin95@163.com" + +CMD ["/var/openlan/script/switch.sh", "start"] diff --git a/pkg/database/client.go b/pkg/database/client.go index 9c8b145..ee1e34b 100755 --- a/pkg/database/client.go +++ b/pkg/database/client.go @@ -57,7 +57,11 @@ func (o *OvSDB) List(result interface{}) error { } func (o *OvSDB) WhereList(predict interface{}, result interface{}) error { - return o.Client.WhereCache(predict).List(o.Context(), result) + cache := o.Client.WhereCache(predict) + if cache == nil { + return libol.NewErr("not cache list") + } + return cache.List(o.Context(), result) } type DBClient struct { @@ -81,7 +85,7 @@ func (c *DBClient) NilLog() *logr.Logger { return &l } -func (c *DBClient) Open(handler *cache.EventHandlerFuncs) error { +func (c *DBClient) Open(handler *cache.EventHandlerFuncs, block func(val *DBClient)) error { server := c.Server database := c.Database dbModel, err := model.NewClientDBModel(database, models) @@ -102,6 +106,9 @@ func (c *DBClient) Open(handler *cache.EventHandlerFuncs) error { return err } c.Client = &OvSDB{Client: ovs} + if block != nil { + block(c) + } if handler != nil { processor := ovs.Cache() if processor == nil { @@ -126,11 +133,10 @@ func NewConfClient(handler *cache.EventHandlerFuncs) (*DBClient, error) { Database: api.Database, Verbose: api.Verbose, } - err = obj.Open(handler) - if err == nil { - Conf = obj - Client = obj.Client - } + err = obj.Open(handler, func(val *DBClient) { + Conf = val + Client = val.Client + }) } return Conf, err } @@ -141,6 +147,5 @@ func NewClient(handler *cache.EventHandlerFuncs) (*DBClient, error) { Database: api.Database, Verbose: api.Verbose, } - err := obj.Open(handler) - return obj, err + return obj, obj.Open(handler, nil) } diff --git a/pkg/models/esp.go b/pkg/models/esp.go index c59f020..e5165fb 100755 --- a/pkg/models/esp.go +++ b/pkg/models/esp.go @@ -60,7 +60,7 @@ func (l *EspState) Update() { } func (l *EspState) ID() string { - return fmt.Sprintf("%d-%s-%s", l.Spi, l.Local, l.Remote) + return fmt.Sprintf("spi:%d %s-%s", l.Spi, l.Local, l.Remote) } func (l *EspState) UpTime() int64 { @@ -94,7 +94,7 @@ func (l *EspPolicy) Update() { } func (l *EspPolicy) ID() string { - return fmt.Sprintf("%d-%s-%s", l.Spi, l.Source, l.Dest) + return fmt.Sprintf("spi:%d %s-%s", l.Spi, l.Source, l.Dest) } func NewEspPolicySchema(e *EspPolicy) schema.EspPolicy { diff --git a/pkg/switch/confd.go b/pkg/switch/confd.go index fd801bc..7ef0212 100755 --- a/pkg/switch/confd.go +++ b/pkg/switch/confd.go @@ -28,18 +28,20 @@ func (c *ConfD) Initialize() { } func (c *ConfD) Start() { + c.out.Info("ConfD.Start") handler := &cache.EventHandlerFuncs{ AddFunc: c.Add, DeleteFunc: c.Delete, UpdateFunc: c.Update, } if _, err := database.NewConfClient(handler); err != nil { - c.out.Error("Confd.Start open db with %s", err) + c.out.Error("ConfD.Start open db with %s", err) return } } func (c *ConfD) Stop() { + c.out.Info("ConfD.Stop") } func (c *ConfD) Add(table string, model model.Model) { @@ -107,6 +109,7 @@ func GetRoutes(result *[]database.PrefixRoute, device string) error { func(l *database.PrefixRoute) bool { return l.Gateway == device }, result); err != nil { + libol.Warn("GetRoutes %v has %s", device, err) return err } return nil diff --git a/pkg/switch/ipsec.go b/pkg/switch/ipsec.go index dcd8b93..5e94fc7 100755 --- a/pkg/switch/ipsec.go +++ b/pkg/switch/ipsec.go @@ -101,7 +101,7 @@ func (w *EspWorker) newPolicy(args PolicyParameter) *nl.XfrmPolicy { func (w *EspWorker) addState(ms *models.EspState) { spi := ms.Spi - w.out.Info("EspWorker.addState %s-%s", ms.Local, ms.Remote) + w.out.Info("EspWorker.addState %s", ms.ID()) if st := w.newState(StateParameters{ spi, ms.Local, ms.Remote, ms.Auth, ms.Crypt, }); st != nil { @@ -123,7 +123,7 @@ func (w *EspWorker) addState(ms *models.EspState) { } func (w *EspWorker) delState(ms *models.EspState) { - w.out.Info("EspWorker.delState %s-%s", ms.Local, ms.Remote) + w.out.Info("EspWorker.delState %s", ms.ID()) cache.EspState.Del(ms.ID()) } @@ -131,15 +131,15 @@ func (w *EspWorker) addPolicy(mp *models.EspPolicy) { spi := mp.Spi src, err := libol.ParseNet(mp.Source) if err != nil { - w.out.Error("EspWorker.addPolicy %s %s", mp.Source, err) + w.out.Error("EspWorker.addPolicy %s: %s", mp.ID(), err) return } dst, err := libol.ParseNet(mp.Dest) if err != nil { - w.out.Error("EspWorker.addPolicy %s %s", mp.Dest, err) + w.out.Error("EspWorker.addPolicy %s: %s", mp.ID(), err) return } - w.out.Info("EspWorker.addPolicy %s-%s", mp.Source, mp.Dest) + w.out.Info("EspWorker.addPolicy %s", mp.ID()) if po := w.newPolicy(PolicyParameter{ spi, mp.Local, mp.Remote, src, dst, nl.XFRM_DIR_OUT, mp.Priority, }); po != nil { @@ -166,7 +166,7 @@ func (w *EspWorker) addPolicy(mp *models.EspPolicy) { } func (w *EspWorker) delPolicy(mp *models.EspPolicy) { - w.out.Info("EspWorker.delPolicy %s-%s", mp.Source, mp.Dest) + w.out.Info("EspWorker.delPolicy %s", mp.ID()) cache.EspPolicy.Del(mp.ID()) } @@ -276,24 +276,24 @@ func (w *EspWorker) UpDummy(name, addr, peer string) error { func (w *EspWorker) addXfrm() { for _, state := range w.states { - w.out.Debug("EspWorker.AddXfrm State %s", state.In.Spi) + w.out.Debug("EspWorker.AddXfrm State %v", state) if err := nl.XfrmStateAdd(state.In); err != nil { - w.out.Error("EspWorker.Start.in State.in %s", err) + w.out.Error("EspWorker.addXfrm in %s: %s", state.ID(), err) } if err := nl.XfrmStateAdd(state.Out); err != nil { - w.out.Error("EspWorker.Start.out State.out %s", err) + w.out.Error("EspWorker.addXfrm out %s: %s", state.ID(), err) } } - for _, policy := range w.policies { - w.out.Debug("EspWorker.AddXfrm Policy %s", policy.Out.Dst) - if err := nl.XfrmPolicyAdd(policy.In); err != nil { - w.out.Error("EspWorker.addXfrm.in Policy %s", err) + for _, pol := range w.policies { + w.out.Debug("EspWorker.AddXfrm Policy %v", pol) + if err := nl.XfrmPolicyAdd(pol.In); err != nil { + w.out.Error("EspWorker.addXfrm in %v: %s", pol.In, err) } - if err := nl.XfrmPolicyAdd(policy.Fwd); err != nil { - w.out.Error("EspWorker.addXfrm.fwd Policy %s", err) + if err := nl.XfrmPolicyAdd(pol.Fwd); err != nil { + w.out.Error("EspWorker.addXfrm fwd %v: %s", pol.Fwd, err) } - if err := nl.XfrmPolicyAdd(policy.Out); err != nil { - w.out.Error("EspWorker.addXfrm.out Policy %s", err) + if err := nl.XfrmPolicyAdd(pol.Out); err != nil { + w.out.Error("EspWorker.addXfrm out %v: %s", pol.Out, err) } } } @@ -330,23 +330,23 @@ func (w *EspWorker) delXfrm() { for _, mp := range w.policies { w.delPolicy(mp) if err := nl.XfrmPolicyDel(mp.In); err != nil { - w.out.Warn("EspWorker.delXfrm Policy %s-%s: %s", mp.Source, mp.Dest, err) + w.out.Warn("EspWorker.delXfrm Policy.in %s: %s", mp.ID(), err) } if err := nl.XfrmPolicyDel(mp.Fwd); err != nil { - w.out.Warn("EspWorker.delXfrm Policy %s-%s: %s", mp.Source, mp.Dest, err) + w.out.Warn("EspWorker.delXfrm Policy.fwd %s: %s", mp.ID(), err) } if err := nl.XfrmPolicyDel(mp.Out); err != nil { - w.out.Warn("EspWorker.delXfrm Policy %s-%s: %s", mp.Source, mp.Dest, err) + w.out.Warn("EspWorker.delXfrm Policy.out %s: %s", mp.ID(), err) } } w.policies = nil for _, ms := range w.states { w.delState(ms) if err := nl.XfrmStateDel(ms.In); err != nil { - w.out.Warn("EspWorker.delXfrm State %s-%s: %s", ms.Local, ms.Remote, err) + w.out.Warn("EspWorker.delXfrm State.in %s: %s", ms.ID(), err) } if err := nl.XfrmStateDel(ms.Out); err != nil { - w.out.Warn("EspWorker.delXfrm State %s-%s: %s", ms.Local, ms.Remote, err) + w.out.Warn("EspWorker.delXfrm State.out %s: %s", ms.ID(), err) } } w.states = nil diff --git a/pkg/switch/openlan.go b/pkg/switch/openlan.go index 12cb9f2..7d16916 100755 --- a/pkg/switch/openlan.go +++ b/pkg/switch/openlan.go @@ -126,12 +126,12 @@ func (w *OpenLANWorker) LoadRoutes() { MaxInt: time.Minute, MinInt: time.Second * 10, } - w.out.Info("OpenLANWorker.LoadRoute: %v", rt) promise.Go(func() error { if err := netlink.RouteReplace(&nlrt); err != nil { - w.out.Warn("OpenLANWorker.LoadRoute: %s", err) + w.out.Warn("OpenLANWorker.LoadRoute: %v %s", nlrt, err) return err } + w.out.Info("OpenLANWorker.LoadRoute: %v success", nlrt) return nil }) }