github.com/sagernet/netlink@v0.0.0-20240612041022-b9a21c07ac6a/nl/xfrm_policy_linux_test.go (about) 1 package nl 2 3 import ( 4 "bytes" 5 "crypto/rand" 6 "encoding/binary" 7 "testing" 8 ) 9 10 func (msg *XfrmUserpolicyId) write(b []byte) { 11 native := NativeEndian() 12 msg.Sel.write(b[0:SizeofXfrmSelector]) 13 native.PutUint32(b[SizeofXfrmSelector:SizeofXfrmSelector+4], msg.Index) 14 b[SizeofXfrmSelector+4] = msg.Dir 15 copy(b[SizeofXfrmSelector+5:SizeofXfrmSelector+8], msg.Pad[:]) 16 } 17 18 func (msg *XfrmUserpolicyId) serializeSafe() []byte { 19 b := make([]byte, SizeofXfrmUserpolicyId) 20 msg.write(b) 21 return b 22 } 23 24 func deserializeXfrmUserpolicyIdSafe(b []byte) *XfrmUserpolicyId { 25 var msg = XfrmUserpolicyId{} 26 binary.Read(bytes.NewReader(b[0:SizeofXfrmUserpolicyId]), NativeEndian(), &msg) 27 return &msg 28 } 29 30 func TestXfrmUserpolicyIdDeserializeSerialize(t *testing.T) { 31 var orig = make([]byte, SizeofXfrmUserpolicyId) 32 rand.Read(orig) 33 safemsg := deserializeXfrmUserpolicyIdSafe(orig) 34 msg := DeserializeXfrmUserpolicyId(orig) 35 testDeserializeSerialize(t, orig, safemsg, msg) 36 } 37 38 func (msg *XfrmUserpolicyInfo) write(b []byte) { 39 const CfgEnd = SizeofXfrmSelector + SizeofXfrmLifetimeCfg 40 const CurEnd = CfgEnd + SizeofXfrmLifetimeCur 41 native := NativeEndian() 42 msg.Sel.write(b[0:SizeofXfrmSelector]) 43 msg.Lft.write(b[SizeofXfrmSelector:CfgEnd]) 44 msg.Curlft.write(b[CfgEnd:CurEnd]) 45 native.PutUint32(b[CurEnd:CurEnd+4], msg.Priority) 46 native.PutUint32(b[CurEnd+4:CurEnd+8], msg.Index) 47 b[CurEnd+8] = msg.Dir 48 b[CurEnd+9] = msg.Action 49 b[CurEnd+10] = msg.Flags 50 b[CurEnd+11] = msg.Share 51 copy(b[CurEnd+12:CurEnd+16], msg.Pad[:]) 52 } 53 54 func (msg *XfrmUserpolicyInfo) serializeSafe() []byte { 55 b := make([]byte, SizeofXfrmUserpolicyInfo) 56 msg.write(b) 57 return b 58 } 59 60 func deserializeXfrmUserpolicyInfoSafe(b []byte) *XfrmUserpolicyInfo { 61 var msg = XfrmUserpolicyInfo{} 62 binary.Read(bytes.NewReader(b[0:SizeofXfrmUserpolicyInfo]), NativeEndian(), &msg) 63 return &msg 64 } 65 66 func TestXfrmUserpolicyInfoDeserializeSerialize(t *testing.T) { 67 var orig = make([]byte, SizeofXfrmUserpolicyInfo) 68 rand.Read(orig) 69 safemsg := deserializeXfrmUserpolicyInfoSafe(orig) 70 msg := DeserializeXfrmUserpolicyInfo(orig) 71 testDeserializeSerialize(t, orig, safemsg, msg) 72 } 73 74 func (msg *XfrmUserTmpl) write(b []byte) { 75 const AddrEnd = SizeofXfrmId + 4 + SizeofXfrmAddress 76 native := NativeEndian() 77 msg.XfrmId.write(b[0:SizeofXfrmId]) 78 native.PutUint16(b[SizeofXfrmId:SizeofXfrmId+2], msg.Family) 79 copy(b[SizeofXfrmId+2:SizeofXfrmId+4], msg.Pad1[:]) 80 msg.Saddr.write(b[SizeofXfrmId+4 : AddrEnd]) 81 native.PutUint32(b[AddrEnd:AddrEnd+4], msg.Reqid) 82 b[AddrEnd+4] = msg.Mode 83 b[AddrEnd+5] = msg.Share 84 b[AddrEnd+6] = msg.Optional 85 b[AddrEnd+7] = msg.Pad2 86 native.PutUint32(b[AddrEnd+8:AddrEnd+12], msg.Aalgos) 87 native.PutUint32(b[AddrEnd+12:AddrEnd+16], msg.Ealgos) 88 native.PutUint32(b[AddrEnd+16:AddrEnd+20], msg.Calgos) 89 } 90 91 func (msg *XfrmUserTmpl) serializeSafe() []byte { 92 b := make([]byte, SizeofXfrmUserTmpl) 93 msg.write(b) 94 return b 95 } 96 97 func deserializeXfrmUserTmplSafe(b []byte) *XfrmUserTmpl { 98 var msg = XfrmUserTmpl{} 99 binary.Read(bytes.NewReader(b[0:SizeofXfrmUserTmpl]), NativeEndian(), &msg) 100 return &msg 101 } 102 103 func TestXfrmUserTmplDeserializeSerialize(t *testing.T) { 104 var orig = make([]byte, SizeofXfrmUserTmpl) 105 rand.Read(orig) 106 safemsg := deserializeXfrmUserTmplSafe(orig) 107 msg := DeserializeXfrmUserTmpl(orig) 108 testDeserializeSerialize(t, orig, safemsg, msg) 109 }