#ifndef CLICK_SETIPDSCP_HH
#define CLICK_SETIPDSCP_HH
#include <click/element.hh>
#include <click/glue.hh>
CLICK_DECLS

/*
 * =c
 * SetIPDSCP(VAL)
 * =s ip
 * sets IP packets' DSCP fields
 * =d
 * Expects IP packets as input and
 * sets their Differential Services Code Point to VAL.
 * Then it incrementally recalculates the IP checksum
 * and passes the packet to output 0.
 * The DSCP is the upper 6 bits of the IP TOS field.
 */

class SetIPDSCP : public Element {

  unsigned char _dscp;
  
 public:
  
  SetIPDSCP();
  ~SetIPDSCP();
  
  const char *class_name() const		{ return "SetIPDSCP"; }
  const char *port_count() const		{ return PORTS_1_1; }
  const char *processing() const		{ return AGNOSTIC; }

  unsigned char dscp() const			{ return _dscp; }
  
  int configure(Vector<String> &, ErrorHandler *);
  bool can_live_reconfigure() const		{ return true; }
  void add_handlers();

  inline Packet *smaction(Packet *);
  void push(int, Packet *p);
  Packet *pull(int);
  
};

CLICK_ENDDECLS
#endif


syntax highlighted by Code2HTML, v. 0.9.1