Compare commits

..

2 Commits

Author SHA1 Message Date
Asutorufa 18c7e3c285
Merge 6695ecd089 into 7a6c4ef3e7 2024-08-30 09:42:42 +00:00
Asutorufa 6695ecd089 set: add set support auto-merge
Signed-off-by: Asutorufa <16442314+Asutorufa@users.noreply.github.com>
2024-08-30 17:39:35 +08:00
2 changed files with 4 additions and 19 deletions

8
set.go
View File

@ -587,15 +587,15 @@ func (cc *Conn) AddSet(s *Set, vals []SetElement) error {
if s.Anonymous || s.Constant || s.Interval || s.KeyByteOrder == binaryutil.BigEndian { if s.Anonymous || s.Constant || s.Interval || s.KeyByteOrder == binaryutil.BigEndian {
// Semantically useless - kept for binary compatability with nft // Semantically useless - kept for binary compatability with nft
userData = userdata.AppendUint32(userData, userdata.NFTNL_UDATA_SET_KEYBYTEORDER, 2) userData = userdata.AppendUint32(userData, 0, 2)
} else if s.KeyByteOrder == binaryutil.NativeEndian { } else if s.KeyByteOrder == binaryutil.NativeEndian {
// Per https://git.netfilter.org/nftables/tree/src/mnl.c?id=187c6d01d35722618c2711bbc49262c286472c8f#n1165 // Per https://git.netfilter.org/nftables/tree/src/mnl.c?id=187c6d01d35722618c2711bbc49262c286472c8f#n1165
userData = userdata.AppendUint32(userData, userdata.NFTNL_UDATA_SET_KEYBYTEORDER, 1) userData = userdata.AppendUint32(userData, 0, 1)
} }
if s.Interval && s.AutoMerge { if s.Interval && s.AutoMerge {
// https://git.netfilter.org/nftables/tree/src/mnl.c?id=187c6d01d35722618c2711bbc49262c286472c8f#n1174 // https://git.netfilter.org/nftables/tree/src/mnl.c?id=187c6d01d35722618c2711bbc49262c286472c8f#n1174
userData = userdata.AppendUint32(userData, userdata.NFTNL_UDATA_SET_MERGE_ELEMENTS, 1) userData = userdata.AppendUint32(userData, 2, 1)
} }
if len(userData) > 0 { if len(userData) > 0 {
@ -755,7 +755,7 @@ func setsFromMsg(msg netlink.Message) (*Set, error) {
set.DataType.Bytes = binary.BigEndian.Uint32(ad.Bytes()) set.DataType.Bytes = binary.BigEndian.Uint32(ad.Bytes())
case unix.NFTA_SET_USERDATA: case unix.NFTA_SET_USERDATA:
data := ad.Bytes() data := ad.Bytes()
value, ok := userdata.GetUint32(data, userdata.NFTNL_UDATA_SET_MERGE_ELEMENTS) value, ok := userdata.GetUint32(data, 2)
set.AutoMerge = ok && value == 1 set.AutoMerge = ok && value == 1
} }
} }

View File

@ -31,21 +31,6 @@ const (
TypesCount TypesCount
) )
// TLV type values are defined in:
// https://git.netfilter.org/libnftnl/tree/include/libnftnl/udata.h#n39
const (
NFTNL_UDATA_SET_KEYBYTEORDER Type = iota
NFTNL_UDATA_SET_DATABYTEORDER
NFTNL_UDATA_SET_MERGE_ELEMENTS
NFTNL_UDATA_SET_KEY_TYPEOF
NFTNL_UDATA_SET_DATA_TYPEOF
NFTNL_UDATA_SET_EXPR
NFTNL_UDATA_SET_DATA_INTERVAL
NFTNL_UDATA_SET_COMMENT
NFTNL_UDATA_SET_MAX
)
func Append(udata []byte, typ Type, data []byte) []byte { func Append(udata []byte, typ Type, data []byte) []byte {
udata = append(udata, byte(typ), byte(len(data))) udata = append(udata, byte(typ), byte(len(data)))
udata = append(udata, data...) udata = append(udata, data...)