zoukankan      html  css  js  c++  java
  • i p _ d o o p t i o n s函数

    我们知道 i p i n t r在检测分组的目的地址之前调用 i p _ d o o p t i o n s。
    i p _ d o o p t i o n s被传给一个指针m,该指针指向某个分组, i p _ d o o p t i o n s处理分组中它所
    知道的选项。如果i p _ d o o p t i o n s转发该分组,如在处理 L S R R和S S R R选项时,或由于某个
    差错而丢掉该分组时,它返回 1。如果它不转发分组, i p _ d o o p t i o n s返回0,由i p i n t r继
    续处理该分组。
    i p _ d o o p t i o n s是一个长函数,所以我们分步地显示。第一部分初始化一个 f o r循环,
    处理首部中的各选项。
    当处理每个选项时, c p指向选项的第一个字节。图 9 - 7显示,当可用时,如何从 c p的常
    量位移访问t y p e、l e n g t h和o f f s e t字段。

    R F C把位移(o f f s e t)字段描述作指针(p o i n t e r),指针比位移的描述性略强一些。 o f f s e t的值是
    某个字节在该选项内的序号 (从t y p e开始,序号为1 ),不是从t y p e开始的、且以零开始的计数。
    位移的最小值是4 (I P O P T _ M I N O F F) ,它指向的是多字节选项中数据字段的第一个字节。
    图显示了i p _ d o o p t i o n s函数的整体结构。
    5 5 5 - 5 6 6 i p _ d o o p t i o n s把I C M P差错类型t y p e初始化为I C M P _ P A R A M P R O B,对任何没
    有特定差错类型的差错,这是一个一般值。对于 I C M P _ P A R A M P R O B,c o d e指的是出错字节
    在分组内的位移。这是默认的I C M P差错报文。某些选项将改变这些值。
    i p指向一个2 0字节大小的i p结构,所以i p + 1指向的是跟在I P首部后面的下一个
    i p结构。因为i p _ d o o p t i o n s需要I P首部后面字节的地址,所以就把结果指针转换
    成为指向一个无符号字节 (u _ c h a r)的指针。因此,c p指向标准I P首部以外的第一个
    字节,就是I P选项的第一个字节。


    1. EOL和N O P过程


    5 6 7 - 5 8 2 f o r循环按照每个选项在分组中出现的顺序分别对它们进行处理。 E O L选项以及
    一个无效的选项长度(也即选项长度表明选项数据超过了 I P首部)都将终止该循环。当出现N O P
    选项时,忽略它。s w i t c h语句的d e f a u l t情况隐含要求系统忽略未知的选项。
    下面的内容描述了 s w i t c h语句处理的每个选项。如果 i p _ d o o p t i o n s在处理分组选项
    时没有出错,就把控制交给s w i tc h下面的代码。

    2. 源路由转发

    7 1 9 - 7 2 4 如果分组需要被转发,S S R R或L S R R选项处理代码就把f o r w a r d置位。分组被传
    给i p _ f o r w a r d,并且第2个参数为1,表明分组是按源路由选择的。

    3. 差错处理


    7 2 5 - 7 3 0 如果在s w i t c h语句里出现了错误,i p _ d o o p t i o n s就跳到b a d。从分组长度中
    把I P首部长度减去,因为i c m p _ e r r o r假设首部长度不包含在分组长度里。 i c m p _ e r r o r发
    出适当的差错报文,i p _ d o o p t i o n s返回1,避免i p i n t r处理被丢弃的分组。

  • 相关阅读:
    5.9编程练习
    linux下查看torch版本和cuda版本
    4.13编程练习
    C++ Primer Plus-3.7编程练习-第2题和第5题
    More on vim tips
    Method Calling in Perl
    换零钱 动态规划解法 C语言描述
    海伦平方根算法(LISP描述)
    expect 实现模拟交互
    tmux 入门
  • 原文地址:https://www.cnblogs.com/momenglin/p/11487424.html
Copyright © 2011-2022 走看看