Skip to content

Commit d8090e2

Browse files
authored
Marshal set element counter (#339)
The counter is currently unmarshaled into the Counter field, but it is not being marshaled into binary when creating a set element. This change ensures the counter is included during marshaling.
1 parent 77c5b01 commit d8090e2

File tree

2 files changed

+59
-0
lines changed

2 files changed

+59
-0
lines changed

nftables_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8385,3 +8385,54 @@ func TestFindSetElements(t *testing.T) {
83858385
})
83868386
}
83878387
}
8388+
8389+
func TestSetElementCounter(t *testing.T) {
8390+
conn, newNS := nftest.OpenSystemConn(t, *enableSysTests)
8391+
defer nftest.CleanupSystemConn(t, newNS)
8392+
defer conn.FlushRuleset()
8393+
8394+
counter := &expr.Counter{
8395+
Bytes: 1,
8396+
Packets: 1,
8397+
}
8398+
8399+
table := conn.AddTable(&nftables.Table{
8400+
Name: "test-table",
8401+
Family: nftables.TableFamilyIPv4,
8402+
})
8403+
8404+
set := &nftables.Set{
8405+
Name: "test-set",
8406+
Table: table,
8407+
KeyType: nftables.TypeIPAddr,
8408+
}
8409+
8410+
elements := []nftables.SetElement{
8411+
{
8412+
Key: net.ParseIP("10.0.0.1").To4(),
8413+
Counter: counter,
8414+
},
8415+
}
8416+
8417+
if err := conn.AddSet(set, elements); err != nil {
8418+
t.Fatalf("failed to add set: %v", err)
8419+
}
8420+
8421+
if err := conn.Flush(); err != nil {
8422+
t.Fatalf("failed to flush: %v", err)
8423+
}
8424+
8425+
gotElements, err := conn.GetSetElements(set)
8426+
if err != nil {
8427+
t.Fatalf("failed to get set elements: %v", err)
8428+
}
8429+
8430+
if len(gotElements) != len(elements) {
8431+
t.Fatalf("got %d elements, want %d", len(gotElements), len(elements))
8432+
}
8433+
8434+
gotCounter := gotElements[0].Counter
8435+
if !reflect.DeepEqual(gotCounter, counter) {
8436+
t.Fatalf("got counter %v, want %v", gotCounter, counter)
8437+
}
8438+
}

set.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -547,6 +547,14 @@ func (cc *Conn) marshalSetElement(s *Set, e *SetElement) ([]byte, error) {
547547
item = append(item, netlink.Attribute{Type: unix.NFTA_SET_ELEM_USERDATA, Data: userData})
548548
}
549549

550+
if e.Counter != nil {
551+
counter, err := expr.Marshal(byte(s.Table.Family), e.Counter)
552+
if err != nil {
553+
return nil, err
554+
}
555+
item = append(item, netlink.Attribute{Type: unix.NFTA_SET_ELEM_EXPR | unix.NLA_F_NESTED, Data: counter})
556+
}
557+
550558
encodedItem, err := netlink.MarshalAttributes(item)
551559
if err != nil {
552560
return nil, err

0 commit comments

Comments
 (0)