协议转换表 protocol switch table

     协议转换表是一个包含一组处理函数的数据结构,它使得IP层能够将输入的分组分发给合适的上层协议,同时使得应用程序

能够使用需要的传输层协议来发送数据。对IPv6而言,协议转换表 ip6protosw{}定义如下:

     struct ip6protosw {
                                     short      pr_type;              /* socket type used for */
                                     struct     nps_domain *pr_domain;    /* domain protocol a member of */
                                     short      pr_protocol;          /* protocol number */
                                     short      pr_flags;             /* see below */

 

                                     /* protocol-protocol hooks */
                                     int (*pr_input)             /* input to protocol (from below) */
                                           __P ((struct nps_mbuf **, int *, int));
                                     int (*pr_output)            /* output to protocol (from above) */
                                           __P ((struct nps_mbuf *, ...));


                                    void (*pr_ctlinput)         /* control input (from below) */
                                           __P ((int, struct nps_sockaddr *, void *));
                                    int (*pr_ctloutput)         /* control output (from above) */
                                           __P ((struct nps_socket *, struct nps_sockopt *));

 

                                    /* user-protocol hook */
                                    int (*pr_usrreq)            /* user request: see list below */     
                                           __P ((struct nps_socket *, int, struct nps_mbuf *, struct nps_mbuf *, struct nps_mbuf *));

 

                                   /* utility hooks */
                                   void (*pr_init)             /* initialization hook */
                                           __P ((void));

                                   void (*pr_fasttimo)         /* fast timeout (200ms) */
                                            __P ((void));
                                   void (*pr_slowtimo)         /* slow timeout (500ms) */
                                           __P ((void));
                                    void (*pr_drain)            /* flush any excess space possible */
                                           __P ((void));
                                    struct pr_usrreqs *pr_usrreqs;  /* supersedes pr_usrreq() */
                               };

     pr_type 表示通信类型,KAME实现中支持的通信如表1所示。TCP使用SOCK_STREAM,UDP使用SOCK_DGRAM,其他的协议如ICMPv6使用SOCK_RAW。目前SCTP(Stream Control Transmission Protocol)实现定义了一个新的通信类型SOCK_SEQPACKET(sequential packet delivery)。

   

    pr_domain 指定协议族,在IPv6中指向inet6domain域。

    pr_protocol 保存协议号

    pr_flags 定义socket 操作行为,KAME实现支持的标志如表2所示。

   

    pr_input 指向每个协议的分组输入处理函数。

    pr_outpt 在IPv6域中并没有使用,尽管在一些协议中设置了这个成员变量。

   

    pr_ctlinput 是一个指向                                                。被一个接口用来向相应的应用处理发送ICMPv6错误

    pr_ctloutput 指向操作socket 选项的控制函数。

    pr_usrreq FreeBSD不使用。而是使用pr_usrreqs 从用户处理进程向相应的内部内核模块分发请求消息。

    pr_init 指向协议初始化函数的指针。

    pr_fasttimo 指向用于快速超时处理(200ms调用一次)的定时器函数的指针。
    pr_slowtimo 指向用于慢超时处理(500ms调用一次)的定时器函数的中指针。

  

    pr_drain 指向当系统的mbuf块耗尽时内核调用的函数。pr_drain尝试从每个协议栈释放mbufs

   

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值