mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-08-01 23:19:33 +08:00
🍓 Sync 2026-07-27 23:23:03
This commit is contained in:
parent
b050c51064
commit
ee98d2bf9c
@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-qosmate
|
||||
PKG_VERSION:=1.0.14
|
||||
PKG_RELEASE:=3
|
||||
PKG_RELEASE:=4
|
||||
|
||||
PKG_MAINTAINER:=Markus Hütter <mh@hudra.net>
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
|
||||
@ -73,15 +73,15 @@ return view.extend({
|
||||
o.rmempty = false;
|
||||
|
||||
o = s.option(form.DynamicList, 'ip4', _('IPv4 Addresses'));
|
||||
o.datatype = 'ip4addr';
|
||||
o.datatype = 'or(ip4addr,iprange4)';
|
||||
o.rmempty = true;
|
||||
o.placeholder = _('Add IPv4 address or subnet');
|
||||
o.placeholder = _('Add IPv4 address, subnet or range');
|
||||
o.depends({ mode: 'static', family: 'ipv4' });
|
||||
|
||||
o = s.option(form.DynamicList, 'ip6', _('IPv6 Addresses'));
|
||||
o.datatype = 'ip6addr';
|
||||
o.datatype = 'or(ip6addr,iprange6)';
|
||||
o.rmempty = true;
|
||||
o.placeholder = _('Add IPv6 address or subnet');
|
||||
o.placeholder = _('Add IPv6 address, subnet or range');
|
||||
o.depends({ mode: 'static', family: 'ipv6' });
|
||||
|
||||
o = s.option(form.Value, 'timeout', _('Timeout'));
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
'require uci';
|
||||
'require fs';
|
||||
'require rpc';
|
||||
'require validation';
|
||||
|
||||
var callInitAction = rpc.declare({
|
||||
object: 'luci',
|
||||
@ -13,6 +14,17 @@ var callInitAction = rpc.declare({
|
||||
expect: { result: false }
|
||||
});
|
||||
|
||||
// Bridges LuCI's validation types into plain functions; see LuCI.validation docs
|
||||
var stubValidator = {
|
||||
factory: validation,
|
||||
apply: function(type, value, args) {
|
||||
if (value != null)
|
||||
this.value = value;
|
||||
return validation.types[type].apply(this, args);
|
||||
},
|
||||
assert: function(condition) { return !!condition; }
|
||||
};
|
||||
|
||||
// Validation helper for IP/IPv6 targets
|
||||
function validateTargetField(section_id, value) {
|
||||
if (!value || value.length === 0) return true;
|
||||
@ -44,6 +56,14 @@ function validateTargetField(section_id, value) {
|
||||
return _('MAC addresses not supported: ') + v + _(' (use IP addresses instead)');
|
||||
}
|
||||
|
||||
// nftables accepts address ranges wherever a plain address is allowed
|
||||
if (valueToValidate.indexOf('-') !== -1) {
|
||||
if (!stubValidator.apply('iprange', valueToValidate)) {
|
||||
return _('Invalid IP range: ') + v;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
// Validate IP/CIDR/IPv6
|
||||
if (!ipv4Regex.test(valueToValidate) &&
|
||||
!ipv6Regex.test(valueToValidate) &&
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
'require rpc';
|
||||
'require fs';
|
||||
'require poll';
|
||||
'require validation';
|
||||
'require tools.widgets as widgets';
|
||||
|
||||
var callInitAction = rpc.declare({
|
||||
@ -21,6 +22,17 @@ var callRuleCounters = rpc.declare({
|
||||
expect: { rule_counters: [] }
|
||||
});
|
||||
|
||||
// Bridges LuCI's validation types into plain functions; see LuCI.validation docs
|
||||
var stubValidator = {
|
||||
factory: validation,
|
||||
apply: function(type, value, args) {
|
||||
if (value != null)
|
||||
this.value = value;
|
||||
return validation.types[type].apply(this, args);
|
||||
},
|
||||
assert: function(condition) { return !!condition; }
|
||||
};
|
||||
|
||||
// IPv6 suffix matching validation helpers
|
||||
function isIPv6SuffixFormat(value) {
|
||||
// Format: ::suffix/::mask - allow empty suffix/mask with * instead of +
|
||||
@ -112,6 +124,17 @@ function validateIPField(section_id, value) {
|
||||
}
|
||||
hasIPv6 = true;
|
||||
}
|
||||
// nftables accepts address ranges wherever a plain address is allowed
|
||||
else if (valueToValidate.indexOf('-') !== -1) {
|
||||
if (!stubValidator.apply('iprange', valueToValidate)) {
|
||||
return _('Invalid IP range: ') + v;
|
||||
}
|
||||
if (valueToValidate.indexOf(':') !== -1) {
|
||||
hasIPv6 = true;
|
||||
} else {
|
||||
hasIPv4 = true;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (!ipCidrRegex.test(valueToValidate)) {
|
||||
return _('Invalid IP address or CIDR format: ') + v;
|
||||
@ -448,7 +471,7 @@ return view.extend({
|
||||
|
||||
o = s.taboption('general', form.DynamicList, 'src_ip', _('Source IP'));
|
||||
o.datatype = 'string';
|
||||
o.placeholder = _('IP address, @setname or ::suffix/::mask');
|
||||
o.placeholder = _('IP address, range, @setname or ::suffix/::mask');
|
||||
o.rmempty = true;
|
||||
o.validate = function(section_id, value) {
|
||||
return validateIPField(section_id, value);
|
||||
@ -490,7 +513,7 @@ return view.extend({
|
||||
|
||||
o = s.taboption('general', form.DynamicList, 'dest_ip', _('Destination IP'));
|
||||
o.datatype = 'string';
|
||||
o.placeholder = _('IP address, @setname or ::suffix/::mask');
|
||||
o.placeholder = _('IP address, range, @setname or ::suffix/::mask');
|
||||
o.rmempty = true;
|
||||
o.validate = function(section_id, value) {
|
||||
return validateIPField(section_id, value);
|
||||
|
||||
2
openwrt-e2guardian/.gitattributes
vendored
Normal file
2
openwrt-e2guardian/.gitattributes
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
339
openwrt-e2guardian/LICENSE
Normal file
339
openwrt-e2guardian/LICENSE
Normal file
@ -0,0 +1,339 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
109
openwrt-e2guardian/Makefile
Normal file
109
openwrt-e2guardian/Makefile
Normal file
@ -0,0 +1,109 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=e2guardian
|
||||
PKG_VERSION:=5.5.9r
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
PKG_MAINTAINER:=Douglas Orend <doug.orend2@gmail.com>
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/e2guardian/e2guardian/
|
||||
PKG_SOURCE_VERSION:=e9d50c8852891952c7750aa03fcf086267217a7f
|
||||
PKG_MIRROR_HASH:=skip
|
||||
|
||||
include $(INCLUDE_DIR)/uclibc++.mk
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/e2guardian
|
||||
SECTION:=net
|
||||
DEPENDS:=+libpthread $(CXX_DEPENDS) +zlib +libpcre +libopenssl
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Web Servers/Proxies
|
||||
TITLE:=E2Guardian
|
||||
URL:=http://e2guardian.org/cms/
|
||||
endef
|
||||
|
||||
define Package/e2guardian/conffiles
|
||||
/etc/e2guardian/e2guardianf1.conf
|
||||
/etc/config/e2guardian
|
||||
endef
|
||||
|
||||
CONFIGURE_VARS += \
|
||||
INCLUDES="" \
|
||||
CXXFLAGS="$$$$CXXFLAGS -fno-rtti" \
|
||||
LIBS="-lpthread"
|
||||
|
||||
CONFIGURE_ARGS += \
|
||||
--with-sysconfsubdir=e2guardian \
|
||||
--with-proxyuser=nobody \
|
||||
--with-proxygroup=nogroup \
|
||||
--with-piddir=/tmp/e2guardian/ \
|
||||
--enable-sslmitm=yes \
|
||||
--enable-icap=yes \
|
||||
--enable-orig-ip \
|
||||
--enable-pcre=yes
|
||||
|
||||
define Package/e2guardian/description
|
||||
e2guardian is an Open Source web content filter, It filters the actual content of pages based on many methods
|
||||
including phrase matching, request header and URL filtering, etc. It does not purely filter based on a banned list of sites
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
( cd $(PKG_BUILD_DIR); ./autogen.sh )
|
||||
$(call Build/Configure/Default,$CONFIGURE_ARGS)
|
||||
endef
|
||||
|
||||
define Package/e2guardian/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/e2guardian $(1)/usr/sbin/
|
||||
|
||||
$(INSTALL_DIR) $(1)/usr/share/e2guardian/languages/ukenglish
|
||||
$(CP) $(PKG_BUILD_DIR)/data/languages/ukenglish $(1)/usr/share/e2guardian/languages/
|
||||
|
||||
$(INSTALL_DIR) $(1)/usr/share/e2guardian
|
||||
$(CP) $(PKG_BUILD_DIR)/data/transparent1x1.gif $(1)/usr/share/e2guardian/
|
||||
$(CP) $(PKG_BUILD_DIR)/data/blockedflash.swf $(1)/usr/share/e2guardian/
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/init.d/
|
||||
$(INSTALL_BIN) ./files/e2guardian.init $(1)/etc/init.d/e2guardian
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/e2guardian/lists
|
||||
$(CP) $(PKG_BUILD_DIR)/configs/lists/oldphraselists $(1)/etc/e2guardian/lists/
|
||||
$(RM) $(1)/etc/e2guardian/lists/oldphraselists/Makefile*
|
||||
$(RM) $(1)/etc/e2guardian/lists/oldphraselists/*.in
|
||||
|
||||
$(CP) $(PKG_BUILD_DIR)/configs/lists/phraselists $(1)/etc/e2guardian/lists/
|
||||
$(RM) $(1)/etc/e2guardian/lists/phraselists/Makefile*
|
||||
$(RM) $(1)/etc/e2guardian/lists/phraselists/*.in
|
||||
|
||||
$(CP) $(PKG_BUILD_DIR)/configs/lists/common $(1)/etc/e2guardian/lists/
|
||||
$(RM) $(1)/etc/e2guardian/lists/common/Makefile*
|
||||
$(RM) $(1)/etc/e2guardian/lists/common/*.in
|
||||
|
||||
$(CP) $(PKG_BUILD_DIR)/configs/lists/example.group $(1)/etc/e2guardian/lists/example.group/
|
||||
$(RM) $(1)/etc/e2guardian/lists/example.group/Makefile*
|
||||
$(RM) $(1)/etc/e2guardian/lists/example.group/*.in
|
||||
|
||||
$(CP) $(PKG_BUILD_DIR)/configs/lists/contentscanners $(1)/etc/e2guardian/lists/
|
||||
$(RM) $(1)/etc/e2guardian/lists/contentscanners/Makefile*
|
||||
$(RM) $(1)/etc/e2guardian/lists/contentscanners/*.in
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/e2guardian/downloadmanagers
|
||||
$(CP) $(PKG_BUILD_DIR)/configs/downloadmanagers/default.conf $(1)/etc/e2guardian/downloadmanagers/
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/e2guardian/authplugins
|
||||
$(CP) $(PKG_BUILD_DIR)/configs/authplugins/*.conf $(1)/etc/e2guardian/authplugins/
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/e2guardian/contentscanners
|
||||
$(CP) $(PKG_BUILD_DIR)/configs/contentscanners/icapscan.conf $(1)/etc/e2guardian/contentscanners/
|
||||
|
||||
$(INSTALL_CONF) $(PKG_BUILD_DIR)/configs/e2guardian.conf $(1)/etc/e2guardian/e2guardian.conf
|
||||
$(INSTALL_CONF) $(PKG_BUILD_DIR)/configs/e2guardianf1.conf $(1)/etc/e2guardian/e2guardianf1.conf
|
||||
$(CP) $(PKG_BUILD_DIR)/configs/*.story $(1)/etc/e2guardian/
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_CONF) ./files/e2guardian.config $(1)/etc/config/e2guardian
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,e2guardian))
|
||||
69
openwrt-e2guardian/files/e2guardian.config
Normal file
69
openwrt-e2guardian/files/e2guardian.config
Normal file
@ -0,0 +1,69 @@
|
||||
config e2guardian 'e2guardian'
|
||||
option languagedir '/usr/share/e2guardian/languages'
|
||||
option language 'ukenglish'
|
||||
option loglevel '2'
|
||||
option logexceptionhits '2'
|
||||
option logfileformat '1'
|
||||
option loglocation '/var/log/e2guardian/access.log'
|
||||
option maxuploadsize '-1'
|
||||
option filterports '8080'
|
||||
option proxyip '127.0.0.1'
|
||||
option proxyport '3128'
|
||||
option proxytimeout '20'
|
||||
option proxyexchange '20'
|
||||
option pcontimeout '55'
|
||||
option accessdeniedaddress 'http://YOURSERVER.YOURDOMAIN/cgi-bin/e2guardian.pl'
|
||||
option usecustombannedimage 'on'
|
||||
option custombannedimagefile '/usr/share/e2guardian/transparent1x1.gif'
|
||||
option usecustombannedflash 'on'
|
||||
option custombannedflashfile '/usr/share/e2guardian/blockedflash.swf'
|
||||
option filtergroups '1'
|
||||
option filtergroupslist '/etc/e2guardian/lists/filtergroupslist'
|
||||
option bannediplist '/etc/e2guardian/lists/bannediplist'
|
||||
option exceptioniplist '/etc/e2guardian/lists/exceptioniplist'
|
||||
option perroomdirectory '/etc/e2guardian/lists/bannedrooms/'
|
||||
option showweightedfound 'on'
|
||||
option weightedphrasemode '2'
|
||||
option urlcachenumber '1000'
|
||||
option urlcacheage '900'
|
||||
option scancleancache 'on'
|
||||
option phrasefiltermode '2'
|
||||
option preservecase '0'
|
||||
option hexdecodecontent 'off'
|
||||
option forcequicksearch 'off'
|
||||
option reverseaddresslookups 'off'
|
||||
option reverseclientiplookups 'off'
|
||||
option logclienthostnames 'off'
|
||||
option createlistcachefiles 'on'
|
||||
option prefercachedlists 'off'
|
||||
option maxcontentfiltersize '256'
|
||||
option maxcontentramcachescansize '2000'
|
||||
option maxcontentfilecachescansize '20000'
|
||||
option filecachedir '/tmp'
|
||||
option deletedownloadedtempfiles 'on'
|
||||
option initialtrickledelay '20'
|
||||
option trickledelay '10'
|
||||
option downloadmanager '/etc/e2guardian/downloadmanagers/fancy.conf'
|
||||
option downloadmanager '/etc/e2guardian/downloadmanagers/default.conf'
|
||||
option contentscannertimeout '60'
|
||||
option contentscanexceptions 'off'
|
||||
option recheckreplacedurls 'off'
|
||||
option forwardedfor 'off'
|
||||
option usexforwardedfor 'off'
|
||||
option logconnectionhandlingerrors 'on'
|
||||
option logchildprocesshandling 'off'
|
||||
option maxchildren '180'
|
||||
option minchildren '20'
|
||||
option minsparechildren '16'
|
||||
option preforkchildren '10'
|
||||
option maxsparechildren '32'
|
||||
option maxagechildren '500'
|
||||
option maxips '0'
|
||||
option ipcfilename '/tmp/.dguardianipc'
|
||||
option urlipcfilename '/tmp/.dguardianurlipc'
|
||||
option ipipcfilename '/tmp/.dguardianipipc'
|
||||
option nodaemon 'off'
|
||||
option nologger 'off'
|
||||
option logadblocks 'off'
|
||||
option loguseragent 'off'
|
||||
option softrestart 'off'
|
||||
216
openwrt-e2guardian/files/e2guardian.init
Executable file
216
openwrt-e2guardian/files/e2guardian.init
Executable file
@ -0,0 +1,216 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2015 OpenWrt.org
|
||||
|
||||
START=90
|
||||
STOP=10
|
||||
|
||||
USE_PROCD=1
|
||||
PROG=/usr/sbin/e2guardian
|
||||
CONFIGFILE="/tmp/e2guardian/e2guardian.conf"
|
||||
LOGFILE="/tmp/e2guardian/access.log"
|
||||
GROUPCONFIG="/tmp/e2guardian/e2guardianf1.conf"
|
||||
|
||||
validate_e2guardian_section() {
|
||||
uci_validate_section e2guardian e2guardian "${1}" \
|
||||
'accessdeniedaddress:string' \
|
||||
'bannediplist:string' \
|
||||
'contentscanexceptions:string' \
|
||||
'contentscanner:string' \
|
||||
'contentscannertimeout:uinteger' \
|
||||
'createlistcachefiles:string' \
|
||||
'custombannedflashfile:string' \
|
||||
'custombannedimagefile:string' \
|
||||
'deletedownloadedtempfiles:string' \
|
||||
'downloadmanager:string' \
|
||||
'exceptioniplist:string' \
|
||||
'filecachedir:string' \
|
||||
'filtergroups:uinteger' \
|
||||
'filtergroupslist:string' \
|
||||
'filterip:ipaddr' \
|
||||
'filterports:port:8080' \
|
||||
'forcequicksearch:string' \
|
||||
'forwardedfor:string' \
|
||||
'hexdecodecontent:string' \
|
||||
'initialtrickledelay:uinteger' \
|
||||
'ipcfilename:string' \
|
||||
'ipipcfilename:string' \
|
||||
'languagedir:string' \
|
||||
'language:string' \
|
||||
'logadblocks:string' \
|
||||
'logchildprocesshandling:string' \
|
||||
'logclienthostnames:string' \
|
||||
'logconnectionhandlingerrors:string' \
|
||||
'logexceptionhits:range(0,2)' \
|
||||
'logfileformat:range(1,6)' \
|
||||
'loglevel:range(0,3)' \
|
||||
'loglocation:string' \
|
||||
'loguseragent:string' \
|
||||
'maxagechildren:uinteger' \
|
||||
'maxchildren:uinteger' \
|
||||
'maxcontentfilecachescansize:uinteger' \
|
||||
'maxcontentfiltersize:uinteger' \
|
||||
'maxcontentramcachescansize:uinteger' \
|
||||
'maxips:uinteger' \
|
||||
'maxsparechildren:uinteger' \
|
||||
'maxuploadsize:integer' \
|
||||
'minchildren:uinteger' \
|
||||
'minsparechildren:uinteger' \
|
||||
'nodaemon:string' \
|
||||
'nologger:string' \
|
||||
'pcontimeout:range(5,300)' \
|
||||
'perroomdirectory:string' \
|
||||
'phrasefiltermode:range(0,3)' \
|
||||
'prefercachedlists:string' \
|
||||
'preforkchildren:uinteger' \
|
||||
'preservecase:range(0,2)' \
|
||||
'proxyexchange:range(20,300)' \
|
||||
'proxyip:ipaddr' \
|
||||
'proxyport:port:3128' \
|
||||
'proxytimeout:range(5,100)' \
|
||||
'recheckreplacedurls:string' \
|
||||
'reverseaddresslookups:string' \
|
||||
'reverseclientiplookups:string' \
|
||||
'scancleancache:string' \
|
||||
'showweightedfound:string' \
|
||||
'softrestart:string' \
|
||||
'trickledelay:uinteger' \
|
||||
'urlcacheage:uinteger' \
|
||||
'urlcachenumber:uinteger' \
|
||||
'urlipcfilename:string' \
|
||||
'usecustombannedflash:string' \
|
||||
'usecustombannedimage:string' \
|
||||
'usexforwardedfor:string' \
|
||||
'weightedphrasemode:range(0,2)'
|
||||
}
|
||||
|
||||
start_service() {
|
||||
|
||||
local accessdeniedaddress bannediplist contentscanexceptions contentscanner contentscannertimeout \
|
||||
createlistcachefiles custombannedflashfile custombannedimagefile deletedownloadedtempfiles \
|
||||
downloadmanager exceptioniplist filecachedir loglocation \
|
||||
filtergroups filtergroupslist filterip filterports forcequicksearch forwardedfor hexdecodecontent \
|
||||
initialtrickledelay ipcfilename ipipcfilename language languagedir logadblocks logchildprocesshandling \
|
||||
logclienthostnames logconnectionhandlingerrors logexceptionhits logfileformat loglevel loguseragent \
|
||||
maxagechildren maxchildren maxcontentfilecachescansize maxcontentfiltersize maxcontentramcachescansize \
|
||||
maxips maxsparechildren maxuploadsize minchildren minsparechildren nodaemon nologger \
|
||||
pcontimeout perroomdirectory phrasefiltermode prefercachedlists preforkchildren preservecase proxyexchange \
|
||||
proxyip proxyport proxytimeout recheckreplacedurls reverseaddresslookups reverseclientiplookups scancleancache \
|
||||
showweightedfound softrestart trickledelay urlcacheage urlcachenumber urlipcfilename usecustombannedflash \
|
||||
usecustombannedimage usexforwardedfor weightedphrasemode
|
||||
|
||||
validate_e2guardian_section e2guardian || {
|
||||
echo "validation failed"
|
||||
return 1
|
||||
}
|
||||
|
||||
mkdir -p $(dirname $CONFIGFILE)
|
||||
chown -R nobody:nogroup $(dirname $CONFIGFILE)
|
||||
|
||||
mkdir -p $(dirname $loglocation)
|
||||
chown -R nobody:nogroup $(dirname $loglocation)
|
||||
|
||||
touch $loglocation
|
||||
chown nobody:nogroup $loglocation
|
||||
|
||||
ln -sf $loglocation $(dirname $LOGFILE)
|
||||
ln -sf /etc/e2guardian/e2guardian.conf $CONFIGFILE
|
||||
ln -sf /etc/e2guardian/e2guardianf1.conf $GROUPCONFIG
|
||||
|
||||
echo "accessdeniedaddress = " $accessdeniedaddress > $CONFIGFILE
|
||||
echo "bannediplist = " $bannediplist >> $CONFIGFILE
|
||||
|
||||
if [ "$contentscanner" != "" ]
|
||||
then
|
||||
echo "contentscanner = " $contentscanner >> $CONFIGFILE
|
||||
fi
|
||||
|
||||
echo "contentscanexceptions = " $contentscanexceptions >> $CONFIGFILE
|
||||
echo "contentscannertimeout = " $contentscannertimeout >> $CONFIGFILE
|
||||
echo "createlistcachefiles = " $createlistcachefiles >> $CONFIGFILE
|
||||
echo "custombannedflashfile = " $custombannedflashfile >> $CONFIGFILE
|
||||
echo "custombannedimagefile = " $custombannedimagefile >> $CONFIGFILE
|
||||
echo "deletedownloadedtempfiles = " $deletedownloadedtempfiles >> $CONFIGFILE
|
||||
echo "downloadmanager = " $downloadmanager >> $CONFIGFILE
|
||||
echo "exceptioniplist = " $exceptioniplist >> $CONFIGFILE
|
||||
echo "filecachedir = " $filecachedir >> $CONFIGFILE
|
||||
echo "filtergroups = " $filtergroups >> $CONFIGFILE
|
||||
echo "filtergroupslist = " $filtergroupslist >> $CONFIGFILE
|
||||
echo "filterip = " $filterip >> $CONFIGFILE
|
||||
echo "filterports = " $filterports >> $CONFIGFILE
|
||||
echo "forcequicksearch = " $forcequicksearch >> $CONFIGFILE
|
||||
echo "forwardedfor = " $forwardedfor >> $CONFIGFILE
|
||||
echo "hexdecodecontent = " $hexdecodecontent >> $CONFIGFILE
|
||||
echo "initialtrickledelay = " $initialtrickledelay >> $CONFIGFILE
|
||||
echo "ipcfilename = " $ipcfilename >> $CONFIGFILE
|
||||
echo "ipipcfilename = " $ipipcfilename >> $CONFIGFILE
|
||||
echo "language = " $language >> $CONFIGFILE
|
||||
echo "languagedir = " $languagedir >> $CONFIGFILE
|
||||
echo "logadblocks = " $logadblocks >> $CONFIGFILE
|
||||
echo "logchildprocesshandling = " $logchildprocesshandling >> $CONFIGFILE
|
||||
echo "logclienthostnames = " $logclienthostnames >> $CONFIGFILE
|
||||
echo "logconnectionhandlingerrors = " $logconnectionhandlingerrors >> $CONFIGFILE
|
||||
echo "logexceptionhits = " $logexceptionhits >> $CONFIGFILE
|
||||
echo "logfileformat = " $logfileformat >> $CONFIGFILE
|
||||
echo "loglevel = " $loglevel >> $CONFIGFILE
|
||||
echo "loglocation = " $loglocation >> $CONFIGFILE
|
||||
echo "loguseragent = " $loguseragent >> $CONFIGFILE
|
||||
echo "maxagechildren = " $maxagechildren >> $CONFIGFILE
|
||||
echo "maxchildren = " $maxchildren >> $CONFIGFILE
|
||||
echo "maxcontentfilecachescansize = " $maxcontentfilecachescansize >> $CONFIGFILE
|
||||
echo "maxcontentfiltersize = " $maxcontentfiltersize >> $CONFIGFILE
|
||||
echo "maxcontentramcachescansize = " $maxcontentramcachescansize >> $CONFIGFILE
|
||||
echo "maxips = " $maxips >> $CONFIGFILE
|
||||
echo "maxsparechildren = " $maxsparechildren >> $CONFIGFILE
|
||||
echo "maxuploadsize = " $maxuploadsize >> $CONFIGFILE
|
||||
echo "minchildren = " $minchildren >> $CONFIGFILE
|
||||
echo "minsparechildren = " $minsparechildren >> $CONFIGFILE
|
||||
echo "nodaemon = " $nodaemon >> $CONFIGFILE
|
||||
echo "nologger = " $nologger >> $CONFIGFILE
|
||||
echo "pcontimeout = " $pcontimeout >> $CONFIGFILE
|
||||
echo "perroomdirectory = " $perroomdirectory >> $CONFIGFILE
|
||||
echo "phrasefiltermode = " $phrasefiltermode >> $CONFIGFILE
|
||||
echo "prefercachedlists = " $prefercachedlists >> $CONFIGFILE
|
||||
echo "preforkchildren = " $preforkchildren >> $CONFIGFILE
|
||||
echo "preservecase = " $preservecase >> $CONFIGFILE
|
||||
echo "proxyexchange = " $proxyexchange >> $CONFIGFILE
|
||||
echo "proxyip = " $proxyip >> $CONFIGFILE
|
||||
echo "proxyport = " $proxyport >> $CONFIGFILE
|
||||
echo "proxytimeout = " $proxytimeout >> $CONFIGFILE
|
||||
echo "recheckreplacedurls = " $recheckreplacedurls >> $CONFIGFILE
|
||||
echo "reverseaddresslookups = " $reverseaddresslookups >> $CONFIGFILE
|
||||
echo "reverseclientiplookups = " $reverseclientiplookups >> $CONFIGFILE
|
||||
echo "scancleancache = " $scancleancache >> $CONFIGFILE
|
||||
echo "showweightedfound = " $showweightedfound >> $CONFIGFILE
|
||||
echo "softrestart = " $softrestart >> $CONFIGFILE
|
||||
echo "trickledelay = " $trickledelay >> $CONFIGFILE
|
||||
echo "urlcacheage = " $urlcacheage >> $CONFIGFILE
|
||||
echo "urlcachenumber = " $urlcachenumber >> $CONFIGFILE
|
||||
echo "urlipcfilename = " $urlipcfilename >> $CONFIGFILE
|
||||
echo "usecustombannedflash = " $usecustombannedflash >> $CONFIGFILE
|
||||
echo "usecustombannedimage = " $usecustombannedimage >> $CONFIGFILE
|
||||
echo "usexforwardedfor = " $usexforwardedfor >> $CONFIGFILE
|
||||
echo "weightedphrasemode = " $weightedphrasemode >> $CONFIGFILE
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command $PROG -c $CONFIGFILE
|
||||
procd_set_param file $CONFIGFILE
|
||||
procd_close_instance
|
||||
|
||||
}
|
||||
|
||||
stop_service()
|
||||
{
|
||||
PID=`cat /tmp/e2guardian/e2guardian.pid`
|
||||
kill $PID
|
||||
rm -f /tmp/e2guardian/e2guardian.pid
|
||||
}
|
||||
|
||||
service_triggers()
|
||||
{
|
||||
procd_add_reload_trigger "e2guardian"
|
||||
procd_add_validation validate_e2guardian_section
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
restart
|
||||
}
|
||||
46
openwrt-mwgp/Makefile
Normal file
46
openwrt-mwgp/Makefile
Normal file
@ -0,0 +1,46 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=mwgp
|
||||
PKG_VERSION:=2.1.7
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE:=v$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://github.com/apernet/mwgp
|
||||
PKG_SOURCE_VERSION:=bd3cbaa3b81f0b081c425de9ac15a54a6da5ef9a
|
||||
PKG_HASH:=skip
|
||||
|
||||
PKG_LICENSE:=GPL-3.0-only
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_MAINTAINER:=Your Name <your.email@example.com>
|
||||
|
||||
PKG_BUILD_DEPENDS:=golang/host
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_BUILD_FLAGS:=no-mips16
|
||||
|
||||
GO_PKG:=github.com/apernet/mwgp
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
||||
|
||||
define Package/mwgp
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=Multiple WireGuard Proxy
|
||||
URL:=https://github.com/apernet/mwgp
|
||||
endef
|
||||
|
||||
define Package/mwgp/description
|
||||
mwgp (Multiple WireGuard Proxy) is a proxy designed to multiplex and accelerate WireGuard traffic.
|
||||
endef
|
||||
|
||||
#define Build/Compile
|
||||
#GOOS=linux GOARCH=arm64 go build -ldflags "-s -w" -o mwgp ./cmd/mwgp
|
||||
#endef
|
||||
|
||||
define Package/mwgp/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/cmd/mwgp $(1)/usr/bin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,mwgp))
|
||||
93
openwrt-mwgp/files/mwgp
Normal file
93
openwrt-mwgp/files/mwgp
Normal file
@ -0,0 +1,93 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
STOP=10
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
# Change paths if you installed mwgp elsewhere
|
||||
PROG=/usr/bin/mwgp
|
||||
CONFIG_DIR=/etc/mwgp
|
||||
CONFIG_FILE=${CONFIG_DIR}/config.json
|
||||
CACHE_FILE=/tmp/etc/mwgp_cache.json
|
||||
NAME=mwgp
|
||||
|
||||
extra_command "import" "Import wireguard configuration from OpenWrt"
|
||||
extra_command "config" "Show MWGP configuration file output"
|
||||
|
||||
import() {
|
||||
# Make sure the config file exists. Otherwise, commands will error:
|
||||
touch /etc/config/mwgp
|
||||
|
||||
# Delete old records of Wireguard connections first:
|
||||
grep openwrt mwgp | while read A B C; do uci del mwgp.${C//\'/}; done
|
||||
|
||||
# Read network configuration and write specific keys to "/etc/config/mwgp":
|
||||
uci show network | grep proto | grep wireguard | sed "s|\.| |g" | while read A B C; do
|
||||
SECTION=mwgp.${B}
|
||||
uci -q delete $SECTION
|
||||
KEY=$(uci get network.${B}.private_key)
|
||||
uci set $SECTION=openwrt
|
||||
uci set ${SECTION}.private_key="$KEY"
|
||||
uci show network | grep ${B}_ | grep public_key | sed "s|[=\']| |" | while read D E; do
|
||||
uci add_list ${SECTION}.public_keys="${E//\'/}"
|
||||
done
|
||||
uci set ${SECTION}.forward_to="127.0.0.1:$(uci get network.${B}.listen_port)"
|
||||
done
|
||||
uci commit
|
||||
}
|
||||
|
||||
function config() {
|
||||
echo "{"
|
||||
echo " \"listen\": \":1000\","
|
||||
echo " \"timeout\": 60,"
|
||||
echo " \"servers\": ["
|
||||
OUTER=true
|
||||
grep config /etc/config/mwgp | while read A B C; do
|
||||
[[ ${OUTER} == false ]] && echo ","
|
||||
SECTION=${C//\'/}
|
||||
echo " {"
|
||||
echo " \"privkey\": \"$(uci get mwgp.${SECTION}.private_key)\","
|
||||
echo " \"peers\": ["
|
||||
ADDR=$(uci get mwgp.${SECTION}.forward_to)
|
||||
INNER=true
|
||||
for KEY in $(uci get mwgp.${SECTION}.public_keys); do
|
||||
[[ ${INNER} == false ]] && echo ","
|
||||
echo " {"
|
||||
echo " \"pubkey\": \"${KEY}\","
|
||||
echo " \"forward_to\": \"${ADDR}\""
|
||||
echo -e " }"
|
||||
INNER=false
|
||||
done
|
||||
echo " ]"
|
||||
echo " }"
|
||||
OUTER=false
|
||||
done
|
||||
echo " ]"
|
||||
echo "}"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
test -f /etc/config/mwgp || import
|
||||
test -d ${CONFIG_DIR} || mkdir -p ${CONFIG_DIR}
|
||||
test -f ${CONFIG_FILE} || config > ${CONFIG_FILE}
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command $PROG server $CONFIG_FILE --cache-file $CACHE_FILE
|
||||
|
||||
# Respawn if the process crashes
|
||||
procd_set_param respawn
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
# Send a kill signal to stop the instance safely
|
||||
procd_send_signal $NAME
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
restart
|
||||
}
|
||||
93
openwrt-mwgp/files/mwgp.init
Executable file
93
openwrt-mwgp/files/mwgp.init
Executable file
@ -0,0 +1,93 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
STOP=10
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
# Change paths if you installed mwgp elsewhere
|
||||
PROG=/usr/bin/mwgp
|
||||
CONFIG_DIR=/etc/mwgp
|
||||
CONFIG_FILE=${CONFIG_DIR}/config.json
|
||||
CACHE_FILE=/tmp/etc/mwgp_cache.json
|
||||
NAME=mwgp
|
||||
|
||||
extra_command "import" "Import wireguard configuration from OpenWrt"
|
||||
extra_command "config" "Show MWGP configuration file output"
|
||||
|
||||
import() {
|
||||
# Make sure the config file exists. Otherwise, commands will error:
|
||||
touch /etc/config/mwgp
|
||||
|
||||
# Delete old records of Wireguard connections first:
|
||||
grep openwrt mwgp | while read A B C; do uci del mwgp.${C//\'/}; done
|
||||
|
||||
# Read network configuration and write specific keys to "/etc/config/mwgp":
|
||||
uci show network | grep proto | grep wireguard | sed "s|\.| |g" | while read A B C; do
|
||||
SECTION=mwgp.${B}
|
||||
uci -q delete $SECTION
|
||||
KEY=$(uci get network.${B}.private_key)
|
||||
uci set $SECTION=openwrt
|
||||
uci set ${SECTION}.private_key="$KEY"
|
||||
uci show network | grep ${B}_ | grep public_key | sed "s|[=\']| |" | while read D E; do
|
||||
uci add_list ${SECTION}.public_keys="${E//\'/}"
|
||||
done
|
||||
uci set ${SECTION}.forward_to="127.0.0.1:$(uci get network.${B}.listen_port)"
|
||||
done
|
||||
uci commit
|
||||
}
|
||||
|
||||
function config() {
|
||||
echo "{"
|
||||
echo " \"listen\": \":1000\","
|
||||
echo " \"timeout\": 60,"
|
||||
echo " \"servers\": ["
|
||||
OUTER=true
|
||||
grep config /etc/config/mwgp | while read A B C; do
|
||||
[[ ${OUTER} == false ]] && echo ","
|
||||
SECTION=${C//\'/}
|
||||
echo " {"
|
||||
echo " \"privkey\": \"$(uci get mwgp.${SECTION}.private_key)\","
|
||||
echo " \"peers\": ["
|
||||
ADDR=$(uci get mwgp.${SECTION}.forward_to)
|
||||
INNER=true
|
||||
for KEY in $(uci get mwgp.${SECTION}.public_keys); do
|
||||
[[ ${INNER} == false ]] && echo ","
|
||||
echo " {"
|
||||
echo " \"pubkey\": \"${KEY}\","
|
||||
echo " \"forward_to\": \"${ADDR}\""
|
||||
echo -e " }"
|
||||
INNER=false
|
||||
done
|
||||
echo " ]"
|
||||
echo " }"
|
||||
OUTER=false
|
||||
done
|
||||
echo " ]"
|
||||
echo "}"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
test -f /etc/config/mwgp || import
|
||||
test -d ${CONFIG_DIR} || mkdir -p ${CONFIG_DIR}
|
||||
test -f ${CONFIG_FILE} || config > ${CONFIG_FILE}
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command $PROG server $CONFIG_FILE --cache-file $CACHE_FILE
|
||||
|
||||
# Respawn if the process crashes
|
||||
procd_set_param respawn
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
# Send a kill signal to stop the instance safely
|
||||
procd_send_signal $NAME
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
restart
|
||||
}
|
||||
@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=qosmate
|
||||
PKG_VERSION:=0.5.48
|
||||
PKG_RELEASE:=5
|
||||
PKG_RELEASE:=6
|
||||
|
||||
PKG_MAINTAINER:=Markus Hütter <mh@hudra.net>
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
|
||||
@ -409,7 +409,7 @@ QoSmate allows you to define custom DSCP (Differentiated Services Code Point) ma
|
||||
| ------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- | ------- |
|
||||
| name | A unique name for the rule. Used for identification and logging. | string | |
|
||||
| proto | The protocol to match. Determines which type of traffic the rule applies to. | enum (tcp, udp, icmp) | |
|
||||
| src_ip | Source IP address or range to match. Can use CIDR notation for networks. | string | |
|
||||
| src_ip | Source IP to match. Single address, CIDR notation, or a range like '192.168.1.1-192.168.1.200'. | string | |
|
||||
| src_port | Source port or range to match. Can use individual ports or ranges like '1000-2000'. | string | |
|
||||
| dest_ip | Destination IP address or range to match. Similar to src_ip in format. | string | |
|
||||
| dest_port | Destination port or range to match. Similar to src_port in format. | string | |
|
||||
@ -544,8 +544,8 @@ QoSmate features an integrated IP Sets UI which allows you to manage both static
|
||||
| name | Name of the IP set. Used to reference the set in QoS rules with the @ prefix (e.g., @gaming_devices). Must contain only letters, numbers, and underscores. | string | |
|
||||
| mode | Defines how the set is populated. 'static' for manually specified IP lists, 'dynamic' for automatically populated sets (e.g., via DNS resolution). | enum (static, dynamic) | static |
|
||||
| family | Specifies the IP version for addresses in this set. | enum (ipv4, ipv6) | ipv4 |
|
||||
| ip4 | List of IPv4 addresses or networks to include in the set. Only applicable when mode is 'static'. | list(string) | |
|
||||
| ip6 | List of IPv6 addresses or networks to include in the set. Only applicable when mode is 'static'. | list(string) | |
|
||||
| ip4 | List of IPv4 addresses, networks or ranges (e.g. 192.168.1.1-192.168.1.200) to include in the set. Only applicable when mode is 'static'. | list(string) | |
|
||||
| ip6 | List of IPv6 addresses, networks or ranges (e.g. 2001:db8::1-2001:db8::ff) to include in the set. Only applicable when mode is 'static'. | list(string) | |
|
||||
| timeout | Duration after which entries are removed from the set if not refreshed. Format: number + unit (s/m/h). Only applicable when mode is 'dynamic'. | string | 1h |
|
||||
| enabled | Enables or disables the IP set. | boolean | 1 |
|
||||
|
||||
@ -563,6 +563,22 @@ config ipset
|
||||
list ip4 '192.168.1.52'
|
||||
list ip4 '192.168.1.53'
|
||||
```
|
||||
|
||||
Instead of listing every address individually, you can use CIDR notation or an address range:
|
||||
|
||||
```bash
|
||||
config ipset
|
||||
option name 'guest_devices'
|
||||
option mode 'static'
|
||||
option family 'ipv4'
|
||||
list ip4 '192.168.1.100-192.168.1.150'
|
||||
list ip4 '192.168.2.0/24'
|
||||
```
|
||||
|
||||
Overlapping entries are merged automatically. If a range covers an address that is also listed
|
||||
separately, nftables collapses both into a single interval, so `nft list set inet dscptag <name>`
|
||||
may show fewer entries than the configuration contains.
|
||||
|
||||
This set can then be referenced in your QoS rules:
|
||||
```bash
|
||||
config rule
|
||||
@ -628,7 +644,7 @@ Rate limits are configured via the LuCI interface under **Network → QoSmate
|
||||
|--------|-------------|------|---------|
|
||||
| name | Descriptive name for the rate limit rule | string | |
|
||||
| enabled | Enables or disables this rate limit rule | boolean | 1 |
|
||||
| target | List of IP/IPv6 addresses or subnets to limit. Supports negation (!=) and set references (@setname) | list(string) | |
|
||||
| target | List of IP/IPv6 addresses, subnets or ranges to limit. Supports negation (!=) and set references (@setname) | list(string) | |
|
||||
| download_limit | Maximum download speed in Kbit/s (0 = unlimited) | integer | 10000 |
|
||||
| upload_limit | Maximum upload speed in Kbit/s (0 = unlimited) | integer | 10000 |
|
||||
| burst_factor | Burst allowance multiplier. 0 = strict limiting, 1.0 = rate as burst, higher = more burst | float | 1.0 |
|
||||
|
||||
@ -117,6 +117,7 @@ config autorate 'autorate'
|
||||
# list ip4 '192.168.37.50'
|
||||
# list ip4 '192.168.37.51'
|
||||
# list ip4 '192.168.37.52'
|
||||
# list ip4 '192.168.37.100-192.168.37.150'
|
||||
# option enabled '1'
|
||||
|
||||
#config ipset
|
||||
|
||||
@ -190,7 +190,7 @@ create_nft_sets() {
|
||||
|
||||
# shellcheck disable=SC2329
|
||||
create_set() {
|
||||
local section="$1" name ip_list mode timeout set_flags
|
||||
local section="$1" name ip_list mode timeout set_flags family nft_type elements=""
|
||||
|
||||
config_get name "$section" name
|
||||
# Only process if enabled (default: enabled)
|
||||
@ -222,24 +222,13 @@ create_nft_sets() {
|
||||
echo "set $name { type ipv4_addr; flags $set_flags; timeout $timeout; }"
|
||||
fi
|
||||
else
|
||||
set_flags="interval"
|
||||
if [ -n "$ip_list" ]; then
|
||||
if [ "$family" = "ipv6" ]; then
|
||||
debug_log "Creating static IPv6 set: $name"
|
||||
echo "set $name { type ipv6_addr; flags $set_flags; elements = { $(echo "$ip_list" | tr ' ' ',') }; }"
|
||||
else
|
||||
debug_log "Creating static IPv4 set: $name"
|
||||
echo "set $name { type ipv4_addr; flags $set_flags; elements = { $(echo "$ip_list" | tr ' ' ',') }; }"
|
||||
fi
|
||||
else
|
||||
if [ "$family" = "ipv6" ]; then
|
||||
debug_log "Creating empty static IPv6 set: $name"
|
||||
echo "set $name { type ipv6_addr; flags $set_flags; }"
|
||||
else
|
||||
debug_log "Creating empty static IPv4 set: $name"
|
||||
echo "set $name { type ipv4_addr; flags $set_flags; }"
|
||||
fi
|
||||
fi
|
||||
nft_type="ipv4_addr"
|
||||
[ "$family" = "ipv6" ] && nft_type="ipv6_addr"
|
||||
# auto-merge collapses overlapping entries (e.g. a range covering an
|
||||
# already listed single IP), which nftables would otherwise reject
|
||||
[ -n "$ip_list" ] && elements=" elements = { $(echo "$ip_list" | tr ' ' ',') };"
|
||||
debug_log "Creating static $family set: $name"
|
||||
echo "set $name { type $nft_type; flags interval; auto-merge;$elements }"
|
||||
fi
|
||||
sets_created="$sets_created $name"
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user