opnet packet field的设置

转载 2013年12月06日 10:44:48

在Opnet中field有三种类型:standard field、info field和structure field.他们的 含义我就不多说了,主要说一说这 几种域怎样使用(以nfd为例)。

可能有人马上就说了:用op_pk_nfd_set()来设置域,用op_pk_nfd_get()来读取。

对!是这样。

可是别忘了:op_pk_nfd_set()是有三个的!

什么?只有一个?那你需要继续往下看了,不然会死得很惨。

 

/************************************************************************/

/* 最重要的:不要把这几个函数用乱了,要不然编译时系统不会提示出错       */

/* 但运行的时候就会出现莫名其妙的问题了!                              */

/* 有可能问题会出现在很远的地方,很难找。                               */

/************************************************************************/

先说standard吧

op_pk_nfd_set(pkptr, fd_name, value)

pkptr是指向packet的指针,fd_name是域的名字,value是域的值.

例:op_pk_nfd_set(pkptr,"field_one", 12345);

接下来是info field

op_pk_nfd_set(pkptr, fd_name)

pkptr是指向packet的指针,fd_name是域的名字

例:op_pk_nfd_set(pkptr,"info_pkt");

最后说说最容易出错的structurefield,很多人在这里会出错。

op_pk_nfd_set(pkptr, fd_name, value,copy_proc, dealloc_proc, alloc_size)

看名字就够长吧?

pkptr是指向packet的指针,fd_name是域的名字,

value可不是field的值了,他是指向该field类型的指针,

copy_proc是一个函数,用来为field类型的数据申请内存并将值拷贝进去,

dealloc_proc也是一个函数,用来释放field类型的数据占用的内存,

alloc_size就是该类型所占存储空间的大小了。

例:

fd_ptr = (field_type *) op_prg_mem_alloc(sizeof (field_type));

fd_ptr->int_value = 54321;

op_pk_nfd_set (pkptr,"field_name", fd_ptr, op_prg_mem_copy_create, op_prg_m

em_free, sizeof (field_type));

又是好长的一句呀!什么?还有比它长三倍的呢?

对了,我好像也写过那么长的。那就说它比较长吧,这家大家满足了吧。

下面解释一下.

首先申请内存,用fd_ptr来保存内存的首地址。

然后,给结构中的元素赋值。

最后将结构加到packet里面。

在调用op_pk_nfd_set之后,你申请的内存就被链到packet上了,将来destroy这个包的时候opnet会把它释放掉的。所以不 要再试图对fd_ptr的内容进行操作了。

op_prg_mem_copy_create是opnet提供的函数,将来复制packet时opnet会调用它来完成这个field内存的申请和值的复制。

op_prg_mem_free也是opnet提供的函数,将来destroy这个包的时候就靠它来destroy这个field了。

 

什么?上面说的都是opnet的help里的?

那我只好出绝招了!

为什么opnet一定要提供copy_proc, dealloc_proc和alloc_size呢?

有的时候structure里面含有指针类型的元素。

而这个指针指向的内容也是你想要随着packet一起被传输、复制和摧毁的。

这时候opnet提供的op_prg_mem_copy_create和op_prg_mem_free就不好用了。

你必须自己些两个函数来完成这些功能。

例:

域的定义

typedef struct field_type

{

       char*   pch;

       int     length;

}field_type;

自己写的两个函数:

field_type*my_prg_mem_copy_create(field_type* field, size_t size)

{

       field_type* temp;

       temp = (field_type *) op_prg_mem_alloc(size);

       op_prg_mem_copy(field, temp, size);

       temp->pch = (char *) op_prg_mem_alloc(temp->length);

       op_prg_mem_copy(field->pch, temp->pch, temp->length);

       return(temp);

}

void my_prg_mem_free(field_type* field)

{

       op_prg_mem_free(field->pch);

       op_prg_mem_free(field);

}

op_pk_nfd_set的用法:

fd_ptr = (field_type *) op_prg_mem_alloc(sizeof (field_type));

fd_ptr->pch = "hello! world.";

fd_ptr->length = 14;

op_pk_nfd_set (pkptr,"field_name", fd_ptr, my_prg_mem_copy_create, my_prg_m

em_free, sizeof (field_type));

原文地址:

http://bbs.njupt.edu.cn/cgi-bin/bbsanc?path=/groups/science.faq/Optical_Comm/D90027EFE/M.1091460333.A

Opnet modeler v14.5仿真环境安装配置

本文转载自kingkong's新浪博客,地址:http://blog.sina.com.cn/s/blog_6c73f6ef0100xdyf.html Opnet是最常用的网络仿真软件之一...
  • nobelzxn
  • nobelzxn
  • 2013年07月02日 11:41
  • 1934

网络仿真软件——OPNET、QualNet及NS

OPNET、QualNet及NS三者之间的关系有点象Windows、Mac和Linux的关系。   OPNET是商业软件,所以界面非常好。功能上很强大,界面错落有致,统一严格。操作也很方便,对...
  • ztguang
  • ztguang
  • 2016年02月01日 00:00
  • 1244

OPNET与Matlab联合仿真方法

有关OPNET和MATLAB的联合仿真方法,在参考网上大家的分享的东西和一些书籍之后,我终于试成功了,现将过程分享给他家,一起学习交流~ 主要过程如下: 配置OPENT的环境:在Edit-->...
  • HUASHUIXIAOHAI
  • HUASHUIXIAOHAI
  • 2014年09月18日 20:27
  • 1122

opnet初探以及Packet Switching I实验过程中的若干问题的思考

之前虽然经常听到opnet这个工具,但是de
  • hainan89
  • hainan89
  • 2014年05月23日 15:50
  • 1425

这章从字段(Field)和包(Packet)的定义开始

  • 2008年10月15日 20:29
  • 3.16MB
  • 下载

USB协议分析——包标识字符段(Packet Identifier Field )

近来常用逻辑分析仪来分析USB交互过程,每次对一些PID指令都要反反复复的查看协议。现记录下来,一来加深印象,二来方便以后的查阅。废话不说了,先上协议内容: 所有USB包的同步字段后都紧跟着包标识符P...
  • u012414037
  • u012414037
  • 2013年10月17日 21:08
  • 587

IM中的field selection的设置(oldTransaction&MIGO;等)

  • 2012年01月11日 15:55
  • 94KB
  • 下载

opnet环境变量设置

  • 2013年05月16日 16:21
  • 1KB
  • 下载

POX设置packet-in的miss_send_len

POX设置packet-in的miss_send_len在of_01.py中可以看到交换机和Controller建立连接时的信息流交互,互问hello,然后得到Switch的feature信息,而后C...
  • vonzhoufz
  • vonzhoufz
  • 2015年12月09日 21:00
  • 778

docker上部署的mysql设置在网络传输中一次消息传输量的最大值max_allowed_packet

max_allowed_packet mysql docker
  • Failure_Lee
  • Failure_Lee
  • 2017年11月14日 10:47
  • 141
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:opnet packet field的设置
举报原因:
原因补充:

(最多只允许输入30个字)