opnet的ip模块在哪里判断是否到达目的地址

问题:   ip模块很复杂,一开始只是看ip模块中的代码,搞得云里雾里。

            从头到尾都没有判断目的地址的地方,甚至都没有处理来自arp层的流中断strm_inprtr。

原因:   具体实现代码在 ip_rte_support.ex.c 文件中ip_rte_packet_send

            是这样子的,OPNET在调用子进程时,有四种方式,分别是:

               Manual Steering
Normal Steering
Type-based Steering
Port-based Steering
对于后两种方式,当收到特定类型(type-based)或特定端口上(port-based)的中断时,就直接进入相应的子进程而不通过父进程进行调用。
具体的你可以参考OPNETWork2002 1504

嗯,里面说的挺清楚的。把我的理解贴出来,请你看看对不:

Manual Steering:顾名思义就是手工的来调用子进程。比如说,父进程收到一个流中断后,经过判断是要交给某个子进程处理的,那么就通过op_pro_invoke()来手工的调用子进程。

Normal Steering:用一个例子来说吧:当子进程用op_intrpt_schedule_self()定制了一个自中断,那么当这一中断到来时,系统内核会自动调用该子进程而不通过父进程来调用它。

Type_based Steering:则需要子进程通过op_intrpt_type_register()来注册某一类型的中断,当该类型的中断到来时,也会直接的调用该子进程。

Port_based Steering:与基于Type的类似。

  应该是某个子进程注册了Port_based Steering之类的函数,截断了来arp来的流中断。然后执行了 ip_rte_support.ex.c中的ip_rte_packet_send 函数。

参考文章http://netemu.cn/NetworkSimulation/Opnet/20071028/265-1.html

唉,之前没有意识到,子进程功能实现是另外再画了个进程图。悲剧!!!许多功能都是子进程做的,看父进程一头雾水。

查看子进程:

      首先创建好子进程,并保存

在进程模块里,FILE--delcare child process models,选中创建的进程,即加入了子进程。
在进程中,使用op_pro_create("proc_name",ptc_mem_ptr)创建子进程,返回进程句柄prohandle(事先需要使用op_prg_mem_alloc()开辟一个内存ptc_mem_ptr,即parent to child memory,父子共享内存,用于存放共享数据)。具体使用方法可以在help和核心函数里查询。
然后通过op_pro_invoke(prohandle,argmem_ptr),就可以需要的地方调用子进程。

参考地址:http://www.baisi.net/viewthread.php?tid=64569

你可能感兴趣的:(opnet的ip模块在哪里判断是否到达目的地址)