Compare commits

...

2 Commits

Author SHA1 Message Date
Rafael Campos 8f2d395e10 set: Parse bytes length on sets
Parse the bytes length for key and data types when reading the sets.

Signed-off-by: Rafael Campos <methril@gmail.com>
2023-06-14 20:10:15 +02:00
Rafael Campos 98de8c8ac9 expr: Add Hash to the expr type
Add the Hash type to the expr read parser.

Signed-off-by: Rafael Campos <methril@gmail.com>
2023-06-14 20:10:15 +02:00
2 changed files with 6 additions and 0 deletions

View File

@ -134,6 +134,8 @@ func exprsFromBytes(fam byte, ad *netlink.AttributeDecoder, b []byte) ([]Any, er
e = &Reject{} e = &Reject{}
case "masq": case "masq":
e = &Masq{} e = &Masq{}
case "hash":
e = &Hash{}
} }
if e == nil { if e == nil {
// TODO: introduce an opaque expression type so that users know // TODO: introduce an opaque expression type so that users know

4
set.go
View File

@ -719,6 +719,8 @@ func setsFromMsg(msg netlink.Message) (*Set, error) {
return nil, fmt.Errorf("could not determine data type: %w", err) return nil, fmt.Errorf("could not determine data type: %w", err)
} }
set.KeyType = dt set.KeyType = dt
case unix.NFTA_SET_KEY_LEN:
set.KeyType.Bytes = binary.BigEndian.Uint32(ad.Bytes())
case unix.NFTA_SET_DATA_TYPE: case unix.NFTA_SET_DATA_TYPE:
nftMagic := ad.Uint32() nftMagic := ad.Uint32()
// Special case for the data type verdict, in the message it is stored as 0xffffff00 but it is defined as 1 // Special case for the data type verdict, in the message it is stored as 0xffffff00 but it is defined as 1
@ -731,6 +733,8 @@ func setsFromMsg(msg netlink.Message) (*Set, error) {
return nil, fmt.Errorf("could not determine data type: %w", err) return nil, fmt.Errorf("could not determine data type: %w", err)
} }
set.DataType = dt set.DataType = dt
case unix.NFTA_SET_DATA_LEN:
set.DataType.Bytes = binary.BigEndian.Uint32(ad.Bytes())
} }
} }
return &set, nil return &set, nil