mirror of
https://github.com/luscis/openlan.git
synced 2025-10-07 01:22:51 +08:00
fix: wherelist during monitoring db
This commit is contained in:
8
Makefile
8
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
|
||||
|
19
docker/openlan.debian
Executable file
19
docker/openlan.debian
Executable 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"]
|
@@ -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)
|
||||
}
|
||||
|
@@ -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 {
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user