1#!/usr/bin/perl -w
2#
3# Logwatch script for hostapd
4#
5# Copyright 2005 Henrik Brix Andersen <brix@gentoo.org>
6# Distributed under the terms of the GNU General Public License v2
7# Alternatively, this file may be distributed under the terms of the BSD License
8
9use strict;
10
11my $debug = $ENV{'LOGWATCH_DEBUG'} || 0;
12my $detail = $ENV{'LOGWATCH_DETAIL_LEVEL'} || 0;
13my $debugcounter = 1;
14
15my %hostapd;
16my @unmatched;
17
18if ($debug >= 5) {
19	print STDERR "\n\nDEBUG: Inside HOSTAPD Filter\n\n";
20}
21
22while (defined(my $line = <STDIN>)) {
23	if ($debug >= 5) {
24		print STDERR "DEBUG($debugcounter): $line";
25		$debugcounter++;
26	}
27    chomp($line);
28
29	if (my ($iface,$mac,$layer,$details) = ($line =~ /(.*?): STA (.*?) (.*?): (.*?)$/i)) {
30		unless ($detail == 10) {
31			# collapse association events
32			$details =~ s/^(associated) .*$/$1/i;
33		}
34		$hostapd{$iface}->{$mac}->{$layer}->{$details}++;
35	} else {
36		push @unmatched, "$line\n";
37	}
38}
39
40if (keys %hostapd) {
41	foreach my $iface (sort keys %hostapd) {
42		print "Interface $iface:\n";
43		foreach my $mac (sort keys %{$hostapd{$iface}}) {
44			print "  Client MAC Address $mac:\n";
45			foreach my $layer (sort keys %{$hostapd{$iface}->{$mac}}) {
46				print "    $layer:\n";
47				foreach my $details (sort keys %{$hostapd{$iface}->{$mac}->{$layer}}) {
48					print "      $details";
49					my $count = $hostapd{$iface}->{$mac}->{$layer}->{$details};
50					if ($count > 1) {
51						print ": " . $count . " Times";
52					}
53					print "\n";
54				}
55			}
56		}
57	}
58}
59
60if ($#unmatched >= 0) {
61    print "\n**Unmatched Entries**\n";
62    print @unmatched;
63}
64
65exit(0);
66