mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
[netstack] Decouple tcpip.ControlMessages from the IP control messges.
tcpip.ControlMessages can not contain Linux specific structures which makes it painful to convert back and forth from Linux to tcpip back to Linux when passing around control messages in hostinet and raw sockets. Now we convert to the Linux version of the control message as soon as we are out of tcpip. PiperOrigin-RevId: 347027065
This commit is contained in:
@@ -320,7 +320,7 @@ type socketOpsCommon struct {
|
||||
readView buffer.View
|
||||
// readCM holds control message information for the last packet read
|
||||
// from Endpoint.
|
||||
readCM tcpip.ControlMessages
|
||||
readCM socket.IPControlMessages
|
||||
sender tcpip.FullAddress
|
||||
linkPacketInfo tcpip.LinkPacketInfo
|
||||
|
||||
@@ -408,7 +408,7 @@ func (s *socketOpsCommon) fetchReadView() *syserr.Error {
|
||||
}
|
||||
|
||||
s.readView = v
|
||||
s.readCM = cms
|
||||
s.readCM = socket.NewIPControlMessages(s.family, cms)
|
||||
atomic.StoreUint32(&s.readViewHasData, 1)
|
||||
|
||||
return nil
|
||||
@@ -2736,7 +2736,7 @@ func (s *socketOpsCommon) nonBlockingRead(ctx context.Context, dst usermem.IOSeq
|
||||
// We need to peek beyond the first message.
|
||||
dst = dst.DropFirst(n)
|
||||
num, err := dst.CopyOutFrom(ctx, safemem.FromVecReaderFunc{func(dsts [][]byte) (int64, error) {
|
||||
n, _, err := s.Endpoint.Peek(dsts)
|
||||
n, err := s.Endpoint.Peek(dsts)
|
||||
// TODO(b/78348848): Handle peek timestamp.
|
||||
if err != nil {
|
||||
return int64(n), syserr.TranslateNetstackError(err).ToError()
|
||||
@@ -2780,17 +2780,16 @@ func (s *socketOpsCommon) nonBlockingRead(ctx context.Context, dst usermem.IOSeq
|
||||
|
||||
func (s *socketOpsCommon) controlMessages() socket.ControlMessages {
|
||||
return socket.ControlMessages{
|
||||
IP: tcpip.ControlMessages{
|
||||
HasTimestamp: s.readCM.HasTimestamp && s.sockOptTimestamp,
|
||||
Timestamp: s.readCM.Timestamp,
|
||||
HasTOS: s.readCM.HasTOS,
|
||||
TOS: s.readCM.TOS,
|
||||
HasTClass: s.readCM.HasTClass,
|
||||
TClass: s.readCM.TClass,
|
||||
HasIPPacketInfo: s.readCM.HasIPPacketInfo,
|
||||
PacketInfo: s.readCM.PacketInfo,
|
||||
HasOriginalDstAddress: s.readCM.HasOriginalDstAddress,
|
||||
OriginalDstAddress: s.readCM.OriginalDstAddress,
|
||||
IP: socket.IPControlMessages{
|
||||
HasTimestamp: s.readCM.HasTimestamp && s.sockOptTimestamp,
|
||||
Timestamp: s.readCM.Timestamp,
|
||||
HasTOS: s.readCM.HasTOS,
|
||||
TOS: s.readCM.TOS,
|
||||
HasTClass: s.readCM.HasTClass,
|
||||
TClass: s.readCM.TClass,
|
||||
HasIPPacketInfo: s.readCM.HasIPPacketInfo,
|
||||
PacketInfo: s.readCM.PacketInfo,
|
||||
OriginalDstAddress: s.readCM.OriginalDstAddress,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user