Closed
Description
func (a *arrivalGroupAccumulator) run(in <-chan []cc.Acknowledgment, agWriter func(arrivalGroup)) {
init := false
group := arrivalGroup{}
for acks := range in {
for _, next := range acks {
if !init {
group.add(next)
init = true
continue
}
if next.Arrival.Before(group.arrival) {
// ignore out of order arrivals
continue
}
if next.Departure.After(group.departure) {
if interDepartureTimePkt(group, next) <= a.interDepartureThreshold {
group.add(next)
continue
}
if interArrivalTimePkt(group, next) <= a.interArrivalThreshold &&
interGroupDelayVariationPkt(group, next) < a.interGroupDelayVariationTreshold {
group.add(next)
continue
}
// println("Arrival len", len(group.packets), group.packets[len(group.packets)-1].Departure.Sub(group.packets[0].Departure).Milliseconds())
agWriter(group)
group = arrivalGroup{}
group.add(next)
}
}
}
}
The above code is excerpted from lines 23 to 55 of arrival_group_accumulator.go. After each new pkt is added, the group's departure_time is updated to the new packet's departure_time. In other words, as long as the time difference between the departure_time of the newly added packet and the previous packet is less than the threshold, it will be added to the group. How can we ensure that the time difference between the first packet and the last packet is less than 5 ms (the threshold)?
Metadata
Metadata
Assignees
Labels
No labels