Files
netstack/tcpip/buffer/prependable.go
impact-eintr c7c7374bbd 分片机制的单元测试 手动创建了两个ip报文分片 IP层从链路层获取这两个报文的时候会把它们合并成一个ip报文 这里我们不会继续分发给传输层
而是直接写回 将这个完整的ip报文整个包装 虽然这样在fdbase测试会触发错误(超过了1518),但在channel中并没有这个限制 测试通过 成功合并
2022-11-28 15:56:21 +08:00

34 lines
673 B
Go

package buffer
// prependable 可预先考虑分配的
type Prependable struct {
buf View
usedIdx int
}
func NewPrependable(size int) Prependable {
return Prependable{buf: NewView(size), usedIdx: size}
}
func NewPrependableFromView(v View) Prependable {
return Prependable{buf: v, usedIdx: 0}
}
func (p Prependable) View() View {
return p.buf[p.usedIdx:]
}
func (p Prependable) UsedLength() int {
return len(p.buf) - p.usedIdx
}
// 从内到外暴露报文头的协议 eth|ipv4|tcp
func (p *Prependable) Prepend(size int) []byte {
if size > p.usedIdx {
return nil
}
p.usedIdx -= size
return p.View()[:size:size] // p.buf[p.usedIdx:p.usedIdx+size:size]
}