mirror of
https://github.com/netbirdio/netbird.git
synced 2024-12-16 11:51:30 +01:00
48 lines
970 B
Go
48 lines
970 B
Go
|
package nftables
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"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 {
|
||
|
InterfaceState *InterfaceState `json:"interface_state,omitempty"`
|
||
|
}
|
||
|
|
||
|
func (s *ShutdownState) Name() string {
|
||
|
return "nftables_state"
|
||
|
}
|
||
|
|
||
|
func (s *ShutdownState) Cleanup() error {
|
||
|
nft, err := Create(s.InterfaceState)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("create nftables manager: %w", err)
|
||
|
}
|
||
|
|
||
|
if err := nft.Reset(nil); err != nil {
|
||
|
return fmt.Errorf("reset nftables manager: %w", err)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|