#!/usr/bin/perl -w # # Copyright (c) 2014 Sulev-Madis Silber # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # use strict; use warnings FATAL => 'all'; use BSD::Sysctl qw(sysctl sysctl_set); $| = 1; my ($mode) = @ARGV; die unless $mode; my $proctitle_prefix = 'sysctl'; if ($mode eq 'set') { $0 = sprintf "%s %s", $proctitle_prefix, $mode; while () { if (/^\s*((?:dev\.am335x_pwm\.[12]\.(?:period|duty[AB]))|dev\.ti_adc\.0\.ain\.[0-7]\.enable)=(\d{1,10})\s*$/) { sysctl_set $1, $2; } elsif (/^kill$/i) { exit; } } } elsif ($mode eq 'get') { $0 = sprintf "%s %s", $proctitle_prefix, $mode; while () { if (/^\s*(vm\.loadavg|dev\.ti_adc\.0\.ain\.[0-7]\.input|kern\.(?:boottime|version))\s*$/) { my $sysctl = $1; my $result = sysctl $sysctl; next unless defined $result; my $value; if (ref $result eq 'ARRAY') { $value = join ' ', @$result; } else { $value = $result; } $value =~ s/\n//g; printf "%s=%s\n", $sysctl, $value; } } } else { die; }