ns2 802.11 MAC에서 현제 큐의 size를 알 수 있는 방법.

|
이전에 addr()을 사용하면 현제 무선 노드의 node 번호를 알 수 있다고 했다.
본인은 0번을 BS로 설정했기 때문에 결과가 0이 나오면 AP이다.

현제의 큐 상태를 확인하기 위한 소스의 수정은 크게 2가지로 나뉜다.
먼저 ns-2.33/queue/Queue.h에서 dequeue로 현재 패킷이 이벤트가 일어날 때의 큐 사이즈를 불러온다.

virtual Packet* enque(Packet* p) { // Returns previous tail
  Packet* pt = tail_;
  if (!tail_) head_= tail_= p;
  else {
   tail_->next_= p;
   tail_= p;
  }
  tail_->next_= 0;
  ++len_;
  ++num_p_; //들어오는 패킷에 시퀀스 넘버를 할당하여 deq와 비교할 때 썼다.
  hdr_cmn::access(p)->num_en=num_p_; //packet.h에 접근하여 현제 이벤트의 패킷 정보를 변경한다.
  bytes_ += hdr_cmn::access(p)->size();
  hdr_cmn::access(p)->enq_q_len_=len_; // 현제 큐 길이를 저장한다.
  return pt;
 }

 virtual Packet* deque() {
  if (!head_) return 0;
  Packet* p = head_;
  head_= p->next_; // 0 if p == tail_
  if (p == tail_) head_= tail_= 0;
  --len_;
  bytes_ -= hdr_cmn::access(p)->size();
  hdr_cmn::access(p)->deq_q_len_=len_; //실제 사용한 변수 여러 변수를 선언하고 사용하지 않더라도 남겨 둔 이유는
                                                             차 후 다른 실험들을 할 때 사용하기 위해서이다. 주석처릴 잘해야하는데 잘 안된다.
  return p;
 }

ns-2.33/common/packet.h의 struct hdr_cmn에 필요한 변수를 넣는다.
나는 
 int enq_q_len_;
 int deq_q_len_;
 int num_en;
세 변수를 넣어두었다.

ns-2.33/mac/mac-802_11.cc에서 사용하기 위해선 다음과 같은 절차를 수행한다.

struct hdr_cmn *hdr = HDR_CMN(p);
hdr->deq_q_len_
이렇게 하면 원하는 패킷의 정보를 얻을 수 있다.
And