7b8b465269
- Package update performed by 1. updating pip, pip-tools, setuptools 2. 'make test-refresh-deps' on ubuntu 22.04 3. fixing 'make test' and 'make docs' issues on ubuntu 22.04 4. 'make test-refresh-deps' on ubuntu 20.04 - Add dependency for 'make test-refresh-deps' to insure python venv is set up. - Update of python formatter, black, caused reformating of 41 python code files. Type: make Change-Id: I7cafdf4b5189065ac57cb6b254937f6e0897a924 Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
.. _packetforge_doc: Packetforge for generic flow ============================ Packetforge is a tool to support generic flow. Since the input format of generic flow is hard to read and create, packetforge can help to create generic flow rules using a format of naming protocols (like Scapy) or json profile. Packetforge is built based on a parsegraph, users can modify the graph nodes and edges if needed. Command examples ---------------- :: $ python flow_create.py --add -p "mac()/ipv4(src=1.1.1.1,dst=2.2.2.2)/udp()" -a "redirect-to-queue 3" -i 1 $ python flow_create.py --add --pattern "mac()/ipv4(src=1.1.1.1,dst=2.2.2.2)/udp()" --actions "redirect-to-queue 3" --interface 1 $ python flow_create.py --del -i 1 -I 0 $ python flow_create.py --del --interface 1 --flow-index 0 Naming format input. There are two operations, add and delete flow rules. For add, it needs three parameters. Pattern is similar to Scapy protocols. Actions is the same as vnet/flow command. Interface is the device to which we want to add the flow rule. For delete, flow index is the index of the flow rule we want to delete. We can get the index number when we add the flow or use command to show the existed flow entry in CLI. :: $ python flow_create.py --add -f "./flow_rule_examples/mac_ipv4.json" -i 1 $ python flow_create.py --add --file "./flow_rule_examples/mac_ipv4.json" --interface 1 $ python flow_create.py --add -f "./flow_rule_examples/mac_ipv4.json" -a "redirect-to-queue 3" -i 1 Json profile format input. This command takes a json profile as parameter. In the json profile, there will be protocols and their fields and values. Users can define spec and mask for each field. Actions can be added in the profile directly, otherwise "-a" option should be added in the command to specify actions. The example can be found in parsegraph/samples folder. Users can create their own json files according to examples and Spec. :: $ python flow_create.py --show -p "mac()/ipv4(src=1.1.1.1,dst=2.2.2.2)/udp()" $ python flow_parse.py --show -p "mac()/ipv4(src=1.1.1.1,dst=2.2.2.2)/udp()" These commands can show the forging result of spec and mask only, without invoving VPP. No need to configure actions and interfaces. Users can get the binary string of spec and mask from a flow pattern if needed. flow_parse.py can be used without VAPI installed. :: $ show flow entry It is a vnet/flow command, used in VPP CLI. It can show the added flow rules after using the above commands. Users can get the flow index with this command and use it to delete the flow rule. ParseGraph ---------- Packetforge is built based on a ParseGraph. The ParseGraph is constructed with nodes and edges. Nodes are protocols, including information about protocol's name, fields and default values. Edges are the relationship between two protocols, including some actions needed when connecting two protocols. For example, change the mac header ethertype to 0x0800 when connecting mac and ipv4. More details are in the Spec in parsegraph folder. Users can build the ParseGraph following the spec by themselves, like adding a new protocol. If NIC supports the new protocol, the rule can be created. Otherwise, it will return error.