logging: Copy the filter_fn and fix the IMSI filter in OpenBSC

The filter_fn has not been copied into the new structure breaking
the imsi and other filters in OpenBSC. Looking at the code we should
also introduce a callback for the reset of the context so we could
use subscr_get/subscr_put on the subscriber structure.
diff --git a/tests/logging/logging_test.c b/tests/logging/logging_test.c
index fd62db5..b263f90 100644
--- a/tests/logging/logging_test.c
+++ b/tests/logging/logging_test.c
@@ -21,12 +21,16 @@
 #include <osmocom/core/logging.h>
 #include <osmocom/core/utils.h>
 
+#include <stdlib.h>
+
 enum {
 	DRLL,
 	DCC,
 	DMM,
 };
 
+static int filter_called = 0;
+
 static const struct log_info_cat default_categories[] = {
 	[DRLL] = {
 		.name = "DRLL",
@@ -48,9 +52,17 @@
 	},
 };
 
+static int test_filter(const struct log_context *ctx, struct log_target *target)
+{
+	filter_called += 1;
+	/* omit everything */
+	return 0;
+}
+
 const struct log_info log_info = {
 	.cat = default_categories,
 	.num_cat = ARRAY_SIZE(default_categories),
+	.filter_fn = test_filter,
 };
 
 int main(int argc, char **argv)
@@ -71,6 +83,11 @@
 	DEBUGP(DRLL, "You should see this\n");
 	DEBUGP(DCC, "You should see this\n");
 	DEBUGP(DMM, "You should not see this\n");
+	OSMO_ASSERT(filter_called == 0);
+
+	log_set_all_filter(stderr_target, 0);
+	DEBUGP(DRLL, "You should not see this and filter is called\n");
+	OSMO_ASSERT(filter_called == 1);
 
 	return 0;
 }