github.com/labulakalia/water@v0.0.5-0.20231118024244-f351ca6784b6/waterutil/doc.go (about)

     1  /*
     2  Package waterutil provides utility functions for interpreting TUN/TAP MAC farme headers and IP packet headers. It defines some constants such as protocol numbers and ethernet frame types. Use waterutil along with package water to work with TUN/TAP interface data.
     3  
     4  Frames/packets are interpreted in following format (as in TUN/TAP devices):
     5  
     6  TAP - MAC Frame:
     7     No Tagging
     8    +-----------------------------------------------------------------------------
     9    | Octet |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|...
    10    +-----------------------------------------------------------------------------
    11    | Field | MAC Destination |   MAC  Source   |EType| Payload
    12    +-----------------------------------------------------------------------------
    13  
    14     Single-Tagged -- Octets [12,13] == {0x81, 0x00}
    15    +-----------------------------------------------------------------------------
    16    | Octet |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|...
    17    +-----------------------------------------------------------------------------
    18    | Field | MAC Destination |   MAC  Source   |    Tag    | Payload
    19    +-----------------------------------------------------------------------------
    20  
    21     Double-Tagged -- Octets [12,13] == {0x88, 0xA8}
    22    +-----------------------------------------------------------------------------
    23    | Octet |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|...
    24    +-----------------------------------------------------------------------------
    25    | Field | MAC Destination |   MAC  Source   | Outer Tag | Inner Tag | Payload
    26    +-----------------------------------------------------------------------------
    27  
    28  TUN - IPv4 Packet:
    29    +---------------------------------------------------------------------------------------------------------------+
    30    |       | Octet |           0           |           1           |           2           |           3           |
    31    | Octet |  Bit  |00|01|02|03|04|05|06|07|08|09|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|
    32    +---------------------------------------------------------------------------------------------------------------+
    33    |   0   |   0   |  Version  |    IHL    |      DSCP       | ECN |                 Total  Length                 |
    34    +---------------------------------------------------------------------------------------------------------------+
    35    |   4   |  32   |                Identification                 | Flags  |           Fragment Offset            |
    36    +---------------------------------------------------------------------------------------------------------------+
    37    |   8   |  64   |     Time To Live      |       Protocol        |                Header Checksum                |
    38    +---------------------------------------------------------------------------------------------------------------+
    39    |  12   |  96   |                                       Source IP Address                                       |
    40    +---------------------------------------------------------------------------------------------------------------+
    41    |  16   |  128  |                                    Destination IP Address                                     |
    42    +---------------------------------------------------------------------------------------------------------------+
    43    |  20   |  160  |                                     Options (if IHL > 5)                                      |
    44    +---------------------------------------------------------------------------------------------------------------+
    45    |  24   |  192  |                                                                                               |
    46    |  30   |  224  |                                            Payload                                            |
    47    |  ...  |  ...  |                                                                                               |
    48    +---------------------------------------------------------------------------------------------------------------+
    49  
    50  */
    51  package waterutil