diff options
author | gVisor bot <gvisor-bot@google.com> | 2021-08-30 18:04:47 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2021-08-30 18:04:47 +0000 |
commit | 19cc7af3438ed43d2f7258ae5032595cad507b7b (patch) | |
tree | c4e0f99ef375502f6d4f14df07d4aa99b1553b4c /pkg/tcpip/internal | |
parent | d5a654f1f59004ee296c1a25b24864f73cb2e49b (diff) | |
parent | 9625071e6dd6d949f6bd443910eaf56ce1c9762d (diff) |
Merge release-20210823.0-29-g9625071e6 (automated)
Diffstat (limited to 'pkg/tcpip/internal')
-rw-r--r-- | pkg/tcpip/internal/tcp/tcp.go | 48 | ||||
-rw-r--r-- | pkg/tcpip/internal/tcp/tcp_state_autogen.go | 36 |
2 files changed, 84 insertions, 0 deletions
diff --git a/pkg/tcpip/internal/tcp/tcp.go b/pkg/tcpip/internal/tcp/tcp.go new file mode 100644 index 000000000..0616d368c --- /dev/null +++ b/pkg/tcpip/internal/tcp/tcp.go @@ -0,0 +1,48 @@ +// Copyright 2021 The gVisor Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package tcp contains internal type definitions that are not expected to be +// used by anyone else outside pkg/tcpip. +package tcp + +import ( + "time" + + "gvisor.dev/gvisor/pkg/tcpip" +) + +// TSOffset is an offset applied to the value of the TSVal field in the TCP +// Timestamp option. +// +// +stateify savable +type TSOffset struct { + milliseconds uint32 +} + +// NewTSOffset creates a new TSOffset from milliseconds. +func NewTSOffset(milliseconds uint32) TSOffset { + return TSOffset{ + milliseconds: milliseconds, + } +} + +// TSVal applies the offset to now and returns the timestamp in milliseconds. +func (offset TSOffset) TSVal(now tcpip.MonotonicTime) uint32 { + return uint32(now.Sub(tcpip.MonotonicTime{}).Milliseconds()) + offset.milliseconds +} + +// Elapsed calculates the elapsed time given now and the echoed back timestamp. +func (offset TSOffset) Elapsed(now tcpip.MonotonicTime, tsEcr uint32) time.Duration { + return time.Duration(offset.TSVal(now)-tsEcr) * time.Millisecond +} diff --git a/pkg/tcpip/internal/tcp/tcp_state_autogen.go b/pkg/tcpip/internal/tcp/tcp_state_autogen.go new file mode 100644 index 000000000..e973a7bbd --- /dev/null +++ b/pkg/tcpip/internal/tcp/tcp_state_autogen.go @@ -0,0 +1,36 @@ +// automatically generated by stateify. + +package tcp + +import ( + "gvisor.dev/gvisor/pkg/state" +) + +func (offset *TSOffset) StateTypeName() string { + return "pkg/tcpip/internal/tcp.TSOffset" +} + +func (offset *TSOffset) StateFields() []string { + return []string{ + "milliseconds", + } +} + +func (offset *TSOffset) beforeSave() {} + +// +checklocksignore +func (offset *TSOffset) StateSave(stateSinkObject state.Sink) { + offset.beforeSave() + stateSinkObject.Save(0, &offset.milliseconds) +} + +func (offset *TSOffset) afterLoad() {} + +// +checklocksignore +func (offset *TSOffset) StateLoad(stateSourceObject state.Source) { + stateSourceObject.Load(0, &offset.milliseconds) +} + +func init() { + state.Register((*TSOffset)(nil)) +} |