[Click] ANNOUNCE: Click-1.7.0rc1

Eddie Kohler kohler at cs.ucla.edu
Wed Mar 11 11:34:49 EDT 2009


Very happy to hear it :)
E


Beyers Cronje wrote:
> Hi Eddie,
> 
> I understand adding more data to the Packet header is not desirable and 
> I'm happy not to go that route.
> 
> I think I have found an alternative way to accomplish what I want to do 
> without changing Packet, so please disregard my request :)
> 
> Beyers
> 
> On Mon, Mar 9, 2009 at 4:30 PM, Eddie Kohler <kohler at cs.ucla.edu 
> <mailto:kohler at cs.ucla.edu>> wrote:
> 
>     Hi Beyers,
> 
>     Can you not use an annotation to store this type of data?  I'd
>     rather not continue adding data to a Packet header.
> 
>     Eddie
> 
> 
> 
>     Beyers Cronje wrote:
> 
>         Hi Eddie,
> 
>         I use the userlevel Packet destructor callback and needed a way
>         to store user data to be returned via the destructor callback.
>         Any chance something like this might be consired for inclusion
>         in 1.7 ?
> 
>         Note the patch below was generated on an older version of Click,
>         so it will probable not apply directly anymore. I'm just curious
>         IF you would consider such a change? If so, then I will gladly
>         generate a new patch on current GIT version.
> 
>         Cheers
> 
>         Beyers
> 
>         diff -Naur click/elements/userlevel/fromfile.cc
>         newclick/elements/userlevel/fromfile.cc
>         --- click/elements/userlevel/fromfile.cc    2007-09-18
>         22:37:05.000000000 +0200
>         +++ newclick/elements/userlevel/fromfile.cc    2007-10-16
>         21:21:43.000000000 +0200
>         @@ -120,7 +120,7 @@
>           #ifdef ALLOW_MMAP
>          static void
>         -munmap_destructor(unsigned char *data, size_t amount)
>         +munmap_destructor(unsigned char *data, size_t amount, void *)
>          {
>             if (munmap((caddr_t)data, amount) < 0)
>             click_chatter("FromFile: munmap: %s", strerror(errno));
>         @@ -158,7 +158,7 @@
>             if (mmap_data == MAP_FAILED)
>             return error(errh, "mmap: %s", strerror(errno));
>          -    _data_packet = Packet::make((unsigned char *)mmap_data,
>         _len, munmap_destructor);
>         +    _data_packet = Packet::make((unsigned char *)mmap_data,
>         _len, munmap_destructor, 0);
>             _buffer = _data_packet->data();
>             _file_offset = _mmap_off;
>             _mmap_off += _len;
>         diff -Naur click/include/click/packet.hh
>         newclick/include/click/packet.hh
>         --- click/include/click/packet.hh    2007-09-07
>         22:26:45.000000000 +0200
>         +++ newclick/include/click/packet.hh    2007-10-16
>         21:17:52.000000000 +0200
>         @@ -21,12 +21,12 @@
>          # include <click/simclick.h>
>          #endif
>          -
>          CLICK_DECLS
>           class IP6Address;
>          class WritablePacket;
>          +
>          class Packet { public:
>             // PACKET CREATION
>         @@ -51,7 +51,7 @@
>           const struct mbuf *m() const        { return (const struct
>         mbuf *)_m; }
>           struct mbuf *steal_m();
>          #else            /* User-space */
>         -  static WritablePacket *make(unsigned char *, uint32_t, void
>         (*destructor)(unsigned char *, size_t));
>         +  static WritablePacket *make(unsigned char *, uint32_t, void
>         (*destructor)(unsigned char *, size_t, void *), void *);
>          #endif
>               inline void kill();
>         @@ -81,6 +81,7 @@
>          #if CLICK_USERLEVEL
>             inline void shrink_data(const unsigned char *, uint32_t length);
>             inline void change_headroom_and_length(uint32_t headroom,
>         uint32_t length);
>         +    inline void *client_data() { return _client_data; }
>          #endif
>               // HEADER ANNOTATIONS
>         @@ -255,7 +256,8 @@
>             unsigned char *_tail; /* one beyond end of packet */
>             unsigned char *_end;  /* one beyond end of allocated buffer */
>          # if CLICK_USERLEVEL
>         -    void (*_destructor)(unsigned char *, size_t);
>         +    void (*_destructor)(unsigned char *, size_t, void *);
>         +    void *_client_data;
>          # endif
>             unsigned char _cb[48];
>             unsigned char *_mac;
>         @@ -325,6 +327,21 @@
>           };
>          +inline void
>         +Packet::kill()
>         +{
>         +#if CLICK_LINUXMODULE
>         +    struct sk_buff *b = skb();
>         +    b->next = b->prev = 0;
>         +# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 15)
>         +    b->list = 0;
>         +# endif
>         +    skbmgr_recycle_skbs(b);
>         +#else
>         +    if (_use_count.dec_and_test())
>         +        delete this;
>         +#endif
>         +}
>            inline const unsigned char *
>         @@ -656,23 +673,6 @@
>          #endif
>           -inline void
>         -Packet::kill()
>         -{
>         -#if CLICK_LINUXMODULE
>         -    struct sk_buff *b = skb();
>         -    b->next = b->prev = 0;
>         -# if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 15)
>         -    b->list = 0;
>         -# endif
>         -    skbmgr_recycle_skbs(b);
>         -#else
>         -    if (_use_count.dec_and_test())
>         -    delete this;
>         -#endif
>         -}
>         -
>         -
>          #if CLICK_BSDMODULE        /* BSD kernel module */
>          inline void
>          Packet::assimilate_mbuf(Packet *p)
>         diff -Naur click/lib/packet.cc newclick/lib/packet.cc
>         --- click/lib/packet.cc    2007-09-07 19:53:46.000000000 +0200
>         +++ newclick/lib/packet.cc    2007-10-16 21:17:02.000000000 +0200
>         @@ -25,6 +25,7 @@
>          #endif
>          CLICK_DECLS
>          +
>          #ifdef CLICK_LINUXMODULE    /* Linux kernel module */
>           Packet::Packet()
>         @@ -66,6 +67,7 @@
>           _head = _data = _tail = _end = 0;
>          #if CLICK_USERLEVEL
>           _destructor = 0;
>         +  _client_data = 0;
>          #elif CLICK_BSDMODULE
>           _m = 0;
>          #endif
>         @@ -78,7 +80,7 @@
>             _data_packet->kill();
>          #if CLICK_USERLEVEL
>           else if (_head && _destructor)
>         -    _destructor(_head, _end - _head);
>         +    _destructor(_head, _end - _head, _client_data);
>           else
>             delete[] _head;
>          #elif CLICK_BSDMODULE
>         @@ -97,13 +99,14 @@
>          #ifdef CLICK_USERLEVEL
>           WritablePacket *
>         -Packet::make(unsigned char *data, uint32_t len, void
>         (*destruct)(unsigned char *, size_t))
>         +Packet::make(unsigned char *data, uint32_t len, void
>         (*destruct)(unsigned char *, size_t, void *), void *cdata)
>          {
>           WritablePacket *p = new WritablePacket;
>           if (p) {
>             p->_head = p->_data = data;
>             p->_tail = p->_end = data + len;
>             p->_destructor = destruct;
>         +    p->_client_data = cdata;
>           }
>           return p;
>          }
>         @@ -319,7 +322,7 @@
>             _data_packet->kill();
>          # if CLICK_USERLEVEL
>           else if (_destructor)
>         -    _destructor(old_head, old_end - old_head);
>         +    _destructor(old_head, old_end - old_head, _client_data);
>           else
>             delete[] old_head;
>           _destructor = 0;
> 
> 
> 


More information about the click mailing list