2013-1-30 19:08:10









2013-1-30 19:08:10






Error in file dog_keepalive.c, line 522


rpc_svc_callback_register


很弱智的一个查找,添加函数


消息是怎么开始的?


#define XDR_MSG_START( XDR, TYPE )      (XDR)->xops->msg_start( XDR, TYPE )


msg_start


xprtrtr_os_write 


router 也就是一个路由write


关心的也就是句柄


xprtrtr_os_open 


打开了就方法监听集合中去 


看看内核的情况 


这个传说中的路由设备 smd_rpcrouter_device.c


rpcrouter_open




pid: 0x00000001
cid: 0xcfaea200
dst_pid: 0xffffffff
dst_cid: 0x00000000
dst_prog: 0x31000082 (CB UNDEFINED)
dst_vers: 0x00010001
reply_cnt: 0
restart_state: 0
outstanding xids:
complete unread packets:




pdev_name: 
pid: 0x00000001
cid: 0xcfaeee00
prog: 0x30000082 (UNDEFINED)
vers: 0x00010001




211static LIST_HEAD(xprt_info_list);
212static DEFINE_MUTEX(xprt_info_list_lock);


这个是传输的一个链表


rpcrouter_get_xprt_info


通过远程id把对应的路由信息给找出来


rpcrouter_send_control_msg


向对方发送控制消息


如果对方pid 实际上为本地的,直接返回就可以了


如果路由没有初始化,发送hello消息也不成


数据准备好之后,直接使用传输层的方法进行传输


 modem_reset_cleanup
 
 modem 重启的时候需要清除数据
 
 通过传输信息中的pid 从节点链表中把对应的节点找出来
 
 找出来之后进行teardown
 
 清除其reply  未完成,等待读 队列
 
 唤醒等待quato ack 的远端节点
 
 modem_reset_startup
 
 modem 启动的问题  
 
 启动回调
 
 
 wait_for_restart_and_notify
 
 如果正在处理reset,那就阻塞在那,直到reset 处理完成为止
 
 rpcrouter_create_server
 
 server 除了挂载自己的list上,他还是一个字符设备
 
  rpcrouter_destroy_server
  
  list 卸载,设备取消
  
   msm_rpc_add_board_dev f
   
   board_dev只是挂一下list,这个只是添加而已
   
   rpcrouter_register_board_dev
   
   注册一个board dev ,这个是根据传入的server 选择的,选中后作为一个平台设备进行添加
   
   注册成功后,还需要从list中删除
   
   rpcrouter_lookup_server
   
   这个查找server比较简单,直接根据程序数和版本来查找
   
   rpcrouter_lookup_server_by_dev
   
   一个server就是一个字符设备,那么我们还可以根据设备号来查找server
   
   msm_rpcrouter_create_local_endpoint
   
   创建一个本地节点分配初始化结构体,挂链表,如果有有效的设备id,我们还需要把找出对应的server作为其dst
   
   msm_rpcrouter_destroy_local_endpoint 
   
   如果存在有效的dst,需要向所有的传输发送移除消息
   
   rpcrouter_create_remote_endpoint
   
   创建远端节点
   
   rpcrouter_lookup_local_endpoint
   
   通过cid查找本端节点
   
   rpcrouter_lookup_remote_endpoint
   
   通过pid,cid查找远端节点
   
    handle_server_restart
    
    重启server,重置传入的本地和远程节点,唤醒等待队列
    
     
   process_control_msg
   
   处理控制消息
   
   hello 向所有的server都发送消息
   
     

你可能感兴趣的:(2013-1-30 19:08:10)