Compare commits
1 Commits
b5406ff95a
...
a8e056d949
Author | SHA1 | Date |
---|---|---|
|
a8e056d949 |
47
expr/expr.go
47
expr/expr.go
|
@ -25,8 +25,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
parseExprBytesCommonFunc := func(exprsFromBytesFunc func() ([]Any, error)) ([]interface{}, error) {
|
parseexprfunc.ParseExprBytesFunc = func(fam byte, ad *netlink.AttributeDecoder, args ...string) ([]interface{}, error) {
|
||||||
exprs, err := exprsFromBytesFunc()
|
exprs, err := exprsFromBytes(fam, ad, args...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -36,18 +36,7 @@ func init() {
|
||||||
}
|
}
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
parseexprfunc.ParseExprMsgFunc = func(fam byte, b []byte, args ...string) ([]interface{}, error) {
|
||||||
parseexprfunc.ParseExprBytesFromNameFunc = func(fam byte, ad *netlink.AttributeDecoder, exprName string) ([]interface{}, error) {
|
|
||||||
return parseExprBytesCommonFunc(func() ([]Any, error) {
|
|
||||||
return exprsBytesFromName(fam, ad, exprName)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
parseexprfunc.ParseExprBytesFunc = func(fam byte, ad *netlink.AttributeDecoder) ([]interface{}, error) {
|
|
||||||
return parseExprBytesCommonFunc(func() ([]Any, error) {
|
|
||||||
return exprsFromBytes(fam, ad)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
parseexprfunc.ParseExprMsgFunc = func(fam byte, b []byte) ([]interface{}, error) {
|
|
||||||
ad, err := netlink.NewAttributeDecoder(b)
|
ad, err := netlink.NewAttributeDecoder(b)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -55,7 +44,7 @@ func init() {
|
||||||
ad.ByteOrder = binary.BigEndian
|
ad.ByteOrder = binary.BigEndian
|
||||||
var exprs []interface{}
|
var exprs []interface{}
|
||||||
for ad.Next() {
|
for ad.Next() {
|
||||||
e, err := parseexprfunc.ParseExprBytesFunc(fam, ad)
|
e, err := parseexprfunc.ParseExprBytesFunc(fam, ad, args...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return e, err
|
return e, err
|
||||||
}
|
}
|
||||||
|
@ -79,25 +68,21 @@ func Unmarshal(fam byte, data []byte, e Any) error {
|
||||||
return e.unmarshal(fam, data)
|
return e.unmarshal(fam, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
// exprsBytesFromName parses raw expressions bytes
|
|
||||||
// based on provided expr name
|
|
||||||
func exprsBytesFromName(fam byte, ad *netlink.AttributeDecoder, name string) ([]Any, error) {
|
|
||||||
var exprs []Any
|
|
||||||
e := exprFromName(name)
|
|
||||||
ad.Do(func(b []byte) error {
|
|
||||||
if err := Unmarshal(fam, b, e); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
exprs = append(exprs, e)
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
return exprs, ad.Err()
|
|
||||||
}
|
|
||||||
|
|
||||||
// exprsFromBytes parses nested raw expressions bytes
|
// exprsFromBytes parses nested raw expressions bytes
|
||||||
// to construct nftables expressions
|
// to construct nftables expressions
|
||||||
func exprsFromBytes(fam byte, ad *netlink.AttributeDecoder) ([]Any, error) {
|
func exprsFromBytes(fam byte, ad *netlink.AttributeDecoder, args ...string) ([]Any, error) {
|
||||||
var exprs []Any
|
var exprs []Any
|
||||||
|
if len(args) > 0 {
|
||||||
|
e := exprFromName(args[0])
|
||||||
|
ad.Do(func(b []byte) error {
|
||||||
|
if err := Unmarshal(fam, b, e); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
exprs = append(exprs, e)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
return exprs, ad.Err()
|
||||||
|
}
|
||||||
|
|
||||||
ad.Do(func(b []byte) error {
|
ad.Do(func(b []byte) error {
|
||||||
ad, err := netlink.NewAttributeDecoder(b)
|
ad, err := netlink.NewAttributeDecoder(b)
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
ParseExprBytesFromNameFunc func(fam byte, ad *netlink.AttributeDecoder, exprName string) ([]interface{}, error)
|
ParseExprBytesFunc func(fam byte, ad *netlink.AttributeDecoder, args ...string) ([]interface{}, error)
|
||||||
ParseExprBytesFunc func(fam byte, ad *netlink.AttributeDecoder) ([]interface{}, error)
|
ParseExprMsgFunc func(fam byte, b []byte, args ...string) ([]interface{}, error)
|
||||||
ParseExprMsgFunc func(fam byte, b []byte) ([]interface{}, error)
|
|
||||||
)
|
)
|
||||||
|
|
2
obj.go
2
obj.go
|
@ -256,7 +256,7 @@ func objFromMsg(msg netlink.Message, returnLegacyType bool) (Obj, error) {
|
||||||
Type: ObjType(objectType),
|
Type: ObjType(objectType),
|
||||||
}
|
}
|
||||||
|
|
||||||
objs, err := parseexprfunc.ParseExprBytesFromNameFunc(byte(o.family()), ad, objByObjTypeMagic[o.Type])
|
objs, err := parseexprfunc.ParseExprBytesFunc(byte(o.family()), ad, objByObjTypeMagic[o.Type])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue