Compare commits
2 Commits
bcdc59be28
...
a3e5deaf10
Author | SHA1 | Date |
---|---|---|
|
a3e5deaf10 | |
|
eab2afa848 |
20
counter.go
20
counter.go
|
@ -15,6 +15,7 @@
|
||||||
package nftables
|
package nftables
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/google/nftables/binaryutil"
|
||||||
"github.com/google/nftables/expr"
|
"github.com/google/nftables/expr"
|
||||||
"github.com/mdlayher/netlink"
|
"github.com/mdlayher/netlink"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
@ -61,3 +62,22 @@ func (c *CounterObj) table() *Table {
|
||||||
func (c *CounterObj) family() TableFamily {
|
func (c *CounterObj) family() TableFamily {
|
||||||
return c.Table.Family
|
return c.Table.Family
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *CounterObj) marshal(data bool) ([]byte, error) {
|
||||||
|
obj, err := netlink.MarshalAttributes([]netlink.Attribute{
|
||||||
|
{Type: unix.NFTA_COUNTER_BYTES, Data: binaryutil.BigEndian.PutUint64(c.Bytes)},
|
||||||
|
{Type: unix.NFTA_COUNTER_PACKETS, Data: binaryutil.BigEndian.PutUint64(c.Packets)},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
attrs := []netlink.Attribute{
|
||||||
|
{Type: unix.NFTA_OBJ_TABLE, Data: []byte(c.Table.Name + "\x00")},
|
||||||
|
{Type: unix.NFTA_OBJ_NAME, Data: []byte(c.Name + "\x00")},
|
||||||
|
{Type: unix.NFTA_OBJ_TYPE, Data: binaryutil.BigEndian.PutUint32(unix.NFT_OBJECT_COUNTER)},
|
||||||
|
}
|
||||||
|
if data {
|
||||||
|
attrs = append(attrs, netlink.Attribute{Type: unix.NLA_F_NESTED | unix.NFTA_OBJ_DATA, Data: obj})
|
||||||
|
}
|
||||||
|
return netlink.MarshalAttributes(attrs)
|
||||||
|
}
|
||||||
|
|
25
quota.go
25
quota.go
|
@ -15,6 +15,7 @@
|
||||||
package nftables
|
package nftables
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/google/nftables/binaryutil"
|
||||||
"github.com/google/nftables/expr"
|
"github.com/google/nftables/expr"
|
||||||
"github.com/mdlayher/netlink"
|
"github.com/mdlayher/netlink"
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
@ -42,6 +43,30 @@ func (q *QuotaObj) unmarshal(ad *netlink.AttributeDecoder) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (q *QuotaObj) marshal(data bool) ([]byte, error) {
|
||||||
|
flags := uint32(0)
|
||||||
|
if q.Over {
|
||||||
|
flags = unix.NFT_QUOTA_F_INV
|
||||||
|
}
|
||||||
|
obj, err := netlink.MarshalAttributes([]netlink.Attribute{
|
||||||
|
{Type: unix.NFTA_QUOTA_BYTES, Data: binaryutil.BigEndian.PutUint64(q.Bytes)},
|
||||||
|
{Type: unix.NFTA_QUOTA_CONSUMED, Data: binaryutil.BigEndian.PutUint64(q.Consumed)},
|
||||||
|
{Type: unix.NFTA_QUOTA_FLAGS, Data: binaryutil.BigEndian.PutUint32(flags)},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
attrs := []netlink.Attribute{
|
||||||
|
{Type: unix.NFTA_OBJ_TABLE, Data: []byte(q.Table.Name + "\x00")},
|
||||||
|
{Type: unix.NFTA_OBJ_NAME, Data: []byte(q.Name + "\x00")},
|
||||||
|
{Type: unix.NFTA_OBJ_TYPE, Data: binaryutil.BigEndian.PutUint32(unix.NFT_OBJECT_QUOTA)},
|
||||||
|
}
|
||||||
|
if data {
|
||||||
|
attrs = append(attrs, netlink.Attribute{Type: unix.NLA_F_NESTED | unix.NFTA_OBJ_DATA, Data: obj})
|
||||||
|
}
|
||||||
|
return netlink.MarshalAttributes(attrs)
|
||||||
|
}
|
||||||
|
|
||||||
func (q *QuotaObj) table() *Table {
|
func (q *QuotaObj) table() *Table {
|
||||||
return q.Table
|
return q.Table
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue