50814d41315fcad7ad71be5f13358a75715232a6
[vpp.git] / test / patches / scapy-2.3.3 / bier.patch
1 diff --git a/scapy/contrib/bier.py b/scapy/contrib/bier.py
2 new file mode 100644
3 index 0000000..e173cdb
4 --- /dev/null
5 +++ b/scapy/contrib/bier.py
6 @@ -0,0 +1,53 @@
7 +# http://trac.secdev.org/scapy/ticket/31
8 +
9 +# scapy.contrib.description = MPLS
10 +# scapy.contrib.status = loads
11 +
12 +from scapy.packet import *
13 +from scapy.fields import *
14 +from scapy.layers.inet import IP, UDP
15 +from scapy.layers.inet6 import IPv6
16 +
17 +class BIERLength:
18 +   BIER_LEN_64 = 0
19 +   BIER_LEN_128 = 1
20 +   BIER_LEN_256 = 2
21 +
22 +
23 +BIERnhcls = {  1: "MPLS",
24 +               2: "MPLS",
25 +               4: "IPv4",
26 +               5: "IPv6" }
27 +
28 +
29 +class BIFT(Packet):
30 +   name = "BIFT"
31 +   fields_desc =  [ BitField("bsl", 0, 4),
32 +                    BitField("sd", 0, 8),
33 +                    BitField("set", 0, 8),
34 +                    BitField("cos", 0, 3),
35 +                    BitField("s", 1, 1),
36 +                    ByteField("ttl", 0)  ]
37 +
38 +   def guess_payload_class(self, payload):
39 +      return BIER
40 +
41 +
42 +class BIER(Packet):
43 +   name = "BIER"
44 +   fields_desc =  [ BitField("id", 5, 4),
45 +                    BitField("version", 0, 4),
46 +                    BitField("length", 0, 4),
47 +                    BitField("entropy", 0, 20),
48 +                    BitField("OAM", 0, 2),
49 +                    BitField("RSV", 0, 2),
50 +                    BitField("DSCP", 0, 6),
51 +                    BitEnumField("Proto", 2, 6, BIERnhcls),
52 +                    ShortField("BFRID", 0),
53 +                    StrFixedLenField("BitString",
54 +                                     chr(255)*32, 32) ]
55 +
56 +
57 +bind_layers(BIER, IP,   Proto=4)
58 +bind_layers(BIER, IPv6, Proto=5)
59 +bind_layers(UDP, BIFT, dport=8138)