packetforge: add packetforge for generic flow to extras
[vpp.git] / extras / packetforge / ForgeResult.py
1 # Copyright (c) 2022 Intel and/or its affiliates.
2 # Licensed under the Apache License, Version 2.0 (the "License");
3 # you may not use this file except in compliance with the License.
4 # You may obtain a copy of the License at:
5 #
6 #     http://www.apache.org/licenses/LICENSE-2.0
7 #
8 # Unless required by applicable law or agreed to in writing, software
9 # distributed under the License is distributed on an "AS IS" BASIS,
10 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11 # See the License for the specific language governing permissions and
12 # limitations under the License.
13
14 import ExpressionConverter
15
16
17 class ForgeResult:
18     def __init__(self, Header, PacketBuffer, MaskBuffer):
19         self.Headers = Header
20         self.PacketBuffer = PacketBuffer
21         self.MaskBuffer = MaskBuffer
22
23     def ToJSON(self):
24         result = {}
25         result["Length"] = str(len(self.PacketBuffer))
26         result["Packet"] = ExpressionConverter.ByteArrayToString(self.PacketBuffer)
27         result["Mask"] = ExpressionConverter.ByteArrayToString(self.MaskBuffer)
28         result["Protocol Stack"] = []
29
30         for header in self.Headers:
31             head_info = {}
32             head_info["name"] = header.Name()
33             head_info["Fields"] = []
34             for field in header.fields:
35                 if field.Size == 0:
36                     continue
37                 field_info = {}
38                 field_info["name"] = field.Field.Name
39                 field_info["size"] = str(field.Size)
40                 field_info["value"] = field.Value
41                 field_info["mask"] = field.Mask
42                 head_info["Fields"].append(field_info)
43             result["Protocol Stack"].append(head_info)
44
45         return result