| 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) |