mirror of
https://github.com/impact-eintr/netstack.git
synced 2025-10-12 08:10:05 +08:00
分片机制的单元测试 手动创建了两个ip报文分片 IP层从链路层获取这两个报文的时候会把它们合并成一个ip报文 这里我们不会继续分发给传输层
而是直接写回 将这个完整的ip报文整个包装 虽然这样在fdbase测试会触发错误(超过了1518),但在channel中并没有这个限制 测试通过 成功合并
This commit is contained in:
@@ -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) {
|
||||
|
Reference in New Issue
Block a user