mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-24 19:45:06 +08:00
0531b0357b
Flower tests used to create ingress filter with specified parent qdisc
"parent ffff:" but dump them on "ingress". With recent commit that fixed
tcm_parent handling in dump those are not considered same parent anymore,
which causes iproute2 tc to emit additional "parent ffff:" in first line of
filter dump output. The change in output causes filter match in tests to
fail.
Prevent parent qdisc output when dumping filters in flower tests by always
correctly specifying "ingress" parent both when creating and dumping
filters.
Fixes: a7df4870d7
("net_sched: fix tcm_parent in tc filter dump")
Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
113 lines
3.3 KiB
Python
Executable File
113 lines
3.3 KiB
Python
Executable File
#!/usr/bin/python3
|
|
|
|
"""
|
|
tdc_batch.py - a script to generate TC batch file
|
|
|
|
Copyright (C) 2017 Chris Mi <chrism@mellanox.com>
|
|
"""
|
|
|
|
import argparse
|
|
|
|
parser = argparse.ArgumentParser(description='TC batch file generator')
|
|
parser.add_argument("device", help="device name")
|
|
parser.add_argument("file", help="batch file name")
|
|
parser.add_argument("-n", "--number", type=int,
|
|
help="how many lines in batch file")
|
|
parser.add_argument(
|
|
"-a",
|
|
"--handle_start",
|
|
type=int,
|
|
default=1,
|
|
help="start handle range from (default: 1)")
|
|
parser.add_argument("-o", "--skip_sw",
|
|
help="skip_sw (offload), by default skip_hw",
|
|
action="store_true")
|
|
parser.add_argument("-s", "--share_action",
|
|
help="all filters share the same action",
|
|
action="store_true")
|
|
parser.add_argument("-p", "--prio",
|
|
help="all filters have different prio",
|
|
action="store_true")
|
|
parser.add_argument(
|
|
"-e",
|
|
"--operation",
|
|
choices=['add', 'del', 'replace'],
|
|
default='add',
|
|
help="operation to perform on filters"
|
|
"(default: add filter)")
|
|
parser.add_argument(
|
|
"-m",
|
|
"--mac_prefix",
|
|
type=int,
|
|
default=0,
|
|
choices=range(0, 256),
|
|
help="third byte of source MAC address of flower filter"
|
|
"(default: 0)")
|
|
args = parser.parse_args()
|
|
|
|
device = args.device
|
|
file = open(args.file, 'w')
|
|
|
|
number = 1
|
|
if args.number:
|
|
number = args.number
|
|
|
|
handle_start = args.handle_start
|
|
|
|
skip = "skip_hw"
|
|
if args.skip_sw:
|
|
skip = "skip_sw"
|
|
|
|
share_action = ""
|
|
if args.share_action:
|
|
share_action = "index 1"
|
|
|
|
prio = "prio 1"
|
|
if args.prio:
|
|
prio = ""
|
|
if number > 0x4000:
|
|
number = 0x4000
|
|
|
|
mac_prefix = args.mac_prefix
|
|
|
|
def format_add_filter(device, prio, handle, skip, src_mac, dst_mac,
|
|
share_action):
|
|
return ("filter add dev {} {} protocol ip ingress handle {} "
|
|
" flower {} src_mac {} dst_mac {} action drop {}".format(
|
|
device, prio, handle, skip, src_mac, dst_mac, share_action))
|
|
|
|
|
|
def format_rep_filter(device, prio, handle, skip, src_mac, dst_mac,
|
|
share_action):
|
|
return ("filter replace dev {} {} protocol ip ingress handle {} "
|
|
" flower {} src_mac {} dst_mac {} action drop {}".format(
|
|
device, prio, handle, skip, src_mac, dst_mac, share_action))
|
|
|
|
|
|
def format_del_filter(device, prio, handle, skip, src_mac, dst_mac,
|
|
share_action):
|
|
return ("filter del dev {} {} protocol ip ingress handle {} "
|
|
"flower".format(device, prio, handle))
|
|
|
|
|
|
formatter = format_add_filter
|
|
if args.operation == "del":
|
|
formatter = format_del_filter
|
|
elif args.operation == "replace":
|
|
formatter = format_rep_filter
|
|
|
|
index = 0
|
|
for i in range(0x100):
|
|
for j in range(0x100):
|
|
for k in range(0x100):
|
|
mac = ("{:02x}:{:02x}:{:02x}".format(i, j, k))
|
|
src_mac = "e4:11:{:02x}:{}".format(mac_prefix, mac)
|
|
dst_mac = "e4:12:00:" + mac
|
|
cmd = formatter(device, prio, handle_start + index, skip, src_mac,
|
|
dst_mac, share_action)
|
|
file.write("{}\n".format(cmd))
|
|
index += 1
|
|
if index >= number:
|
|
file.close()
|
|
exit(0)
|