...
1
2
3 package tc
4
5 import "github.com/vishvananda/netlink"
6
7 type Attrs struct {
8 linkIndex int
9 handle uint32
10 parent uint32
11 }
12
13 type FilterAttrs struct {
14 Attrs
15 priority uint16
16 protocol uint16
17 }
18
19 func NewFilterAttrs() *FilterAttrs {
20 return &FilterAttrs{Attrs: Attrs{}}
21 }
22
23 func (fa *FilterAttrs) WithPriority(priority uint16) *FilterAttrs {
24 fa.priority = priority
25 return fa
26 }
27
28 func (fa *FilterAttrs) WithProtocol(protocol uint16) *FilterAttrs {
29 fa.protocol = protocol
30 return fa
31 }
32
33 func (fa *FilterAttrs) WithLinkIndex(linkIndex int) *FilterAttrs {
34 fa.linkIndex = linkIndex
35 return fa
36 }
37
38 func (fa *FilterAttrs) WithHandle(handle uint32) *FilterAttrs {
39 fa.handle = handle
40 return fa
41 }
42
43 func (fa *FilterAttrs) WithParent(parent uint32) *FilterAttrs {
44 fa.parent = parent
45 return fa
46 }
47
48 func (fa *FilterAttrs) WithMakeHandle(major, minor uint16) *FilterAttrs {
49 fa.handle = netlink.MakeHandle(major, minor)
50 return fa
51 }
52
53 func (fa *FilterAttrs) WithMakeParent(major, minor uint16) *FilterAttrs {
54 fa.parent = netlink.MakeHandle(major, minor)
55 return fa
56 }
57
58 func (fa *FilterAttrs) Build() netlink.FilterAttrs {
59 filterAttrs := netlink.FilterAttrs{
60 LinkIndex: fa.Attrs.linkIndex,
61 Parent: fa.Attrs.parent,
62 Handle: fa.Attrs.handle,
63 }
64 filterAttrs.Priority = fa.priority
65 filterAttrs.Protocol = fa.protocol
66 return filterAttrs
67 }
68
69 type ActionAttrs struct {
70 Attrs
71 action netlink.TcAct
72 }
73
74 func NewActionAttrs() *ActionAttrs {
75 return &ActionAttrs{Attrs: Attrs{}}
76 }
77
78 func (aa *ActionAttrs) WithAction(action netlink.TcAct) *ActionAttrs {
79 aa.action = action
80 return aa
81 }
82
83 func (aa *ActionAttrs) Build() netlink.ActionAttrs {
84 actionAttrs := netlink.ActionAttrs{
85 Action: aa.action,
86 }
87 return actionAttrs
88 }
89
90 type QdiscAttrs struct {
91 Attrs
92 }
93
94 func NewQdiscAttrs() *QdiscAttrs {
95 return &QdiscAttrs{Attrs: Attrs{}}
96 }
97
98 func (qa *QdiscAttrs) WithLinkIndex(linkIndex int) *QdiscAttrs {
99 qa.linkIndex = linkIndex
100 return qa
101 }
102
103 func (qa *QdiscAttrs) WithHandle(handle uint32) *QdiscAttrs {
104 qa.handle = handle
105 return qa
106 }
107
108 func (qa *QdiscAttrs) WithParent(parent uint32) *QdiscAttrs {
109 qa.parent = parent
110 return qa
111 }
112
113 func (qa *QdiscAttrs) WithMakeHandle(major, minor uint16) *QdiscAttrs {
114 qa.handle = netlink.MakeHandle(major, minor)
115 return qa
116 }
117
118 func (qa *QdiscAttrs) WithMakeParent(major, minor uint16) *QdiscAttrs {
119 qa.parent = netlink.MakeHandle(major, minor)
120 return qa
121 }
122
123 func (qa *QdiscAttrs) Build() netlink.QdiscAttrs {
124 qdiscAttrs := netlink.QdiscAttrs{
125 LinkIndex: qa.linkIndex,
126 Parent: qa.parent,
127 Handle: qa.handle,
128 }
129 return qdiscAttrs
130 }
131
132 type ClassAttrs struct {
133 Attrs
134 }
135
136 func NewClassAttrs() *ClassAttrs {
137 return &ClassAttrs{}
138 }
139
140 func (ca *ClassAttrs) WithLinkIndex(linkIndex int) *ClassAttrs {
141 ca.linkIndex = linkIndex
142 return ca
143 }
144
145 func (ca *ClassAttrs) WithHandle(handle uint32) *ClassAttrs {
146 ca.handle = handle
147 return ca
148 }
149
150 func (ca *ClassAttrs) WithParent(parent uint32) *ClassAttrs {
151 ca.parent = parent
152 return ca
153 }
154
155 func (ca *ClassAttrs) WithMakeHandle(major, minor uint16) *ClassAttrs {
156 ca.handle = netlink.MakeHandle(major, minor)
157 return ca
158 }
159
160 func (ca *ClassAttrs) WithMakeParent(major, minor uint16) *ClassAttrs {
161 ca.parent = netlink.MakeHandle(major, minor)
162 return ca
163 }
164
165 func (ca *ClassAttrs) Build() netlink.ClassAttrs {
166 classAttrs := netlink.ClassAttrs{
167 LinkIndex: ca.linkIndex,
168 Parent: ca.parent,
169 Handle: ca.handle,
170 }
171 return classAttrs
172 }
173
View as plain text