unix/linux: Prefixmsg and PrefixCacheinfo structs

These structs and enumeration constants are used
to parse RTM_NEWPREFIX netlink messages.

Fixes golang/go#77662

Change-Id: I1e7a92e771701c0c790c15e58ad78cd8fe1e5cf5
Reviewed-on: https://go-review.googlesource.com/c/sys/+/746420
Reviewed-by: Mark Freeman <markfreeman@google.com>
Auto-Submit: Tobias Klauser <tobias.klauser@gmail.com>
Reviewed-by: Junyang Shao <shaojunyang@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Florian Lehner <lehner.florian86@gmail.com>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
This commit is contained in:
Skye Soss
2026-02-18 12:31:42 -08:00
committed by Gopher Robot
parent 3687fbd716
commit acef38879e
2 changed files with 238 additions and 208 deletions
+113 -104
View File
@@ -841,110 +841,115 @@ const (
// Netlink routing and interface messages // Netlink routing and interface messages
const ( const (
NDA_UNSPEC = C.NDA_UNSPEC NDA_UNSPEC = C.NDA_UNSPEC
NDA_DST = C.NDA_DST NDA_DST = C.NDA_DST
NDA_LLADDR = C.NDA_LLADDR NDA_LLADDR = C.NDA_LLADDR
NDA_CACHEINFO = C.NDA_CACHEINFO NDA_CACHEINFO = C.NDA_CACHEINFO
NDA_PROBES = C.NDA_PROBES NDA_PROBES = C.NDA_PROBES
NDA_VLAN = C.NDA_VLAN NDA_VLAN = C.NDA_VLAN
NDA_PORT = C.NDA_PORT NDA_PORT = C.NDA_PORT
NDA_VNI = C.NDA_VNI NDA_VNI = C.NDA_VNI
NDA_IFINDEX = C.NDA_IFINDEX NDA_IFINDEX = C.NDA_IFINDEX
NDA_MASTER = C.NDA_MASTER NDA_MASTER = C.NDA_MASTER
NDA_LINK_NETNSID = C.NDA_LINK_NETNSID NDA_LINK_NETNSID = C.NDA_LINK_NETNSID
NDA_SRC_VNI = C.NDA_SRC_VNI NDA_SRC_VNI = C.NDA_SRC_VNI
NTF_USE = C.NTF_USE NTF_USE = C.NTF_USE
NTF_SELF = C.NTF_SELF NTF_SELF = C.NTF_SELF
NTF_MASTER = C.NTF_MASTER NTF_MASTER = C.NTF_MASTER
NTF_PROXY = C.NTF_PROXY NTF_PROXY = C.NTF_PROXY
NTF_EXT_LEARNED = C.NTF_EXT_LEARNED NTF_EXT_LEARNED = C.NTF_EXT_LEARNED
NTF_OFFLOADED = C.NTF_OFFLOADED NTF_OFFLOADED = C.NTF_OFFLOADED
NTF_ROUTER = C.NTF_ROUTER NTF_ROUTER = C.NTF_ROUTER
NUD_INCOMPLETE = C.NUD_INCOMPLETE NUD_INCOMPLETE = C.NUD_INCOMPLETE
NUD_REACHABLE = C.NUD_REACHABLE NUD_REACHABLE = C.NUD_REACHABLE
NUD_STALE = C.NUD_STALE NUD_STALE = C.NUD_STALE
NUD_DELAY = C.NUD_DELAY NUD_DELAY = C.NUD_DELAY
NUD_PROBE = C.NUD_PROBE NUD_PROBE = C.NUD_PROBE
NUD_FAILED = C.NUD_FAILED NUD_FAILED = C.NUD_FAILED
NUD_NOARP = C.NUD_NOARP NUD_NOARP = C.NUD_NOARP
NUD_PERMANENT = C.NUD_PERMANENT NUD_PERMANENT = C.NUD_PERMANENT
NUD_NONE = C.NUD_NONE NUD_NONE = C.NUD_NONE
IFA_UNSPEC = C.IFA_UNSPEC IFA_UNSPEC = C.IFA_UNSPEC
IFA_ADDRESS = C.IFA_ADDRESS IFA_ADDRESS = C.IFA_ADDRESS
IFA_LOCAL = C.IFA_LOCAL IFA_LOCAL = C.IFA_LOCAL
IFA_LABEL = C.IFA_LABEL IFA_LABEL = C.IFA_LABEL
IFA_BROADCAST = C.IFA_BROADCAST IFA_BROADCAST = C.IFA_BROADCAST
IFA_ANYCAST = C.IFA_ANYCAST IFA_ANYCAST = C.IFA_ANYCAST
IFA_CACHEINFO = C.IFA_CACHEINFO IFA_CACHEINFO = C.IFA_CACHEINFO
IFA_MULTICAST = C.IFA_MULTICAST IFA_MULTICAST = C.IFA_MULTICAST
IFA_FLAGS = C.IFA_FLAGS IFA_FLAGS = C.IFA_FLAGS
IFA_RT_PRIORITY = C.IFA_RT_PRIORITY IFA_RT_PRIORITY = C.IFA_RT_PRIORITY
IFA_TARGET_NETNSID = C.IFA_TARGET_NETNSID IFA_TARGET_NETNSID = C.IFA_TARGET_NETNSID
IFAL_LABEL = C.IFAL_LABEL IFAL_LABEL = C.IFAL_LABEL
IFAL_ADDRESS = C.IFAL_ADDRESS IFAL_ADDRESS = C.IFAL_ADDRESS
RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE RT_SCOPE_UNIVERSE = C.RT_SCOPE_UNIVERSE
RT_SCOPE_SITE = C.RT_SCOPE_SITE RT_SCOPE_SITE = C.RT_SCOPE_SITE
RT_SCOPE_LINK = C.RT_SCOPE_LINK RT_SCOPE_LINK = C.RT_SCOPE_LINK
RT_SCOPE_HOST = C.RT_SCOPE_HOST RT_SCOPE_HOST = C.RT_SCOPE_HOST
RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE RT_SCOPE_NOWHERE = C.RT_SCOPE_NOWHERE
RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC RT_TABLE_UNSPEC = C.RT_TABLE_UNSPEC
RT_TABLE_COMPAT = C.RT_TABLE_COMPAT RT_TABLE_COMPAT = C.RT_TABLE_COMPAT
RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT RT_TABLE_DEFAULT = C.RT_TABLE_DEFAULT
RT_TABLE_MAIN = C.RT_TABLE_MAIN RT_TABLE_MAIN = C.RT_TABLE_MAIN
RT_TABLE_LOCAL = C.RT_TABLE_LOCAL RT_TABLE_LOCAL = C.RT_TABLE_LOCAL
RT_TABLE_MAX = C.RT_TABLE_MAX RT_TABLE_MAX = C.RT_TABLE_MAX
RTA_UNSPEC = C.RTA_UNSPEC RTA_UNSPEC = C.RTA_UNSPEC
RTA_DST = C.RTA_DST RTA_DST = C.RTA_DST
RTA_SRC = C.RTA_SRC RTA_SRC = C.RTA_SRC
RTA_IIF = C.RTA_IIF RTA_IIF = C.RTA_IIF
RTA_OIF = C.RTA_OIF RTA_OIF = C.RTA_OIF
RTA_GATEWAY = C.RTA_GATEWAY RTA_GATEWAY = C.RTA_GATEWAY
RTA_PRIORITY = C.RTA_PRIORITY RTA_PRIORITY = C.RTA_PRIORITY
RTA_PREFSRC = C.RTA_PREFSRC RTA_PREFSRC = C.RTA_PREFSRC
RTA_METRICS = C.RTA_METRICS RTA_METRICS = C.RTA_METRICS
RTA_MULTIPATH = C.RTA_MULTIPATH RTA_MULTIPATH = C.RTA_MULTIPATH
RTA_FLOW = C.RTA_FLOW RTA_FLOW = C.RTA_FLOW
RTA_CACHEINFO = C.RTA_CACHEINFO RTA_CACHEINFO = C.RTA_CACHEINFO
RTA_TABLE = C.RTA_TABLE RTA_TABLE = C.RTA_TABLE
RTA_MARK = C.RTA_MARK RTA_MARK = C.RTA_MARK
RTA_MFC_STATS = C.RTA_MFC_STATS RTA_MFC_STATS = C.RTA_MFC_STATS
RTA_VIA = C.RTA_VIA RTA_VIA = C.RTA_VIA
RTA_NEWDST = C.RTA_NEWDST RTA_NEWDST = C.RTA_NEWDST
RTA_PREF = C.RTA_PREF RTA_PREF = C.RTA_PREF
RTA_ENCAP_TYPE = C.RTA_ENCAP_TYPE RTA_ENCAP_TYPE = C.RTA_ENCAP_TYPE
RTA_ENCAP = C.RTA_ENCAP RTA_ENCAP = C.RTA_ENCAP
RTA_EXPIRES = C.RTA_EXPIRES RTA_EXPIRES = C.RTA_EXPIRES
RTA_PAD = C.RTA_PAD RTA_PAD = C.RTA_PAD
RTA_UID = C.RTA_UID RTA_UID = C.RTA_UID
RTA_TTL_PROPAGATE = C.RTA_TTL_PROPAGATE RTA_TTL_PROPAGATE = C.RTA_TTL_PROPAGATE
RTA_IP_PROTO = C.RTA_IP_PROTO RTA_IP_PROTO = C.RTA_IP_PROTO
RTA_SPORT = C.RTA_SPORT RTA_SPORT = C.RTA_SPORT
RTA_DPORT = C.RTA_DPORT RTA_DPORT = C.RTA_DPORT
RTN_UNSPEC = C.RTN_UNSPEC RTN_UNSPEC = C.RTN_UNSPEC
RTN_UNICAST = C.RTN_UNICAST RTN_UNICAST = C.RTN_UNICAST
RTN_LOCAL = C.RTN_LOCAL RTN_LOCAL = C.RTN_LOCAL
RTN_BROADCAST = C.RTN_BROADCAST RTN_BROADCAST = C.RTN_BROADCAST
RTN_ANYCAST = C.RTN_ANYCAST RTN_ANYCAST = C.RTN_ANYCAST
RTN_MULTICAST = C.RTN_MULTICAST RTN_MULTICAST = C.RTN_MULTICAST
RTN_BLACKHOLE = C.RTN_BLACKHOLE RTN_BLACKHOLE = C.RTN_BLACKHOLE
RTN_UNREACHABLE = C.RTN_UNREACHABLE RTN_UNREACHABLE = C.RTN_UNREACHABLE
RTN_PROHIBIT = C.RTN_PROHIBIT RTN_PROHIBIT = C.RTN_PROHIBIT
RTN_THROW = C.RTN_THROW RTN_THROW = C.RTN_THROW
RTN_NAT = C.RTN_NAT RTN_NAT = C.RTN_NAT
RTN_XRESOLVE = C.RTN_XRESOLVE RTN_XRESOLVE = C.RTN_XRESOLVE
SizeofNlMsghdr = C.sizeof_struct_nlmsghdr PREFIX_UNSPEC = C.PREFIX_UNSPEC
SizeofNlMsgerr = C.sizeof_struct_nlmsgerr PREFIX_ADDRESS = C.PREFIX_ADDRESS
SizeofRtGenmsg = C.sizeof_struct_rtgenmsg PREFIX_CACHEINFO = C.PREFIX_CACHEINFO
SizeofNlAttr = C.sizeof_struct_nlattr SizeofNlMsghdr = C.sizeof_struct_nlmsghdr
SizeofRtAttr = C.sizeof_struct_rtattr SizeofNlMsgerr = C.sizeof_struct_nlmsgerr
SizeofIfInfomsg = C.sizeof_struct_ifinfomsg SizeofRtGenmsg = C.sizeof_struct_rtgenmsg
SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg SizeofNlAttr = C.sizeof_struct_nlattr
SizeofIfAddrlblmsg = C.sizeof_struct_ifaddrlblmsg SizeofRtAttr = C.sizeof_struct_rtattr
SizeofIfaCacheinfo = C.sizeof_struct_ifa_cacheinfo SizeofIfInfomsg = C.sizeof_struct_ifinfomsg
SizeofRtMsg = C.sizeof_struct_rtmsg SizeofPrefixmsg = C.sizeof_struct_prefixmsg
SizeofRtNexthop = C.sizeof_struct_rtnexthop SizeofPrefixCacheinfo = C.sizeof_struct_prefix_cacheinfo
SizeofNdUseroptmsg = C.sizeof_struct_nduseroptmsg SizeofIfAddrmsg = C.sizeof_struct_ifaddrmsg
SizeofNdMsg = C.sizeof_struct_ndmsg SizeofIfAddrlblmsg = C.sizeof_struct_ifaddrlblmsg
SizeofIfaCacheinfo = C.sizeof_struct_ifa_cacheinfo
SizeofRtMsg = C.sizeof_struct_rtmsg
SizeofRtNexthop = C.sizeof_struct_rtnexthop
SizeofNdUseroptmsg = C.sizeof_struct_nduseroptmsg
SizeofNdMsg = C.sizeof_struct_ndmsg
) )
type NlMsghdr C.struct_nlmsghdr type NlMsghdr C.struct_nlmsghdr
@@ -959,6 +964,10 @@ type RtAttr C.struct_rtattr
type IfInfomsg C.struct_ifinfomsg type IfInfomsg C.struct_ifinfomsg
type Prefixmsg C.struct_prefixmsg
type PrefixCacheinfo C.struct_prefix_cacheinfo
type IfAddrmsg C.struct_ifaddrmsg type IfAddrmsg C.struct_ifaddrmsg
type IfAddrlblmsg C.struct_ifaddrlblmsg type IfAddrlblmsg C.struct_ifaddrlblmsg
+125 -104
View File
@@ -593,110 +593,115 @@ const (
) )
const ( const (
NDA_UNSPEC = 0x0 NDA_UNSPEC = 0x0
NDA_DST = 0x1 NDA_DST = 0x1
NDA_LLADDR = 0x2 NDA_LLADDR = 0x2
NDA_CACHEINFO = 0x3 NDA_CACHEINFO = 0x3
NDA_PROBES = 0x4 NDA_PROBES = 0x4
NDA_VLAN = 0x5 NDA_VLAN = 0x5
NDA_PORT = 0x6 NDA_PORT = 0x6
NDA_VNI = 0x7 NDA_VNI = 0x7
NDA_IFINDEX = 0x8 NDA_IFINDEX = 0x8
NDA_MASTER = 0x9 NDA_MASTER = 0x9
NDA_LINK_NETNSID = 0xa NDA_LINK_NETNSID = 0xa
NDA_SRC_VNI = 0xb NDA_SRC_VNI = 0xb
NTF_USE = 0x1 NTF_USE = 0x1
NTF_SELF = 0x2 NTF_SELF = 0x2
NTF_MASTER = 0x4 NTF_MASTER = 0x4
NTF_PROXY = 0x8 NTF_PROXY = 0x8
NTF_EXT_LEARNED = 0x10 NTF_EXT_LEARNED = 0x10
NTF_OFFLOADED = 0x20 NTF_OFFLOADED = 0x20
NTF_ROUTER = 0x80 NTF_ROUTER = 0x80
NUD_INCOMPLETE = 0x1 NUD_INCOMPLETE = 0x1
NUD_REACHABLE = 0x2 NUD_REACHABLE = 0x2
NUD_STALE = 0x4 NUD_STALE = 0x4
NUD_DELAY = 0x8 NUD_DELAY = 0x8
NUD_PROBE = 0x10 NUD_PROBE = 0x10
NUD_FAILED = 0x20 NUD_FAILED = 0x20
NUD_NOARP = 0x40 NUD_NOARP = 0x40
NUD_PERMANENT = 0x80 NUD_PERMANENT = 0x80
NUD_NONE = 0x0 NUD_NONE = 0x0
IFA_UNSPEC = 0x0 IFA_UNSPEC = 0x0
IFA_ADDRESS = 0x1 IFA_ADDRESS = 0x1
IFA_LOCAL = 0x2 IFA_LOCAL = 0x2
IFA_LABEL = 0x3 IFA_LABEL = 0x3
IFA_BROADCAST = 0x4 IFA_BROADCAST = 0x4
IFA_ANYCAST = 0x5 IFA_ANYCAST = 0x5
IFA_CACHEINFO = 0x6 IFA_CACHEINFO = 0x6
IFA_MULTICAST = 0x7 IFA_MULTICAST = 0x7
IFA_FLAGS = 0x8 IFA_FLAGS = 0x8
IFA_RT_PRIORITY = 0x9 IFA_RT_PRIORITY = 0x9
IFA_TARGET_NETNSID = 0xa IFA_TARGET_NETNSID = 0xa
IFAL_LABEL = 0x2 IFAL_LABEL = 0x2
IFAL_ADDRESS = 0x1 IFAL_ADDRESS = 0x1
RT_SCOPE_UNIVERSE = 0x0 RT_SCOPE_UNIVERSE = 0x0
RT_SCOPE_SITE = 0xc8 RT_SCOPE_SITE = 0xc8
RT_SCOPE_LINK = 0xfd RT_SCOPE_LINK = 0xfd
RT_SCOPE_HOST = 0xfe RT_SCOPE_HOST = 0xfe
RT_SCOPE_NOWHERE = 0xff RT_SCOPE_NOWHERE = 0xff
RT_TABLE_UNSPEC = 0x0 RT_TABLE_UNSPEC = 0x0
RT_TABLE_COMPAT = 0xfc RT_TABLE_COMPAT = 0xfc
RT_TABLE_DEFAULT = 0xfd RT_TABLE_DEFAULT = 0xfd
RT_TABLE_MAIN = 0xfe RT_TABLE_MAIN = 0xfe
RT_TABLE_LOCAL = 0xff RT_TABLE_LOCAL = 0xff
RT_TABLE_MAX = 0xffffffff RT_TABLE_MAX = 0xffffffff
RTA_UNSPEC = 0x0 RTA_UNSPEC = 0x0
RTA_DST = 0x1 RTA_DST = 0x1
RTA_SRC = 0x2 RTA_SRC = 0x2
RTA_IIF = 0x3 RTA_IIF = 0x3
RTA_OIF = 0x4 RTA_OIF = 0x4
RTA_GATEWAY = 0x5 RTA_GATEWAY = 0x5
RTA_PRIORITY = 0x6 RTA_PRIORITY = 0x6
RTA_PREFSRC = 0x7 RTA_PREFSRC = 0x7
RTA_METRICS = 0x8 RTA_METRICS = 0x8
RTA_MULTIPATH = 0x9 RTA_MULTIPATH = 0x9
RTA_FLOW = 0xb RTA_FLOW = 0xb
RTA_CACHEINFO = 0xc RTA_CACHEINFO = 0xc
RTA_TABLE = 0xf RTA_TABLE = 0xf
RTA_MARK = 0x10 RTA_MARK = 0x10
RTA_MFC_STATS = 0x11 RTA_MFC_STATS = 0x11
RTA_VIA = 0x12 RTA_VIA = 0x12
RTA_NEWDST = 0x13 RTA_NEWDST = 0x13
RTA_PREF = 0x14 RTA_PREF = 0x14
RTA_ENCAP_TYPE = 0x15 RTA_ENCAP_TYPE = 0x15
RTA_ENCAP = 0x16 RTA_ENCAP = 0x16
RTA_EXPIRES = 0x17 RTA_EXPIRES = 0x17
RTA_PAD = 0x18 RTA_PAD = 0x18
RTA_UID = 0x19 RTA_UID = 0x19
RTA_TTL_PROPAGATE = 0x1a RTA_TTL_PROPAGATE = 0x1a
RTA_IP_PROTO = 0x1b RTA_IP_PROTO = 0x1b
RTA_SPORT = 0x1c RTA_SPORT = 0x1c
RTA_DPORT = 0x1d RTA_DPORT = 0x1d
RTN_UNSPEC = 0x0 RTN_UNSPEC = 0x0
RTN_UNICAST = 0x1 RTN_UNICAST = 0x1
RTN_LOCAL = 0x2 RTN_LOCAL = 0x2
RTN_BROADCAST = 0x3 RTN_BROADCAST = 0x3
RTN_ANYCAST = 0x4 RTN_ANYCAST = 0x4
RTN_MULTICAST = 0x5 RTN_MULTICAST = 0x5
RTN_BLACKHOLE = 0x6 RTN_BLACKHOLE = 0x6
RTN_UNREACHABLE = 0x7 RTN_UNREACHABLE = 0x7
RTN_PROHIBIT = 0x8 RTN_PROHIBIT = 0x8
RTN_THROW = 0x9 RTN_THROW = 0x9
RTN_NAT = 0xa RTN_NAT = 0xa
RTN_XRESOLVE = 0xb RTN_XRESOLVE = 0xb
SizeofNlMsghdr = 0x10 PREFIX_UNSPEC = 0x0
SizeofNlMsgerr = 0x14 PREFIX_ADDRESS = 0x1
SizeofRtGenmsg = 0x1 PREFIX_CACHEINFO = 0x2
SizeofNlAttr = 0x4 SizeofNlMsghdr = 0x10
SizeofRtAttr = 0x4 SizeofNlMsgerr = 0x14
SizeofIfInfomsg = 0x10 SizeofRtGenmsg = 0x1
SizeofIfAddrmsg = 0x8 SizeofNlAttr = 0x4
SizeofIfAddrlblmsg = 0xc SizeofRtAttr = 0x4
SizeofIfaCacheinfo = 0x10 SizeofIfInfomsg = 0x10
SizeofRtMsg = 0xc SizeofPrefixmsg = 0xc
SizeofRtNexthop = 0x8 SizeofPrefixCacheinfo = 0x8
SizeofNdUseroptmsg = 0x10 SizeofIfAddrmsg = 0x8
SizeofNdMsg = 0xc SizeofIfAddrlblmsg = 0xc
SizeofIfaCacheinfo = 0x10
SizeofRtMsg = 0xc
SizeofRtNexthop = 0x8
SizeofNdUseroptmsg = 0x10
SizeofNdMsg = 0xc
) )
type NlMsghdr struct { type NlMsghdr struct {
@@ -735,6 +740,22 @@ type IfInfomsg struct {
Change uint32 Change uint32
} }
type Prefixmsg struct {
Family uint8
Pad1 uint8
Pad2 uint16
Ifindex int32
Type uint8
Len uint8
Flags uint8
Pad3 uint8
}
type PrefixCacheinfo struct {
Preferred_time uint32
Valid_time uint32
}
type IfAddrmsg struct { type IfAddrmsg struct {
Family uint8 Family uint8
Prefixlen uint8 Prefixlen uint8