packetforge: add packetforge for generic flow to extras
[vpp.git] / extras / packetforge / Node.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 from NodeField import *
15 from NodeAttribute import *
16 import json
17
18
19 class Node:
20     def __init__(self):
21         self.fields = []
22         self.attributes = []
23         self.attrsDict = {}
24         self.fieldDict = {}
25
26     def Create(jsonfile):
27         f = open(jsonfile, "r", encoding="utf-8")
28         token = json.load(f)
29
30         if token == None:
31             return None
32
33         if token["type"] != "node":
34             return None
35
36         node = Node()
37
38         name = token["name"]
39         if name == None:
40             return None
41
42         node.Name = name
43
44         if token["layout"] == None:
45             return None
46
47         for ft in token["layout"]:
48             field = NodeField.Create(ft)
49             if field == None:
50                 return None
51             node.fields.append(field)
52             if not field.IsReserved:
53                 node.fieldDict[field.Name] = field
54
55         if "attributes" in token and token["attributes"] != None:
56             for ft in token["attributes"]:
57                 attr = NodeAttribute.Create(ft)
58                 node.attrsDict[attr.Name] = attr
59                 node.attributes.append(attr)
60
61         node.JSON = jsonfile
62         return node