The crypto layer doesn't need it, and the cost of an additional closure allocation for each incoming UDP packet is modest. Also, make the FrameConsumer the last parameter to IterateFrames. It seems a more natural ordering.