diff --git a/kernel-module/nft_rtpengine.c b/kernel-module/nft_rtpengine.c index 712dc11b4..e70a0da3b 100644 --- a/kernel-module/nft_rtpengine.c +++ b/kernel-module/nft_rtpengine.c @@ -6988,6 +6988,14 @@ static int ring_buffer_insert(int action, struct rtpengine_table *t, struct rtpe } +// pull past the transport (UDP) header and trim to correct length +static void rtpe_pull_trim(struct sk_buff *skb, unsigned int datalen) { + skb_gso_reset(skb); + skb_pull(skb, skb->transport_header - skb->network_header + sizeof(struct udphdr)); + skb_trim(skb, datalen); +} + + static int rtpengine46(struct sk_buff *oskb, struct rtpengine_table *t, struct re_address *src, struct re_address *dst, uint8_t in_tos, struct net *net) @@ -7039,11 +7047,7 @@ static int rtpengine46(struct sk_buff *oskb, if (!skb) goto out_target; - skb_gso_reset(skb); - - // pull and trim to data - skb_pull(skb, skb->transport_header - skb->network_header + sizeof(*uh)); - skb_trim(skb, datalen); + rtpe_pull_trim(skb, datalen); // all our outputs filled? _r_lock(&g->outputs_lock, flags);