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!!!
阅读(904) | 评论(0) | 转发(0) |