netstack: move Linux ABI struct into abi/linux

PiperOrigin-RevId: 581049684
This commit is contained in:
Kevin Krakauer
2023-11-09 15:58:49 -08:00
committed by gVisor bot
parent 3ec902d1a6
commit b80e856de3
2 changed files with 26 additions and 23 deletions
+15 -4
View File
@@ -389,18 +389,29 @@ type XTRedirectTarget struct {
// SizeOfXTRedirectTarget is the size of an XTRedirectTarget.
const SizeOfXTRedirectTarget = 56
// XTSNATTarget triggers Source NAT when reached.
// XTNATTargetV0 triggers NAT when reached.
// Adding 4 bytes of padding to make the struct 8 byte aligned.
//
// +marshal
type XTSNATTarget struct {
type XTNATTargetV0 struct {
Target XTEntryTarget
NfRange NfNATIPV4MultiRangeCompat
_ [4]byte
}
// SizeOfXTSNATTarget is the size of an XTSNATTarget.
const SizeOfXTSNATTarget = 56
// SizeOfXTNATTargetV0 is the size of an XTNATTargetV0.
const SizeOfXTNATTargetV0 = 56
// XTNATTargetV1 triggers NAT when reached.
//
// +marshal
type XTNATTargetV1 struct {
Target XTEntryTarget
Range NFNATRange
}
// SizeOfXTNATTargetV1 is the size of an XTNATTargetV1.
const SizeOfXTNATTargetV1 = SizeOfXTEntryTarget + SizeOfNFNATRange
// IPTGetinfo is the argument for the IPT_SO_GET_INFO sockopt. It corresponds
// to struct ipt_getinfo in include/uapi/linux/netfilter_ipv4/ip_tables.h.
+11 -19
View File
@@ -352,14 +352,6 @@ func (*redirectTargetMaker) unmarshal(buf []byte, filter stack.IPHeaderFilter) (
return &target, nil
}
// +marshal
type nfNATTarget struct {
Target linux.XTEntryTarget
Range linux.NFNATRange
}
const nfNATMarshalledSize = linux.SizeOfXTEntryTarget + linux.SizeOfNFNATRange
type nfNATTargetMaker struct {
NetworkProtocol tcpip.NetworkProtocolNumber
}
@@ -373,9 +365,9 @@ func (rm *nfNATTargetMaker) id() targetID {
func (*nfNATTargetMaker) marshal(target target) []byte {
rt := target.(*redirectTarget)
nt := nfNATTarget{
nt := linux.XTNATTargetV1{
Target: linux.XTEntryTarget{
TargetSize: nfNATMarshalledSize,
TargetSize: linux.SizeOfXTNATTargetV1,
},
Range: linux.NFNATRange{
Flags: linux.NF_NAT_RANGE_PROTO_SPECIFIED,
@@ -392,7 +384,7 @@ func (*nfNATTargetMaker) marshal(target target) []byte {
}
func (*nfNATTargetMaker) unmarshal(buf []byte, filter stack.IPHeaderFilter) (target, *syserr.Error) {
if size := nfNATMarshalledSize; len(buf) < size {
if size := linux.SizeOfXTNATTargetV1; len(buf) < size {
nflog("nfNATTargetMaker: buf has insufficient size (%d) for nfNAT target (%d)", len(buf), size)
return nil, syserr.ErrInvalidArgument
}
@@ -446,9 +438,9 @@ func (st *snatTargetMakerV4) id() targetID {
func (*snatTargetMakerV4) marshal(target target) []byte {
st := target.(*snatTarget)
// This is a snat target named snat.
xt := linux.XTSNATTarget{
xt := linux.XTNATTargetV0{
Target: linux.XTEntryTarget{
TargetSize: linux.SizeOfXTSNATTarget,
TargetSize: linux.SizeOfXTNATTargetV0,
},
}
copy(xt.Target.Name[:], SNATTargetName)
@@ -463,7 +455,7 @@ func (*snatTargetMakerV4) marshal(target target) []byte {
}
func (*snatTargetMakerV4) unmarshal(buf []byte, filter stack.IPHeaderFilter) (target, *syserr.Error) {
if len(buf) < linux.SizeOfXTSNATTarget {
if len(buf) < linux.SizeOfXTNATTargetV0 {
nflog("snatTargetMakerV4: buf has insufficient size for snat target %d", len(buf))
return nil, syserr.ErrInvalidArgument
}
@@ -473,10 +465,10 @@ func (*snatTargetMakerV4) unmarshal(buf []byte, filter stack.IPHeaderFilter) (ta
return nil, syserr.ErrInvalidArgument
}
var st linux.XTSNATTarget
var st linux.XTNATTargetV0
st.UnmarshalUnsafe(buf)
// Copy linux.XTSNATTarget to stack.SNATTarget.
// Copy linux.XTNATTargetV0 to stack.SNATTarget.
target := snatTarget{SNATTarget: stack.SNATTarget{
NetworkProtocol: filter.NetworkProtocol(),
}}
@@ -524,9 +516,9 @@ func (st *snatTargetMakerV6) id() targetID {
func (*snatTargetMakerV6) marshal(target target) []byte {
st := target.(*snatTarget)
nt := nfNATTarget{
nt := linux.XTNATTargetV1{
Target: linux.XTEntryTarget{
TargetSize: nfNATMarshalledSize,
TargetSize: linux.SizeOfXTNATTargetV1,
},
Range: linux.NFNATRange{
Flags: linux.NF_NAT_RANGE_MAP_IPS | linux.NF_NAT_RANGE_PROTO_SPECIFIED,
@@ -542,7 +534,7 @@ func (*snatTargetMakerV6) marshal(target target) []byte {
}
func (*snatTargetMakerV6) unmarshal(buf []byte, filter stack.IPHeaderFilter) (target, *syserr.Error) {
if size := nfNATMarshalledSize; len(buf) < size {
if size := linux.SizeOfXTNATTargetV1; len(buf) < size {
nflog("snatTargetMakerV6: buf has insufficient size (%d) for SNAT V6 target (%d)", len(buf), size)
return nil, syserr.ErrInvalidArgument
}