1214503Srpaulo#!/usr/bin/perl -w
2214503Srpaulo#
3214503Srpaulo# Logwatch script for hostapd
4214503Srpaulo#
5214503Srpaulo# Copyright 2005 Henrik Brix Andersen <brix@gentoo.org>
6214503Srpaulo# Distributed under the terms of the GNU General Public License v2
7214503Srpaulo# Alternatively, this file may be distributed under the terms of the BSD License
8214503Srpaulo
9214503Srpaulouse strict;
10214503Srpaulo
11214503Srpaulomy $debug = $ENV{'LOGWATCH_DEBUG'} || 0;
12214503Srpaulomy $detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;
13214503Srpaulomy $debugcounter = 1;
14214503Srpaulo
15214503Srpaulomy %hostapd;
16214503Srpaulomy @unmatched;
17214503Srpaulo
18214503Srpauloif ($debug >= 5) {
19214503Srpaulo	print STDERR "\n\nDEBUG: Inside HOSTAPD Filter\n\n";
20214503Srpaulo}
21214503Srpaulo
22214503Srpaulowhile (defined(my $line = <STDIN>)) {
23214503Srpaulo	if ($debug >= 5) {
24214503Srpaulo		print STDERR "DEBUG($debugcounter): $line";
25214503Srpaulo		$debugcounter++;
26214503Srpaulo	}
27214503Srpaulo    chomp($line);
28214503Srpaulo
29214503Srpaulo	if (my ($iface,$mac,$layer,$details) = ($line =~ /(.*?): STA (.*?) (.*?): (.*?)$/i)) {
30214503Srpaulo		unless ($detail == 10) {
31214503Srpaulo			# collapse association events
32214503Srpaulo			$details =~ s/^(associated) .*$/$1/i;
33214503Srpaulo		}
34214503Srpaulo		$hostapd{$iface}->{$mac}->{$layer}->{$details}++;
35214503Srpaulo	} else {
36214503Srpaulo		push @unmatched, "$line\n";
37214503Srpaulo	}
38214503Srpaulo}
39214503Srpaulo
40214503Srpauloif (keys %hostapd) {
41214503Srpaulo	foreach my $iface (sort keys %hostapd) {
42214503Srpaulo		print "Interface $iface:\n";
43214503Srpaulo		foreach my $mac (sort keys %{$hostapd{$iface}}) {
44214503Srpaulo			print "  Client MAC Address $mac:\n";
45214503Srpaulo			foreach my $layer (sort keys %{$hostapd{$iface}->{$mac}}) {
46214503Srpaulo				print "    $layer:\n";
47214503Srpaulo				foreach my $details (sort keys %{$hostapd{$iface}->{$mac}->{$layer}}) {
48214503Srpaulo					print "      $details";
49214503Srpaulo					my $count = $hostapd{$iface}->{$mac}->{$layer}->{$details};
50214503Srpaulo					if ($count > 1) {
51214503Srpaulo						print ": " . $count . " Times";
52214503Srpaulo					}
53214503Srpaulo					print "\n";
54214503Srpaulo				}
55214503Srpaulo			}
56214503Srpaulo		}
57214503Srpaulo	}
58214503Srpaulo}
59214503Srpaulo
60214503Srpauloif ($#unmatched >= 0) {
61214503Srpaulo    print "\n**Unmatched Entries**\n";
62214503Srpaulo    print @unmatched;
63214503Srpaulo}
64214503Srpaulo
65214503Srpauloexit(0);
66