[Click] patches to build linuxmodule on 2.6.12
David Claffey
dclaffey at jjplus.com
Tue May 23 13:49:53 EDT 2006
I also have some minor patches I didn't post. I made the changes to build the
linuxmodule on a 2.6.12 kernel running on a different architecture (LinkGear-100
SH4 platform). I didn't post them because I haven't had time to comfirm my
changes are correct or if there were a better solution. But maybe they are useful.
For example, the SH4 is sensitive to alignment and I needed to change some #ifs
to #ifdefs for the build to work. Now maybe I needed to change how and if the
macro HAVE_INDIFFERENT_ALIGNMENT is defined. Not sure.
I also have a 2.6.12 kernel patch generated from the 2.6.11.6 that was in CVS,
if anyone needs it.
- David
diff -Naur --exclude '*.orig' --exclude '*~' --exclude '#*' --exclude CVS
--exclude '.#*' click/config.h.in click-sh4/config.h.in
--- click/config.h.in 2006-03-28 10:16:58.000000000 -0500
+++ click-sh4/config.h.in 2006-04-06 13:40:42.000000000 -0400
@@ -17,6 +17,7 @@
/* Define if PollDevice should run fast to get good benchmark numbers */
#undef CLICK_WARP9
+#ifndef __KERNEL__
/* Define if you have the __builtin_clz function. */
#undef HAVE___BUILTIN_CLZ
@@ -34,6 +35,7 @@
/* Define if you have the __builtin_ffsll function. */
#undef HAVE___BUILTIN_FFSLL
+#endif /* __KERNEL__ */
/* Define if the va_list type is addressable. */
#undef HAVE_ADDRESSABLE_VA_LIST
@@ -150,8 +152,10 @@
#endif
/* Define stuff under tools or a user-level driver. */
-#if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL)
-# include <click/config-userlevel.h>
+#ifndef __KERNEL__
+# if defined(CLICK_USERLEVEL) || defined(CLICK_TOOL)
+# include <click/config-userlevel.h>
+# endif
#endif
#endif /* CLICK_CONFIG_H */
diff -Naur --exclude '*.orig' --exclude '*~' --exclude '#*' --exclude CVS
--exclude '.#*' click/elements/tcpudp/tcprewriter.cc
click-sh4/elements/tcpudp/tcprewriter.cc
--- click/elements/tcpudp/tcprewriter.cc 2006-02-22 02:50:07.000000000 -0500
+++ click-sh4/elements/tcpudp/tcprewriter.cc 2006-04-06 13:40:42.000000000 -0400
@@ -77,7 +77,7 @@
csum_delta += ~*csum & 0xFFFF;
for (opt += 2; opt < end_sack; opt += 8) {
-#if HAVE_INDIFFERENT_ALIGNMENT
+#ifdef HAVE_INDIFFERENT_ALIGNMENT
uint32_t *uopt = reinterpret_cast<uint32_t *>(opt);
uopt[0] = htonl(new_ack(ntohl(uopt[0])));
uopt[1] = htonl(new_ack(ntohl(uopt[1])));
diff -Naur --exclude '*.orig' --exclude '*~' --exclude '#*' --exclude CVS
--exclude '.#*' click/elements/userlevel/fakepcap.cc
click-sh4/elements/userlevel/fakepcap.cc
--- click/elements/userlevel/fakepcap.cc 2005-03-14 11:55:33.000000000 -0500
+++ click-sh4/elements/userlevel/fakepcap.cc 2006-04-06 13:40:42.000000000 -0400
@@ -98,7 +98,7 @@
return dlt;
}
-#if HAVE_INDIFFERENT_ALIGNMENT
+#ifdef HAVE_INDIFFERENT_ALIGNMENT
#define unaligned_net_short(v) (ntohs(*reinterpret_cast<const uint16_t*>(v)))
#define UNALIGNED_NET_SHORT_EQ(x, y) ((x) == htons((y)))
#else
@@ -286,7 +286,7 @@
if (!iph)
return false;
-#if !HAVE_INDIFFERENT_ALIGNMENT
+#ifndef HAVE_INDIFFERENT_ALIGNMENT
// Machine may crash if we try to access 'iph'. Align it on a word
// boundary.
uintptr_t header_ptr = reinterpret_cast<uintptr_t>(iph);
diff -Naur --exclude '*.orig' --exclude '*~' --exclude '#*' --exclude CVS
--exclude '.#*' click/elements/userlevel/fromfile.cc
click-sh4/elements/userlevel/fromfile.cc
--- click/elements/userlevel/fromfile.cc 2006-01-09 14:03:47.000000000 -0500
+++ click-sh4/elements/userlevel/fromfile.cc 2006-04-06 13:40:42.000000000 -0400
@@ -435,7 +435,7 @@
if (_pos + size <= _len) {
const uint8_t *chunk = _buffer + _pos;
_pos += size;
-#if HAVE_INDIFFERENT_ALIGNMENT
+#ifdef HAVE_INDIFFERENT_ALIGNMENT
return reinterpret_cast<const uint8_t *>(chunk);
#else
// make a copy if required for alignment
diff -Naur --exclude '*.orig' --exclude '*~' --exclude '#*' --exclude CVS
--exclude '.#*' click/include/click/atomic.hh click-sh4/include/click/atomic.hh
--- click/include/click/atomic.hh 2006-01-05 13:33:54.000000000 -0500
+++ click-sh4/include/click/atomic.hh 2006-04-06 13:40:42.000000000 -0400
@@ -8,6 +8,10 @@
# else
# define CLICK_ATOMIC_VAL __atomic_fool_gcc(&_val)
# endif
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0)
+# define __save_flags_cli(x) local_irq_save(x)
+# define __restore_flags(x) local_irq_restore(x)
+# endif
# ifdef __SMP__
# define CLICK_ATOMIC_LOCK "lock ; "
# else
diff -Naur --exclude '*.orig' --exclude '*~' --exclude '#*' --exclude CVS
--exclude '.#*' click/linuxmodule/Makefile.in click-sh4/linuxmodule/Makefile.in
--- click/linuxmodule/Makefile.in 2006-03-22 15:13:54.000000000 -0500
+++ click-sh4/linuxmodule/Makefile.in 2006-04-06 13:40:42.000000000 -0400
@@ -79,7 +79,7 @@
LINUXCFLAGS = $(shell echo "$(CFLAGS)" | sed -e s,-fno-unit-at-a-time,, \
-e s,-Wstrict-prototypes,, -e s,-Wdeclaration-after-statement,, \
-e s,-Wno-pointer-sign,, -e s,-fno-common,,)
-CLICKCPPFLAGS = @CPPFLAGS@ -DCLICK_LINUXMODULE
+CLICKCPPFLAGS = @CPPFLAGS@ $(CPPFLAGS) -DCLICK_LINUXMODULE
CLICKCFLAGS = @CFLAGS_NDEBUG@
CLICKCXXFLAGS = @CXXFLAGS_NDEBUG@
CLICKDEPCFLAGS = -Wp,-MD,$(depfile)
@@ -106,7 +106,7 @@
obj-m += $(INSTALLOBJS)
-click-objs := $(LIB_C_OBJS) $(LIB_CXX_OBJS) $(STD_ELEMENT_OBJS) \
+click-objs = $(LIB_C_OBJS) $(LIB_CXX_OBJS) $(STD_ELEMENT_OBJS) \
$(ELEMENT_OBJS) $(LINUXMODULE_C_OBJS) $(LINUXMODULE_CXX_OBJS) \
elements.o
proclikefs-objs := proclikefs_.o
Eddie Kohler wrote:
> And thanks, also, for this!
>
> Eddie
>
>
> David Claffey wrote:
>> I have the click linuxmodule and the madwifi-ng driver running on
>> linux-2.6.12. I'm using todevice() to send packets out the ath
>> device in monitor mode. But this only works after adding the
>> following patch:
>> --- click/elements/linuxmodule/todevice.cc
>> +++ tmp/elements/linuxmodule/todevice.cc
>> @@ -383,6 +383,12 @@
>> skb_put(skb1, 60 - skb1->len);
>> }
>>
>> + skb1->dev = _dev;
>> +
>> int ret;
>> #if HAVE_LINUX_POLLING
>> if (_dev->polling > 0)
>> ret = _dev->tx_queue(_dev, skb1);
>> else
>> #endif
>> {
>> ret = _dev->hard_start_xmit(skb1, _dev);
>> _hard_start++;
>> }
>>
>> Todevice() passes the skb to ieee80211_hardstart(struct sk_buff *skb,
>> struct net_device *dev) which then calls
>> ieee80211_monitor_encap(struct ieee80211vap *vap, struct sk_buff
>> *skb). The problem arises when ieee80211_monitor_encap() references
>> skb->dev->type with skb->dev NULL. Can anyone suggest which function
>> should set skb->dev, todevice or ieee80211_hardstart?
>>
>> - David
>> _______________________________________________
>> click mailing list
>> click at amsterdam.lcs.mit.edu
>> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>
More information about the click
mailing list