summaryrefslogtreecommitdiffstats
path: root/ethtool-cmd.py
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2008-07-18 14:45:56 -0300
committerArnaldo Carvalho de Melo <acme@redhat.com>2008-07-18 14:45:56 -0300
commite48469e3eef7982c6de6f0042cdeccb6f5466ef5 (patch)
tree7fb672ecaab3b05a8b5ac5e0496ac4a0d50ee373 /ethtool-cmd.py
parente7b8606cffd39770e94b23993ada800be222ee8f (diff)
downloadpython-ethtool-e48469e3eef7982c6de6f0042cdeccb6f5466ef5.tar.gz
python-ethtool-e48469e3eef7982c6de6f0042cdeccb6f5466ef5.tar.xz
python-ethtool-e48469e3eef7982c6de6f0042cdeccb6f5466ef5.zip
ethtool: bindings for binding for ETHTOOL_[GS]RINGPARAM
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Diffstat (limited to 'ethtool-cmd.py')
-rwxr-xr-xethtool-cmd.py81
1 files changed, 79 insertions, 2 deletions
diff --git a/ethtool-cmd.py b/ethtool-cmd.py
index 47ee6ac..49d667e 100755
--- a/ethtool-cmd.py
+++ b/ethtool-cmd.py
@@ -207,6 +207,75 @@ def set_offload(interface, args):
except:
pass
+ethtool_ringparam_msgs = (
+ ( "Pre-set maximums", ),
+ ( "RX:\t\t", "rx_max_pending" ),
+ ( "RX Mini:\t", "rx_mini_max_pending" ),
+ ( "RX Jumbo:\t", "rx_jumbo_max_pending" ),
+ ( "TX:\t\t", "tx_max_pending" ),
+ ( "Current hardware settings", ),
+ ( "RX:\t\t", "rx_pending" ),
+ ( "RX Mini:\t", "rx_mini_pending" ),
+ ( "RX Jumbo:\t", "rx_jumbo_pending" ),
+ ( "TX:\t\t", "tx_pending" ),
+)
+
+def show_ring(interface, args = None):
+ printtab("Ring parameters for %s:" % interface)
+ try:
+ ring = ethtool.get_ringparam(interface)
+ except IOError:
+ printtab(" NOT supported!")
+ return
+
+ printed = []
+ for tunable in ethtool_ringparam_msgs:
+ if len(tunable) == 1:
+ printtab("%s:" % tunable[0])
+ else:
+ printtab("%s %s" % (tunable[0], ring[tunable[1]]))
+ printed.append(tunable[1])
+
+ ringkeys = ring.keys()
+ if len(ringkeys) != len(printed):
+ print
+ for tunable in ringkeys:
+ if tunable not in printed:
+ printtab("%s %s" % (tunable, ring[tunable]))
+
+ethtool_ringparam_map = {
+ "rx": "rx_pending",
+ "rx-mini": "rx_mini_pending",
+ "rx-jumbo": "rx_jumbo_pending",
+ "tx": "tx_pending",
+}
+
+def set_ringparam(interface, args):
+ try:
+ ring = ethtool.get_ringparam(interface)
+ except IOError:
+ printtab("ring parameters NOT supported on %s!" % interface)
+ return
+
+ changed = False
+ args = [a.lower() for a in args]
+ for arg, value in [ ( args[i], args[i + 1] ) for i in range(0, len(args), 2) ]:
+ if not ethtool_ringparam_map.has_key(arg):
+ continue
+ try:
+ value = int(value)
+ except:
+ continue
+ real_arg = ethtool_ringparam_map[arg]
+ if ring[real_arg] != value:
+ ring[real_arg] = value
+ changed = True
+
+ if not changed:
+ return
+
+ ethtool.set_ringparam(interface, ring)
+
def show_driver(interface, args = None):
try:
driver = ethtool.get_module(interface)
@@ -249,10 +318,12 @@ def main():
try:
opts, args = getopt.getopt(sys.argv[1:],
- "hcCikK",
+ "hcCgGikK",
("help",
"show-coalesce",
"coalesce",
+ "show-ring",
+ "set-ring",
"driver",
"show-offload",
"offload"))
@@ -278,8 +349,12 @@ def main():
elif o in ("-k", "--show-offload"):
run_cmd_noargs(show_offload, args)
break
+ elif o in ("-g", "--show-ring"):
+ run_cmd_noargs(show_ring, args)
+ break
elif o in ("-K", "--offload",
- "-C", "--coalesce"):
+ "-C", "--coalesce",
+ "-G", "--set-ring"):
all_devices = ethtool.get_devices()
if len(args) < 2:
usage()
@@ -295,6 +370,8 @@ def main():
cmd = set_offload
elif o in ("-C", "--coalesce"):
cmd = set_coalesce
+ elif o in ("-G", "--set-ring"):
+ cmd = set_ringparam
run_cmd(cmd, interface, args)
break