Содержимое пина, зафиксированного в go.mod sing-box-lx, одним коммитом без истории. Полная история SagerNet/gvisor — 1.45 ГБ и клонируется в каждой CI-джобе; наша дельта — одна вставка в одну функцию, история для неё не нужна. Module path github.com/sagernet/gvisor сохранён намеренно: на него опирается replace-директива суперпроекта. Патч поверх — отдельным коммитом, чтобы дельта читалась одним git show и переносилась на новый пин копированием. SPECS/TASKS/048-GVISOR_HANDSHAKE_NIL_CRASH
178 lines
4.1 KiB
Go
178 lines
4.1 KiB
Go
// automatically generated by stateify.
|
|
|
|
package gro
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/sagernet/gvisor/pkg/state"
|
|
)
|
|
|
|
func (gb *groBucket) StateTypeName() string {
|
|
return "pkg/tcpip/stack/gro.groBucket"
|
|
}
|
|
|
|
func (gb *groBucket) StateFields() []string {
|
|
return []string{
|
|
"count",
|
|
"packets",
|
|
"packetsPrealloc",
|
|
"allocIdxs",
|
|
}
|
|
}
|
|
|
|
func (gb *groBucket) beforeSave() {}
|
|
|
|
// +checklocksignore
|
|
func (gb *groBucket) StateSave(stateSinkObject state.Sink) {
|
|
gb.beforeSave()
|
|
stateSinkObject.Save(0, &gb.count)
|
|
stateSinkObject.Save(1, &gb.packets)
|
|
stateSinkObject.Save(2, &gb.packetsPrealloc)
|
|
stateSinkObject.Save(3, &gb.allocIdxs)
|
|
}
|
|
|
|
func (gb *groBucket) afterLoad(context.Context) {}
|
|
|
|
// +checklocksignore
|
|
func (gb *groBucket) StateLoad(ctx context.Context, stateSourceObject state.Source) {
|
|
stateSourceObject.Load(0, &gb.count)
|
|
stateSourceObject.Load(1, &gb.packets)
|
|
stateSourceObject.Load(2, &gb.packetsPrealloc)
|
|
stateSourceObject.Load(3, &gb.allocIdxs)
|
|
}
|
|
|
|
func (pk *groPacket) StateTypeName() string {
|
|
return "pkg/tcpip/stack/gro.groPacket"
|
|
}
|
|
|
|
func (pk *groPacket) StateFields() []string {
|
|
return []string{
|
|
"groPacketEntry",
|
|
"pkt",
|
|
"ipHdr",
|
|
"tcpHdr",
|
|
"initialLength",
|
|
"idx",
|
|
}
|
|
}
|
|
|
|
func (pk *groPacket) beforeSave() {}
|
|
|
|
// +checklocksignore
|
|
func (pk *groPacket) StateSave(stateSinkObject state.Sink) {
|
|
pk.beforeSave()
|
|
stateSinkObject.Save(0, &pk.groPacketEntry)
|
|
stateSinkObject.Save(1, &pk.pkt)
|
|
stateSinkObject.Save(2, &pk.ipHdr)
|
|
stateSinkObject.Save(3, &pk.tcpHdr)
|
|
stateSinkObject.Save(4, &pk.initialLength)
|
|
stateSinkObject.Save(5, &pk.idx)
|
|
}
|
|
|
|
func (pk *groPacket) afterLoad(context.Context) {}
|
|
|
|
// +checklocksignore
|
|
func (pk *groPacket) StateLoad(ctx context.Context, stateSourceObject state.Source) {
|
|
stateSourceObject.Load(0, &pk.groPacketEntry)
|
|
stateSourceObject.Load(1, &pk.pkt)
|
|
stateSourceObject.Load(2, &pk.ipHdr)
|
|
stateSourceObject.Load(3, &pk.tcpHdr)
|
|
stateSourceObject.Load(4, &pk.initialLength)
|
|
stateSourceObject.Load(5, &pk.idx)
|
|
}
|
|
|
|
func (gd *GRO) StateTypeName() string {
|
|
return "pkg/tcpip/stack/gro.GRO"
|
|
}
|
|
|
|
func (gd *GRO) StateFields() []string {
|
|
return []string{
|
|
"enabled",
|
|
"buckets",
|
|
"Dispatcher",
|
|
}
|
|
}
|
|
|
|
func (gd *GRO) beforeSave() {}
|
|
|
|
// +checklocksignore
|
|
func (gd *GRO) StateSave(stateSinkObject state.Sink) {
|
|
gd.beforeSave()
|
|
stateSinkObject.Save(0, &gd.enabled)
|
|
stateSinkObject.Save(1, &gd.buckets)
|
|
stateSinkObject.Save(2, &gd.Dispatcher)
|
|
}
|
|
|
|
func (gd *GRO) afterLoad(context.Context) {}
|
|
|
|
// +checklocksignore
|
|
func (gd *GRO) StateLoad(ctx context.Context, stateSourceObject state.Source) {
|
|
stateSourceObject.Load(0, &gd.enabled)
|
|
stateSourceObject.Load(1, &gd.buckets)
|
|
stateSourceObject.Load(2, &gd.Dispatcher)
|
|
}
|
|
|
|
func (l *groPacketList) StateTypeName() string {
|
|
return "pkg/tcpip/stack/gro.groPacketList"
|
|
}
|
|
|
|
func (l *groPacketList) StateFields() []string {
|
|
return []string{
|
|
"head",
|
|
"tail",
|
|
}
|
|
}
|
|
|
|
func (l *groPacketList) beforeSave() {}
|
|
|
|
// +checklocksignore
|
|
func (l *groPacketList) StateSave(stateSinkObject state.Sink) {
|
|
l.beforeSave()
|
|
stateSinkObject.Save(0, &l.head)
|
|
stateSinkObject.Save(1, &l.tail)
|
|
}
|
|
|
|
func (l *groPacketList) afterLoad(context.Context) {}
|
|
|
|
// +checklocksignore
|
|
func (l *groPacketList) StateLoad(ctx context.Context, stateSourceObject state.Source) {
|
|
stateSourceObject.Load(0, &l.head)
|
|
stateSourceObject.Load(1, &l.tail)
|
|
}
|
|
|
|
func (e *groPacketEntry) StateTypeName() string {
|
|
return "pkg/tcpip/stack/gro.groPacketEntry"
|
|
}
|
|
|
|
func (e *groPacketEntry) StateFields() []string {
|
|
return []string{
|
|
"next",
|
|
"prev",
|
|
}
|
|
}
|
|
|
|
func (e *groPacketEntry) beforeSave() {}
|
|
|
|
// +checklocksignore
|
|
func (e *groPacketEntry) StateSave(stateSinkObject state.Sink) {
|
|
e.beforeSave()
|
|
stateSinkObject.Save(0, &e.next)
|
|
stateSinkObject.Save(1, &e.prev)
|
|
}
|
|
|
|
func (e *groPacketEntry) afterLoad(context.Context) {}
|
|
|
|
// +checklocksignore
|
|
func (e *groPacketEntry) StateLoad(ctx context.Context, stateSourceObject state.Source) {
|
|
stateSourceObject.Load(0, &e.next)
|
|
stateSourceObject.Load(1, &e.prev)
|
|
}
|
|
|
|
func init() {
|
|
state.Register((*groBucket)(nil))
|
|
state.Register((*groPacket)(nil))
|
|
state.Register((*GRO)(nil))
|
|
state.Register((*groPacketList)(nil))
|
|
state.Register((*groPacketEntry)(nil))
|
|
}
|