BIER
- see draft-ietf-bier-mpls-encapsulation-10 - midpoint, head and tail functions - supported payload protocols; IPv4 and IPv6 only. Change-Id: I59d7363bb6fdfdce8e4016a68a9c8f5a5e5791cb Signed-off-by: Neale Ranns <nranns@cisco.com>
This commit is contained in:

committed by
Damjan Marion

parent
a2ff7b8cfc
commit
d792d9c01e
45
test/patches/scapy-2.3.3/bier.patch
Normal file
45
test/patches/scapy-2.3.3/bier.patch
Normal file
@ -0,0 +1,45 @@
|
||||
diff --git a/scapy/contrib/bier.py b/scapy/contrib/bier.py
|
||||
new file mode 100644
|
||||
index 0000000..e173cdb
|
||||
--- /dev/null
|
||||
+++ b/scapy/contrib/bier.py
|
||||
@@ -0,0 +1,39 @@
|
||||
+# http://trac.secdev.org/scapy/ticket/31
|
||||
+
|
||||
+# scapy.contrib.description = MPLS
|
||||
+# scapy.contrib.status = loads
|
||||
+
|
||||
+from scapy.packet import *
|
||||
+from scapy.fields import *
|
||||
+from scapy.layers.inet import IP
|
||||
+from scapy.layers.inet6 import IPv6
|
||||
+
|
||||
+class BIERLength:
|
||||
+ BIER_LEN_64 = 0
|
||||
+ BIER_LEN_128 = 1
|
||||
+ BIER_LEN_256 = 2
|
||||
+
|
||||
+
|
||||
+
|
||||
+BIERnhcls = { 1: "MPLS",
|
||||
+ 2: "MPLS",
|
||||
+ 4: "IPv4",
|
||||
+ 5: "IPv6" }
|
||||
+
|
||||
+class BIER(Packet):
|
||||
+ name = "BIER"
|
||||
+ fields_desc = [ BitField("id", 5, 4),
|
||||
+ BitField("version", 0, 4),
|
||||
+ BitField("length", 0, 4),
|
||||
+ BitField("entropy", 0, 20),
|
||||
+ BitField("OAM", 0, 2),
|
||||
+ BitField("RSV", 0, 2),
|
||||
+ BitField("DSCP", 0, 6),
|
||||
+ BitEnumField("Proto", 2, 6, BIERnhcls),
|
||||
+ ShortField("BFRID", 0),
|
||||
+ StrFixedLenField("BitString",
|
||||
+ chr(255)*32, 32) ]
|
||||
+
|
||||
+
|
||||
+bind_layers(BIER, IP, Proto=4)
|
||||
+bind_layers(BIER, IPv6, Proto=5)
|
@ -1,16 +1,35 @@
|
||||
diff --git a/scapy/contrib/mpls.py b/scapy/contrib/mpls.py
|
||||
index 640a0c5..6af1d4a 100644
|
||||
index 640a0c5..944723a 100644
|
||||
--- a/scapy/contrib/mpls.py
|
||||
+++ b/scapy/contrib/mpls.py
|
||||
@@ -18,6 +18,8 @@ class MPLS(Packet):
|
||||
@@ -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:
|
||||
+ if not self.s:
|
||||
+ return MPLS
|
||||
ip_version = (ord(payload[0]) >> 4) & 0xF
|
||||
if ip_version == 4:
|
||||
return IP
|
||||
- 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)
|
||||
|
Reference in New Issue
Block a user