fix: wherelist during monitoring db

This commit is contained in:
zhihui.ding
2023-04-05 10:41:52 +08:00
parent fbfcf9ab39
commit 73e0063a9e
8 changed files with 69 additions and 38 deletions

View File

@@ -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

19
docker/openlan.debian Executable file
View File

@@ -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"]

View File

@@ -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)
}

View File

@@ -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 {

View File

@@ -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

View File

@@ -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

View File

@@ -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
})
}