sduclassifier.h
上传用户:hzie11
上传日期:2013-10-07
资源大小:1487k
文件大小:3k
源码类别:

网络

开发平台:

C/C++

  1. /* This software was developed at the National Institute of Standards and
  2.  * Technology by employees of the Federal Government in the course of
  3.  * their official duties. Pursuant to title 17 Section 105 of the United
  4.  * States Code this software is not subject to copyright protection and
  5.  * is in the public domain.
  6.  * NIST assumes no responsibility whatsoever for its use by other parties,
  7.  * and makes no guarantees, expressed or implied, about its quality,
  8.  * reliability, or any other characteristic.
  9.  * <BR>
  10.  * We would appreciate acknowledgement if the software is used.
  11.  * <BR>
  12.  * NIST ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" CONDITION AND
  13.  * DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING
  14.  * FROM THE USE OF THIS SOFTWARE.
  15.  * </PRE></P>
  16.  * @author  rouil
  17.  */
  18. #ifndef SDUCLASSIFIER_H
  19. #define SDUCLASSIFIER_H
  20. #include "packet.h"
  21. class Mac802_16;
  22. class SDUClassifier;
  23. LIST_HEAD (sduClassifier, SDUClassifier);
  24. /**
  25.  * Abstract class for classifiers that will map a packet to a CID
  26.  */
  27. class SDUClassifier : public TclObject
  28. {
  29.   friend class Mac802_16;
  30.  public:
  31.   /**
  32.    * Create a classifier in the given mac
  33.    */
  34.   SDUClassifier ();
  35.   /**
  36.    * Interface with the TCL script
  37.    * @param argc The number of parameter
  38.    * @param argv The list of parameters
  39.    */
  40.   int command(int argc, const char*const* argv);
  41.   /** 
  42.    * Return the classifier's priority
  43.    */
  44.   inline int getPriority () { return priority_; }
  45.   /** 
  46.    * Set the classifier's priority
  47.    * @param prio The new priority
  48.    */
  49.   inline void setPriority (int prio) { priority_ = prio; }
  50.   /**
  51.    * Classify a packet and return the CID to use (or -1 if unknown)
  52.    * @param p The packet to classify
  53.    * @return The CID or -1
  54.    */
  55.   virtual int classify (Packet * p);
  56.   // Chain element to the list
  57.   inline void insert_entry_head(struct sduClassifier *head) {
  58.     LIST_INSERT_HEAD(head, this, link);
  59.   }
  60.   
  61.   // Chain element to the list
  62.   inline void insert_entry(struct SDUClassifier *elem) {
  63.     LIST_INSERT_AFTER(elem, this, link);
  64.   }
  65.   
  66.   // Return next element in the chained list
  67.   SDUClassifier* next_entry(void) const { return link.le_next; }
  68.   // Remove the entry from the list
  69.   inline void remove_entry() { 
  70.     LIST_REMOVE(this, link); 
  71.   }
  72.  protected:
  73.   /** 
  74.    * The max where the classifier is located
  75.    */
  76.   Mac802_16 *mac_;
  77.   /**
  78.    * The priority
  79.    */
  80.   int priority_;
  81.   /**
  82.    * Pointer to next in the list
  83.    */
  84.   LIST_ENTRY(SDUClassifier) link;
  85.   //LIST_ENTRY(SDUClassifier); //for magic draw
  86.   /** 
  87.    * Register the Mac
  88.    */
  89.   inline void setMac (Mac802_16 *mac) { assert (mac); mac_ = mac; }
  90. };
  91. #endif