erspan 0.2.2

Unwraps original data packet from GRE/ERSPAN packet
Documentation
// SPDX-License-Identifier: MIT
//
// Copyright 2023 Cisco Systems, Inc. and its affiliates
//
// Use of this source code is governed by an MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT.

use pnet::packet::ethernet::EthernetPacket;
use pnet::packet::ipv4::Ipv4Packet;
use pnet::packet::Packet;

use erspan::erspan_decap;

fn main() {
    let packet = "bcd0744b920d5254002e67850800450001ec5be24000022ff1ee0a000a8c0a000a87100022eb000023352000000ad0a4fd6d0000800001005e7ffffa525400cf4ec80800450001b652b90000021160830a000a01effffffa6360076c01a230844e4f54494659202a20485454502f312e310d0a484f53543a203233392e3235352e3235352e3235303a313930300d0a43414348452d434f4e54524f4c3a206d61782d6167653d36300d0a4c4f434154494f4e3a20687474703a2f2f31302e302e31302e313a323138392f726f6f74446573632e786d6c0d0a5345525645523a20467265654253442f31342e302d43555252454e542055506e502f312e31204d696e6955506e50642f322e322e310d0a4e543a20757569643a32653232646136622d316234352d353766312d663466352d30343336393561303662370d0a55534e3a20757569643a32653232646136622d316234352d353766312d663466352d30343336393561303662370d0a4e54533a20737364703a616c6976650d0a4f50543a2022687474703a2f2f736368656d61732e75706e702e6f72672f75706e702f312f302f223b206e733d30310d0a30312d4e4c533a20313639373238363736300d0a424f4f5449442e55504e502e4f52473a20313639373238363736300d0a434f4e46494749442e55504e502e4f52473a20313333370d0a0d0a";
    let packet_bytes = &hex::decode(packet).unwrap();
    match erspan_decap(packet_bytes) {
        Ok(gre) => {
            println!("GRE {:?} {} > {} original packet data size {} bytes",
                     gre.version, gre.source, gre.destination, gre.original_data_packet.len());

            let packet_inside = &EthernetPacket::new(&*gre.original_data_packet).unwrap();
            let payload = packet_inside.payload();
            match Ipv4Packet::new(payload) {
                Some(packet_ipv4) => {
                    println!("Original packet inside: {:?}", packet_ipv4);
                }
                _ => eprintln!("Invalid packet inside")
            }
        }
        Err(e) => {
            eprintln!("Error parsing GRE packet {:?}", e)
        }
    }
}