diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..ec29afb3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/.idea/ +.DS_Store diff --git a/alignedbuff/alignedbuff.go b/alignedbuff/alignedbuff.go index a9721464..6b854339 100644 --- a/alignedbuff/alignedbuff.go +++ b/alignedbuff/alignedbuff.go @@ -19,7 +19,7 @@ import ( "fmt" "unsafe" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" ) // ErrEOF signals trying to read beyond the available payload information. @@ -289,10 +289,12 @@ func (a *AlignedBuff) alignWrite(m int) { } // This is ... ugly. -var uint16AlignMask = int(unsafe.Alignof(uint16(0)) - 1) -var uint32AlignMask = int(unsafe.Alignof(uint32(0)) - 1) -var uint64AlignMask = int(unsafe.Alignof(uint64(0)) - 1) -var padding = bytes.Repeat([]byte{0}, uint64AlignMask) +var ( + uint16AlignMask = int(unsafe.Alignof(uint16(0)) - 1) + uint32AlignMask = int(unsafe.Alignof(uint32(0)) - 1) + uint64AlignMask = int(unsafe.Alignof(uint64(0)) - 1) + padding = bytes.Repeat([]byte{0}, uint64AlignMask) +) var int32AlignMask = int(unsafe.Alignof(int32(0)) - 1) diff --git a/chain.go b/chain.go index 4f4c0a53..def92b94 100644 --- a/chain.go +++ b/chain.go @@ -19,7 +19,7 @@ import ( "fmt" "math" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/compat_policy.go b/compat_policy.go index c1f39085..3587f051 100644 --- a/compat_policy.go +++ b/compat_policy.go @@ -3,12 +3,14 @@ package nftables import ( "fmt" - "github.com/google/nftables/expr" + "github.com/sagernet/nftables/expr" "golang.org/x/sys/unix" ) -const nft_RULE_COMPAT_F_INV uint32 = (1 << 1) -const nft_RULE_COMPAT_F_MASK uint32 = nft_RULE_COMPAT_F_INV +const ( + nft_RULE_COMPAT_F_INV uint32 = (1 << 1) + nft_RULE_COMPAT_F_MASK uint32 = nft_RULE_COMPAT_F_INV +) // Used by xt match or target like xt_tcpudp to set compat policy between xtables and nftables // https://elixir.bootlin.com/linux/v5.12/source/net/netfilter/nft_compat.c#L187 diff --git a/compat_policy_test.go b/compat_policy_test.go index 7565de06..de41928f 100644 --- a/compat_policy_test.go +++ b/compat_policy_test.go @@ -3,8 +3,8 @@ package nftables import ( "testing" - "github.com/google/nftables/expr" - "github.com/google/nftables/xt" + "github.com/sagernet/nftables/expr" + "github.com/sagernet/nftables/xt" "golang.org/x/sys/unix" ) diff --git a/conn.go b/conn.go index a9fbf2b9..4aaf7e1d 100644 --- a/conn.go +++ b/conn.go @@ -20,10 +20,11 @@ import ( "os" "sync" - "github.com/google/nftables/binaryutil" - "github.com/google/nftables/expr" + "github.com/sagernet/nftables/binaryutil" + "github.com/sagernet/nftables/expr" "github.com/mdlayher/netlink" "github.com/mdlayher/netlink/nltest" + E "github.com/sagernet/sing/common/exceptions" "golang.org/x/sys/unix" ) @@ -258,7 +259,7 @@ func (cc *Conn) Flush() error { // Kernel will only send one permission error to user space. return err } - errs = errors.Join(errs, err) + errs = E.Errors(errs, err) } } diff --git a/counter.go b/counter.go index 25d37d8e..c02231ae 100644 --- a/counter.go +++ b/counter.go @@ -15,7 +15,7 @@ package nftables import ( - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/bitwise.go b/expr/bitwise.go index 62f7f9ba..084263c6 100644 --- a/expr/bitwise.go +++ b/expr/bitwise.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/bitwise_test.go b/expr/bitwise_test.go index 35fc3b3f..73b13dc7 100644 --- a/expr/bitwise_test.go +++ b/expr/bitwise_test.go @@ -35,7 +35,6 @@ func TestBitwise(t *testing.T) { data, err := tt.bw.marshal(0 /* don't care in this test */) if err != nil { t.Fatalf("marshal error: %+v", err) - } ad, err := netlink.NewAttributeDecoder(data) if err != nil { diff --git a/expr/byteorder.go b/expr/byteorder.go index 2450e8f8..8451b387 100644 --- a/expr/byteorder.go +++ b/expr/byteorder.go @@ -17,7 +17,7 @@ package expr import ( "fmt" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/connlimit.go b/expr/connlimit.go index b712967a..d8fd5d73 100644 --- a/expr/connlimit.go +++ b/expr/connlimit.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/counter.go b/expr/counter.go index dd6eab3f..e5d9e4f5 100644 --- a/expr/counter.go +++ b/expr/counter.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/ct.go b/expr/ct.go index 1a0ee68b..4d6aec61 100644 --- a/expr/ct.go +++ b/expr/ct.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/dup.go b/expr/dup.go index 0114fa79..7bf130d9 100644 --- a/expr/dup.go +++ b/expr/dup.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) @@ -38,7 +38,6 @@ func (e *Dup) marshal(fam byte) ([]byte, error) { } data, err := netlink.MarshalAttributes(attrs) - if err != nil { return nil, err } diff --git a/expr/dynset.go b/expr/dynset.go index e44f7727..8f2aae27 100644 --- a/expr/dynset.go +++ b/expr/dynset.go @@ -18,8 +18,8 @@ import ( "encoding/binary" "time" - "github.com/google/nftables/binaryutil" - "github.com/google/nftables/internal/parseexprfunc" + "github.com/sagernet/nftables/binaryutil" + "github.com/sagernet/nftables/internal/parseexprfunc" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/expr.go b/expr/expr.go index a4d970f0..49ce1a8f 100644 --- a/expr/expr.go +++ b/expr/expr.go @@ -18,8 +18,8 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" - "github.com/google/nftables/internal/parseexprfunc" + "github.com/sagernet/nftables/binaryutil" + "github.com/sagernet/nftables/internal/parseexprfunc" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) @@ -305,7 +305,8 @@ func (e *Masq) marshal(fam byte) ([]byte, error) { } if flags != 0 { flagsData, err := netlink.MarshalAttributes([]netlink.Attribute{ - {Type: unix.NFTA_MASQ_FLAGS, Data: binaryutil.BigEndian.PutUint32(flags)}}) + {Type: unix.NFTA_MASQ_FLAGS, Data: binaryutil.BigEndian.PutUint32(flags)}, + }) if err != nil { return nil, err } @@ -313,14 +314,16 @@ func (e *Masq) marshal(fam byte) ([]byte, error) { } } else { regsData, err := netlink.MarshalAttributes([]netlink.Attribute{ - {Type: unix.NFTA_MASQ_REG_PROTO_MIN, Data: binaryutil.BigEndian.PutUint32(e.RegProtoMin)}}) + {Type: unix.NFTA_MASQ_REG_PROTO_MIN, Data: binaryutil.BigEndian.PutUint32(e.RegProtoMin)}, + }) if err != nil { return nil, err } msgData = append(msgData, regsData...) if e.RegProtoMax != 0 { regsData, err := netlink.MarshalAttributes([]netlink.Attribute{ - {Type: unix.NFTA_MASQ_REG_PROTO_MAX, Data: binaryutil.BigEndian.PutUint32(e.RegProtoMax)}}) + {Type: unix.NFTA_MASQ_REG_PROTO_MAX, Data: binaryutil.BigEndian.PutUint32(e.RegProtoMax)}, + }) if err != nil { return nil, err } diff --git a/expr/exthdr.go b/expr/exthdr.go index df0c7db0..a56ee14a 100644 --- a/expr/exthdr.go +++ b/expr/exthdr.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) @@ -46,10 +46,12 @@ func (e *Exthdr) marshal(fam byte) ([]byte, error) { // or DestRegister is set. Mixing them results in EOPNOTSUPP. if e.SourceRegister != 0 { attr = []netlink.Attribute{ - {Type: unix.NFTA_EXTHDR_SREG, Data: binaryutil.BigEndian.PutUint32(e.SourceRegister)}} + {Type: unix.NFTA_EXTHDR_SREG, Data: binaryutil.BigEndian.PutUint32(e.SourceRegister)}, + } } else { attr = []netlink.Attribute{ - {Type: unix.NFTA_EXTHDR_DREG, Data: binaryutil.BigEndian.PutUint32(e.DestRegister)}} + {Type: unix.NFTA_EXTHDR_DREG, Data: binaryutil.BigEndian.PutUint32(e.DestRegister)}, + } } attr = append(attr, diff --git a/expr/exthdr_test.go b/expr/exthdr_test.go index b2118181..39ffe9ef 100644 --- a/expr/exthdr_test.go +++ b/expr/exthdr_test.go @@ -47,7 +47,6 @@ func TestExthdr(t *testing.T) { data, err := tt.eh.marshal(0 /* don't care in this test */) if err != nil { t.Fatalf("marshal error: %+v", err) - } ad, err := netlink.NewAttributeDecoder(data) if err != nil { diff --git a/expr/fib.go b/expr/fib.go index f7ee7043..5716257e 100644 --- a/expr/fib.go +++ b/expr/fib.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/hash.go b/expr/hash.go index e8506b93..12ed3701 100644 --- a/expr/hash.go +++ b/expr/hash.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/immediate.go b/expr/immediate.go index 99531f86..491bfa29 100644 --- a/expr/immediate.go +++ b/expr/immediate.go @@ -18,7 +18,7 @@ import ( "encoding/binary" "fmt" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/limit.go b/expr/limit.go index 9ecb41f0..6def56f4 100644 --- a/expr/limit.go +++ b/expr/limit.go @@ -19,7 +19,7 @@ import ( "errors" "fmt" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/log.go b/expr/log.go index a712b990..31aa582a 100644 --- a/expr/log.go +++ b/expr/log.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/lookup.go b/expr/lookup.go index e6593ac8..d20fd675 100644 --- a/expr/lookup.go +++ b/expr/lookup.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/match.go b/expr/match.go index 123c6f9c..2ced5465 100644 --- a/expr/match.go +++ b/expr/match.go @@ -4,8 +4,8 @@ import ( "bytes" "encoding/binary" - "github.com/google/nftables/binaryutil" - "github.com/google/nftables/xt" + "github.com/sagernet/nftables/binaryutil" + "github.com/sagernet/nftables/xt" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/match_test.go b/expr/match_test.go index 0923c9f4..df3b5569 100644 --- a/expr/match_test.go +++ b/expr/match_test.go @@ -5,7 +5,7 @@ import ( "reflect" "testing" - "github.com/google/nftables/xt" + "github.com/sagernet/nftables/xt" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) @@ -33,7 +33,6 @@ func TestMatch(t *testing.T) { data, err := tt.mtch.marshal(0 /* don't care in this test */) if err != nil { t.Fatalf("marshal error: %+v", err) - } ad, err := netlink.NewAttributeDecoder(data) if err != nil { diff --git a/expr/meta_test.go b/expr/meta_test.go index b309f9fc..61f161be 100644 --- a/expr/meta_test.go +++ b/expr/meta_test.go @@ -39,7 +39,6 @@ func TestMeta(t *testing.T) { data, err := tt.meta.marshal(0 /* don't care in this test */) if err != nil { t.Fatalf("marshal error: %+v", err) - } ad, err := netlink.NewAttributeDecoder(data) if err != nil { diff --git a/expr/nat.go b/expr/nat.go index 4e7df474..300ed9ed 100644 --- a/expr/nat.go +++ b/expr/nat.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/notrack.go b/expr/notrack.go index cb665d36..19f17d44 100644 --- a/expr/notrack.go +++ b/expr/notrack.go @@ -29,7 +29,6 @@ func (e *Notrack) marshal(fam byte) ([]byte, error) { func (e *Notrack) unmarshal(fam byte, data []byte) error { ad, err := netlink.NewAttributeDecoder(data) - if err != nil { return err } diff --git a/expr/numgen.go b/expr/numgen.go index bcbb1bbe..5e3b58df 100644 --- a/expr/numgen.go +++ b/expr/numgen.go @@ -18,7 +18,7 @@ import ( "encoding/binary" "fmt" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/objref.go b/expr/objref.go index ae9521b9..331c2f0e 100644 --- a/expr/objref.go +++ b/expr/objref.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/payload.go b/expr/payload.go index 7f698095..abad4497 100644 --- a/expr/payload.go +++ b/expr/payload.go @@ -17,14 +17,16 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) -type PayloadBase uint32 -type PayloadCsumType uint32 -type PayloadOperationType uint32 +type ( + PayloadBase uint32 + PayloadCsumType uint32 + PayloadOperationType uint32 +) // Possible PayloadBase values. const ( @@ -58,7 +60,6 @@ type Payload struct { } func (e *Payload) marshal(fam byte) ([]byte, error) { - var attrs []netlink.Attribute if e.OperationType == PayloadWrite { @@ -90,7 +91,6 @@ func (e *Payload) marshal(fam byte) ([]byte, error) { } data, err := netlink.MarshalAttributes(attrs) - if err != nil { return nil, err } diff --git a/expr/queue.go b/expr/queue.go index 9abb6bf8..37f0d80c 100644 --- a/expr/queue.go +++ b/expr/queue.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/quota.go b/expr/quota.go index f8bc0f30..0e5911e0 100644 --- a/expr/quota.go +++ b/expr/quota.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/range.go b/expr/range.go index 8a1f6ea1..e437044c 100644 --- a/expr/range.go +++ b/expr/range.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/redirect.go b/expr/redirect.go index 1c6f6221..8c6664df 100644 --- a/expr/redirect.go +++ b/expr/redirect.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/reject.go b/expr/reject.go index a7426261..a1c9e216 100644 --- a/expr/reject.go +++ b/expr/reject.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/rt.go b/expr/rt.go index c3be7ffc..fea2ef23 100644 --- a/expr/rt.go +++ b/expr/rt.go @@ -17,7 +17,7 @@ package expr import ( "fmt" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/socket.go b/expr/socket.go index 1b6bc24a..62a38918 100644 --- a/expr/socket.go +++ b/expr/socket.go @@ -17,10 +17,9 @@ package expr import ( "encoding/binary" - "golang.org/x/sys/unix" - - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" + "golang.org/x/sys/unix" ) type Socket struct { diff --git a/expr/socket_test.go b/expr/socket_test.go index 25eddb20..99b71aa8 100644 --- a/expr/socket_test.go +++ b/expr/socket_test.go @@ -77,7 +77,6 @@ func TestSocket(t *testing.T) { data, err := tt.socket.marshal(0 /* don't care in this test */) if err != nil { t.Fatalf("marshal error: %+v", err) - } ad, err := netlink.NewAttributeDecoder(data) if err != nil { diff --git a/expr/target.go b/expr/target.go index e531a9f7..7777dc08 100644 --- a/expr/target.go +++ b/expr/target.go @@ -4,8 +4,8 @@ import ( "bytes" "encoding/binary" - "github.com/google/nftables/binaryutil" - "github.com/google/nftables/xt" + "github.com/sagernet/nftables/binaryutil" + "github.com/sagernet/nftables/xt" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/target_test.go b/expr/target_test.go index e630e86b..5939f7ab 100644 --- a/expr/target_test.go +++ b/expr/target_test.go @@ -5,7 +5,7 @@ import ( "reflect" "testing" - "github.com/google/nftables/xt" + "github.com/sagernet/nftables/xt" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) @@ -33,7 +33,6 @@ func TestTarget(t *testing.T) { data, err := tt.tgt.marshal(0 /* don't care in this test */) if err != nil { t.Fatalf("marshal error: %+v", err) - } ad, err := netlink.NewAttributeDecoder(data) if err != nil { diff --git a/expr/tproxy.go b/expr/tproxy.go index 2846aab7..c60ffa99 100644 --- a/expr/tproxy.go +++ b/expr/tproxy.go @@ -17,7 +17,7 @@ package expr import ( "encoding/binary" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/expr/verdict.go b/expr/verdict.go index 421fa066..1b7abbee 100644 --- a/expr/verdict.go +++ b/expr/verdict.go @@ -19,7 +19,7 @@ import ( "encoding/binary" "fmt" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) diff --git a/flowtable.go b/flowtable.go index 01df08eb..add6d138 100644 --- a/flowtable.go +++ b/flowtable.go @@ -18,7 +18,7 @@ import ( "encoding/binary" "fmt" - "github.com/google/nftables/binaryutil" + "github.com/sagernet/nftables/binaryutil" "github.com/mdlayher/netlink" "golang.org/x/sys/unix" ) @@ -74,11 +74,9 @@ func FlowtableHookRef(h FlowtableHook) *FlowtableHook { return &h } -var ( - // Only ingress is supported - // https://github.com/torvalds/linux/blob/b72018ab8236c3ae427068adeb94bdd3f20454ec/net/netfilter/nf_tables_api.c#L7378-L7379 - FlowtableHookIngress *FlowtableHook = FlowtableHookRef(unix.NF_NETDEV_INGRESS) -) +// Only ingress is supported +// https://github.com/torvalds/linux/blob/b72018ab8236c3ae427068adeb94bdd3f20454ec/net/netfilter/nf_tables_api.c#L7378-L7379 +var FlowtableHookIngress *FlowtableHook = FlowtableHookRef(unix.NF_NETDEV_INGRESS) type FlowtablePriority int32 @@ -86,12 +84,10 @@ func FlowtablePriorityRef(p FlowtablePriority) *FlowtablePriority { return &p } -var ( - // As per man page: - // The priority can be a signed integer or filter which stands for 0. Addition and subtraction can be used to set relative priority, e.g. filter + 5 equals to 5. - // https://git.netfilter.org/nftables/tree/doc/nft.txt?id=8c600a843b7c0c1cc275ecc0603bd1fc57773e98#n712 - FlowtablePriorityFilter *FlowtablePriority = FlowtablePriorityRef(0) -) +// As per man page: +// The priority can be a signed integer or filter which stands for 0. Addition and subtraction can be used to set relative priority, e.g. filter + 5 equals to 5. +// https://git.netfilter.org/nftables/tree/doc/nft.txt?id=8c600a843b7c0c1cc275ecc0603bd1fc57773e98#n712 +var FlowtablePriorityFilter *FlowtablePriority = FlowtablePriorityRef(0) type Flowtable struct { Table *Table diff --git a/go.mod b/go.mod index f8bfc3d6..9efa32e0 100644 --- a/go.mod +++ b/go.mod @@ -1,17 +1,18 @@ -module github.com/google/nftables +module github.com/sagernet/nftables -go 1.21 +go 1.18 require ( github.com/mdlayher/netlink v1.7.2 - github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc - golang.org/x/sys v0.18.0 + github.com/sagernet/sing v0.4.0 + github.com/vishvananda/netns v0.0.4 + golang.org/x/sys v0.20.0 ) require ( - github.com/google/go-cmp v0.6.0 // indirect + github.com/google/go-cmp v0.5.9 // indirect github.com/josharian/native v1.1.0 // indirect - github.com/mdlayher/socket v0.5.0 // indirect + github.com/mdlayher/socket v0.4.1 // indirect golang.org/x/net v0.23.0 // indirect - golang.org/x/sync v0.6.0 // indirect + golang.org/x/sync v0.1.0 // indirect ) diff --git a/go.sum b/go.sum index 4e780ad8..9e17129f 100644 --- a/go.sum +++ b/go.sum @@ -1,16 +1,18 @@ -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/josharian/native v1.1.0 h1:uuaP0hAbW7Y4l0ZRQ6C9zfb7Mg1mbFKry/xzDAfmtLA= github.com/josharian/native v1.1.0/go.mod h1:7X/raswPFr05uY3HiLlYeyQntB6OO7E/d2Cu7qoaN2w= github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/g= github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw= -github.com/mdlayher/socket v0.5.0 h1:ilICZmJcQz70vrWVes1MFera4jGiWNocSkykwwoy3XI= -github.com/mdlayher/socket v0.5.0/go.mod h1:WkcBFfvyG8QENs5+hfQPl1X6Jpd2yeLIYgrGFmJiJxI= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc h1:R83G5ikgLMxrBvLh22JhdfI8K6YXEPHx5P03Uu3DRs4= -github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U= +github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA= +github.com/sagernet/sing v0.4.0 h1:sCLSqLHOptgFvzQO9FfaYMl4PONePZkclMznpeKhdHc= +github.com/sagernet/sing v0.4.0/go.mod h1:Xh4KO9nGdvm4K/LVg9Xn9jSxJdqe9KcXbAzNC1S2qfw= +github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8= +github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/internal/nftest/nftest.go b/internal/nftest/nftest.go index 2709fa78..8da43309 100644 --- a/internal/nftest/nftest.go +++ b/internal/nftest/nftest.go @@ -7,7 +7,7 @@ import ( "strings" "testing" - "github.com/google/nftables" + "github.com/sagernet/nftables" "github.com/mdlayher/netlink" ) diff --git a/internal/nftest/system_conn.go b/internal/nftest/system_conn.go index 55e85fe0..7358bc92 100644 --- a/internal/nftest/system_conn.go +++ b/internal/nftest/system_conn.go @@ -4,7 +4,7 @@ import ( "runtime" "testing" - "github.com/google/nftables" + "github.com/sagernet/nftables" "github.com/vishvananda/netns" ) diff --git a/module_rename.py b/module_rename.py new file mode 100644 index 00000000..e089d53e --- /dev/null +++ b/module_rename.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +import os +import argparse +import fileinput + + +PKG_ORIGINAL = "github.com/google/nftables" +PKG_NEW = "github.com/sagernet/nftables" + +EXTENSIONS = [".go", ".mod"] + +parser = argparse.ArgumentParser() +parser.add_argument("-r", "--reverse", action="store_true") +args = parser.parse_args() + + +def replace_line(line): + if args.reverse: + return line.replace(PKG_NEW, PKG_ORIGINAL) + return line.replace(PKG_ORIGINAL, PKG_NEW) + + +for dirpath, dirnames, filenames in os.walk("."): + # Skip hidden directories like .git + dirnames[:] = [d for d in dirnames if not d[0] == "."] + filenames = [f for f in filenames if os.path.splitext(f)[1] in EXTENSIONS] + for filename in filenames: + file_path = os.path.join(dirpath, filename) + with fileinput.FileInput(file_path, inplace=True) as file: + for line in file: + print(replace_line(line), end="") diff --git a/monitor.go b/monitor.go index 853d5fd8..23a9eb2a 100644 --- a/monitor.go +++ b/monitor.go @@ -47,49 +47,47 @@ const ( MonitorObjectAny MonitorObject = MonitorObjectMask ) -var ( - monitorFlags = map[MonitorAction]map[MonitorObject]uint32{ - MonitorActionAny: { - MonitorObjectAny: 0xffffffff, - MonitorObjectTables: 1<