diff -Naur click_git11022008.orig/config-linuxmodule.h.in click_git11022008/config-linuxmodule.h.in --- click_git11022008.orig/config-linuxmodule.h.in 2008-02-11 16:14:33.1000000000 +0000 +++ click_git11022008/config-linuxmodule.h.in 2008-02-11 16:15:26.000000000 +0000 @@ -31,6 +31,9 @@ /* Define if 'int64_t' is typedefed to 'long long' in linuxmodule. */ #undef HAVE_INT64_IS_LONG_LONG_LINUXMODULE +/* Define if 'uintptr_t' is typedefed in linuxmodule */ +#undef HAVE_UINTPTR_T_LINUXMODULE + /* Define to enable assertion checking. Failed assertions will print a message and optionally stop the router. */ #undef HAVE_KERNEL_ASSERT @@ -86,12 +89,13 @@ #endif /* Include integer type definitions. */ -#if !HAVE_LINUXMODULE_2_6 -# include -#endif +#include #include +#include typedef ptrdiff_t intptr_t; +#ifndef HAVE_UINTPTR_T_LINUXMODULE typedef unsigned long uintptr_t; /* XXX? */ +#endif /* Define HAVE_INT64_IS_LONG based on HAVE_INT64_IS_LONG_LINUXMODULE. */ #ifdef HAVE_INT64_IS_LONG_LINUXMODULE @@ -129,6 +133,11 @@ /* Fix incompatibilities between some Linux versions and Click/C++. */ #include +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) +struct net_device *dev_get_by_name(const char *name); +int dev_ioctl(unsigned int cmd, void __user *arg); +#endif + #endif /* __cplusplus */ /* Define assert macro. */ diff -Naur click_git11022008.orig/configure click_git11022008/configure --- click_git11022008.orig/configure 2008-02-11 16:14:33.1000000000 +0000 +++ click_git11022008/configure 2008-02-11 16:15:26.000000000 +0000 @@ -14428,6 +14428,8 @@ LINUX_CFLAGS="`sed -e s,-Iinclude,-I$linuxdir/include,g \ -e 's,-W^ *,,g' \ -e 's,-Wno-pointer-sign,,g' \ + -e s,-I$linuxdir/include/asm/mach-generic/,,g \ + -e s,-I$linuxdir/include/asm/mach-default/,,g \ -e s,-fno-unit-at-a-time,,g \ -e s,-Wstrict-prototypes,,g \ -e s,-Wdeclaration-after-statement,,g \ @@ -14443,7 +14445,7 @@ SAVE_CXX="$CXX" CXX="$KERNEL_CXX" saveflags="$CPPFLAGS" - CPPFLAGS="$saveflags -D__KERNEL__ -I$linuxdir/include $LINUX_CFLAGS" + CPPFLAGS="$saveflags -D__KERNEL__ -I$linuxdir/include -I$linuxdir/include/asm/mach-generic -I$linuxdir/include/asm/mach-default $LINUX_CFLAGS" # CLICK_LINUXMODULE_PROLOGUE() @@ -14841,6 +14843,83 @@ fi + { echo "$as_me:$LINENO: checking whether typename uintptr_t is defined in the Linux kernel" >&5 +echo $ECHO_N "checking whether typename uintptr_t is defined in the Linux kernel... $ECHO_C" >&6; } +if test "${ac_cv_uintptr_t_in_linuxmodule+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#if HAVE_LINUXMODULE_2_6 +# define KBUILD_STR(s) #s +# define KBUILD_BASENAME KBUILD_STR(click) +# define KBUILD_MODNAME KBUILD_STR(click) +#endif +#define new xxx_new +#define this xxx_this +#define delete xxx_delete +#define class xxx_class +#define virtual xxx_virtual +#define typename xxx_typename +#define private xxx_private +#define protected xxx_protected +#define public xxx_public +#define namespace xxx_namespace +#include +#include +void f1() { +uintptr_t i; +} +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_uintptr_t_in_linuxmodule=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_cv_uintptr_t_in_linuxmodule=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_uintptr_t_in_linuxmodule" >&5 +echo "${ECHO_T}$ac_cv_uintptr_t_in_linuxmodule" >&6; } + if test $ac_cv_uintptr_t_in_linuxmodule = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_UINTPTR_T_LINUXMODULE 1 +_ACEOF + + fi + + { echo "$as_me:$LINENO: checking whether struct sk_buff has a security member" >&5 echo $ECHO_N "checking whether struct sk_buff has a security member... $ECHO_C" >&6; } if test "${ac_cv_linuxmodule_skbuff_security+set}" = set; then diff -Naur click_git11022008.orig/configure.in click_git11022008/configure.in --- click_git11022008.orig/configure.in 2008-02-11 16:14:33.1000000000 +0000 +++ click_git11022008/configure.in 2008-02-11 16:15:26.000000000 +0000 @@ -841,6 +841,8 @@ LINUX_CFLAGS="`sed -e s,-Iinclude,-I$linuxdir/include,g \ -e 's,-W[^ ]*,,g' \ -e 's,-Wno-pointer-sign,,g' \ + -e s,-I$linuxdir/include/asm/mach-generic/,,g \ + -e s,-I$linuxdir/include/asm/mach-default/,,g \ -e s,-fno-unit-at-a-time,,g \ -e s,-Wstrict-prototypes,,g \ -e s,-Wdeclaration-after-statement,,g \ @@ -855,7 +857,7 @@ SAVE_CXX="$CXX" CXX="$KERNEL_CXX" saveflags="$CPPFLAGS" - CPPFLAGS="$saveflags -D__KERNEL__ -I$linuxdir/include $LINUX_CFLAGS" + CPPFLAGS="$saveflags -D__KERNEL__ -I$linuxdir/include -I$linuxdir/include/asm/mach-generic -I$linuxdir/include/asm/mach-default $LINUX_CFLAGS" # CLICK_LINUXMODULE_PROLOGUE() @@ -932,6 +934,17 @@ fi + AC_CACHE_CHECK([whether typename uintptr_t is defined in the Linux kernel], + ac_cv_uintptr_t_in_linuxmodule, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[ +#include +void f1() { +uintptr_t i; +}]], [[]])], ac_cv_uintptr_t_in_linuxmodule=yes, ac_cv_uintptr_t_in_linuxmodule=no)]) + if test $ac_cv_uintptr_t_in_linuxmodule = yes; then + AC_DEFINE([HAVE_UINTPTR_T_LINUXMODULE], [1], [Define if 'uintptr_t' is typedefed in linuxmodule.]) + fi + + AC_CACHE_CHECK([whether struct sk_buff has a security member], [ac_cv_linuxmodule_skbuff_security], [AC_LANG_C AC_COMPILE_IFELSE([AC_LANG_PROGRAM([CLICK_LINUXMODULE_PROLOGUE()[ diff -Naur click_git11022008.orig/drivers/e1000-7.x/src/Makefile click_git11022008/drivers/e1000-7.x/src/Makefile --- click_git11022008.orig/drivers/e1000-7.x/src/Makefile 2008-02-11 16:14:34.1000000000 +0000 +++ click_git11022008/drivers/e1000-7.x/src/Makefile 2008-02-11 16:15:26.000000000 +0000 @@ -42,7 +42,8 @@ # Kernel Search Path # All the places we look for kernel source -KSP := /lib/modules/$(BUILD_KERNEL)/build \ +KSP := /usr/src/linux-2.6.24/ \ + /lib/modules/$(BUILD_KERNEL)/build \ /lib/modules/$(BUILD_KERNEL)/source \ /usr/src/linux-$(BUILD_KERNEL) \ /usr/src/linux-$($(BUILD_KERNEL) | sed 's/-.*//') \ diff -Naur click_git11022008.orig/drivers/e1000-7.x/src/e1000_main.c click_git11022008/drivers/e1000-7.x/src/e1000_main.c --- click_git11022008.orig/drivers/e1000-7.x/src/e1000_main.c 2008-02-11 16:14:34.1000000000 +0000 +++ click_git11022008/drivers/e1000-7.x/src/e1000_main.c 2008-02-11 16:15:26.000000000 +0000 @@ -447,7 +447,8 @@ uint16_t vid = adapter->hw.mng_cookie.vlan_id; uint16_t old_vid = adapter->mng_vlan_id; if (adapter->vlgrp) { - if (!adapter->vlgrp->vlan_devices[vid]) { +/* if (!adapter->vlgrp->vlan_devices[vid]) {*/ +if (!vlan_group_get_device(adapter->vlgrp, vid)) { if (adapter->hw.mng_cookie.status & E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) { e1000_vlan_rx_add_vid(netdev, vid); @@ -457,7 +458,8 @@ if ((old_vid != (uint16_t)E1000_MNG_VLAN_NONE) && (vid != old_vid) && - !adapter->vlgrp->vlan_devices[old_vid]) + !vlan_group_get_device(adapter->vlgrp, old_vid)) +/* !adapter->vlgrp->vlan_devices[old_vid])*/ e1000_vlan_rx_kill_vid(netdev, old_vid); } else adapter->mng_vlan_id = vid; @@ -1170,7 +1172,7 @@ adapter->phy_info_timer.data = (unsigned long) adapter; INIT_WORK(&adapter->reset_task, - (void (*)(void *))e1000_reset_task, netdev); + (void (*)(void *))e1000_reset_task); e1000_check_options(adapter); @@ -1606,7 +1608,8 @@ if ((adapter->hw.mng_cookie.status & E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) && !(adapter->vlgrp && - adapter->vlgrp->vlan_devices[adapter->mng_vlan_id])) { + vlan_group_get_device(adapter->vlgrp, adapter->mng_vlan_id))) { +/* adapter->vlgrp->vlan_devices[adapter->mng_vlan_id])) {*/ e1000_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id); } #endif @@ -3043,36 +3046,33 @@ return err; } - hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); + hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); mss = skb_shinfo(skb)->gso_size; if (skb->protocol == htons(ETH_P_IP)) { - skb->nh.iph->tot_len = 0; - skb->nh.iph->check = 0; - skb->h.th->check = - ~csum_tcpudp_magic(skb->nh.iph->saddr, - skb->nh.iph->daddr, - 0, - IPPROTO_TCP, - 0); + struct iphdr *iph = ip_hdr(skb); + iph->tot_len = 0; + iph->check = 0; + tcp_hdr(skb)->check = ~csum_tcpudp_magic(iph->saddr, + iph->daddr, 0, + IPPROTO_TCP, + 0); cmd_length = E1000_TXD_CMD_IP; - ipcse = skb->h.raw - skb->data - 1; + ipcse = skb_transport_offset(skb) - 1; #ifdef NETIF_F_TSO6 } else if (skb_shinfo(skb)->gso_type == SKB_GSO_TCPV6) { - skb->nh.ipv6h->payload_len = 0; - skb->h.th->check = - ~csum_ipv6_magic(&skb->nh.ipv6h->saddr, - &skb->nh.ipv6h->daddr, - 0, - IPPROTO_TCP, - 0); - ipcse = 0; + ipv6_hdr(skb)->payload_len = 0; + tcp_hdr(skb)->check = + ~csum_ipv6_magic(&ipv6_hdr(skb)->saddr, + &ipv6_hdr(skb)->daddr, + 0, IPPROTO_TCP, 0); + ipcse = 0; #endif } - ipcss = skb->nh.raw - skb->data; - ipcso = (void *)&(skb->nh.iph->check) - (void *)skb->data; - tucss = skb->h.raw - skb->data; - tucso = (void *)&(skb->h.th->check) - (void *)skb->data; - tucse = 0; + ipcss = skb_network_offset(skb); + ipcso = (void *)&(ip_hdr(skb)->check) - (void *)skb->data; + tucss = skb_transport_offset(skb); + tucso = (void *)&(tcp_hdr(skb)->check) - (void *)skb->data; + tucse = 0; cmd_length |= (E1000_TXD_CMD_DEXT | E1000_TXD_CMD_TSE | E1000_TXD_CMD_TCP | (skb->len - (hdr_len))); @@ -3114,7 +3114,7 @@ uint8_t css; if (likely(skb->ip_summed == CHECKSUM_PARTIAL)) { - css = skb->h.raw - skb->data; + css = skb_transport_offset(skb); i = tx_ring->next_to_use; buffer_info = &tx_ring->buffer_info[i]; @@ -3469,7 +3469,7 @@ /* TSO Workaround for 82571/2/3 Controllers -- if skb->data * points to just header, pull a few bytes of payload from * frags into skb->data */ - hdr_len = ((skb->h.raw - skb->data) + (skb->h.th->doff << 2)); + hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb); if (skb->data_len && (hdr_len == (skb->len - skb->data_len))) { switch (adapter->hw.mac_type) { unsigned int pull_size; @@ -5176,10 +5176,7 @@ uint32_t vfta, index; e1000_irq_disable(adapter); - - if (adapter->vlgrp) - adapter->vlgrp->vlan_devices[vid] = NULL; - + vlan_group_set_device(adapter->vlgrp, vid, NULL); e1000_irq_enable(adapter); if ((adapter->hw.mng_cookie.status & @@ -5205,7 +5202,7 @@ if (adapter->vlgrp) { uint16_t vid; for (vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) { - if (!adapter->vlgrp->vlan_devices[vid]) + if (!vlan_group_get_device(adapter->vlgrp, vid)) continue; e1000_vlan_rx_add_vid(adapter->netdev, vid); } diff -Naur click_git11022008.orig/drivers/e1000-7.x/src/kcompat.h click_git11022008/drivers/e1000-7.x/src/kcompat.h --- click_git11022008.orig/drivers/e1000-7.x/src/kcompat.h 2008-02-11 16:14:34.1000000000 +0000 +++ click_git11022008/drivers/e1000-7.x/src/kcompat.h 2008-02-11 16:15:26.000000000 +0000 @@ -1099,6 +1099,9 @@ #endif /* < 2.6.19 */ /*****************************************************************************/ +#if ( LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22) ) +#undef ETHTOOL_GPERMADDR +#endif /* > 2.6.22 */ #endif /* _KCOMPAT_H_ */ diff -Naur click_git11022008.orig/elements/linuxmodule/anydevice.cc click_git11022008/elements/linuxmodule/anydevice.cc --- click_git11022008.orig/elements/linuxmodule/anydevice.cc 2008-02-11 16:14:36.1000000000 +0000 +++ click_git11022008/elements/linuxmodule/anydevice.cc 2008-02-11 16:19:18.000000000 +0000 @@ -31,6 +31,7 @@ #include #endif #include +#include CLICK_CXX_UNPROTECT #include @@ -66,7 +67,9 @@ } if (_dev && _promisc) + rtnl_lock(); dev_set_promiscuity(_dev, 1); + rtnl_unlock(); #if HAVE_NET_ENABLE_TIMESTAMP if (_dev && _timestamp) net_enable_timestamp(); @@ -89,7 +92,9 @@ click_chatter("%s: device '%s' came up", declaration().c_str(), _devname.c_str()); if (_dev && _promisc) + rtnl_lock(); dev_set_promiscuity(_dev, -1); + rtnl_unlock(); #if HAVE_NET_ENABLE_TIMESTAMP if (_dev && _timestamp) net_disable_timestamp(); @@ -106,7 +111,9 @@ adm->insert(this, locked); if (_dev && _promisc) + rtnl_lock(); dev_set_promiscuity(_dev, 1); + rtnl_unlock(); #if HAVE_NET_ENABLE_TIMESTAMP if (_dev && _timestamp) net_enable_timestamp(); @@ -117,7 +124,9 @@ AnyDevice::clear_device(AnyDeviceMap *adm) { if (_dev && _promisc) + rtnl_lock(); dev_set_promiscuity(_dev, -1); + rtnl_unlock(); #if HAVE_NET_ENABLE_TIMESTAMP if (_dev && _timestamp) net_disable_timestamp(); @@ -233,7 +242,12 @@ return 0; read_lock(&dev_base_lock); net_device *dev; - for (dev = dev_base; dev; dev = dev->next) + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24) + for_each_netdev(&init_net, dev) +#else + for_each_netdev(dev) +#endif if ((dev->type == ARPHRD_ETHER || dev->type == ARPHRD_80211) && memcmp(en, dev->dev_addr, 6) == 0) { dev_hold(dev); // dev_get_by_name does dev_hold; so diff -Naur click_git11022008.orig/elements/linuxmodule/fromdevice.cc click_git11022008/elements/linuxmodule/fromdevice.cc --- click_git11022008.orig/elements/linuxmodule/fromdevice.cc 2008-02-11 16:14:36.1000000000 +0000 +++ click_git11022008/elements/linuxmodule/fromdevice.cc 2008-02-11 16:15:26.000000000 +0000 @@ -257,7 +257,7 @@ assert(skb_shared(skb) == 0); /* else skb = skb_clone(skb, GFP_ATOMIC); */ /* Retrieve the MAC header. */ - skb_push(skb, skb->data - skb->mac.raw); + skb_push(skb, skb->data - skb->mac_header); Packet *p = Packet::make(skb); _queue[_tail] = p; /* hand it to run_task */ diff -Naur click_git11022008.orig/elements/linuxmodule/todevice.cc click_git11022008/elements/linuxmodule/todevice.cc --- click_git11022008.orig/elements/linuxmodule/todevice.cc 2008-02-11 16:14:36.1000000000 +0000 +++ click_git11022008/elements/linuxmodule/todevice.cc 2008-02-11 16:15:26.000000000 +0000 @@ -305,7 +305,7 @@ // to call qdisc_restart() ourselves, outside of net_bh(). if (is_polling && !busy && _dev->qdisc->q.qlen) { _dev->tx_eob(_dev); - netif_wake_queue(_dev); + //netif_wake_queue(_dev); } #endif diff -Naur click_git11022008.orig/elements/linuxmodule/tohost.cc click_git11022008/elements/linuxmodule/tohost.cc --- click_git11022008.orig/elements/linuxmodule/tohost.cc 2008-02-11 16:14:36.1000000000 +0000 +++ click_git11022008/elements/linuxmodule/tohost.cc 2008-02-11 16:15:26.000000000 +0000 @@ -141,7 +141,7 @@ // do not call eth_type_trans; it changes pkt_type! Instead, do its work // directly. - skb->mac.raw = skb->data; + skb->mac_header = skb->data; skb_pull(skb, 14); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) diff -Naur click_git11022008.orig/include/click/packet.hh click_git11022008/include/click/packet.hh --- click_git11022008.orig/include/click/packet.hh 2008-02-11 16:14:38.1000000000 +0000 +++ click_git11022008/include/click/packet.hh 2008-02-11 16:15:26.000000000 +0000 @@ -452,7 +452,8 @@ Packet::mac_header() const { #if CLICK_LINUXMODULE - return skb()->mac.raw; + //return skb()->mac.raw; + return skb()->mac_header; #else return _mac; #endif @@ -462,7 +463,8 @@ Packet::network_header() const { #if CLICK_LINUXMODULE - return skb()->nh.raw; +// return skb()->nh.raw; + return skb()->network_header; #else return _nh; #endif @@ -472,7 +474,8 @@ Packet::transport_header() const { #if CLICK_LINUXMODULE - return skb()->h.raw; + //return skb()->h.raw; + return skb()->transport_header; #else return _h; #endif @@ -567,8 +570,12 @@ # if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 13) memcpy(&skb()->stamp, ×tamp, 8); # else +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22) + skb()->tstamp = timeval_to_ktime(timestamp.timeval()); +#else skb_set_timestamp(skb(), ×tamp.timeval()); -# endif +#endif +#endif #else _timestamp = timestamp; #endif @@ -904,7 +911,7 @@ Packet::set_mac_header(const unsigned char *h) { #if CLICK_LINUXMODULE /* Linux kernel module */ - skb()->mac.raw = const_cast(h); + skb()->mac_header = const_cast(h); #else /* User-space and BSD kernel module */ _mac = const_cast(h); #endif @@ -914,8 +921,8 @@ Packet::set_mac_header(const unsigned char *h, uint32_t len) { #if CLICK_LINUXMODULE /* Linux kernel module */ - skb()->mac.raw = const_cast(h); - skb()->nh.raw = const_cast(h) + len; + skb()->mac_header = const_cast(h); + skb()->network_header = const_cast(h) + len; #else /* User-space and BSD kernel module */ _mac = const_cast(h); _nh = const_cast(h) + len; @@ -956,8 +963,8 @@ Packet::set_network_header(const unsigned char *h, uint32_t len) { #if CLICK_LINUXMODULE /* Linux kernel module */ - skb()->nh.raw = const_cast(h); - skb()->h.raw = const_cast(h) + len; + skb()->network_header = const_cast(h); + skb()->transport_header = const_cast(h) + len; #else /* User-space and BSD kernel module */ _nh = const_cast(h); _h = const_cast(h) + len; @@ -968,7 +975,7 @@ Packet::set_network_header_length(uint32_t len) { #if CLICK_LINUXMODULE /* Linux kernel module */ - skb()->h.raw = skb()->nh.raw + len; + skb()->transport_header = skb()->network_header + len; #else /* User-space and BSD kernel module */ _h = _nh + len; #endif @@ -1076,9 +1083,9 @@ _h += (_h ? shift : 0); #else struct sk_buff *mskb = skb(); - mskb->mac.raw += (mskb->mac.raw ? shift : 0); - mskb->nh.raw += (mskb->nh.raw ? shift : 0); - mskb->h.raw += (mskb->h.raw ? shift : 0); + mskb->mac_header += (mskb->mac_header ? shift : 0); + mskb->network_header += (mskb->network_header ? shift : 0); + mskb->transport_header += (mskb->transport_header ? shift : 0); #endif } diff -Naur click_git11022008.orig/lib/glue.cc click_git11022008/lib/glue.cc --- click_git11022008.orig/lib/glue.cc 2008-02-11 16:14:38.1000000000 +0000 +++ click_git11022008/lib/glue.cc 2008-02-11 16:15:26.000000000 +0000 @@ -33,6 +33,10 @@ # include CLICK_CXX_PROTECT # include +# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) +# include +# include +# endif CLICK_CXX_UNPROTECT # include # endif @@ -682,10 +686,23 @@ return __res; } #endif -#endif } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)) +struct net_device *dev_get_by_name(const char *name) +{ + return dev_get_by_name(&init_net, name); +} + +int dev_ioctl(unsigned int cmd, void __user *arg) +{ + return dev_ioctl(&init_net, cmd, arg); +} +#endif + +#endif + #endif /* !__KERNEL__ */ #if CLICK_LINUXMODULE && !defined(__HAVE_ARCH_STRLEN) && !defined(HAVE_LINUX_STRLEN_EXPOSED) diff -Naur click_git11022008.orig/lib/ino.cc click_git11022008/lib/ino.cc --- click_git11022008.orig/lib/ino.cc 2008-02-11 16:14:38.1000000000 +0000 +++ click_git11022008/lib/ino.cc 2008-02-11 16:15:26.000000000 +0000 @@ -348,6 +348,8 @@ #define RD_UOFF 0x20000 #define RD_NOFF 0x30000 #define RD_XOFF 0x40000 +#define DT_REG 8 +#define DT_DIR 4 #define FILLDIR(a, b, c, d, e, f) do { if (!filldir(a, b, c, d, e, f)) return 0; } while (0) int elementno = INO_ELEMENTNO(ino); diff -Naur click_git11022008.orig/linuxmodule/Makefile.in click_git11022008/linuxmodule/Makefile.in --- click_git11022008.orig/linuxmodule/Makefile.in 2008-02-11 16:14:38.1000000000 +0000 +++ click_git11022008/linuxmodule/Makefile.in 2008-02-11 16:15:26.000000000 +0000 @@ -84,7 +84,7 @@ CLICKCC = @KERNEL_CC@ CLICKCXX = @KERNEL_CXX@ -LINUXCFLAGS = $(shell echo "$(CPPFLAGS) $(CFLAGS)" | sed \ +LINUXCFLAGS = $(shell echo "$(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(CPPFLAGS) $(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,,) @@ -95,7 +95,8 @@ CLICKDEFS = @DEFS@ CLICKINCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \ - -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include + -I$(srcdir) -I$(top_srcdir) -I$(linuxdir)/include \ + -I$(linuxdir)/include/asm/mach-default CXXCOMPILE = $(CLICKCXX) $(LINUXCFLAGS) $(CLICKCPPFLAGS) $(CLICKCFLAGS) \ $(CLICKCXXFLAGS) $(CLICKDEFS) $(CLICKINCLUDES) $(CLICKDEPCFLAGS) diff -Naur click_git11022008.orig/linuxmodule/proclikefs.c click_git11022008/linuxmodule/proclikefs.c --- click_git11022008.orig/linuxmodule/proclikefs.c 2008-02-11 16:14:38.1000000000 +0000 +++ click_git11022008/linuxmodule/proclikefs.c 2008-02-11 16:15:26.000000000 +0000 @@ -357,7 +357,7 @@ fo->unlocked_ioctl = (void *) return_EIO; fo->compat_ioctl = (void *) return_EIO; fo->aio_fsync = (void *) return_EIO; - fo->sendfile = (void *) return_EIO; +/* fo->sendfile = (void *) return_EIO;*/ fo->check_flags = (void *) return_EIO; fo->flock = (void *) return_EIO; #endif diff -Naur click_git11022008.orig/linuxmodule/skbmgr.cc click_git11022008/linuxmodule/skbmgr.cc --- click_git11022008.orig/linuxmodule/skbmgr.cc 2008-02-11 16:14:38.1000000000 +0000 +++ click_git11022008/linuxmodule/skbmgr.cc 2008-02-11 16:15:26.000000000 +0000 @@ -339,6 +339,7 @@ } size = size_to_higher_bucket_size(headroom + size); + lock(); while (got < want) { struct sk_buff *skb = alloc_skb(size, GFP_ATOMIC); #if DEBUG_SKBMGR @@ -353,6 +354,7 @@ prev = &skb->next; got++; } + unlock(); *prev = 0; *store_got = got;