packetforge: add packetforge for generic flow to extras
[vpp.git] / extras / packetforge / ProtocolHeaderField.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 ProtocolHeaderField:
18     def __init__(self, Size, Value, Mask, Field):
19         self.Size = Size
20         self.Value = Value
21         self.Mask = Mask
22         self.Field = Field
23
24     def UpdateValue(self, expression, auto):
25         if self.Field.IsReadonly and not auto:
26             return False
27
28         if expression != None:
29             ret, _ = ExpressionConverter.Verify(self.Field.Format, expression)
30             if not ret:
31                 return False
32
33         self.Value = expression
34         return True
35
36     def UpdateMask(self, expression):
37         if expression != None:
38             ret, _ = ExpressionConverter.Verify(self.Field.Format, expression)
39             if not ret:
40                 return False
41
42         self.Mask = expression
43         return True
44
45     def UpdateSize(self):
46         if self.Size:
47             return
48         self.Size = self.Field.Size