Comments (6)
I gave this a shot, but hit an issue: https://godoc.org/github.com/mdlayher/netlink#AttributeDecoder.Uint32 seems to decode an uint32 using the host’s endianness: https://github.com/mdlayher/netlink/blob/3d8cc9af89458b8b6a9ce675d4dfa50a724e9025/nlenc/int.go#L78
For nftables, however, values are stored in big endian most of the time, only the resource id in the extraHeader field is stored in native endian.
A specific place where this causes issues is:
Line 519 in 121db0b
With the current code, objectType will be set to 1, but when using ad.Uint32()
, it gets set to 16777216.
from nftables.
Interesting! Every netlink family I've worked with has used native endianness for attributes so far. I suppose it wouldn't hurt for me to add an option to set the endianness on the decoder!
That said, if nftables uses different endianness in the same attribute lists a lot, this could be a hassle. As a workaround, you could use Do to add special decoding logic for big endian fields.
from nftables.
From what I can tell, it’s all big endian for nftables.
Let me know what decision you end up with, and I can give this another shot.
from nftables.
I've added a new tunable as of mdlayher/netlink@ff3050a: https://godoc.org/github.com/mdlayher/netlink#AttributeDecoder.
I considered adding it to the constructor as well, but figured it'd be cleaner to allow overriding the default after construction. Let me know what you think.
from nftables.
Yeah, this worked. Are you planning to add an AttributeEncoder, too? :)
from nftables.
Yeah; starting to think about that problem as well due to the situations I've gotten myself into with: https://github.com/mdlayher/wireguardctrl/blob/master/internal/wgnl/configure_linux.go and its tests. I imagine I'll do something reasonably similar.
from nftables.
Related Issues (20)
- Test failures on s390x: endianness problems? HOT 11
- Reason for not wrapping libnftnl/libmnl. HOT 1
- GetRules lost expr.Masq HOT 1
- nftables go dynset implementation will not work with libnftnl versions <1.1.9 HOT 1
- High
- Feature: add support for monitor HOT 6
- AddSet IPv4 wrong byte order on Ubuntu 22.04 HOT 8
- Rule Handle not updated after InsertRule even using Flush. HOT 4
- Not all response messages are received causing the receive buffer to overflow HOT 8
- Named quotas and their usage in map HOT 1
- BUG: block in Conn.Flush() HOT 4
- How to get an error when try to add an existed table?
- Adding rules in code produces different results and logs than the rules I added directly from the command line HOT 6
- Use a CIDR prefix as target in a NAT rule HOT 3
- Troubleshooting NFTables Table Creation with Go HOT 2
- Objects implementation refactor HOT 1
- Broken deps HOT 3
- Is there a way to mock interface? HOT 3
- [FR] Simplified Method for Determining if IP+Port is Whitelisted or Blacklisted HOT 6
- cgroupv2 nft rule HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from nftables.