2015-11-26 10:50:07 +00:00
|
|
|
package netlink
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Rule represents a netlink rule.
|
|
|
|
type Rule struct {
|
|
|
|
Priority int
|
2017-08-16 06:28:20 +00:00
|
|
|
Family int
|
2015-12-09 13:07:11 +00:00
|
|
|
Table int
|
2024-07-29 09:12:06 +00:00
|
|
|
Mark uint32
|
|
|
|
Mask *uint32
|
2020-02-08 20:55:55 +00:00
|
|
|
Tos uint
|
2015-12-09 13:07:11 +00:00
|
|
|
TunID uint
|
2015-11-26 10:50:07 +00:00
|
|
|
Goto int
|
|
|
|
Src *net.IPNet
|
|
|
|
Dst *net.IPNet
|
2015-12-09 13:07:11 +00:00
|
|
|
Flow int
|
2015-11-26 10:50:07 +00:00
|
|
|
IifName string
|
|
|
|
OifName string
|
|
|
|
SuppressIfgroup int
|
|
|
|
SuppressPrefixlen int
|
2017-11-07 17:34:56 +00:00
|
|
|
Invert bool
|
2020-01-16 16:27:48 +00:00
|
|
|
Dport *RulePortRange
|
|
|
|
Sport *RulePortRange
|
2021-08-26 04:23:33 +00:00
|
|
|
IPProto int
|
2022-04-27 23:49:27 +00:00
|
|
|
UIDRange *RuleUIDRange
|
2023-03-10 11:50:29 +00:00
|
|
|
Protocol uint8
|
2024-08-22 19:13:23 +00:00
|
|
|
Type uint8
|
2015-11-26 10:50:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (r Rule) String() string {
|
2021-08-26 13:44:53 +00:00
|
|
|
from := "all"
|
|
|
|
if r.Src != nil && r.Src.String() != "<nil>" {
|
|
|
|
from = r.Src.String()
|
|
|
|
}
|
|
|
|
|
|
|
|
to := "all"
|
|
|
|
if r.Dst != nil && r.Dst.String() != "<nil>" {
|
|
|
|
to = r.Dst.String()
|
|
|
|
}
|
|
|
|
|
2024-08-22 19:13:23 +00:00
|
|
|
return fmt.Sprintf("ip rule %d: from %s to %s table %d %s",
|
|
|
|
r.Priority, from, to, r.Table, r.typeString())
|
2015-11-26 10:50:07 +00:00
|
|
|
}
|
2015-12-09 13:07:11 +00:00
|
|
|
|
|
|
|
// NewRule return empty rules.
|
|
|
|
func NewRule() *Rule {
|
|
|
|
return &Rule{
|
|
|
|
SuppressIfgroup: -1,
|
|
|
|
SuppressPrefixlen: -1,
|
|
|
|
Priority: -1,
|
2024-07-29 09:12:06 +00:00
|
|
|
Mark: 0,
|
|
|
|
Mask: nil,
|
2015-12-09 13:07:11 +00:00
|
|
|
Goto: -1,
|
|
|
|
Flow: -1,
|
|
|
|
}
|
|
|
|
}
|
2020-01-16 16:27:48 +00:00
|
|
|
|
|
|
|
// NewRulePortRange creates rule sport/dport range.
|
|
|
|
func NewRulePortRange(start, end uint16) *RulePortRange {
|
|
|
|
return &RulePortRange{Start: start, End: end}
|
|
|
|
}
|
|
|
|
|
|
|
|
// RulePortRange represents rule sport/dport range.
|
|
|
|
type RulePortRange struct {
|
|
|
|
Start uint16
|
|
|
|
End uint16
|
|
|
|
}
|
2022-04-27 23:49:27 +00:00
|
|
|
|
|
|
|
// NewRuleUIDRange creates rule uid range.
|
|
|
|
func NewRuleUIDRange(start, end uint32) *RuleUIDRange {
|
|
|
|
return &RuleUIDRange{Start: start, End: end}
|
|
|
|
}
|
|
|
|
|
|
|
|
// RuleUIDRange represents rule uid range.
|
|
|
|
type RuleUIDRange struct {
|
|
|
|
Start uint32
|
|
|
|
End uint32
|
|
|
|
}
|