@@ -63,8 +63,9 @@ func pktInfoFromBuf[T unix.Inet4Pktinfo | unix.Inet6Pktinfo](buf []byte) (t T) {
63
63
return t
64
64
}
65
65
66
- // setSrcControl parses the control for PKTINFO and if found updates ep with
67
- // the source information found.
66
+ // setSrcControl sets an IP{V6}_PKTINFO in control based on the source address
67
+ // and source ifindex found in ep. control's len will be set to 0 in the event
68
+ // that ep is a default value.
68
69
func setSrcControl (control * []byte , ep * StdNetEndpoint ) {
69
70
* control = (* control )[:cap (* control )]
70
71
if len (* control ) < int (unsafe .Sizeof (unix.Cmsghdr {})) {
@@ -93,19 +94,20 @@ func setSrcControl(control *[]byte, ep *StdNetEndpoint) {
93
94
if ep .SrcIP ().IsValid () {
94
95
info .Spec_dst = ep .SrcIP ().As4 ()
95
96
}
97
+ * control = (* control )[:unix .CmsgSpace (unix .SizeofInet4Pktinfo )]
96
98
} else {
97
99
hdr .Level = unix .IPPROTO_IPV6
98
100
hdr .Type = unix .IPV6_PKTINFO
99
- hdr .Len = unix .SizeofCmsghdr + unix .SizeofInet6Pktinfo
101
+ hdr .SetLen ( unix .CmsgLen ( unix .SizeofInet6Pktinfo ))
100
102
101
103
info := (* unix .Inet6Pktinfo )(unsafe .Pointer (& (* control )[unix .SizeofCmsghdr ]))
102
104
info .Ifindex = uint32 (ep .src .ifidx )
103
105
if ep .SrcIP ().IsValid () {
104
106
info .Addr = ep .SrcIP ().As16 ()
105
107
}
108
+ * control = (* control )[:unix .CmsgSpace (unix .SizeofInet6Pktinfo )]
106
109
}
107
110
108
- * control = (* control )[:hdr .Len ]
109
111
}
110
112
111
- var srcControlSize = unix .CmsgLen (unix .SizeofInet6Pktinfo )
113
+ var srcControlSize = unix .CmsgSpace (unix .SizeofInet6Pktinfo )
0 commit comments