IPFIX: improve bitwise operation on enterprise flag bit
This commit is contained in:
parent
2eb2283873
commit
fe1d3df296
|
@ -953,11 +953,11 @@ def parse_fields(data: bytes, count: int) -> (list, int):
|
||||||
offset = 0
|
offset = 0
|
||||||
fields = [] # type: List[Union[TemplateField, TemplateFieldEnterprise]]
|
fields = [] # type: List[Union[TemplateField, TemplateFieldEnterprise]]
|
||||||
for ctr in range(count):
|
for ctr in range(count):
|
||||||
if data[offset] & 1 << 7 != 0: # enterprise flag set
|
if (data[offset] & (1 << 7)) != 0: # enterprise flag set. Bitwise AND checks bit only in the first byte/octet
|
||||||
pack = struct.unpack("!HHI", data[offset:offset + 8])
|
pack = struct.unpack("!HHI", data[offset:offset + 8])
|
||||||
fields.append(
|
fields.append(
|
||||||
TemplateFieldEnterprise(
|
TemplateFieldEnterprise(
|
||||||
id=pack[0] & ~(1 << 15), # ID, clear enterprise flag bit
|
id=(pack[0] & ~(1 << 15)), # clear enterprise flag bit. Bitwise AND and INVERT work on two bytes
|
||||||
length=pack[1], # field length
|
length=pack[1], # field length
|
||||||
enterprise_number=pack[2] # enterprise number
|
enterprise_number=pack[2] # enterprise number
|
||||||
)
|
)
|
||||||
|
@ -966,7 +966,10 @@ def parse_fields(data: bytes, count: int) -> (list, int):
|
||||||
else:
|
else:
|
||||||
pack = struct.unpack("!HH", data[offset:offset + 4])
|
pack = struct.unpack("!HH", data[offset:offset + 4])
|
||||||
fields.append(
|
fields.append(
|
||||||
TemplateField(id=pack[0], length=pack[1])
|
TemplateField(
|
||||||
|
id=pack[0],
|
||||||
|
length=pack[1]
|
||||||
|
)
|
||||||
)
|
)
|
||||||
offset += 4
|
offset += 4
|
||||||
return fields, offset
|
return fields, offset
|
||||||
|
|
Loading…
Reference in a new issue