mirror of
https://github.com/netbirdio/netbird.git
synced 2024-12-12 09:50:47 +01:00
71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
package iptables
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
|
|
"github.com/netbirdio/netbird/client/iface"
|
|
"github.com/netbirdio/netbird/client/iface/device"
|
|
)
|
|
|
|
type InterfaceState struct {
|
|
NameStr string `json:"name"`
|
|
WGAddress iface.WGAddress `json:"wg_address"`
|
|
UserspaceBind bool `json:"userspace_bind"`
|
|
}
|
|
|
|
func (i *InterfaceState) Name() string {
|
|
return i.NameStr
|
|
}
|
|
|
|
func (i *InterfaceState) Address() device.WGAddress {
|
|
return i.WGAddress
|
|
}
|
|
|
|
func (i *InterfaceState) IsUserspaceBind() bool {
|
|
return i.UserspaceBind
|
|
}
|
|
|
|
type ShutdownState struct {
|
|
sync.Mutex
|
|
|
|
InterfaceState *InterfaceState `json:"interface_state,omitempty"`
|
|
|
|
RouteRules routeRules `json:"route_rules,omitempty"`
|
|
RouteIPsetCounter *ipsetCounter `json:"route_ipset_counter,omitempty"`
|
|
|
|
ACLEntries aclEntries `json:"acl_entries,omitempty"`
|
|
ACLIPsetStore *ipsetStore `json:"acl_ipset_store,omitempty"`
|
|
}
|
|
|
|
func (s *ShutdownState) Name() string {
|
|
return "iptables_state"
|
|
}
|
|
|
|
func (s *ShutdownState) Cleanup() error {
|
|
ipt, err := Create(s.InterfaceState)
|
|
if err != nil {
|
|
return fmt.Errorf("create iptables manager: %w", err)
|
|
}
|
|
|
|
if s.RouteRules != nil {
|
|
ipt.router.rules = s.RouteRules
|
|
}
|
|
if s.RouteIPsetCounter != nil {
|
|
ipt.router.ipsetCounter.LoadData(s.RouteIPsetCounter)
|
|
}
|
|
|
|
if s.ACLEntries != nil {
|
|
ipt.aclMgr.entries = s.ACLEntries
|
|
}
|
|
if s.ACLIPsetStore != nil {
|
|
ipt.aclMgr.ipsetStore = s.ACLIPsetStore
|
|
}
|
|
|
|
if err := ipt.Reset(nil); err != nil {
|
|
return fmt.Errorf("reset iptables manager: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|