forked from vishvananda/netlink
-
Notifications
You must be signed in to change notification settings - Fork 3
/
rule.go
82 lines (72 loc) · 1.71 KB
/
rule.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package netlink
import (
"fmt"
"net/netip"
)
// Rule represents a netlink rule.
type Rule struct {
Priority int
Family int
Table int
Type uint8
Mark uint32
MarkSet bool
Mask int
Tos uint
TunID uint
Goto int
Src netip.Prefix
Dst netip.Prefix
Flow int
IifName string
OifName string
SuppressIfgroup int
SuppressPrefixlen int
Invert bool
Dport *RulePortRange
Sport *RulePortRange
IPProto int
UIDRange *RuleUIDRange
}
func (r Rule) String() string {
from := "all"
if r.Src.IsValid() && r.Src.String() != "<nil>" {
from = r.Src.String()
}
to := "all"
if r.Dst.IsValid() && r.Dst.String() != "<nil>" {
to = r.Dst.String()
}
return fmt.Sprintf("ip rule %d: from %s to %s table %d",
r.Priority, from, to, r.Table)
}
// NewRule return empty rules.
func NewRule() *Rule {
return &Rule{
Table: -1,
SuppressIfgroup: -1,
SuppressPrefixlen: -1,
Priority: -1,
Mask: -1,
Goto: -1,
Flow: -1,
}
}
// 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
}
// 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
}