(packet []byte)
| 94 | } |
| 95 | |
| 96 | func (pd *IPDecoder) decodeByVersion(packet []byte) ([]gopacket.LayerType, error) { |
| 97 | version, err := FindIPVersion(packet) |
| 98 | if err != nil { |
| 99 | return nil, err |
| 100 | } |
| 101 | decoded := make([]gopacket.LayerType, 0, pd.layers) |
| 102 | switch version { |
| 103 | case 4: |
| 104 | err = pd.v4parser.DecodeLayers(packet, &decoded) |
| 105 | case 6: |
| 106 | err = pd.v6parser.DecodeLayers(packet, &decoded) |
| 107 | default: |
| 108 | err = fmt.Errorf("unknown ip version %d", version) |
| 109 | } |
| 110 | if err != nil { |
| 111 | return nil, err |
| 112 | } |
| 113 | return decoded, nil |
| 114 | } |
| 115 | |
| 116 | // ICMPDecoder decodes raw packets into IP and ICMP. It can process packets sequentially without allocating |
| 117 | // memory for the layers, so it cannot be called concurrently. |
no test coverage detected