From e8cf6733e490cf78c1e5f5f58c3655011fb8ae22 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Wed, 18 Nov 2009 15:56:57 -0800 Subject: [PATCH] datapath: Fix warning building datapath on pre-2.6.24 kernels. The Linux 'min' macro checks that its arguments have the same type, and if not the compiler reports a message about incompatible pointer types. On pre-2.6.24 kernels skb_headroom() returns int, so this code was firing a warning: unsigned headroom = max(min_headroom, skb_headroom(skb)); This commit makes skb_headroom() return an unsigned int regardless of kernel version. --- datapath/linux-2.6/compat-2.6/include/linux/skbuff.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/datapath/linux-2.6/compat-2.6/include/linux/skbuff.h b/datapath/linux-2.6/compat-2.6/include/linux/skbuff.h index 28317212..dd9bfa37 100644 --- a/datapath/linux-2.6/compat-2.6/include/linux/skbuff.h +++ b/datapath/linux-2.6/compat-2.6/include/linux/skbuff.h @@ -5,6 +5,17 @@ #include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) +/* In version 2.6.24 the return type of skb_headroom() changed from 'int' to + * 'unsigned int'. We use skb_headroom() as one arm of a min(a,b) invocation + * in make_writable() in actions.c, so we need the correct type. */ +#define skb_headroom rpl_skb_headroom +static inline unsigned int rpl_skb_headroom(const struct sk_buff *skb) +{ + return skb->data - skb->head; +} +#endif + #ifndef HAVE_SKB_COPY_FROM_LINEAR_DATA_OFFSET static inline void skb_copy_from_linear_data_offset(const struct sk_buff *skb, const int offset, void *to, -- 2.30.2