// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause

// Package preftype is a leaf package containing types for various
// preferences.
package preftype

import "fmt"

// NetfilterMode is the firewall management mode to use when
// programming the Linux network stack.
type NetfilterMode int

// These numbers are persisted to disk in JSON files and thus can't be
// renumbered or repurposed.
const (
	NetfilterOff      NetfilterMode = 0 // remove all tailscale netfilter state
	NetfilterNoDivert NetfilterMode = 1 // manage tailscale chains, but don't call them
	NetfilterOn       NetfilterMode = 2 // manage tailscale chains and call them from main chains
)

func ParseNetfilterMode(s string) (NetfilterMode, error) {
	switch s {
	case "off":
		return NetfilterOff, nil
	case "nodivert":
		return NetfilterNoDivert, nil
	case "on":
		return NetfilterOn, nil
	default:
		return NetfilterOff, fmt.Errorf("unknown netfilter mode %q", s)
	}
}

func (m NetfilterMode) String() string {
	switch m {
	case NetfilterOff:
		return "off"
	case NetfilterNoDivert:
		return "nodivert"
	case NetfilterOn:
		return "on"
	default:
		return "???"
	}
}
