disable in-kernel RTP PT stats for kernels < 3.0

due to lack of bsearch() function

closes #150
changes/69/2669/1
Richard Fuchs 10 years ago
parent 79b78e6fd4
commit c6ff5e7c03

@ -17,7 +17,9 @@
#include <net/dst.h>
#include <linux/proc_fs.h>
#include <linux/spinlock.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
#include <linux/bsearch.h>
#endif
#include <linux/atomic.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include <linux/netfilter_ipv4.h>
@ -2182,6 +2184,7 @@ static inline int is_dtls(struct sk_buff *skb) {
return 1;
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
static int rtp_payload_match(const void *a, const void *b) {
const unsigned char *A = a, *B = b;
@ -2200,12 +2203,16 @@ static inline int rtp_payload_type(const struct rtp_header *hdr, const struct rt
return -1;
return match - tg->payload_types;
}
#endif
static unsigned int rtpengine46(struct sk_buff *skb, struct rtpengine_table *t, struct re_address *src, u_int8_t in_tos) {
struct udphdr *uh;
struct rtpengine_target *g;
struct sk_buff *skb2;
int err, rtp_pt_idx = -2;
int err;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
int rtp_pt_idx = -2;
#endif
unsigned int datalen;
u_int32_t *u32;
struct rtp_parsed rtp;
@ -2283,7 +2290,9 @@ src_check_ok:
if (g->target.rtcp_mux && is_muxed_rtcp(&rtp))
goto skip1;
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
rtp_pt_idx = rtp_payload_type(rtp.header, &g->target);
#endif
// Pass to userspace if SSRC has changed.
if (unlikely((g->target.ssrc) && (g->target.ssrc != rtp.header->ssrc)))
@ -2333,6 +2342,8 @@ out:
atomic64_inc(&g->stats.packets);
atomic64_add(datalen, &g->stats.bytes);
}
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
if (rtp_pt_idx >= 0) {
atomic64_inc(&g->rtp_stats[rtp_pt_idx].packets);
atomic64_add(datalen, &g->rtp_stats[rtp_pt_idx].bytes);
@ -2366,6 +2377,7 @@ out:
/* not RTP */ ;
else if (rtp_pt_idx == -1)
atomic64_inc(&g->stats.errors);
#endif
target_push(g);
table_push(t);

Loading…
Cancel
Save