mirror of
				https://github.com/luscis/openlan.git
				synced 2025-10-30 20:16:22 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Go
		
	
	
		
			Executable File
		
	
	
	
	
| package cswitch
 | |
| 
 | |
| import (
 | |
| 	"github.com/luscis/openlan/pkg/api"
 | |
| 	co "github.com/luscis/openlan/pkg/config"
 | |
| )
 | |
| 
 | |
| type RouterWorker struct {
 | |
| 	*WorkerImpl
 | |
| 	spec *co.RouterSpecifies
 | |
| }
 | |
| 
 | |
| func NewRouterWorker(c *co.Network) *RouterWorker {
 | |
| 	w := &RouterWorker{
 | |
| 		WorkerImpl: NewWorkerApi(c),
 | |
| 	}
 | |
| 	w.spec, _ = c.Specifies.(*co.RouterSpecifies)
 | |
| 	return w
 | |
| }
 | |
| 
 | |
| func (w *RouterWorker) Initialize() {
 | |
| 	w.WorkerImpl.Initialize()
 | |
| 	w.Forward()
 | |
| }
 | |
| 
 | |
| func (w *RouterWorker) Forward() {
 | |
| 	spec := w.spec
 | |
| 	// Enable MASQUERADE, and FORWARD it.
 | |
| 	w.out.Debug("RouterWorker.Forward %v", w.cfg)
 | |
| 	for _, sub := range spec.Subnets {
 | |
| 		if sub.CIDR == "" {
 | |
| 			continue
 | |
| 		}
 | |
| 		w.setR.Add(sub.CIDR)
 | |
| 	}
 | |
| 	w.toRelated(spec.Link, "Accept related")
 | |
| 	w.toForward_s(spec.Link, w.setR.Name, "", "From route")
 | |
| 	w.toMasq_s(w.setR.Name, "", "To Masq")
 | |
| }
 | |
| 
 | |
| func (w *RouterWorker) Start(v api.Switcher) {
 | |
| 	w.uuid = v.UUID()
 | |
| 	w.WorkerImpl.Start(v)
 | |
| }
 | |
| 
 | |
| func (w *RouterWorker) Stop() {
 | |
| 	w.WorkerImpl.Stop()
 | |
| }
 | |
| 
 | |
| func (w *RouterWorker) Reload(v api.Switcher) {
 | |
| 	w.Stop()
 | |
| 	w.Initialize()
 | |
| 	w.Start(v)
 | |
| }
 | 
