Skip to content

Lookup support in a set ? #315

@sontumzmdr

Description

@sontumzmdr

Nftable cmd supports lookup of elements within a set given the inputs, it supports CIDR, range.

root [ /home/user ]# nft get element inet filter_table SET_IP6_netRuleCollection_Allow_0 { tcp . 10:0:1::10 . 11:0:1::10 . 8003}
table inet filter_table {
set SET_IP6_netRuleCollection_Allow_0 {
type inet_proto . ipv6_addr . ipv6_addr . inet_service
flags interval
elements = { tcp . 10:0:1::10 . ::/0 . 8003 }
}
}
root [ /home/user ]#

Does this nftable go package support this?
I see below code for GetSetElements but in the Data field it is passed as empty, so I guess currently it will list all the elements.
Is there a plan to support it in future? I would assume it will be trivial to add lookup element in the Data field?

func (cc *Conn) GetSetElements(s *Set) ([]SetElement, error) {
conn, closer, err := cc.netlinkConn()
if err != nil {
return nil, err
}
defer func() { _ = closer() }()

data, err := netlink.MarshalAttributes([]netlink.Attribute{
	{Type: unix.NFTA_SET_TABLE, Data: []byte(s.Table.Name + "\x00")},
	{Type: unix.NFTA_SET_NAME, Data: []byte(s.Name + "\x00")},
})
if err != nil {
	return nil, err
}

message := netlink.Message{
	Header: netlink.Header{
		Type:  netlink.HeaderType((unix.NFNL_SUBSYS_NFTABLES << 8) | unix.NFT_MSG_GETSETELEM),
		Flags: netlink.Request | netlink.Acknowledge | netlink.Dump,
	},
	Data: append(extraHeader(uint8(s.Table.Family), 0), data...),
}`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions