diff --git a/scapy/contrib/mpls.py b/scapy/contrib/mpls.py index 640a0c5..944723a 100644 --- a/scapy/contrib/mpls.py +++ b/scapy/contrib/mpls.py @@ -6,6 +6,7 @@ from scapy.packet import Packet, bind_layers, Padding from scapy.fields import BitField,ByteField from scapy.layers.inet import IP +from scapy.contrib.bier import BIER from scapy.layers.inet6 import IPv6 from scapy.layers.l2 import Ether, GRE @@ -17,9 +18,12 @@ class MPLS(Packet): def guess_payload_class(self, payload): - if len(payload) >= 1: - ip_version = (ord(payload[0]) >> 4) & 0xF - if ip_version == 4: - return IP - elif ip_version == 6: - return IPv6 - return Padding + if not self.s: + return MPLS + ip_version = (ord(payload[0]) >> 4) & 0xF + if ip_version == 4: + return IP + elif ip_version == 5: + return BIER + elif ip_version == 6: + return IPv6 + return Padding @@ -27,3 +29,4 @@ class MPLS(Packet): bind_layers(Ether, MPLS, type=0x8847) bind_layers(GRE, MPLS, proto=0x8847) +bind_layers(MPLS, MPLS, s=0)