[Click] Linux 2.6.24 and later

Eddie Kohler kohler at cs.ucla.edu
Thu Oct 23 14:47:16 EDT 2008


Hi Steve,

Stephen Pink wrote:
> Hi,
> 
> I'm now a bit confused, so please set me straight.  I just git pulled 
> over the latest into my
> own click repository. Now, which kernel should I be trying to build the 
> click kernel module for?

Click generally supports multiple kernel versions at once.  It currently 
supports 2.4.something, 2.6.16.something, 2.6.19.2, and we are trying to add 
support for a later version.  If you just want to get work done keep working 
with 2.6.19.2.

Eddie


> Thanks,
> 
> Steve
> 
> --- On *Thu, 10/23/08, Eddie Kohler /<kohler at cs.ucla.edu>/* wrote:
> 
>     From: Eddie Kohler <kohler at cs.ucla.edu>
>     Subject: Re: [Click] Linux 2.6.24 and later
>     To: "Sargun Dhillon" <xbmodder at gmail.com>, "Click"
>     <click at pdos.csail.mit.edu>
>     Date: Thursday, October 23, 2008, 4:10 AM
> 
>     Sargun Dhillon wrote:
>     > Is there any plan to integrate click into the kernel?
> 
>     No.
> 
>     Eddie
> 
> 
>     > 
>     > On Wed, Oct 22, 2008 at 12:49 PM, Eddie Kohler
>      <kohler at cs.ucla.edu>
>     wrote:
>     >> Hi all,
>     >>
>     >> I've gone over and entered versions of most of Joonwoo and
>     Adam's Click
>     >> patch into mainline.  I've attached the remaining portions of the
>     patch.
>     >>  Adam, Joonwoo, can you please explain the parts of this patch to me? 
>     The
>     >> rtnl_lock() for example; is that required with *every* version of
>     Linux [and
>     >> we just got it wrong], or is it something new for 2.6.24?  Similarly
>     for
>     >> commenting out netif_wake_queue() in todevice?  Similarly for
>     KBUILD_CFLAGS
>     >> in the Makefile, and lock() and unlock() in the skbmgr?
>     >>
>     >> Progress...
>     >> Eddie
>     >>
>     >>
>     >> diff --git a/elements/linuxmodule/anydevice.cc
>     >> b/elements/linuxmodule/anydevice.cc
>     >> index c19ae22..8633be1 100644
>     >> --- a/elements/linuxmodule/anydevice.cc
>     >> +++
>      b/elements/linuxmodule/anydevice.cc
>     >> @@ -32,6 +32,7 @@ CLICK_CXX_PROTECT
>     >>  #include <linux/if_arp.h>
>     >>  #endif
>     >>  #include <linux/smp_lock.h>
>     >> +#include <linux/rtnetlink.h>
>     >>  CLICK_CXX_UNPROTECT
>     >>  #include <click/cxxunprotect.h>
>     >>
>     >> @@ -107,8 +108,11 @@ AnyDevice::find_device(AnyDeviceMap *adm,
>     ErrorHandler
>     >> *errh)
>     >>        _dev = 0;
>     >>     }
>     >>
>     >> -    if (_dev && _promisc)
>     >> +    if (_dev && _promisc) {
>     >> +       rtnl_lock();
>     >>        dev_set_promiscuity(_dev, 1);
>     >> +       rtnl_unlock();
>     >> +    }
>     >>  #if HAVE_NET_ENABLE_TIMESTAMP
>     >>     if (_dev && _timestamp)
>     >>        net_enable_timestamp();
>     >> @@ -143,8 +147,11 @@ AnyDevice::set_device(net_device
>      *dev,
>     AnyDeviceMap
>     >> *adm, bool locked)
>     >>            click_chatter("%s: device '%s' went
>     down", declaration().c_str(),
>     >> _devname.c_str());
>     >>     }
>     >>
>     >> -    if (_dev && _promisc)
>     >> +    if (_dev && _promisc) {
>     >> +       rtnl_lock();
>     >>        dev_set_promiscuity(_dev, -1);
>     >> +       rtnl_unlock();
>     >> +    }
>     >>  #if HAVE_NET_ENABLE_TIMESTAMP
>     >>     if (_dev && _timestamp)
>     >>        net_disable_timestamp();
>     >> @@ -160,8 +167,11 @@ AnyDevice::set_device(net_device *dev,
>     AnyDeviceMap
>     >> *adm, bool locked)
>     >>     if (adm)
>     >>        adm->insert(this, locked);
>     >>
>     >> -    if (_dev && _promisc)
>     >> +    if (_dev && _promisc) {
>     >> +       rtnl_lock();
>     >>        dev_set_promiscuity(_dev,
>      1);
>     >> +       rtnl_unlock();
>     >> +    }
>     >>  #if HAVE_NET_ENABLE_TIMESTAMP
>     >>     if (_dev && _timestamp)
>     >>        net_enable_timestamp();
>     >> @@ -180,8 +190,11 @@ AnyDevice::set_device(net_device *dev,
>     AnyDeviceMap
>     >> *adm, bool locked)
>     >>  void
>     >>  AnyDevice::clear_device(AnyDeviceMap *adm)
>     >>  {
>     >> -    if (_dev && _promisc)
>     >> +    if (_dev && _promisc) {
>     >> +       rtnl_lock();
>     >>        dev_set_promiscuity(_dev, -1);
>     >> +       rtnl_unlock();
>     >> +    }
>     >>  #if HAVE_NET_ENABLE_TIMESTAMP
>     >>     if (_dev && _timestamp)
>     >>        net_disable_timestamp();
>     >> diff --git a/elements/linuxmodule/todevice.cc
>     >> b/elements/linuxmodule/todevice.cc
>     >> index 0a2eb7c..9029401 100644
>     >> ---
>      a/elements/linuxmodule/todevice.cc
>     >> +++ b/elements/linuxmodule/todevice.cc
>     >> @@ -303,7 +303,7 @@ ToDevice::run_task(Task *)
>     >>     // 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 --git a/linuxmodule/Makefile.in b/linuxmodule/Makefile.in
>     >> index 33a8ed3..c1d55e3 100644
>     >> --- a/linuxmodule/Makefile.in
>     >> +++ b/linuxmodule/Makefile.in
>     >> @@ -84,9 +84,11 @@ CLICK_ELEM2MAKE = $(top_builddir)/click-buildtool
>     >> elem2make --linux26
>     >>  CLICKCC = @KERNEL_CC@
>     >>  CLICKCXX = @KERNEL_CXX@
>     >>
>     >> -LINUXCFLAGS = $(shell echo "$(CPPFLAGS)
>      $(CFLAGS)
>     $(CFLAGS_MODULE)" | sed \
>     >> +LINUXCFLAGS = $(shell echo "$(CPPFLAGS) $(CFLAGS)
>     $(CFLAGS_MODULE)" \
>     >> +       "$(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) " | sed \
>     >>        -e s,-fno-unit-at-a-time,, -e s,-Wstrict-prototypes,, \
>     >>        -e s,-Wdeclaration-after-statement,, \
>     >> +       -e s,-Werror-implicit-function-declaration,, \
>     >>        -e s,-Wno-pointer-sign,, -e s,-fno-common,,)
>     >>  CLICKCPPFLAGS = @CPPFLAGS@ -DCLICK_LINUXMODULE
>     >>  CLICKCFLAGS = @CFLAGS_NDEBUG@
>     >> diff --git a/linuxmodule/skbmgr.cc b/linuxmodule/skbmgr.cc
>     >> index 3a55dae..45c27a7 100644
>     >> --- a/linuxmodule/skbmgr.cc
>     >> +++ b/linuxmodule/skbmgr.cc
>     >> @@ -339,6 +346,7 @@ RecycledSkbPool::allocate(unsigned headroom,
>     unsigned
>     >> size, int want, int *store
>     >>   }
>     >>
>     >>   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 +361,7 @@ RecycledSkbPool::allocate(unsigned headroom,
>     unsigned
>     >> size, int want, int *store
>     >>     prev = &skb->next;
>     >>     got++;
>     >>   }
>     >> +  unlock();
>     >>
>     >>   *prev = 0;
>     >>   *store_got = got;
>     >>
>     >> _______________________________________________
>     >> click mailing list
>     >> click at amsterdam.lcs.mit.edu
>     >> https://amsterdam.lcs.mit.edu/mailman/listinfo/click
>     >>
>     >>
>     _______________________________________________
>     click mailing list
>     click at amsterdam.lcs.mit.edu
>     https://amsterdam.lcs.mit.edu/mailman/listinfo/click
> 


More information about the click mailing list