Chinaunix首页 | 论坛 | 博客
  • 博客访问: 555924
  • 博文数量: 126
  • 博客积分: 2071
  • 博客等级: 大尉
  • 技术积分: 1522
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-24 16:09
文章分类
文章存档

2013年(8)

2012年(37)

2011年(80)

2010年(1)

分类: C/C++

2011-04-22 20:01:42

                               NS2中数据包头部开发
   
     继平台搭建后之作,这次主要写一下关于如何在NS2中开发一个数据包头部。
     废话不说了,开始进入正题。开发一个数据包头部大致包含几个部分:明确项目需求——>定义各个部分的头部结构体(这一步一般是头部字段较多的时候使用,如果字段很少,直接进入下一步)——>定义一个完整的头部——>注册头部。这样就可以在脚本中使用了。下面给出详细的实例。
     1.明确需求。
     这要根据自己项目需要了,在这我已经明确了。
     2.各部分结构体
     struct ctva_cmn_hdr {
           u_int vertype;
           u_int proto;
    };
    struct ctva_dat_hdr {
           ctva_cmn_hdr hdr;
           u_int ncap;
           u_int N;
           u_int T;
           u_int cap[CTVA_HOP_MAX];
    };
    3.完整头部定义
    struct hdr_ctva {
    ctva_dat_hdr dat_hdr;
    static int offset_;
    inline static int& offset() { return offset_; }
    inline static hdr_ctva* access(const Packet *p)
    {
       if(offset_<0)
          return NULL;
       else
           return (hdr_ctva *)p->access(offset_);
    }
   };
   4.注册头部
   注册是在.CC的文件中
   int hdr_ctva::offset_=-1;
   static class CTVAHeaderClass : public PacketHeaderClass {
         public:
        CTVAHeaderClass() : PacketHeaderClass("PacketHeader/CTVA", sizeof(hdr_ctva))
        {
            bind_offset(&hdr_ctva::offset_);
        }
   } class_ctvahdr;
  
前3步我是放在ctva.h的文件中,第4步我是在ctva-agent.cc的文件中注册的。这要根据你自己需求,基本上放在agent的实现里都是可以的。
OK,这样你就可以使用这个头部了,enjoy!!!
     
阅读(2726) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~