summaryrefslogtreecommitdiff
path: root/net-misc/l7-filter-userspace
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /net-misc/l7-filter-userspace
reinit the tree, so we can have metadata
Diffstat (limited to 'net-misc/l7-filter-userspace')
-rw-r--r--net-misc/l7-filter-userspace/Manifest12
-rw-r--r--net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-arm-ppc-getopt-help-fix.patch21
-rw-r--r--net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-datatype.patch11
-rw-r--r--net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-libnetfilter_conntrack-0.0.100.patch104
-rw-r--r--net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-map-access-threadsafe.patch55
-rw-r--r--net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-pattern-loading-leak.patch10
-rw-r--r--net-misc/l7-filter-userspace/l7-filter-userspace-0.11.ebuild32
-rw-r--r--net-misc/l7-filter-userspace/l7-filter-userspace-0.12_beta1.ebuild32
-rw-r--r--net-misc/l7-filter-userspace/metadata.xml11
9 files changed, 288 insertions, 0 deletions
diff --git a/net-misc/l7-filter-userspace/Manifest b/net-misc/l7-filter-userspace/Manifest
new file mode 100644
index 000000000000..571c8bf342bf
--- /dev/null
+++ b/net-misc/l7-filter-userspace/Manifest
@@ -0,0 +1,12 @@
+AUX l7-filter-userspace-0.11-arm-ppc-getopt-help-fix.patch 544 SHA256 7a490acdc8033e0a198a1e581c7d1efa93142bd7af1a576bdb6d9c1332d9de43 SHA512 d541dc919d715bd591a145c0c39dfee86f953761461bef7cfe10c462d99115bac94ad32ebe2cb2f53acb4ae7a4e537a0039c805343f8f26bda3e74a3c6a71a62 WHIRLPOOL e58b589767ab224da0147a573a7070f8ca9c4c48ecaeaa44f5f78c00523e9000b1bc59fdf53b47a8d165b3cc327dccbaae7fa894af86a2afdcdcf668e3514633
+AUX l7-filter-userspace-0.11-datatype.patch 439 SHA256 b2f93241b82ba1b8181e189e8910f64db9bc01b49fba5693ac5fa9d249363d85 SHA512 1dd2830ad2ad0e25a618d2e90c25b46d8c25b2753b5e82fde662abad95ec9135ca05defe2ce7519500a413c4dd996d86574a7225000fc1d2bcdeec7931254bc0 WHIRLPOOL bab2680d967863c43652ffa35b613acb432037101375cb3214ccb43cc0c6cbacd50238c192f9274b454b077cd17b2ddf03aebccdbe7bc9d77a25cea25c84d20c
+AUX l7-filter-userspace-0.11-libnetfilter_conntrack-0.0.100.patch 3991 SHA256 bc3469249333f42df8f67226099d23d22c0fb640ad5b0b770fc846716a0f849e SHA512 5c5addfa5887c280cb98ad72aa2c9f10b28055847593c21c90087a7330138e1b0a12b5ed962cd5fb08eddd7436a21694aaef5b298d862c328dda27471001d89a WHIRLPOOL 627fa99e16c352ae9515e299ae2cc28f651fff8c102e17c2ffa70d77c3f92ff3ce91cac87149bf3299f66a309feedfcff2064e7383f529fc9c1aac7a29e923cd
+AUX l7-filter-userspace-0.11-map-access-threadsafe.patch 1642 SHA256 b9f7fee22a5ce6d43750b3aa303bbf2116dac7c7420ae860dcaf447ad3a5e09c SHA512 f2c2f7d4c265648b4400f5bc955d8632ac54858f8adc26894b866044079b951e1146d8c09fa40fc3514005c6ed9f4cf86c595b3c24652aaf0d021f139d15dc25 WHIRLPOOL 0f2ebd77124321c0b63e946b361886e1e69251608fe552ea78b9d2e0cb30ab632d49856d974efc342b106ba5d63ccab45a624022480b41036b279c52fa38bd1e
+AUX l7-filter-userspace-0.11-pattern-loading-leak.patch 436 SHA256 6a948eed1080f22d372801eb6c8aac27053c7e2f3426694adebe55d625eafaf2 SHA512 3cff06e0320eb2190f622367c9f0c59b81daf6c119ca0b2e0949741b9c1ef61d071a668cf85dbd524a8ed0f723fc61a95cd6ec3fd0fb9ad8ffa7e6c1153c9a07 WHIRLPOOL 749140285555f470a5034aa2ccf543846a4aefc58449f57c4b924cc342c6b185004b60c8537739f28a71380957dbd9225f02fa7ec64c294aa9591c3f19a13a90
+DIST l7-filter-userspace-0.11.tar.gz 129986 SHA256 008a62430f95a162fd209d4bf3d7359c588ca4b27f89c7bcaa7a10ff48591d97 SHA512 5362a9e7392afd6dcb40bd9f602bddd34c040dcecbcc4570f56168310bd0e243561a1c946c7e912448518fe30c6bcff866c000b9e026dc96b2f3b47b4299cb81 WHIRLPOOL a0ea019ccb2b1753b3ba3a3fafb27bd456325ac1098f984d198f37eebdc48d3f737dd6b9fbbd0023d383e63f8f7a24d2db7e3d9c76325242f82c0762bdf9f65b
+DIST l7-filter-userspace-0.12-beta1.tar.gz 130254 SHA256 1f4503c219334fba9c696c2243a3e926e5b299916baf1512ff6969da2d399d29 SHA512 9c49b7e951ced6a44f8ee6f3a261ba14b1e3fe44a83e175f7f5a5821616ec8bc2b0a287f10b4485120e7783c9623c34aae2ee1d8997c258cdfb8230c1f87d137 WHIRLPOOL 719bd6fb3513a676fdd4de828095e847565040993676cadcc4e5dda46459edb578355a13086d5f8bb5575fe32e2df1e835029cfd0bb0e50884e75f37c409ccfc
+EBUILD l7-filter-userspace-0.11.ebuild 835 SHA256 00e8a08386e0e1d981e20841f6fdfaabcec5704625b77311cfbbaef366e21e82 SHA512 a1208d48000c5d9059a4747bc9a9e026fc80c9687f4380d65fd34c15635e08141617220024da27af0a9270990e5dc9f305039c8b033291d88cd0e42e2f0ea50d WHIRLPOOL b736d1c474a804c8b83977fbf6e7187552ffafab156e41f9c79cb3bfee7cb9548ca4d656bda21dd025ce4a92387553afcae32758e8cd55c60417009f54e11483
+EBUILD l7-filter-userspace-0.12_beta1.ebuild 784 SHA256 96eff689195456b2084cf9831f04287bf9b41a0d05500796a00d14e9313feaf8 SHA512 ba9ea52595538ab267b21ef060c626c5ca50a0f4696430010c73a63ffe011ae62e6aa3e81a417267f9f351bf4d16fe1ff7de0d231c0f673debe63ed676b90556 WHIRLPOOL b545231bd9979c767becb6b1ec49d1385b4dc3507781e6c03bbd67b2124f30a607d65a2fc66835dd1ac591b60dfe30a3d80e50254a7de8a1df546c8fd9f88a49
+MISC ChangeLog 3156 SHA256 c0046e4a51db408ba26811878639b2968530a126e24ee8d747e836f72ce56860 SHA512 f34b9e17b350e836cbe99f2e1eece726f01add2d2e21bfcde154d5944fd710bd6058d1bbe620d299a73369dee121a9679139e91c77e5ffbbcfe2eb3d615bdbfb WHIRLPOOL 7c3674c3d5dd36fb5b0046b7f14b63522d84aed6f5392caf244cbc597ffb8e0eb3d51c612dcb284bcc24b9e8a4e3cf2865e04b533699ebb2e3740de5c6751ab2
+MISC ChangeLog-2015 4101 SHA256 29b027ba8848ef9044fd708fa17196d99825d3bfe033ea052f59c21ddbd6c501 SHA512 ce2c959ffcd9dd552facf80ba90c9d56b32324cfdac0265ce4b62e6ae0ac25ed41aed1322fac6c560599f3871b5758c5f0721e69497bff7598b2b092f7da8cdd WHIRLPOOL a004c808dc0627eae0155195d2669734ebeea8ac052d7df5d8da53f97453be45e77c1a056fbbbd084ebc1d8d6a29c4e6e3f76c852f8b81e6c45b0ad333e22018
+MISC metadata.xml 339 SHA256 254b3ba1a037a9a7a91621c6e30f0c38e79b333f5a4d945f7741194eb281ae2f SHA512 0469b7f26947f80af251def403ef1710c26ac6a0aab162fdfd2f506b5a3262aca62cca0540200702e8e865199d565ca3a782297eed2ba58e28f098145248280c WHIRLPOOL 695b5c3a91fdc4d926c680e5f8876e0853b012a50e0215360d2dfdcacb240877fca96612c00d8a1fadd4f15768f6a3ccadff363235ee420ad25199a8beea2f20
diff --git a/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-arm-ppc-getopt-help-fix.patch b/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-arm-ppc-getopt-help-fix.patch
new file mode 100644
index 000000000000..29801ceed31a
--- /dev/null
+++ b/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-arm-ppc-getopt-help-fix.patch
@@ -0,0 +1,21 @@
+--- l7-filter-userspace-0.11/l7-filter.cpp.old 2010-07-12 10:43:58.485002456 +0100
++++ l7-filter-userspace-0.11/l7-filter.cpp 2010-07-12 11:14:38.825001868 +0100
+@@ -186,15 +186,11 @@
+ conffilename = "";
+ const char *opts = "f:q:vh?sb:dn:p:m:cz";
+
+- int done = 0;
+- while(!done)
++ int c;
++ while ((c = getopt (argc, argv, opts)) != -1)
+ {
+- char c;
+- switch(c = getopt(argc, argv, opts))
++ switch(c)
+ {
+- case -1:
+- done = 1;
+- break;
+ case 'f':
+ conffilename = optarg;
+ break;
diff --git a/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-datatype.patch b/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-datatype.patch
new file mode 100644
index 000000000000..eb49c595844b
--- /dev/null
+++ b/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-datatype.patch
@@ -0,0 +1,11 @@
+--- l7-filter-userspace-0.11/l7-queue.cpp.orig 2008-09-27 10:51:01.000000000 +0400
++++ l7-filter-userspace-0.11/l7-queue.cpp 2011-11-05 03:11:08.595773935 +0400
+@@ -196,7 +196,7 @@
+ ifi = nfq_get_outdev(tb);
+ if(ifi) l7printf(4, "outdev = %d ", ifi);
+
+- ret = nfq_get_payload(tb, &data);
++ ret = nfq_get_payload(tb, (unsigned char**)&data);
+ if(ret >= 0) l7printf(4, "payload_len = %d\n", ret);
+
+ char ip_protocol = data[9];
diff --git a/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-libnetfilter_conntrack-0.0.100.patch b/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-libnetfilter_conntrack-0.0.100.patch
new file mode 100644
index 000000000000..6cc941ddd1a6
--- /dev/null
+++ b/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-libnetfilter_conntrack-0.0.100.patch
@@ -0,0 +1,104 @@
+diff -Naur l7-filter-userspace-0.11-orig/l7-conntrack.cpp l7-filter-userspace-0.11-ptch/l7-conntrack.cpp
+--- l7-filter-userspace-0.11-orig/l7-conntrack.cpp 2009-02-26 21:40:28.000000000 +0000
++++ l7-filter-userspace-0.11-ptch/l7-conntrack.cpp 2009-10-19 17:40:42.000000000 +0000
+@@ -121,25 +121,10 @@
+ return (char *)buffer;
+ }
+
+-static int sprintf_conntrack_key(char *buf, struct nfct_conntrack *ct,
+- unsigned int flags)
+-{
+- int size = 0;
+-
+- size += nfct_sprintf_protocol(buf, ct);
+- size += nfct_sprintf_address(buf+size, &ct->tuple[NFCT_DIR_ORIGINAL]);
+- size += nfct_sprintf_proto(buf+size, &ct->tuple[NFCT_DIR_ORIGINAL]);
+-
+- /* Delete the last blank space */
+- buf[size-1] = '\0';
+-
+- return size;
+-}
+-
+-static string make_key(nfct_conntrack* ct, int flags)
++static string make_key(nfct_conntrack* ct, int flags, int type)
+ {
+ char key[512];
+- int keysize = sprintf_conntrack_key(key, ct, flags);
++ int keysize = nfct_snprintf(key, sizeof(key), (const nf_conntrack *)ct, type, NFCT_O_DEFAULT, flags);
+ if(keysize >= 512){
+ cerr << "Yike! Overflowed key!\n";
+ exit(1);
+@@ -148,28 +133,28 @@
+ return key;
+ }
+
+-static int l7_handle_conntrack_event(void *arg, unsigned int flags, int type,
++static int l7_handle_conntrack_event(enum nf_conntrack_msg_type type, struct nf_conntrack* arg,
+ void *data)
+ {
+ l7_conntrack * l7_conntrack_handler = (l7_conntrack *) data;
+
+ nfct_conntrack* ct = (nfct_conntrack*)arg;
++ u_int8_t protonum = *(u_int8_t *)nfct_get_attr((const nf_conntrack *)ct, ATTR_ORIG_L4PROTO);
+
+ // I don't think there is any demand for ICMP. These are enough work for now.
+- if(ct->tuple[0].protonum != IPPROTO_TCP &&
+- ct->tuple[0].protonum != IPPROTO_UDP) return 0;
++ if(protonum != IPPROTO_TCP && protonum != IPPROTO_UDP) return 0;
+
+- if(type == NFCT_MSG_DESTROY) l7printf(3, "Got event: NFCT_MSG_DESTROY\n");
+- if(type == NFCT_MSG_NEW) l7printf(3, "Got event: NFCT_MSG_NEW\n");
+- if(type == NFCT_MSG_UPDATE) l7printf(3, "Got event: NFCT_MSG_UPDATE\n");
+- if(type == NFCT_MSG_UNKNOWN) l7printf(3, "Got event: NFCT_MSG_UNKNOWN\n");
++ if(type == NFCT_T_DESTROY) l7printf(3, "Got event: NFCT_T_DESTROY\n");
++ if(type == NFCT_T_NEW) l7printf(3, "Got event: NFCT_T_NEW\n");
++ if(type == NFCT_T_UPDATE) l7printf(3, "Got event: NFCT_T_UPDATE\n");
++ if(type == NFCT_T_UNKNOWN) l7printf(3, "Got event: NFCT_T_UNKNOWN\n");
+
+ // On the first packet, create the connection buffer, etc.
+- if(type == NFCT_MSG_NEW){
+- string key = make_key(ct, flags);
++ if(type == NFCT_T_NEW){
++ string key = make_key(ct, 0, NFCT_T_NEW);
+ if (l7_conntrack_handler->get_l7_connection(key)){
+ // this happens sometimes
+- cerr << "Received NFCT_MSG_NEW but already have a connection. Packets = "
++ cerr << "Received NFCT_T_NEW but already have a connection. Packets = "
+ << l7_conntrack_handler->get_l7_connection(key)->get_num_packets()
+ << endl;
+ l7_conntrack_handler->remove_l7_connection(key);
+@@ -179,9 +164,9 @@
+ l7_conntrack_handler->add_l7_connection(thisconnection, key);
+ thisconnection->key = key;
+ }
+- else if(type == NFCT_MSG_DESTROY){
++ else if(type == NFCT_T_DESTROY){
+ // clean up the connection buffer, etc.
+- string key = make_key(ct, flags);
++ string key = make_key(ct, 0, NFCT_T_DESTROY);
+ if(l7_conntrack_handler->get_l7_connection(key)){
+ l7_conntrack_handler->remove_l7_connection(key);
+ }
+@@ -193,7 +178,7 @@
+
+ l7_conntrack::~l7_conntrack()
+ {
+- nfct_conntrack_free(ct);
++ free(ct);
+ nfct_close(cth);
+ }
+
+@@ -230,9 +215,9 @@
+ {
+ int ret;
+
+- nfct_register_callback(cth, l7_handle_conntrack_event, (void *)this);
+- ret = nfct_event_conntrack(cth); // this is the main loop
++ nfct_callback_register(cth, NFCT_T_NEW, l7_handle_conntrack_event, (void *)this);
++ ret = nfct_catch(cth); // this is the main loop
+
+ nfct_close(cth);
+- nfct_conntrack_free(ct);
++ free(ct);
+ }
diff --git a/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-map-access-threadsafe.patch b/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-map-access-threadsafe.patch
new file mode 100644
index 000000000000..fea0f5bbb5a6
--- /dev/null
+++ b/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-map-access-threadsafe.patch
@@ -0,0 +1,55 @@
+--- l7-filter-userspace-0.11/l7-conntrack.cpp.orig 2009-02-26 21:40:28.000000000 +0000
++++ l7-filter-userspace-0.11/l7-conntrack.cpp 2010-07-23 13:03:23.000000000 +0100
+@@ -195,11 +195,13 @@
+ {
+ nfct_conntrack_free(ct);
+ nfct_close(cth);
++ pthread_mutex_destroy(&map_mutex);
+ }
+
+ l7_conntrack::l7_conntrack(void* l7_classifier_in)
+ {
+ l7_classifier = (l7_classify *)l7_classifier_in;
++ pthread_mutex_init(&map_mutex, NULL);
+
+ // Now open a handler that is subscribed to all possible events
+ cth = nfct_open(CONNTRACK, NFCT_ALL_CT_GROUPS);
+@@ -211,19 +213,27 @@
+
+ l7_connection *l7_conntrack::get_l7_connection(const string key)
+ {
+- return l7_connections[key];
++ l7_connection *conn;
++ pthread_mutex_lock(&map_mutex);
++ conn = l7_connections[key];
++ pthread_mutex_unlock(&map_mutex);
++ return conn;
+ }
+
+ void l7_conntrack::add_l7_connection(l7_connection* connection,
+ const string key)
+ {
++ pthread_mutex_lock(&map_mutex);
+ l7_connections[key] = connection;
++ pthread_mutex_unlock(&map_mutex);
+ }
+
+ void l7_conntrack::remove_l7_connection(const string key)
+ {
++ pthread_mutex_lock(&map_mutex);
+ delete l7_connections[key];
+ l7_connections.erase(l7_connections.find(key));
++ pthread_mutex_unlock(&map_mutex);
+ }
+
+ void l7_conntrack::start()
+--- l7-filter-userspace-0.11/l7-conntrack.h.orig 2010-07-23 13:04:49.000000000 +0100
++++ l7-filter-userspace-0.11/l7-conntrack.h 2010-07-23 13:05:56.000000000 +0100
+@@ -52,6 +52,7 @@
+ l7_map l7_connections;
+ struct nfct_conntrack *ct;
+ struct nfct_handle *cth; // the callback
++ pthread_mutex_t map_mutex;
+
+ public:
+ l7_conntrack(void * foo);
diff --git a/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-pattern-loading-leak.patch b/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-pattern-loading-leak.patch
new file mode 100644
index 000000000000..835fc8ffb9f1
--- /dev/null
+++ b/net-misc/l7-filter-userspace/files/l7-filter-userspace-0.11-pattern-loading-leak.patch
@@ -0,0 +1,10 @@
+diff --git a/l7-filter-userspace/trunk/l7-classify.cpp b/l7-filter-userspace/trunk/l7-classify.cpp
+index 8b5b77e..1c80d4d 100644
+--- a/l7-filter-userspace/trunk/l7-classify.cpp
++++ b/l7-filter-userspace/trunk/l7-classify.cpp
+@@ -59,6 +59,7 @@ l7_pattern::l7_pattern(string name, string pattern_string, int eflags,
+ cerr << "error compiling " << name << " -- " << pattern_string << endl;
+ exit(1);
+ }
++ free(preprocessed);
+ }
diff --git a/net-misc/l7-filter-userspace/l7-filter-userspace-0.11.ebuild b/net-misc/l7-filter-userspace/l7-filter-userspace-0.11.ebuild
new file mode 100644
index 000000000000..d5178dfc6379
--- /dev/null
+++ b/net-misc/l7-filter-userspace/l7-filter-userspace-0.11.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=4
+
+inherit eutils autotools
+
+DESCRIPTION="Userspace utilities for layer 7 iptables QoS"
+HOMEPAGE="http://l7-filter.clearfoundation.com/"
+SRC_URI="mirror://sourceforge/l7-filter/${P}.tar.gz"
+
+LICENSE="GPL-2"
+KEYWORDS="~amd64 ~x86"
+IUSE=""
+SLOT="0"
+DEPEND=">=net-libs/libnetfilter_conntrack-0.0.100
+ net-libs/libnetfilter_queue"
+RDEPEND="net-misc/l7-protocols
+ ${DEPEND}"
+
+src_prepare() {
+ epatch "${FILESDIR}/${P}-map-access-threadsafe.patch"
+ epatch "${FILESDIR}/${P}-arm-ppc-getopt-help-fix.patch"
+ epatch "${FILESDIR}/${P}-libnetfilter_conntrack-0.0.100.patch"
+ epatch "${FILESDIR}/${P}-pattern-loading-leak.patch"
+ eautoreconf
+}
+
+src_install() {
+ emake DESTDIR="${D}" install
+ dodoc README TODO BUGS THANKS AUTHORS
+}
diff --git a/net-misc/l7-filter-userspace/l7-filter-userspace-0.12_beta1.ebuild b/net-misc/l7-filter-userspace/l7-filter-userspace-0.12_beta1.ebuild
new file mode 100644
index 000000000000..1a02e9456171
--- /dev/null
+++ b/net-misc/l7-filter-userspace/l7-filter-userspace-0.12_beta1.ebuild
@@ -0,0 +1,32 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=4
+
+inherit eutils versionator
+
+MY_P=${PN}-$(replace_version_separator 2 '-')
+
+DESCRIPTION="Userspace utilities for layer 7 iptables QoS"
+HOMEPAGE="http://l7-filter.clearfoundation.com/"
+SRC_URI="http://download.clearfoundation.com/l7-filter/${MY_P}.tar.gz"
+
+LICENSE="GPL-2"
+KEYWORDS="~amd64 ~arm ~x86"
+IUSE=""
+SLOT="0"
+
+DEPEND=">=net-libs/libnetfilter_conntrack-0.0.100
+ >=net-libs/libnetfilter_queue-1.0.0
+ net-libs/libnfnetlink"
+RDEPEND="${DEPEND}
+ net-misc/l7-protocols"
+
+S=${WORKDIR}/${MY_P}
+
+DOCS=( README TODO BUGS THANKS AUTHORS )
+
+src_prepare() {
+ epatch "${FILESDIR}/${PN}-0.11-libnetfilter_conntrack-0.0.100.patch" \
+ "${FILESDIR}/${PN}-0.11-datatype.patch"
+}
diff --git a/net-misc/l7-filter-userspace/metadata.xml b/net-misc/l7-filter-userspace/metadata.xml
new file mode 100644
index 000000000000..d204a62cf580
--- /dev/null
+++ b/net-misc/l7-filter-userspace/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+ <maintainer type="person">
+ <email>bircoph@gentoo.org</email>
+ <name>Andrew Savchenko</name>
+ </maintainer>
+ <upstream>
+ <remote-id type="sourceforge">l7-filter</remote-id>
+ </upstream>
+</pkgmetadata>