Skip to content

Commit dca01dd

Browse files
authored
Stop requesting ACKs (#336)
Since #330 and #334 were merged, we no longer need to request an acknowledge for every message we send. Skipping ACK requests improves runtime and memory usage for large Flush batches, as it reduces the number of required `recvmsg` calls. The first error will still be reported via an acknowledge even if none are requested. This also matches the behavior of nft userspace.
1 parent 55ce246 commit dca01dd

8 files changed

Lines changed: 27 additions & 27 deletions

File tree

chain.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ func (cc *Conn) AddChain(c *Chain) *Chain {
143143
cc.messages = append(cc.messages, netlinkMessage{
144144
Header: netlink.Header{
145145
Type: nftMsgNewChain.HeaderType(),
146-
Flags: netlink.Request | netlink.Acknowledge | netlink.Create,
146+
Flags: netlink.Request | netlink.Create,
147147
},
148148
Data: append(extraHeader(uint8(c.Table.Family), 0), data...),
149149
})
@@ -164,7 +164,7 @@ func (cc *Conn) DelChain(c *Chain) {
164164
cc.messages = append(cc.messages, netlinkMessage{
165165
Header: netlink.Header{
166166
Type: nftMsgDelChain.HeaderType(),
167-
Flags: netlink.Request | netlink.Acknowledge,
167+
Flags: netlink.Request,
168168
},
169169
Data: append(extraHeader(uint8(c.Table.Family), 0), data...),
170170
})
@@ -182,7 +182,7 @@ func (cc *Conn) FlushChain(c *Chain) {
182182
cc.messages = append(cc.messages, netlinkMessage{
183183
Header: netlink.Header{
184184
Type: nftMsgDelRule.HeaderType(),
185-
Flags: netlink.Request | netlink.Acknowledge,
185+
Flags: netlink.Request,
186186
},
187187
Data: append(extraHeader(uint8(c.Table.Family), 0), data...),
188188
})

conn.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ func (cc *Conn) FlushRuleset() {
431431
cc.messages = append(cc.messages, netlinkMessage{
432432
Header: netlink.Header{
433433
Type: netlink.HeaderType((unix.NFNL_SUBSYS_NFTABLES << 8) | unix.NFT_MSG_DELTABLE),
434-
Flags: netlink.Request | netlink.Acknowledge | netlink.Create,
434+
Flags: netlink.Request | netlink.Create,
435435
},
436436
Data: extraHeader(0, 0),
437437
})

flowtable.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ func (cc *Conn) AddFlowtable(f *Flowtable) *Flowtable {
137137
cc.messages = append(cc.messages, netlinkMessage{
138138
Header: netlink.Header{
139139
Type: nftMsgNewFlowtable.HeaderType(),
140-
Flags: netlink.Request | netlink.Acknowledge | netlink.Create,
140+
Flags: netlink.Request | netlink.Create,
141141
},
142142
Data: append(extraHeader(uint8(f.Table.Family), 0), data...),
143143
})
@@ -157,7 +157,7 @@ func (cc *Conn) DelFlowtable(f *Flowtable) {
157157
cc.messages = append(cc.messages, netlinkMessage{
158158
Header: netlink.Header{
159159
Type: nftMsgDelFlowtable.HeaderType(),
160-
Flags: netlink.Request | netlink.Acknowledge,
160+
Flags: netlink.Request,
161161
},
162162
Data: append(extraHeader(uint8(f.Table.Family), 0), data...),
163163
})
@@ -200,7 +200,7 @@ func (cc *Conn) getFlowtables(t *Table) ([]netlink.Message, error) {
200200
message := netlink.Message{
201201
Header: netlink.Header{
202202
Type: nftMsgGetFlowtable.HeaderType(),
203-
Flags: netlink.Request | netlink.Acknowledge | netlink.Dump,
203+
Flags: netlink.Request | netlink.Dump,
204204
},
205205
Data: append(extraHeader(uint8(t.Family), 0), data...),
206206
}

gen.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func (cc *Conn) GetGen() (*Gen, error) {
6868
message := netlink.Message{
6969
Header: netlink.Header{
7070
Type: nftMsgGetGen.HeaderType(),
71-
Flags: netlink.Request | netlink.Acknowledge,
71+
Flags: netlink.Request,
7272
},
7373
Data: append(extraHeader(0, 0), data...),
7474
}

obj.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ func (cc *Conn) AddObj(o Obj) Obj {
127127
cc.messages = append(cc.messages, netlinkMessage{
128128
Header: netlink.Header{
129129
Type: nftMsgNewObj.HeaderType(),
130-
Flags: netlink.Request | netlink.Acknowledge | netlink.Create,
130+
Flags: netlink.Request | netlink.Create,
131131
},
132132
Data: append(extraHeader(uint8(o.family()), 0), cc.marshalAttr(attrs)...),
133133
})
@@ -149,7 +149,7 @@ func (cc *Conn) DeleteObject(o Obj) {
149149
cc.messages = append(cc.messages, netlinkMessage{
150150
Header: netlink.Header{
151151
Type: nftMsgDelObj.HeaderType(),
152-
Flags: netlink.Request | netlink.Acknowledge,
152+
Flags: netlink.Request,
153153
},
154154
Data: append(extraHeader(uint8(o.family()), 0), data...),
155155
})
@@ -355,7 +355,7 @@ func (cc *Conn) getObjWithLegacyType(o Obj, t *Table, msgType nftMsgType, return
355355
message := netlink.Message{
356356
Header: netlink.Header{
357357
Type: msgType.HeaderType(),
358-
Flags: netlink.Request | netlink.Acknowledge | flags,
358+
Flags: netlink.Request | flags,
359359
},
360360
Data: append(extraHeader(uint8(t.Family), 0), data...),
361361
}

rule.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,15 @@ func (cc *Conn) getRules(t *Table, c *Chain, msgType nftMsgType, handle uint64)
143143
{Type: unix.NFTA_RULE_CHAIN, Data: []byte(c.Name + "\x00")},
144144
}
145145

146-
var flags netlink.HeaderFlags = netlink.Request | netlink.Acknowledge | netlink.Dump
146+
var flags netlink.HeaderFlags = netlink.Request | netlink.Dump
147147

148148
if handle != 0 {
149149
attrs = append(attrs, netlink.Attribute{
150150
Type: unix.NFTA_RULE_HANDLE,
151151
Data: binaryutil.BigEndian.PutUint64(handle),
152152
})
153153

154-
flags = netlink.Request | netlink.Acknowledge
154+
flags = netlink.Request
155155
}
156156

157157
data, err := netlink.MarshalAttributes(attrs)
@@ -242,13 +242,13 @@ func (cc *Conn) newRule(r *Rule, op ruleOperation) *Rule {
242242
var ruleRef *Rule
243243
switch op {
244244
case operationAdd:
245-
flags = netlink.Request | netlink.Acknowledge | netlink.Create | netlink.Echo | netlink.Append
245+
flags = netlink.Request | netlink.Create | netlink.Echo | netlink.Append
246246
ruleRef = r
247247
case operationInsert:
248-
flags = netlink.Request | netlink.Acknowledge | netlink.Create | netlink.Echo
248+
flags = netlink.Request | netlink.Create | netlink.Echo
249249
ruleRef = r
250250
case operationReplace:
251-
flags = netlink.Request | netlink.Acknowledge | netlink.Replace
251+
flags = netlink.Request | netlink.Replace
252252
}
253253

254254
if r.Position != 0 {
@@ -343,7 +343,7 @@ func (cc *Conn) DelRule(r *Rule) error {
343343
cc.setErr(err)
344344
return err
345345
}
346-
flags := netlink.Request | netlink.Acknowledge
346+
flags := netlink.Request
347347

348348
cc.messages = append(cc.messages, netlinkMessage{
349349
Header: netlink.Header{

set.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,7 @@ func (cc *Conn) appendElemList(s *Set, vals []SetElement, msgType nftMsgType) er
466466
cc.messages = append(cc.messages, netlinkMessage{
467467
Header: netlink.Header{
468468
Type: msgType.HeaderType(),
469-
Flags: netlink.Request | netlink.Acknowledge | netlink.Create,
469+
Flags: netlink.Request | netlink.Create,
470470
},
471471
Data: append(extraHeader(uint8(s.Table.Family), 0), cc.marshalAttr(message)...),
472472
})
@@ -737,7 +737,7 @@ func (cc *Conn) AddSet(s *Set, vals []SetElement) error {
737737
cc.messages = append(cc.messages, netlinkMessage{
738738
Header: netlink.Header{
739739
Type: nftMsgNewSet.HeaderType(),
740-
Flags: netlink.Request | netlink.Acknowledge | netlink.Create,
740+
Flags: netlink.Request | netlink.Create,
741741
},
742742
Data: append(extraHeader(uint8(s.Table.Family), 0), cc.marshalAttr(tableInfo)...),
743743
})
@@ -762,7 +762,7 @@ func (cc *Conn) DelSet(s *Set) {
762762
cc.messages = append(cc.messages, netlinkMessage{
763763
Header: netlink.Header{
764764
Type: nftMsgDelSet.HeaderType(),
765-
Flags: netlink.Request | netlink.Acknowledge,
765+
Flags: netlink.Request,
766766
},
767767
Data: append(extraHeader(uint8(s.Table.Family), 0), data...),
768768
})
@@ -779,7 +779,7 @@ func (cc *Conn) FlushSet(s *Set) {
779779
cc.messages = append(cc.messages, netlinkMessage{
780780
Header: netlink.Header{
781781
Type: nftMsgDelSetElem.HeaderType(),
782-
Flags: netlink.Request | netlink.Acknowledge,
782+
Flags: netlink.Request,
783783
},
784784
Data: append(extraHeader(uint8(s.Table.Family), 0), data...),
785785
})
@@ -950,7 +950,7 @@ func (cc *Conn) GetSets(t *Table) ([]*Set, error) {
950950
message := netlink.Message{
951951
Header: netlink.Header{
952952
Type: nftMsgGetSet.HeaderType(),
953-
Flags: netlink.Request | netlink.Acknowledge | netlink.Dump,
953+
Flags: netlink.Request | netlink.Dump,
954954
},
955955
Data: append(extraHeader(uint8(t.Family), 0), data...),
956956
}
@@ -995,7 +995,7 @@ func (cc *Conn) GetSetByName(t *Table, name string) (*Set, error) {
995995
message := netlink.Message{
996996
Header: netlink.Header{
997997
Type: nftMsgGetSet.HeaderType(),
998-
Flags: netlink.Request | netlink.Acknowledge,
998+
Flags: netlink.Request,
999999
},
10001000
Data: append(extraHeader(uint8(t.Family), 0), data...),
10011001
}
@@ -1040,7 +1040,7 @@ func (cc *Conn) GetSetElements(s *Set) ([]SetElement, error) {
10401040
message := netlink.Message{
10411041
Header: netlink.Header{
10421042
Type: nftMsgGetSetElem.HeaderType(),
1043-
Flags: netlink.Request | netlink.Acknowledge | netlink.Dump,
1043+
Flags: netlink.Request | netlink.Dump,
10441044
},
10451045
Data: append(extraHeader(uint8(s.Table.Family), 0), data...),
10461046
}

table.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func (cc *Conn) delTable(t *Table, hdrType netlink.HeaderType) {
102102
cc.messages = append(cc.messages, netlinkMessage{
103103
Header: netlink.Header{
104104
Type: hdrType,
105-
Flags: netlink.Request | netlink.Acknowledge,
105+
Flags: netlink.Request,
106106
},
107107
Data: append(extraHeader(uint8(t.Family), 0), data...),
108108
})
@@ -129,7 +129,7 @@ func (cc *Conn) addTable(t *Table, flag netlink.HeaderFlags) *Table {
129129
cc.messages = append(cc.messages, netlinkMessage{
130130
Header: netlink.Header{
131131
Type: nftMsgNewTable.HeaderType(),
132-
Flags: netlink.Request | netlink.Acknowledge | flag,
132+
Flags: netlink.Request | flag,
133133
},
134134
Data: append(extraHeader(uint8(t.Family), 0), data...),
135135
})
@@ -159,7 +159,7 @@ func (cc *Conn) FlushTable(t *Table) {
159159
cc.messages = append(cc.messages, netlinkMessage{
160160
Header: netlink.Header{
161161
Type: nftMsgDelRule.HeaderType(),
162-
Flags: netlink.Request | netlink.Acknowledge,
162+
Flags: netlink.Request,
163163
},
164164
Data: append(extraHeader(uint8(t.Family), 0), data...),
165165
})

0 commit comments

Comments
 (0)