// See the file "COPYING" in the main distribution directory for copyright.

#include "zeek/packet_analysis/protocol/mpls/MPLS.h"

using namespace zeek::packet_analysis::MPLS;

MPLSAnalyzer::MPLSAnalyzer() : zeek::packet_analysis::Analyzer("MPLS") {}

bool MPLSAnalyzer::AnalyzePacket(size_t len, const uint8_t* data, Packet* packet) {
    // Skip the MPLS label stack.
    bool end_of_stack = false;

    while ( ! end_of_stack ) {
        if ( 4 >= len ) {
            Weird("truncated_link_header", packet);
            return false;
        }

        end_of_stack = *(data + 2u) & 0x01;
        data += 4;
        len -= 4;
    }

    // According to RFC3032 the encapsulated protocol is not encoded.
    // We use the configured default analyzer.
    return ForwardPacket(len, data, packet);
}
