From decba6d28a82bf01d37b179f826496c53eab5ed4 Mon Sep 17 00:00:00 2001 From: Max Erenberg Date: Thu, 9 Sep 2021 00:11:58 -0400 Subject: [PATCH] store mirror user's home directory --- include/FOOTER.shtml | 3 - include/HEADER.shtml | 5 - include/default.css | 7 -- include/favicon.ico | Bin 1150 -> 0 bytes include/header.png | Bin 14108 -> 0 bytes include/motd.msg | 11 -- include/robots.txt | 2 - merlin | 1 + migration.sh | 45 ++++++++ misc/debian-check-md5sum | 119 ------------------- routing/csc-mirror | 22 ---- routing/interfaces | 48 -------- routing/orionroutes.py | 186 ------------------------------ routing/rt_realms | 11 -- routing/rt_tables | 14 --- routing/update-orion-routes | 6 - rrdtool/mirror-nl-glue.c | 102 ----------------- rrdtool/mirror-nl-glue.h | 25 ---- rrdtool/mirror-rrd.c | 40 ------- rrdtool/rrdgraph-monthly.sh | 39 ------- rrdtool/rrdgraph-yearly.sh | 39 ------- rrdtool/rrdgraph.sh | 38 ------- snmp/.gitignore | 3 - snmp/CSC-MIB.txt | 49 -------- snmp/Makefile | 11 -- snmp/csc-snmp-subagent.c | 221 ------------------------------------ snmp/mirror-mib.c | 109 ------------------ snmp/mirror-mib.h | 9 -- snmp/mirror-nl-glue.c | 102 ----------------- snmp/mirror-nl-glue.h | 25 ---- snmp/mirror-stats.c | 12 -- snmp/query_mib.sh | 1 - snmp/snmp.conf | 2 - torrents/rtorrent-init.d | 56 --------- torrents/rtorrent.rc | 100 ---------------- update-raid-progress.sh | 5 + 36 files changed, 51 insertions(+), 1417 deletions(-) delete mode 100644 include/FOOTER.shtml delete mode 100644 include/HEADER.shtml delete mode 100644 include/default.css delete mode 100644 include/favicon.ico delete mode 100644 include/header.png delete mode 100644 include/motd.msg delete mode 100644 include/robots.txt create mode 160000 merlin create mode 100755 migration.sh delete mode 100755 misc/debian-check-md5sum delete mode 100644 routing/csc-mirror delete mode 100644 routing/interfaces delete mode 100755 routing/orionroutes.py delete mode 100644 routing/rt_realms delete mode 100644 routing/rt_tables delete mode 100755 routing/update-orion-routes delete mode 100644 rrdtool/mirror-nl-glue.c delete mode 100644 rrdtool/mirror-nl-glue.h delete mode 100644 rrdtool/mirror-rrd.c delete mode 100755 rrdtool/rrdgraph-monthly.sh delete mode 100755 rrdtool/rrdgraph-yearly.sh delete mode 100755 rrdtool/rrdgraph.sh delete mode 100644 snmp/.gitignore delete mode 100644 snmp/CSC-MIB.txt delete mode 100644 snmp/Makefile delete mode 100644 snmp/csc-snmp-subagent.c delete mode 100644 snmp/mirror-mib.c delete mode 100644 snmp/mirror-mib.h delete mode 100644 snmp/mirror-nl-glue.c delete mode 100644 snmp/mirror-nl-glue.h delete mode 100644 snmp/mirror-stats.c delete mode 100644 snmp/query_mib.sh delete mode 100644 snmp/snmp.conf delete mode 100755 torrents/rtorrent-init.d delete mode 100644 torrents/rtorrent.rc create mode 100755 update-raid-progress.sh diff --git a/include/FOOTER.shtml b/include/FOOTER.shtml deleted file mode 100644 index 6fdfe52..0000000 --- a/include/FOOTER.shtml +++ /dev/null @@ -1,3 +0,0 @@ - - diff --git a/include/HEADER.shtml b/include/HEADER.shtml deleted file mode 100644 index ab848a7..0000000 --- a/include/HEADER.shtml +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/include/default.css b/include/default.css deleted file mode 100644 index ebe1039..0000000 --- a/include/default.css +++ /dev/null @@ -1,7 +0,0 @@ -img { - border-width: 0; -} - -div.biglogo { - height: 100px; -} diff --git a/include/favicon.ico b/include/favicon.ico deleted file mode 100644 index a7dd64d66e9c2ab58ceeb50a82bb7786c770b232..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 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 Ye}AVl6;|v3Z(T!3iOGr<2&2 + return 1 + fi + + # only 1 active sync for this project + exec 9>"${LOCKS}$1.lck" + flock -n 9 || return 0 + + # delay a random time (<= 5 mins) + # that way all projects don't sync at once + #sleep $((RANDOM%300)) + + if [[ $FILES == *"$1"* ]]; then + nice rsync $RSYNC_FLAGS --log-file="${LOGS}$1.log" "${SOURCE}$1" "${DESTINATION}" >/dev/null 2>&1 + else + nice rsync $RSYNC_FLAGS --log-file="${LOGS}$1.log" "${SOURCE}$1/" "${DESTINATION}$1/" >/dev/null 2>&1 + fi +} +export -f sync_project + +if [ ! -d "${LOGS}" ]; then + mkdir -p "${LOGS}" +fi + +if [ ! -d "${LOCKS}" ]; then + mkdir -p "${LOCKS}" +fi + +rsync --list-only "${SOURCE}" | grep -v '^[\*\.]' | awk '{print $5}' | grep '^[a-zA-Z0-9]' | parallel --no-notice --jobs 8 sync_project diff --git a/misc/debian-check-md5sum b/misc/debian-check-md5sum deleted file mode 100755 index f52e72d..0000000 --- a/misc/debian-check-md5sum +++ /dev/null @@ -1,119 +0,0 @@ -#!/usr/bin/python2.5 -import sys, os, re, gzip, bz2, hashlib - -package_file_map = { - 'Packages' : file, - 'Packages.gz' : gzip.GzipFile, - 'Packages.bz2' : bz2.BZ2File, - 'Sources' : file, - 'Sources.gz' : gzip.GzipFile, - 'Sources.bz2' : bz2.BZ2File, -} - -def parse_packages_file(path): - try: - open_func = package_file_map[os.path.basename(path)] - file = open_func(path) - except IOError, e: - print "WARNING: failed to open %s: %s" % (path, e) - return {} - cur_dict = {} - key, value = None, '' - ret_list = [] - while True: - try: - line = file.readline() - except IOError, e: - print "WARNING: failed to read %s: %s" % (path, e) - print "WARNING: %s" % e - return {} - - # check if we are done with current value - if (line == '' or line[0] == '\n' or line[0] != ' ') and key != None: - cur_dict[key] = value - - if line == '' or line == '\n': # done current block - if cur_dict != {}: - ret_list.append(cur_dict) - cur_dict = {} - key = None - if line == '': break - elif line[0] == ' ': # multi-line value - value += '\n' + line[1:-1] - else: - if line[-1] == '\n': line = line[:-1] - pos = line.find(':') - key = line[:pos] - if key == '': key = None - value = line[pos+2:] - return ret_list - -def find_packages_files(path): - files = [] - for file in os.listdir(path): - file_path = "%s/%s" % (path, file) - if os.path.islink(file_path): - continue - elif os.path.isdir(file_path): - files += find_packages_files(file_path) - elif file in package_file_map: - files.append(file_path) - return files - -if len(sys.argv) != 2: - print "Usage: debian-check-md5sum.py base-dir" - sys.exit(1) -base_dir = sys.argv[1] - -all = {} -files_regex = re.compile('(\S+)\s+(\S+)\s+(\S+)') -for file in find_packages_files(base_dir): - file_type = os.path.basename(file).split('.')[0] - a = parse_packages_file(file) - for package in parse_packages_file(file): - if file_type == 'Packages': - if 'Filename' in package: - all[package['Filename']] = package - elif file_type == 'Sources': - files = package['Files'].split('\n') - for file in files: - if file == '': continue - match = files_regex.match(file) - file_path = '%s/%s' % (package['Directory'], match.group(3)) - all[file_path] = { 'MD5sum' : match.group(1) } -print "NOTICE: need to check %d files" % len(all) - -ret_val = 0 -block_size = 65536 -for (file, package) in all.iteritems(): - path = '%s/%s' % (base_dir, file) - try: - file = open(path, 'rb') - except IOError: - print "WARNING: missing %s" % path - continue - if 'SHA256' in package: - md = hashlib.sha256() - hash = package['SHA256'] - elif 'SHA1' in package: - md = hashlib.sha1() - hash = package['SHA1'] - elif 'MD5sum' in package: - md = hashlib.md5() - hash = package['MD5sum'] - else: - print "WARNING: no hash found for %s" % path - print package - exit(1) - while True: - data = file.read(block_size) - if data == '': break - md.update(data) - hash_calc = md.hexdigest() - if hash == hash_calc: - print "NOTICE: hash ok for %s [hash = %s]" % (path, hash) - else: - print "ERROR: hash mismatch for %s [hash = %s, hash_calc = %s]" % \ - (path, hash, hash_calc) - ret_val = 1 -exit(ret_val) diff --git a/routing/csc-mirror b/routing/csc-mirror deleted file mode 100644 index 26dd78c..0000000 --- a/routing/csc-mirror +++ /dev/null @@ -1,22 +0,0 @@ -# /etc/cron.d/csc-mirror: mirror cron jobs - -# m h dom mon dow user command - -# update orion routes -30 5 * * * root /usr/local/sbin/update-orion-routes - -# make torrents -*/10 * * * * mirror /home/mirror/bin/make-torrents > /dev/null 2> /dev/null - -# The rsync cron jobs are now run by a small script a2brenna wrote -# that works a bit more intelligently than cron. For one thing, it -# won't kick off a sync when one's already running. Please see -# ~mirror/merlin. -# -- mspang - -# regenerate mirror index at 5:40 am on 14th & 28th of every month -# feel free to run this manually if you've added or removed an -# archive or some such thing -# -# Documented here: http://wiki.csclub.uwaterloo.ca/Mirror#Index -40 5 */14 * * mirror cd /home/mirror/mirror-index && /home/mirror/mirror-index/make-index.py diff --git a/routing/interfaces b/routing/interfaces deleted file mode 100644 index 653222e..0000000 --- a/routing/interfaces +++ /dev/null @@ -1,48 +0,0 @@ -# This file describes the network interfaces available on your system -# and how to activate them. For more information, see interfaces(5). - -# The loopback network interface -auto lo -iface lo inet loopback - -# The routes added here will not be visible to the 'route' command; you -# should use 'ip route show table foo' instead. - -auto eth0 -iface eth0 inet static - address 129.97.134.42 - netmask 255.255.255.0 - gateway 129.97.134.1 - - # campus routes are checked first and are maintained here - up ip rule add from all lookup campus prio 1 - down ip rule del from all lookup campus prio 1 - up ip route add 129.97.0.0/16 via 129.97.134.1 dev eth0 table campus realm campus - down ip route del 129.97.0.0/16 via 129.97.134.1 dev eth0 table campus realm campus - up ip route add 10.0.0.0/8 via 129.97.134.1 dev eth0 table campus realm campus - down ip route del 10.0.0.0/8 via 129.97.134.1 dev eth0 table campus realm campus - up ip route add 172.16.0.0/20 via 129.97.134.1 dev eth0 table campus realm campus - down ip route del 172.16.0.0/20 via 129.97.134.1 dev eth0 table campus realm campus - up ip route add 192.168.0.0/16 via 129.97.134.1 dev eth0 table campus realm campus - down ip route del 192.168.0.0/16 via 129.97.134.1 dev eth0 table campus realm campus - - # orion routes are checked second and are maintained by a cronjob - up ip rule add from all lookup orion prio 2 - down ip rule del from all lookup orion prio 2 - - # Traffic shaping - 100M cogent, 200M orion, 700M campus. - # Note that the border router is configured with a similar policy, but will - # drop rather than queue excess packets. These rules keep them from dropping. - up tc qdisc add dev eth0 parent root handle 1: htb default 2 r2q 10000 - up tc class add dev eth0 parent 1: classid 1:1 htb rate 1000Mbit - up tc class add dev eth0 parent 1:1 classid 1:2 htb rate 100Mbit - up tc class add dev eth0 parent 1:1 classid 1:3 htb rate 200Mbit - up tc class add dev eth0 parent 1:1 classid 1:4 htb rate 700Mbit ceil 1000Mbit - up tc filter add dev eth0 parent 1: protocol ip pref 2 route to orion flowid 1:3 - up tc filter add dev eth0 parent 1: protocol ip pref 1 route to campus flowid 1:4 - down tc qdisc del dev eth0 parent root - -auto eth0:mirror -iface eth0:mirror inet static - address 129.97.134.71 - netmask 255.255.255.0 diff --git a/routing/orionroutes.py b/routing/orionroutes.py deleted file mode 100755 index 9f332cc..0000000 --- a/routing/orionroutes.py +++ /dev/null @@ -1,186 +0,0 @@ -#!/usr/bin/python - -# This file updates the orion routing table. -# Put it at /usr/local/sbin/orionroutes.py - -# Configuration -ORION_TABLE = 1 # from /etc/iproute2/rt_tables -ORION_REALMS = 1 # from /etc/iproute2/rt_realms -ORION_VIAS = [ "66.97.23.33", "66.97.28.65", "129.97.1.46" ] -ORION_GW = "129.97.134.1" -ORION_SRC = "129.97.134.42" -ORION_IFACE = "eth0" - -# Don't touch anything beyond here - -import sys, iplib, SubnetTree -from ctypes import * - -NETLINK_ROUTE = 0 -AF_UNSPEC = 0 -RT_SCOPE_UNIVERSE = 0 -RTPROT_STATIC = 4 -NLM_F_REPLACE = 0x100 - -def die(msg): - sys.stderr.write("orionroutes.py: %s\n" % msg) - sys.exit(1) - -try: - libnl = cdll.LoadLibrary("libnl.so.1") - nl_geterror = CFUNCTYPE(c_char_p) (("nl_geterror", libnl), None) - nl_handle_alloc = CFUNCTYPE(c_void_p) (("nl_handle_alloc", libnl), None) - nl_connect = CFUNCTYPE(c_int, c_void_p, c_int) \ - (("nl_connect", libnl), ((1, "handle", None), (1, "type", NETLINK_ROUTE))) - rtnl_route_alloc = CFUNCTYPE(c_void_p) (("rtnl_route_alloc", libnl), None) - rtnl_link_alloc_cache = CFUNCTYPE(c_void_p, c_void_p) \ - (("rtnl_link_alloc_cache", libnl), ((1, "handle", None), )) - rtnl_link_name2i = CFUNCTYPE(c_int, c_void_p, c_char_p) \ - (("rtnl_link_name2i", libnl), ((1, "cache", None), (1, "iface", -1))) - rtnl_route_set_oif = CFUNCTYPE(c_void_p, c_void_p, c_int) \ - (("rtnl_route_set_oif", libnl), ((1, "route", None), (1, "iface", -1))) - nl_cache_free = CFUNCTYPE(None, c_void_p) \ - (("nl_cache_free", libnl), ((1, "cache", None), )) - nl_addr_parse = CFUNCTYPE(c_void_p, c_char_p, c_int) \ - (("nl_addr_parse", libnl), ((1, "dst", None), (1, "family", AF_UNSPEC))) - rtnl_route_set_dst = CFUNCTYPE(c_int, c_void_p, c_void_p) \ - (("rtnl_route_set_dst", libnl), ((1, "route", None), (1, "dst", None))) - rtnl_route_set_pref_src = CFUNCTYPE(c_int, c_void_p, c_void_p) \ - (("rtnl_route_set_pref_src", libnl), ((1, "route", None), (1, "src", None))) - nl_addr_put = CFUNCTYPE(None, c_void_p) \ - (("nl_addr_put", libnl), ((1, "addr", None), )) - rtnl_route_set_gateway = CFUNCTYPE(c_int, c_void_p, c_void_p) \ - (("rtnl_route_set_gateway", libnl), ((1, "route", None), (1, "gw", None))) - rtnl_route_set_table = CFUNCTYPE(None, c_void_p, c_int) \ - (("rtnl_route_set_table", libnl), ((1, "route", None), (1, "table", -1))) - rtnl_route_set_scope = CFUNCTYPE(None, c_void_p, c_int) \ - (("rtnl_route_set_scope", libnl), ((1, "route", None), (1, "scope", -1))) - rtnl_route_set_protocol = CFUNCTYPE(None, c_void_p, c_int) \ - (("rtnl_route_set_protocol", libnl), ((1, "route", None), (1, "proto", -1))) - rtnl_route_set_realms = CFUNCTYPE(None, c_void_p, c_int) \ - (("rtnl_route_set_realms", libnl), ((1, "route", None), (1, "realms", -1))) - rtnl_route_add = CFUNCTYPE(c_int, c_void_p, c_void_p, c_int) \ - (("rtnl_route_add", libnl), ((1, "handle", None), (1, "route", None), (1, "flags", 0))) - rtnl_route_put = CFUNCTYPE(None, c_void_p) \ - (("rtnl_route_put", libnl), ((1, "route", None), )) - nl_handle_destroy = CFUNCTYPE(None, c_void_p) \ - (("nl_handle_destroy", libnl), ((1, "handle", None), )) - rtnl_route_alloc_cache = CFUNCTYPE(c_void_p, c_void_p) \ - (("rtnl_route_alloc_cache", libnl), ((1, "handle", None), )) - nl_cache_get_first = CFUNCTYPE(c_void_p, c_void_p) \ - (("nl_cache_get_first", libnl), ((1, "cache", None), )) - rtnl_route_get_table = CFUNCTYPE(c_int, c_void_p) \ - (("rtnl_route_get_table", libnl), ((1, "route", None), )) - rtnl_route_get_dst = CFUNCTYPE(c_void_p, c_void_p) \ - (("rtnl_route_get_dst", libnl), ((1, "route", None), )) - nl_addr2str = CFUNCTYPE(c_char_p, c_void_p, c_char_p, c_int) \ - (("nl_addr2str", libnl), ((1, "addr", None), (1, "buffer", None), (1, "size", 0))) - rtnl_route_del = CFUNCTYPE(c_int, c_void_p, c_void_p, c_int) \ - (("rtnl_route_del", libnl), ((1, "handle", None), (1, "route", None), (1, "flags", 0))) - nl_cache_get_next = CFUNCTYPE(c_void_p, c_void_p) \ - (("nl_cache_get_next", libnl), ((1, "object", None), )) -except Exception,e: - die("Failed to load libnl: %s" % e) - -def nl_die(func): - die("%s: %s" % (func, nl_geterror())) - -ips = [[] for i in range(33)] -for line in sys.stdin: - try: - ip, mask, via = line.strip().split(',')[0:3] - except KeyError, ValueError: - die("Malformed line: %s" % line.strip()) - - if via not in ORION_VIAS: - continue - bits = int(iplib.IPv4NetMask(mask).get_bits()) - ips[bits].append(int(iplib.IPv4Address(ip))) - -count = sum([len(ip_list) for ip_list in ips]) -if count < 10: - die("Not enough routes (got %d)" % count) - -cidrs = [] -for bits in range(32, 1, -1): - ips[bits].sort() - last_ip = 0 - for ip in ips[bits]: - if ip != last_ip and (ip ^ last_ip) == (1 << (32 - bits)): - ips[bits - 1].append(ip & (((1 << (bits - 1)) - 1) << (32 - (bits - 1)))) - last_ip = 0 - elif last_ip != 0: - cidrs.append((iplib.IPv4Address(last_ip), bits)) - last_ip = ip - if last_ip != 0: - cidrs.append((iplib.IPv4Address(last_ip), bits)) - -nlh = nl_handle_alloc() -if nlh == None: nl_die("nl_handle_alloc") -if nl_connect(nlh, NETLINK_ROUTE) < 0: nl_die("nl_connect") - -link_cache = rtnl_link_alloc_cache(nlh) -if link_cache == None: nl_die("rtnl_link_alloc") -iface = rtnl_link_name2i(link_cache, ORION_IFACE) -if iface < 0: nl_die("rtnl_link_name2i") -nl_cache_free(link_cache) - -cidrs.sort(lambda (ip1, bits1), (ip2, bits2): cmp(ip1, ip2) if bits1 == bits2 else (bits1 - bits2)) -tree = SubnetTree.SubnetTree() -for (ip, bits) in cidrs: - if str(ip) not in tree: - cidr = "%s/%s" % (ip, bits) - tree[cidr] = None - - route = rtnl_route_alloc() - if route == None: nl_die("rtnl_route_alloc") - - dstaddr = nl_addr_parse(cidr, AF_UNSPEC) - if dstaddr == None: nl_die("nl_addr_parse(%s)" % cidr) - if rtnl_route_set_dst(route, dstaddr) < 0: nl_die("rtnl_route_set_dst") - nl_addr_put(dstaddr) - - srcaddr = nl_addr_parse(ORION_SRC, AF_UNSPEC) - if srcaddr == None: nl_die("nl_addr_parse(%s)" % ORION_SRC) - if rtnl_route_set_pref_src(route, srcaddr) < 0: nl_die("nl_route_set_pref_src") - nl_addr_put(srcaddr) - - gwaddr = nl_addr_parse(ORION_GW, AF_UNSPEC) - if gwaddr == None: nl_die("nl_addr_parse(%s)" % ORION_GW) - if rtnl_route_set_gateway(route, gwaddr) < 0: nl_die("nl_route_set_gateway") - nl_addr_put(gwaddr) - - rtnl_route_set_oif(route, iface) - rtnl_route_set_table(route, ORION_TABLE) - rtnl_route_set_scope(route, RT_SCOPE_UNIVERSE) - rtnl_route_set_protocol(route, RTPROT_STATIC) - rtnl_route_set_realms(route, ORION_REALMS) - - if rtnl_route_add(nlh, route, NLM_F_REPLACE) < 0: nl_die("rtnl_route_add(dst=%s)" % cidr) - rtnl_route_put(route) - -route_cache = rtnl_route_alloc_cache(nlh) -if route_cache == None: nl_die("rtnl_route_alloc_cache") -dstaddr_s = create_string_buffer(100) - -route = nl_cache_get_first(route_cache) -while route != None: - table = rtnl_route_get_table(route) - if table != ORION_TABLE: - route = nl_cache_get_next(route) - continue - - dstaddr = rtnl_route_get_dst(route) - if dstaddr == None: - continue - if nl_addr2str(dstaddr, dstaddr_s, sizeof(dstaddr_s)) == None: nl_die("nl_addr2str") - dstaddr = str(repr(dstaddr_s.value)).strip('\'').split('/')[0] - - if dstaddr not in tree: - rtnl_route_del(nlh, route, 0) - - route = nl_cache_get_next(route) - -nl_cache_free(route_cache) - -nl_handle_destroy(nlh) diff --git a/routing/rt_realms b/routing/rt_realms deleted file mode 100644 index 65a7091..0000000 --- a/routing/rt_realms +++ /dev/null @@ -1,11 +0,0 @@ -# This file lives at /etc/iproute2/rt_realms - -# -# reserved values -# -0 cosmos -# -# local -# -1 orion -2 campus diff --git a/routing/rt_tables b/routing/rt_tables deleted file mode 100644 index acb8a52..0000000 --- a/routing/rt_tables +++ /dev/null @@ -1,14 +0,0 @@ -# This file lives at /etc/iproute2/rt_tables - -# -# reserved values -# -255 local -254 main -253 default -0 unspec -# -# local -# -1 orion -2 campus diff --git a/routing/update-orion-routes b/routing/update-orion-routes deleted file mode 100755 index ae9d3c3..0000000 --- a/routing/update-orion-routes +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -# This file updates the orion routing table. -# Put it at /usr/local/sbin/update-orion-routes. - -wget --quiet -O - https://istns.uwaterloo.ca/borderroutes/borderroutes.txt | /usr/local/sbin/orionroutes.py diff --git a/rrdtool/mirror-nl-glue.c b/rrdtool/mirror-nl-glue.c deleted file mode 100644 index 720ac6a..0000000 --- a/rrdtool/mirror-nl-glue.c +++ /dev/null @@ -1,102 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "mirror-nl-glue.h" - -static struct nl_cache *link_cache, *class_cache; -static struct rtnl_link *eth; -static int ifindex; - -struct class_info cogent_class = { "cogent", "01:02", }; -struct class_info orion_class = { "orion", "01:03", }; -struct class_info campus_class = { "campus", "01:04", }; - -static struct nl_handle *nl_handle; - -void die(const char *message) { - fprintf(stderr, "fatal: %s\n", message); - exit(1); -} - -static void match_obj(struct nl_object *obj, void *arg) { - struct nl_object *needle = *(struct nl_object **)arg; - struct nl_object **ret = (struct nl_object **)arg + 1; - - if (!*ret && nl_object_identical(obj, needle)) { - nl_object_get(obj); - *ret = obj; - } -} - -static struct rtnl_class *get_class_by_id(char *id, int ifindex) { - uint32_t handle; - struct rtnl_class *needle; - struct nl_object *magic[2]; - - if (rtnl_tc_str2handle(id, &handle)) - die("invalid id"); - - needle = rtnl_class_alloc(); - rtnl_class_set_ifindex(needle, ifindex); - rtnl_class_set_handle(needle, handle); - - magic[0] = (struct nl_object *)needle; - magic[1] = (struct nl_object *)NULL; - - nl_cache_foreach(class_cache, match_obj, magic); - - rtnl_class_put(needle); - return (struct rtnl_class *)magic[1]; -} - -uint64_t get_class_byte_count(struct class_info *info) { - struct rtnl_class *class = get_class_by_id(info->id, ifindex); - uint64_t bytes; - if (!class) - die("class not found"); - bytes = rtnl_class_get_stat(class, RTNL_TC_BYTES); - rtnl_class_put(class); - return bytes; -} - -void mirror_stats_refresh(void) { - nl_cache_refill(nl_handle, class_cache); -} - -void mirror_stats_initialize(void) { - nl_handle = nl_handle_alloc(); - if (!nl_handle) - die("unable to allocate handle"); - - if (nl_connect(nl_handle, NETLINK_ROUTE) < 0) - die("unable to connect to netlink"); - - link_cache = rtnl_link_alloc_cache(nl_handle); - if (!link_cache) - die("unable to allocate link cache"); - - eth = rtnl_link_get_by_name(link_cache, "eth0"); - if (!eth) - die("unable to acquire eth0"); - ifindex = rtnl_link_get_ifindex(eth); - - class_cache = rtnl_class_alloc_cache(nl_handle, ifindex); - if (!class_cache) - die("unable to allocate class cache"); -} - -void mirror_stats_cleanup(void) { - rtnl_link_put(eth); - nl_cache_free(class_cache); - nl_cache_free(link_cache); - nl_close(nl_handle); - nl_handle_destroy(nl_handle); -} - diff --git a/rrdtool/mirror-nl-glue.h b/rrdtool/mirror-nl-glue.h deleted file mode 100644 index 53add1a..0000000 --- a/rrdtool/mirror-nl-glue.h +++ /dev/null @@ -1,25 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct class_info { - char *name; - char *id; -}; - -extern struct class_info cogent_class; -extern struct class_info orion_class; -extern struct class_info campus_class; - -void mirror_stats_refresh(void); -void mirror_stats_initialize(void); -void mirror_stats_cleanup(void); -void die(const char *); -uint64_t get_class_byte_count(struct class_info *); diff --git a/rrdtool/mirror-rrd.c b/rrdtool/mirror-rrd.c deleted file mode 100644 index edf46ed..0000000 --- a/rrdtool/mirror-rrd.c +++ /dev/null @@ -1,40 +0,0 @@ -#include "mirror-nl-glue.h" -#include - -int main(void) { - char *argv[3]; - unsigned long packet_count; - - switch(fork()) { - case -1: - return -1; - case 0: - close(0); - close(1); - setsid(); - break; - default: - _exit(0); - } - - mirror_stats_initialize(); - argv[0] = malloc(1024); - for (;;) { - packet_count = get_class_byte_count(&cogent_class); - snprintf(argv[0], 1024, "N:%lu", packet_count); - rrd_update_r("/var/rrdtool/cogent.rrd", NULL, 1, argv); - packet_count = get_class_byte_count(&orion_class); - snprintf(argv[0], 1024, "N:%lu", packet_count); - rrd_update_r("/var/rrdtool/orion.rrd", NULL, 1, argv); - packet_count = get_class_byte_count(&campus_class); - snprintf(argv[0], 1024, "N:%lu", packet_count); - rrd_update_r("/var/rrdtool/campus.rrd", NULL, 1, argv); - if (rrd_test_error()) { - fprintf(stderr, "ERROR: %s\n", rrd_get_error()); - rrd_clear_error(); - } - sleep(5); - mirror_stats_refresh(); - } -} - diff --git a/rrdtool/rrdgraph-monthly.sh b/rrdtool/rrdgraph-monthly.sh deleted file mode 100755 index 4aeff09..0000000 --- a/rrdtool/rrdgraph-monthly.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -/usr/bin/rrdtool graph /mirror/root/stats_monthly.png \ --s -1m \ ---imgformat=PNG \ ---title='Mirror Traffic' \ ---base=1000 \ ---height=120 \ ---width=600 \ ---alt-autoscale-max \ ---lower-limit=0 \ ---vertical-label='bits per second' \ ---slope-mode \ ---font TITLE:10: \ ---font AXIS:8: \ ---font LEGEND:8: \ ---font UNIT:8: \ -DEF:a="/var/rrdtool/cogent.rrd":snmp_oid:AVERAGE \ -DEF:b="/var/rrdtool/orion.rrd":snmp_oid:AVERAGE \ -DEF:c="/var/rrdtool/campus.rrd":snmp_oid:AVERAGE \ -CDEF:cdefa=a,8,* \ -CDEF:cdefe=b,8,* \ -CDEF:cdefi=c,8,* \ -CDEF:cdefbc=TIME,1318318854,GT,a,a,UN,0,a,IF,IF,TIME,1318318854,GT,b,b,UN,0,b,IF,IF,TIME,1318318854,GT,c,c,UN,0,c,IF,IF,+,+,8,* \ -AREA:cdefa#157419FF:"Cogent" \ -GPRINT:cdefa:LAST:"Current\:%8.2lf%s" \ -GPRINT:cdefa:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefa:MAX:"Maximum\:%8.2lf%s\n" \ -AREA:cdefe#00CF00FF:"Orion":STACK \ -GPRINT:cdefe:LAST:" Current\:%8.2lf%s" \ -GPRINT:cdefe:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefe:MAX:"Maximum\:%8.2lf%s\n" \ -AREA:cdefi#EE5019FF:"Campus":STACK \ -GPRINT:cdefi:LAST:"Current\:%8.2lf%s" \ -GPRINT:cdefi:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefi:MAX:"Maximum\:%8.2lf%s\n" \ -LINE1:cdefbc#000000FF:"Total" \ -GPRINT:cdefbc:LAST:" Current\:%8.2lf%s" \ -GPRINT:cdefbc:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefbc:MAX:"Maximum\:%8.2lf%s\n" >/dev/null 2>/dev/null diff --git a/rrdtool/rrdgraph-yearly.sh b/rrdtool/rrdgraph-yearly.sh deleted file mode 100755 index 86b556b..0000000 --- a/rrdtool/rrdgraph-yearly.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/sh -/usr/bin/rrdtool graph /mirror/root/stats_yearly.png \ --s -1y \ ---imgformat=PNG \ ---title='Mirror Traffic' \ ---base=1000 \ ---height=120 \ ---width=600 \ ---alt-autoscale-max \ ---lower-limit=0 \ ---vertical-label='bits per second' \ ---slope-mode \ ---font TITLE:10: \ ---font AXIS:8: \ ---font LEGEND:8: \ ---font UNIT:8: \ -DEF:a="/var/rrdtool/cogent.rrd":snmp_oid:AVERAGE \ -DEF:b="/var/rrdtool/orion.rrd":snmp_oid:AVERAGE \ -DEF:c="/var/rrdtool/campus.rrd":snmp_oid:AVERAGE \ -CDEF:cdefa=a,8,* \ -CDEF:cdefe=b,8,* \ -CDEF:cdefi=c,8,* \ -CDEF:cdefbc=TIME,1318318854,GT,a,a,UN,0,a,IF,IF,TIME,1318318854,GT,b,b,UN,0,b,IF,IF,TIME,1318318854,GT,c,c,UN,0,c,IF,IF,+,+,8,* \ -AREA:cdefa#157419FF:"Cogent" \ -GPRINT:cdefa:LAST:"Current\:%8.2lf%s" \ -GPRINT:cdefa:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefa:MAX:"Maximum\:%8.2lf%s\n" \ -AREA:cdefe#00CF00FF:"Orion":STACK \ -GPRINT:cdefe:LAST:" Current\:%8.2lf%s" \ -GPRINT:cdefe:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefe:MAX:"Maximum\:%8.2lf%s\n" \ -AREA:cdefi#EE5019FF:"Campus":STACK \ -GPRINT:cdefi:LAST:"Current\:%8.2lf%s" \ -GPRINT:cdefi:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefi:MAX:"Maximum\:%8.2lf%s\n" \ -LINE1:cdefbc#000000FF:"Total" \ -GPRINT:cdefbc:LAST:" Current\:%8.2lf%s" \ -GPRINT:cdefbc:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefbc:MAX:"Maximum\:%8.2lf%s\n" >/dev/null 2>/dev/null diff --git a/rrdtool/rrdgraph.sh b/rrdtool/rrdgraph.sh deleted file mode 100755 index 72c4a73..0000000 --- a/rrdtool/rrdgraph.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -/usr/bin/rrdtool graph /mirror/root/stats.png \ ---imgformat=PNG \ ---title='Mirror Traffic' \ ---base=1000 \ ---height=120 \ ---width=600 \ ---alt-autoscale-max \ ---lower-limit=0 \ ---vertical-label='bits per second' \ ---slope-mode \ ---font TITLE:10: \ ---font AXIS:8: \ ---font LEGEND:8: \ ---font UNIT:8: \ -DEF:a="/var/rrdtool/cogent.rrd":snmp_oid:AVERAGE \ -DEF:b="/var/rrdtool/orion.rrd":snmp_oid:AVERAGE \ -DEF:c="/var/rrdtool/campus.rrd":snmp_oid:AVERAGE \ -CDEF:cdefa=a,8,* \ -CDEF:cdefe=b,8,* \ -CDEF:cdefi=c,8,* \ -CDEF:cdefbc=TIME,1318318854,GT,a,a,UN,0,a,IF,IF,TIME,1318318854,GT,b,b,UN,0,b,IF,IF,TIME,1318318854,GT,c,c,UN,0,c,IF,IF,+,+,8,* \ -AREA:cdefa#157419FF:"Cogent" \ -GPRINT:cdefa:LAST:"Current\:%8.2lf%s" \ -GPRINT:cdefa:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefa:MAX:"Maximum\:%8.2lf%s\n" \ -AREA:cdefe#00CF00FF:"Orion":STACK \ -GPRINT:cdefe:LAST:" Current\:%8.2lf%s" \ -GPRINT:cdefe:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefe:MAX:"Maximum\:%8.2lf%s\n" \ -AREA:cdefi#EE5019FF:"Campus":STACK \ -GPRINT:cdefi:LAST:"Current\:%8.2lf%s" \ -GPRINT:cdefi:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefi:MAX:"Maximum\:%8.2lf%s\n" \ -LINE1:cdefbc#000000FF:"Total" \ -GPRINT:cdefbc:LAST:" Current\:%8.2lf%s" \ -GPRINT:cdefbc:AVERAGE:"Average\:%8.2lf%s" \ -GPRINT:cdefbc:MAX:"Maximum\:%8.2lf%s\n" >/dev/null 2>/dev/null diff --git a/snmp/.gitignore b/snmp/.gitignore deleted file mode 100644 index 1792b04..0000000 --- a/snmp/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/csc-snmp-subagent -/mirror-stats -*.o diff --git a/snmp/CSC-MIB.txt b/snmp/CSC-MIB.txt deleted file mode 100644 index ca0b8db..0000000 --- a/snmp/CSC-MIB.txt +++ /dev/null @@ -1,49 +0,0 @@ -# this file goes at /etc/csc/mibs/CSC-MIB.txt -# and make sure to copy snmp.conf - -CSC-MIB DEFINITIONS ::= BEGIN - -IMPORTS - MODULE-IDENTITY, OBJECT-TYPE, Counter32, Gauge32, Counter64, - Integer32, TimeTicks, mib-2, enterprises, - NOTIFICATION-TYPE FROM SNMPv2-SMI - TEXTUAL-CONVENTION, DisplayString, - PhysAddress, TruthValue, RowStatus, - TimeStamp, AutonomousType, TestAndIncr FROM SNMPv2-TC - MODULE-COMPLIANCE, OBJECT-GROUP, - NOTIFICATION-GROUP FROM SNMPv2-CONF - snmpTraps FROM SNMPv2-MIB - IANAifType FROM IANAifType-MIB; - -csclub OBJECT IDENTIFIER ::= { enterprises 27934 } - -cscMIB MODULE-IDENTITY - LAST-UPDATED "200905080000Z" - ORGANIZATION "University of Waterloo Computer Science Club" - CONTACT-INFO "systems-committee@csclub.uwaterloo.ca" - DESCRIPTION "Computer Science Club Local MIBs" - REVISION "200905080000Z" - DESCRIPTION "Initial revision" - ::= { csclub 2 } - -mirror OBJECT IDENTIFIER ::= { cscMIB 2 } - -cogentBytes OBJECT-TYPE - SYNTAX Counter64 - MAX-ACCESS read-only - STATUS current - ::= { mirror 1 } - -orionBytes OBJECT-TYPE - SYNTAX Counter64 - MAX-ACCESS read-only - STATUS current - ::= { mirror 2 } - -campusBytes OBJECT-TYPE - SYNTAX Counter64 - MAX-ACCESS read-only - STATUS current - ::= { mirror 3 } - -END diff --git a/snmp/Makefile b/snmp/Makefile deleted file mode 100644 index ae0ec1d..0000000 --- a/snmp/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -LDFLAGS := -lnl $(shell net-snmp-config --base-agent-libs) -CFLAGS := -g3 -O2 -Wall - -all: mirror-stats csc-snmp-subagent - -mirror-stats: mirror-stats.o mirror-nl-glue.o - -csc-snmp-subagent: csc-snmp-subagent.o mirror-mib.o mirror-nl-glue.o - -clean: - rm -f *.o mirror-stats csc-snmp-subagent diff --git a/snmp/csc-snmp-subagent.c b/snmp/csc-snmp-subagent.c deleted file mode 100644 index 103760b..0000000 --- a/snmp/csc-snmp-subagent.c +++ /dev/null @@ -1,221 +0,0 @@ -/* generated from net-snmp-config */ -#include -#ifdef HAVE_SIGNAL -#include -#endif /* HAVE_SIGNAL */ -#include -#include - #include "mirror-mib.h" -const char *app_name = "cscMIB"; - -extern int netsnmp_running; - -#ifdef __GNUC__ -#define UNUSED __attribute__((unused)) -#else -#define UNUSED -#endif - -RETSIGTYPE -stop_server(UNUSED int a) { - netsnmp_running = 0; -} - -static void -usage(const char *prog) -{ - fprintf(stderr, - "USAGE: %s [OPTIONS]\n" - "\n" - "OPTIONS:\n", prog); - - fprintf(stderr, - " -d\t\t\tdump all traffic\n" - " -D TOKEN[,...]\tturn on debugging output for the specified " - "TOKENs\n" - "\t\t\t (ALL gives extremely verbose debugging output)\n" - " -f\t\t\tDo not fork() from the calling shell.\n" - " -h\t\t\tdisplay this help message\n" - " -H\t\t\tdisplay a list of configuration file directives\n" - " -L LOGOPTS\t\tToggle various defaults controlling logging:\n"); - snmp_log_options_usage("\t\t\t ", stderr); -#ifndef DISABLE_MIB_LOADING - fprintf(stderr, - " -m MIB[:...]\t\tload given list of MIBs (ALL loads " - "everything)\n" - " -M DIR[:...]\t\tlook in given list of directories for MIBs\n"); -#endif /* DISABLE_MIB_LOADING */ -#ifndef DISABLE_MIB_LOADING - fprintf(stderr, - " -P MIBOPTS\t\tToggle various defaults controlling mib " - "parsing:\n"); - snmp_mib_toggle_options_usage("\t\t\t ", stderr); -#endif /* DISABLE_MIB_LOADING */ - fprintf(stderr, - " -v\t\t\tdisplay package version number\n" - " -x TRANSPORT\tconnect to master agent using TRANSPORT\n"); - exit(1); -} - -static void -version(void) -{ - fprintf(stderr, "NET-SNMP version: %s\n", netsnmp_get_version()); - exit(0); -} - -int -main (int argc, char **argv) -{ - int arg; - char* cp = NULL; - int dont_fork = 0, do_help = 0; - - while ((arg = getopt(argc, argv, "dD:fhHL:" -#ifndef DISABLE_MIB_LOADING - "m:M:" -#endif /* DISABLE_MIB_LOADING */ - "n:" -#ifndef DISABLE_MIB_LOADING - "P:" -#endif /* DISABLE_MIB_LOADING */ - "vx:")) != EOF) { - switch (arg) { - case 'd': - netsnmp_ds_set_boolean(NETSNMP_DS_LIBRARY_ID, - NETSNMP_DS_LIB_DUMP_PACKET, 1); - break; - - case 'D': - debug_register_tokens(optarg); - snmp_set_do_debugging(1); - break; - - case 'f': - dont_fork = 1; - break; - - case 'h': - usage(argv[0]); - break; - - case 'H': - do_help = 1; - break; - - case 'L': - if (snmp_log_options(optarg, argc, argv) < 0) { - exit(1); - } - break; - -#ifndef DISABLE_MIB_LOADING - case 'm': - if (optarg != NULL) { - setenv("MIBS", optarg, 1); - } else { - usage(argv[0]); - } - break; - - case 'M': - if (optarg != NULL) { - setenv("MIBDIRS", optarg, 1); - } else { - usage(argv[0]); - } - break; -#endif /* DISABLE_MIB_LOADING */ - - case 'n': - if (optarg != NULL) { - app_name = optarg; - netsnmp_ds_set_string(NETSNMP_DS_LIBRARY_ID, - NETSNMP_DS_LIB_APPTYPE, app_name); - } else { - usage(argv[0]); - } - break; - -#ifndef DISABLE_MIB_LOADING - case 'P': - cp = snmp_mib_toggle_options(optarg); - if (cp != NULL) { - fprintf(stderr, "Unknown parser option to -P: %c.\n", *cp); - usage(argv[0]); - } - break; -#endif /* DISABLE_MIB_LOADING */ - - case 'v': - version(); - break; - - case 'x': - if (optarg != NULL) { - netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID, - NETSNMP_DS_AGENT_X_SOCKET, optarg); - } else { - usage(argv[0]); - } - break; - - default: - fprintf(stderr, "invalid option: -%c\n", arg); - usage(argv[0]); - break; - } - } - - if (do_help) { - netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, - NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1); - } else { - /* we are a subagent */ - netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, - NETSNMP_DS_AGENT_ROLE, 1); - - if (!dont_fork) { - if (netsnmp_daemonize(1, snmp_stderrlog_status()) != 0) - exit(1); - } - - /* initialize tcpip, if necessary */ - SOCK_STARTUP; - } - - /* initialize the agent library */ - init_agent(app_name); - - /* initialize your mib code here */ - init_mirror_mib(); - - /* cscMIB will be used to read cscMIB.conf files. */ - init_snmp("cscMIB"); - - if (do_help) { - fprintf(stderr, "Configuration directives understood:\n"); - read_config_print_usage(" "); - exit(0); - } - - /* In case we received a request to stop (kill -TERM or kill -INT) */ - netsnmp_running = 1; -#ifdef SIGTERM - signal(SIGTERM, stop_server); -#endif -#ifdef SIGINT - signal(SIGINT, stop_server); -#endif - - /* main loop here... */ - while(netsnmp_running) { - agent_check_and_process(1); - } - - /* at shutdown time */ - snmp_shutdown(app_name); - SOCK_CLEANUP; - exit(0); -} - diff --git a/snmp/mirror-mib.c b/snmp/mirror-mib.c deleted file mode 100644 index 4cd7e87..0000000 --- a/snmp/mirror-mib.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Note: this file originally auto-generated by mib2c using - * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $ - */ - -#include -#include -#include -#include "mirror-mib.h" -#include "mirror-nl-glue.h" - -void -init_mirror_mib(void) -{ - static oid cogentBytes_oid[] = - { 1, 3, 6, 1, 4, 1, 27934, 2, 2, 1 }; - static oid orionBytes_oid[] = - { 1, 3, 6, 1, 4, 1, 27934, 2, 2, 2 }; - static oid campusBytes_oid[] = - { 1, 3, 6, 1, 4, 1, 27934, 2, 2, 3 }; - - DEBUGMSGTL(("mirror_mib", "Initializing\n")); - - mirror_stats_initialize(); - - netsnmp_register_scalar(netsnmp_create_handler_registration - ("cogentBytes", handle_cogentBytes, - cogentBytes_oid, OID_LENGTH(cogentBytes_oid), - HANDLER_CAN_RONLY)); - netsnmp_register_scalar(netsnmp_create_handler_registration - ("orionBytes", handle_orionBytes, - orionBytes_oid, OID_LENGTH(orionBytes_oid), - HANDLER_CAN_RONLY)); - netsnmp_register_scalar(netsnmp_create_handler_registration - ("campusBytes", handle_campusBytes, - campusBytes_oid, OID_LENGTH(campusBytes_oid), - HANDLER_CAN_RONLY)); -} - -void explode_counter64(uint64_t num, struct counter64 *counter) { - counter->low = num & 0xFFFFFFFF; - counter->high = (num >> 32) & 0xFFFFFFFF; -} - -int -handle_cogentBytes(netsnmp_mib_handler *handler, - netsnmp_handler_registration *reginfo, - netsnmp_agent_request_info *reqinfo, - netsnmp_request_info *requests) -{ - struct counter64 counter; - mirror_stats_refresh(); - explode_counter64(get_class_byte_count(&cogent_class), &counter); - - switch (reqinfo->mode) { - case MODE_GET: - snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER64, - (u_char *)&counter, sizeof(counter)); - break; - default: - die("unknown mode"); - } - - return SNMP_ERR_NOERROR; -} - -int -handle_orionBytes(netsnmp_mib_handler *handler, - netsnmp_handler_registration *reginfo, - netsnmp_agent_request_info *reqinfo, - netsnmp_request_info *requests) -{ - struct counter64 counter; - mirror_stats_refresh(); - explode_counter64(get_class_byte_count(&orion_class), &counter); - - switch (reqinfo->mode) { - case MODE_GET: - snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER64, - (u_char *)&counter, sizeof(counter)); - break; - default: - die("unknown mode"); - } - - return SNMP_ERR_NOERROR; -} - -int -handle_campusBytes(netsnmp_mib_handler *handler, - netsnmp_handler_registration *reginfo, - netsnmp_agent_request_info *reqinfo, - netsnmp_request_info *requests) -{ - struct counter64 counter; - mirror_stats_refresh(); - explode_counter64(get_class_byte_count(&campus_class), &counter); - - switch (reqinfo->mode) { - case MODE_GET: - snmp_set_var_typed_value(requests->requestvb, ASN_COUNTER64, - (u_char *)&counter, sizeof(counter)); - break; - default: - die("unknown mode"); - } - - return SNMP_ERR_NOERROR; -} diff --git a/snmp/mirror-mib.h b/snmp/mirror-mib.h deleted file mode 100644 index f707f97..0000000 --- a/snmp/mirror-mib.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef MIRRORMIB_H -#define MIRRORMIB_H - -void init_mirror_mib(void); -Netsnmp_Node_Handler handle_cogentBytes; -Netsnmp_Node_Handler handle_orionBytes; -Netsnmp_Node_Handler handle_campusBytes; - -#endif diff --git a/snmp/mirror-nl-glue.c b/snmp/mirror-nl-glue.c deleted file mode 100644 index 720ac6a..0000000 --- a/snmp/mirror-nl-glue.c +++ /dev/null @@ -1,102 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "mirror-nl-glue.h" - -static struct nl_cache *link_cache, *class_cache; -static struct rtnl_link *eth; -static int ifindex; - -struct class_info cogent_class = { "cogent", "01:02", }; -struct class_info orion_class = { "orion", "01:03", }; -struct class_info campus_class = { "campus", "01:04", }; - -static struct nl_handle *nl_handle; - -void die(const char *message) { - fprintf(stderr, "fatal: %s\n", message); - exit(1); -} - -static void match_obj(struct nl_object *obj, void *arg) { - struct nl_object *needle = *(struct nl_object **)arg; - struct nl_object **ret = (struct nl_object **)arg + 1; - - if (!*ret && nl_object_identical(obj, needle)) { - nl_object_get(obj); - *ret = obj; - } -} - -static struct rtnl_class *get_class_by_id(char *id, int ifindex) { - uint32_t handle; - struct rtnl_class *needle; - struct nl_object *magic[2]; - - if (rtnl_tc_str2handle(id, &handle)) - die("invalid id"); - - needle = rtnl_class_alloc(); - rtnl_class_set_ifindex(needle, ifindex); - rtnl_class_set_handle(needle, handle); - - magic[0] = (struct nl_object *)needle; - magic[1] = (struct nl_object *)NULL; - - nl_cache_foreach(class_cache, match_obj, magic); - - rtnl_class_put(needle); - return (struct rtnl_class *)magic[1]; -} - -uint64_t get_class_byte_count(struct class_info *info) { - struct rtnl_class *class = get_class_by_id(info->id, ifindex); - uint64_t bytes; - if (!class) - die("class not found"); - bytes = rtnl_class_get_stat(class, RTNL_TC_BYTES); - rtnl_class_put(class); - return bytes; -} - -void mirror_stats_refresh(void) { - nl_cache_refill(nl_handle, class_cache); -} - -void mirror_stats_initialize(void) { - nl_handle = nl_handle_alloc(); - if (!nl_handle) - die("unable to allocate handle"); - - if (nl_connect(nl_handle, NETLINK_ROUTE) < 0) - die("unable to connect to netlink"); - - link_cache = rtnl_link_alloc_cache(nl_handle); - if (!link_cache) - die("unable to allocate link cache"); - - eth = rtnl_link_get_by_name(link_cache, "eth0"); - if (!eth) - die("unable to acquire eth0"); - ifindex = rtnl_link_get_ifindex(eth); - - class_cache = rtnl_class_alloc_cache(nl_handle, ifindex); - if (!class_cache) - die("unable to allocate class cache"); -} - -void mirror_stats_cleanup(void) { - rtnl_link_put(eth); - nl_cache_free(class_cache); - nl_cache_free(link_cache); - nl_close(nl_handle); - nl_handle_destroy(nl_handle); -} - diff --git a/snmp/mirror-nl-glue.h b/snmp/mirror-nl-glue.h deleted file mode 100644 index 53add1a..0000000 --- a/snmp/mirror-nl-glue.h +++ /dev/null @@ -1,25 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct class_info { - char *name; - char *id; -}; - -extern struct class_info cogent_class; -extern struct class_info orion_class; -extern struct class_info campus_class; - -void mirror_stats_refresh(void); -void mirror_stats_initialize(void); -void mirror_stats_cleanup(void); -void die(const char *); -uint64_t get_class_byte_count(struct class_info *); diff --git a/snmp/mirror-stats.c b/snmp/mirror-stats.c deleted file mode 100644 index 44bade4..0000000 --- a/snmp/mirror-stats.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "mirror-nl-glue.h" - -int main(int argc, char *argv[]) { - mirror_stats_initialize(); - for (;;) { - printf("%s %"PRIu64"\n", cogent_class.id, get_class_byte_count(&cogent_class)); - printf("%s %"PRIu64"\n", orion_class.id, get_class_byte_count(&orion_class)); - printf("%s %"PRIu64"\n", campus_class.id, get_class_byte_count(&campus_class)); - sleep(1); - mirror_stats_refresh(); - } -} diff --git a/snmp/query_mib.sh b/snmp/query_mib.sh deleted file mode 100644 index 90220ac..0000000 --- a/snmp/query_mib.sh +++ /dev/null @@ -1 +0,0 @@ -snmpwalk -v2c -cpublic mirror 1.3.6.1.4.1.27934.2.2 diff --git a/snmp/snmp.conf b/snmp/snmp.conf deleted file mode 100644 index 9d8c7ae..0000000 --- a/snmp/snmp.conf +++ /dev/null @@ -1,2 +0,0 @@ -mibdirs /etc/csc/mibs:/usr/share/snmp/mibs -mibs ALL diff --git a/torrents/rtorrent-init.d b/torrents/rtorrent-init.d deleted file mode 100755 index 69d398c..0000000 --- a/torrents/rtorrent-init.d +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh - -. /lib/lsb/init-functions - -PATH=$PATH:/bin:/usr/bin:/sbin:/usr/sbin -NAME=rtorrent -PIDFILE=/var/run/$NAME.screen -CHUSER=$NAME -DAEMON=/usr/bin/rtorrent -DAEMON_ARGS="-n -o try_import=/etc/rtorrent.rc" - -do_start() -{ - if [ -s $PIDFILE ] && kill -0 $(cat $PIDFILE) >/dev/null 2>&1; then - exit 0 - fi - log_daemon_msg "Starting" $NAME - start-stop-daemon --start --quiet --background --pidfile $PIDFILE \ - --make-pidfile --exec /bin/su -- \ - $CHUSER -c "/usr/bin/screen -D -m -- $DAEMON $DAEMON_ARGS" - log_end_msg 0 -} - -do_stop() -{ - log_daemon_msg "Stopping" $NAME - start-stop-daemon --stop --quiet --pidfile $PIDFILE --oknodo - log_end_msg 0 -} - -do_status() -{ - if [ -s $PIDFILE ] && kill -0 $(cat $PIDFILE) >/dev/null 2>&1; then - exit 0 - else - exit 4 - fi -} - -case "$1" in - start) - do_start - ;; - stop) - do_stop - ;; - restart) - do_stop - sleep 4 - do_start - ;; - status) - do_status -esac - -exit 0 diff --git a/torrents/rtorrent.rc b/torrents/rtorrent.rc deleted file mode 100644 index 84dffa1..0000000 --- a/torrents/rtorrent.rc +++ /dev/null @@ -1,100 +0,0 @@ -# This is an example resource file for rTorrent. Copy to -# ~/.rtorrent.rc and enable/modify the options as needed. Remember to -# uncomment the options you wish to enable. - -# Maximum and minimum number of peers to connect to per torrent. -#min_peers = 40 -#max_peers = 100 - -# Same as above but for seeding completed torrents (-1 = same as downloading) -#min_peers_seed = 10 -#max_peers_seed = 50 - -# Maximum number of simultanious uploads per torrent. -#max_uploads = 15 - -# Global upload and download rate in KiB. "0" for unlimited. -#download_rate = 0 -#upload_rate = 0 - -# Default directory to save the downloaded torrents. -directory = /mirror/root/csclub - -# Default session directory. Make sure you don't run multiple instance -# of rtorrent using the same session directory. Perhaps using a -# relative path? -session = /var/lib/rtorrent/session - -# Watch a directory for new torrents, and stop those that have been -# deleted. -schedule = watch_www_directory,1,5,load_start=/mirror/root/csclub/*.torrent -schedule = untied_directory,5,5,remove_untied= - -# Close torrents when diskspace is low. -#schedule = low_diskspace,5,60,close_low_diskspace=100M - -# Stop torrents when reaching upload ratio in percent, -# when also reaching total upload in bytes, or when -# reaching final upload ratio in percent. -# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0 -#schedule = ratio,60,60,stop_on_ratio=200,200M,2000 - -# The ip address reported to the tracker. -#ip = 127.0.0.1 -#ip = rakshasa.no - -# The ip address the listening socket and outgoing connections is -# bound to. -bind = mirror - -# Port range to use for listening. -port_range = 6900-6999 - -# Start opening ports at a random position within the port range. -#port_random = no - -# Check hash for finished torrents. Might be usefull until the bug is -# fixed that causes lack of diskspace not to be properly reported. -#check_hash = no - -# Set whetever the client should try to connect to UDP trackers. -#use_udp_trackers = yes - -# Alternative calls to bind and ip that should handle dynamic ip's. -#schedule = ip_tick,0,1800,ip=rakshasa -#schedule = bind_tick,0,1800,bind=rakshasa - -encryption = allow_incoming,prefer_plaintext - -# -# Do not modify the following parameters unless you know what you're doing. -# - -# Hash read-ahead controls how many MB to request the kernel to read -# ahead. If the value is too low the disk may not be fully utilized, -# while if too high the kernel might not be able to keep the read -# pages in memory thus end up trashing. -#hash_read_ahead = 10 - -# Interval between attempts to check the hash, in milliseconds. -#hash_interval = 100 - -# Number of attempts to check the hash while using the mincore status, -# before forcing. Overworked systems might need lower values to get a -# decent hash checking rate. -#hash_max_tries = 10 - -# Max number of files to keep open simultaniously. -#max_open_files = 128 - -# Number of sockets to simultaneously keep open. -#max_open_sockets = - - -# Example of scheduling commands: Switch between two ip's every 5 -# seconds. -#schedule = "ip_tick1,5,10,ip=torretta" -#schedule = "ip_tick2,10,10,ip=lampedusa" - -# Remove a scheduled event. -#schedule_remove = "ip_tick1" diff --git a/update-raid-progress.sh b/update-raid-progress.sh new file mode 100755 index 0000000..70c6b09 --- /dev/null +++ b/update-raid-progress.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +cd ~mirror +PROG=`/opt/MegaCli/MegaCli64 -ldrecon -showprog -l1 -a0 | grep Completed |sed 's/.*Completed \([0-9]*\)%.*/\1/'` +sed -i "s/
.*<\/div>/
Reconstruction of the RAID has completed $PROG%<\/div>/" index.html