From c2124dd2ad542f526ee84e1984f03dd2f5b34dfe Mon Sep 17 00:00:00 2001
From: Josef Schlehofer
Date: Thu, 28 Sep 2023 09:34:27 +0200
Subject: [PATCH] luci-app-bmx6: drop this because of security vulnerabilities
DependencyBot, which are using is sending us emails about these CVEs:
CVE-2012-6708
CVE-2020-23064
CVE-2019-11358
This was reported to maintainer in April 2023, but no one stepped it to fix that,
so let's drop this.
Replacement could be luci-app-bmx7.
Signed-off-by: Josef Schlehofer
---
luci-app-bmx6/COPYING | 339 ------------------
luci-app-bmx6/Makefile | 99 -----
luci-app-bmx6/bmx6/etc/config/luci-bmx6 | 7 -
.../bmx6/usr/lib/lua/luci/controller/bmx6.lua | 277 --------------
.../bmx6/usr/lib/lua/luci/model/bmx6json.lua | 224 ------------
.../lib/lua/luci/model/cbi/bmx6/advanced.lua | 75 ----
.../usr/lib/lua/luci/model/cbi/bmx6/hna.lua | 47 ---
.../lua/luci/model/cbi/bmx6/interfaces.lua | 77 ----
.../usr/lib/lua/luci/model/cbi/bmx6/main.lua | 105 ------
.../lib/lua/luci/model/cbi/bmx6/plugins.lua | 50 ---
.../lib/lua/luci/model/cbi/bmx6/tunnels.lua | 70 ----
.../admin_status/index/neighbours_simple.htm | 108 ------
.../bmx6/usr/lib/lua/luci/view/bmx6/chat.htm | 35 --
.../bmx6/usr/lib/lua/luci/view/bmx6/error.htm | 10 -
.../usr/lib/lua/luci/view/bmx6/gateways_j.htm | 120 -------
.../bmx6/usr/lib/lua/luci/view/bmx6/graph.htm | 49 ---
.../bmx6/usr/lib/lua/luci/view/bmx6/links.htm | 55 ---
.../usr/lib/lua/luci/view/bmx6/nodes_j.htm | 204 -----------
.../usr/lib/lua/luci/view/bmx6/status_j.htm | 88 -----
.../usr/lib/lua/luci/view/bmx6/tunnels_j.htm | 106 ------
luci-app-bmx6/bmx6/www/cgi-bin/bmx6-info | 126 -------
.../luci-static/resources/bmx6/bmx6logo.png | Bin 4986 -> 0 bytes
.../resources/bmx6/js/bmx6-graph.js | 234 ------------
.../luci-static/resources/bmx6/js/polling.js | 81 -----
.../www/luci-static/resources/bmx6/link.png | Bin 2910 -> 0 bytes
.../www/luci-static/resources/bmx6/style.css | 22 --
.../www/luci-static/resources/bmx6/wifi.png | Bin 3551 -> 0 bytes
.../www/luci-static/resources/bmx6/world.png | Bin 1885 -> 0 bytes
.../resources/bmx6/world_small.png | Bin 923 -> 0 bytes
luci-app-bmx6/dracula/dracula_graffle.js | 1 -
luci-app-bmx6/dracula/dracula_graph.js | 1 -
luci-app-bmx6/dracula/raphael-min.js | 7 -
luci-app-bmx6/jquery/jquery-1.4.js | 154 --------
33 files changed, 2771 deletions(-)
delete mode 100644 luci-app-bmx6/COPYING
delete mode 100644 luci-app-bmx6/Makefile
delete mode 100644 luci-app-bmx6/bmx6/etc/config/luci-bmx6
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/controller/bmx6.lua
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/model/bmx6json.lua
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/advanced.lua
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/hna.lua
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/interfaces.lua
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/main.lua
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/plugins.lua
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/tunnels.lua
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/view/admin_status/index/neighbours_simple.htm
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/chat.htm
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/error.htm
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/gateways_j.htm
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/graph.htm
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/links.htm
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/nodes_j.htm
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/status_j.htm
delete mode 100644 luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/tunnels_j.htm
delete mode 100755 luci-app-bmx6/bmx6/www/cgi-bin/bmx6-info
delete mode 100644 luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/bmx6logo.png
delete mode 100644 luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/js/bmx6-graph.js
delete mode 100644 luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/js/polling.js
delete mode 100644 luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/link.png
delete mode 100644 luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/style.css
delete mode 100644 luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/wifi.png
delete mode 100644 luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/world.png
delete mode 100644 luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/world_small.png
delete mode 100644 luci-app-bmx6/dracula/dracula_graffle.js
delete mode 100644 luci-app-bmx6/dracula/dracula_graph.js
delete mode 100644 luci-app-bmx6/dracula/raphael-min.js
delete mode 100644 luci-app-bmx6/jquery/jquery-1.4.js
diff --git a/luci-app-bmx6/COPYING b/luci-app-bmx6/COPYING
deleted file mode 100644
index d511905..0000000
--- a/luci-app-bmx6/COPYING
+++ /dev/null
@@ -1,339 +0,0 @@
- 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.
-
-
- Copyright (C)
-
- 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.
-
- , 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.
diff --git a/luci-app-bmx6/Makefile b/luci-app-bmx6/Makefile
deleted file mode 100644
index 6ee9390..0000000
--- a/luci-app-bmx6/Makefile
+++ /dev/null
@@ -1,99 +0,0 @@
-# Copyright (C) 2011 Pau Escrich
-#
-# 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.
-#
-# The full GNU General Public License is included in this distribution in
-# the file called "COPYING".
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=luci-app-bmx6
-PKG_RELEASE:=6
-
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
-PKG_LICENSE:=GPL-2.0+
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/luci-app-bmx6
- SECTION:=luci
- CATEGORY:=LuCI
- SUBMENU:=3. Applications
- TITLE:= bmx6 configuration, status and visualization module
- DEPENDS:=+luci-lib-json +luci-base +luci-lib-httpclient +bmx6 +luci-lib-jquery-1-4 +luci-lib-dracula
- MAINTAINER:= Pau Escrich
-endef
-
-define Package/luci-lib-jquery-1-4
- SECTION:=luci
- CATEGORY:=LuCI
- TITLE:=LuCI - Lua Configuration Interface
- MAINTAINER:=Gui Iribarren
- SUBMENU:=6. Libraries
- TITLE:=jQuery 1.4 javascript library
-endef
-
-define Package/luci-lib-dracula
- SECTION:=luci
- CATEGORY:=LuCI
- TITLE:=LuCI - Lua Configuration Interface
- MAINTAINER:=Pau Escrich
- SUBMENU:=6. Libraries
- TITLE:=dracula graph javascript library
-endef
-
-define Package/luci-app-bmx6/description
- bmx6 web application (status and configuration) for LuCi web interface
-endef
-
-define Package/luci-lib-jquery-1-4/description
- minified javascript jQuery 1.4 library
-endef
-
-define Package/luci-lib-dracula-graph/description
- minified dracula javascript graph library
-endef
-
-define Package/luci-app-bmx6/conffiles
- /etc/config/luci-bmx6
-endef
-
-define Build/Prepare
-endef
-
-define Build/Configure
-endef
-
-define Build/Compile
-endef
-
-define Package/luci-app-bmx6/install
- $(CP) ./bmx6/* $(1)/
- chmod 755 $(1)/www/cgi-bin/bmx6-info
-endef
-
-define Package/luci-lib-jquery-1-4/install
- $(INSTALL_DIR) $(1)/www/luci-static/resources/jquery/
- $(CP) ./jquery/* $(1)/www/luci-static/resources/jquery/
-endef
-
-define Package/luci-lib-dracula/install
- $(INSTALL_DIR) $(1)/www/luci-static/resources/dracula
- $(CP) ./dracula/* $(1)/www/luci-static/resources/dracula/
-endef
-
-$(eval $(call BuildPackage,luci-app-bmx6))
-$(eval $(call BuildPackage,luci-lib-jquery-1-4))
-$(eval $(call BuildPackage,luci-lib-dracula))
diff --git a/luci-app-bmx6/bmx6/etc/config/luci-bmx6 b/luci-app-bmx6/bmx6/etc/config/luci-bmx6
deleted file mode 100644
index df1e715..0000000
--- a/luci-app-bmx6/bmx6/etc/config/luci-bmx6
+++ /dev/null
@@ -1,7 +0,0 @@
-config 'bmx6' 'luci'
- option ignore '0'
- option place 'admin network BMX6'
- #option place 'qmp Mesh'
- option position '3'
- #option json 'http://127.0.0.1/cgi-bin/bmx6-info?'
- option json 'exec:/www/cgi-bin/bmx6-info -s'
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/controller/bmx6.lua b/luci-app-bmx6/bmx6/usr/lib/lua/luci/controller/bmx6.lua
deleted file mode 100644
index 5842fc9..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/controller/bmx6.lua
+++ /dev/null
@@ -1,277 +0,0 @@
---[[
- Copyright (C) 2011 Pau Escrich
- Contributors Jo-Philipp Wich
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
---]]
-
-local bmx6json = require("luci.model.bmx6json")
-
-module("luci.controller.bmx6", package.seeall)
-
-function index()
- local place = {}
- local ucim = require "luci.model.uci"
- local uci = ucim.cursor()
-
- -- checking if ignore is on
- if uci:get("luci-bmx6","luci","ignore") == "1" then
- return nil
- end
-
- -- getting value from uci database
- local uci_place = uci:get("luci-bmx6","luci","place")
-
- -- default values
- if uci_place == nil then
- place = {"bmx6"}
- else
- local util = require "luci.util"
- place = util.split(uci_place," ")
- end
-
- -- getting position of menu
- local uci_position = uci:get("luci-bmx6","luci","position")
-
- ---------------------------
- -- Starting with the pages
- ---------------------------
-
- --- status (default)
- entry(place,call("action_nodes_j"),place[#place],tonumber(uci_position))
-
- table.insert(place,"Status")
- entry(place,call("action_status_j"),"Status",0)
- table.remove(place)
-
- --- nodes
- table.insert(place,"Nodes")
- entry(place,call("action_nodes_j"),"Nodes",1)
- table.remove(place)
-
- --- links
- table.insert(place,"Links")
- entry(place,call("action_links"),"Links",2).leaf = true
- table.remove(place)
-
- -- Tunnels
- table.insert(place,"Tunnels")
- entry(place,call("action_tunnels_j"), "Tunnels", 3).leaf = true
- table.remove(place)
-
- --- Chat
- table.insert(place,"Chat")
- entry(place,call("action_chat"),"Chat",5)
- table.remove(place)
-
- --- Graph
- table.insert(place,"Graph")
- entry(place, template("bmx6/graph"), "Graph",4)
- table.remove(place)
-
- --- Topology (hidden)
- table.insert(place,"topology")
- entry(place, call("action_topology"), nil)
- table.remove(place)
-
- --- configuration (CBI)
- table.insert(place,"Configuration")
- entry(place, cbi("bmx6/main"), "Configuration",6).dependent=false
-
- table.insert(place,"General")
- entry(place, cbi("bmx6/main"), "General",1)
- table.remove(place)
-
- table.insert(place,"Advanced")
- entry(place, cbi("bmx6/advanced"), "Advanced",5)
- table.remove(place)
-
- table.insert(place,"Interfaces")
- entry(place, cbi("bmx6/interfaces"), "Interfaces",2)
- table.remove(place)
-
- table.insert(place,"Tunnels")
- entry(place, cbi("bmx6/tunnels"), "Tunnels",3)
- table.remove(place)
-
- table.insert(place,"Plugins")
- entry(place, cbi("bmx6/plugins"), "Plugins",6)
- table.remove(place)
-
- table.insert(place,"HNAv6")
- entry(place, cbi("bmx6/hna"), "HNAv6",4)
- table.remove(place)
-
- table.remove(place)
-
-end
-
-function action_status_j()
- luci.template.render("bmx6/status_j", {})
-end
-
-
-function action_nodes_j()
- local http = require "luci.http"
- local link_non_js = "/cgi-bin/luci" .. http.getenv("PATH_INFO") .. '/nodes_nojs'
-
- luci.template.render("bmx6/nodes_j", {link_non_js=link_non_js})
-end
-
-function action_gateways_j()
- luci.template.render("bmx6/gateways_j", {})
-end
-
-function action_tunnels_j()
- luci.template.render("bmx6/tunnels_j", {})
-end
-
-function action_links(host)
- local links = bmx6json.get("links", host)
- local devlinks = {}
- local _,l
-
- if links ~= nil then
- links = links.links
- for _,l in ipairs(links) do
- devlinks[l.viaDev] = {}
- end
- for _,l in ipairs(links) do
- l.name = luci.util.split(l.name,'.')[1]
- table.insert(devlinks[l.viaDev],l)
- end
- end
-
- luci.template.render("bmx6/links", {links=devlinks})
-end
-
-function action_topology()
- local originators = bmx6json.get("originators/all")
- local o,i,l,i2
- local first = true
- local topology = '[ '
- local cache = '/tmp/bmx6-topology.json'
- local offset = 60
-
- local cachefd = io.open(cache,r)
- local update = false
-
- if cachefd ~= nil then
- local lastupdate = tonumber(cachefd:read("*line")) or 0
- if os.time() >= lastupdate + offset then
- update = true
- else
- topology = cachefd:read("*all")
- end
- cachefd:close()
- end
-
- if cachefd == nil or update then
- for i,o in ipairs(originators) do
- local links = bmx6json.get("links",o.primaryIp)
- if links then
- if first then
- first = false
- else
- topology = topology .. ', '
- end
-
- topology = topology .. '{ "name": "%s", "links": [' %o.name
-
- local first2 = true
-
- for i2,l in ipairs(links.links) do
- if first2 then
- first2 = false
- else
- topology = topology .. ', '
- end
- name = l.name or l.llocalIp or "unknown"
- topology = topology .. '{ "name": "%s", "rxRate": %s, "txRate": %s }'
- %{ name, l.rxRate, l.txRate }
-
- end
-
- topology = topology .. ']}'
- end
-
- end
-
- topology = topology .. ' ]'
-
- -- Upgrading the content of the cache file
- cachefd = io.open(cache,'w+')
- cachefd:write(os.time()..'\n')
- cachefd:write(topology)
- cachefd:close()
- end
-
- luci.http.prepare_content("application/json")
- luci.http.write(topology)
-end
-
-
-function action_chat()
- local sms_dir = "/var/run/bmx6/sms"
- local rcvd_dir = sms_dir .. "/rcvdSms"
- local send_file = sms_dir .. "/sendSms/chat"
- local sms_list = bmx6json.get("rcvdSms")
- local sender = ""
- local sms_file = ""
- local chat = {}
- local to_send = nil
- local sent = ""
- local fd = nil
-
- if luci.sys.call("test -d " .. sms_dir) ~= 0 then
- luci.template.render("bmx6/error", {txt="sms plugin disabled or some problem with directory " .. sms_dir})
- return nil
- end
-
- sms_list = luci.util.split(luci.util.exec("ls "..rcvd_dir.."/*:chat"))
-
- for _,sms_path in ipairs(sms_list) do
- if #sms_path > #rcvd_dir then
- sms_file = luci.util.split(sms_path,'/')
- sms_file = sms_file[#sms_file]
- sender = luci.util.split(sms_file,':')[1]
-
- -- Trying to clean the name
- if string.find(sender,".") ~= nil then
- sender = luci.util.split(sender,".")[1]
- end
-
- fd = io.open(sms_path,"r")
- chat[sender] = fd:read()
- fd:close()
- end
- end
-
- to_send = luci.http.formvalue("toSend")
- if to_send ~= nil and #to_send > 1 then
- fd = io.open(send_file,"w")
- fd:write(to_send)
- fd:close()
- sent = to_send
- else
- sent = luci.util.exec("cat "..send_file)
- end
-
- luci.template.render("bmx6/chat", {chat=chat,sent=sent})
-end
-
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/bmx6json.lua b/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/bmx6json.lua
deleted file mode 100644
index a61362b..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/bmx6json.lua
+++ /dev/null
@@ -1,224 +0,0 @@
---[[
- Copyright (C) 2011 Pau Escrich
- Contributors Jo-Philipp Wich
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
---]]
-
-local ltn12 = require("luci.ltn12")
-local json = require("luci.json")
-local util = require("luci.util")
-local uci = require("luci.model.uci")
-local sys = require("luci.sys")
-local template = require("luci.template")
-local http = require("luci.http")
-local string = require("string")
-local table = require("table")
-local nixio = require("nixio")
-local nixiofs = require("nixio.fs")
-local ipairs = ipairs
-
-module "luci.model.bmx6json"
-
--- Returns a LUA object from bmx6 JSON daemon
-
-function get(field, host)
- local url
- if host ~= nil then
- if host:match(":") then
- url = 'http://[%s]/cgi-bin/bmx6-info?' % host
- else
- url = 'http://%s/cgi-bin/bmx6-info?' % host
- end
- else
- url = uci.cursor():get("luci-bmx6","luci","json")
- end
-
- if url == nil then
- print_error("bmx6 json url not configured, cannot fetch bmx6 daemon data",true)
- return nil
- end
-
- local json_url = util.split(url,":")
- local raw = ""
-
- if json_url[1] == "http" then
- raw,err = wget(url..field,1000)
- sys.exec("")
- else
-
- if json_url[1] == "exec" then
- raw = sys.exec(json_url[2]..' '..field)
- else
- print_error("bmx6 json url not recognized, cannot fetch bmx6 daemon data. Use http: or exec:",true)
- return nil
- end
-
- end
-
- local data = nil
-
- if raw and raw:len() > 10 then
- local decoder = json.Decoder()
- ltn12.pump.all(ltn12.source.string(raw), decoder:sink())
- data = decoder:get()
--- else
--- print_error("Cannot get data from bmx6 daemon",true)
--- return nil
- end
-
- return data
-end
-
-function print_error(txt,popup)
- util.perror(txt)
- sys.call("logger -t bmx6json " .. txt)
-
- if popup then
- http.write('')
- else
- http.write("
')
- end
-
-end
-
-function text2html(txt)
- txt = string.gsub(txt,"<","{")
- txt = string.gsub(txt,">","}")
- txt = util.striptags(txt)
- return txt
-end
-
-
-function wget(url, timeout)
- local rfd, wfd = nixio.pipe()
- local pid = nixio.fork()
- if pid == 0 then
- rfd:close()
- nixio.dup(wfd, nixio.stdout)
- -- candidates for wget, try first ones with SSL support
- local candidates = {{"/usr/bin/wget-ssl",1},{"/usr/bin/wget",0},{"/bin/wget",0}}
- local _, bin
- for _, bin in ipairs(candidates) do
- if nixiofs.access(bin[1], "x") then
- if bin[2] == 0 then
- nixio.exec(bin[1], "-q", "-O", "-", url)
- else
- nixio.exec(bin[1], "--no-check-certificate", "-q", "-O", "-", url)
- end
- end
- end
- return
- else
- wfd:close()
- rfd:setblocking(false)
-
- local buffer = { }
- local err1, err2
-
- while true do
- local ready = nixio.poll({{ fd = rfd, events = nixio.poll_flags("in") }}, timeout)
- if not ready then
- nixio.kill(pid, nixio.const.SIGKILL)
- err1 = "timeout"
- break
- end
-
- local rv = rfd:read(4096)
- if rv then
- -- eof
- if #rv == 0 then
- break
- end
-
- buffer[#buffer+1] = rv
- else
- -- error
- if nixio.errno() ~= nixio.const.EAGAIN and
- nixio.errno() ~= nixio.const.EWOULDBLOCK then
- err1 = "error"
- err2 = nixio.errno()
- end
- end
- end
-
- nixio.waitpid(pid, "nohang")
- if not err1 then
- return table.concat(buffer)
- else
- return nil, err1, err2
- end
- end
-end
-
-function getOptions(name)
- -- Getting json and Checking if bmx6-json is avaiable
- local options = get("options")
- if options == nil or options.OPTIONS == nil then
- m.message = "bmx6-json plugin is not running or some mistake in luci-bmx6 configuration, check /etc/config/luci-bmx6"
- return nil
- else
- options = options.OPTIONS
- end
-
- -- Filtering by the option name
- local i,_
- local namedopt = nil
- if name ~= nil then
- for _,i in ipairs(options) do
- if i.name == name and i.CHILD_OPTIONS ~= nil then
- namedopt = i.CHILD_OPTIONS
- break
- end
- end
- end
-
- return namedopt
-end
-
--- Rturns a help string formated to be used in HTML scope
-function getHtmlHelp(opt)
- if opt == nil then return nil end
-
- local help = ""
- if opt.help ~= nil then
- help = text2html(opt.help)
- end
- if opt.syntax ~= nil then
- help = help .. " Syntax: " .. text2html(opt.syntax)
- end
-
- return help
-end
-
-function testandreload()
- local test = sys.call('bmx6 -c --test > /tmp/bmx6-luci.err.tmp')
- if test ~= 0 then
- return sys.exec("cat /tmp/bmx6-luci.err.tmp")
- end
-
- local err = sys.call('bmx6 -c --configReload > /tmp/bmx6-luci.err.tmp')
- if err ~= 0 then
- return sys.exec("cat /tmp/bmx6-luci.err.tmp")
- end
-
- return nil
-end
-
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/advanced.lua b/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/advanced.lua
deleted file mode 100644
index c254899..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/advanced.lua
+++ /dev/null
@@ -1,75 +0,0 @@
---[[
- Copyright (C) 2011 Pau Escrich
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
---]]
-
-m = Map("bmx6", "bmx6")
-
-local bmx6json = require("luci.model.bmx6json")
-local util = require("luci.util")
-local http = require("luci.http")
-local sys = require("luci.sys")
-
-local options = bmx6json.get("options")
-if options == nil or options.OPTIONS == nil then
- m.message = "bmx6-json plugin is not running or some mistake in luci-bmx6 configuration, check /etc/config/luci-bmx6"
- options = {}
-else
- options = options.OPTIONS
-end
-
-local general = m:section(NamedSection,"general","bmx6")
-general.addremove = true
-
-local name = ""
-local help = ""
-local value = nil
-local _,o
-
-for _,o in ipairs(options) do
- if o.name ~= nil and o.CHILD_OPTIONS == nil and o.configurable == 1 then
- help = ""
- name = o.name
-
- if o.help ~= nil then
- help = bmx6json.text2html(o.help)
- end
-
- if o.syntax ~= nil then
- help = help .. " Syntax: " .. bmx6json.text2html(o.syntax)
- end
-
- if o.def ~= nil then
- help = help .. " Default: " .. o.def
- end
-
- value = general:option(Value,name,name,help)
-
- end
-end
-
-function m.on_commit(self,map)
- local err = sys.call('bmx6 -c --configReload > /tmp/bmx6-luci.err.tmp')
- if err ~= 0 then
- m.message = sys.exec("cat /tmp/bmx6-luci.err.tmp")
- end
-end
-
-return m
-
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/hna.lua b/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/hna.lua
deleted file mode 100644
index db98ae6..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/hna.lua
+++ /dev/null
@@ -1,47 +0,0 @@
---[[
- Copyright (C) 2011 Pau Escrich
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
---]]
-
-local sys = require("luci.sys")
-
-m = Map("bmx6", "bmx6")
-
-local hna = m:section(TypedSection,"unicastHna","IPv6 HNA")
-hna.addremove = true
-hna.anonymous = true
-local hna_option = hna:option(Value,"unicastHna", "IPv6 Host Network Announcement. Syntax /")
-
---function hna_option:validate(value)
--- local err = sys.call('bmx6 -c --test -a ' .. value)
--- if err ~= 0 then
--- return nil
--- end
--- return value
---end
-
-function m.on_commit(self,map)
- local err = sys.call('bmx6 -c --configReload > /tmp/bmx6-luci.err.tmp')
- if err ~= 0 then
- m.message = sys.exec("cat /tmp/bmx6-luci.err.tmp")
- end
-end
-
-return m
-
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/interfaces.lua b/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/interfaces.lua
deleted file mode 100644
index fb1261b..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/interfaces.lua
+++ /dev/null
@@ -1,77 +0,0 @@
---[[
- Copyright (C) 2011 Pau Escrich
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
---]]
-
-local sys = require("luci.sys")
-local bmx6json = require("luci.model.bmx6json")
-local m = Map("bmx6", "bmx6")
-
-local eth_int = sys.net.devices()
-local interfaces = m:section(TypedSection,"dev","Devices","")
-interfaces.addremove = true
-interfaces.anonymous = true
-
-local intlv = interfaces:option(ListValue,"dev","Device")
-
-for _,i in ipairs(eth_int) do
- intlv:value(i,i)
-end
-
--- Getting json and looking for device section
-local json = bmx6json.get("options")
-
-if json == nil or json.OPTIONS == nil then
- m.message = "bmx6-json plugin is not running or some mistake in luci-bmx6 configuration, check /etc/config/luci-bmx6"
- json = {}
-else
- json = json.OPTIONS
-end
-
-local dev = {}
-for _,j in ipairs(json) do
- if j.name == "dev" and j.CHILD_OPTIONS ~= nil then
- dev = j.CHILD_OPTIONS
- break
- end
-end
-
-local help = ""
-local name = ""
-
-for _,o in ipairs(dev) do
- if o.name ~= nil then
- help = ""
- name = o.name
- if o.help ~= nil then
- help = bmx6json.text2html(o.help)
- end
-
- if o.syntax ~= nil then
- help = help .. " Syntax: " .. bmx6json.text2html(o.syntax)
- end
-
- value = interfaces:option(Value,name,name,help)
- value.optional = true
- end
-end
-
-
-return m
-
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/main.lua b/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/main.lua
deleted file mode 100644
index 8ff3520..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/main.lua
+++ /dev/null
@@ -1,105 +0,0 @@
---[[
- Copyright (C) 2011 Pau Escrich
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
---]]
-
-local sys = require("luci.sys")
-local bmx6json = require("luci.model.bmx6json")
-
-m = Map("bmx6", "bmx6")
-
--- Getting json and Checking if bmx6-json is avaiable
-local options = bmx6json.get("options")
-if options == nil or options.OPTIONS == nil then
- m.message = "bmx6-json plugin is not running or some mistake in luci-bmx6 configuration, check /etc/config/luci-bmx6"
- return m
-else
- options = options.OPTIONS
-end
-
--- Getting a list of interfaces
-local eth_int = luci.sys.net.devices()
-
-local tunDev = m:section(TypedSection,"tunDev",translate("Tunnel device"),translate("Define incoming ipip tunnel interface name"))
-tunDev.addremove = true
-tunDev.anonymous = true
-tunDev:option(Value,"tunDev",translate("Name"),translate("Name for the tunnel network device"))
-tunDev:option(Value,"tun4Address", translate("IPv4 address/length"),translate("Specify default IPv4 tunnel address and announced range (ex. 10.1.2.3/24)"))
-tunDev:option(Value,"tun6Address", translate("IPv6 address/length"),translate("Specify default IPv6 tunnel address and announced range (ex. 2012:0:0:123:0:0:0:1/64)"))
-
--- IP section
-local ipV = m:section(NamedSection,"ipVersion","ipVersion",translate("Miscellaneous IP options"))
-ipV.addremove = false
-local lipv = ipV:option(ListValue,"ipVersion",translate("IP version"))
-lipv:value("6","6")
-lipv.default = "6"
-
--- rest of ip options are optional, getting them from json
-local ipoptions = {}
-for _,o in ipairs(options) do
- if o.name == "ipVersion" and o.CHILD_OPTIONS ~= nil then
- ipoptions = o.CHILD_OPTIONS
- break
- end
-end
-
-local help = ""
-local name = ""
-local value = nil
-
-for _,o in ipairs(ipoptions) do
- if o.name ~= nil then
- help = ""
- name = o.name
- if o.help ~= nil then
- help = bmx6json.text2html(o.help)
- end
-
- if o.syntax ~= nil then
- help = help .. " Syntax: " .. bmx6json.text2html(o.syntax)
- end
-
- if o.def ~= nil then
- help = help .. " Default: " .. bmx6json.text2html(o.def)
- end
-
- value = ipV:option(Value,name,name,help)
- value.optional = true
- end
-end
-
--- Interfaces section
-local interfaces = m:section(TypedSection,"dev",translate("Devices"),translate("Network devices to mesh with"))
-interfaces.addremove = true
-interfaces.anonymous = true
-local intlv = interfaces:option(ListValue,"dev",translate("Device"))
-
-for _,i in ipairs(eth_int) do
- intlv:value(i,i)
-end
-
-function m.on_commit(self,map)
- local err = sys.call('bmx6 -c --configReload > /tmp/bmx6-luci.err.tmp')
- if err ~= 0 then
- m.message = sys.exec("cat /tmp/bmx6-luci.err.tmp")
- end
-end
-
-return m
-
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/plugins.lua b/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/plugins.lua
deleted file mode 100644
index 518864e..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/plugins.lua
+++ /dev/null
@@ -1,50 +0,0 @@
---[[
- Copyright (C) 2011 Pau Escrich
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
---]]
-local sys = require("luci.sys")
-
-m = Map("bmx6", "bmx6")
-plugins_dir = {"/usr/lib/","/var/lib","/lib"}
-
-plugin = m:section(TypedSection,"plugin","Plugin")
-plugin.addremove = true
-plugin.anonymous = true
-plv = plugin:option(ListValue,"plugin", "Plugin")
-
-for _,d in ipairs(plugins_dir) do
- pl = luci.sys.exec("cd "..d..";ls bmx6_*")
- if #pl > 6 then
- for _,v in ipairs(luci.util.split(pl,"\n")) do
- plv:value(v,v)
- end
- end
-end
-
-
-function m.on_commit(self,map)
- local err = sys.call('/etc/init.d/bmx6 restart')
- if err ~= 0 then
- m.message = sys.exec("Cannot restart bmx6")
- end
-end
-
-
-return m
-
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/tunnels.lua b/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/tunnels.lua
deleted file mode 100644
index 92b14fc..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/model/cbi/bmx6/tunnels.lua
+++ /dev/null
@@ -1,70 +0,0 @@
---[[
- Copyright (C) 2011 Pau Escrich
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
---]]
-
-local sys = require("luci.sys")
-local bmx6json = require("luci.model.bmx6json")
-
-m = Map("bmx6", "bmx6")
-
--- tunOut
-local tunnelsOut = m:section(TypedSection,"tunOut",translate("Networks to fetch"),translate("Gateways announcements to fetch"))
-tunnelsOut.addremove = true
-tunnelsOut.anonymous = true
-tunnelsOut:option(Value,"tunOut","Name")
-tunnelsOut:option(Value,"network", translate("Network to fetch"))
-
-local tunoptions = bmx6json.getOptions("tunOut")
-local _,o
-for _,o in ipairs(tunoptions) do
- if o.name ~= nil and o.name ~= "network" then
- help = bmx6json.getHtmlHelp(o)
- value = tunnelsOut:option(Value,o.name,o.name,help)
- value.optional = true
- end
-end
-
-
--- tunOut
-local tunnelsIn = m:section(TypedSection,"tunIn",translate("Networks to offer"),translate("Gateways to announce in the network"))
-tunnelsIn.addremove = true
-tunnelsIn.anonymous = true
-tunnelsIn:option(Value,"tunIn","Name")
-tunnelsIn:option(Value,"network", translate("Network to offer"))
-
-local tunInoptions = bmx6json.getOptions("tunIn")
-local _,o
-for _,o in ipairs(tunInoptions) do
- if o.name ~= nil and o.name ~= "network" then
- help = bmx6json.getHtmlHelp(o)
- value = tunnelsIn:option(Value,o.name,o.name,help)
- value.optional = true
- end
-end
-
-function m.on_commit(self,map)
- --Not working. If test returns error the changes are still commited
- local msg = bmx6json.testandreload()
- if msg ~= nil then
- m.message = msg
- end
-end
-
-return m
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/admin_status/index/neighbours_simple.htm b/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/admin_status/index/neighbours_simple.htm
deleted file mode 100644
index 07412b7..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/admin_status/index/neighbours_simple.htm
+++ /dev/null
@@ -1,108 +0,0 @@
-
-
-
This is sms a chat where all bmx6 nodes can participate. The data is replayed using routing packets, so there is a limit of 2040 bytes. Use it only to send short messages.
-
Each participant can only send one sms at same time.
-
-
-Received SMS
-
-
-<% for orig,sms in pairs(chat) do %>
- <%=orig%>:<%=sms%>
-<% end %>
-
-
-<%+footer%>
-
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/graph.htm b/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/graph.htm
deleted file mode 100644
index 0655302..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/graph.htm
+++ /dev/null
@@ -1,49 +0,0 @@
-<%#
-Copyright (C) 2011 Pau Escrich
-Contributors Jo-Philip
-
-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.
-
-The full GNU General Public License is included in this distribution in
-the file called "COPYING".
--%>
-
-<%
- luci.http.prepare_content("text/html")
-
- local location = { unpack(luci.dispatcher.context.path) }
- location[#location] = "topology"
-%>
-
-<%+header%>
-
-
-
-
Rate (rx/tx):
- <% if l.rxRate+l.txRate < 120 then %>
-
- <% else %>
-
- <% end %>
- <%=l.rxRate%>/<%=l.txRate%>
-
-
-
Routes: <%=l.routes%>
-
-
-
-
-
-<% end %>
-
-<% end %>
-
-
-
-
-<%+footer%>
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/nodes_j.htm b/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/nodes_j.htm
deleted file mode 100644
index 6a43e2d..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/nodes_j.htm
+++ /dev/null
@@ -1,204 +0,0 @@
-<%#
- Copyright (C) 2011 Pau Escrich
- Contributors Lluis Esquerda
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
--%>
-
-<%+header%>
-
-
-
-
-
-
-
-
-
-a mesh routing protocol for Linux devices.
-Visit bmx6.net for more info.
-
-
-
-
-
status
-
-
-
-
-
-
-
-<%+footer%>
-
diff --git a/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/tunnels_j.htm b/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/tunnels_j.htm
deleted file mode 100644
index 244d04f..0000000
--- a/luci-app-bmx6/bmx6/usr/lib/lua/luci/view/bmx6/tunnels_j.htm
+++ /dev/null
@@ -1,106 +0,0 @@
-<%#
- Copyright (C) 2011 Pau Escrich
- Contributors Lluis Esquerda
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
--%>
-
-
-<%+header%>
-
-
-
-
-
-
-
-
Gateways tunnel announcements
-
-
-
-
-
-
-
-<%+footer%>
-
diff --git a/luci-app-bmx6/bmx6/www/cgi-bin/bmx6-info b/luci-app-bmx6/bmx6/www/cgi-bin/bmx6-info
deleted file mode 100755
index 8f5555e..0000000
--- a/luci-app-bmx6/bmx6/www/cgi-bin/bmx6-info
+++ /dev/null
@@ -1,126 +0,0 @@
-#!/bin/sh
-# This script gives information about bmx6
-# Can be executed from a linux shell: ./bmx6-info -s links
-# Or from web interfae (with cgi enabled): http://host/cgi-bin/bmx6-info?links
-# Special methods are tagged with '$', like $myself or $neighbours: http://host/cgi-bin/bmx6-info?$myself
-# When '$' is not used, raw bmx6 information from the filesystem is returned (/var/runb/bmx6/json/)
-
-BMX6_DIR="$(uci get bmx6.general.runtimeDir 2>/dev/null)" || BMX6_DIR="/var/run/bmx6/json"
-
-#Checking if shell mode or cgi-bin mode
-if [ "$1" == "-s" ]; then
- QUERY="$2"
-else
- QUERY="${QUERY_STRING%%=*}"
- QUERY="${QUERY%%\?*}"
- QUERY="${QUERY%%\&*}"
- echo "Content-type: application/json"
- echo ""
-fi
-
-# workaround to support old format starting with '$'
-QUERY="$(echo "$QUERY" | sed s/'\$'//)"
-
-check_path() {
- [ -d "$1" ] && path=$(cd $1; pwd)
- [ -f "$1" ] && path=$(cd $1/..; pwd)
- [ $(echo "$path" | grep -c "^$BMX6_DIR") -ne 1 ] && exit 1
-}
-
-print_query() {
- # If the query is a directory
- [ -d "$BMX6_DIR/$1" ] &&
- {
- # If /all has not been specified
- [ -z "$QALL" ] &&
- {
- total=$(ls $BMX6_DIR/$1 | wc -w)
- i=1
- echo -n "{ \"$1\": [ "
- for f in $(ls $BMX6_DIR/$1); do
- echo -n "{ \"name\": \"$f\" }"
- [ $i -lt $total ] && echo -n ','
- i=$(( $i + 1 ))
- done
- echo -n " ] }"
-
- # If /all has been specified, printing all the files together
- } || {
- comma=""
- echo -n "[ "
- for entry in "$BMX6_DIR/$1/"*; do
- [ -f "$entry" ] &&
- {
- ${comma:+echo -n "$comma"}
- tr -d '\n' < "$entry"
- comma=","
- }
- done
- echo -n " ]"
- }
- }
- # If the query is a file, just printing the file
- [ -f "$BMX6_DIR/$1" ] && cat "$BMX6_DIR/$1";
-}
-
-if [ "${QUERY##*/}" == "all" ]; then
- QUERY="${QUERY%/all}"
- QALL=1
-fi
-
-if [ "$QUERY" == 'myself' ]; then
- hostname="$(cat /proc/sys/kernel/hostname)"
- ip6="$(bmx6 -c show=status | grep ^BMX | awk '{print $5}')"
- ip4="$(bmx6 -c show=status | grep ^BMX | awk '{print $6}')"
- cidr6=$(lua -l luci.ip -e "ip=luci.ip.new(\"$ip6\"); print(ip:network():string()..'/'..ip:prefix())")
- cidr4=$(lua -l luci.ip -e "ip=luci.ip.new(\"$ip4\"); print(ip:network():string()..'/'..ip:prefix())")
- echo -n "{\"myself\":{\"hostname\":\"$hostname\",\"ip6\":\"$ip6\",\"ip4\":\"$ip4\",\"net6\":\"$cidr6\",\"net4\":\"$cidr4\"}}"
- exit 0
-fi
-
-if [ "$QUERY" == 'info' ]; then
- echo -n '{ "info": [ '
- print_query status
- echo -n ","
- print_query interfaces
- echo -n "] }"
- exit 0
-fi
-
-if [ "$QUERY" == 'neighbours' ]; then
- QALL=1
- echo -n '{ "neighbours": [ '
- echo -n '{ "originators": '
- print_query originators
- echo -n '}, '
- echo -n '{ "descriptions": '
- print_query descriptions
- echo -n "} ] }"
- exit 0
-fi
-
-if [ "$QUERY" == 'tunnels' ]; then
- tunnels=$(bmx6 -c --jshow tunnels /r=0)
- if [ -z "$tunnels" ]; then
- echo '{ "tunnels" : [] }'
- else
- echo $tunnels
- fi
- exit 0
-fi
-
-if [ "$QUERY" == "" ]; then
- echo -n '{ "queries": ['
- echo -n '{ "name": "myself", "info": "basic network information of self node" },'
- echo -n '{ "name": "info", "info": "full network and device information of self node" },'
- echo -n '{ "name": "tunnels", "info": "accnouncements (tunnels) published by the mesh network" },'
- echo -n '{ "name": "neighbours", "info": "list of all my neighbours and their information" },'
- echo -n '{ "name": "/", "info": "raw bmx6 json API" }]}'
- exit 0
-fi
-
-check_path "$BMX6_DIR/$QUERY"
-print_query $QUERY
-
-#ls -1F "$BMX6_DIR"
-exit 0
diff --git a/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/bmx6logo.png b/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/bmx6logo.png
deleted file mode 100644
index 12f752624ec550c23ad914ed6a78b7bd45483483..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 4986
zcmV-=6NT)FP)Fxv=K#|25cTkVuI1`6q
ziDCqyl_WSKFd&Gs9A#V&s3Qm{dW3){iV;mZKtM1sg5!cCIOsT{0zn`~L|LRe9nxJ(
z*ZO|*$9+X!y}GZus+TNh_@47lcisE$@BZq&-~HX+c1u*17xDia&aP(QMeKUKCo8v7w-a|Uc^p@xGoP@tGv?l0*wNR1myFiRJA;-42YZ#TKGVB$^cH|P
z5cQ&G&36=$0ooG)fC1nfU{FLp3w%>mOEbvJfxst#Q##=1QW1IAO!6^Pcy{&QWxD2+
zj&_t2JUB||TS%lMF9elbPLngutcVO^grJT`Fe~uD4#<>%wZMg{Iz9y+4)uBHWKJ6o
z`>E>4G-ym88zi>9+<(4^ehQcu=YKlkL}-?lYbCc~CktkDW~95j=mFiY0=
zK#RUjM0*RZuJ70B2I&*ht<3l3fO@^7r{wf%Z#8T7m
z*o4V59N}B#hho$?06E}Jj0N>KtO78Ci4D98I0BQWxMh}ko)jYT5#VSV1wesO;N-EP
zx$``g8wqJ{fzM4>0HAfmaCa1fjlffNLrqo3MdS>O>Ypt5Gy=R$1BodSS%%sFcNs+F
z%@{Y=W(ORrs^eor{kH-8hekfwliPavOz;rt9jH>XweL!(>Xxvj?teZ5Xyp@^fcI!9
zGpVX0s`|4TXS7ZD;qyCa7JvfA{d{PAsQ)9t@uB`2a2jW7WhVG&T
zd$3NcgmF1{iksIid|Tvf>~_FXRV`)L_w)|u@aiOAmrZv_?s2LaCk
z_xkrgpsHERnEAjVq2`)@e@D+qM7l6x3^&wO0KTrOch>Jj`_8gZc%o7y~iaE*vu4qR!QS47?qd^MjIEo06w;jL7IxH7WN#Wc#H)H|C@dC{L+I{1
z0KB+^!&oc}L;WMD{#bDCEG1>*z~FE$iYakjMv6uHgAv1c98xJB%H{Mm0CVTcfz>LX
z1CCQA?RnHZkCZBos?i*dL&b3@I}Ry8RC!8-RhbOe4G(KH10wGL*3qa5D!{(Lmoe^9
zchvX*3c$~ScdBaDr=7&8-nY}d`fSK!V)q}euW}LD2eU1Ot@r})epPKN*d!w7V2r`=
zci9HKLRE+B4Srl8>=uG>q^h$`R6l{}Nwj@rK(-=WQOG7&?S1Ccg{EHDW$VNQeZgwu
zcpQ>RewRwIq*UTk5zeeup;964wc#^}Kr9CFI0eT+9fyx+vwDsFUO5i)qJj@ufgb~J
zp?U9Yg#sq)_in#}=@*#jaVIqLz@4gka)8IBn8;$7P7Zjrs{XkZK@oWq#$dJC0mrE7
zef5U%4ZZWVk{HI=ML{U=BaHS7qm1z~CaVd3%n^>CvwZ8L!Ny1zQ3SVK=6^ho(&nKyKCvZ#Y|<>4jA8Jhl`!el5+>Vc(=Hj{
zXc75mOc6*}0NSD90?S0?1v@}h@4{p;^PzjYfICGbK?Fpk9}~@vN(|lCaDO%aa+(DI
z%riOK|7Vk`UV!M)>eLSC-8|aWJ8xc>c+SBJ9{~P0f}NLp%CEMs9az#p*mc=9F~PjB
zCP<~ATBTen89!A7l1a+G%1>id{&PT|2uaVQ;CVQe3SD7sAp)rs#aN8T^LgH^suMf<
z(i@0_yX_@@HOD~0UC#4f-!SK
zG^&_@&GG=B34i`Yp?eF!H&pff5D$omgE2hcK%>830)D2d$A-s@4-KqT8Z(*!+#@(&
z>RB;zmsx7j7#r$88@L*~Ky8Eg8+%v$?N1OP1R@ZR<5enVmHOL58Mw=FSPN{b8-F4q
z=`{O04vR(jC*ZtF1*cqYo;;nV7>jXFKF@Kg>iG}qc;MSK@3~+E;5)#1w!#h(*&Czs
z4+wST*s=E(Fa;PFs^uV!PvgIVmxj6uz+zQ>GH~w!7;hxJuNQz5RrT%=?JF>~3_*KD
zF+%zZwbVzB5A}aq;q&2kL{I8nK6-0YdkbtI>VLO@eT?Yud*j;r$4|OYCRdr%QpUmg=u3Sz(Cc>eK1dnueQIya|Q!0`6Jl>Yc
z5OjZ{_OT+cMpZv(699kiXMvB=tk&x##A21nM{p
zr&1i4&+8rSOq|W?!}&a~7vaarB%x#vl*^<=xNN}!slOyr2UEp>RaYW>0z!3I$z`3gWU<+QXLQr#Jqb;l)CmLahe18p%T81#MsxfC=Ess=BSsxqcNv
zXd*FP
z>ZsaSAj0c;5K0Gvm&eUQSqjzJVK1tP6Oxrd-wU1n(t@N|OS&7(gR;~h0YRiZV42wmxP
zM=!!MftFNxIvh(-1yzcwEQ**v0d#WswCZ2ep^>9mkXjzTQPt})#i32wE`S2CvYr@f
zi6vUa#4*A%?KSDxR=8L_keh5>g6?G%0{^9rZQG_6hC0T>5do!IwaP;5#;Mmy8aVHe|K0P52$7c8fJRKP1HBCiL&fIS`%L<%@uM9yo6ZbclsYplAzwY^=KB9rFOyUK4Py#voz)12_@f9ltO`rh>jTUwh)nSOlC0b3g$79!mvx%jrnzx*G)#d|KyQpP)qPjIB{y+
z8Wh$J?2Y9-rU!R8m~3DZs#P+;m;6lFlu)bjg<6ebn0_n+a_4
zsZ8p+@&*x3E0>#n?L>kJ5x(Vr+@pj*L_UBy_!|CRS)l%d6<@@Jp@VS;0s3g;_junL**Lf7S?UhkgLqDp5GY*360NpOAeGB>c^+3}GV-QQCd_1HUlG=o%f!N4K_Y>Q
z@aJ6ag)@MAj1Y*(B213nmKi)j)%f^+eBvaUvzuMOaem!oGzPUS!WS$IoS0qT(?2!l
zIWp8T>iLz+Erp;~gGz<8<8Ytr%GV}SWg;T3D`$!Dc(uw)>*?q^90w8!sv?{d2;{Wn
zVRwOuq_Nup1>j4njaI#1GdPGn+jy;CdLD_M<)haK5;hW(HBE(&rca9OO#_DrFXU=`
z$S3PbsmNeaI&JC!DixfG2@;;izq&44Tvx7kT{*L-N8akXvXAS^Vcp$wN_V$h>bm?M
z_-d&{SG^+Xg((HnX-dE)*=)m+u-#q&d|ZdAunr1#6;mmEiEV(Y{sdDI6&8fLebB6iC-X#pYMDOjH
zH}8YNds>}J{-xt^YgZSgxL;9MtwOns6pOfp0-1asDHKQ-i*%RE#44fmi(i*mOQk3Q
z=jQYJ!KR6Ja~DxWUWzGCv)KXf^(&Ji;g`QJqdCds0`K=r?jzB=eDp_xb0Wt3sAIn1
z{bX!?|Hrp}YhaFT+;iXE%N<)ca1-d2>{#qWJ#*(D#nR0U@q#!Yu~=i-qVLChxtyNj
zx-yhZa&02Pf@+nnTFqz%8~l??I1V@t)kFdX{!4@lvRQpN;(PA40^s8gn(crIOmXSm
zmiwEas(%rYf1&yKnG38Fk;STNP4xowtQh{m*wDZcpldLPSOMZFmnG8r$?Ze^w+lR~
zs(%xQ#VBt~$K)_}2=2I|m&{!;YSlb(Rlc80@~Uu$2)6^|^ZEl3ImmTckw`F@Nboiw
zsY+QD52M;V#~~&{7x26)n=vu)ujg|5&?L{u!$@kd1gcZPsQP2-G=%2Vayv9ML?edz
zA*-Oz?_i2pKH3R!RlQ9_ZUj!Iacjt6j@6%R9q6NX#mH}1Er*SF_x+oiAFf*Hcg+!V
zpcfGd=Q1Zy*2I#DOS%W2jr`R(=``CaA~DxxG3E%`fC&AnjCmf9rqevyY5Li>x|h*t
zpKMXpwyT07XgsbR{0O!G!%^>~Q2 0 && txRate > 0) {
- linkQuality = ( rxRate + txRate ) / 2;
-
- graph.addEdge(node.name, neighbourNode.name, {
- 'label': rxRate + '/' + txRate,
- 'directed': false,
- 'stroke': interpolateColor('FF0000','00FF00', 5, 5 * ( linkQuality - 1 )/100),
- 'fill': interpolateColor('FF0000','00FF00', 5, 5 * ( linkQuality - 1 )/100),
- 'label-style': { 'font-size': 8 }
- });
-
- seen[seenKey] = true;
- }
- }
- }
-
- redraw();
-}
diff --git a/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/js/polling.js b/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/js/polling.js
deleted file mode 100644
index 8f81443..0000000
--- a/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/js/polling.js
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- Copyright (C) 2011 Pau Escrich
- Contributors Lluis Esquerda
-
- 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.
-
- The full GNU General Public License is included in this distribution in
- the file called "COPYING".
-*/
-
-
-/*
- Table pooler is a function to easy call XHR poller.
-
- new TablePooler(5,"/cgi-bin/bmx6-info", {'status':''}, "status_table", function(st){
- var table = Array()
- table.push(st.first,st.second)
- return table
- }
- Parameters are:
- polling_time: time between pollings
- json_url: the json url to fetch the data
- json_call: the json call
- output_table_id: the table where javascript will put the data
- callback_function: the function that will be executed each polling_time
-
- The callback_function must return an array of arrays (matrix).
- In the code st is the data obtained from the json call
-*/
-
- function TablePooler (time, jsonurl, getparams, table_id, callback) {
- this.table = document.getElementById(table_id);
- this.callback = callback;
- this.jsonurl = jsonurl;
- this.getparams = getparams;
- this.time = time;
-
- this.clear = function(){
- /* clear all rows */
- while( this.table.rows.length > 1 ) this.table.deleteRow(1);
- }
- this.start = function(){
- XHR.poll(this.time, this.jsonurl, this.getparams, function(x, st){
- var data = this.callback(st);
- var content, tr, td;
- this.clear();
- for (var i = 0; i < data.length; i++){
- tr = this.table.insertRow(-1);
- tr.className = 'cbi-section-table-row cbi-rowstyle-' + ((i % 2) + 1);
-
- for (var j = 0; j < data[i].length; j++){
- td = tr.insertCell(-1);
- if (data[i][j].length == 2) {
- td.colSpan = data[i][j][1];
- content = data[i][j][0];
- }
- else content = data[i][j];
- td.innerHTML = content;
- }
- }
- }.bind(this));
- }
-
-
- this.start();
- }
-
-
-
diff --git a/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/link.png b/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/link.png
deleted file mode 100644
index 58977ffbb2f76f4fa7eab89c4d833c024c4a9da3..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 2910
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
IM6N<$g2srGw*UYD
diff --git a/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/style.css b/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/style.css
deleted file mode 100644
index d8191a7..0000000
--- a/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/style.css
+++ /dev/null
@@ -1,22 +0,0 @@
- table {
- width:90%;
- border-top:1px solid #e5eaf8;
- border-right:1px solid #e5eaf8;
- margin:1em auto;
- border-collapse:collapse;
- }
-
- td {
- color:#678197;
- border-bottom:1px solid #e6eff8;
- border-left:1px solid #e6eff8;
- padding:.3em 1em;
- text-align:center;
- }
- th {
- background:#f4f9fe;
- text-align:center;
- font:bold 1.2em/2em Century Gothic,Trebuchet MS,Arial,Helvetica,sans-serif;
- color:#66a3d3;
- }
-
diff --git a/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/wifi.png b/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/wifi.png
deleted file mode 100644
index 4195b0872f4813e5bf5911b3b8179d29b823c76a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 3551
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
ZVr7ts0F-WxFpc3m7qncN-I?rX?NYW
zDvNH4+EsT|yXXpagStQs5)>5#X#gQoNE`>SlQ_msY>z#@&&@Oc{r|eD5|AKS_Uw*6
z>3#I-J9^I%?osPX<*rwo(xu#TA)CFgwH<`68=)Cu*!k3S9Qcw+W~#evY1~c6___zB
zlr;_A)uuP)`cXdAMUT;O4UIUZh~tPLhIY##>*-q`%(s3#wmUOZ5V`eLdh&Ik_vhB1
zcM|CrYFq8mQg4QooxtftO2-hT6dFnyS|oZxV`$$@p^k
z>czS0Q@I_M-Pc`InS?Hlx(fn28cKmCKpc?FBn63WNCHpcxq{~io-1@bh2w$mns|Z6++2-9
z(v`?3
z9Y6>pg<%-@mZDI|lExz$CDht>Ud9)jef@>>-;`3{7m@h3qkn(8`kR^?@5~pI(rB*{
zh$izZEmX>&?szm@m!{KZqqas6wHX;MGPJv!(#|e)JA-TKBr+K!^d+4#m66M{SPPOs
z?zW>)shxj%m`x2aFZbu
zpUzP1%@Ndm_Us;Dp|Zw>i;ExzNh61*KsP)1orp{itk*hpS`H=}l}*LuTqL(0U7DDX
zrS%$~W)WH%*KchzK0eN|BL~v?SRV47KWK(ZKF;q)x&{9hp9KVxOKBa
zyWK+9H8ipC0uRUYDeNq>RokZB?x2Z*9(d>-?+z$ZAuH7tj6|N12M#bfyUfV`1BeQE
z_x;OcQYjwzMv{rkSIFhkJaqgJ!^3$lUaT@XInC!ctLSD-v0A0E-3DLB_anl%30mt8
zsFcrQ8}lqy7Re@4n6VK0F;kP*Fg2l7-)3)Povy6K^o>QXd~%H_5(Wnc**|uGu|vnH
zH7XQ)Q_L^daGVf#+rzXvlm=3FK)*Qij5;^|2`jNrJ{i*A-OZ&7K
z*I(kZ$t83ngRW^*Dx1vRe1{;6C=cW~b@~J;D?@Kz21}G0-l62gSW)}?Z~q6n-$p-m
zY|M`QDvx|~A20p&k4RUZP(Z`P#pC?>YmD9>GtgINYH9}Cwu$i306UeWuRO%`^<^$!
zo&sl^tf?e@bhy&<@ZOuZBS=J+zkB-eKO7wDX}t3C+qB!;1VKO;`uLuUia^9*V&XG0
zxh@_&`XCz{Yec?_3Vk+LD`f063%4prU+)ry5r@YP5;Q~V8+D#|>@hx{zDiHdR#_uvS3aqR
zdo1
z9qiq^3qOt+=q*yt8q!``Re3!5=?}mC_Q`{#GhdnB<+QwZ=0_)f_2>ipRJge$VSSUJ
zwMpn~q1-yktE0Rcde~y(<8$oY)y=ctdl+wRiGm?~^v0X2q;Jc~BO@>_6Z7kjS(#>@=EbU>XKiGJy!}8yck0-OcRGbq*gKC7ZO+y(TA*j;;Uf
z=_5Ptc{5y?+0-0A_+`HD8Ft>cpEqB9i+Zg=+RR{T5VTv|KRQZpA;*;~moQ9&LRXfx
z^(DS_{4hqbt9Wj5!8?6$cjB&&KD;{Dv(f0R&s3Wx9qMJ5i$H
z2KZrwp_^p8vQ(F=AcAR`7^Xqwx>&l2W(XNOK}mS`%Zsuz3
z@JPcA3+*8AT;H?8AjWZhbOg;Z34;I?$7Jm!QRtED%9u&RjN>?*DCSe%(LFuO{6Ffy
XJC$YshjJ?x00000NkvXXu0mjf;7FEt
diff --git a/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/world_small.png b/luci-app-bmx6/bmx6/www/luci-static/resources/bmx6/world_small.png
deleted file mode 100644
index f5f31056c65084460d38d309afba7a848d37caf0..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 923
zcmV;M17!S(P)SkJX=+>gNTc|mwMr`$#Fi=*>c*`IiVOb*
z7cL4eT!~w8rzqHf+NeZmlaQ%NNSfwh(>x}LnVCDU`UVWzP`IXKfdiobEy>7swr0+Fu!7XW$9o-h=Y{
zJAQD|a7vMx6+;>UY&Shh)he#nBApQsPYA7BM^8Xg%TU~MZvjLBexBa=aDKPWwRd0T
z!OXe{qYAqXlR`dApt?-XZW6RZqH8fs8E0{ROUlFQwb`v&CJHb
zsRB+IVQivET-5;;K>$_+m#Apkbsla;z3+dk$OwSl`_czb<)7(auR0{-8j}-C=v_H#
zb(7P>$M8bI#Qga=6{Ql<@
z`Ft;@hh9KLTkMqU*i|WYO^Vls2ZSP}6xT1FNMCw!kh!tHFpUTyYd3g#6;88*i`AF5tEr(sNDPjwyW~79Xx~X6P(V
zt%WK&H0w1fU6T_z!Oe@uZwn#X3V