From: Minxi Hou <houminxi@gmail.com>
To: netdev@vger.kernel.org
Cc: dev@openvswitch.org, linux-kselftest@vger.kernel.org,
linux-kernel@vger.kernel.org, aconole@redhat.com,
echaudro@redhat.com, i.maximets@ovn.org, i.maximets@redhat.com,
davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, horms@kernel.org, shuah@kernel.org,
Minxi Hou <houminxi@gmail.com>
Subject: [PATCH net-next 1/5] selftests: openvswitch: convert %-formatting to f-strings
Date: Wed, 13 May 2026 20:12:36 +0800 [thread overview]
Message-ID: <20260513121240.2590767-2-houminxi@gmail.com> (raw)
In-Reply-To: <20260513121240.2590767-1-houminxi@gmail.com>
Convert all %-formatting instances to f-strings to fix C0209
pylint warnings. No behavior change.
Signed-off-by: Minxi Hou <houminxi@gmail.com>
---
.../selftests/net/openvswitch/ovs-dpctl.py | 274 ++++++++----------
1 file changed, 123 insertions(+), 151 deletions(-)
diff --git a/tools/testing/selftests/net/openvswitch/ovs-dpctl.py b/tools/testing/selftests/net/openvswitch/ovs-dpctl.py
index 3b6a26e265a4..3671fe16b5a7 100644
--- a/tools/testing/selftests/net/openvswitch/ovs-dpctl.py
+++ b/tools/testing/selftests/net/openvswitch/ovs-dpctl.py
@@ -65,7 +65,7 @@ OVS_FLOW_CMD_SET = 4
UINT32_MAX = 0xFFFFFFFF
def macstr(mac):
- outstr = ":".join(["%02X" % i for i in mac])
+ outstr = ":".join([f"{i:02X}" for i in mac])
return outstr
@@ -146,7 +146,7 @@ def parse_flags(flag_str, flag_vals):
if flag in flag_vals:
if maskResult & flag_vals[flag]:
raise KeyError(
- "Flag %s set once, cannot be set in multiples" % flag
+ f"Flag {flag} set once, cannot be set in multiples"
)
if setFlag:
@@ -154,7 +154,7 @@ def parse_flags(flag_str, flag_vals):
maskResult |= flag_vals[flag]
else:
- raise KeyError("Missing flag value: %s" % flag)
+ raise KeyError(f"Missing flag value: {flag}")
flag_str = flag_str[flag_len:]
@@ -211,7 +211,7 @@ def convert_ipv6(data):
elif not mask:
mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff'
elif mask.isdigit():
- mask = ipaddress.IPv6Network("::/" + mask).hostmask
+ mask = ipaddress.IPv6Network(f"::/{mask}").hostmask
return ipaddress.IPv6Address(ip).packed, ipaddress.IPv6Address(mask).packed
@@ -342,13 +342,13 @@ def parse_attrs(actstr, attr_desc):
del attr_desc[i]
if not found:
- raise ValueError("Unknown attribute: '%s'" % actstr)
+ raise ValueError(f"Unknown attribute: '{actstr}'")
actstr = actstr[strspn(actstr, ", ") :]
if actstr[0] != ")":
raise ValueError("Action string contains extra garbage or has "
- "unbalanced parenthesis: '%s'" % actstr)
+ f"unbalanced parenthesis: '{actstr}'")
return attrs, actstr[1:]
@@ -403,14 +403,13 @@ class ovsactions(nla):
)
def dpstr(self, more=False):
- args = "group=%d" % self.get_attr("OVS_PSAMPLE_ATTR_GROUP")
+ args = f"group={self.get_attr('OVS_PSAMPLE_ATTR_GROUP')}"
cookie = self.get_attr("OVS_PSAMPLE_ATTR_COOKIE")
if cookie:
- args += ",cookie(%s)" % \
- "".join(format(x, "02x") for x in cookie)
+ args += f",cookie({''.join(format(x, '02x') for x in cookie)})"
- return "psample(%s)" % args
+ return f"psample({args})"
def parse(self, actstr):
desc = (
@@ -441,15 +440,15 @@ class ovsactions(nla):
def dpstr(self, more=False):
args = []
- args.append("sample={:.2f}%".format(
- 100 * self.get_attr("OVS_SAMPLE_ATTR_PROBABILITY") /
- UINT32_MAX))
+ prob = 100 * self.get_attr(
+ "OVS_SAMPLE_ATTR_PROBABILITY") / UINT32_MAX
+ args.append(f"sample={prob:.2f}%")
actions = self.get_attr("OVS_SAMPLE_ATTR_ACTIONS")
if actions:
- args.append("actions(%s)" % actions.dpstr(more))
+ args.append(f"actions({actions.dpstr(more)})")
- return "sample(%s)" % ",".join(args)
+ return f"sample({','.join(args)})"
def parse(self, actstr):
def parse_nested_actions(actstr):
@@ -518,26 +517,20 @@ class ovsactions(nla):
"OVS_NAT_ATTR_IP_MAX"
):
if self.get_attr("OVS_NAT_ATTR_IP_MIN"):
- print_str += "=%s," % str(
- self.get_attr("OVS_NAT_ATTR_IP_MIN")
- )
+ print_str += f"={self.get_attr('OVS_NAT_ATTR_IP_MIN')!s},"
if self.get_attr("OVS_NAT_ATTR_IP_MAX"):
- print_str += "-%s," % str(
- self.get_attr("OVS_NAT_ATTR_IP_MAX")
- )
+ print_str += f"-{self.get_attr('OVS_NAT_ATTR_IP_MAX')!s},"
else:
print_str += ","
if self.get_attr("OVS_NAT_ATTR_PROTO_MIN"):
- print_str += "proto_min=%d," % self.get_attr(
- "OVS_NAT_ATTR_PROTO_MIN"
- )
+ val = self.get_attr("OVS_NAT_ATTR_PROTO_MIN")
+ print_str += f"proto_min={val},"
if self.get_attr("OVS_NAT_ATTR_PROTO_MAX"):
- print_str += "proto_max=%d," % self.get_attr(
- "OVS_NAT_ATTR_PROTO_MAX"
- )
+ val = self.get_attr("OVS_NAT_ATTR_PROTO_MAX")
+ print_str += f"proto_max={val},"
if self.get_attr("OVS_NAT_ATTR_PERSISTENT"):
print_str += "persistent,"
@@ -554,22 +547,18 @@ class ovsactions(nla):
if self.get_attr("OVS_CT_ATTR_COMMIT") is not None:
print_str += "commit,"
if self.get_attr("OVS_CT_ATTR_ZONE") is not None:
- print_str += "zone=%d," % self.get_attr("OVS_CT_ATTR_ZONE")
+ print_str += f"zone={self.get_attr('OVS_CT_ATTR_ZONE')},"
if self.get_attr("OVS_CT_ATTR_HELPER") is not None:
- print_str += "helper=%s," % self.get_attr("OVS_CT_ATTR_HELPER")
+ print_str += f"helper={self.get_attr('OVS_CT_ATTR_HELPER')},"
if self.get_attr("OVS_CT_ATTR_NAT") is not None:
print_str += self.get_attr("OVS_CT_ATTR_NAT").dpstr(more)
print_str += ","
if self.get_attr("OVS_CT_ATTR_FORCE_COMMIT") is not None:
print_str += "force,"
if self.get_attr("OVS_CT_ATTR_EVENTMASK") is not None:
- print_str += "emask=0x%X," % self.get_attr(
- "OVS_CT_ATTR_EVENTMASK"
- )
+ print_str += f"emask=0x{self.get_attr('OVS_CT_ATTR_EVENTMASK'):X},"
if self.get_attr("OVS_CT_ATTR_TIMEOUT") is not None:
- print_str += "timeout=%s" % self.get_attr(
- "OVS_CT_ATTR_TIMEOUT"
- )
+ print_str += f"timeout={self.get_attr('OVS_CT_ATTR_TIMEOUT')}"
print_str += ")"
return print_str
@@ -586,17 +575,15 @@ class ovsactions(nla):
def dpstr(self, more=False):
print_str = "userspace("
if self.get_attr("OVS_USERSPACE_ATTR_PID") is not None:
- print_str += "pid=%d," % self.get_attr(
- "OVS_USERSPACE_ATTR_PID"
- )
+ print_str += f"pid={self.get_attr('OVS_USERSPACE_ATTR_PID')},"
if self.get_attr("OVS_USERSPACE_ATTR_USERDATA") is not None:
print_str += "userdata="
for f in self.get_attr("OVS_USERSPACE_ATTR_USERDATA"):
- print_str += "%x." % f
+ print_str += f"{f:x}."
if self.get_attr("OVS_USERSPACE_ATTR_EGRESS_TUN_PORT") is not None:
- print_str += "egress_tun_port=%d" % self.get_attr(
- "OVS_USERSPACE_ATTR_EGRESS_TUN_PORT"
- )
+ val = self.get_attr(
+ "OVS_USERSPACE_ATTR_EGRESS_TUN_PORT")
+ print_str += f"egress_tun_port={val}"
print_str += ")"
return print_str
@@ -624,13 +611,13 @@ class ovsactions(nla):
print_str += ","
if field[0] == "OVS_ACTION_ATTR_OUTPUT":
- print_str += "%d" % int(self.get_attr(field[0]))
+ print_str += f"{self.get_attr(field[0])}"
elif field[0] == "OVS_ACTION_ATTR_RECIRC":
- print_str += "recirc(0x%x)" % int(self.get_attr(field[0]))
+ print_str += f"recirc(0x{self.get_attr(field[0]):x})"
elif field[0] == "OVS_ACTION_ATTR_TRUNC":
- print_str += "trunc(%d)" % int(self.get_attr(field[0]))
+ print_str += f"trunc({self.get_attr(field[0])})"
elif field[0] == "OVS_ACTION_ATTR_DROP":
- print_str += "drop(%d)" % int(self.get_attr(field[0]))
+ print_str += f"drop({self.get_attr(field[0])})"
elif field[0] == "OVS_ACTION_ATTR_CT_CLEAR":
print_str += "ct_clear"
elif field[0] == "OVS_ACTION_ATTR_POP_VLAN":
@@ -641,8 +628,8 @@ class ovsactions(nla):
tci = datum["vlan_tci"]
vid = tci & 0x0FFF
pcp = (tci >> 13) & 0x7
- print_str += "push_vlan(vid=%d,pcp=%d" \
- ",tpid=0x%04x)" % (vid, pcp, tpid)
+ print_str += (f"push_vlan(vid={vid},pcp={pcp}"
+ f",tpid=0x{tpid:04x})")
elif field[0] == "OVS_ACTION_ATTR_POP_ETH":
print_str += "pop_eth"
elif field[0] == "OVS_ACTION_ATTR_POP_NSH":
@@ -750,32 +737,27 @@ class ovsactions(nla):
for kv in actstr[:paren].split(","):
if "=" not in kv:
raise ValueError(
- "push_vlan(): bad field '%s'"
- % kv.strip())
+ f"push_vlan(): bad field '{kv.strip()}'")
k = kv[:kv.index("=")].strip()
v = kv[kv.index("=") + 1:].strip()
if k == "vid":
vid = int(v, 0)
if vid < 0 or vid > 0xFFF:
raise ValueError(
- "push_vlan(): vid=%d out of "
- "range (0-4095)" % vid)
+ f"push_vlan(): vid={vid} out of range (0-4095)")
elif k == "pcp":
pcp = int(v, 0)
if pcp < 0 or pcp > 7:
raise ValueError(
- "push_vlan(): pcp=%d out of "
- "range (0-7)" % pcp)
+ f"push_vlan(): pcp={pcp} out of range (0-7)")
elif k == "tpid":
tpid = int(v, 0)
if tpid < 0 or tpid > 0xFFFF:
raise ValueError(
- "push_vlan(): tpid=0x%x out "
- "of range (0-0xffff)" % tpid)
+ f"push_vlan(): tpid=0x{tpid:x} out of range (0-0xffff)")
else:
raise ValueError(
- "push_vlan(): unknown key '%s'"
- % k)
+ f"push_vlan(): unknown key '{k}'")
tci = (vid & 0x0FFF) | ((pcp & 0x7) << 13) \
| 0x1000
pvact = self.push_vlan()
@@ -802,7 +784,7 @@ class ovsactions(nla):
actstr = k.parse(actstr, None)
self["attrs"].append(("OVS_ACTION_ATTR_SET", k))
if not actstr.startswith(")"):
- actstr = ")" + actstr
+ actstr = f"){actstr}"
parsed = True
elif parse_starts_block(actstr, "set_masked(", False):
parencount += 1
@@ -812,7 +794,7 @@ class ovsactions(nla):
actstr = k.parse(actstr, m)
self["attrs"].append(("OVS_ACTION_ATTR_SET_MASKED", [k, m]))
if not actstr.startswith(")"):
- actstr = ")" + actstr
+ actstr = f"){actstr}"
parsed = True
elif parse_starts_block(actstr, "ct(", False):
parencount += 1
@@ -943,7 +925,7 @@ class ovsactions(nla):
parencount -= 1
actstr = actstr[strspn(actstr, " "):]
if len(actstr) and actstr[0] != ")":
- raise ValueError("Action str: '%s' unbalanced" % actstr)
+ raise ValueError(f"Action str: '{actstr}' unbalanced")
actstr = actstr[1:]
if len(actstr) and actstr[0] == ")":
@@ -952,7 +934,7 @@ class ovsactions(nla):
actstr = actstr[strspn(actstr, ", ") :]
if not parsed:
- raise ValueError("Action str: '%s' not supported" % actstr)
+ raise ValueError(f"Action str: '{actstr}' not supported")
return (totallen - len(actstr))
@@ -1071,20 +1053,20 @@ class ovskey(nla):
return flowstr, k, m
def dpstr(self, masked=None, more=False):
- outstr = self.proto_str + "("
+ outstr = f"{self.proto_str}("
first = False
for f in self.fields_map:
if first:
outstr += ","
if masked is None:
- outstr += "%s=" % f[0]
+ outstr += f"{f[0]}="
if isinstance(f[2], str):
outstr += f[2] % self[f[1]]
else:
outstr += f[2](self[f[1]])
first = True
elif more or f[3](masked[f[1]]) != 0:
- outstr += "%s=" % f[0]
+ outstr += f"{f[0]}="
if isinstance(f[2], str):
outstr += f[2] % self[f[1]]
else:
@@ -1658,23 +1640,23 @@ class ovskey(nla):
for k in self["attrs"]:
noprint = False
if k[0] == "OVS_TUNNEL_KEY_ATTR_ID":
- print_str += "tun_id=%d" % k[1]
+ print_str += f"tun_id={k[1]}"
elif k[0] == "OVS_TUNNEL_KEY_ATTR_IPV4_SRC":
- print_str += "src=%s" % k[1]
+ print_str += f"src={k[1]}"
elif k[0] == "OVS_TUNNEL_KEY_ATTR_IPV4_DST":
- print_str += "dst=%s" % k[1]
+ print_str += f"dst={k[1]}"
elif k[0] == "OVS_TUNNEL_KEY_ATTR_IPV6_SRC":
- print_str += "ipv6_src=%s" % k[1]
+ print_str += f"ipv6_src={k[1]}"
elif k[0] == "OVS_TUNNEL_KEY_ATTR_IPV6_DST":
- print_str += "ipv6_dst=%s" % k[1]
+ print_str += f"ipv6_dst={k[1]}"
elif k[0] == "OVS_TUNNEL_KEY_ATTR_TOS":
- print_str += "tos=%d" % k[1]
+ print_str += f"tos={k[1]}"
elif k[0] == "OVS_TUNNEL_KEY_ATTR_TTL":
- print_str += "ttl=%d" % k[1]
+ print_str += f"ttl={k[1]}"
elif k[0] == "OVS_TUNNEL_KEY_ATTR_TP_SRC":
- print_str += "tp_src=%d" % k[1]
+ print_str += f"tp_src={k[1]}"
elif k[0] == "OVS_TUNNEL_KEY_ATTR_TP_DST":
- print_str += "tp_dst=%d" % k[1]
+ print_str += f"tp_dst={k[1]}"
elif k[0] == "OVS_TUNNEL_KEY_ATTR_DONT_FRAGMENT":
noprint = True
flagsattrs.append("df")
@@ -1689,7 +1671,7 @@ class ovskey(nla):
print_str += ","
if len(flagsattrs):
- print_str += "flags(" + "|".join(flagsattrs) + ")"
+ print_str += f"flags({'|'.join(flagsattrs)})"
print_str += ")"
return print_str
@@ -1712,8 +1694,8 @@ class ovskey(nla):
pcp = (tci >> 13) & 0x7
cfi = (tci >> 12) & 0x1
if cfi:
- return "vid=%d,pcp=%d,cfi=%d" % (vid, pcp, cfi)
- return "tci=0x%04x" % tci
+ return f"vid={vid},pcp={pcp},cfi={cfi}"
+ return f"tci=0x{tci:04x}"
@staticmethod
def _parse_vlan_from_flowstr(flowstr):
@@ -1757,7 +1739,7 @@ class ovskey(nla):
eq = flowstr.find('=')
if eq == -1:
raise ValueError(
- "vlan(): expected key=value, got '%s'" % flowstr)
+ f"vlan(): expected key=value, got '{flowstr}'")
key = flowstr[:eq].strip()
flowstr = flowstr[eq + 1:]
@@ -1771,13 +1753,12 @@ class ovskey(nla):
flowstr = flowstr[end:]
if not val:
- raise ValueError("vlan(): empty value for key '%s'" % key)
+ raise ValueError(f"vlan(): empty value for key '{key}'")
try:
v = int(val, 0)
except ValueError as exc:
raise ValueError(
- "vlan(): invalid value '%s' for key '%s'"
- % (val, key)) from exc
+ f"vlan(): invalid value '{val}' for key '{key}'") from exc
if key == 'tci':
if has_tci:
@@ -1785,7 +1766,7 @@ class ovskey(nla):
if has_vid or has_pcp or has_cfi:
raise ValueError(_tci_mix_err)
if v > 0xFFFF or v < 0:
- raise ValueError("vlan(): tci=0x%x out of range" % v)
+ raise ValueError(f"vlan(): tci=0x{v:x} out of range")
tci = v
mask = 0xFFFF
has_tci = True
@@ -1795,7 +1776,7 @@ class ovskey(nla):
if has_vid:
raise ValueError("vlan(): duplicate 'vid'")
if v < 0 or v > 0xFFF:
- raise ValueError("vlan(): vid=%d out of range (0-4095)" % v)
+ raise ValueError(f"vlan(): vid={v} out of range (0-4095)")
tci |= v
mask |= 0x0FFF
has_vid = True
@@ -1805,7 +1786,7 @@ class ovskey(nla):
if has_pcp:
raise ValueError("vlan(): duplicate 'pcp'")
if v < 0 or v > 7:
- raise ValueError("vlan(): pcp=%d out of range (0-7)" % v)
+ raise ValueError(f"vlan(): pcp={v} out of range (0-7)")
tci |= (v & 0x7) << 13
mask |= 0xE000
has_pcp = True
@@ -1820,7 +1801,7 @@ class ovskey(nla):
mask |= ovskey._VLAN_CFI_MASK
has_cfi = True
else:
- raise ValueError("vlan(): unknown key '%s'" % key)
+ raise ValueError(f"vlan(): unknown key '{key}'")
flowstr = flowstr[1:] # skip ')'
# Catch immediate '))' (user error). A ')' after ',' is consumed
@@ -1856,7 +1837,7 @@ class ovskey(nla):
depth -= 1
if depth < 0:
raise ValueError(
- "encap(): unmatched ')' at position %d" % i)
+ f"encap(): unmatched ')' at position {i}")
if depth == 0:
end = i
break
@@ -1879,8 +1860,7 @@ class ovskey(nla):
remaining = inner_key.parse(inner_str, inner_mask)
if remaining and re.search(r'[^\s,)]', remaining):
raise ValueError(
- "encap(): unrecognized trailing "
- "content '%s'" % remaining.strip())
+ f"encap(): unrecognized trailing content '{remaining.strip()}'")
return flowstr, inner_key, inner_mask
@@ -1951,7 +1931,7 @@ class ovskey(nla):
lambda x: parse_flags(x, None),
),
):
- fld = field[1] + "("
+ fld = f"{field[1]}("
if not flowstr.startswith(fld):
continue
@@ -2089,15 +2069,15 @@ class ovskey(nla):
else:
if m is None or field[3](m):
val = fmt(v) if callable(fmt) else fmt % v
- print_str += field[1] + "(" + val + "),"
+ print_str += f"{field[1]}({val}),"
elif more or m != 0:
if field[0] == "OVS_KEY_ATTR_VLAN":
- val = "tci=0x%04x/0x%04x" % (v, m)
+ val = f"tci=0x{v:04x}/0x{m:04x}"
elif callable(fmt):
- val = fmt(v) + "/" + fmt(m)
+ val = f"{fmt(v)}/{fmt(m)}"
else:
- val = (fmt % v) + "/" + (fmt % m)
- print_str += field[1] + "(" + val + "),"
+ val = f"{fmt % v}/{fmt % m}"
+ print_str += f"{field[1]}({val}),"
return print_str
@@ -2179,7 +2159,7 @@ class OvsPacket(GenericNetlinkSocket):
elif msg["cmd"] == OvsPacket.OVS_PACKET_CMD_EXECUTE:
up.execute(msg)
else:
- print("Unknown cmd: %d" % msg["cmd"])
+ print(f"Unknown cmd: {msg['cmd']}")
except NetlinkError as ne:
raise ne
@@ -2363,7 +2343,7 @@ class OvsVport(GenericNetlinkSocket):
return "vxlan"
elif vport_type == OvsVport.OVS_VPORT_TYPE_GENEVE:
return "geneve"
- raise ValueError("Unknown vport type:%d" % vport_type)
+ raise ValueError(f"Unknown vport type:{vport_type}")
def str_to_type(vport_type):
if vport_type == "netdev":
@@ -2376,7 +2356,7 @@ class OvsVport(GenericNetlinkSocket):
return OvsVport.OVS_VPORT_TYPE_VXLAN
elif vport_type == "geneve":
return OvsVport.OVS_VPORT_TYPE_GENEVE
- raise ValueError("Unknown vport type: '%s'" % vport_type)
+ raise ValueError(f"Unknown vport type: '{vport_type}'")
def __init__(self, packet=OvsPacket()):
GenericNetlinkSocket.__init__(self)
@@ -2550,16 +2530,14 @@ class OvsFlow(GenericNetlinkSocket):
ufid = self.get_attr("OVS_FLOW_ATTR_UFID")
ufid_str = ""
if ufid is not None:
- ufid_str = (
- "ufid:{:08x}-{:04x}-{:04x}-{:04x}-{:04x}{:08x}".format(
- ufid[0],
- ufid[1] >> 16,
- ufid[1] & 0xFFFF,
- ufid[2] >> 16,
- ufid[2] & 0,
- ufid[3],
- )
- )
+ u0 = ufid[0]
+ u1h = ufid[1] >> 16
+ u1l = ufid[1] & 0xFFFF
+ u2h = ufid[2] >> 16
+ u2l = ufid[2] & 0
+ u3 = ufid[3]
+ ufid_str = (f"ufid:{u0:08x}-{u1h:04x}-{u1l:04x}"
+ f"-{u2h:04x}-{u2l:04x}{u3:08x}")
key_field = self.get_attr("OVS_FLOW_ATTR_KEY")
keymsg = None
@@ -2579,7 +2557,7 @@ class OvsFlow(GenericNetlinkSocket):
print_str = ""
if more:
- print_str += ufid_str + ","
+ print_str += f"{ufid_str},"
if keymsg is not None:
print_str += keymsg.dpstr(maskmsg, more)
@@ -2588,10 +2566,9 @@ class OvsFlow(GenericNetlinkSocket):
if stats is None:
print_str += " packets:0, bytes:0,"
else:
- print_str += " packets:%d, bytes:%d," % (
- stats["packets"],
- stats["bytes"],
- )
+ pkts = stats["packets"]
+ nbytes = stats["bytes"]
+ print_str += f" packets:{pkts}, bytes:{nbytes},"
used = self.get_attr("OVS_FLOW_ATTR_USED")
print_str += " used:"
@@ -2601,7 +2578,7 @@ class OvsFlow(GenericNetlinkSocket):
used_time = int(used)
cur_time_sec = time.clock_gettime(time.CLOCK_MONOTONIC)
used_time = (cur_time_sec * 1000) - used_time
- print_str += "{}s,".format(used_time / 1000)
+ print_str += f"{used_time / 1000}s,"
print_str += " actions:"
if (
@@ -2769,7 +2746,7 @@ class OvsFlow(GenericNetlinkSocket):
pktdata = packetmsg.get_attr("OVS_PACKET_ATTR_PACKET")
pktpres = "yes" if pktdata is not None else "no"
- print("MISS upcall[%d/%s]: %s" % (seq, pktpres, keystr), flush=True)
+ print(f"MISS upcall[{seq}/{pktpres}]: {keystr}", flush=True)
def execute(self, packetmsg):
print("userspace execute command", flush=True)
@@ -2803,16 +2780,16 @@ class psample_sample(genlmsg):
data = ""
for (attr, value) in self["attrs"]:
if attr == "PSAMPLE_ATTR_SAMPLE_GROUP":
- fields.append("group:%d" % value)
+ fields.append(f"group:{value}")
if attr == "PSAMPLE_ATTR_SAMPLE_RATE":
- fields.append("rate:%d" % value)
+ fields.append(f"rate:{value}")
if attr == "PSAMPLE_ATTR_USER_COOKIE":
value = "".join(format(x, "02x") for x in value)
- fields.append("cookie:%s" % value)
+ fields.append(f"cookie:{value}")
if attr == "PSAMPLE_ATTR_DATA" and len(value) > 0:
- data = "data:%s" % "".join(format(x, "02x") for x in value)
+ data = f"data:{''.join(format(x, '02x') for x in value)}"
- return ("%s %s" % (",".join(fields), data)).strip()
+ return (f"{','.join(fields)} {data}").strip()
class psample_msg(Marshal):
@@ -2846,23 +2823,22 @@ def print_ovsdp_full(dp_lookup_rep, ifindex, ndb=NDB(), vpl=OvsVport()):
user_features = dp_lookup_rep.get_attr("OVS_DP_ATTR_USER_FEATURES")
masks_cache_size = dp_lookup_rep.get_attr("OVS_DP_ATTR_MASKS_CACHE_SIZE")
- print("%s:" % dp_name)
- print(
- " lookups: hit:%d missed:%d lost:%d"
- % (base_stats["hit"], base_stats["missed"], base_stats["lost"])
- )
- print(" flows:%d" % base_stats["flows"])
+ print(f"{dp_name}:")
+ hit = base_stats["hit"]
+ missed = base_stats["missed"]
+ lost = base_stats["lost"]
+ print(f" lookups: hit:{hit} missed:{missed} lost:{lost}")
+ print(f" flows:{base_stats['flows']}")
pkts = base_stats["hit"] + base_stats["missed"]
avg = (megaflow_stats["mask_hit"] / pkts) if pkts != 0 else 0.0
- print(
- " masks: hit:%d total:%d hit/pkt:%f"
- % (megaflow_stats["mask_hit"], megaflow_stats["masks"], avg)
- )
+ mhit = megaflow_stats["mask_hit"]
+ mtotal = megaflow_stats["masks"]
+ print(f" masks: hit:{mhit} total:{mtotal} hit/pkt:{avg:f}")
print(" caches:")
- print(" masks-cache: size:%d" % masks_cache_size)
+ print(f" masks-cache: size:{masks_cache_size}")
if user_features is not None:
- print(" features: 0x%X" % user_features)
+ print(f" features: 0x{user_features:X}")
# port print out
for iface in ndb.interfaces:
@@ -2873,16 +2849,12 @@ def print_ovsdp_full(dp_lookup_rep, ifindex, ndb=NDB(), vpl=OvsVport()):
if vpo:
dpo = vpo.get_attr("OVS_TUNNEL_ATTR_DST_PORT")
if dpo:
- opts += " tnl-dport:%s" % dpo
- print(
- " port %d: %s (%s%s)"
- % (
- rep.get_attr("OVS_VPORT_ATTR_PORT_NO"),
- rep.get_attr("OVS_VPORT_ATTR_NAME"),
- OvsVport.type_to_str(rep.get_attr("OVS_VPORT_ATTR_TYPE")),
- opts,
- )
- )
+ opts += f" tnl-dport:{dpo}"
+ port_no = rep.get_attr("OVS_VPORT_ATTR_PORT_NO")
+ name = rep.get_attr("OVS_VPORT_ATTR_NAME")
+ vtype = OvsVport.type_to_str(
+ rep.get_attr("OVS_VPORT_ATTR_TYPE"))
+ print(f" port {port_no}: {name} ({vtype}{opts})")
def main(argv):
@@ -3014,14 +2986,14 @@ def main(argv):
if not found:
msg = "No DP found"
if args.showdp is not None:
- msg += ":'%s'" % args.showdp
+ msg += f":'{args.showdp}'"
print(msg)
elif hasattr(args, "adddp"):
rep = ovsdp.create(args.adddp, args.upcall, args.versioning, ovspk)
if rep is None:
- print("DP '%s' already exists" % args.adddp)
+ print(f"DP '{args.adddp}' already exists")
else:
- print("DP '%s' added" % args.adddp)
+ print(f"DP '{args.adddp}' added")
if args.upcall:
ovspk.upcall_handler(ovsflow)
elif hasattr(args, "deldp"):
@@ -3029,12 +3001,12 @@ def main(argv):
elif hasattr(args, "addif"):
rep = ovsdp.info(args.dpname, 0)
if rep is None:
- print("DP '%s' not found." % args.dpname)
+ print(f"DP '{args.dpname}' not found.")
return 1
dpindex = rep["dpifindex"]
rep = ovsvp.attach(rep["dpifindex"], args.addif, args.ptype,
args.dport, args.lwt)
- msg = "vport '%s'" % args.addif
+ msg = f"vport '{args.addif}'"
if rep and rep["header"]["error"] is None:
msg += " added."
else:
@@ -3046,10 +3018,10 @@ def main(argv):
elif hasattr(args, "delif"):
rep = ovsdp.info(args.dpname, 0)
if rep is None:
- print("DP '%s' not found." % args.dpname)
+ print(f"DP '{args.dpname}' not found.")
return 1
rep = ovsvp.detach(rep["dpifindex"], args.delif)
- msg = "vport '%s'" % args.delif
+ msg = f"vport '{args.delif}'"
if rep and rep["header"]["error"] is None:
msg += " removed."
else:
@@ -3060,7 +3032,7 @@ def main(argv):
elif hasattr(args, "dumpdp"):
rep = ovsdp.info(args.dumpdp, 0)
if rep is None:
- print("DP '%s' not found." % args.dumpdp)
+ print(f"DP '{args.dumpdp}' not found.")
return 1
rep = ovsflow.dump(rep["dpifindex"])
for flow in rep:
@@ -3068,7 +3040,7 @@ def main(argv):
elif hasattr(args, "flbr"):
rep = ovsdp.info(args.flbr, 0)
if rep is None:
- print("DP '%s' not found." % args.flbr)
+ print(f"DP '{args.flbr}' not found.")
return 1
flow = OvsFlow.ovs_flow_msg()
flow.parse(args.flow, args.acts, rep["dpifindex"])
@@ -3076,7 +3048,7 @@ def main(argv):
elif hasattr(args, "flsbr"):
rep = ovsdp.info(args.flsbr, 0)
if rep is None:
- print("DP '%s' not found." % args.flsbr)
+ print(f"DP '{args.flsbr}' not found.")
ovsflow.del_flows(rep["dpifindex"])
return 0
--
2.53.0
next prev parent reply other threads:[~2026-05-13 12:13 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-13 12:12 [PATCH net-next 0/5] selftests: openvswitch: pylint cleanup for ovs-dpctl.py Minxi Hou
2026-05-13 12:12 ` Minxi Hou [this message]
2026-05-13 12:12 ` [PATCH net-next 2/5] selftests: openvswitch: fix misc pylint warnings in ovs-dpctl.py Minxi Hou
2026-05-13 12:12 ` [PATCH net-next 3/5] selftests: openvswitch: rename classes and variables " Minxi Hou
2026-05-13 12:12 ` [PATCH net-next 4/5] selftests: openvswitch: add missing docstrings " Minxi Hou
2026-05-13 12:12 ` [PATCH net-next 5/5] selftests: openvswitch: suppress pylint complexity warnings Minxi Hou
2026-05-13 12:47 ` [PATCH net-next 0/5] selftests: openvswitch: pylint cleanup for ovs-dpctl.py Minxi Hou
2026-05-13 15:05 ` Aaron Conole
2026-05-15 6:53 ` Aaron Conole
2026-05-15 8:47 ` 侯敏熙
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260513121240.2590767-2-houminxi@gmail.com \
--to=houminxi@gmail.com \
--cc=aconole@redhat.com \
--cc=davem@davemloft.net \
--cc=dev@openvswitch.org \
--cc=echaudro@redhat.com \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=i.maximets@ovn.org \
--cc=i.maximets@redhat.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.