Skip to content

Commit 5334e5f

Browse files
committed
Automated rollback of changelist 805075889
PiperOrigin-RevId: 805108888
1 parent f0f88d8 commit 5334e5f

File tree

4 files changed

+48
-62
lines changed

4 files changed

+48
-62
lines changed

pkg/tcpip/stack/packet_buffer.go

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -768,52 +768,3 @@ func BufferSince(h PacketHeader) buffer.Buffer {
768768
clone.TrimFront(int64(offset))
769769
return clone
770770
}
771-
772-
// ExperimentOptionValue returns the experiment option value from the packet
773-
// and a bool indicating whether an experiment option value was found.
774-
func (pk *PacketBuffer) ExperimentOptionValue() (uint16, bool) {
775-
switch pk.NetworkProtocolNumber {
776-
case header.IPv4ProtocolNumber:
777-
h := header.IPv4(pk.NetworkHeader().Slice())
778-
opts := h.Options()
779-
iter := opts.MakeIterator()
780-
for {
781-
opt, done, err := iter.Next()
782-
if err != nil {
783-
return 0, false
784-
}
785-
if done {
786-
return 0, false
787-
}
788-
if opt.Type() == header.IPv4OptionExperimentType {
789-
return opt.(*header.IPv4OptionExperiment).Value(), true
790-
}
791-
}
792-
case header.IPv6ProtocolNumber:
793-
h := header.IPv6(pk.NetworkHeader().Slice())
794-
v := pk.NetworkHeader().View()
795-
if v != nil {
796-
v.TrimFront(header.IPv6MinimumSize)
797-
}
798-
buf := buffer.MakeWithView(v)
799-
buf.Append(pk.TransportHeader().View())
800-
dataBuf := pk.Data().ToBuffer()
801-
buf.Merge(&dataBuf)
802-
it := header.MakeIPv6PayloadIterator(header.IPv6ExtensionHeaderIdentifier(h.NextHeader()), buf)
803-
804-
for {
805-
hdr, done, err := it.Next()
806-
if done || err != nil {
807-
break
808-
}
809-
if h, ok := hdr.(header.IPv6ExperimentExtHdr); ok {
810-
hdr.Release()
811-
return h.Value, true
812-
}
813-
hdr.Release()
814-
}
815-
default:
816-
panic(fmt.Sprintf("Unexpected network protocol number %d", pk.NetworkProtocolNumber))
817-
}
818-
return 0, false
819-
}

pkg/tcpip/tcpip.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -712,10 +712,6 @@ type ReadOptions struct {
712712
// NeedLinkPacketInfo indicates whether to return the link-layer information,
713713
// if supported.
714714
NeedLinkPacketInfo bool
715-
716-
// NeedRecvdExperimentOption indicates whether to return the experiment
717-
// option value from the last received packet, if supported.
718-
NeedReceivedExperimentOption bool
719715
}
720716

721717
// ReadResult represents result for a successful Endpoint.Read.
@@ -736,10 +732,6 @@ type ReadResult struct {
736732
// LinkPacketInfo is the link-layer information of the received packet if
737733
// ReadOptions.NeedLinkPacketInfo is true.
738734
LinkPacketInfo LinkPacketInfo
739-
740-
// ReceivedExperimentOption is the experiment option value from the last
741-
// received packet if ReadOptions.NeedReceivedExperimentOption is true.
742-
ReceivedExperimentOption uint16
743735
}
744736

745737
// Endpoint is the interface implemented by transport protocols (e.g., tcp, udp)

pkg/tcpip/transport/tcp/forwarder.go

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
package tcp
1616

1717
import (
18+
"fmt"
19+
20+
"gvisor.dev/gvisor/pkg/buffer"
1821
"gvisor.dev/gvisor/pkg/tcpip"
1922
"gvisor.dev/gvisor/pkg/tcpip/header"
2023
"gvisor.dev/gvisor/pkg/tcpip/seqnum"
@@ -176,5 +179,49 @@ func (r *ForwarderRequest) CreateEndpoint(queue *waiter.Queue) (tcpip.Endpoint,
176179
func (r *ForwarderRequest) ForwardedPacketExperimentOption() (uint16, bool) {
177180
r.mu.Lock()
178181
defer r.mu.Unlock()
179-
return r.segment.pkt.ExperimentOptionValue()
182+
183+
switch r.segment.pkt.NetworkProtocolNumber {
184+
case header.IPv4ProtocolNumber:
185+
h := header.IPv4(r.segment.pkt.NetworkHeader().Slice())
186+
opts := h.Options()
187+
iter := opts.MakeIterator()
188+
for {
189+
opt, done, err := iter.Next()
190+
if err != nil {
191+
return 0, false
192+
}
193+
if done {
194+
return 0, false
195+
}
196+
if opt.Type() == header.IPv4OptionExperimentType {
197+
return opt.(*header.IPv4OptionExperiment).Value(), true
198+
}
199+
}
200+
case header.IPv6ProtocolNumber:
201+
h := header.IPv6(r.segment.pkt.NetworkHeader().Slice())
202+
v := r.segment.pkt.NetworkHeader().View()
203+
if v != nil {
204+
v.TrimFront(header.IPv6MinimumSize)
205+
}
206+
buf := buffer.MakeWithView(v)
207+
buf.Append(r.segment.pkt.TransportHeader().View())
208+
dataBuf := r.segment.pkt.Data().ToBuffer()
209+
buf.Merge(&dataBuf)
210+
it := header.MakeIPv6PayloadIterator(header.IPv6ExtensionHeaderIdentifier(h.NextHeader()), buf)
211+
212+
for {
213+
hdr, done, err := it.Next()
214+
if done || err != nil {
215+
break
216+
}
217+
if h, ok := hdr.(header.IPv6ExperimentExtHdr); ok {
218+
hdr.Release()
219+
return h.Value, true
220+
}
221+
hdr.Release()
222+
}
223+
default:
224+
panic(fmt.Sprintf("Unexpected network protocol number %d", r.segment.pkt.NetworkProtocolNumber))
225+
}
226+
return 0, false
180227
}

pkg/tcpip/transport/udp/endpoint.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -294,10 +294,6 @@ func (e *endpoint) Read(dst io.Writer, opts tcpip.ReadOptions) (tcpip.ReadResult
294294
if opts.NeedRemoteAddr {
295295
res.RemoteAddr = p.senderAddress
296296
}
297-
if opts.NeedReceivedExperimentOption {
298-
expOptVal, _ := p.pkt.ExperimentOptionValue()
299-
res.ReceivedExperimentOption = expOptVal
300-
}
301297

302298
n, err := p.pkt.Data().ReadTo(dst, opts.Peek)
303299
if n == 0 && err != nil {

0 commit comments

Comments
 (0)