分片机制的单元测试 手动创建了两个ip报文分片 IP层从链路层获取这两个报文的时候会把它们合并成一个ip报文 这里我们不会继续分发给传输层

而是直接写回 将这个完整的ip报文整个包装 虽然这样在fdbase测试会触发错误(超过了1518),但在channel中并没有这个限制 测试通过 成功合并
This commit is contained in:
impact-eintr
2022-11-28 15:56:21 +08:00
parent cd0d9492a0
commit c7c7374bbd
6 changed files with 28 additions and 9 deletions

View File

@@ -67,11 +67,25 @@ func (f *Fragmentation) Process(id uint32, first, last uint16, more bool, vv buf
}
f.mu.Unlock()
//res, done, consumed := r.process(first, last, more, vv)
log.Printf("[%d]的分片 [%d,%d) 合并中\n", id, first, last)
r.process(first, last, more, vv)
res, done, consumed := r.process(first, last, more, vv)
return buffer.VectorisedView{}, false
f.mu.Lock()
f.size += consumed
log.Printf("[%d]的分片 [%d,%d] 合并中\n", id, first, last)
if done {
f.release(r)
}
// Evict reassemblers if we are consuming more memory than highLimit until
// we reach lowLimit.
if f.size > f.highLimit {
tail := f.rList.Back()
for f.size > f.lowLimit && tail != nil {
f.release(tail)
tail = tail.Prev()
}
}
f.mu.Unlock()
return res, done
}
func (f *Fragmentation) release(r *reassembler) {