diff options
author | Neale Ranns <neale.ranns@cisco.com> | 2018-01-31 11:35:41 -0800 |
---|---|---|
committer | Damjan Marion <dmarion.lists@gmail.com> | 2018-02-06 12:44:08 +0000 |
commit | f051072f8518097cbce1a8a20510c4e43cb7167c (patch) | |
tree | 7d113687fff867ee46013612b3d1693f0cc2aee8 /test/patches/scapy-2.3.3/bier.patch | |
parent | 7e2c31aba2aa9c2ffbcce235a8cc3c673aba2d2e (diff) |
BIER: fix support for longer bit-string lengths
Change-Id: I2421197b76be58099e5f8ed5554410adff202109
Signed-off-by: Neale Ranns <neale.ranns@cisco.com>
Diffstat (limited to 'test/patches/scapy-2.3.3/bier.patch')
-rw-r--r-- | test/patches/scapy-2.3.3/bier.patch | 65 |
1 files changed, 35 insertions, 30 deletions
diff --git a/test/patches/scapy-2.3.3/bier.patch b/test/patches/scapy-2.3.3/bier.patch index 50814d41315..82a881e9997 100644 --- a/test/patches/scapy-2.3.3/bier.patch +++ b/test/patches/scapy-2.3.3/bier.patch @@ -3,10 +3,10 @@ new file mode 100644 index 0000000..e173cdb --- /dev/null +++ b/scapy/contrib/bier.py -@@ -0,0 +1,53 @@ +@@ -0,0 +1,58 @@ +# http://trac.secdev.org/scapy/ticket/31 + -+# scapy.contrib.description = MPLS ++# scapy.contrib.description = BIER +# scapy.contrib.status = loads + +from scapy.packet import * @@ -14,44 +14,49 @@ index 0000000..e173cdb +from scapy.layers.inet import IP, UDP +from scapy.layers.inet6 import IPv6 + ++ +class BIERLength: -+ BIER_LEN_64 = 0 -+ BIER_LEN_128 = 1 -+ BIER_LEN_256 = 2 ++ BIER_LEN_64 = 0 ++ BIER_LEN_128 = 1 ++ BIER_LEN_256 = 2 ++ BIER_LEN_512 = 3 ++ BIER_LEN_1024 = 4 + + -+BIERnhcls = { 1: "MPLS", -+ 2: "MPLS", -+ 4: "IPv4", -+ 5: "IPv6" } ++BIERnhcls = {1: "MPLS", ++ 2: "MPLS", ++ 4: "IPv4", ++ 5: "IPv6"} + + +class BIFT(Packet): -+ name = "BIFT" -+ fields_desc = [ BitField("bsl", 0, 4), -+ BitField("sd", 0, 8), -+ BitField("set", 0, 8), -+ BitField("cos", 0, 3), -+ BitField("s", 1, 1), -+ ByteField("ttl", 0) ] ++ name = "BIFT" ++ fields_desc = [BitField("bsl", 0, 4), ++ BitField("sd", 0, 8), ++ BitField("set", 0, 8), ++ BitField("cos", 0, 3), ++ BitField("s", 1, 1), ++ ByteField("ttl", 0)] + -+ def guess_payload_class(self, payload): -+ return BIER ++ def guess_payload_class(self, payload): ++ return BIER + + +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) ] ++ name = "BIER" ++ fields_desc = [BitField("id", 5, 4), ++ BitField("version", 0, 4), ++ BitFieldLenField("length", BIERLength.BIER_LEN_256, 4, ++ length_of=lambda x:(x.BitString >> 8)), ++ BitField("entropy", 0, 20), ++ BitField("OAM", 0, 2), ++ BitField("RSV", 0, 2), ++ BitField("DSCP", 0, 6), ++ BitEnumField("Proto", 2, 6, BIERnhcls), ++ ShortField("BFRID", 0), ++ StrLenField("BitString", ++ "", ++ length_from=lambda x:(8 << x.length))] + + +bind_layers(BIER, IP, Proto=4) |