mirror of
https://github.com/kenzok8/small-package
synced 2025-01-07 07:06:58 +08:00
update 2023-01-28 01:28:48
This commit is contained in:
parent
36f450ff01
commit
77602a1cf9
35
cpulimit/Makefile
Normal file
35
cpulimit/Makefile
Normal file
@ -0,0 +1,35 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=cpulimit
|
||||
PKG_VERSION:=0.3.2
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/denji/cpulimit/tar.gz/$(PKG_VERSION)?
|
||||
PKG_HASH:=0c61d394407fdd0547b53e6435ecb817d2e3ba914b48aa9f48ccf42c8278d3a6
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
MAKE_PATH:=src
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/cpulimit
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
TITLE:=CPU usage limiter
|
||||
URL:=https://github.com/denji/cpulimit
|
||||
endef
|
||||
|
||||
define Package/cpulimit/description
|
||||
Cpulimit is a tool which limits the CPU usage of a process
|
||||
(expressed in percentage, not in CPU time).
|
||||
endef
|
||||
|
||||
define Package/cpulimit/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/src/cpulimit $(1)/usr/bin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,cpulimit))
|
59
dnsproxy/Makefile
Normal file
59
dnsproxy/Makefile
Normal file
@ -0,0 +1,59 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
#
|
||||
# Copyright (C) 2021 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=dnsproxy
|
||||
PKG_VERSION:=0.46.5
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/AdguardTeam/dnsproxy/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=604b7e78956ec6d6421807e30ff44d87d85f10203b3d68d397af34ca2013e696
|
||||
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
PKG_BUILD_DEPENDS:=golang/host
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
GO_PKG:=github.com/AdguardTeam/dnsproxy
|
||||
GO_PKG_LDFLAGS_X:=main.VersionString=v$(PKG_VERSION)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
||||
|
||||
define Package/dnsproxy
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=IP Addresses and Names
|
||||
TITLE:=Simple DNS proxy with DoH, DoT, DoQ and DNSCrypt support
|
||||
URL:=https://github.com/AdguardTeam/dnsproxy
|
||||
DEPENDS:=$(GO_ARCH_DEPENDS) +ca-bundle
|
||||
USERID:=dnsproxy=411:dnsproxy=411
|
||||
endef
|
||||
|
||||
define Package/dnsproxy/description
|
||||
A simple DNS proxy server that supports all existing DNS protocols including
|
||||
DNS-over-TLS, DNS-over-HTTPS, DNSCrypt, and DNS-over-QUIC.Moreover, it can
|
||||
work as a DNS-over-HTTPS, DNS-over-TLS or DNS-over-QUIC server.
|
||||
endef
|
||||
|
||||
define Package/dnsproxy/install
|
||||
$(call GoPackage/Package/Install/Bin,$(1))
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/config/
|
||||
$(INSTALL_CONF) $(CURDIR)/files/dnsproxy.config $(1)/etc/config/dnsproxy
|
||||
$(INSTALL_DIR) $(1)/etc/init.d/
|
||||
$(INSTALL_BIN) $(CURDIR)/files/dnsproxy.init $(1)/etc/init.d/dnsproxy
|
||||
endef
|
||||
|
||||
define Package/dnsproxy/conffiles
|
||||
/etc/config/dnsproxy
|
||||
endef
|
||||
|
||||
$(eval $(call GoBinPackage,dnsproxy))
|
||||
$(eval $(call BuildPackage,dnsproxy))
|
41
dnsproxy/files/dnsproxy.config
Normal file
41
dnsproxy/files/dnsproxy.config
Normal file
@ -0,0 +1,41 @@
|
||||
|
||||
# For documents, please see https://github.com/AdguardTeam/dnsproxy#usage
|
||||
|
||||
config dnsproxy 'global'
|
||||
option enabled '0'
|
||||
option listen_addr '127.0.0.1'
|
||||
option listen_port '5353'
|
||||
option log_file ''
|
||||
option all_servers '0'
|
||||
option fastest_addr '0'
|
||||
option insecure '0'
|
||||
option ipv6_disabled '0'
|
||||
option max_go_routines ''
|
||||
option rate_limit ''
|
||||
option refuse_any '0'
|
||||
option udp_buf_size ''
|
||||
option verbose '0'
|
||||
|
||||
config dnsproxy 'bogus_nxdomain'
|
||||
list ip_addr ''
|
||||
|
||||
config dnsproxy 'cache'
|
||||
option enabled '0'
|
||||
option cache_optimistic '0'
|
||||
option size '65535'
|
||||
option min_ttl ''
|
||||
option max_ttl ''
|
||||
|
||||
config dnsproxy 'dns64'
|
||||
option enabled '0'
|
||||
option dns64_prefix '64:ff9b::'
|
||||
|
||||
config dnsproxy 'edns'
|
||||
option enabled '0'
|
||||
option edns_addr ''
|
||||
|
||||
config dnsproxy 'servers'
|
||||
list bootstrap 'tls://8.8.8.8'
|
||||
list fallback 'tls://9.9.9.9'
|
||||
list upstream 'tls://1.1.1.1'
|
||||
|
115
dnsproxy/files/dnsproxy.init
Normal file
115
dnsproxy/files/dnsproxy.init
Normal file
@ -0,0 +1,115 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2021 Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
USE_PROCD=1
|
||||
START=90
|
||||
|
||||
CONF="dnsproxy"
|
||||
PROG="/usr/bin/dnsproxy"
|
||||
|
||||
is_enabled() {
|
||||
local enabled
|
||||
config_get enabled "$1" "$2" "0"
|
||||
if [ "$enabled" -eq "1" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
is_empty() {
|
||||
local empty
|
||||
config_get empty "$1" "$2" $3
|
||||
if [ -z "$empty" ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
append_param() {
|
||||
procd_append_param command "$1" $2
|
||||
}
|
||||
|
||||
append_param_arg() {
|
||||
local value
|
||||
config_get value "$1" "$2" $4
|
||||
[ -n "$value" ] && append_param "$3" "$value"
|
||||
}
|
||||
|
||||
append_param_bool() {
|
||||
is_enabled "$1" "$2" && append_param "--${2//_/-}"
|
||||
}
|
||||
|
||||
load_config_arg() {
|
||||
append_param_bool "$1" "all_servers"
|
||||
append_param_bool "$1" "fastest_addr"
|
||||
append_param_bool "$1" "insecure"
|
||||
append_param_bool "$1" "ipv6_disabled"
|
||||
append_param_bool "$1" "refuse_any"
|
||||
append_param_bool "$1" "verbose"
|
||||
}
|
||||
|
||||
load_config_list() {
|
||||
is_empty "bogus_nxdomain" "ip_addr" || config_list_foreach "bogus_nxdomain" "ip_addr" "append_param '--bogus-nxdomain'"
|
||||
|
||||
for i in "bootstrap" "fallback" "upstream"; do
|
||||
is_empty "servers" "$i" || config_list_foreach "servers" "$i" "append_param '--$i'"
|
||||
done
|
||||
}
|
||||
|
||||
load_config_param() {
|
||||
append_param_arg "global" "listen_addr" "--listen" "127.0.0.1"
|
||||
append_param_arg "global" "listen_port" "--port" "5353"
|
||||
append_param_arg "global" "log_file" "--output"
|
||||
append_param_arg "global" "max_go_routines" "--max-go-routines"
|
||||
append_param_arg "global" "rate_limit" "--ratelimit"
|
||||
append_param_arg "global" "udp_buf_size" "--udp-buf-size"
|
||||
|
||||
is_enabled "cache" "enabled" && {
|
||||
append_param "--cache"
|
||||
append_param_bool "cache" "cache_optimistic"
|
||||
append_param_arg "cache" "size" "--cache-size"
|
||||
append_param_arg "cache" "min_ttl" "--cache-min-ttl"
|
||||
append_param_arg "cache" "max_ttl" "--cache-max-ttl"
|
||||
}
|
||||
|
||||
is_enabled "dns64" "enabled" && {
|
||||
append_param "--dns64"
|
||||
append_param_arg "dns64" "dns64_prefix" "--dns64-prefix"
|
||||
}
|
||||
|
||||
is_enabled "edns" "enabled" && {
|
||||
append_param "--edns"
|
||||
append_param_arg "edns" "edns_addr" "--edns-addr"
|
||||
}
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load "$CONF"
|
||||
|
||||
is_enabled "global" "enabled" || return 1
|
||||
|
||||
procd_open_instance "$CONF"
|
||||
procd_set_param command "$PROG"
|
||||
|
||||
load_config_arg "global"
|
||||
load_config_list
|
||||
load_config_param
|
||||
|
||||
procd_set_param respawn
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
procd_set_param user dnsproxy
|
||||
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "$CONF"
|
||||
}
|
3
dnsproxy/test.sh
Normal file
3
dnsproxy/test.sh
Normal file
@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
dnsproxy --version | grep "$PKG_VERSION"
|
51
gowebdav/Makefile
Normal file
51
gowebdav/Makefile
Normal file
@ -0,0 +1,51 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
#
|
||||
# Copyright (C) 2021-2023 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=gowebdav
|
||||
PKG_VERSION:=0.0.5
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/1715173329/gowebdav/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=ee0ac5a52a3b7a1e1c687b850c3f7b55e10bbdc88da0b6b1dd8b790fc53d10c6
|
||||
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
PKG_BUILD_DEPENDS:=golang/host
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
GO_PKG:=github.com/1715173329/gowebdav
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(TOPDIR)/feeds/packages/lang/golang/golang-package.mk
|
||||
|
||||
define Package/gowebdav
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=File Transfer
|
||||
TITLE:=A simple WebDav server written in Go
|
||||
URL:=https://github.com/1715173329/gowebdav
|
||||
DEPENDS:=$(GO_ARCH_DEPENDS)
|
||||
endef
|
||||
|
||||
define Package/gowebdav/conffiles
|
||||
/etc/config/gowebdav
|
||||
endef
|
||||
|
||||
define Package/gowebdav/install
|
||||
$(call GoPackage/Package/Install/Bin,$(1))
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_CONF) $(CURDIR)/files/gowebdav.config $(1)/etc/config/gowebdav
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) $(CURDIR)/files/gowebdav.init $(1)/etc/init.d/gowebdav
|
||||
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||
$(INSTALL_BIN) $(CURDIR)/files/gowebdav-migrate-config.sh $(1)/etc/uci-defaults/90-gowebdav-migrate-config
|
||||
endef
|
||||
|
||||
$(eval $(call GoBinPackage,gowebdav))
|
||||
$(eval $(call BuildPackage,gowebdav))
|
24
gowebdav/files/gowebdav-migrate-config.sh
Normal file
24
gowebdav/files/gowebdav-migrate-config.sh
Normal file
@ -0,0 +1,24 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /lib/functions.sh
|
||||
|
||||
config_load "gowebdav"
|
||||
config_get enable "config" "enable"
|
||||
[ -z "$enable" ] || uci -q rename "gowebdav.config.enable"="enabled"
|
||||
|
||||
config_get root_dir "config" "root_dir"
|
||||
[ -z "$root_dir" ] || uci -q rename "gowebdav.config.root_dir"="mount_dir"
|
||||
|
||||
config_get allow_wan "config" "allow_wan"
|
||||
[ -z "$allow_wan" ] || uci -q rename "gowebdav.config.allow_wan"="public_access"
|
||||
|
||||
config_get enable_auth "config" "enable_auth"
|
||||
config_get username "config" "username"
|
||||
[ -z "$enable_auth" -a -n "$username" ] && uci -q set "gowebdav.config.enable_auth"="1"
|
||||
|
||||
config_get use_https "config" "use_https"
|
||||
[ -z "$use_https" ] || uci -q rename "gowebdav.config.use_https"="enable_https"
|
||||
|
||||
[ -z "$(uci -q changes "gowebdav")" ] || uci -q commit "gowebdav"
|
||||
|
||||
exit 0
|
14
gowebdav/files/gowebdav.config
Normal file
14
gowebdav/files/gowebdav.config
Normal file
@ -0,0 +1,14 @@
|
||||
|
||||
config gowebdav 'config'
|
||||
option enabled '0'
|
||||
option listen_port '6086'
|
||||
option mount_dir '/mnt'
|
||||
option read_only '0'
|
||||
option public_access '0'
|
||||
option enable_auth '0'
|
||||
option username ''
|
||||
option password ''
|
||||
option enable_https '0'
|
||||
option cert_cer ''
|
||||
option cert_key ''
|
||||
|
97
gowebdav/files/gowebdav.init
Normal file
97
gowebdav/files/gowebdav.init
Normal file
@ -0,0 +1,97 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2021-2023 ImmortalWrt.org
|
||||
|
||||
START=99
|
||||
USE_PROCD=1
|
||||
|
||||
CONF="gowebdav"
|
||||
PROG="/usr/bin/gowebdav"
|
||||
|
||||
start_service() {
|
||||
config_load "$CONF"
|
||||
|
||||
local enabled
|
||||
config_get_bool enabled "config" "enabled" "0"
|
||||
[ "$enabled" -eq "1" ] || return 1
|
||||
|
||||
local listen_port mount_dir read_only public_access
|
||||
local enable_auth username password
|
||||
local enable_https cert_cer cert_key
|
||||
|
||||
config_get listen_port "config" "listen_port" "6086"
|
||||
config_get mount_dir "config" "mount_dir" "/mnt"
|
||||
config_get_bool read_only "config" "read_only" "0"
|
||||
config_get_bool public_access "config" "public_access" "0"
|
||||
|
||||
config_get_bool enable_auth "config" "enable_auth" "0"
|
||||
config_get username "config" "username"
|
||||
config_get password "config" "password"
|
||||
|
||||
config_get_bool enable_https "config" "enable_https" "0"
|
||||
config_get cert_cer "config" "cert_cer"
|
||||
config_get cert_key "config" "cert_key"
|
||||
|
||||
[ -d "$mount_dir" ] || mkdir -p "$mount_dir"
|
||||
|
||||
procd_open_instance
|
||||
procd_set_param command "$PROG"
|
||||
procd_append_param command -dir "$mount_dir"
|
||||
procd_append_param command -http ":$listen_port"
|
||||
[ "$read_only" -eq "0" ] || procd_append_param command -read-only
|
||||
|
||||
if [ "$enable_auth" -eq "1" ]; then
|
||||
if [ -z "$username" ] || [ -z "$password" ]; then
|
||||
logger -p daemon.err -t "$CONF" "Authentication enabled with empty username or password!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
procd_append_param command -user "$username"
|
||||
procd_append_param command -password "$password"
|
||||
fi
|
||||
|
||||
if [ "$enable_https" -eq "1" ]; then
|
||||
if [ -z "$cert_cer" ] || [ -z "$cert_key" ]; then
|
||||
logger -p daemon.err -t "$CONF" "HTTPS enabled with empty certificate!"
|
||||
return 1
|
||||
fi
|
||||
|
||||
procd_append_param command -https-mode
|
||||
procd_append_param command -https-cert-file "$cert_cer"
|
||||
procd_append_param command -https-key-file "$cert_key"
|
||||
fi
|
||||
|
||||
procd_set_param limits core="unlimited"
|
||||
procd_set_param limits nofile="1000000 1000000"
|
||||
procd_set_param respawn
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
|
||||
if [ "$public_access" -eq "1" ]; then
|
||||
procd_open_data
|
||||
json_add_array firewall
|
||||
json_add_object ""
|
||||
json_add_string type rule
|
||||
json_add_string name "Allow-access-GoWebDav-at-$listen_port"
|
||||
json_add_string src "*"
|
||||
json_add_string dest_port "$listen_port"
|
||||
json_add_string proto tcp
|
||||
json_add_string target ACCEPT
|
||||
json_close_object
|
||||
json_close_array
|
||||
procd_close_data
|
||||
fi
|
||||
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
service_started() {
|
||||
procd_set_config_changed firewall
|
||||
}
|
||||
|
||||
service_stopped() {
|
||||
procd_set_config_changed firewall
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "$CONF"
|
||||
}
|
146
haproxy/Makefile
Normal file
146
haproxy/Makefile
Normal file
@ -0,0 +1,146 @@
|
||||
#
|
||||
# Copyright (C) 2010-2016 OpenWrt.org
|
||||
# Copyright (C) 2009-2016 Thomas Heil <heil@terminal-consulting.de>
|
||||
# Copyright (C) 2018 Christian Lachner <gladiac@gmail.com>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=haproxy
|
||||
PKG_VERSION:=2.6.6
|
||||
PKG_RELEASE:=104
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://www.haproxy.org/download/2.6/src
|
||||
PKG_HASH:=d0c80c90c04ae79598b58b9749d53787f00f7b515175e7d8203f2796e6a6594d
|
||||
|
||||
PKG_MAINTAINER:=Thomas Heil <heil@terminal-consulting.de>, \
|
||||
Christian Lachner <gladiac@gmail.com>
|
||||
PKG_LICENSE:=GPL-2.0-only
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_CPE_ID:=cpe:/a:haproxy:haproxy
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/haproxy/Default
|
||||
SUBMENU:=Web Servers/Proxies
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=TCP/HTTP Load Balancer
|
||||
URL:=https://www.haproxy.org/
|
||||
endef
|
||||
|
||||
define Package/haproxy/conffiles
|
||||
/etc/haproxy.cfg
|
||||
endef
|
||||
|
||||
Package/haproxy-nossl/conffiles = $(Package/haproxy/conffiles)
|
||||
|
||||
define Package/haproxy/Default/description
|
||||
Open source Reliable, High Performance TCP/HTTP Load Balancer.
|
||||
endef
|
||||
|
||||
define Package/haproxy
|
||||
$(call Package/haproxy/Default)
|
||||
TITLE+=with SSL support
|
||||
DEPENDS+= +libpcre +libltdl +zlib +libpthread +liblua5.3 +libopenssl +libncurses +libreadline +libatomic
|
||||
VARIANT:=ssl
|
||||
endef
|
||||
|
||||
define Package/haproxy/description
|
||||
$(call Package/haproxy/Default/description)
|
||||
This package is built with SSL and LUA support.
|
||||
endef
|
||||
|
||||
define Package/haproxy-nossl
|
||||
$(call Package/haproxy/Default)
|
||||
TITLE+=without SSL support
|
||||
VARIANT:=nossl
|
||||
DEPENDS+= +libpcre +libltdl +zlib +libpthread +liblua5.3 +libatomic
|
||||
CONFLICTS:=haproxy
|
||||
endef
|
||||
|
||||
define Package/haproxy-nossl/description
|
||||
$(call Package/haproxy/Default/description)
|
||||
This package is built without SSL support.
|
||||
endef
|
||||
|
||||
TARGET=linux-glibc
|
||||
ENABLE_LUA:=y
|
||||
|
||||
ifeq ($(CONFIG_USE_UCLIBC),y)
|
||||
ADDON+=USE_BACKTRACE=
|
||||
ADDON+=USE_LIBCRYPT=
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_USE_MUSL),y)
|
||||
TARGET=linux-musl
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_VARIANT),ssl)
|
||||
ADDON+=USE_OPENSSL=1
|
||||
ADDON+=ADDLIB="-lcrypto -lm"
|
||||
endif
|
||||
|
||||
define Build/Compile
|
||||
$(MAKE) TARGET=$(TARGET) -C $(PKG_BUILD_DIR) \
|
||||
DESTDIR="$(PKG_INSTALL_DIR)" \
|
||||
CC="$(TARGET_CC)" \
|
||||
PCREDIR="$(STAGING_DIR)/usr/" \
|
||||
USE_LUA=1 LUA_LIB_NAME="lua5.3" LUA_INC="$(STAGING_DIR)/usr/include/lua5.3" LUA_LIB="$(STAGING_DIR)/usr/lib" \
|
||||
SMALL_OPTS="-DBUFSIZE=16384 -DMAXREWRITE=1030 -DSYSTEM_MAXCONN=165530" \
|
||||
USE_ZLIB=1 USE_PCRE=1 USE_PCRE_JIT=1 USE_PTHREAD_PSHARED=1 USE_LIBATOMIC=1 USE_PROMEX=1 \
|
||||
VERSION="$(PKG_VERSION)" SUBVERS="-$(PKG_RELEASE)" \
|
||||
VERDATE="$(shell date -d @$(SOURCE_DATE_EPOCH) '+%Y/%m/%d')" IGNOREGIT=1 \
|
||||
$(ADDON) \
|
||||
CFLAGS="$(TARGET_CFLAGS) -fno-strict-aliasing -Wdeclaration-after-statement -Wno-unused-label -Wno-sign-compare -Wno-unused-parameter -Wno-clobbered -Wno-missing-field-initializers -Wno-cast-function-type -Wno-address-of-packed-member -Wtype-limits -Wshift-negative-value -Wshift-overflow=2 -Wduplicated-cond -Wnull-dereference -fwrapv -fasynchronous-unwind-tables -Wno-null-dereference" \
|
||||
LD="$(TARGET_CC)" \
|
||||
LDFLAGS="$(TARGET_LDFLAGS)"
|
||||
|
||||
$(MAKE_VARS) $(MAKE) -C $(PKG_BUILD_DIR) \
|
||||
DESTDIR="$(PKG_INSTALL_DIR)" \
|
||||
LD="$(TARGET_CC)" \
|
||||
LDFLAGS="$(TARGET_LDFLAGS)" \
|
||||
$(MAKE_FLAGS) \
|
||||
install
|
||||
|
||||
$(MAKE_VARS) $(MAKE) -C $(PKG_BUILD_DIR) \
|
||||
DESTDIR="$(PKG_INSTALL_DIR)" \
|
||||
CC="$(TARGET_CC)" \
|
||||
CFLAGS="$(TARGET_CFLAGS) -Wno-address-of-packed-member" \
|
||||
LDFLAGS="$(TARGET_LDFLAGS)" \
|
||||
admin/halog/halog
|
||||
endef
|
||||
|
||||
define Package/haproxy/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/haproxy $(1)/usr/sbin/
|
||||
$(INSTALL_DIR) $(1)/etc
|
||||
$(INSTALL_CONF) ./files/haproxy.cfg $(1)/etc/
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/haproxy.init $(1)/etc/init.d/haproxy
|
||||
endef
|
||||
|
||||
Package/haproxy-nossl/install = $(Package/haproxy/install)
|
||||
|
||||
define Package/halog
|
||||
$(call Package/haproxy)
|
||||
TITLE+=halog
|
||||
DEPENDS:=haproxy
|
||||
endef
|
||||
|
||||
define Package/halog/description
|
||||
HAProxy Log Analyzer
|
||||
endef
|
||||
|
||||
define Package/halog/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/admin/halog/halog $(1)/usr/bin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,haproxy))
|
||||
$(eval $(call BuildPackage,halog))
|
||||
$(eval $(call BuildPackage,haproxy-nossl))
|
107
haproxy/files/haproxy.cfg
Normal file
107
haproxy/files/haproxy.cfg
Normal file
@ -0,0 +1,107 @@
|
||||
# Example configuration file for HAProxy 2.0, refer to the url below for
|
||||
# a full documentation and examples for configuration:
|
||||
# https://cbonte.github.io/haproxy-dconv/2.0/configuration.html
|
||||
|
||||
|
||||
# Global parameters
|
||||
global
|
||||
|
||||
# Log events to a remote syslog server at given address using the
|
||||
# specified facility and verbosity level. Multiple log options
|
||||
# are allowed.
|
||||
#log 10.0.0.1 daemon info
|
||||
|
||||
# Specifiy the maximum number of allowed connections.
|
||||
maxconn 32000
|
||||
|
||||
# Raise the ulimit for the maximum allowed number of open socket
|
||||
# descriptors per process. This is usually at least twice the
|
||||
# number of allowed connections (maxconn * 2 + nb_servers + 1) .
|
||||
ulimit-n 65535
|
||||
|
||||
# Drop privileges (setuid, setgid), default is "root" on OpenWrt.
|
||||
uid 0
|
||||
gid 0
|
||||
|
||||
# Perform chroot into the specified directory.
|
||||
#chroot /var/run/haproxy/
|
||||
|
||||
# Daemonize on startup
|
||||
daemon
|
||||
|
||||
nosplice
|
||||
# Enable debugging
|
||||
#debug
|
||||
|
||||
# Spawn given number of processes and distribute load among them,
|
||||
# used for multi-core environments or to circumvent per-process
|
||||
# limits like number of open file descriptors. Default is 1.
|
||||
#nbproc 2
|
||||
|
||||
# Default parameters
|
||||
defaults
|
||||
# Default timeouts
|
||||
timeout connect 5000ms
|
||||
timeout client 50000ms
|
||||
timeout server 50000ms
|
||||
|
||||
|
||||
# Example HTTP proxy listener
|
||||
listen my_http_proxy
|
||||
|
||||
# Bind to port 81 and 444 on all interfaces (0.0.0.0)
|
||||
bind :81,:444
|
||||
|
||||
# We're proxying HTTP here...
|
||||
mode http
|
||||
|
||||
# Simple HTTP round robin over two servers using the specified
|
||||
# source ip 192.168.1.1 .
|
||||
balance roundrobin
|
||||
server server01 192.168.1.10:80 source 192.168.1.1
|
||||
server server02 192.168.1.20:80 source 192.168.1.1
|
||||
|
||||
# Serve an internal statistics page on /stats:
|
||||
stats enable
|
||||
stats uri /stats
|
||||
|
||||
# Enable HTTP basic auth for the statistics:
|
||||
stats realm HA_Stats
|
||||
stats auth username:password
|
||||
|
||||
|
||||
# Example SMTP proxy listener
|
||||
listen my_smtp_proxy
|
||||
|
||||
# Disable this instance without commenting out the section.
|
||||
disabled
|
||||
|
||||
# Bind to port 26 and 588 on localhost
|
||||
bind 127.0.0.1:26,127.0.0.1:588
|
||||
|
||||
# This is a TCP proxy
|
||||
mode tcp
|
||||
|
||||
# Round robin load balancing over two servers on port 123 forcing
|
||||
# the address 192.168.1.1 and port 25 as source.
|
||||
balance roundrobin
|
||||
#use next line for transparent proxy, so the servers can see the
|
||||
#original ip-address and remove source keyword in server definition
|
||||
#source 0.0.0.0 usesrc clientip
|
||||
server server01 192.168.1.10:123 source 192.168.1.1:25
|
||||
server server02 192.168.1.20:123 source 192.168.1.1:25
|
||||
|
||||
|
||||
# Special health check listener for integration with external load
|
||||
# balancers.
|
||||
listen local_health_check
|
||||
|
||||
# Listen on port 60000
|
||||
bind :60000
|
||||
|
||||
# This is a health check
|
||||
mode health
|
||||
|
||||
# Enable HTTP-style responses: "HTTP/1.0 200 OK"
|
||||
# else just print "OK".
|
||||
#option httpchk
|
28
haproxy/files/haproxy.init
Normal file
28
haproxy/files/haproxy.init
Normal file
@ -0,0 +1,28 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2009-2019 OpenWrt.org
|
||||
|
||||
START=99
|
||||
STOP=80
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
HAPROXY_BIN="/usr/sbin/haproxy"
|
||||
HAPROXY_CONFIG="/etc/haproxy.cfg"
|
||||
|
||||
start_service() {
|
||||
procd_open_instance
|
||||
procd_set_param respawn
|
||||
procd_set_param file "$HAPROXY_CONFIG"
|
||||
procd_set_param reload_signal USR2
|
||||
procd_set_param command $HAPROXY_BIN -q -W -db -f "$HAPROXY_CONFIG"
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_raw_trigger acme.renew 5000 /etc/init.d/haproxy reload
|
||||
}
|
||||
|
||||
extra_command "check" "Check haproxy config"
|
||||
check() {
|
||||
$HAPROXY_BIN -c -q -V -f $HAPROXY_CONFIG
|
||||
}
|
27
haproxy/get-latest-patches.sh
Executable file
27
haproxy/get-latest-patches.sh
Executable file
@ -0,0 +1,27 @@
|
||||
#!/bin/sh
|
||||
|
||||
CLONEURL=https://git.haproxy.org/git/haproxy-2.6.git
|
||||
BASE_TAG=v2.6.6
|
||||
TMP_REPODIR=tmprepo
|
||||
PATCHESDIR=patches
|
||||
|
||||
if test -d "${TMP_REPODIR}"; then rm -rf "${TMP_REPODIR}"; fi
|
||||
|
||||
git clone "${CLONEURL}" "${TMP_REPODIR}"
|
||||
|
||||
printf "Cleaning patches\n"
|
||||
find ${PATCHESDIR} -type f -name "*.patch" -exec rm -f "{}" \;
|
||||
|
||||
i=0
|
||||
for cid in $(git -C "${TMP_REPODIR}" rev-list ${BASE_TAG}..HEAD | tac); do
|
||||
filename="$(printf "%03d" $i)-$(git -C "${TMP_REPODIR}" log --format=%s -n 1 "$cid" | sed -e"s/[()']//g" -e's/[^_a-zA-Z0-9+-]\+/-/g' -e's/-$//').patch"
|
||||
printf "Creating %s\n" "${filename}"
|
||||
git -C "${TMP_REPODIR}" show "$cid" > "${PATCHESDIR}/$filename"
|
||||
git add "${PATCHESDIR}/$filename"
|
||||
i=$((i+1))
|
||||
done
|
||||
|
||||
rm -rf "${TMP_REPODIR}"
|
||||
|
||||
printf "finished\n"
|
||||
|
43
jpcre2/Makefile
Normal file
43
jpcre2/Makefile
Normal file
@ -0,0 +1,43 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
#
|
||||
# Copyright (C) 2021 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=jpcre2
|
||||
PKG_VERSION:=10.32.01
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/jpcre2/jpcre2/tar.gz/$(PKG_VERSION)?
|
||||
PKG_HASH:=668cbc6d2c0a065bb6abe8494d5a1bb3549a14cd956a44a2df9095045623ea47
|
||||
|
||||
PKG_LICENSE:=BSD 3-Clause
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
PKG_BUILD_DEPENDS:=pcre2
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_INSTALL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/jpcre2
|
||||
SECTION:=lib
|
||||
CATEGORY:=Libraries
|
||||
TITLE:=C++ wrapper for PCRE2 Library
|
||||
URL:=https://github.com/jpcre2/jpcre2
|
||||
BUILDONLY:=1
|
||||
endef
|
||||
|
||||
define Package/jpcre2/description
|
||||
This provides some C++ wrapper classes/functions to perform regex
|
||||
operations such as regex match and regex replace.
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(1)/usr/include
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/include/jpcre2.hpp $(1)/usr/include/jpcre2.hpp
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,jpcre2))
|
46
libcron/Makefile
Normal file
46
libcron/Makefile
Normal file
@ -0,0 +1,46 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
#
|
||||
# Copyright (C) 2021 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=libcron
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/PerMalmberg/libcron.git
|
||||
PKG_SOURCE_DATE:=2022-08-27
|
||||
PKG_SOURCE_VERSION:=0dd9df49d7833a2d2119e4a6ff8282df58b12d5d
|
||||
PKG_MIRROR_HASH:=a18c8ea0aa53be72cb67389bcd841c6501ce9c48a2467452e94691aa741f319b
|
||||
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
CMAKE_INSTALL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
|
||||
define Package/libcron
|
||||
SECTION:=lib
|
||||
CATEGORY:=Libraries
|
||||
URL:=https://github.com/PerMalmberg/libcron
|
||||
TITLE:=A C++ scheduling library using cron formatting
|
||||
DEPENDS:=+libstdcpp
|
||||
endef
|
||||
|
||||
define Package/libcron/description
|
||||
Libcron offers an easy to use API to add callbacks with corresponding
|
||||
cron-formatted strings.
|
||||
endef
|
||||
|
||||
CMAKE_OPTIONS+= -DBUILD_SHARED_LIBS=ON
|
||||
|
||||
define Package/libcron/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/liblibcron.so $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,libcron))
|
41
lua-ipops/Makefile
Normal file
41
lua-ipops/Makefile
Normal file
@ -0,0 +1,41 @@
|
||||
#
|
||||
# Copyright (C) 2017-2019 Chen Minqiang <ptpt52@gmail.com>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=lua-ipops
|
||||
PKG_VERSION:=0.0.1
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_VERSION:=$(PKG_VERSION)-$(PKG_RELEASE)
|
||||
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/lua-ipops
|
||||
CATEGORY:=X
|
||||
SUBMENU:=Libs
|
||||
DEPENDS:=
|
||||
PKGARCH:=all
|
||||
TITLE:=lua ipops lib
|
||||
endef
|
||||
|
||||
define Package/lua-ipops/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/lua
|
||||
$(INSTALL_DATA) ./src/ipops.lua $(1)/usr/lib/lua/ipops.lua
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
true
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
true
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,lua-ipops))
|
497
lua-ipops/src/ipops.lua
Normal file
497
lua-ipops/src/ipops.lua
Normal file
@ -0,0 +1,497 @@
|
||||
local function _lshift(a, i)
|
||||
return math.floor(a * 2^i)
|
||||
end
|
||||
|
||||
local function _rshift(a, i)
|
||||
return math.floor(a / 2^i)
|
||||
end
|
||||
|
||||
local function _band(a, b)
|
||||
local r = 0
|
||||
for i = 0, 31 do
|
||||
if _rshift(a, 31 - i) % 0x2 == 1 and _rshift(b, 31 - i) % 0x2 == 1 then
|
||||
r = r * 2 + 1
|
||||
else
|
||||
r = r * 2
|
||||
end
|
||||
end
|
||||
return r
|
||||
end
|
||||
|
||||
local function _bor(a, b)
|
||||
local r = 0
|
||||
for i = 0, 31 do
|
||||
if _rshift(a, 31 - i) % 0x2 == 1 or _rshift(b, 31 - i) % 0x2 == 1 then
|
||||
r = r * 2 + 1
|
||||
else
|
||||
r = r * 2
|
||||
end
|
||||
end
|
||||
return r
|
||||
end
|
||||
|
||||
local function _bxor(a, b)
|
||||
local r = 0
|
||||
for i = 0, 31 do
|
||||
if _rshift(a, 31 - i) % 0x2 ~= _rshift(b, 31 - i) % 0x2 then
|
||||
r = r * 2 + 1
|
||||
else
|
||||
r = r * 2
|
||||
end
|
||||
end
|
||||
return r
|
||||
end
|
||||
|
||||
local function _bnot(a)
|
||||
local r = 0
|
||||
for i = 0, 31 do
|
||||
if _rshift(a, 31 - i) % 0x2 == 0x0 then
|
||||
r = r * 2 + 1
|
||||
else
|
||||
r = r * 2
|
||||
end
|
||||
end
|
||||
return r
|
||||
end
|
||||
|
||||
local function get_parts_as_number(str)
|
||||
local t = {}
|
||||
for part in string.gmatch(str, "%d+") do
|
||||
table.insert(t, tonumber(part, 10))
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
-- ipstr: a.b.c.d
|
||||
local function ipstr2int(ipstr)
|
||||
local ip = get_parts_as_number(ipstr)
|
||||
if #ip == 4 then
|
||||
return (((ip[1] * 0x100 + ip[2]) * 0x100 + ip[3]) * 0x100 + ip[4])
|
||||
end
|
||||
return 0
|
||||
end
|
||||
|
||||
local function int2ipstr(x)
|
||||
local a = _rshift(x, 24) % 0x100
|
||||
local b = _rshift(x, 16) % 0x100
|
||||
local c = _rshift(x, 8) % 0x100
|
||||
local d = _rshift(x, 0) % 0x100
|
||||
return string.format("%u.%u.%u.%u", a, b, c, d)
|
||||
end
|
||||
|
||||
-- cidr: n
|
||||
local function cidr2int(cidr)
|
||||
if cidr == 0 then return 0 end
|
||||
local x = 0
|
||||
for i = 0, cidr - 1 do
|
||||
x = x + _lshift(1, 31 - i)
|
||||
end
|
||||
return x
|
||||
end
|
||||
|
||||
local function int2cidr(x)
|
||||
for i = 0, 31 do
|
||||
if _band(x, _lshift(1, 31 - i)) == 0 then
|
||||
return i
|
||||
end
|
||||
end
|
||||
return 32
|
||||
end
|
||||
|
||||
local function cidr2maskstr(cidr)
|
||||
return int2ipstr(cidr2int(cidr))
|
||||
end
|
||||
|
||||
local function maskstr2cidr(maskstr)
|
||||
return int2cidr(ipstr2int(maskstr))
|
||||
end
|
||||
|
||||
-- ipaddr: a.b.c.d, a.b.c.d/cidr
|
||||
-- return ip_int, mask_int
|
||||
local function get_ip_and_mask(ipaddr)
|
||||
local n = get_parts_as_number(ipaddr)
|
||||
return (((n[1] * 256 + n[2]) * 256 + n[3]) * 256 + n[4]), cidr2int(n[5] or 32)
|
||||
end
|
||||
|
||||
-- return ip_str, mask_str
|
||||
local function get_ipstr_and_maskstr(ipaddr)
|
||||
local ip, mask = get_ip_and_mask(ipaddr)
|
||||
return int2ipstr(ip), int2ipstr(mask)
|
||||
end
|
||||
|
||||
-- netString: ipaddr, a.b.c.d-e.f.g.h, a.b.c.d/m1.m2.m3.m4
|
||||
-- return: range: [n1, n2] where n1 <= n2
|
||||
local function netString2range(netString)
|
||||
ip = get_parts_as_number(netString)
|
||||
if #ip == 4 then
|
||||
local i = (((ip[1] * 256 + ip[2]) * 256 + ip[3]) * 256 + ip[4])
|
||||
return {i, i}
|
||||
end
|
||||
|
||||
if #ip == 5 and ip[5] >= 0 and ip[5] <= 32 then
|
||||
local i = (((ip[1] * 256 + ip[2]) * 256 + ip[3]) * 256 + ip[4])
|
||||
local m = cidr2int(ip[5])
|
||||
local s = _band(i, m)
|
||||
local e = _bor(i, _bnot(m))
|
||||
return {s, e}
|
||||
end
|
||||
|
||||
if #ip == 8 then
|
||||
local i = (((ip[1] * 256 + ip[2]) * 256 + ip[3]) * 256 + ip[4])
|
||||
local m = (((ip[5] * 256 + ip[6]) * 256 + ip[7]) * 256 + ip[8])
|
||||
if netString:match('/') then
|
||||
local s = _band(i, m)
|
||||
local e = _bor(s, _bnot(m))
|
||||
if s <= e then
|
||||
return {s, e}
|
||||
end
|
||||
else
|
||||
if i <= m then
|
||||
return {i, m}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
local function range2netString(range)
|
||||
if range[1] <= range[2] then
|
||||
return int2ipstr(range[1]) .. "-" .. int2ipstr(range[2])
|
||||
end
|
||||
return nil
|
||||
end
|
||||
|
||||
-- rangeSet: [range, ...]
|
||||
local function rangeSet_add_range(rangeSet, range)
|
||||
rangeSet = rangeSet or {}
|
||||
if not range then
|
||||
return rangeSet
|
||||
end
|
||||
if #rangeSet == 0 then
|
||||
table.insert(rangeSet, range)
|
||||
return rangeSet
|
||||
end
|
||||
|
||||
local rangeSet_new = {}
|
||||
for _, r in ipairs(rangeSet) do
|
||||
if range[1] < r[1] then
|
||||
if range[2] < r[1] then
|
||||
if range[2] + 1 < r[1] then
|
||||
table.insert(rangeSet_new, range)
|
||||
range = r
|
||||
else -- range[2] == r[1]
|
||||
range = {range[1], r[2]}
|
||||
end
|
||||
elseif range[2] <= r[2] then
|
||||
range = {range[1], r[2]}
|
||||
end
|
||||
elseif range[1] <= r[2] then
|
||||
if range[2] <= r[2] then
|
||||
range = {r[1], r[2]}
|
||||
elseif range[2] > r[2] then
|
||||
range = {r[1], range[2]}
|
||||
end
|
||||
elseif range[1] == r[2] + 1 then
|
||||
range = {r[1], range[2]}
|
||||
else -- range[1] > r[2] + 1
|
||||
table.insert(rangeSet_new, r)
|
||||
end
|
||||
end
|
||||
table.insert(rangeSet_new, range)
|
||||
|
||||
return rangeSet_new
|
||||
end
|
||||
|
||||
local function rangeSet_del_range(rangeSet, range)
|
||||
rangeSet = rangeSet or {}
|
||||
if not range then
|
||||
return rangeSet
|
||||
end
|
||||
if #rangeSet == 0 then
|
||||
return rangeSet
|
||||
end
|
||||
|
||||
local rangeSet_new = {}
|
||||
for _, r in ipairs(rangeSet) do
|
||||
if r[2] < range[1] then
|
||||
table.insert(rangeSet_new, r)
|
||||
else --r[2] >= range[1]
|
||||
if r[1] < range[1] then
|
||||
table.insert(rangeSet_new, {r[1], range[1] - 1})
|
||||
--else --r[1] >= range[1]
|
||||
end
|
||||
if r[2] > range[2] then
|
||||
if r[1] > range[2] then
|
||||
table.insert(rangeSet_new, r)
|
||||
else --r[1] <= range[2]
|
||||
table.insert(rangeSet_new, {range[2] + 1, r[2]})
|
||||
end
|
||||
--else --r[2] == range[2]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return rangeSet_new
|
||||
end
|
||||
|
||||
local function rangeSet_sub_rangeSet(rangeSetA, rangeSetB)
|
||||
rangeSetA = rangeSetA or {}
|
||||
if #rangeSetA == 0 then
|
||||
return rangeSetA
|
||||
end
|
||||
for _, range in ipairs(rangeSetB) do
|
||||
rangeSetA = rangeSet_del_range(rangeSetA, range)
|
||||
end
|
||||
return rangeSetA
|
||||
end
|
||||
|
||||
local function range_in_rangeSet(range, rangeSet)
|
||||
for _, r in ipairs(rangeSet) do
|
||||
if range[1] >= r[1] and range[2] <= r[2] then
|
||||
return true
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local function rangeSet_in_rangeSet(rangeSetA, rangeSetB)
|
||||
rangeSetA = rangeSetA or {}
|
||||
if #rangeSetA == 0 then
|
||||
return true
|
||||
end
|
||||
for _, range in ipairs(rangeSetA) do
|
||||
if not range_in_rangeSet(range, rangeSetB) then
|
||||
return false
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
-- netStringSet: [netString, ...]
|
||||
local function netStringSet2rangeSet(netStringSet)
|
||||
local rangeSet = {}
|
||||
for _, netString in ipairs(netStringSet) do
|
||||
rangeSet = rangeSet_add_range(rangeSet, netString2range(netString))
|
||||
end
|
||||
return rangeSet
|
||||
end
|
||||
|
||||
local function rangeSet2netStringSet(rangeSet)
|
||||
local netStringSet = {}
|
||||
for _, range in ipairs(rangeSet) do
|
||||
table.insert(netStringSet, string.format("%s-%s", int2ipstr(range[1]), int2ipstr(range[2])))
|
||||
end
|
||||
return netStringSet
|
||||
end
|
||||
|
||||
--ipcidr: a.b.c.d/cidr
|
||||
--ipcidrSet: [ipcidr, ...], yes it is a netStringSet
|
||||
local function rangeSet2ipcidrSet(rangeSet)
|
||||
local ipcidrSet = {}
|
||||
for _, range in ipairs(rangeSet) do
|
||||
while range[1] <= range[2] do
|
||||
for cidr = 0, 32 do
|
||||
local m = cidr2int(cidr)
|
||||
local s = _band(range[1], m)
|
||||
local e = _bor(s, _bnot(m))
|
||||
if s == range[1] and e <= range[2] then
|
||||
table.insert(ipcidrSet, int2ipstr(s) .. '/' .. cidr)
|
||||
range[1] = e + 1
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return ipcidrSet
|
||||
end
|
||||
|
||||
--[[DEBUG]]
|
||||
--[[
|
||||
local netStringSet = {
|
||||
"1.1.1.1-2.2.2.2",
|
||||
"192.168.0.0/16",
|
||||
"192.168.0.1-192.168.0.2",
|
||||
"192.168.255.254-192.169.0.100",
|
||||
"172.16.0.1-172.16.0.100",
|
||||
"172.168.0.0/255.255.0.0",
|
||||
"192.168.11.6/24",
|
||||
"192.168.0.1-192.168.0.22",
|
||||
"192.168.0.33-192.168.0.52",
|
||||
}
|
||||
|
||||
print("dump netStringSet")
|
||||
for _, netString in ipairs(netStringSet) do
|
||||
print(netString, range2netString(netString2range(netString)))
|
||||
end
|
||||
|
||||
print("netStringSet to rangeSet")
|
||||
local rangeSet = netStringSet2rangeSet(netStringSet)
|
||||
for _, r in ipairs(rangeSet) do
|
||||
print(r[1], r[2])
|
||||
end
|
||||
|
||||
print("rangeSet to netStringSet")
|
||||
netStringSet = rangeSet2netStringSet(rangeSet)
|
||||
for _, netString in ipairs(netStringSet) do
|
||||
print(netString)
|
||||
end
|
||||
|
||||
print("rangeSet to ipcidrSet")
|
||||
local ipcidrSet = rangeSet2ipcidrSet(rangeSet)
|
||||
for _, ipcidr in ipairs(ipcidrSet) do
|
||||
print(ipcidr)
|
||||
end
|
||||
|
||||
print("ipcidrSet to rangeSet")
|
||||
rangeSet = netStringSet2rangeSet(ipcidrSet)
|
||||
for _, r in ipairs(rangeSet) do
|
||||
print(r[1], r[2])
|
||||
end
|
||||
|
||||
print("rangeSet to netStringSet")
|
||||
netStringSet = rangeSet2netStringSet(rangeSet)
|
||||
for _, netString in ipairs(netStringSet) do
|
||||
print(netString)
|
||||
end
|
||||
|
||||
print("get_ipstr_and_maskstr")
|
||||
local ip, mask = get_ipstr_and_maskstr("1.2.3.4")
|
||||
print(ip, mask)
|
||||
]]
|
||||
|
||||
local __func__ = {
|
||||
ipstr2int = ipstr2int,
|
||||
int2ipstr = int2ipstr,
|
||||
cidr2int = cidr2int,
|
||||
int2cidr = int2cidr,
|
||||
cidr2maskstr = cidr2maskstr,
|
||||
maskstr2cidr = maskstr2cidr,
|
||||
get_ip_and_mask = get_ip_and_mask,
|
||||
get_ipstr_and_maskstr = get_ipstr_and_maskstr,
|
||||
|
||||
lshift = _lshift,
|
||||
rshift = _rshift,
|
||||
|
||||
b32and = _band,
|
||||
b32or = _bor,
|
||||
b32xor = _bxor,
|
||||
b32not = _bnot,
|
||||
|
||||
netString2range = netString2range,
|
||||
netStringSet2rangeSet = netStringSet2rangeSet,
|
||||
range2netString = range2netString,
|
||||
rangeSet2netStringSet = rangeSet2netStringSet,
|
||||
rangeSet2ipcidrSet = rangeSet2ipcidrSet,
|
||||
rangeSet_add_range = rangeSet_add_range,
|
||||
rangeSet_del_range = rangeSet_del_range,
|
||||
rangeSet_sub_rangeSet = rangeSet_sub_rangeSet,
|
||||
rangeSet_in_rangeSet = rangeSet_in_rangeSet,
|
||||
}
|
||||
|
||||
-- api for test_func
|
||||
-- argv = [ "netString,netString" ]
|
||||
-- return: exit code
|
||||
-- eg: lua ipops.lua netStrings2ipcidrStrings "1.2.3.4,192.168.1.0/24,192.168.100.100-192.168.200.222"
|
||||
local function netStrings2ipcidrStrings(argv)
|
||||
local rangeSet = {}
|
||||
local netString
|
||||
local netStrings = argv[1]
|
||||
if not netStrings then
|
||||
return -1
|
||||
end
|
||||
for netString in netStrings:gmatch("[^,]+") do
|
||||
rangeSet = rangeSet_add_range(rangeSet, netString2range(netString))
|
||||
end
|
||||
|
||||
local ipcidrSet = rangeSet2ipcidrSet(rangeSet)
|
||||
|
||||
print(table.concat(ipcidrSet, ','))
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
-- eg: lua ipops.lua netStrings_sub_netStrings "0.0.0.0/0" "1.2.3.4,192.168.1.0/24,192.168.100.100-192.168.200.222"
|
||||
local function netStrings_sub_netStrings(argv)
|
||||
local netString
|
||||
local rangeSetA = {}
|
||||
local rangeSetB = {}
|
||||
local netStringsA, netStringsB = argv[1], argv[2]
|
||||
if not netStringsA or not netStringsB then
|
||||
return -1
|
||||
end
|
||||
for netString in netStringsA:gmatch("[^,]+") do
|
||||
rangeSetA = rangeSet_add_range(rangeSetA, netString2range(netString))
|
||||
end
|
||||
for netString in netStringsB:gmatch("[^,]+") do
|
||||
rangeSetB = rangeSet_add_range(rangeSetB, netString2range(netString))
|
||||
end
|
||||
|
||||
rangeSetA = rangeSet_sub_rangeSet(rangeSetA, rangeSetB)
|
||||
|
||||
local ipcidrSet = rangeSet2ipcidrSet(rangeSetA)
|
||||
|
||||
print(table.concat(ipcidrSet, ','))
|
||||
|
||||
return 0
|
||||
end
|
||||
|
||||
-- eg: lua ipops.lua netStrings_test_netStrings "192.168.15.0/24" "192.168.15.0/29"
|
||||
local function netStrings_test_netStrings(argv)
|
||||
local netString
|
||||
local rangeSetA = {}
|
||||
local rangeSetB = {}
|
||||
local netStringsA, netStringsB = argv[1], argv[2]
|
||||
if not netStringsA or not netStringsB then
|
||||
return -1
|
||||
end
|
||||
for netString in netStringsA:gmatch("[^,]+") do
|
||||
rangeSetA = rangeSet_add_range(rangeSetA, netString2range(netString))
|
||||
end
|
||||
for netString in netStringsB:gmatch("[^,]+") do
|
||||
rangeSetB = rangeSet_add_range(rangeSetB, netString2range(netString))
|
||||
end
|
||||
|
||||
if (rangeSet_in_rangeSet(rangeSetB, rangeSetA)) then
|
||||
return 0
|
||||
end
|
||||
|
||||
return 1
|
||||
end
|
||||
|
||||
local test_func = {
|
||||
netStrings2ipcidrStrings = {
|
||||
argc = 1,
|
||||
func = netStrings2ipcidrStrings
|
||||
},
|
||||
netStrings_sub_netStrings = {
|
||||
argc = 2,
|
||||
func = netStrings_sub_netStrings
|
||||
},
|
||||
netStrings_test_netStrings = {
|
||||
argc = 2;
|
||||
func = netStrings_test_netStrings
|
||||
}
|
||||
}
|
||||
|
||||
function test_main(...)
|
||||
if arg[1] and test_func[arg[1]] and test_func[arg[1]].func then
|
||||
local argc = test_func[arg[1]].argc or 0
|
||||
local func = test_func[arg[1]].func
|
||||
local argv = {}
|
||||
if argc > 0 then
|
||||
for i = 1, argc do
|
||||
table.insert(argv, arg[1 + i])
|
||||
end
|
||||
end
|
||||
return true, func(argv)
|
||||
end
|
||||
return false
|
||||
end
|
||||
|
||||
local test, ret = test_main(...)
|
||||
if test then
|
||||
os.exit(ret)
|
||||
end
|
||||
|
||||
return __func__
|
80
luci-app-macvlan/Makefile
Normal file
80
luci-app-macvlan/Makefile
Normal file
@ -0,0 +1,80 @@
|
||||
#
|
||||
# Copyright (C) 2017-2019 Chen Minqiang <ptpt52@gmail.com>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v3.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=luci-app-macvlan
|
||||
PKG_VERSION:=1.0.0
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_LICENSE:=GPLv3
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/luci-app-macvlan
|
||||
CATEGORY:=X
|
||||
SUBMENU:=Macvlan
|
||||
TITLE:=LuCI Support for macvlan
|
||||
PKGARCH:=all
|
||||
DEPENDS:=+kmod-macvlan +kmod-ipvlan +busybox +@BUSYBOX_CUSTOM +@BUSYBOX_CONFIG_VCONFIG
|
||||
endef
|
||||
|
||||
define Package/luci-app-macvlan/description
|
||||
LuCI Support for macvlan.
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
$(foreach po,$(wildcard ${CURDIR}/files/luci/i18n/*.po), \
|
||||
po2lmo $(po) $(PKG_BUILD_DIR)/$(patsubst %.po,%.lmo,$(notdir $(po)));)
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/luci-app-macvlan/postinst
|
||||
#!/bin/sh
|
||||
if [ -z "$${IPKG_INSTROOT}" ]; then
|
||||
rm -rf /tmp/luci-indexcache /tmp/luci-modulecache
|
||||
fi
|
||||
|
||||
if [ -z "$$IPKG_INSTROOT" ]; then
|
||||
( . /etc/uci-defaults/40_luci-app-macvlan )
|
||||
rm -f /etc/uci-defaults/40_luci-app-macvlan
|
||||
fi
|
||||
|
||||
exit 0
|
||||
endef
|
||||
|
||||
define Package/luci-app-macvlan/conffiles
|
||||
/etc/config/macvlan
|
||||
endef
|
||||
|
||||
define Package/luci-app-macvlan/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/i18n
|
||||
$(INSTALL_DATA) $(PKG_BUILD_DIR)/macvlan.*.lmo $(1)/usr/lib/lua/luci/i18n/
|
||||
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller
|
||||
$(INSTALL_DATA) ./files/luci/controller/*.lua $(1)/usr/lib/lua/luci/controller/
|
||||
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/macvlan
|
||||
$(INSTALL_DATA) ./files/luci/model/cbi/macvlan/*.lua $(1)/usr/lib/lua/luci/model/cbi/macvlan/
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DATA) ./files/root/etc/config/macvlan $(1)/etc/config/macvlan
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/root/etc/init.d/macvlan $(1)/etc/init.d/macvlan
|
||||
$(INSTALL_DIR) $(1)/etc/uci-defaults
|
||||
$(INSTALL_DATA) ./files/root/etc/uci-defaults/40_luci-app-macvlan $(1)/etc/uci-defaults/40_luci-app-macvlan
|
||||
$(INSTALL_DIR) $(1)/usr/share/rpcd/acl.d
|
||||
$(INSTALL_DATA) ./root/usr/share/rpcd/acl.d/*.json $(1)/usr/share/rpcd/acl.d/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,luci-app-macvlan))
|
11
luci-app-macvlan/files/luci/controller/macvlan.lua
Normal file
11
luci-app-macvlan/files/luci/controller/macvlan.lua
Normal file
@ -0,0 +1,11 @@
|
||||
-- Copyright (C) 2019 X-WRT <dev@x-wrt.com>
|
||||
|
||||
module("luci.controller.macvlan", package.seeall)
|
||||
|
||||
function index()
|
||||
local page
|
||||
|
||||
page = entry({"admin", "network", "macvlan"}, cbi("macvlan/macvlan"), _("Macvlan"))
|
||||
page.leaf = true
|
||||
page.acl_depends = { "luci-app-macvlan" }
|
||||
end
|
14
luci-app-macvlan/files/luci/i18n/macvlan.zh-cn.po
Normal file
14
luci-app-macvlan/files/luci/i18n/macvlan.zh-cn.po
Normal file
@ -0,0 +1,14 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
||||
msgid "Macvlan"
|
||||
msgstr "Macvlan"
|
||||
|
||||
msgid "Macvlan Settings"
|
||||
msgstr "Macvlan设置"
|
||||
|
||||
msgid "Interface"
|
||||
msgstr "网络接口"
|
||||
|
||||
msgid "Index"
|
||||
msgstr "序号"
|
31
luci-app-macvlan/files/luci/model/cbi/macvlan/macvlan.lua
Normal file
31
luci-app-macvlan/files/luci/model/cbi/macvlan/macvlan.lua
Normal file
@ -0,0 +1,31 @@
|
||||
-- Copyright (C) 2019 X-WRT <dev@x-wrt.com>
|
||||
|
||||
m = Map("macvlan", translate("Macvlan"))
|
||||
|
||||
s = m:section(TypedSection, "macvlan", translate("Macvlan Settings"))
|
||||
s.addremove = true
|
||||
s.anonymous = true
|
||||
s.template = "cbi/tblsection"
|
||||
|
||||
o = s:option(Value, "ifname", translate("Interface"))
|
||||
o.datatype = "string"
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(Value, "index", translate("Index"))
|
||||
o.datatype = "and(uinteger,min(0),max(255))"
|
||||
o.rmempty = false
|
||||
|
||||
o = s:option(ListValue, "type", translate("Type"))
|
||||
o:value("macvlan", translate("macvlan"))
|
||||
o:value("ipvlan", translate("ipvlan"))
|
||||
|
||||
o = s:option(ListValue, "mode", translate("Mode"))
|
||||
o:value("l2", translate("l2"))
|
||||
o:value("l3", translate("l3"))
|
||||
|
||||
o = s:option(ListValue, "flag", translate("Flag"))
|
||||
o:value("bridge", translate("bridge"))
|
||||
o:value("private", translate("private"))
|
||||
o:value("vepa", translate("vepa"))
|
||||
|
||||
return m
|
0
luci-app-macvlan/files/root/etc/config/macvlan
Normal file
0
luci-app-macvlan/files/root/etc/config/macvlan
Normal file
74
luci-app-macvlan/files/root/etc/init.d/macvlan
Executable file
74
luci-app-macvlan/files/root/etc/init.d/macvlan
Executable file
@ -0,0 +1,74 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=19
|
||||
|
||||
MC=/tmp/macvlan_cleanup.sh
|
||||
|
||||
stop_macvlan() {
|
||||
local idx=0
|
||||
test -f $MC && {
|
||||
cat $MC | while read line; do
|
||||
echo "$idx#$line"
|
||||
idx=$((idx+1))
|
||||
done | sort -nr | while read line; do
|
||||
cmd=`echo "$line" | cut -d"#" -f2`
|
||||
$cmd
|
||||
done
|
||||
rm -f $MC
|
||||
}
|
||||
}
|
||||
|
||||
add_macvlan() {
|
||||
local cfg="$1"
|
||||
local ifname index type mode flag
|
||||
local mvname
|
||||
|
||||
config_get ifname "$cfg" ifname
|
||||
config_get index "$cfg" index
|
||||
config_get type "$cfg" type
|
||||
config_get mode "$cfg" mode
|
||||
config_get flag "$cfg" flag
|
||||
|
||||
test -n "$ifname" || return 1
|
||||
test -n "$index" || return 1
|
||||
test -n "$type" || return 1
|
||||
|
||||
mvname="${type}${index}${ifname}"
|
||||
|
||||
echo "$ifname" | grep -q "^[a-zA-Z].*\.[0-9]*$" && {
|
||||
ifn=`echo $ifname | cut -d"." -f 1`
|
||||
iid=`echo $ifname | cut -d"." -f 2`
|
||||
test -n "$ifn" && ifconfig $ifn >/dev/null 2>&1 || return 1
|
||||
ifconfig $ifn up 2>/dev/null
|
||||
vconfig set_name_type DEV_PLUS_VID_NO_PAD
|
||||
vconfig add $ifn $iid 2>/dev/null && echo ip link del $ifname >>$MC
|
||||
mvname="${type}${index}${ifn}t${iid}"
|
||||
}
|
||||
|
||||
ifconfig $ifname >/dev/null 2>&1 || return 1
|
||||
|
||||
ifconfig $ifname up 2>/dev/null
|
||||
if [ "${type}" = "macvlan" ]; then
|
||||
ip link add link $ifname $mvname type ${type} 2>/dev/null && echo ip link del $mvname >>$MC
|
||||
elif [ "${type}" = "ipvlan" ]; then
|
||||
case "$mode" in
|
||||
"l2")
|
||||
ip link add link $ifname $mvname type ${type} mode ${mode} ${flag} 2>/dev/null && echo ip link del $mvname >>$MC
|
||||
;;
|
||||
"l3")
|
||||
ip link add link $ifname $mvname type ${type} 2>/dev/null && echo ip link del $mvname >>$MC
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
start() {
|
||||
stop_macvlan
|
||||
echo -n >$MC
|
||||
config_load macvlan
|
||||
config_foreach add_macvlan macvlan
|
||||
}
|
||||
|
||||
stop() {
|
||||
stop_macvlan
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@macvlan[-1]
|
||||
add ucitrack macvlan
|
||||
set ucitrack.@macvlan[-1].init=macvlan
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
rm -f /tmp/luci-indexcache
|
||||
exit 0
|
@ -0,0 +1,11 @@
|
||||
{
|
||||
"luci-app-macvlan": {
|
||||
"description": "Grant UCI access for luci-app-macvlan",
|
||||
"read": {
|
||||
"uci": [ "macvlan" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "macvlan" ]
|
||||
}
|
||||
}
|
||||
}
|
16
luci-app-mail/Makefile
Normal file
16
luci-app-mail/Makefile
Normal file
@ -0,0 +1,16 @@
|
||||
#
|
||||
# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
#
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI Mail Configuration
|
||||
LUCI_DEPENDS:=+msmtp-mta
|
||||
|
||||
PKG_LICENSE:=GPLv3
|
||||
|
||||
#include ../luci/luci.mk
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
6
luci-app-mail/luasrc/controller/mail.lua
Normal file
6
luci-app-mail/luasrc/controller/mail.lua
Normal file
@ -0,0 +1,6 @@
|
||||
module("luci.controller.mail", package.seeall)
|
||||
|
||||
function index()
|
||||
entry({"admin", "services", "mail"}, alias("admin", "services", "mail", "index"), _("Mail settings"))
|
||||
entry({"admin", "services", "mail", "index"}, cbi("mail"))
|
||||
end
|
44
luci-app-mail/luasrc/model/cbi/mail.lua
Normal file
44
luci-app-mail/luasrc/model/cbi/mail.lua
Normal file
@ -0,0 +1,44 @@
|
||||
-- Copyright 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
m = Map("mail", translate("Mail settings"), translate("Set mail settings for services that need to send mails."))
|
||||
|
||||
s = m:section(TypedSection, "smtp", translate("SMTP"))
|
||||
s.anonymous = true
|
||||
s.addremove = false
|
||||
|
||||
server = s:option(Value, "server", translate("Server"))
|
||||
server.datatype = "host"
|
||||
server.placeholder = "smtp.gmail.com"
|
||||
server.optional = false
|
||||
|
||||
port = s:option(Value, "port", translate("Port"))
|
||||
port.datatype = "port"
|
||||
port.optional = false
|
||||
port.rmempty = true
|
||||
port.default = "25"
|
||||
|
||||
tls = s:option(Flag, "tls", translate("TLS"))
|
||||
tls.rmempty = false
|
||||
|
||||
tls_starttls = s:option(Flag, "tls_starttls", translate("STARTTLS"))
|
||||
tls_starttls.rmempty = false
|
||||
|
||||
user = s:option(Value, "user", translate("Username"))
|
||||
user.rmempty = true
|
||||
|
||||
password = s:option(Value, "password", translate("Password"))
|
||||
password.password = true
|
||||
password.rmempty = true
|
||||
|
||||
from = s:option(Value, "from", translate("From"))
|
||||
from.optional = false
|
||||
from.rmempty = true
|
||||
from.placeholder = "myself@gmail.com"
|
||||
|
||||
to = s:option(Value, "to", translate("To"))
|
||||
to.optional = false
|
||||
to.rmempty = true
|
||||
to.placeholder = "myself@gmail.com"
|
||||
|
||||
return m
|
64
luci-app-mail/po/de/mail.po
Normal file
64
luci-app-mail/po/de/mail.po
Normal file
@ -0,0 +1,64 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-14 08:04+0000\n"
|
||||
"Last-Translator: Andreas Dorfer <adorferen@gmail.com>\n"
|
||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/de/>\n"
|
||||
"Language: de\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json:3
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:34
|
||||
msgid "From"
|
||||
msgstr "Von"
|
||||
|
||||
#: luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json:3
|
||||
msgid "Grant UCI access for luci-app-mail"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/controller/mail.lua:4
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Mail settings"
|
||||
msgstr "E-Mail-Einstellungen"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:30
|
||||
msgid "Password"
|
||||
msgstr "Schlüssel"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:15
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:6
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:24
|
||||
msgid "STARTTLS"
|
||||
msgstr "StartTLS"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:10
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr "Einstellungen für Dienste, die E-Mail versenden können sollen."
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:21
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:39
|
||||
msgid "To"
|
||||
msgstr "An"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:27
|
||||
msgid "Username"
|
||||
msgstr "Benutzername"
|
44
luci-app-mail/po/de/mail.po~
Normal file
44
luci-app-mail/po/de/mail.po~
Normal file
@ -0,0 +1,44 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-14 08:04+0000\n"
|
||||
"Last-Translator: Andreas Dorfer <adorferen@gmail.com>\n"
|
||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/de/>\n"
|
||||
"Language: de\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid "From"
|
||||
msgstr "Von"
|
||||
|
||||
msgid "Mail settings"
|
||||
msgstr "E-Mail-Einstellungen"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Schlüssel"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
msgid "STARTTLS"
|
||||
msgstr "StartTLS"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr "Einstellungen für Dienste, die E-Mail versenden können sollen."
|
||||
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
msgid "To"
|
||||
msgstr "An"
|
||||
|
||||
msgid "Username"
|
||||
msgstr "Benutzername"
|
69
luci-app-mail/po/fr/mail.po
Normal file
69
luci-app-mail/po/fr/mail.po
Normal file
@ -0,0 +1,69 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2021-05-31 18:51+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.6.1\n"
|
||||
|
||||
#: luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json:3
|
||||
msgid "E-Mail"
|
||||
msgstr "E-Mail"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:34
|
||||
msgid "From"
|
||||
msgstr "De"
|
||||
|
||||
#: luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json:3
|
||||
msgid "Grant UCI access for luci-app-mail"
|
||||
msgstr "Accorder l'accès UCI pour luci-app-mail"
|
||||
|
||||
#: luci-app-mail/luasrc/controller/mail.lua:4
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Mail settings"
|
||||
msgstr "Paramètres e-mail"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:30
|
||||
msgid "Password"
|
||||
msgstr "Mot de passe"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:15
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:6
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:24
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:10
|
||||
msgid "Server"
|
||||
msgstr "Serveur"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr ""
|
||||
"Définissez les paramètres de messagerie pour les services qui doivent "
|
||||
"envoyer des e-mails."
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:21
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:39
|
||||
msgid "To"
|
||||
msgstr "À"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:27
|
||||
msgid "Username"
|
||||
msgstr "Nom d'utilisateur"
|
49
luci-app-mail/po/fr/mail.po~
Normal file
49
luci-app-mail/po/fr/mail.po~
Normal file
@ -0,0 +1,49 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"POT-Creation-Date: \n"
|
||||
"PO-Revision-Date: 2020-08-03 12:39+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid "From"
|
||||
msgstr "De"
|
||||
|
||||
msgid "Mail settings"
|
||||
msgstr "Paramètres e-mail"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Mot de passe"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Port"
|
||||
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Serveur"
|
||||
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr ""
|
||||
"Définissez les paramètres de messagerie pour les services qui doivent "
|
||||
"envoyer des e-mails."
|
||||
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
msgid "To"
|
||||
msgstr "À"
|
||||
|
||||
msgid "Username"
|
||||
msgstr "Nom d'utilisateur"
|
64
luci-app-mail/po/it/mail.po
Normal file
64
luci-app-mail/po/it/mail.po
Normal file
@ -0,0 +1,64 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-12-01 10:49+0000\n"
|
||||
"Last-Translator: Giuseppe Dipierro <giuseppe.dipierro@uania.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/it/>\n"
|
||||
"Language: it\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json:3
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:34
|
||||
msgid "From"
|
||||
msgstr "Da"
|
||||
|
||||
#: luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json:3
|
||||
msgid "Grant UCI access for luci-app-mail"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/controller/mail.lua:4
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Mail settings"
|
||||
msgstr "Configurazione mail"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:30
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:15
|
||||
msgid "Port"
|
||||
msgstr "Porta"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:6
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:24
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:10
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr "Configurazione del server mail da utilizzare per inviare alert."
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:21
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:39
|
||||
msgid "To"
|
||||
msgstr "A"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:27
|
||||
msgid "Username"
|
||||
msgstr "Username"
|
44
luci-app-mail/po/it/mail.po~
Normal file
44
luci-app-mail/po/it/mail.po~
Normal file
@ -0,0 +1,44 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-12-01 10:49+0000\n"
|
||||
"Last-Translator: Giuseppe Dipierro <giuseppe.dipierro@uania.com>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/it/>\n"
|
||||
"Language: it\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid "From"
|
||||
msgstr "Da"
|
||||
|
||||
msgid "Mail settings"
|
||||
msgstr "Configurazione mail"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Porta"
|
||||
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr "Configurazione del server mail da utilizzare per inviare alert."
|
||||
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
msgid "To"
|
||||
msgstr "A"
|
||||
|
||||
msgid "Username"
|
||||
msgstr "Username"
|
66
luci-app-mail/po/oc/mail.po
Normal file
66
luci-app-mail/po/oc/mail.po
Normal file
@ -0,0 +1,66 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-21 20:21+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json:3
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:34
|
||||
msgid "From"
|
||||
msgstr "De"
|
||||
|
||||
#: luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json:3
|
||||
msgid "Grant UCI access for luci-app-mail"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/controller/mail.lua:4
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Mail settings"
|
||||
msgstr "Paramètres e-mail"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:30
|
||||
msgid "Password"
|
||||
msgstr "Senhal"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:15
|
||||
msgid "Port"
|
||||
msgstr "Pòrt"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:6
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:24
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:10
|
||||
msgid "Server"
|
||||
msgstr "Servidor"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr ""
|
||||
"Definissètz los paramètres de messatjariá pels servicis que devon enviar d’e-"
|
||||
"mails."
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:21
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:39
|
||||
msgid "To"
|
||||
msgstr "A"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:27
|
||||
msgid "Username"
|
||||
msgstr "Nom d'utilizaire"
|
46
luci-app-mail/po/oc/mail.po~
Normal file
46
luci-app-mail/po/oc/mail.po~
Normal file
@ -0,0 +1,46 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-21 20:21+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid "From"
|
||||
msgstr "De"
|
||||
|
||||
msgid "Mail settings"
|
||||
msgstr "Paramètres e-mail"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "Senhal"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "Pòrt"
|
||||
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "Servidor"
|
||||
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr ""
|
||||
"Definissètz los paramètres de messatjariá pels servicis que devon enviar d’e-"
|
||||
"mails."
|
||||
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
msgid "To"
|
||||
msgstr "A"
|
||||
|
||||
msgid "Username"
|
||||
msgstr "Nom d'utilizaire"
|
65
luci-app-mail/po/ru/mail.po
Normal file
65
luci-app-mail/po/ru/mail.po
Normal file
@ -0,0 +1,65 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2021-05-13 21:38+0000\n"
|
||||
"Last-Translator: Aleksandr Serdyukov <promolife@list.ru>\n"
|
||||
"Language-Team: Russian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationsmail/ru/>\n"
|
||||
"Language: ru\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.6.1\n"
|
||||
|
||||
#: luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json:3
|
||||
msgid "E-Mail"
|
||||
msgstr "E-Mail"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:34
|
||||
msgid "From"
|
||||
msgstr "От"
|
||||
|
||||
#: luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json:3
|
||||
msgid "Grant UCI access for luci-app-mail"
|
||||
msgstr "Полный UCI доступ для luci-app-mail"
|
||||
|
||||
#: luci-app-mail/luasrc/controller/mail.lua:4
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Mail settings"
|
||||
msgstr "Настройки почты"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:30
|
||||
msgid "Password"
|
||||
msgstr "Пароль"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:15
|
||||
msgid "Port"
|
||||
msgstr "Порт"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:6
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:24
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:10
|
||||
msgid "Server"
|
||||
msgstr "Сервер"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr "Выбор настроек почты для сервисов, которым нужно отправлять почту."
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:21
|
||||
msgid "TLS"
|
||||
msgstr "TLS"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:39
|
||||
msgid "To"
|
||||
msgstr "Кому"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:27
|
||||
msgid "Username"
|
||||
msgstr "Имя пользователя"
|
55
luci-app-mail/po/templates/mail.pot
Normal file
55
luci-app-mail/po/templates/mail.pot
Normal file
@ -0,0 +1,55 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json:3
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:34
|
||||
msgid "From"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json:3
|
||||
msgid "Grant UCI access for luci-app-mail"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/controller/mail.lua:4
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Mail settings"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:30
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:15
|
||||
msgid "Port"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:6
|
||||
msgid "SMTP"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:24
|
||||
msgid "STARTTLS"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:10
|
||||
msgid "Server"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:21
|
||||
msgid "TLS"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:39
|
||||
msgid "To"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:27
|
||||
msgid "Username"
|
||||
msgstr ""
|
1
luci-app-mail/po/zh-cn
Symbolic link
1
luci-app-mail/po/zh-cn
Symbolic link
@ -0,0 +1 @@
|
||||
zh_Hans
|
64
luci-app-mail/po/zh_Hans/mail.po
Normal file
64
luci-app-mail/po/zh_Hans/mail.po
Normal file
@ -0,0 +1,64 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2021-05-13 21:38+0000\n"
|
||||
"Last-Translator: justbin <419989953@qq.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <http://weblate.openmptcprouter.com/"
|
||||
"projects/omr/luciapplicationsmail/zh_Hans/>\n"
|
||||
"Language: zh_Hans\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.6.1\n"
|
||||
|
||||
#: luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json:3
|
||||
msgid "E-Mail"
|
||||
msgstr "电子邮件"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:34
|
||||
msgid "From"
|
||||
msgstr "来自"
|
||||
|
||||
#: luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json:3
|
||||
msgid "Grant UCI access for luci-app-mail"
|
||||
msgstr "授予luci-app-iperf UCI访问权限"
|
||||
|
||||
#: luci-app-mail/luasrc/controller/mail.lua:4
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Mail settings"
|
||||
msgstr "邮件设置"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:30
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:15
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:6
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP设置"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:24
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS设置"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:10
|
||||
msgid "Server"
|
||||
msgstr "服务器"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:4
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr "为需要发送邮件的服务设置邮件设置."
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:21
|
||||
msgid "TLS"
|
||||
msgstr "证书"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:39
|
||||
msgid "To"
|
||||
msgstr "发送到"
|
||||
|
||||
#: luci-app-mail/luasrc/model/cbi/mail.lua:27
|
||||
msgid "Username"
|
||||
msgstr "账号"
|
44
luci-app-mail/po/zh_Hans/mail.po~
Normal file
44
luci-app-mail/po/zh_Hans/mail.po~
Normal file
@ -0,0 +1,44 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-12-04 16:02+0000\n"
|
||||
"Last-Translator: antrouter <xinyangla@188.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <http://weblate.openmptcprouter.com/"
|
||||
"projects/omr/luciapplicationsmail/zh_Hans/>\n"
|
||||
"Language: zh_Hans\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
msgid "From"
|
||||
msgstr "来自"
|
||||
|
||||
msgid "Mail settings"
|
||||
msgstr "邮件设置"
|
||||
|
||||
msgid "Password"
|
||||
msgstr "密码"
|
||||
|
||||
msgid "Port"
|
||||
msgstr "端口"
|
||||
|
||||
msgid "SMTP"
|
||||
msgstr "SMTP设置"
|
||||
|
||||
msgid "STARTTLS"
|
||||
msgstr "STARTTLS设置"
|
||||
|
||||
msgid "Server"
|
||||
msgstr "服务器"
|
||||
|
||||
msgid "Set mail settings for services that need to send mails."
|
||||
msgstr "为需要发送邮件的服务设置邮件设置."
|
||||
|
||||
msgid "TLS"
|
||||
msgstr "证书"
|
||||
|
||||
msgid "To"
|
||||
msgstr "发送到"
|
||||
|
||||
msgid "Username"
|
||||
msgstr "账号"
|
1
luci-app-mail/root/etc/config/mail
Normal file
1
luci-app-mail/root/etc/config/mail
Normal file
@ -0,0 +1 @@
|
||||
config smtp 'default'
|
64
luci-app-mail/root/etc/init.d/msmtp
Executable file
64
luci-app-mail/root/etc/init.d/msmtp
Executable file
@ -0,0 +1,64 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
|
||||
START=90
|
||||
STOP=10
|
||||
|
||||
USE_PROCD=1
|
||||
|
||||
validate_section() {
|
||||
uci_validate_section mail smtp "${1}" \
|
||||
'server:host' \
|
||||
'tls:bool:0' \
|
||||
'tls_starttls:bool:0' \
|
||||
'from:string' \
|
||||
'user:string' \
|
||||
'password:string' \
|
||||
'port:port:25'
|
||||
}
|
||||
|
||||
config_account() {
|
||||
local server tls tls_starttls from user password
|
||||
|
||||
validate_section "${1}" || {
|
||||
_err "validation failed"
|
||||
return 1
|
||||
}
|
||||
|
||||
cat > /tmp/msmtp.tmp <<-EOF
|
||||
account default
|
||||
host $server
|
||||
port $port
|
||||
EOF
|
||||
[ -n "$user" ] && [ -n "$password" ] && {
|
||||
cat >> /tmp/msmtp.tmp <<-EOF
|
||||
auth on
|
||||
user $user
|
||||
password $password
|
||||
EOF
|
||||
}
|
||||
[ -n "$from" ] && echo "from $from" >> /tmp/msmtp.tmp
|
||||
[ "$tls" = "1" ] && {
|
||||
cat >> /tmp/msmtp.tmp <<-EOF
|
||||
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
||||
tls on
|
||||
EOF
|
||||
} || {
|
||||
echo 'tls off' >> /tmp/msmtp.tmp
|
||||
}
|
||||
[ "$tls_starttls" = "1" ] && {
|
||||
echo 'tls_starttls on' >> /tmp/msmtp.tmp
|
||||
} || {
|
||||
echo 'tls_starttls off' >> /tmp/msmtp.tmp
|
||||
}
|
||||
}
|
||||
|
||||
start_service() {
|
||||
config_load mail
|
||||
config_foreach config_account smtp
|
||||
[ -f "/tmp/msmtp.tmp" ] && mv /tmp/msmtp.tmp /etc/msmtprc
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger mail
|
||||
}
|
8
luci-app-mail/root/etc/uci-defaults/4101-mail
Executable file
8
luci-app-mail/root/etc/uci-defaults/4101-mail
Executable file
@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@mail[-1]
|
||||
add ucitrack mail
|
||||
set ucitrack.@mail[-1].init=mail
|
||||
commit ucitrack
|
||||
EOF
|
||||
exit 0
|
13
luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json
Normal file
13
luci-app-mail/root/usr/share/luci/menu.d/luci-app-mail.json
Normal file
@ -0,0 +1,13 @@
|
||||
{
|
||||
"admin/services/mail": {
|
||||
"title": "E-Mail",
|
||||
"order": 90,
|
||||
"action": {
|
||||
"type": "cbi",
|
||||
"path": "mail"
|
||||
},
|
||||
"depends": {
|
||||
"acl": [ "luci-app-mail" ]
|
||||
}
|
||||
}
|
||||
}
|
11
luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json
Normal file
11
luci-app-mail/root/usr/share/rpcd/acl.d/luci-app-mail.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"luci-app-mail": {
|
||||
"description": "Grant UCI access for luci-app-mail",
|
||||
"read": {
|
||||
"uci": [ "mail" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "mail" ]
|
||||
}
|
||||
}
|
||||
}
|
14
luci-app-packet-capture/Makefile
Normal file
14
luci-app-packet-capture/Makefile
Normal file
@ -0,0 +1,14 @@
|
||||
# Copyright 2020 Wojciech Jowsa (wojciech.jowsa@gmail.com)
|
||||
# This is free software, licensed under the Apache License, Version 2.0
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=Packet capture application
|
||||
LUCI_DEPENDS:=+luci-mod-admin-full +tcpdump +coreutils +coreutils-timeout
|
||||
|
||||
PKG_MAINTAINER:=Wojciech Jowsa <wojciech.jowsa@gmail.com>
|
||||
PKG_LICENSE:=Apache-2.0
|
||||
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
|
||||
# call BuildPackage - OpenWrt buildroot signatureet
|
@ -0,0 +1,287 @@
|
||||
'use strict';
|
||||
'require rpc';
|
||||
'require uci';
|
||||
'require ui';
|
||||
'require fs';
|
||||
'require form';
|
||||
'require network';
|
||||
'require tools.widgets as widgets';
|
||||
|
||||
var eventSource,
|
||||
captureFilePoll,
|
||||
hostName;
|
||||
|
||||
function stopTcpdump() {
|
||||
fs.exec("/usr/libexec/packet_capture_stop").then(function(replay) {
|
||||
if (eventSource)
|
||||
eventSource.close();
|
||||
}.bind(this)).catch(function(error) {
|
||||
console.log(error);
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener('beforeunload', stopTcpdump);
|
||||
|
||||
var callLuciProcessList = rpc.declare({
|
||||
object: 'luci',
|
||||
method: 'getProcessList',
|
||||
expect: { result: [] }
|
||||
});
|
||||
|
||||
var callInitAction = rpc.declare({
|
||||
object: 'luci',
|
||||
method: 'setInitAction',
|
||||
params: [ 'name', 'action' ],
|
||||
expect: { result: false }
|
||||
});
|
||||
|
||||
function addOutput() {
|
||||
var tcpdumpOut = document.querySelectorAll('[id$="tcpdump_out"]')[0];
|
||||
if (tcpdumpOut)
|
||||
return;
|
||||
|
||||
var frameEl = E('div', {'class': 'cbi-value'});
|
||||
|
||||
frameEl.appendChild(E('textarea', {
|
||||
'id': 'tcpdump_out',
|
||||
'class': 'cbi-input-textarea',
|
||||
'readonly': '',
|
||||
'style': 'width:100%',
|
||||
'rows': 30,
|
||||
}));
|
||||
|
||||
frameEl.firstElementChild.style.fontFamily = 'monospace';
|
||||
|
||||
var downloadBtn = document.querySelectorAll('[id$="download_file"]')[0];
|
||||
if (downloadBtn)
|
||||
downloadBtn.parentNode.insertBefore(frameEl, downloadBtn.nextSibling);
|
||||
}
|
||||
|
||||
var downloadCaptureFile = function(ev) {
|
||||
var form = E('form', {
|
||||
method: 'post',
|
||||
action: '/cgi-bin/cgi-download',
|
||||
enctype: 'application/x-www-form-urlencoded'
|
||||
}, E('input', { type: 'hidden', name: 'sessionid', value: rpc.getSessionID()},
|
||||
E('input', { type: 'hidden', name: 'path', value: "/tmp/capture.pcap"},
|
||||
E('input', { type: 'hidden', name: 'filename', value: hostName + "-" + Date.now() + ".pcap"},
|
||||
E('input', { type: 'hidden', name: 'mimetype', value: 'application/vnd.tcpdump.pcap'}
|
||||
)))));
|
||||
|
||||
ev.currentTarget.parentNode.appendChild(form);
|
||||
form.submit();
|
||||
form.parentNode.removeChild(form);
|
||||
}
|
||||
|
||||
function subscribeTcpdump() {
|
||||
if (eventSource)
|
||||
eventSource.close();
|
||||
|
||||
eventSource = new EventSource('/ubus/subscribe/tcpdump' + '?' + rpc.getSessionID());
|
||||
eventSource.onerror = function(event) {
|
||||
eventSource.close();
|
||||
console.log(event);
|
||||
};
|
||||
|
||||
addOutput();
|
||||
var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0];
|
||||
textOut.value = "";
|
||||
eventSource.addEventListener("tcpdump.data", function(event) {
|
||||
textOut.value = textOut.value + "\n" + JSON.parse(event.data).data;
|
||||
});
|
||||
}
|
||||
|
||||
function updateButtons() {
|
||||
var tasks = [];
|
||||
tasks.push(fs.stat("/var/run/packet_capture.pid").then(L.bind(function(res) {
|
||||
var downloadBtn = document.querySelectorAll('[id$="download_file"]')[0];
|
||||
if (!downloadBtn)
|
||||
return;
|
||||
if (!eventSource || eventSource.readyState == 2)
|
||||
subscribeTcpdump();
|
||||
var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0];
|
||||
if (textOut)
|
||||
textOut.style.borderColor = "green";
|
||||
var startBtn = document.querySelectorAll('[id$="start_tcpdump"]')[0];
|
||||
if (startBtn)
|
||||
startBtn.hidden = true;
|
||||
var stopBtn = document.querySelectorAll('[id$="stop_tcpdump"]')[0];
|
||||
if (stopBtn)
|
||||
stopBtn.hidden = false;
|
||||
return;
|
||||
})).catch(function(error) {
|
||||
var textOut = document.querySelectorAll('[id$="tcpdump_out"]')[0];
|
||||
if (textOut)
|
||||
textOut.style.borderColor = "red";
|
||||
var startBtn = document.querySelectorAll('[id$="start_tcpdump"]')[0];
|
||||
if (startBtn)
|
||||
startBtn.hidden = false;
|
||||
var stopBtn = document.querySelectorAll('[id$="stop_tcpdump"]')[0];
|
||||
if (stopBtn)
|
||||
stopBtn.hidden = true;
|
||||
if (eventSource)
|
||||
eventSource.close();
|
||||
}));
|
||||
|
||||
return Promise.all(tasks);
|
||||
}
|
||||
|
||||
function updatePollCheckCaptureFileExists() {
|
||||
checkCaptureFileExists();
|
||||
L.Poll.remove(captureFilePoll);
|
||||
L.Poll.add(L.bind(checkCaptureFileExists, m),5);
|
||||
}
|
||||
|
||||
function checkCaptureFileExists() {
|
||||
var tasks = [];
|
||||
tasks.push(fs.stat("/tmp/capture.pcap").then(L.bind(function(res) {
|
||||
var downloadBtn = document.querySelector('[data-action="download"]');
|
||||
if (!downloadBtn)
|
||||
return;
|
||||
var downloadCheckBox = document.querySelectorAll('[data-widget-id$="file"]')[0].checked;
|
||||
if (!downloadCheckBox) {
|
||||
fs.remove("/tmp/capture.pcap").then(function(replay) {
|
||||
downloadBtn.disabled = true;;
|
||||
}.bind(this)).catch(function(error) {
|
||||
console.log(error);
|
||||
});
|
||||
} else {
|
||||
downloadBtn.disabled = false;
|
||||
}
|
||||
})).catch(function(error) {
|
||||
var downloadBtn = document.querySelector('[data-action="download"]');
|
||||
if (downloadBtn)
|
||||
downloadBtn.disabled = true;
|
||||
}));
|
||||
|
||||
return Promise.all(tasks);
|
||||
}
|
||||
|
||||
return L.view.extend({
|
||||
|
||||
load: function() {
|
||||
return Promise.all([
|
||||
uci.load('system')
|
||||
]);
|
||||
},
|
||||
|
||||
handleDownload: function(ev) {
|
||||
downloadCaptureFile(ev);
|
||||
},
|
||||
|
||||
render: function(processes) {
|
||||
var m, s, o;
|
||||
|
||||
hostName = uci.get('system', '@system[0]', 'hostname');
|
||||
|
||||
m = new form.Map('packet_capture', _('Packet Capture - Tcpdump'), _('Capture packets with tcpdump.'));
|
||||
s = m.section(form.TypedSection, 'tcpdump');
|
||||
s.anonymous = 1;
|
||||
|
||||
o = s.option(widgets.DeviceSelect, 'interface', _('Interface'), _(''));
|
||||
o.noaliases = true;
|
||||
o.modalonly = true;
|
||||
o.rmempty = false;
|
||||
o.filter = function(section_id, value) {
|
||||
return true;
|
||||
}
|
||||
|
||||
o = s.option(form.Value, 'filter', _('Filter'), _('Tcpdump filter like protocol, port etc.'));
|
||||
o.modalonly = false;
|
||||
o.datatype = 'and(minlength(1),maxlength(1024))';
|
||||
|
||||
o = s.option(form.Value, 'duration', _('Duration'), _('Duration of packet capturing in seconds.'));
|
||||
o.modalonly = false;
|
||||
o.datatype = 'range(1,4294967296)';
|
||||
|
||||
o = s.option(form.Value, 'packets', _('Packets'), _('Number of packets to be captured.'));
|
||||
o.modalonly = false;
|
||||
o.datatype = 'range(1,4294967296)';
|
||||
|
||||
o = s.option(form.Flag, 'domains', _('Resolve domains'), _("Convert host addresses to names."));
|
||||
|
||||
o = s.option(form.Flag, 'verbose', _('Verbose output'), _("Print the link-level header on each dump line."));
|
||||
|
||||
o = s.option(form.Flag, 'file', _('Save to file'), _("Save capture to pcap file."));
|
||||
|
||||
o = s.option(form.Button, 'start_tcpdump', _('Start tcpdump'), _(''));
|
||||
o.inputstyle = 'apply';
|
||||
o.onclick = ui.createHandlerFn(this, function(section_id, ev) {
|
||||
var downloadBtn = document.querySelector('[data-action="download"]');
|
||||
if (!downloadBtn)
|
||||
return;
|
||||
fs.remove("/tmp/capture.pcap").then(function(replay) {
|
||||
downloadBtn.disabled = true;;
|
||||
}.bind(this)).catch(function(error) {
|
||||
console.log(error);
|
||||
});
|
||||
|
||||
var iface = document.querySelectorAll('[id$="interface"]')[1].value,
|
||||
filter = document.querySelectorAll('[id$="filter"]')[2].value,
|
||||
packets = document.querySelectorAll('[id$="packets"]')[2].value,
|
||||
duration = document.querySelectorAll('[id$="duration"]')[2].value,
|
||||
verbose = document.querySelectorAll('[data-widget-id$="verbose"]')[0].checked,
|
||||
domains = document.querySelectorAll('[data-widget-id$="domains"]')[0].checked,
|
||||
file = document.querySelectorAll('[data-widget-id$="file"]')[0].checked
|
||||
|
||||
var args = {
|
||||
"interface": iface,
|
||||
"filter": filter,
|
||||
"packets": packets,
|
||||
"duration": duration,
|
||||
"verbose": verbose,
|
||||
"domains": domains,
|
||||
"file": file
|
||||
}
|
||||
|
||||
return fs.exec_direct('/usr/libexec/packet_capture_start', [JSON.stringify(args)]).then(function(replay) {
|
||||
var error_position = replay.search("error:");
|
||||
if (error_position != -1){
|
||||
ui.showModal(_(replay.substring(error_position + 6, replay.length)), [
|
||||
E('div', { 'class': 'right' }, [
|
||||
E('button', {
|
||||
'class': 'cbi-button cbi-button-negative important',
|
||||
'click': function(ev) {
|
||||
ui.hideModal();
|
||||
}
|
||||
}, _('Close')),
|
||||
])
|
||||
]);
|
||||
return;
|
||||
}
|
||||
rpc.list.apply(rpc).then(function(res) {
|
||||
for (var k in res) {
|
||||
if (res[k] == "tcpdump" )
|
||||
subscribeTcpdump()
|
||||
}
|
||||
}.bind(this));
|
||||
}.bind(this)).catch(function(error) {
|
||||
console.log(error);
|
||||
});
|
||||
});
|
||||
|
||||
o = s.option(form.Button, 'stop_tcpdump', _('Stop tcpdump'), _(''));
|
||||
o.inputstyle = 'apply';
|
||||
o.onclick = ui.createHandlerFn(this, function(section_id, ev) {
|
||||
if (!eventSource)
|
||||
return;
|
||||
return fs.exec("/usr/libexec/packet_capture_stop").then(function(replay) {
|
||||
eventSource.close();
|
||||
}.bind(this)).catch(function(error) {
|
||||
console.log(error);
|
||||
});
|
||||
});
|
||||
|
||||
o = s.option(form.Button, 'download_file', _('Download capture file'));
|
||||
o.inputstyle = 'action important';
|
||||
o.inputtitle = _('Download');
|
||||
o.data_action = 'download'
|
||||
o.onclick = this.handleDownload;
|
||||
|
||||
L.Poll.add(L.bind(updateButtons, m),1);
|
||||
captureFilePoll = L.bind(updatePollCheckCaptureFileExists, m);
|
||||
L.Poll.add(captureFilePoll,1);
|
||||
|
||||
return m.render();
|
||||
},
|
||||
});
|
99
luci-app-packet-capture/po/fr/packet-capture.po
Normal file
99
luci-app-packet-capture/po/fr/packet-capture.po
Normal file
@ -0,0 +1,99 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2021-03-31 15:07+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationspacket-capture/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.5.2\n"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177
|
||||
msgid "Capture packets with tcpdump."
|
||||
msgstr "Capturez des paquets avec tcpdump."
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:247
|
||||
msgid "Close"
|
||||
msgstr "Fermer"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201
|
||||
msgid "Convert host addresses to names."
|
||||
msgstr "Convertissez les adresses d'hôte en noms."
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:277
|
||||
msgid "Download"
|
||||
msgstr "Téléchargement"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:275
|
||||
msgid "Download capture file"
|
||||
msgstr "Télécharger le fichier de capture"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193
|
||||
msgid "Duration"
|
||||
msgstr "Durée"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193
|
||||
msgid "Duration of packet capturing in seconds."
|
||||
msgstr "Durée de la capture des paquets en secondes."
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189
|
||||
msgid "Filter"
|
||||
msgstr "Filtre"
|
||||
|
||||
#: luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json:3
|
||||
msgid "Grant access to tcpdump ubus object"
|
||||
msgstr "Accorder l'accès à l'objet ubus tcpdump"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:181
|
||||
msgid "Interface"
|
||||
msgstr "Interface"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197
|
||||
msgid "Number of packets to be captured."
|
||||
msgstr "Nombre de paquets à capturer."
|
||||
|
||||
#: luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json:3
|
||||
msgid "Packet Capture"
|
||||
msgstr "Capture de paquets"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177
|
||||
msgid "Packet Capture - Tcpdump"
|
||||
msgstr "Capture de paquets - Tcpdump"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197
|
||||
msgid "Packets"
|
||||
msgstr "Paquets"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203
|
||||
msgid "Print the link-level header on each dump line."
|
||||
msgstr "Imprimez l'en-tête du lien sur chaque ligne de capture."
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201
|
||||
msgid "Resolve domains"
|
||||
msgstr "Résoudre les domaines"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205
|
||||
msgid "Save capture to pcap file."
|
||||
msgstr "Enregistrez la capture dans le fichier pcap."
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205
|
||||
msgid "Save to file"
|
||||
msgstr "Enregistrer dans un fichier"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:207
|
||||
msgid "Start tcpdump"
|
||||
msgstr "Démarrez tcpdump"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:263
|
||||
msgid "Stop tcpdump"
|
||||
msgstr "Arrêter tcpdump"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189
|
||||
msgid "Tcpdump filter like protocol, port etc."
|
||||
msgstr "Filtre pour tcpdump comme le protocole, le port, etc."
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203
|
||||
msgid "Verbose output"
|
||||
msgstr "Sortie verbeuse"
|
90
luci-app-packet-capture/po/templates/packet-capture.pot
Normal file
90
luci-app-packet-capture/po/templates/packet-capture.pot
Normal file
@ -0,0 +1,90 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177
|
||||
msgid "Capture packets with tcpdump."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:247
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201
|
||||
msgid "Convert host addresses to names."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:277
|
||||
msgid "Download"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:275
|
||||
msgid "Download capture file"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193
|
||||
msgid "Duration"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193
|
||||
msgid "Duration of packet capturing in seconds."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json:3
|
||||
msgid "Grant access to tcpdump ubus object"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:181
|
||||
msgid "Interface"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197
|
||||
msgid "Number of packets to be captured."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json:3
|
||||
msgid "Packet Capture"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177
|
||||
msgid "Packet Capture - Tcpdump"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197
|
||||
msgid "Packets"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203
|
||||
msgid "Print the link-level header on each dump line."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201
|
||||
msgid "Resolve domains"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205
|
||||
msgid "Save capture to pcap file."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205
|
||||
msgid "Save to file"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:207
|
||||
msgid "Start tcpdump"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:263
|
||||
msgid "Stop tcpdump"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189
|
||||
msgid "Tcpdump filter like protocol, port etc."
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203
|
||||
msgid "Verbose output"
|
||||
msgstr ""
|
1
luci-app-packet-capture/po/zh-cn
Symbolic link
1
luci-app-packet-capture/po/zh-cn
Symbolic link
@ -0,0 +1 @@
|
||||
zh_Hans
|
99
luci-app-packet-capture/po/zh_Hans/packet-capture.po
Normal file
99
luci-app-packet-capture/po/zh_Hans/packet-capture.po
Normal file
@ -0,0 +1,99 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2021-04-30 16:03+0000\n"
|
||||
"Last-Translator: niergouge <1150108426@qq.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <http://weblate.openmptcprouter.com/"
|
||||
"projects/omr/luciapplicationspacket-capture/zh_Hans/>\n"
|
||||
"Language: zh_Hans\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.5.2\n"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177
|
||||
msgid "Capture packets with tcpdump."
|
||||
msgstr "使用tcpdump捕获数据包。"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:247
|
||||
msgid "Close"
|
||||
msgstr "关闭"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201
|
||||
msgid "Convert host addresses to names."
|
||||
msgstr "将主机地址转换为名称。"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:277
|
||||
msgid "Download"
|
||||
msgstr "下载"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:275
|
||||
msgid "Download capture file"
|
||||
msgstr "下载抓包文件"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193
|
||||
msgid "Duration"
|
||||
msgstr "持续时间"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:193
|
||||
msgid "Duration of packet capturing in seconds."
|
||||
msgstr "抓包时间(以秒为单位)。"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189
|
||||
msgid "Filter"
|
||||
msgstr "过滤器"
|
||||
|
||||
#: luci-app-packet-capture/root/usr/share/rpcd/acl.d/luci-app-packet-capture.json:3
|
||||
msgid "Grant access to tcpdump ubus object"
|
||||
msgstr "授权访问tcpdump ubus对象"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:181
|
||||
msgid "Interface"
|
||||
msgstr "接口"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197
|
||||
msgid "Number of packets to be captured."
|
||||
msgstr "需要抓包的个数。"
|
||||
|
||||
#: luci-app-packet-capture/root/usr/share/luci/menu.d/luci-app-packet-capture.json:3
|
||||
msgid "Packet Capture"
|
||||
msgstr "数据包捕获"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:177
|
||||
msgid "Packet Capture - Tcpdump"
|
||||
msgstr "Tcpdump抓包"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:197
|
||||
msgid "Packets"
|
||||
msgstr "包"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203
|
||||
msgid "Print the link-level header on each dump line."
|
||||
msgstr "打印每个转储行上的链接标题。"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:201
|
||||
msgid "Resolve domains"
|
||||
msgstr "解决域"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205
|
||||
msgid "Save capture to pcap file."
|
||||
msgstr "保存捕获到pcap文件。"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:205
|
||||
msgid "Save to file"
|
||||
msgstr "保存到文件"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:207
|
||||
msgid "Start tcpdump"
|
||||
msgstr "开始tcp转存"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:263
|
||||
msgid "Stop tcpdump"
|
||||
msgstr "停止tcp转存"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:189
|
||||
msgid "Tcpdump filter like protocol, port etc."
|
||||
msgstr "Tcp转存过滤协议,端口等。"
|
||||
|
||||
#: luci-app-packet-capture/htdocs/luci-static/resources/view/packet_capture/tcpdump.js:203
|
||||
msgid "Verbose output"
|
||||
msgstr "详细输出"
|
1
luci-app-packet-capture/root/etc/config/packet_capture
Normal file
1
luci-app-packet-capture/root/etc/config/packet_capture
Normal file
@ -0,0 +1 @@
|
||||
config tcpdump
|
64
luci-app-packet-capture/root/usr/libexec/packet_capture
Executable file
64
luci-app-packet-capture/root/usr/libexec/packet_capture
Executable file
@ -0,0 +1,64 @@
|
||||
#!/usr/bin/env lua
|
||||
|
||||
local ubus = require "ubus"
|
||||
local fs = require "nixio.fs"
|
||||
|
||||
local conn = ubus.connect()
|
||||
if not conn then
|
||||
error("Failed to connect to ubus")
|
||||
return
|
||||
end
|
||||
|
||||
local args = "-n"
|
||||
local duration = ""
|
||||
|
||||
if arg[1] ~= nil then
|
||||
args = arg[1]
|
||||
if arg[2] ~= "" then
|
||||
duration = arg[2]
|
||||
end
|
||||
end
|
||||
|
||||
local filter = fs.stat("/tmp/tcpdump_filter")
|
||||
if filter then
|
||||
args = args .. " -F /tmp/tcpdump_filter"
|
||||
end
|
||||
|
||||
local ubus_objects = {
|
||||
tcpdump = {
|
||||
}
|
||||
}
|
||||
|
||||
conn:add( ubus_objects )
|
||||
|
||||
os.execute("sleep 1")
|
||||
|
||||
local command = "tcpdump -l " .. args .. " 2>&1"
|
||||
|
||||
if duration ~= "" then
|
||||
command = "timeout " .. duration .. " " .. command
|
||||
end
|
||||
|
||||
local pipe = io.popen(command)
|
||||
|
||||
for line in pipe:lines() do
|
||||
local params = {
|
||||
data = line
|
||||
}
|
||||
conn:notify(ubus_objects.tcpdump.__ubusobj, "tcpdump.data", params)
|
||||
end
|
||||
|
||||
local pcap = fs.stat("/tmp/capture.pcap0")
|
||||
if pcap then
|
||||
fs.move("/tmp/capture.pcap0","/tmp/capture.pcap")
|
||||
fs.remove("/tmp/capture.pcap1")
|
||||
end
|
||||
|
||||
if filter then
|
||||
fs.remove("/tmp/tcpdump_filter")
|
||||
end
|
||||
|
||||
conn:close()
|
||||
pipe:close()
|
||||
|
||||
fs.remove("/var/run/packet_capture.pid")
|
69
luci-app-packet-capture/root/usr/libexec/packet_capture_start
Executable file
69
luci-app-packet-capture/root/usr/libexec/packet_capture_start
Executable file
@ -0,0 +1,69 @@
|
||||
#!/bin/sh
|
||||
|
||||
. /usr/share/libubox/jshn.sh
|
||||
|
||||
PIDFILE="/var/run/packet_capture.pid"
|
||||
|
||||
if [ -f "$PIDFILE"];then
|
||||
echo "error: Packet capture is running"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
json_load "$1"
|
||||
json_get_var interface interface
|
||||
json_get_var filter filter
|
||||
json_get_var duration duration
|
||||
json_get_var packets packets
|
||||
json_get_var verbose verbose
|
||||
json_get_var domains domains
|
||||
json_get_var file file
|
||||
|
||||
args="-n"
|
||||
|
||||
if [ "$domains" == "1" ];then
|
||||
args=""
|
||||
fi
|
||||
|
||||
if [ -n "$interface" ];then
|
||||
ip a show "$interface" > /dev/null 2>&1
|
||||
if [ "$?" == "1" ]; then
|
||||
echo "error: Incorrect format of an interface"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
args="$args -i $interface"
|
||||
fi
|
||||
|
||||
if [ -n "$packets" ];then
|
||||
echo "$packets" | egrep '^[0-9]*$'
|
||||
if [ "$?" -eq 0 ];then
|
||||
args="$args -c $packets"
|
||||
else
|
||||
echo "error: Incorrect packets argument"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$verbose" == "1" ];then
|
||||
args="$args -e"
|
||||
fi
|
||||
|
||||
if [ "$file" == "1" ];then
|
||||
mem=$(awk '/MemTotal/ {print $2}' /proc/meminfo)
|
||||
args="$args -W 2 -C $((mem/(1024 * 10))) -w /tmp/capture.pcap -z /usr/libexec/packet_capture_stop"
|
||||
fi
|
||||
|
||||
if [ -n "$filter" ];then
|
||||
tcpdump -i lo -d "$filter" >/dev/null 2>/dev/null
|
||||
if [ $? -eq 1 ];then
|
||||
echo "error: Incorrect filter argument"
|
||||
exit 1
|
||||
fi
|
||||
echo "$filter" > /tmp/tcpdump_filter
|
||||
fi
|
||||
|
||||
(/usr/libexec/packet_capture "$args" "$duration")&
|
||||
|
||||
echo $! > /var/run/packet_capture.pid
|
||||
|
||||
exit 0
|
9
luci-app-packet-capture/root/usr/libexec/packet_capture_stop
Executable file
9
luci-app-packet-capture/root/usr/libexec/packet_capture_stop
Executable file
@ -0,0 +1,9 @@
|
||||
#!/bin/sh
|
||||
|
||||
pid=$(cat /var/run/packet_capture.pid)
|
||||
if [ -n "$pid" ] && grep -sq packet_capture "/proc/$pid/cmdline"; then
|
||||
ppid=$(pgrep -P $pid)
|
||||
kill -TERM $ppid
|
||||
fi
|
||||
|
||||
exit 0
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"admin/services/packet_capture": {
|
||||
"title": "Packet Capture",
|
||||
"order": 90,
|
||||
"action": {
|
||||
"type": "view",
|
||||
"path": "packet_capture/tcpdump"
|
||||
},
|
||||
"depends" : {
|
||||
"acl": [ "luci-app-packet-capture" ],
|
||||
"uci": { "packet_capture": true },
|
||||
"fs": { "/usr/libexec/packet_capture": "executable",
|
||||
"/usr/libexec/packet_capture_start": "executable",
|
||||
"/usr/libexec/packet_capture_stop": "executable"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
{
|
||||
"luci-app-packet-capture": {
|
||||
"description": "Grant access to tcpdump ubus object",
|
||||
"read": {
|
||||
"cgi-io": [ "download", "exec" ],
|
||||
"ubus": {
|
||||
"tcpdump": [ "*" ],
|
||||
"luci": [ "getProcessList" ]
|
||||
},
|
||||
"uci": [ "packet_capture", "system" ],
|
||||
"file": {
|
||||
"/tmp/capture.pcap": [ "read" ]
|
||||
}
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "packet_capture" ],
|
||||
"file": {
|
||||
"/usr/libexec/packet_capture_start": [ "exec" ],
|
||||
"/usr/libexec/packet_capture_stop": [ "exec" ],
|
||||
"/usr/libexec/packet_capture": [ "exec" ],
|
||||
"/tmp/capture.pcap": [ "write" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
15
luci-app-snmpd/Makefile
Normal file
15
luci-app-snmpd/Makefile
Normal file
@ -0,0 +1,15 @@
|
||||
#
|
||||
# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
#
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
LUCI_TITLE:=LuCI SNMPD Interface
|
||||
LUCI_DEPENDS:=+snmpd +snmptrapd +snmp-utils +snmp-mibs
|
||||
|
||||
PKG_LICENSE:=GPLv3
|
||||
|
||||
#include ../luci/luci.mk
|
||||
include $(TOPDIR)/feeds/luci/luci.mk
|
||||
# call BuildPackage - OpenWrt buildroot signature
|
8
luci-app-snmpd/luasrc/controller/snmpd.lua
Normal file
8
luci-app-snmpd/luasrc/controller/snmpd.lua
Normal file
@ -0,0 +1,8 @@
|
||||
local ucic = luci.model.uci.cursor()
|
||||
local dt = require "luci.cbi.datatypes"
|
||||
module("luci.controller.snmpd", package.seeall)
|
||||
|
||||
function index()
|
||||
entry({"admin", "network", "snmpd"}, alias("admin", "network", "snmpd", "index"), _("SNMPd"))
|
||||
entry({"admin", "network", "snmpd", "index"}, cbi("snmpd"))
|
||||
end
|
141
luci-app-snmpd/luasrc/model/cbi/snmpd.lua
Normal file
141
luci-app-snmpd/luasrc/model/cbi/snmpd.lua
Normal file
@ -0,0 +1,141 @@
|
||||
-- Copyright 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
|
||||
-- Licensed to the public under the Apache License 2.0.
|
||||
|
||||
m = Map("snmpd", translate("SNMPd"), translate("SNMPd settings interface (Beta)"))
|
||||
|
||||
s = m:section(TypedSection, "snmpd", translate("General"))
|
||||
s.addremove = false
|
||||
|
||||
enabled = s:option(Flag, "enabled", translate("Enabled"))
|
||||
enabled.rmempty = false
|
||||
|
||||
network = s:option(Value, "network", translate("Networks"))
|
||||
network.template = "cbi/network_netlist"
|
||||
network.widget = "checkbox"
|
||||
network.rmempty = true
|
||||
network.cast = "string"
|
||||
network.nocreate = true
|
||||
|
||||
s = m:section(TypedSection, "system", translate("System"))
|
||||
s.addremove = false
|
||||
|
||||
sysLocation = s:option(Value, "sysLocation", translate("Location"))
|
||||
sysContact = s:option(Value, "sysContact", translate("Contact"))
|
||||
sysName = s:option(Value, "sysName", translate("Name"))
|
||||
--sysServices = s:option(Value, "sysServices", translate("Services"))
|
||||
--sysDescr = s:option(Value, "sysDescr", translate("Description"))
|
||||
--sysObjectID = s:option(Value, "sysObjectID", translate("ObjectID"))
|
||||
|
||||
s = m:section(TypedSection, "com2sec", translate("com2sec security"))
|
||||
s.addremove = true
|
||||
|
||||
secname = s:option(ListValue, "secname", translate("Server"))
|
||||
secname.optional = false
|
||||
secname:value("ro",translate("Read-only"))
|
||||
secname:value("rw",translate("Read-write"))
|
||||
|
||||
source = s:option(Value, "source", translate("Source"))
|
||||
source.datatype = "host"
|
||||
source.optional = false
|
||||
source.rmempty = false
|
||||
|
||||
community = s:option(Value, "community", translate("Community"))
|
||||
community.optional = false
|
||||
community.rmempty = false
|
||||
|
||||
--s = m:section(TypedSection, "com2sec6", translate("com2sec6"))
|
||||
--s.addremove = true
|
||||
|
||||
--secname = s:option(ListValue, "secname", translate("secname"))
|
||||
--secname.optional = false
|
||||
--secname:value("ro",translate("Read-only"))
|
||||
--secname:value("rw",translate("Read-write"))
|
||||
|
||||
--source = s:option(Value, "source", translate("Source"))
|
||||
--source.datatype = "host"
|
||||
--source.optional = false
|
||||
--source.rmempty = false
|
||||
|
||||
--community = s:option(Value, "community", translate("Community"))
|
||||
--community.optional = false
|
||||
--community.rmempty = false
|
||||
|
||||
s = m:section(TypedSection, "group", translate("Group"), translate("Groups help define access methods"))
|
||||
s.addremove = true
|
||||
s.anonymous = false
|
||||
|
||||
secname = s:option(ListValue, "secname", translate("secname"))
|
||||
secname.optional = false
|
||||
secname:value("ro",translate("Read-only"))
|
||||
secname:value("rw",translate("Read-write"))
|
||||
|
||||
group = s:option(Value, "group", translate("Group"))
|
||||
group.optional = false
|
||||
group.rmempty = false
|
||||
|
||||
version = s:option(ListValue, "version", translate("version"))
|
||||
version.optional = false
|
||||
version:value("v1","v1")
|
||||
version:value("v2c","v2c")
|
||||
version:value("usm","usm")
|
||||
|
||||
s = m:section(TypedSection, "access", translate("Access"))
|
||||
s.addremove = true
|
||||
s.anonymous = false
|
||||
|
||||
group = s:option(Value, "group", translate("Group"))
|
||||
group.optional = false
|
||||
group.rmempty = false
|
||||
|
||||
version = s:option(ListValue, "version", translate("version"))
|
||||
version.optional = false
|
||||
version:value("any",translate("any"))
|
||||
version:value("v1","v1")
|
||||
version:value("v2c","v2c")
|
||||
version:value("usm","usm")
|
||||
|
||||
context = s:option(ListValue, "context", translate("Context"))
|
||||
context.optional = false
|
||||
context:value("none","none")
|
||||
|
||||
level = s:option(ListValue, "level", translate("Level"))
|
||||
level.optional = false
|
||||
level:value("noauth",translate("noauth"))
|
||||
level:value("auth",translate("auth"))
|
||||
|
||||
read = s:option(ListValue, "read", translate("Read"))
|
||||
read.optional = false
|
||||
read:value("all","all")
|
||||
read:value("none","none")
|
||||
|
||||
write = s:option(ListValue, "write", translate("Write"))
|
||||
write.optional = false
|
||||
write:value("all","all")
|
||||
write:value("none","none")
|
||||
|
||||
notify = s:option(ListValue, "notify", translate("Notify"))
|
||||
notify.optional = false
|
||||
notify:value("all","all")
|
||||
notify:value("none","none")
|
||||
|
||||
--s = m:section(TypedSection, "engineid", translate("engineid"))
|
||||
--s.addremove = false
|
||||
--s.anonymous = true
|
||||
|
||||
--engineid = s:option(Value, "engineid", translate("engineid"))
|
||||
--engineidtype = s:option(ListValue, "engineidtype", translate("engineidtype"))
|
||||
--engineidtype:value("1",translate("IPv4"))
|
||||
--engineidtype:value("2",translate("IPv6"))
|
||||
--engineidtype:value("3",translate("MAC"))
|
||||
--engineidnic = s:option(Value, "engineidnic", translate("engineidnic"))
|
||||
|
||||
s = m:section(TypedSection, "exec", translate("Exec"))
|
||||
s.addremove = true
|
||||
s.anonymous = true
|
||||
|
||||
miboid = s:option(Value, "miboid", translate("ObjectID"))
|
||||
name = s:option(Value, "name", translate("Name"))
|
||||
prog = s:option(Value, "prog", translate("Program"))
|
||||
args = s:option(Value, "args", translate("Arguments"))
|
||||
|
||||
return m
|
132
luci-app-snmpd/luasrc/view/snmpd.htm
Normal file
132
luci-app-snmpd/luasrc/view/snmpd.htm
Normal file
@ -0,0 +1,132 @@
|
||||
<%+header%>
|
||||
|
||||
<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-18.274.67584-38176e6" data-strings="{"path":{"resource":"\/luci-static\/resources","browser":"\/cgi-bin\/luci\/admin\/filebrowser"}}"></script>
|
||||
|
||||
<%
|
||||
local uci = require("luci.model.uci").cursor()
|
||||
local hosts = uci:get_list("dhcp", uci:get_first("dhcp","dnsmasq"), "ipset")
|
||||
local ips = uci:get_list("omr-bypass", "ips", "ip")
|
||||
local dpi = uci:get_list("omr-bypass", "dpi", "proto")
|
||||
local tmpfile = os.tmpname()
|
||||
local dpi_available_proto = luci.util.execi("cat /proc/net/xt_ndpi/proto | awk '{print $3}' | sort -u | head -n -1")
|
||||
local sys = require "luci.sys"
|
||||
local ifaces = sys.net:devices()
|
||||
local bypassif = uci:get("omr-bypass","defaults","ifname") or ""
|
||||
%>
|
||||
<% if stderr and #stderr > 0 then %><pre class="error"><%=pcdata(stderr)%></pre><% end %>
|
||||
<form class="inline" method="post" action="<%=url('admin/services/omr-bypass/add')%>">
|
||||
<div class="cbi-map">
|
||||
<h2 name="content"><%:SNMPd%></h2>
|
||||
<fieldset class="cbi-section">
|
||||
<legend><%:General%></legend>
|
||||
<div class="cbi-section-descr"></div>
|
||||
<div class="cbi-value">
|
||||
<label class="cbi-value-title"><%:Enabled%></label>
|
||||
<div class="cbi-value-field">
|
||||
<input type="checkbox" name="enabled" class="cbi-input-checkbox" value="1" <% if luci.model.uci.cursor():get("snmpd","general","enabled") == "1" then %>checked<% end %>>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value">
|
||||
network
|
||||
</div>
|
||||
<div class="cbi-value" data-index="1" data-depends="[]"><label class="cbi-value-title" for="cbid.snmpd.cfg10e48a.sysLocation">Location</label>
|
||||
<div class="cbi-value-field">
|
||||
<input data-update="change" id="cbid.snmpd.cfg10e48a.sysLocation" name="cbid.snmpd.cfg10e48a.sysLocation" type="text" class="cbi-input-text" value="office" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-snmpd-cfg10e48a-sysContact" data-index="2" data-depends="[]"><label class="cbi-value-title" for="cbid.snmpd.cfg10e48a.sysContact">Contact</label>
|
||||
<div class="cbi-value-field">
|
||||
<input data-update="change" id="cbid.snmpd.cfg10e48a.sysContact" name="cbid.snmpd.cfg10e48a.sysContact" type="text" class="cbi-input-text" value="bofh@example.com" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-value" id="cbi-snmpd-cfg10e48a-sysName" data-index="3" data-depends="[]"><label class="cbi-value-title" for="cbid.snmpd.cfg10e48a.sysName">Nom</label>
|
||||
<div class="cbi-value-field">
|
||||
<input data-update="change" id="cbid.snmpd.cfg10e48a.sysName" name="cbid.snmpd.cfg10e48a.sysName" type="text" class="cbi-input-text" value="OpenMPTCProuter" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3><%:General%></h3>
|
||||
|
||||
<div class="cbi-section cbi-tblsection">
|
||||
<div class="cbi-section-descr"></div>
|
||||
<div class="table cbi-section-table">
|
||||
<div class="tr cbi-section-table-titles-anonymous">
|
||||
<div class="th cbi-section-table-cell" data-type="value"><%:Domain, IP or network%></div>
|
||||
<div class="th cbi-section-table-cell" data-type="value"><%:Output interface%></div>
|
||||
<div class="th cbi-section-table-cell cbi-section-actions"></div>
|
||||
</div>
|
||||
<div class="tr cbi-section-table-row" id="cbi-omr-bypass-cfg">
|
||||
<div class="td cbi-value-field" data-name="name" data-type="value" data-title="Domain">
|
||||
<div id="cbi-omr-bypass-cfg-domain" data-index="" data-depends="[]">
|
||||
<input data-update="change" id="cbid.omr.bypass.cfg.domain"" name="cbid.omr.bypass.cfg.domain" type="text" class="cbi-input-text" value="" data-optional="true" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="td cbi-value-field" data-name="interface" data-type="value" data-title="<%:Interface%>">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.omr.bypass.cfg.interface" name="cbid.omr.bypass.cfg.interface" size="1">
|
||||
<option id="cbid.omr.bypass.cfg.interface-all" value="all" data-index="1" data-depends="[]"><%:All%></option>
|
||||
<%
|
||||
for _, iface in ipairs(ifaces) do
|
||||
if not (iface == "lo" or iface:match("^ifb.*")) then
|
||||
%>
|
||||
<option value="<%=iface%>"><%=iface%></option>
|
||||
<%
|
||||
end
|
||||
end
|
||||
%>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-section-create cbi-tblsection-create">
|
||||
<input class="cbi-button cbi-button-add" type="submit" value="Add" name="cbi.cts.omr.bypass.domains" title="<%:Add%>" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-section cbi-tblsection" id="cbi-omr-bypass-proto">
|
||||
<h3><%:Protocols%></h3>
|
||||
<div class="cbi-section-descr"></div>
|
||||
<div class="table cbi-section-table">
|
||||
<div class="tr cbi-section-table-titles-anonymous">
|
||||
<div class="th cbi-section-table-cell" data-type="value"><%:Protocols%></div>
|
||||
<div class="th cbi-section-table-cell" data-type="value"><%:Output interface%></div>
|
||||
<div class="th cbi-section-table-cell cbi-section-actions"></div>
|
||||
</div>
|
||||
<div class="tr cbi-section-table-row" id="cbi-omr-bypass-cfg">
|
||||
<div class="td cbi-value-field" data-name="name" data-type="value" data-title="Domain">
|
||||
<%
|
||||
local allprt=""""
|
||||
local protos = {}
|
||||
for l in io.lines("/proc/net/xt_ndpi/proto") do
|
||||
local a,b,c,d = l:match('(%w+) (%w+)')
|
||||
if b ~= "2" and not string.match(b,"custom") then
|
||||
table.insert(protos,b)
|
||||
end
|
||||
end
|
||||
table.sort(protos)
|
||||
for _,b in ipairs(protos) do
|
||||
allprt=allprt .. ","" .. b .. """
|
||||
end
|
||||
%>
|
||||
<div data-prefix="cbid.omr.bypass.cfg.proto" data-browser-path="" data-dynlist="[[<%=allprt%>],[<%=allprt%>],null,false]">
|
||||
<div id="cbi-omr-bypass-cfg-proto" data-index="" data-depends="[]">
|
||||
<input data-update="change" id="cbid.omr.bypass.cfg.proto" name="cbid.omr.bypass.cfg.proto" type="text" class="cbi-input-text" value="" data-optional="true" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="td cbi-value-field" data-name="interface" data-type="value" data-title="<%:Interface%>">
|
||||
<select class="cbi-input-select" data-update="change" id="cbid.omr.bypass.cfg.interface" name="cbid.omr.bypass.cfg.interface" size="1">
|
||||
<option id="cbid.omr.bypass.cfg.interface-all" value="all" data-index="1" data-depends="[]"><%:All%></option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-section-create cbi-tblsection-create">
|
||||
<input class="cbi-button cbi-button-add" type="submit" value="Add" name="cbi.cts.omr.bypass.domains" title="<%:Add%>" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cbi-page-actions">
|
||||
<input type="hidden" name="token" value="<%=token%>" />
|
||||
<button class="btn" type="submit">Submit</button>
|
||||
</div>
|
||||
</form>
|
||||
<script type="text/javascript">cbi_init();</script>
|
||||
<%+footer%>
|
184
luci-app-snmpd/po/de/snmpd.po
Normal file
184
luci-app-snmpd/po/de/snmpd.po
Normal file
@ -0,0 +1,184 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-10-05 12:39+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: German <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationssnmpd/de/>\n"
|
||||
"Language: de\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:82
|
||||
msgid "Access"
|
||||
msgstr "Zugriff"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:81
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:122
|
||||
msgid "Add"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:66
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:116
|
||||
msgid "All"
|
||||
msgstr "alle"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:139
|
||||
msgid "Arguments"
|
||||
msgstr "Parameter"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:42
|
||||
msgid "Community"
|
||||
msgstr "Community"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:23
|
||||
msgid "Contact"
|
||||
msgstr "Kontakt"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:97
|
||||
msgid "Context"
|
||||
msgstr "Umgebung"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:54
|
||||
msgid "Domain, IP or network"
|
||||
msgstr "FQDN, IP-Adresse oder CIDR-Netzmaske"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:9
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:24
|
||||
msgid "Enabled"
|
||||
msgstr "Aktiv"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:132
|
||||
msgid "Exec"
|
||||
msgstr "Ausführung"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
|
||||
msgid "General"
|
||||
msgstr "Allgemein"
|
||||
|
||||
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
|
||||
msgid "Grant UCI access for luci-app-snmpd"
|
||||
msgstr "UCI-Zugriff für luci-app-snmpd gewähren"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:72
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:86
|
||||
msgid "Group"
|
||||
msgstr "Gruppe"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
msgid "Groups help define access methods"
|
||||
msgstr "Gruppen ermöglichen es, Zugriffsmethoden festzulegen"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:64
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:114
|
||||
msgid "Interface"
|
||||
msgstr "Schnittstelle"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
||||
msgid "Level"
|
||||
msgstr "Ebene"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
|
||||
msgid "Location"
|
||||
msgstr "Ort"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137
|
||||
msgid "Name"
|
||||
msgstr "Name"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:12
|
||||
msgid "Networks"
|
||||
msgstr "Netzwerke"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116
|
||||
msgid "Notify"
|
||||
msgstr "Benachrichten"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
|
||||
msgid "ObjectID"
|
||||
msgstr "Objekt-Identifikation"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:90
|
||||
msgid "Output interface"
|
||||
msgstr "Ausgabe-Anschluss"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138
|
||||
msgid "Program"
|
||||
msgstr "Programm"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
|
||||
msgid "Protocols"
|
||||
msgstr "Protokolle"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
|
||||
msgid "Read"
|
||||
msgstr "Lesen"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
|
||||
msgid "Read-only"
|
||||
msgstr "Nur-Lesen"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
|
||||
msgid "Read-write"
|
||||
msgstr "Lesen/Schreiben"
|
||||
|
||||
#: luci-app-snmpd/luasrc/controller/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:19
|
||||
#: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3
|
||||
msgid "SNMPd"
|
||||
msgstr "SNMPd"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
msgid "SNMPd settings interface (Beta)"
|
||||
msgstr "SNMPd Einstellungen (Beta)"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
|
||||
msgid "Server"
|
||||
msgstr "Server"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
|
||||
msgid "Source"
|
||||
msgstr "Quelle"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
|
||||
msgid "System"
|
||||
msgstr "System"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
|
||||
msgid "Write"
|
||||
msgstr "Schreiben"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
|
||||
msgid "any"
|
||||
msgstr "jede"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
|
||||
msgid "auth"
|
||||
msgstr "Authentifizierung"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
|
||||
msgid "com2sec security"
|
||||
msgstr "com2sec-Sicherheit"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
|
||||
msgid "noauth"
|
||||
msgstr "noauth/offen"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
|
||||
msgid "secname"
|
||||
msgstr "sec-Name"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
|
||||
msgid "version"
|
||||
msgstr "Version"
|
184
luci-app-snmpd/po/fr/snmpd.po
Normal file
184
luci-app-snmpd/po/fr/snmpd.po
Normal file
@ -0,0 +1,184 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2022-02-19 07:53+0000\n"
|
||||
"Last-Translator: Weblate Admin <contact@openmptcprouter.com>\n"
|
||||
"Language-Team: French <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationssnmpd/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.6.1\n"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:82
|
||||
msgid "Access"
|
||||
msgstr "Accès"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:81
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:122
|
||||
msgid "Add"
|
||||
msgstr "Ajouter"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:66
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:116
|
||||
msgid "All"
|
||||
msgstr "Tout"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:139
|
||||
msgid "Arguments"
|
||||
msgstr "Arguments"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:42
|
||||
msgid "Community"
|
||||
msgstr "Communauté"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:23
|
||||
msgid "Contact"
|
||||
msgstr "Contact"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:97
|
||||
msgid "Context"
|
||||
msgstr "Contexte"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:54
|
||||
msgid "Domain, IP or network"
|
||||
msgstr "Domaine, IP ou réseau"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:9
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:24
|
||||
msgid "Enabled"
|
||||
msgstr "Activer"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:132
|
||||
msgid "Exec"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
|
||||
msgid "General"
|
||||
msgstr "Général"
|
||||
|
||||
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
|
||||
msgid "Grant UCI access for luci-app-snmpd"
|
||||
msgstr "Accorder l'accès UCI pour luci-app-snmpd"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:72
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:86
|
||||
msgid "Group"
|
||||
msgstr "Groupe"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
msgid "Groups help define access methods"
|
||||
msgstr "Les groupes aident à définir les méthodes d'accès"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:64
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:114
|
||||
msgid "Interface"
|
||||
msgstr "Interface"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
||||
msgid "Level"
|
||||
msgstr "Niveau"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
|
||||
msgid "Location"
|
||||
msgstr "Localisation"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:12
|
||||
msgid "Networks"
|
||||
msgstr "Réseaux"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116
|
||||
msgid "Notify"
|
||||
msgstr "Notifier"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
|
||||
msgid "ObjectID"
|
||||
msgstr "ObjectID"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:90
|
||||
msgid "Output interface"
|
||||
msgstr "Interface de sortie"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138
|
||||
msgid "Program"
|
||||
msgstr "Programme"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
|
||||
msgid "Protocols"
|
||||
msgstr "Protocoles"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
|
||||
msgid "Read"
|
||||
msgstr "Lecture"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
|
||||
msgid "Read-only"
|
||||
msgstr "Lecture Seule"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
|
||||
msgid "Read-write"
|
||||
msgstr "Lecture-écriture"
|
||||
|
||||
#: luci-app-snmpd/luasrc/controller/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:19
|
||||
#: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3
|
||||
msgid "SNMPd"
|
||||
msgstr "SNMPd"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
msgid "SNMPd settings interface (Beta)"
|
||||
msgstr "Paramètres du protocole SNMPd (Beta)"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
|
||||
msgid "Server"
|
||||
msgstr "Serveur"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
|
||||
msgid "Source"
|
||||
msgstr "Source"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
|
||||
msgid "System"
|
||||
msgstr "Système"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
|
||||
msgid "Write"
|
||||
msgstr "Ecriture"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
|
||||
msgid "any"
|
||||
msgstr "Tout"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
|
||||
msgid "auth"
|
||||
msgstr "Authentification"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
|
||||
msgid "com2sec security"
|
||||
msgstr "com2sec security"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
|
||||
msgid "noauth"
|
||||
msgstr "pas d'authentification"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
|
||||
msgid "secname"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
|
||||
msgid "version"
|
||||
msgstr "version"
|
184
luci-app-snmpd/po/it/snmpd.po
Normal file
184
luci-app-snmpd/po/it/snmpd.po
Normal file
@ -0,0 +1,184 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2022-02-21 21:14+0000\n"
|
||||
"Last-Translator: Deleted User <noreply+28@weblate.org>\n"
|
||||
"Language-Team: Italian <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationssnmpd/it/>\n"
|
||||
"Language: it\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.10.1\n"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:82
|
||||
msgid "Access"
|
||||
msgstr "Accesso"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:81
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:122
|
||||
msgid "Add"
|
||||
msgstr "Aggiungi"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:66
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:116
|
||||
msgid "All"
|
||||
msgstr "Tutti"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:139
|
||||
msgid "Arguments"
|
||||
msgstr "Parametri"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:42
|
||||
msgid "Community"
|
||||
msgstr "Community"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:23
|
||||
msgid "Contact"
|
||||
msgstr "Contatto"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:97
|
||||
msgid "Context"
|
||||
msgstr "Contesto"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:54
|
||||
msgid "Domain, IP or network"
|
||||
msgstr "Dominio, IP o rete"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:9
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:24
|
||||
msgid "Enabled"
|
||||
msgstr "Abilitato"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:132
|
||||
msgid "Exec"
|
||||
msgstr "Esegui"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
|
||||
msgid "General"
|
||||
msgstr "Generale"
|
||||
|
||||
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
|
||||
msgid "Grant UCI access for luci-app-snmpd"
|
||||
msgstr "Concedi l'accesso UCI per luci-app-snmpd"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:72
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:86
|
||||
msgid "Group"
|
||||
msgstr "Gruppo"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
msgid "Groups help define access methods"
|
||||
msgstr "I gruppi aiutano a definire i metodi di accesso"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:64
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:114
|
||||
msgid "Interface"
|
||||
msgstr "Interfaccia"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
||||
msgid "Level"
|
||||
msgstr "Livello"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
|
||||
msgid "Location"
|
||||
msgstr "Sede"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:12
|
||||
msgid "Networks"
|
||||
msgstr "Reti"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116
|
||||
msgid "Notify"
|
||||
msgstr "Notificare"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
|
||||
msgid "ObjectID"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:90
|
||||
msgid "Output interface"
|
||||
msgstr "Interfaccia di output"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138
|
||||
msgid "Program"
|
||||
msgstr "Programma"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
|
||||
msgid "Protocols"
|
||||
msgstr "Protocollo"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
|
||||
msgid "Read"
|
||||
msgstr "Leggi"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
|
||||
msgid "Read-only"
|
||||
msgstr "Sola lettura"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
|
||||
msgid "Read-write"
|
||||
msgstr "Leggi-Scrivi"
|
||||
|
||||
#: luci-app-snmpd/luasrc/controller/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:19
|
||||
#: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3
|
||||
msgid "SNMPd"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
msgid "SNMPd settings interface (Beta)"
|
||||
msgstr "Interfaccia delle impostazioni SNMPd (Beta)"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
|
||||
msgid "Server"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
|
||||
msgid "Source"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
|
||||
msgid "System"
|
||||
msgstr "Sistema"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
|
||||
msgid "Write"
|
||||
msgstr "Scrittura"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
|
||||
msgid "any"
|
||||
msgstr "qualsiasi"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
|
||||
msgid "auth"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
|
||||
msgid "com2sec security"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
|
||||
msgid "noauth"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
|
||||
msgid "secname"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
|
||||
msgid "version"
|
||||
msgstr "versione"
|
184
luci-app-snmpd/po/oc/snmpd.po
Normal file
184
luci-app-snmpd/po/oc/snmpd.po
Normal file
@ -0,0 +1,184 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2020-08-31 17:15+0000\n"
|
||||
"Last-Translator: Quentin PAGÈS <githubou@quentino.fr>\n"
|
||||
"Language-Team: Occitan <http://weblate.openmptcprouter.com/projects/omr/"
|
||||
"luciapplicationssnmpd/oc/>\n"
|
||||
"Language: oc\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.0.4\n"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:82
|
||||
msgid "Access"
|
||||
msgstr "Accès"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:81
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:122
|
||||
msgid "Add"
|
||||
msgstr "Ajustar"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:66
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:116
|
||||
msgid "All"
|
||||
msgstr "Tot"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:139
|
||||
msgid "Arguments"
|
||||
msgstr "Arguments"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:42
|
||||
msgid "Community"
|
||||
msgstr "Comunautat"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:23
|
||||
msgid "Contact"
|
||||
msgstr "Contacte"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:97
|
||||
msgid "Context"
|
||||
msgstr "Contèxt"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:54
|
||||
msgid "Domain, IP or network"
|
||||
msgstr "Domeni, IP o ret"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:9
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:24
|
||||
msgid "Enabled"
|
||||
msgstr "Activat"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:132
|
||||
msgid "Exec"
|
||||
msgstr "Exec"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
|
||||
msgid "General"
|
||||
msgstr "General"
|
||||
|
||||
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
|
||||
msgid "Grant UCI access for luci-app-snmpd"
|
||||
msgstr "Acordar l'accès UCI a luci-app-snmpd"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:72
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:86
|
||||
msgid "Group"
|
||||
msgstr "Grop"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
msgid "Groups help define access methods"
|
||||
msgstr "Los grops ajudan a gerir los metòdes d'accès"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:64
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:114
|
||||
msgid "Interface"
|
||||
msgstr "Interfàcia"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
||||
msgid "Level"
|
||||
msgstr "Nivèl"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
|
||||
msgid "Location"
|
||||
msgstr "Emplaçament"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:12
|
||||
msgid "Networks"
|
||||
msgstr "Rets"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116
|
||||
msgid "Notify"
|
||||
msgstr "Notificar"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
|
||||
msgid "ObjectID"
|
||||
msgstr "ObjectID"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:90
|
||||
msgid "Output interface"
|
||||
msgstr "Interfàcia de sortida"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138
|
||||
msgid "Program"
|
||||
msgstr "Programa"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
|
||||
msgid "Protocols"
|
||||
msgstr "Protocòls"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
|
||||
msgid "Read"
|
||||
msgstr "Lectura"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
|
||||
msgid "Read-only"
|
||||
msgstr "Lectura sola"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
|
||||
msgid "Read-write"
|
||||
msgstr "Lectura-escritura"
|
||||
|
||||
#: luci-app-snmpd/luasrc/controller/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:19
|
||||
#: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3
|
||||
msgid "SNMPd"
|
||||
msgstr "SNMPd"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
msgid "SNMPd settings interface (Beta)"
|
||||
msgstr "Interfàcia de paramètres SNMPd (Beta)"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
|
||||
msgid "Server"
|
||||
msgstr "Servidor"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
|
||||
msgid "Source"
|
||||
msgstr "Font"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
|
||||
msgid "System"
|
||||
msgstr "Sistèma"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
|
||||
msgid "Write"
|
||||
msgstr "Escritura"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
|
||||
msgid "any"
|
||||
msgstr "Quin que siá"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
|
||||
msgid "auth"
|
||||
msgstr "auth"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
|
||||
msgid "com2sec security"
|
||||
msgstr "seguretat com2sec"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
|
||||
msgid "noauth"
|
||||
msgstr "noauth"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
|
||||
msgid "secname"
|
||||
msgstr "secname"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
|
||||
msgid "version"
|
||||
msgstr "version"
|
175
luci-app-snmpd/po/templates/snmpd.pot
Normal file
175
luci-app-snmpd/po/templates/snmpd.pot
Normal file
@ -0,0 +1,175 @@
|
||||
msgid ""
|
||||
msgstr "Content-Type: text/plain; charset=UTF-8"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:82
|
||||
msgid "Access"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:81
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:122
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:66
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:116
|
||||
msgid "All"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:139
|
||||
msgid "Arguments"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:42
|
||||
msgid "Community"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:23
|
||||
msgid "Contact"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:97
|
||||
msgid "Context"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:54
|
||||
msgid "Domain, IP or network"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:9
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:24
|
||||
msgid "Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:132
|
||||
msgid "Exec"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
|
||||
msgid "General"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
|
||||
msgid "Grant UCI access for luci-app-snmpd"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:72
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:86
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
msgid "Groups help define access methods"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:64
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:114
|
||||
msgid "Interface"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
||||
msgid "Level"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
|
||||
msgid "Location"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:12
|
||||
msgid "Networks"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116
|
||||
msgid "Notify"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
|
||||
msgid "ObjectID"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:90
|
||||
msgid "Output interface"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138
|
||||
msgid "Program"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
|
||||
msgid "Protocols"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
|
||||
msgid "Read"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
|
||||
msgid "Read-only"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
|
||||
msgid "Read-write"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/controller/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:19
|
||||
#: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3
|
||||
msgid "SNMPd"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
msgid "SNMPd settings interface (Beta)"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
|
||||
msgid "Server"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
|
||||
msgid "Source"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
|
||||
msgid "System"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
|
||||
msgid "Write"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
|
||||
msgid "any"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
|
||||
msgid "auth"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
|
||||
msgid "com2sec security"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
|
||||
msgid "noauth"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
|
||||
msgid "secname"
|
||||
msgstr ""
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
|
||||
msgid "version"
|
||||
msgstr ""
|
1
luci-app-snmpd/po/zh-cn
Symbolic link
1
luci-app-snmpd/po/zh-cn
Symbolic link
@ -0,0 +1 @@
|
||||
zh_Hans
|
184
luci-app-snmpd/po/zh_Hans/snmpd.po
Normal file
184
luci-app-snmpd/po/zh_Hans/snmpd.po
Normal file
@ -0,0 +1,184 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"PO-Revision-Date: 2021-05-05 11:40+0000\n"
|
||||
"Last-Translator: niergouge <1150108426@qq.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <http://weblate.openmptcprouter.com/"
|
||||
"projects/omr/luciapplicationssnmpd/zh_Hans/>\n"
|
||||
"Language: zh_Hans\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.6.1\n"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:82
|
||||
msgid "Access"
|
||||
msgstr "访问"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:81
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:122
|
||||
msgid "Add"
|
||||
msgstr "添加"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:66
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:116
|
||||
msgid "All"
|
||||
msgstr "所有"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:139
|
||||
msgid "Arguments"
|
||||
msgstr "理由"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:42
|
||||
msgid "Community"
|
||||
msgstr "公共"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:23
|
||||
msgid "Contact"
|
||||
msgstr "联系"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:97
|
||||
msgid "Context"
|
||||
msgstr "语境"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:54
|
||||
msgid "Domain, IP or network"
|
||||
msgstr "域,IP或网络"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:9
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:24
|
||||
msgid "Enabled"
|
||||
msgstr "启用"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:132
|
||||
msgid "Exec"
|
||||
msgstr "执行"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:21
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:48
|
||||
msgid "General"
|
||||
msgstr "通用"
|
||||
|
||||
#: luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json:3
|
||||
msgid "Grant UCI access for luci-app-snmpd"
|
||||
msgstr "授予UCI访问luci-app-snmpd的权限"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:72
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:86
|
||||
msgid "Group"
|
||||
msgstr "组"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:63
|
||||
msgid "Groups help define access methods"
|
||||
msgstr "定义访问组帮助方法"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:64
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:114
|
||||
msgid "Interface"
|
||||
msgstr "接口"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:101
|
||||
msgid "Level"
|
||||
msgstr "级别"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:22
|
||||
msgid "Location"
|
||||
msgstr "位置"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:24
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:137
|
||||
msgid "Name"
|
||||
msgstr "名称"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:12
|
||||
msgid "Networks"
|
||||
msgstr "网络"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:116
|
||||
msgid "Notify"
|
||||
msgstr "通知"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:136
|
||||
msgid "ObjectID"
|
||||
msgstr "对象ID"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:55
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:90
|
||||
msgid "Output interface"
|
||||
msgstr "输出接口"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:138
|
||||
msgid "Program"
|
||||
msgstr "程序"
|
||||
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:85
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:89
|
||||
msgid "Protocols"
|
||||
msgstr "协议"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:106
|
||||
msgid "Read"
|
||||
msgstr "读取"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:34
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:69
|
||||
msgid "Read-only"
|
||||
msgstr "只读"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:35
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:70
|
||||
msgid "Read-write"
|
||||
msgstr "读写"
|
||||
|
||||
#: luci-app-snmpd/luasrc/controller/snmpd.lua:6
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
#: luci-app-snmpd/luasrc/view/snmpd.htm:19
|
||||
#: luci-app-snmpd/root/usr/share/luci/menu.d/luci-app-snmpd.json:3
|
||||
msgid "SNMPd"
|
||||
msgstr "SNMPd设置"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:4
|
||||
msgid "SNMPd settings interface (Beta)"
|
||||
msgstr "SNMPd设置界面(测试版)"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:32
|
||||
msgid "Server"
|
||||
msgstr "服务器"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:37
|
||||
msgid "Source"
|
||||
msgstr "源"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:19
|
||||
msgid "System"
|
||||
msgstr "系统"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:111
|
||||
msgid "Write"
|
||||
msgstr "写"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:92
|
||||
msgid "any"
|
||||
msgstr "任何"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:104
|
||||
msgid "auth"
|
||||
msgstr "认证"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:29
|
||||
msgid "com2sec security"
|
||||
msgstr "com2sec安全"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:103
|
||||
msgid "noauth"
|
||||
msgstr "无认证"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:67
|
||||
msgid "secname"
|
||||
msgstr "第二名称"
|
||||
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:76
|
||||
#: luci-app-snmpd/luasrc/model/cbi/snmpd.lua:90
|
||||
msgid "version"
|
||||
msgstr "版本"
|
91
luci-app-snmpd/root/etc/config/snmpd
Normal file
91
luci-app-snmpd/root/etc/config/snmpd
Normal file
@ -0,0 +1,91 @@
|
||||
|
||||
config agent
|
||||
option agentaddress 'UDP:161,UDP6:161'
|
||||
|
||||
config agentx
|
||||
option agentxsocket '/var/run/agentx.sock'
|
||||
|
||||
config com2sec 'public'
|
||||
option secname 'ro'
|
||||
option source 'default'
|
||||
option community 'public'
|
||||
|
||||
config com2sec 'private'
|
||||
option secname 'rw'
|
||||
option source 'localhost'
|
||||
option community 'private'
|
||||
|
||||
config group 'public_v1'
|
||||
option group 'public'
|
||||
option version 'v1'
|
||||
option secname 'ro'
|
||||
|
||||
config group 'public_v2c'
|
||||
option group 'public'
|
||||
option version 'v2c'
|
||||
option secname 'ro'
|
||||
|
||||
config group 'public_usm'
|
||||
option group 'public'
|
||||
option version 'usm'
|
||||
option secname 'ro'
|
||||
|
||||
config group 'private_v1'
|
||||
option group 'private'
|
||||
option version 'v1'
|
||||
option secname 'rw'
|
||||
|
||||
config group 'private_v2c'
|
||||
option group 'private'
|
||||
option version 'v2c'
|
||||
option secname 'rw'
|
||||
|
||||
config group 'private_usm'
|
||||
option group 'private'
|
||||
option version 'usm'
|
||||
option secname 'rw'
|
||||
|
||||
config view 'all'
|
||||
option viewname 'all'
|
||||
option type 'included'
|
||||
option oid '.1'
|
||||
|
||||
config access 'public_access'
|
||||
option group 'public'
|
||||
option context 'none'
|
||||
option version 'any'
|
||||
option level 'noauth'
|
||||
option prefix 'exact'
|
||||
option read 'all'
|
||||
option write 'none'
|
||||
option notify 'none'
|
||||
|
||||
config access 'private_access'
|
||||
option group 'private'
|
||||
option context 'none'
|
||||
option version 'any'
|
||||
option level 'noauth'
|
||||
option prefix 'exact'
|
||||
option read 'all'
|
||||
option write 'all'
|
||||
option notify 'all'
|
||||
|
||||
config system
|
||||
option sysLocation 'office'
|
||||
option sysContact 'bofh@example.com'
|
||||
option sysName 'OpenMPTCProuter'
|
||||
|
||||
config exec
|
||||
option name 'filedescriptors'
|
||||
option prog '/bin/cat'
|
||||
option args '/proc/sys/fs/file-nr'
|
||||
|
||||
config engineid
|
||||
option engineidtype '3'
|
||||
option engineidnic 'eth0'
|
||||
|
||||
config snmpd 'general'
|
||||
list network 'lan'
|
||||
option enabled '0'
|
||||
option ipv6cpipv4 '1'
|
||||
|
349
luci-app-snmpd/root/etc/init.d/snmpd
Executable file
349
luci-app-snmpd/root/etc/init.d/snmpd
Executable file
@ -0,0 +1,349 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2008 OpenWrt.org
|
||||
START=50
|
||||
|
||||
USE_PROCD=1
|
||||
PROG="/usr/sbin/snmpd"
|
||||
|
||||
CONFIGFILE="/var/run/snmpd.conf"
|
||||
|
||||
snmpd_agent_add() {
|
||||
local cfg="$1"
|
||||
|
||||
config_get agentaddress "$cfg" agentaddress
|
||||
[ -n "$agentaddress" ] || return 0
|
||||
echo "agentaddress $agentaddress" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_agentx_add() {
|
||||
local cfg="$1"
|
||||
echo "master agentx" >> $CONFIGFILE
|
||||
config_get agentxsocket "$cfg" agentxsocket
|
||||
[ -n "$agentxsocket" ] && echo "agentXSocket $agentxsocket" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_system_add() {
|
||||
local cfg="$1"
|
||||
config_get syslocation "$cfg" sysLocation
|
||||
[ -n "$syslocation" ] && echo "sysLocation $syslocation" >> $CONFIGFILE
|
||||
config_get syscontact "$cfg" sysContact
|
||||
[ -n "$syscontact" ] && echo "sysContact $syscontact" >> $CONFIGFILE
|
||||
config_get sysname "$cfg" sysName
|
||||
[ -n "$sysname" ] && echo "sysName $sysname" >> $CONFIGFILE
|
||||
config_get sysservice "$cfg" sysService
|
||||
[ -n "$sysservice" ] && echo "sysService $sysservice" >> $CONFIGFILE
|
||||
config_get sysdescr "$cfg" sysDescr
|
||||
[ -n "$sysdescr" ] && echo "sysDescr $sysdescr" >> $CONFIGFILE
|
||||
config_get sysobjectid "$cfg" sysObjectID
|
||||
[ -n "$sysobjectid" ] && echo "sysObjectID $sysobjectid" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_com2sec_add() {
|
||||
local cfg="$1"
|
||||
config_get secname "$cfg" secname
|
||||
[ -n "$secname" ] || return 0
|
||||
config_get source "$cfg" source
|
||||
[ -n "$source" ] || return 0
|
||||
config_get community "$cfg" community
|
||||
[ -n "$community" ] || return 0
|
||||
echo "com2sec $secname $source $community" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_com2sec6_add() {
|
||||
local cfg="$1"
|
||||
config_get secname "$cfg" secname
|
||||
[ -n "$secname" ] || return 0
|
||||
config_get source "$cfg" source
|
||||
[ -n "$source" ] || return 0
|
||||
config_get community "$cfg" community
|
||||
[ -n "$community" ] || return 0
|
||||
echo "com2sec6 $secname $source $community" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_group_add() {
|
||||
local cfg="$1"
|
||||
config_get group "$cfg" group
|
||||
[ -n "$group" ] || return 0
|
||||
config_get version "$cfg" version
|
||||
[ -n "$version" ] || return 0
|
||||
config_get secname "$cfg" secname
|
||||
[ -n "$secname" ] || return 0
|
||||
echo "group $group $version $secname" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_view_add() {
|
||||
local cfg="$1"
|
||||
config_get viewname "$cfg" viewname
|
||||
[ -n "$viewname" ] || return 0
|
||||
config_get type "$cfg" type
|
||||
[ -n "$type" ] || return 0
|
||||
config_get oid "$cfg" oid
|
||||
[ -n "$oid" ] || return 0
|
||||
# optional mask
|
||||
config_get mask "$cfg" mask
|
||||
echo "view $viewname $type $oid $mask" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_access_add() {
|
||||
local cfg="$1"
|
||||
config_get group "$cfg" group
|
||||
[ -n "$group" ] || return 0
|
||||
config_get context "$cfg" context
|
||||
[ -n $context ] || return 0
|
||||
[ "$context" == "none" ] && context='""'
|
||||
config_get version "$cfg" version
|
||||
[ -n "$version" ] || return 0
|
||||
config_get level "$cfg" level
|
||||
[ -n "$level" ] || return 0
|
||||
config_get prefix "$cfg" prefix
|
||||
[ -n "$prefix" ] || return 0
|
||||
config_get read "$cfg" read
|
||||
[ -n "$read" ] || return 0
|
||||
config_get write "$cfg" write
|
||||
[ -n "$write" ] || return 0
|
||||
config_get notify "$cfg" notify
|
||||
[ -n "$notify" ] || return 0
|
||||
echo "access $group $context $version $level $prefix $read $write $notify" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_trap_hostname_add() {
|
||||
local cfg="$1"
|
||||
config_get hostname "$cfg" HostName
|
||||
config_get port "$cfg" Port
|
||||
config_get community "$cfg" Community
|
||||
config_get type "$cfg" Type
|
||||
echo "$type $hostname $community $port" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_trap_ip_add() {
|
||||
local cfg="$1"
|
||||
config_get host_ip "$cfg" HostIP
|
||||
config_get port "$cfg" Port
|
||||
config_get community "$cfg" Community
|
||||
config_get type "$cfg" Type
|
||||
echo "$type $host_ip $community $port" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_access_default_add() {
|
||||
local cfg="$1"
|
||||
config_get mode "$cfg" Mode
|
||||
config_get community "$cfg" CommunityName
|
||||
config_get oidrestrict "$cfg" RestrictOID
|
||||
config_get oid "$cfg" RestrictedOID
|
||||
echo -n "$mode $community default" >> $CONFIGFILE
|
||||
[ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
|
||||
[ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_access_HostName_add() {
|
||||
local cfg="$1"
|
||||
config_get hostname "$cfg" HostName
|
||||
config_get mode "$cfg" Mode
|
||||
config_get community "$cfg" CommunityName
|
||||
config_get oidrestrict "$cfg" RestrictOID
|
||||
config_get oid "$cfg" RestrictedOID
|
||||
echo -n "$mode $community $hostname" >> $CONFIGFILE
|
||||
[ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
|
||||
[ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_access_HostIP_add() {
|
||||
local cfg="$1"
|
||||
config_get host_ip "$cfg" HostIP
|
||||
config_get ip_mask "$cfg" IPMask
|
||||
config_get mode "$cfg" Mode
|
||||
config_get community "$cfg" CommunityName
|
||||
config_get oidrestrict "$cfg" RestrictOID
|
||||
config_get oid "$cfg" RestrictedOID
|
||||
echo -n "$mode $community $host_ip/$ip_mask" >> $CONFIGFILE
|
||||
[ "$oidrestrict" == "yes" ] && echo " $oid" >> $CONFIGFILE
|
||||
[ "$oidrestrict" == "no" ] && echo "" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_pass_add() {
|
||||
local cfg="$1"
|
||||
local pass='pass'
|
||||
|
||||
config_get miboid "$cfg" miboid
|
||||
[ -n "$miboid" ] || return 0
|
||||
config_get prog "$cfg" prog
|
||||
[ -n "$prog" ] || return 0
|
||||
config_get_bool persist "$cfg" persist 0
|
||||
[ $persist -ne 0 ] && pass='pass_persist'
|
||||
config_get priority "$cfg" priority
|
||||
priority=${priority:+-p $priority}
|
||||
echo "$pass $priority $miboid $prog" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_exec_add() {
|
||||
local cfg="$1"
|
||||
|
||||
config_get name "$cfg" name
|
||||
[ -n "$name" ] || return 0
|
||||
config_get prog "$cfg" prog
|
||||
[ -n "$prog" ] || return 0
|
||||
config_get args "$cfg" args
|
||||
config_get miboid "$cfg" miboid
|
||||
echo "exec $miboid $name $prog $args" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_disk_add() {
|
||||
local cfg="$1"
|
||||
local disk='disk'
|
||||
|
||||
config_get partition "$cfg" partition
|
||||
[ -n "$partition" ] || return 0
|
||||
config_get size "$cfg" size
|
||||
[ -n "$size" ] || return 0
|
||||
echo "$disk $partition $size" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_engineid_add() {
|
||||
local cfg="$1"
|
||||
|
||||
config_get engineid "$cfg" engineid
|
||||
[ -n "$engineid" ] && echo "engineID $engineid" >> $CONFIGFILE
|
||||
config_get engineidtype "$cfg" engineidtype
|
||||
[ "$engineidtype" -ge 1 -a "$engineidtype" -le 3 ] && \
|
||||
echo "engineIDType $engineidtype" >> $CONFIGFILE
|
||||
config_get engineidnic "$cfg" engineidnic
|
||||
[ -n "$engineidnic" ] && echo "engineIDNic $engineidnic" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_sink_add() {
|
||||
local cfg="$1"
|
||||
local section="$2"
|
||||
local community
|
||||
local port
|
||||
local host
|
||||
|
||||
config_get host "$cfg" host
|
||||
[ -n "section" -a -n "$host" ] || return 0
|
||||
# optional community
|
||||
config_get community "$cfg" community
|
||||
# optional port
|
||||
config_get port "$cfg" port
|
||||
port=${port:+:$port}
|
||||
echo "$section $host$port $community" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
append_parm() {
|
||||
local section="$1"
|
||||
local option="$2"
|
||||
local switch="$3"
|
||||
local _loctmp
|
||||
config_get _loctmp "$section" "$option"
|
||||
[ -z "$_loctmp" ] && return 0
|
||||
echo "$switch $_loctmp" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
append_authtrapenable() {
|
||||
local section="$1"
|
||||
local option="$2"
|
||||
local switch="$3"
|
||||
local _loctmp
|
||||
config_get_bool _loctmp "$section" "$option"
|
||||
[ -z "$_loctmp" ] && return 0
|
||||
[ "$_loctmp" -gt 0 ] && echo "$switch $_loctmp" >> $CONFIGFILE
|
||||
}
|
||||
|
||||
snmpd_setup_fw_rules() {
|
||||
local net="$1"
|
||||
local zone
|
||||
|
||||
zone=$(fw3 -q network "$net" 2>/dev/null)
|
||||
|
||||
local handled_zone
|
||||
for handled_zone in $HANDLED_SNMP_ZONES; do
|
||||
[ "$handled_zone" = "$zone" ] && return
|
||||
done
|
||||
|
||||
json_add_object ""
|
||||
json_add_string type rule
|
||||
json_add_string src "$zone"
|
||||
json_add_string proto udp
|
||||
json_add_string dest_port 161
|
||||
json_add_string target ACCEPT
|
||||
json_close_object
|
||||
|
||||
HANDLED_SNMP_ZONES="$HANDLED_SNMP_ZONES $zone"
|
||||
}
|
||||
|
||||
start_service() {
|
||||
[ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
|
||||
|
||||
config_load snmpd
|
||||
|
||||
config_get_bool snmp_enabled general enabled 1
|
||||
[ "$snmp_enabled" -eq 0 ] && return
|
||||
|
||||
procd_open_instance
|
||||
|
||||
config_foreach snmpd_agent_add agent
|
||||
config_foreach snmpd_agentx_add agentx
|
||||
config_foreach snmpd_system_add system
|
||||
config_foreach snmpd_com2sec_add com2sec
|
||||
if [ "$(uci -q get snmpd.general.ipv6cpipv4)" = "1" ]; then
|
||||
config_foreach snmpd_com2sec6_add com2sec
|
||||
else
|
||||
config_foreach snmpd_com2sec6_add com2sec6
|
||||
fi
|
||||
config_foreach snmpd_group_add group
|
||||
config_foreach snmpd_view_add view
|
||||
config_foreach snmpd_access_add access
|
||||
config_foreach snmpd_trap_hostname_add trap_HostName
|
||||
config_foreach snmpd_trap_ip_add trap_HostIP
|
||||
config_foreach snmpd_access_default_add access_default
|
||||
config_foreach snmpd_access_HostName_add access_HostName
|
||||
config_foreach snmpd_access_HostIP_add access_HostIP
|
||||
config_foreach snmpd_pass_add pass
|
||||
config_foreach snmpd_exec_add exec
|
||||
config_foreach snmpd_disk_add disk
|
||||
config_foreach snmpd_engineid_add engineid
|
||||
append_parm trapcommunity community trapcommunity
|
||||
config_foreach snmpd_sink_add trapsink trapsink
|
||||
config_foreach snmpd_sink_add trap2sink trap2sink
|
||||
config_foreach snmpd_sink_add informsink informsink
|
||||
append_authtrapenable authtrapenable enable authtrapenable
|
||||
append_parm v1trapaddress host v1trapaddress
|
||||
append_parm trapsess trapsess trapsess
|
||||
|
||||
procd_set_param command $PROG -Lf /dev/null -f
|
||||
procd_set_param file $CONFIGFILE
|
||||
procd_set_param respawn
|
||||
|
||||
for iface in $(ls /sys/class/net 2>/dev/null); do
|
||||
procd_append_param netdev "$iface"
|
||||
done
|
||||
|
||||
procd_open_data
|
||||
|
||||
json_add_array firewall
|
||||
config_list_foreach general network snmpd_setup_fw_rules
|
||||
json_close_array
|
||||
|
||||
procd_close_data
|
||||
|
||||
procd_close_instance
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
[ -f "$CONFIGFILE" ] && rm -f "$CONFIGFILE"
|
||||
procd_set_config_changed firewall
|
||||
}
|
||||
|
||||
service_triggers(){
|
||||
local script=$(readlink "$initscript")
|
||||
local name=$(basename ${script:-$initscript})
|
||||
|
||||
procd_open_trigger
|
||||
procd_add_raw_trigger "interface.*" 2000 /etc/init.d/$name reload
|
||||
procd_close_trigger
|
||||
|
||||
procd_add_reload_trigger 'snmpd'
|
||||
}
|
||||
|
||||
service_started() {
|
||||
[ "$snmp_enabled" -eq 0 ] && return
|
||||
procd_set_config_changed firewall
|
||||
}
|
19
luci-app-snmpd/root/etc/uci-defaults/4400-snmpd
Executable file
19
luci-app-snmpd/root/etc/uci-defaults/4400-snmpd
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
if [ "$(uci -q get snmpd.general.network)" = "" ]; then
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
add_list snmpd.general.network=lan
|
||||
set snmpd.@system[0].sysName="OpenMPTCProuter"
|
||||
set snmpd.general.enabled=0
|
||||
commit snmpd
|
||||
EOF
|
||||
fi
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@snmpd[-1]
|
||||
add ucitrack snmpd
|
||||
set ucitrack.@snmpd[-1].init=snmpd
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
rm -f /tmp/luci-indexcache
|
||||
exit 0
|
@ -0,0 +1,13 @@
|
||||
{
|
||||
"admin/network/snmpd": {
|
||||
"title": "SNMPd",
|
||||
"order": 91,
|
||||
"action": {
|
||||
"type": "cbi",
|
||||
"path": "snmpd"
|
||||
},
|
||||
"depends": {
|
||||
"acl": [ "luci-app-snmpd" ]
|
||||
}
|
||||
}
|
||||
}
|
11
luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json
Normal file
11
luci-app-snmpd/root/usr/share/rpcd/acl.d/luci-app-snmpd.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"luci-app-snmpd": {
|
||||
"description": "Grant UCI access for luci-app-snmpd",
|
||||
"read": {
|
||||
"uci": [ "snmpd" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "snmpd" ]
|
||||
}
|
||||
}
|
||||
}
|
139
mbedtls/Makefile
Normal file
139
mbedtls/Makefile
Normal file
@ -0,0 +1,139 @@
|
||||
#
|
||||
# Copyright (C) 2011-2015 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=mbedtls
|
||||
PKG_VERSION:=2.16.12
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
PKG_USE_MIPS16:=0
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/ARMmbed/mbedtls/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=294871ab1864a65d0b74325e9219d5bcd6e91c34a3c59270c357bb9ae4d5c393
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_LICENSE:=GPL-2.0-or-later
|
||||
PKG_LICENSE_FILES:=gpl-2.0.txt
|
||||
PKG_CPE_ID:=cpe:/a:arm:mbed_tls
|
||||
|
||||
PKG_CONFIG_DEPENDS := \
|
||||
CONFIG_LIBMBEDTLS_DEBUG_C \
|
||||
CONFIG_LIBMBEDTLS_HKDF_C
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
|
||||
define Package/mbedtls/Default
|
||||
TITLE:=Embedded SSL
|
||||
URL:=https://tls.mbed.org
|
||||
endef
|
||||
|
||||
define Package/mbedtls/Default/description
|
||||
The aim of the mbedtls project is to provide a quality, open-source
|
||||
cryptographic library written in C and targeted at embedded systems.
|
||||
endef
|
||||
|
||||
define Package/libmbedtls
|
||||
$(call Package/mbedtls/Default)
|
||||
SECTION:=libs
|
||||
CATEGORY:=Libraries
|
||||
SUBMENU:=SSL
|
||||
TITLE+= (library)
|
||||
ABI_VERSION:=12
|
||||
endef
|
||||
|
||||
define Package/libmbedtls/config
|
||||
config LIBMBEDTLS_DEBUG_C
|
||||
depends on PACKAGE_libmbedtls
|
||||
bool "Enable debug functions"
|
||||
default n
|
||||
help
|
||||
This option enables mbedtls library's debug functions.
|
||||
|
||||
It increases the uncompressed libmbedtls binary size
|
||||
by around 60 KiB (for an ARMv5 platform).
|
||||
|
||||
Usually, you don't need this, so don't select this if you're unsure.
|
||||
|
||||
config LIBMBEDTLS_HKDF_C
|
||||
depends on PACKAGE_libmbedtls
|
||||
bool "Enable the HKDF algorithm (RFC 5869)"
|
||||
default n
|
||||
help
|
||||
This option adds support for the Hashed Message Authentication Code
|
||||
(HMAC)-based key derivation function (HKDF).
|
||||
endef
|
||||
|
||||
define Package/mbedtls-util
|
||||
$(call Package/mbedtls/Default)
|
||||
SECTION:=utils
|
||||
CATEGORY:=Utilities
|
||||
TITLE+= (utilities)
|
||||
DEPENDS:=+libmbedtls
|
||||
endef
|
||||
|
||||
define Package/libmbedtls/description
|
||||
$(call Package/mbedtls/Default/description)
|
||||
This package contains the mbedtls library.
|
||||
endef
|
||||
|
||||
define Package/mbedtls-util/description
|
||||
$(call Package/mbedtls/Default/description)
|
||||
This package contains mbedtls helper programs for private key and
|
||||
CSR generation (gen_key, cert_req)
|
||||
endef
|
||||
|
||||
PKG_INSTALL:=1
|
||||
|
||||
TARGET_CFLAGS += -ffunction-sections -fdata-sections
|
||||
TARGET_CFLAGS := $(filter-out -O%,$(TARGET_CFLAGS))
|
||||
|
||||
CMAKE_OPTIONS += \
|
||||
-DUSE_SHARED_MBEDTLS_LIBRARY:Bool=ON \
|
||||
-DENABLE_TESTING:Bool=OFF \
|
||||
-DENABLE_PROGRAMS:Bool=ON
|
||||
|
||||
define Build/Configure
|
||||
$(Build/Configure/Default)
|
||||
|
||||
awk 'BEGIN { rc = 1 } \
|
||||
/#define MBEDTLS_DEBUG_C/ { $$$$0 = "$(if $(CONFIG_LIBMBEDTLS_DEBUG_C),,// )#define MBEDTLS_DEBUG_C"; rc = 0 } \
|
||||
{ print } \
|
||||
END { exit(rc) }' $(PKG_BUILD_DIR)/include/mbedtls/config.h \
|
||||
>$(PKG_BUILD_DIR)/include/mbedtls/config.h.new && \
|
||||
mv $(PKG_BUILD_DIR)/include/mbedtls/config.h.new $(PKG_BUILD_DIR)/include/mbedtls/config.h
|
||||
|
||||
awk 'BEGIN { rc = 1 } \
|
||||
/#define MBEDTLS_HKDF_C/ { $$$$0 = "$(if $(CONFIG_LIBMBEDTLS_HKDF_C),,// )#define MBEDTLS_HKDF_C"; rc = 0 } \
|
||||
{ print } \
|
||||
END { exit(rc) }' $(PKG_BUILD_DIR)/include/mbedtls/config.h \
|
||||
>$(PKG_BUILD_DIR)/include/mbedtls/config.h.new && \
|
||||
mv $(PKG_BUILD_DIR)/include/mbedtls/config.h.new $(PKG_BUILD_DIR)/include/mbedtls/config.h
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
$(INSTALL_DIR) $(1)/usr/include
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/include/mbedtls $(1)/usr/include/
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.so* $(1)/usr/lib/
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.a $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
define Package/libmbedtls/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/lib*.so.* $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
define Package/mbedtls-util/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/gen_key $(1)/usr/bin/
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/cert_req $(1)/usr/bin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,libmbedtls))
|
||||
$(eval $(call BuildPackage,mbedtls-util))
|
245
mbedtls/patches/200-config.patch
Normal file
245
mbedtls/patches/200-config.patch
Normal file
@ -0,0 +1,245 @@
|
||||
--- a/include/mbedtls/config.h
|
||||
+++ b/include/mbedtls/config.h
|
||||
@@ -692,14 +692,14 @@
|
||||
*
|
||||
* Enable Output Feedback mode (OFB) for symmetric ciphers.
|
||||
*/
|
||||
-#define MBEDTLS_CIPHER_MODE_OFB
|
||||
+//#define MBEDTLS_CIPHER_MODE_OFB
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_CIPHER_MODE_XTS
|
||||
*
|
||||
* Enable Xor-encrypt-xor with ciphertext stealing mode (XTS) for AES.
|
||||
*/
|
||||
-#define MBEDTLS_CIPHER_MODE_XTS
|
||||
+//#define MBEDTLS_CIPHER_MODE_XTS
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_CIPHER_NULL_CIPHER
|
||||
@@ -816,19 +816,19 @@
|
||||
*
|
||||
* Comment macros to disable the curve and functions for it
|
||||
*/
|
||||
-#define MBEDTLS_ECP_DP_SECP192R1_ENABLED
|
||||
-#define MBEDTLS_ECP_DP_SECP224R1_ENABLED
|
||||
+//#define MBEDTLS_ECP_DP_SECP192R1_ENABLED
|
||||
+//#define MBEDTLS_ECP_DP_SECP224R1_ENABLED
|
||||
#define MBEDTLS_ECP_DP_SECP256R1_ENABLED
|
||||
#define MBEDTLS_ECP_DP_SECP384R1_ENABLED
|
||||
-#define MBEDTLS_ECP_DP_SECP521R1_ENABLED
|
||||
-#define MBEDTLS_ECP_DP_SECP192K1_ENABLED
|
||||
-#define MBEDTLS_ECP_DP_SECP224K1_ENABLED
|
||||
+//#define MBEDTLS_ECP_DP_SECP521R1_ENABLED
|
||||
+//#define MBEDTLS_ECP_DP_SECP192K1_ENABLED
|
||||
+//#define MBEDTLS_ECP_DP_SECP224K1_ENABLED
|
||||
#define MBEDTLS_ECP_DP_SECP256K1_ENABLED
|
||||
-#define MBEDTLS_ECP_DP_BP256R1_ENABLED
|
||||
-#define MBEDTLS_ECP_DP_BP384R1_ENABLED
|
||||
-#define MBEDTLS_ECP_DP_BP512R1_ENABLED
|
||||
+//#define MBEDTLS_ECP_DP_BP256R1_ENABLED
|
||||
+//#define MBEDTLS_ECP_DP_BP384R1_ENABLED
|
||||
+//#define MBEDTLS_ECP_DP_BP512R1_ENABLED
|
||||
#define MBEDTLS_ECP_DP_CURVE25519_ENABLED
|
||||
-#define MBEDTLS_ECP_DP_CURVE448_ENABLED
|
||||
+//#define MBEDTLS_ECP_DP_CURVE448_ENABLED
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_ECP_NIST_OPTIM
|
||||
@@ -952,7 +952,7 @@
|
||||
* See dhm.h for more details.
|
||||
*
|
||||
*/
|
||||
-#define MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED
|
||||
+//#define MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED
|
||||
@@ -972,7 +972,7 @@
|
||||
* MBEDTLS_TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA
|
||||
* MBEDTLS_TLS_ECDHE_PSK_WITH_RC4_128_SHA
|
||||
*/
|
||||
-#define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED
|
||||
+//#define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED
|
||||
@@ -997,7 +997,7 @@
|
||||
* MBEDTLS_TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA
|
||||
* MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA
|
||||
*/
|
||||
-#define MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED
|
||||
+//#define MBEDTLS_KEY_EXCHANGE_RSA_PSK_ENABLED
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_RSA_ENABLED
|
||||
@@ -1131,7 +1131,7 @@
|
||||
* MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256
|
||||
* MBEDTLS_TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384
|
||||
*/
|
||||
-#define MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED
|
||||
+//#define MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED
|
||||
@@ -1155,7 +1155,7 @@
|
||||
* MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256
|
||||
* MBEDTLS_TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384
|
||||
*/
|
||||
-#define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED
|
||||
+//#define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_KEY_EXCHANGE_ECJPAKE_ENABLED
|
||||
@@ -1259,7 +1259,7 @@
|
||||
* This option is only useful if both MBEDTLS_SHA256_C and
|
||||
* MBEDTLS_SHA512_C are defined. Otherwise the available hash module is used.
|
||||
*/
|
||||
-//#define MBEDTLS_ENTROPY_FORCE_SHA256
|
||||
+#define MBEDTLS_ENTROPY_FORCE_SHA256
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_ENTROPY_NV_SEED
|
||||
@@ -1354,14 +1354,14 @@
|
||||
* Uncomment this macro to disable the use of CRT in RSA.
|
||||
*
|
||||
*/
|
||||
-//#define MBEDTLS_RSA_NO_CRT
|
||||
+#define MBEDTLS_RSA_NO_CRT
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SELF_TEST
|
||||
*
|
||||
* Enable the checkup functions (*_self_test).
|
||||
*/
|
||||
-#define MBEDTLS_SELF_TEST
|
||||
+//#define MBEDTLS_SELF_TEST
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SHA256_SMALLER
|
||||
@@ -1515,7 +1515,7 @@
|
||||
* configuration of this extension).
|
||||
*
|
||||
*/
|
||||
-#define MBEDTLS_SSL_RENEGOTIATION
|
||||
+//#define MBEDTLS_SSL_RENEGOTIATION
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO
|
||||
@@ -1690,7 +1690,7 @@
|
||||
*
|
||||
* Comment this macro to disable support for SSL session tickets
|
||||
*/
|
||||
-#define MBEDTLS_SSL_SESSION_TICKETS
|
||||
+//#define MBEDTLS_SSL_SESSION_TICKETS
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SSL_EXPORT_KEYS
|
||||
@@ -1720,7 +1720,7 @@
|
||||
*
|
||||
* Comment this macro to disable support for truncated HMAC in SSL
|
||||
*/
|
||||
-#define MBEDTLS_SSL_TRUNCATED_HMAC
|
||||
+//#define MBEDTLS_SSL_TRUNCATED_HMAC
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SSL_TRUNCATED_HMAC_COMPAT
|
||||
@@ -1796,7 +1796,7 @@
|
||||
*
|
||||
* Comment this to disable run-time checking and save ROM space
|
||||
*/
|
||||
-#define MBEDTLS_VERSION_FEATURES
|
||||
+//#define MBEDTLS_VERSION_FEATURES
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_X509_ALLOW_EXTENSIONS_NON_V3
|
||||
@@ -2126,7 +2126,7 @@
|
||||
* MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256
|
||||
* MBEDTLS_TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256
|
||||
*/
|
||||
-#define MBEDTLS_CAMELLIA_C
|
||||
+//#define MBEDTLS_CAMELLIA_C
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_ARIA_C
|
||||
@@ -2192,7 +2192,7 @@
|
||||
* This module enables the AES-CCM ciphersuites, if other requisites are
|
||||
* enabled as well.
|
||||
*/
|
||||
-#define MBEDTLS_CCM_C
|
||||
+//#define MBEDTLS_CCM_C
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_CERTS_C
|
||||
@@ -2204,7 +2204,7 @@
|
||||
*
|
||||
* This module is used for testing (ssl_client/server).
|
||||
*/
|
||||
-#define MBEDTLS_CERTS_C
|
||||
+//#define MBEDTLS_CERTS_C
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_CHACHA20_C
|
||||
@@ -2312,7 +2312,7 @@
|
||||
* \warning DES is considered a weak cipher and its use constitutes a
|
||||
* security risk. We recommend considering stronger ciphers instead.
|
||||
*/
|
||||
-#define MBEDTLS_DES_C
|
||||
+//#define MBEDTLS_DES_C
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_DHM_C
|
||||
@@ -2475,7 +2475,7 @@
|
||||
* This module adds support for the Hashed Message Authentication Code
|
||||
* (HMAC)-based key derivation function (HKDF).
|
||||
*/
|
||||
-#define MBEDTLS_HKDF_C
|
||||
+//#define MBEDTLS_HKDF_C
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_HMAC_DRBG_C
|
||||
@@ -2785,7 +2785,7 @@
|
||||
*
|
||||
* This module enables abstraction of common (libc) functions.
|
||||
*/
|
||||
-#define MBEDTLS_PLATFORM_C
|
||||
+//#define MBEDTLS_PLATFORM_C
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_POLY1305_C
|
||||
@@ -2806,7 +2806,7 @@
|
||||
* Caller: library/md.c
|
||||
*
|
||||
*/
|
||||
-#define MBEDTLS_RIPEMD160_C
|
||||
+//#define MBEDTLS_RIPEMD160_C
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_RSA_C
|
||||
@@ -2913,7 +2913,7 @@
|
||||
*
|
||||
* Requires: MBEDTLS_CIPHER_C
|
||||
*/
|
||||
-#define MBEDTLS_SSL_TICKET_C
|
||||
+//#define MBEDTLS_SSL_TICKET_C
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_SSL_CLI_C
|
||||
@@ -3013,7 +3013,7 @@
|
||||
*
|
||||
* This module provides run-time version information.
|
||||
*/
|
||||
-#define MBEDTLS_VERSION_C
|
||||
+//#define MBEDTLS_VERSION_C
|
||||
|
||||
/**
|
||||
* \def MBEDTLS_X509_USE_C
|
||||
@@ -3123,7 +3123,7 @@
|
||||
* Module: library/xtea.c
|
||||
* Caller:
|
||||
*/
|
||||
-#define MBEDTLS_XTEA_C
|
||||
+//#define MBEDTLS_XTEA_C
|
||||
|
||||
/* \} name SECTION: mbed TLS modules */
|
||||
|
141
msmtp/Makefile
Normal file
141
msmtp/Makefile
Normal file
@ -0,0 +1,141 @@
|
||||
#
|
||||
# Copyright (C) 2009 David Cooper <dave@kupesoft.com>
|
||||
# Copyright (C) 2009-2016 OpenWrt.org
|
||||
# Copyright (C) 2021 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=msmtp
|
||||
PKG_VERSION:=1.8.14
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_SOURCE_URL:=https://marlam.de/msmtp/releases
|
||||
PKG_HASH:=d56f065d711486e9c234618515a02a48a48dab4051b34f3e108fbecb6fb773b4
|
||||
|
||||
PKG_MAINTAINER:=
|
||||
PKG_LICENSE:=GPL-3.0-or-later
|
||||
PKG_LICENSE_FILES:=COPYING
|
||||
PKG_CPE_ID:=cpe:/a:marlam:msmtp
|
||||
|
||||
PKG_INSTALL:=1
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/nls.mk
|
||||
|
||||
define Package/msmtp/Default
|
||||
SECTION:=mail
|
||||
CATEGORY:=Mail
|
||||
DEPENDS:=$(INTL_DEPENDS)
|
||||
TITLE:=Simple sendmail SMTP forwarding
|
||||
URL:=https://marlam.de/msmtp
|
||||
endef
|
||||
|
||||
define Package/msmtp/Default/description
|
||||
msmtp is an SMTP client. In the default mode, it transmits a mail to
|
||||
an SMTP server (for example at a free mail provider) which does the
|
||||
delivery. To use this program with your mail user agent (MUA), create
|
||||
a configuration file with your mail account(s) and tell your MUA to
|
||||
call msmtp instead of /usr/sbin/sendmail.
|
||||
endef
|
||||
|
||||
define Package/msmtp
|
||||
$(call Package/msmtp/Default)
|
||||
DEPENDS+= +libgnutls +ca-bundle
|
||||
TITLE+= (with SSL support)
|
||||
VARIANT:=ssl
|
||||
DEFAULT_VARIANT:=1
|
||||
endef
|
||||
|
||||
define Package/msmtp/conffiles
|
||||
/etc/msmtprc
|
||||
endef
|
||||
|
||||
define Package/msmtp/description
|
||||
$(call Package/msmtp/Default/description)
|
||||
This package is built with SSL support.
|
||||
endef
|
||||
|
||||
define Package/msmtp-nossl
|
||||
$(call Package/msmtp/Default)
|
||||
TITLE+= (without SSL support)
|
||||
VARIANT:=nossl
|
||||
PROVIDES:=msmtp
|
||||
endef
|
||||
|
||||
define Package/msmtp-nossl/description
|
||||
$(call Package/msmtp/Default/description)
|
||||
This package is built without SSL support.
|
||||
endef
|
||||
|
||||
define Package/msmtp-mta
|
||||
$(call Package/msmtp/Default)
|
||||
TITLE+= (as MTA)
|
||||
DEPENDS+=+msmtp
|
||||
ALTERNATIVES:=\
|
||||
100:/usr/sbin/sendmail:/usr/bin/msmtp \
|
||||
100:/usr/lib/sendmail:/usr/bin/msmtp
|
||||
endef
|
||||
|
||||
define Package/msmtp-mta/description
|
||||
$(call Package/msmtp/Default/description)
|
||||
This package add a link from sendmail to msmtp
|
||||
and is built with SSL support.
|
||||
endef
|
||||
|
||||
define Package/msmtp-queue
|
||||
$(call Package/msmtp/Default)
|
||||
DEPENDS+= +bash +msmtp
|
||||
TITLE+= (queue scripts)
|
||||
endef
|
||||
|
||||
define Package/msmtp-queue/description
|
||||
$(call Package/msmtp/Default/description)
|
||||
This package contains the msmtp queue scripts.
|
||||
endef
|
||||
|
||||
CONFIGURE_ARGS += \
|
||||
--disable-rpath \
|
||||
--without-libintl-prefix \
|
||||
--without-libgsasl \
|
||||
--without-libidn \
|
||||
--without-libsecret \
|
||||
--without-macosx-keyring \
|
||||
--without-msmtpd
|
||||
|
||||
ifeq ($(BUILD_VARIANT),ssl)
|
||||
CONFIGURE_ARGS += --with-tls=openssl
|
||||
else
|
||||
CONFIGURE_ARGS += --without-tls
|
||||
endif
|
||||
|
||||
define Package/msmtp/install
|
||||
$(INSTALL_DIR) $(1)/etc
|
||||
$(INSTALL_CONF) $(PKG_BUILD_DIR)/doc/msmtprc-system.example \
|
||||
$(1)/etc/msmtprc
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/bin/msmtp $(1)/usr/bin/
|
||||
endef
|
||||
|
||||
define Package/msmtp-mta/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin $(1)/usr/lib
|
||||
endef
|
||||
|
||||
Package/msmtp-nossl/conffiles = $(Package/msmtp/conffiles)
|
||||
Package/msmtp-nossl/install = $(Package/msmtp/install)
|
||||
|
||||
define Package/msmtp-queue/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/msmtpq/msmtp{q,-queue} $(1)/usr/bin/
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/scripts/msmtpqueue/msmtp-{en,list,run}queue.sh $(1)/usr/bin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,msmtp))
|
||||
$(eval $(call BuildPackage,msmtp-nossl))
|
||||
$(eval $(call BuildPackage,msmtp-queue))
|
||||
$(eval $(call BuildPackage,msmtp-mta))
|
103
natflow/Makefile
Normal file
103
natflow/Makefile
Normal file
@ -0,0 +1,103 @@
|
||||
#
|
||||
# Copyright (C) 2017-2019 Chen Minqiang <ptpt52@gmail.com>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=natflow
|
||||
PKG_VERSION:=20221225
|
||||
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/ptpt52/natflow/tar.gz/$(PKG_VERSION)?
|
||||
PKG_HASH:=c85ddeef4ab2c8edbf5f53e793cb78b55c2663dc010dd5d3d15e428e19ba3917
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
|
||||
PKG_MAINTAINER:=Chen Minqiang <ptpt52@gmail.com>
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define KernelPackage/natflow
|
||||
CATEGORY:=X
|
||||
SUBMENU:=Fast Forward Stacks
|
||||
TITLE:=natflow kernel driver
|
||||
KCONFIG:= \
|
||||
CONFIG_NF_CONNTRACK_MARK=y \
|
||||
CONFIG_NETFILTER_INGRESS=y \
|
||||
CONFIG_NF_FLOW_TABLE
|
||||
FILES:=$(PKG_BUILD_DIR)/natflow.ko
|
||||
AUTOLOAD:=$(call AutoLoad,96,natflow)
|
||||
DEPENDS:= +kmod-ipt-conntrack +kmod-ipt-nat +kmod-ipt-ipset +kmod-br-netfilter +LINUX_5_4:kmod-nf-flow
|
||||
endef
|
||||
|
||||
define KernelPackage/natflow/description
|
||||
fast nat forward kmod
|
||||
endef
|
||||
|
||||
include $(INCLUDE_DIR)/kernel-defaults.mk
|
||||
|
||||
EXTRA_CFLAGS += -DCONFIG_NATFLOW_PATH -DCONFIG_NATFLOW_URLLOGGER
|
||||
ifneq ($(CONFIG_TARGET_mediatek_mt7622),)
|
||||
EXTRA_CFLAGS += -DCONFIG_HWNAT_EXTDEV_USE_VLAN_HASH
|
||||
endif
|
||||
|
||||
define Build/Compile/natflow
|
||||
+$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \
|
||||
EXTRA_CFLAGS="$(EXTRA_CFLAGS)" \
|
||||
$(KERNEL_MAKE_FLAGS) \
|
||||
ARCH="$(LINUX_KARCH)" \
|
||||
CROSS_COMPILE="$(KERNEL_CROSS)" \
|
||||
M="$(PKG_BUILD_DIR)" \
|
||||
$(if $(CONFIG_KERNEL_DEBUG_INFO),,NO_DEBUG=1) \
|
||||
modules
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(call Build/Compile/natflow)
|
||||
endef
|
||||
|
||||
define Package/natflow-boot
|
||||
CATEGORY:=X
|
||||
SUBMENU:=Fast Forward Stacks
|
||||
TITLE:=natflow boot init script
|
||||
DEPENDS:= +kmod-natflow
|
||||
endef
|
||||
|
||||
define Package/natflow-boot/install
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/natflow-boot.init $(1)/etc/init.d/natflow-boot
|
||||
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
|
||||
$(INSTALL_DATA) ./files/21-natflow-boot.hotplug $(1)/etc/hotplug.d/iface/21-natflow-boot
|
||||
$(INSTALL_DIR) $(1)/lib/preinit
|
||||
$(INSTALL_DATA) ./files/natflow-boot.preinit $(1)/lib/preinit/95_natflow-boot
|
||||
endef
|
||||
|
||||
define Package/natflow-auth
|
||||
CATEGORY:=X
|
||||
SUBMENU:=Fast Forward Stacks
|
||||
TITLE:=natflow auth init script
|
||||
DEPENDS:= +kmod-natflow +ipset +lua-ipops
|
||||
endef
|
||||
|
||||
define Package/natflow-auth/conffiles
|
||||
/etc/config/natflow
|
||||
endef
|
||||
|
||||
define Package/natflow-auth/install
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/natflow-simple-qos.init $(1)/etc/init.d/natflow-simple-qos
|
||||
$(INSTALL_BIN) ./files/natflow-qos.init $(1)/etc/init.d/natflow-qos
|
||||
$(INSTALL_BIN) ./files/natflow-user.init $(1)/etc/init.d/natflow-user
|
||||
$(INSTALL_BIN) ./files/natflow-zone.init $(1)/etc/init.d/natflow-zone
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DATA) ./files/natflow.config $(1)/etc/config/natflow
|
||||
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
|
||||
$(INSTALL_DATA) ./files/20-natflow-zone.hotplug $(1)/etc/hotplug.d/iface/20-natflow-zone
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,natflow))
|
||||
$(eval $(call BuildPackage,natflow-boot))
|
||||
$(eval $(call BuildPackage,natflow-auth))
|
7
natflow/files/20-natflow-zone.hotplug
Normal file
7
natflow/files/20-natflow-zone.hotplug
Normal file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ "$ACTION" = ifup -o "$ACTION" = ifupdate ] || exit 0
|
||||
[ "$ACTION" = ifupdate -a -z "$IFUPDATE_ADDRESSES" -a -z "$IFUPDATE_DATA" ] && exit 0
|
||||
|
||||
logger -t natflow "Reloading natflow-zone due to $ACTION of $INTERFACE ($DEVICE)"
|
||||
/etc/init.d/natflow-zone start &
|
7
natflow/files/21-natflow-boot.hotplug
Normal file
7
natflow/files/21-natflow-boot.hotplug
Normal file
@ -0,0 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
[ "$ACTION" = ifup -o "$ACTION" = ifupdate ] || exit 0
|
||||
[ "$ACTION" = ifupdate -a -z "$IFUPDATE_ADDRESSES" -a -z "$IFUPDATE_DATA" ] && exit 0
|
||||
|
||||
logger -t natflow "Reloading natflow-boot due to $ACTION of $INTERFACE ($DEVICE)"
|
||||
/etc/init.d/natflow-boot start &
|
48
natflow/files/natflow-boot.init
Normal file
48
natflow/files/natflow-boot.init
Normal file
@ -0,0 +1,48 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2006-2011 OpenWrt.org
|
||||
|
||||
START=95
|
||||
|
||||
disable_gro() {
|
||||
which ethtool &>/dev/null || return 0
|
||||
for eth in $(ifconfig | grep "^eth\|^dsa" | awk '{print $1}' | sort | uniq); do
|
||||
ethtool -k "$eth" | grep -q "generic-segmentation-offload: on" || {
|
||||
ethtool -K "$eth" gro off
|
||||
logger -t natfflow "disable gro for <$eth>"
|
||||
}
|
||||
done
|
||||
}
|
||||
|
||||
start() {
|
||||
test -c /dev/natflow_ctl || return 0
|
||||
disable_gro
|
||||
hwnat_wed=$(uci get natflow.main.hwnat_wed 2>/dev/null || echo 0)
|
||||
hwnat=$(uci get natflow.main.hwnat 2>/dev/null || echo 0)
|
||||
enabled=$(uci get natflow.main.enabled 2>/dev/null || echo 0)
|
||||
debug=$(uci get natflow.main.debug 2>/dev/null || echo 3)
|
||||
delay_pkts=$(uci get natflow.main.delay_pkts 2>/dev/null || echo 0)
|
||||
skip_qos_to_slow_path=$(uci get natflow.main.skip_qos_to_slow_path 2>/dev/null || echo 0)
|
||||
ifname_filter=$(uci get natflow.main.ifname_filter 2>/dev/null)
|
||||
|
||||
echo debug=$debug >/dev/natflow_ctl
|
||||
echo disabled=$((!enabled)) >/dev/natflow_ctl
|
||||
cat /dev/natflow_ctl | grep -q hwnat= && {
|
||||
echo hwnat=$hwnat >/dev/natflow_ctl
|
||||
echo hwnat_wed_disabled=$((!hwnat_wed)) >/dev/natflow_ctl
|
||||
}
|
||||
echo delay_pkts=$delay_pkts >/dev/natflow_ctl
|
||||
echo skip_qos_to_slow_path=$skip_qos_to_slow_path >/dev/natflow_ctl
|
||||
echo ifname_clear >/dev/natflow_ctl
|
||||
for ifn in ${ifname_filter}; do
|
||||
echo ifname_add=$ifn >/dev/natflow_ctl
|
||||
done
|
||||
}
|
||||
|
||||
stop() {
|
||||
test -c /dev/natflow_ctl || return 0
|
||||
echo disabled=1 >/dev/natflow_ctl
|
||||
}
|
||||
|
||||
restart() {
|
||||
start
|
||||
}
|
11
natflow/files/natflow-boot.preinit
Normal file
11
natflow/files/natflow-boot.preinit
Normal file
@ -0,0 +1,11 @@
|
||||
# Copyright (C) 2022 X-WRT.COM
|
||||
|
||||
do_pre_kmodload()
|
||||
{
|
||||
return
|
||||
test -e /etc/modules.d/mt7915e && {
|
||||
cat /etc/modules.d/mt7915e | grep -q wed_enable=Y || echo mt7915e wed_enable=Y >/etc/modules.d/mt7915e
|
||||
}
|
||||
}
|
||||
|
||||
boot_hook_add preinit_main do_pre_kmodload
|
141
natflow/files/natflow-qos.init
Normal file
141
natflow/files/natflow-qos.init
Normal file
@ -0,0 +1,141 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2006-2011 OpenWrt.org
|
||||
|
||||
START=95
|
||||
|
||||
DEVCTL=/dev/qos_ctl
|
||||
IPOPS="lua /usr/lib/lua/ipops.lua"
|
||||
test -e /usr/share/natflow/ipops.lua && IPOPS="lua /usr/share/natflow/ipops.lua"
|
||||
|
||||
qos_idx=0
|
||||
|
||||
# ipset_add ipsetname net
|
||||
ipv4set_add()
|
||||
{
|
||||
local ipsetname=$1
|
||||
local net=$2
|
||||
#hack for 0.0.0.0/0
|
||||
[ "$net" = "0.0.0.0/0" ] && net="0.0.0.0/1 128.0.0.0/1"
|
||||
for n in $net; do
|
||||
ipset add $ipsetname $n
|
||||
done
|
||||
}
|
||||
|
||||
get_rate_data()
|
||||
{
|
||||
local cnt num unit
|
||||
echo -n $1 | grep -qi "bps$" || {
|
||||
num=$1
|
||||
echo -n $((num)) # assume num B/s
|
||||
return
|
||||
}
|
||||
cnt=`echo -n $1 | wc -c || echo 0`
|
||||
test $cnt -le 4 && echo -n 0 && return # assume 0 B/s
|
||||
|
||||
num=`echo -n $1 | cut -c0-$((cnt-4))`
|
||||
unit=`echo -n $1 | cut -c$((cnt-3))-$cnt | tr A-Z a-z`
|
||||
case $unit in
|
||||
"kbps")
|
||||
num=$((num*128))
|
||||
;;
|
||||
"mbps")
|
||||
num=$((num*128*1024))
|
||||
;;
|
||||
"gbps")
|
||||
num=$((num*128*1024*1024))
|
||||
;;
|
||||
*)
|
||||
num=$((num/8))
|
||||
;;
|
||||
esac
|
||||
echo -n $num # assume num bps
|
||||
}
|
||||
|
||||
natflow_qos_setup()
|
||||
{
|
||||
local idx=$qos_idx
|
||||
qos_idx=$((qos_idx+1))
|
||||
local cfg="$1"
|
||||
local disabled user user_port remote remote_port proto rx_rate tx_rate
|
||||
|
||||
config_get disabled "$cfg" disabled 0
|
||||
config_get user "$cfg" user
|
||||
config_get user_port "$cfg" user_port
|
||||
config_get remote "$cfg" remote
|
||||
config_get remote_port "$cfg" remote_port
|
||||
config_get proto "$cfg" proto
|
||||
config_get rx_rate "$cfg" rx_rate 0
|
||||
config_get tx_rate "$cfg" tx_rate 0
|
||||
|
||||
[ "$disabled" = "1" ] && return 0
|
||||
|
||||
#echo add user=<ipset/ip/ipcidr>,user_port=<portset/port>,remote=<ipset/ip/ipcidr>,remote_port=<portset/port>,proto=<tcp/udp>,rxbytes=Bytes,txbytes=Bytes
|
||||
|
||||
user=$($IPOPS netStrings2ipcidrStrings "$user")
|
||||
if [ "$(echo $user | sed 's/,/ /g' | wc -w)" -gt 1 ]; then
|
||||
ipset create qos_u$idx nethash 2>/dev/null
|
||||
ipset flush qos_u$idx
|
||||
for net in $(echo $user | sed 's/,/ /g'); do
|
||||
ipv4set_add qos_u$idx $net
|
||||
done
|
||||
user=qos_u$idx
|
||||
fi
|
||||
|
||||
if [ "$(echo $user_port | sed 's/,/ /g' | wc -w)" -gt 1 ]; then
|
||||
ipset create qos_up$idx bitmap:port range 0-65535 2>/dev/null
|
||||
ipset flush qos_up$idx
|
||||
for port in $(echo $user_port | sed 's/,/ /g'); do
|
||||
ipset add qos_up$idx $port
|
||||
done
|
||||
user_port=qos_up$idx
|
||||
fi
|
||||
|
||||
remote=$($IPOPS netStrings2ipcidrStrings "$remote")
|
||||
if [ "$(echo $remote | sed 's/,/ /g' | wc -w)" -gt 1 ]; then
|
||||
ipset create qos_r$idx nethash 2>/dev/null
|
||||
ipset flush qos_r$idx
|
||||
for net in $(echo $remote | sed 's/,/ /g'); do
|
||||
ipv4set_add qos_r$idx $net
|
||||
done
|
||||
remote=qos_r$idx
|
||||
fi
|
||||
|
||||
if [ "$(echo $remote_port | sed 's/,/ /g' | wc -w)" -gt 1 ]; then
|
||||
ipset create qos_rp$idx bitmap:port range 0-65535 2>/dev/null
|
||||
ipset flush qos_rp$idx
|
||||
for port in $(echo $remote_port | sed 's/,/ /g'); do
|
||||
ipset add qos_rp$idx $port
|
||||
done
|
||||
remote_port=qos_rp$idx
|
||||
fi
|
||||
|
||||
rx_rate=$(get_rate_data "$rx_rate")
|
||||
tx_rate=$(get_rate_data "$tx_rate")
|
||||
|
||||
cmd="add user=$user,user_port=$user_port,remote=$remote,remote_port=$remote_port,proto=$proto,rxbytes=$rx_rate,txbytes=$tx_rate"
|
||||
|
||||
echo "$cmd" >$DEVCTL
|
||||
}
|
||||
|
||||
start() {
|
||||
test -c $DEVCTL || return 0
|
||||
|
||||
echo clear >$DEVCTL
|
||||
|
||||
config_load natflow
|
||||
config_foreach natflow_qos_setup qos
|
||||
}
|
||||
|
||||
stop() {
|
||||
test -c $DEVCTL || return 0
|
||||
|
||||
echo clear >$DEVCTL
|
||||
ipset list -n | grep ^qos_ | while read ipset; do
|
||||
ipset destroy $ipset
|
||||
done
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
}
|
98
natflow/files/natflow-simple-qos.init
Normal file
98
natflow/files/natflow-simple-qos.init
Normal file
@ -0,0 +1,98 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2006-2011 OpenWrt.org
|
||||
|
||||
START=95
|
||||
|
||||
IPOPS="lua /usr/lib/lua/ipops.lua"
|
||||
test -e /usr/share/natflow/ipops.lua && IPOPS="lua /usr/share/natflow/ipops.lua"
|
||||
|
||||
get_rate_data()
|
||||
{
|
||||
local cnt num unit
|
||||
echo -n $1 | grep -qi "bps$" || {
|
||||
num=$1
|
||||
echo -n $((num)) # assume num B/s
|
||||
return
|
||||
}
|
||||
cnt=`echo -n $1 | wc -c || echo 0`
|
||||
test $cnt -le 4 && echo -n 0 && return # assume 0 B/s
|
||||
|
||||
num=`echo -n $1 | cut -c0-$((cnt-4))`
|
||||
unit=`echo -n $1 | cut -c$((cnt-3))-$cnt | tr A-Z a-z`
|
||||
case $unit in
|
||||
"kbps")
|
||||
num=$((num*128))
|
||||
;;
|
||||
"mbps")
|
||||
num=$((num*128*1024))
|
||||
;;
|
||||
"gbps")
|
||||
num=$((num*128*1024*1024))
|
||||
;;
|
||||
*)
|
||||
num=$((num/8))
|
||||
;;
|
||||
esac
|
||||
echo -n $num # assume num bps
|
||||
}
|
||||
|
||||
qos_simple_watch()
|
||||
{
|
||||
cat /dev/userinfo_event_ctl 2>/dev/null | while read line; do
|
||||
ip=${line//,*}
|
||||
idx=0
|
||||
while uci get natflow.@qos_simple[$idx] &>/dev/null; do
|
||||
disabled=$(uci get natflow.@qos_simple[$idx].disabled 2>/dev/null || echo 0)
|
||||
if [ "$disabled" = "0" ]; then
|
||||
user=$(uci get natflow.@qos_simple[$idx].user 2>/dev/null)
|
||||
if test -z "$user" || $IPOPS netStrings_test_netStrings "$user" "$ip"; then
|
||||
rx_rate=$(uci get natflow.@qos_simple[$idx].rx_rate 2>/dev/null)
|
||||
tx_rate=$(uci get natflow.@qos_simple[$idx].tx_rate 2>/dev/null)
|
||||
rx_rate=$(get_rate_data "$rx_rate")
|
||||
tx_rate=$(get_rate_data "$tx_rate")
|
||||
echo set-token-ctrl $ip $rx_rate $tx_rate >/dev/userinfo_ctl
|
||||
break
|
||||
fi
|
||||
fi
|
||||
idx=$((idx+1))
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
start() {
|
||||
cat /dev/userinfo_ctl | while read line; do
|
||||
ip=${line//,*}
|
||||
idx=0
|
||||
while uci get natflow.@qos_simple[$idx] &>/dev/null; do
|
||||
disabled=$(uci get natflow.@qos_simple[$idx].disabled 2>/dev/null || echo 0)
|
||||
if [ "$disabled" = "0" ]; then
|
||||
user=$(uci get natflow.@qos_simple[$idx].user 2>/dev/null)
|
||||
if test -z "$user" || $IPOPS netStrings_test_netStrings "$user" "$ip"; then
|
||||
rx_rate=$(uci get natflow.@qos_simple[$idx].rx_rate 2>/dev/null)
|
||||
tx_rate=$(uci get natflow.@qos_simple[$idx].tx_rate 2>/dev/null)
|
||||
rx_rate=$(get_rate_data "$rx_rate")
|
||||
tx_rate=$(get_rate_data "$tx_rate")
|
||||
echo set-token-ctrl $ip $rx_rate $tx_rate
|
||||
echo set-token-ctrl $ip $rx_rate $tx_rate >/dev/userinfo_ctl
|
||||
break
|
||||
fi
|
||||
fi
|
||||
idx=$((idx+1))
|
||||
done
|
||||
done
|
||||
|
||||
qos_simple_watch &
|
||||
}
|
||||
|
||||
stop() {
|
||||
kill -TERM $(pgrep -f "cat /dev/userinfo_event_ctl") &>/dev/null
|
||||
cat /dev/userinfo_ctl | while read line; do
|
||||
ip=${line//,*}
|
||||
echo set-token-ctrl $ip 0 0 >/dev/userinfo_ctl
|
||||
done
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
}
|
105
natflow/files/natflow-user.init
Normal file
105
natflow/files/natflow-user.init
Normal file
@ -0,0 +1,105 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2006-2011 OpenWrt.org
|
||||
|
||||
START=95
|
||||
|
||||
DEVCTL=/dev/natflow_user_ctl
|
||||
IPOPS="lua /usr/lib/lua/ipops.lua"
|
||||
test -e /usr/share/natflow/ipops.lua && IPOPS="lua /usr/share/natflow/ipops.lua"
|
||||
|
||||
auth_idx=0
|
||||
|
||||
# ipset_add ipsetname net
|
||||
ipv4set_add()
|
||||
{
|
||||
local ipsetname=$1
|
||||
local net=$2
|
||||
#hack for 0.0.0.0/0
|
||||
[ "$net" = "0.0.0.0/0" ] && net="0.0.0.0/1 128.0.0.0/1"
|
||||
for n in $net; do
|
||||
ipset add $ipsetname $n
|
||||
done
|
||||
}
|
||||
|
||||
natflow_user_setup()
|
||||
{
|
||||
local idx=$auth_idx
|
||||
auth_idx=$((auth_idx+1))
|
||||
local cfg="$1"
|
||||
local enabled szone type sipgrp ipwhite macwhite
|
||||
|
||||
config_get enabled "$cfg" enabled
|
||||
config_get szone "$cfg" szone
|
||||
config_get type "$cfg" type
|
||||
config_get sipgrp "$cfg" sipgrp
|
||||
config_get ipwhite "$cfg" ipwhite
|
||||
config_get macwhite "$cfg" macwhite
|
||||
|
||||
[ "$enabled" = "1" ] || return 0
|
||||
|
||||
#echo auth id=0,szone=0,type=auto,sipgrp=auth_sipgrp,ipwhite=,macwhite=
|
||||
|
||||
sipgrp=$($IPOPS netStrings2ipcidrStrings "$sipgrp")
|
||||
ipset create auth_sipgrp_$idx nethash 2>/dev/null
|
||||
ipset flush auth_sipgrp_$idx
|
||||
for net in $(echo "$sipgrp" | sed 's/,/ /g'); do
|
||||
ipv4set_add auth_sipgrp_$idx $net
|
||||
done
|
||||
|
||||
cmd="auth id=$idx,szone=$szone,type=$type,sipgrp=auth_sipgrp_$idx"
|
||||
if test -n "$ipwhite"; then
|
||||
ipwhite=$($IPOPS netStrings2ipcidrStrings "$ipwhite")
|
||||
ipset create auth_ipwhite_$idx nethash 2>/dev/null
|
||||
ipset flush auth_ipwhite_$idx
|
||||
for net in $(echo "$ipwhite" | sed 's/,/ /g'); do
|
||||
ipv4set_add auth_ipwhite_$idx $net
|
||||
done
|
||||
cmd="$cmd,ipwhite=auth_ipwhite_$idx"
|
||||
else
|
||||
cmd="$cmd,ipwhite="
|
||||
fi
|
||||
|
||||
if test -n "$macwhite"; then
|
||||
ipset create auth_macwhite_$idx machash 2>/dev/null
|
||||
ipset flush auth_macwhite_$idx
|
||||
for mac in $(echo "$macwhite" | sed 's/,/ /g'); do
|
||||
ipset add auth_macwhite_$idx $mac
|
||||
done
|
||||
cmd="$cmd,macwhite=auth_macwhite_$idx"
|
||||
else
|
||||
cmd="$cmd,macwhite="
|
||||
fi
|
||||
|
||||
echo "$cmd" >$DEVCTL
|
||||
}
|
||||
|
||||
start() {
|
||||
test -c $DEVCTL || return 0
|
||||
|
||||
echo clean >$DEVCTL
|
||||
echo disabled=0 >$DEVCTL
|
||||
|
||||
config_load natflow
|
||||
config_foreach natflow_user_setup auth
|
||||
|
||||
no_flow_timeout=$(uci get natflow.globals.no_flow_timeout 2>/dev/null || echo 1800)
|
||||
echo no_flow_timeout=${no_flow_timeout} >$DEVCTL
|
||||
redirect_ip=$(uci get natflow.globals.redirect_ip 2>/dev/null || echo 10.10.10.10)
|
||||
echo redirect_ip=${redirect_ip} >$DEVCTL
|
||||
|
||||
echo update_magic >$DEVCTL
|
||||
}
|
||||
|
||||
stop() {
|
||||
test -c $DEVCTL || return 0
|
||||
|
||||
echo disabled=1 >$DEVCTL
|
||||
ipset list -n | grep ^auth_ | while read ipset; do
|
||||
ipset destroy $ipset
|
||||
done
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
start
|
||||
}
|
49
natflow/files/natflow-zone.init
Normal file
49
natflow/files/natflow-zone.init
Normal file
@ -0,0 +1,49 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2006-2011 OpenWrt.org
|
||||
|
||||
START=95
|
||||
|
||||
DEVCTL=/dev/natflow_zone_ctl
|
||||
|
||||
zone_idx=0
|
||||
|
||||
natflow_zone_setup()
|
||||
{
|
||||
local idx=$zone_idx
|
||||
zone_idx=$((zone_idx+1))
|
||||
local cfg="$1"
|
||||
local fw_zone ifname type
|
||||
|
||||
config_get fw_zone "$cfg" fw_zone
|
||||
config_get ifname "$cfg" ifname
|
||||
config_get type "$cfg" type
|
||||
|
||||
(for fwz in $fw_zone; do
|
||||
fw3 -q zone $fwz
|
||||
done; \
|
||||
for ifn in $ifname; do
|
||||
echo $ifn
|
||||
done) | sed 's/\*$/+/' | sort | uniq | while read IFN; do
|
||||
echo $type $idx=$IFN >$DEVCTL
|
||||
done
|
||||
}
|
||||
|
||||
start() {
|
||||
test -c $DEVCTL || return 0
|
||||
|
||||
echo clean >$DEVCTL
|
||||
|
||||
config_load natflow
|
||||
config_foreach natflow_zone_setup zone
|
||||
|
||||
echo update_match >$DEVCTL
|
||||
}
|
||||
|
||||
stop() {
|
||||
test -c $DEVCTL || return 0
|
||||
}
|
||||
|
||||
restart()
|
||||
{
|
||||
start
|
||||
}
|
46
natflow/files/natflow.config
Normal file
46
natflow/files/natflow.config
Normal file
@ -0,0 +1,46 @@
|
||||
config natflow 'main'
|
||||
option hwnat '1'
|
||||
option hwnat_wed '0'
|
||||
option enabled '1'
|
||||
option debug '3'
|
||||
option delay_pkts '0'
|
||||
option skip_qos_to_slow_path '0'
|
||||
list ifname_filter ''
|
||||
|
||||
config globals 'globals'
|
||||
option redirect_ip '10.10.10.1'
|
||||
option no_flow_timeout '1800'
|
||||
|
||||
config auth
|
||||
option enabled '1'
|
||||
option szone '0'
|
||||
option type 'auto'
|
||||
option sipgrp '192.168.15.2-192.168.15.254'
|
||||
option ipwhite ''
|
||||
option macwhite ''
|
||||
|
||||
config zone
|
||||
option type 'lan_zone'
|
||||
list fw_zone 'lan'
|
||||
list ifname 'tun+'
|
||||
|
||||
config zone
|
||||
option type 'wan_zone'
|
||||
list fw_zone 'wan'
|
||||
list ifname 'ppp+'
|
||||
|
||||
config qos 'example'
|
||||
option user '192.168.15.0/24' #ip,iprange,ipcidr or ''
|
||||
option user_port ''
|
||||
option remote ''
|
||||
option remote_port '80,443'
|
||||
option proto 'tcp' # tcp or udp or ''
|
||||
option rx_rate '10Mbps'
|
||||
option tx_rate '5Mbps'
|
||||
option disabled '1'
|
||||
|
||||
config qos_simple "simple1"
|
||||
option user '192.168.15.0/24'
|
||||
option rx_rate '10Mbps'
|
||||
option tx_rate '5Mbps'
|
||||
option disabled '1'
|
40
ngrokc/Makefile
Normal file
40
ngrokc/Makefile
Normal file
@ -0,0 +1,40 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=ngrokc
|
||||
PKG_VERSION:=1.55
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/dosgo/ngrok-c.git
|
||||
PKG_SOURCE_DATE:=2021-09-01
|
||||
PKG_SOURCE_VERSION:=5da550284ed5bec7fa843c574e52b840e918fa4c
|
||||
PKG_MIRROR_HASH:=3b62878222f93d267b69a6e8542a381d1ab7aeda9457d3bb3a86cccb8b8feb0b
|
||||
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/ngrokc
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Web Servers/Proxies
|
||||
TITLE:=Secure tunnels to localhost (C++ port)
|
||||
URL:=https://github.com/dosgo/ngrok-c
|
||||
DEPENDS:=+libc +libpthread +libopenssl +libstdcpp +zlib \
|
||||
+USE_GLIBC:libatomic
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
$(call Build/Prepare/Default)
|
||||
$(CP) $(PKG_BUILD_DIR)/Makefile.openssl $(PKG_BUILD_DIR)/Makefile
|
||||
endef
|
||||
|
||||
define Package/ngrokc/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/ngrokc $(1)/usr/bin
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,ngrokc))
|
40
njitclient/Makefile
Normal file
40
njitclient/Makefile
Normal file
@ -0,0 +1,40 @@
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=njit8021xclient
|
||||
PKG_BASE_VERSION:=2.0
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/bitdust/njit8021xclient.git
|
||||
PKG_SOURCE_DATE:=2018-11-24
|
||||
PKG_SOURCE_VERSION:=dd28c17f24275bbbf4c44504b832c0f1e6b9ae40
|
||||
PKG_MIRROR_HASH:=66e4f20ceeceaed457657b60ec0b390aab0d7ff380b0abe749738b8f4aa23556
|
||||
|
||||
PKG_VERSION:=$(PKG_BASE_VERSION)-$(PKG_SOURCE_DATE)-$(call version_abbrev,$(PKG_SOURCE_VERSION))
|
||||
|
||||
PKG_FIXUP:=autoreconf
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_INSTALL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/njit8021xclient
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Campus Network
|
||||
TITLE:=NJIT 802.1X client program
|
||||
DEPENDS:=+libopenssl +libpcap
|
||||
endef
|
||||
|
||||
define Package/njit8021xclient/description
|
||||
802.1X client from Nanjing Institude of Technology, compatable with
|
||||
H3C iNode 802.1X client. Support H3C/iNode's private authentication
|
||||
protocol V7.10.
|
||||
endef
|
||||
|
||||
define Package/njit8021xclient/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/njit-client $(1)/usr/sbin/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,njit8021xclient))
|
241
oscam/Config.in
Normal file
241
oscam/Config.in
Normal file
@ -0,0 +1,241 @@
|
||||
menu "OSCam build options"
|
||||
depends on PACKAGE_oscam
|
||||
|
||||
config OSCAM_USE_LIBCRYPTO
|
||||
bool "Build with OpenSSL libcrypto"
|
||||
help
|
||||
"Use OpenSSL libcrypto instead of OSCam internal crypto functions"
|
||||
default y
|
||||
|
||||
config OSCAM_USE_LIBUSB
|
||||
bool
|
||||
default y
|
||||
|
||||
menu "Protocols"
|
||||
depends on PACKAGE_oscam
|
||||
|
||||
config OSCAM_MODULE_CAMD33
|
||||
bool "camd 3.3"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_CAMD35
|
||||
bool "camd 3.5 UDP"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_CAMD35_TCP
|
||||
bool "camd 3.5 TCP"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_NEWCAMD
|
||||
bool "newcamd"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_CCCAM
|
||||
bool "CCcam"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_CCCSHARE
|
||||
bool "CCcam share"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_GBOX
|
||||
bool "gbox"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_RADEGAST
|
||||
bool "radegast"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_SERIAL
|
||||
bool "Serial"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_CONSTCW
|
||||
bool "constant CW"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_PANDORA
|
||||
bool "Pandora"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_GHTTP
|
||||
bool "Ghttp"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_SCAM
|
||||
bool "scam"
|
||||
default y
|
||||
|
||||
endmenu
|
||||
|
||||
menu "Readers"
|
||||
depends on PACKAGE_oscam
|
||||
|
||||
config OSCAM_READER_NAGRA
|
||||
bool "Nagravision"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_IRDETO
|
||||
bool "Irdeto"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_CONAX
|
||||
bool "Conax"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_CRYPTOWORKS
|
||||
bool "Cryptoworks"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_SECA
|
||||
bool "Seca"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_VIACCESS
|
||||
bool "Viaccess"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_VIDEOGUARD
|
||||
bool "NDS Videoguard"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_DRE
|
||||
bool "DRE Crypt"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_TONGFANG
|
||||
bool "Tongfang"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_BULCRYPT
|
||||
bool "Bulcrypt"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_GRIFFIN
|
||||
bool "Griffin"
|
||||
default y
|
||||
|
||||
config OSCAM_READER_DGCRYPT
|
||||
bool "DGCrypt"
|
||||
default y
|
||||
|
||||
endmenu
|
||||
|
||||
menu "Card readers"
|
||||
depends on PACKAGE_oscam
|
||||
|
||||
config OSCAM_USE_PCSC
|
||||
bool "PCSC compatible readers"
|
||||
select OSCAM_USE_LIBUSB
|
||||
default y
|
||||
|
||||
config OSCAM_CARDREADER_PHOENIX
|
||||
bool "Phoenix/mouse USB readers"
|
||||
select OSCAM_USE_LIBUSB
|
||||
default y
|
||||
|
||||
config OSCAM_CARDREADER_SC8IN1
|
||||
bool "SC8in1"
|
||||
select OSCAM_USE_LIBUSB
|
||||
default y
|
||||
|
||||
config OSCAM_CARDREADER_MP35
|
||||
bool "AD-Teknik MP 3.6/USB Phoenix"
|
||||
select OSCAM_USE_LIBUSB
|
||||
default y
|
||||
|
||||
config OSCAM_CARDREADER_SMARGO
|
||||
bool "Argolis Smargo Smartreader"
|
||||
select OSCAM_USE_LIBUSB
|
||||
default y
|
||||
|
||||
config OSCAM_CARDREADER_STINGER
|
||||
bool "Stinger USB Dual Smartcard Reader"
|
||||
select OSCAM_USE_LIBUSB
|
||||
default y
|
||||
|
||||
config OSCAM_CARDREADER_DRECAS
|
||||
bool "DRECAS reader"
|
||||
default y
|
||||
|
||||
endmenu
|
||||
|
||||
comment "Addons"
|
||||
config OSCAM_HAVE_DVBAPI
|
||||
bool "DVB API"
|
||||
default y
|
||||
|
||||
config OSCAM_READ_SDT_CHARSETS
|
||||
bool "DVB API read-sdt charsets"
|
||||
default y
|
||||
|
||||
config OSCAM_IRDETO_GUESSING
|
||||
bool "Irdeto guessing"
|
||||
default y
|
||||
|
||||
config OSCAM_CS_ANTICASC
|
||||
bool "Anti cascading"
|
||||
default y
|
||||
|
||||
config OSCAM_WITH_DEBUG
|
||||
bool "Debug messages"
|
||||
default y
|
||||
|
||||
config OSCAM_MODULE_MONITOR
|
||||
bool "Monitor"
|
||||
default y
|
||||
|
||||
config OSCAM_WITH_LB
|
||||
bool "Loadbalancing"
|
||||
default y
|
||||
|
||||
config OSCAM_S_CACHEEX
|
||||
bool "Cache exchange"
|
||||
default y
|
||||
|
||||
config OSCAM_CW_CYCLE_CHECK
|
||||
bool "CW Cycle Check"
|
||||
default y
|
||||
|
||||
config OSCAM_LCDSUPPORT
|
||||
bool "LCD support"
|
||||
default n
|
||||
|
||||
config OSCAM_LEDSUPPORT
|
||||
bool "LED support"
|
||||
default n
|
||||
|
||||
config OSCAM_CLOCKFIX
|
||||
bool "Clockfix (disable on old systems!)"
|
||||
default y
|
||||
|
||||
config OSCAM_IPV6SUPPORT
|
||||
bool "IPv6 support (experimental)"
|
||||
default n
|
||||
|
||||
config OSCAM_WEBIF
|
||||
bool "Web Interface"
|
||||
default y
|
||||
|
||||
config OSCAM_WEBIF_LIVELOG
|
||||
bool "LiveLog"
|
||||
depends on OSCAM_WEBIF
|
||||
default y
|
||||
|
||||
config OSCAM_WEBIF_JQUERY
|
||||
bool "Jquery onboard (if disabled webload)"
|
||||
depends on OSCAM_WEBIF
|
||||
default y
|
||||
|
||||
config OSCAM_TOUCH
|
||||
bool "Touch Web Interface"
|
||||
depends on OSCAM_WEBIF
|
||||
default y
|
||||
|
||||
config OSCAM_WITH_SSL
|
||||
bool "SSL support"
|
||||
depends on OSCAM_WEBIF
|
||||
select OSCAM_USE_LIBCRYPTO
|
||||
default y
|
||||
|
||||
endmenu
|
156
oscam/Makefile
Normal file
156
oscam/Makefile
Normal file
@ -0,0 +1,156 @@
|
||||
#
|
||||
# Copyright (C) 2016-2017 Tomasz Maciej Nowak <tomek_n@o2.pl>
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=oscam
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/nx111/oscam.git
|
||||
PKG_SOURCE_DATE:=2020-12-12
|
||||
PKG_SOURCE_VERSION:=aafda4bca3c347698ef1dc32f7ebeff76378d55a
|
||||
PKG_MIRROR_HASH:=d2cd4508ef80a3cbd8ef950e5446f2f754b339f179c4f774ef8660b39fd5c4c1
|
||||
|
||||
PKG_LICENSE:=GPL-3.0
|
||||
PKG_LICENSE_FILE:=COPYING
|
||||
PKG_MAINTAINER:=Tomasz Maciej Nowak <tomek_n@o2.pl>
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/oscam/config
|
||||
source "$(SOURCE)/Config.in"
|
||||
endef
|
||||
|
||||
define Package/oscam
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=Open Source Conditional Access Modul
|
||||
URL:=http://www.streamboard.tv/oscam
|
||||
DEPENDS:=+OSCAM_USE_LIBCRYPTO:libopenssl +OSCAM_USE_LIBUSB:libusb-1.0 +OSCAM_USE_PCSC:pcscd
|
||||
endef
|
||||
|
||||
define Package/list-smargo
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
TITLE:=List Smargo readers
|
||||
URL:=http://www.streamboard.tv/oscam
|
||||
DEPENDS:=oscam @OSCAM_CARDREADER_SMARGO
|
||||
endef
|
||||
|
||||
CONFIGURE_CMD:=./config.sh
|
||||
CONFIGURE_ARGS+= \
|
||||
--restore \
|
||||
$(if $(CONFIG_OSCAM_WEBIF),--enable,--disable) WEBIF \
|
||||
$(if $(CONFIG_OSCAM_WEBIF_LIVELOG),--enable,--disable) WEBIF_LIVELOG \
|
||||
$(if $(CONFIG_OSCAM_WEBIF_JQUERY),--enable,--disable) WEBIF_JQUERY \
|
||||
$(if $(CONFIG_OSCAM_TOUCH),--enable,--disable) TOUCH \
|
||||
$(if $(CONFIG_OSCAM_WITH_SSL),--enable,--disable) WITH_SSL \
|
||||
$(if $(CONFIG_OSCAM_HAVE_DVBAPI),--enable,--disable) HAVE_DVBAPI \
|
||||
$(if $(CONFIG_OSCAM_READ_SDT_CHARSETS),--enable,--disable) READ_SDT_CHARSETS \
|
||||
$(if $(CONFIG_OSCAM_IRDETO_GUESSING),--enable,--disable) IRDETO_GUESSING \
|
||||
$(if $(CONFIG_OSCAM_CS_ANTICASC),--enable,--disable) CS_ANTICASC \
|
||||
$(if $(CONFIG_OSCAM_WITH_DEBUG),--enable,--disable) WITH_DEBUG \
|
||||
$(if $(CONFIG_OSCAM_MODULE_MONITOR),--enable,--disable) MODULE_MONITOR \
|
||||
$(if $(CONFIG_OSCAM_WITH_LB),--enable,--disable) WITH_LB \
|
||||
$(if $(CONFIG_OSCAM_CS_CACHEEX),--enable,--disable) CS_CACHEEX \
|
||||
$(if $(CONFIG_OSCAM_CW_CYCLE_CHECK),--enable,--disable) CW_CYCLE_CHECK \
|
||||
$(if $(CONFIG_OSCAM_LCDSUPPORT),--enable,--disable) LCDSUPPORT \
|
||||
$(if $(CONFIG_OSCAM_LEDSUPPORT),--enable,--disable) LEDSUPPORT \
|
||||
$(if $(CONFIG_OSCAM_CLOCKFIX),--enable,--disable) CLOCKFIX \
|
||||
$(if $(CONFIG_OSCAM_IPV6SUPPORT),--enable,--disable) IPV6SUPPORT \
|
||||
$(if $(CONFIG_OSCAM_MODULE_CAMD33),--enable,--disable) MODULE_CAMD33 \
|
||||
$(if $(CONFIG_OSCAM_MODULE_CAMD35),--enable,--disable) MODULE_CAMD35 \
|
||||
$(if $(CONFIG_OSCAM_MODULE_CAMD35_TCP),--enable,--disable) MODULE_CAMD35_TCP \
|
||||
$(if $(CONFIG_OSCAM_MODULE_NEWCAMD),--enable,--disable) MODULE_NEWCAMD \
|
||||
$(if $(CONFIG_OSCAM_MODULE_CCCAM),--enable,--disable) MODULE_CCCAM \
|
||||
$(if $(CONFIG_OSCAM_MODULE_CCCSHARE),--enable,--disable) MODULE_CCCSHARE \
|
||||
$(if $(CONFIG_OSCAM_MODULE_GBOX),--enable,--disable) MODULE_GBOX \
|
||||
$(if $(CONFIG_OSCAM_MODULE_RADEGAST),--enable,--disable) MODULE_RADEGAST \
|
||||
$(if $(CONFIG_OSCAM_MODULE_SCAM),--enable,--disable) MODULE_SCAM \
|
||||
$(if $(CONFIG_OSCAM_MODULE_SERIAL),--enable,--disable) MODULE_SERIAL \
|
||||
$(if $(CONFIG_OSCAM_MODULE_CONSTCW),--enable,--disable) MODULE_CONSTCW \
|
||||
$(if $(CONFIG_OSCAM_MODULE_PANDORA),--enable,--disable) MODULE_PANDORA \
|
||||
$(if $(CONFIG_OSCAM_MODULE_GHTTP),--enable,--disable) MODULE_GHTTP \
|
||||
$(if $(CONFIG_OSCAM_READER_NAGRA),--enable,--disable) READER_NAGRA \
|
||||
$(if $(CONFIG_OSCAM_READER_IRDETO),--enable,--disable) READER_IRDETO \
|
||||
$(if $(CONFIG_OSCAM_READER_CONAX),--enable,--disable) READER_CONAX \
|
||||
$(if $(CONFIG_OSCAM_READER_CRYPTOWORKS),--enable,--disable) READER_CRYPTOWORKS \
|
||||
$(if $(CONFIG_OSCAM_READER_SECA),--enable,--disable) READER_SECA \
|
||||
$(if $(CONFIG_OSCAM_READER_VIACCESS),--enable,--disable) READER_VIACCESS \
|
||||
$(if $(CONFIG_OSCAM_READER_VIDEOGUARD),--enable,--disable) READER_VIDEOGUARD \
|
||||
$(if $(CONFIG_OSCAM_READER_DRE),--enable,--disable) READER_DRE \
|
||||
$(if $(CONFIG_OSCAM_READER_TONGFANG),--enable,--disable) READER_TONGFANG \
|
||||
$(if $(CONFIG_OSCAM_READER_BULCRYPT),--enable,--disable) READER_BULCRYPT \
|
||||
$(if $(CONFIG_OSCAM_READER_GRIFFIN),--enable,--disable) READER_GRIFFIN \
|
||||
$(if $(CONFIG_OSCAM_READER_DGCRYPT),--enable,--disable) READER_DGCRYPT \
|
||||
$(if $(CONFIG_OSCAM_CARDREADER_PHOENIX),--enable,--disable) CARDREADER_PHOENIX \
|
||||
$(if $(CONFIG_OSCAM_CARDREADER_SC8IN1),--enable,--disable) CARDREADER_SC8IN1 \
|
||||
$(if $(CONFIG_OSCAM_CARDREADER_MP35),--enable,--disable) CARDREADER_MP35 \
|
||||
$(if $(CONFIG_OSCAM_CARDREADER_SMARGO),--enable,--disable) CARDREADER_SMARGO \
|
||||
$(if $(CONFIG_OSCAM_CARDREADER_STINGER),--enable,--disable) CARDREADER_STINGER \
|
||||
$(if $(CONFIG_OSCAM_CARDREADER_DRECAS),--enable,--disable) CARDREADER_DRECAS \
|
||||
--disable CARDREADER_INTERNAL_AZBOX \
|
||||
--disable CARDREADER_INTERNAL_COOLAPI \
|
||||
--disable CARDREADER_INTERNAL_COOLAPI2 \
|
||||
--disable CARDREADER_INTERNAL_SCI \
|
||||
--disable CARDREADER_DB2COM \
|
||||
--disable CARDREADER_STAPI \
|
||||
--disable CARDREADER_STAPI5
|
||||
|
||||
ifeq ($(CONFIG_OSCAM_USE_LIBUSB),y)
|
||||
MAKE_FLAGS += USE_LIBUSB=1
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_OSCAM_USE_PCSC),y)
|
||||
MAKE_FLAGS += USE_PCSC=1
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_OSCAM_USE_LIBCRYPTO),y)
|
||||
MAKE_FLAGS += USE_LIBCRYPTO=1
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_OSCAM_WITH_SSL),y)
|
||||
MAKE_FLAGS += USE_SSL=1
|
||||
endif
|
||||
|
||||
MAKE_FLAGS += \
|
||||
CONF_DIR=/etc/oscam \
|
||||
OSCAM_BIN=Distribution/oscam \
|
||||
LIST_SMARGO_BIN=Distribution/list-smargo
|
||||
|
||||
define Package/oscam/conffiles
|
||||
/etc/oscam/
|
||||
endef
|
||||
|
||||
define Package/oscam/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/Distribution/oscam $(1)/usr/bin/oscam
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/oscam
|
||||
# $(CP) $(PKG_BUILD_DIR)/Distribution/doc/example/* $(1)/etc/oscam/
|
||||
$(INSTALL_CONF) ./files/oscam.conf $(1)/etc/oscam/oscam.conf
|
||||
$(INSTALL_CONF) ./files/oscam.user $(1)/etc/oscam/oscam.user
|
||||
$(INSTALL_CONF) ./files/oscam.dvbapi $(1)/etc/oscam/oscam.dvbapi
|
||||
$(INSTALL_CONF) ./files/oscam.server $(1)/etc/oscam/oscam.server
|
||||
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/oscam.init $(1)/etc/init.d/oscam
|
||||
|
||||
$(INSTALL_DIR) $(1)/usr/share/oscam
|
||||
$(INSTALL_BIN) ./files/oscam-watchdog.sh $(1)/usr/share/oscam/oscam-watchdog.sh
|
||||
|
||||
endef
|
||||
|
||||
define Package/list-smargo/install
|
||||
$(INSTALL_DIR) $(1)/usr/bin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/Distribution/list-smargo $(1)/usr/bin/list-smargo
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,oscam))
|
||||
$(eval $(call BuildPackage,list-smargo))
|
31
oscam/files/oscam-watchdog.sh
Executable file
31
oscam/files/oscam-watchdog.sh
Executable file
@ -0,0 +1,31 @@
|
||||
#!/bin/sh
|
||||
|
||||
sleeptime=60
|
||||
logfile="/var/log/oscam.log"
|
||||
OSCAM_PATH=/usr/bin
|
||||
enable=$(uci get oscam.config.enabled 2>/dev/null)
|
||||
|
||||
oscam_log(){
|
||||
logrow=$(grep -c "" ${logfile})
|
||||
if [ $logrow -ge 500 ];then
|
||||
cat /dev/null > ${logfile}
|
||||
echo "$curtime Log条数超限,清空处理!" >> ${logfile}
|
||||
fi
|
||||
}
|
||||
|
||||
while [ $enable -eq 1 ];
|
||||
do
|
||||
oscam_log
|
||||
curtime=`date "+%H:%M:%S"`
|
||||
echo "$curtime online! "
|
||||
|
||||
if ! pidof oscam>/dev/null; then
|
||||
service_start ${OSCAM_PATH}/oscam -b -r 2 -u
|
||||
echo "$curtime 重启服务!" >> ${logfile}
|
||||
fi
|
||||
|
||||
sleep ${sleeptime}
|
||||
continue
|
||||
done
|
||||
|
||||
|
48
oscam/files/oscam.conf
Normal file
48
oscam/files/oscam.conf
Normal file
@ -0,0 +1,48 @@
|
||||
# oscam.conf generated automatically by Streamboard OSCAM 1.20-unstable_svn SVN r11390
|
||||
# Read more: http://www.streamboard.tv/svn/oscam/trunk/Distribution/doc/txt/oscam.conf.txt
|
||||
|
||||
[global]
|
||||
disablelog = 1
|
||||
logfile = /var/log/oscam/oscam.log
|
||||
nice = 0
|
||||
maxlogsize = 1000
|
||||
preferlocalcards = 1
|
||||
lb_mode = 3
|
||||
lb_min_ecmcount = 8
|
||||
|
||||
[cache]
|
||||
|
||||
[dvbapi]
|
||||
enabled = 1
|
||||
au = 1
|
||||
pmt_mode = 4
|
||||
request_mode = 1
|
||||
listen_port = 9000
|
||||
delayer = 80
|
||||
user = TVH
|
||||
boxtype = pc
|
||||
|
||||
[camd33]
|
||||
port = 44444
|
||||
serverip = 127.0.0.1
|
||||
nocrypt = 127.0.0.1
|
||||
|
||||
[cccam]
|
||||
port = 12000
|
||||
nodeid = 178EC950108E1442
|
||||
version = 2.3.0
|
||||
reshare = 1
|
||||
ignorereshare = 1
|
||||
stealth = 1
|
||||
|
||||
[webif]
|
||||
httpport = 8888
|
||||
httpuser = oscam
|
||||
httppwd = oscam
|
||||
httpshowmeminfo = 1
|
||||
httpshowuserinfo = 1
|
||||
httpshowecminfo = 1
|
||||
httpshowloadinfo = 1
|
||||
httpallowed = 0.0.0.0-255.255.255.255
|
||||
aulow = 120
|
||||
httputf8
|
31
oscam/files/oscam.dvbapi
Executable file
31
oscam/files/oscam.dvbapi
Executable file
@ -0,0 +1,31 @@
|
||||
P: 0500:040620 # NTV+ (36Е)
|
||||
P: 0500:041200 # NTV+ (36Е)
|
||||
P: 0500:060A00 # NTV+ (36E)
|
||||
P: 0500:060C00 # NTV+ (36E)
|
||||
P: 0500:023100 # trk football (Shara)(5Е)
|
||||
P: 0500:041200 # trk football (Shara)(5Е)
|
||||
P: 0500:041700 # Dorcel TV (13Е)
|
||||
P: 0500:042300 # rtvi (13Е)
|
||||
P: 0500:042700 # SCT, S1-7-HQ,HD (13Е)
|
||||
P: 0500:042800 # Absat/BisTV (13Е)
|
||||
P: 0500:043800 # REDLIGHT HD, Redlight Premium & Daring! TV (13Е)
|
||||
P: 0100:000068 # Cyfra+ 13e
|
||||
P: 09CD:0 # Sky 13e
|
||||
P: 1803:007001 # Polsat (13Е)
|
||||
P: 1803:007101 # Polsat (13Е)
|
||||
P: 1803:000000 # Polsat (13Е)
|
||||
P: 090D:0 # yes 4w
|
||||
P: 090F:0 # viasat baltic 5e
|
||||
|
||||
# EMU
|
||||
P: 2600:000000 # BISS
|
||||
P: 0500:023800 # srg (EMU)(13Е)
|
||||
P: 0E00:000000 # PowerVU
|
||||
P: 0500:007400
|
||||
P: 0D00:000000
|
||||
P: 0D05:000000
|
||||
P: 0D02:000000
|
||||
P: 1801:000000
|
||||
|
||||
# Ignor
|
||||
I:0
|
45
oscam/files/oscam.init
Executable file
45
oscam/files/oscam.init
Executable file
@ -0,0 +1,45 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
|
||||
START=99
|
||||
OSCAM_PATH=/usr/bin
|
||||
|
||||
[ -f /tmp/oscam ] &&
|
||||
{
|
||||
OSCAM_PATH=/tmp
|
||||
[ -x /tmp/oscam ] || chmod +x /tmp/oscam
|
||||
}
|
||||
|
||||
start() {
|
||||
enable=$(uci get oscam.config.enabled 2>/dev/null)
|
||||
kill -9 $(ps | grep oscam-watchdog.sh | grep -v "grep" | awk '{print $1}') >/dev/null 2>&1
|
||||
if [ $enable -eq 1 ]; then
|
||||
/etc/init.d/pcscd enable
|
||||
/etc/init.d/pcscd start
|
||||
if pidof oscam >/dev/null; then
|
||||
kill $(pidof oscam) >/dev/null 2>&1 || killall -9 oscam >/dev/null 2>&1
|
||||
sleep 1
|
||||
fi
|
||||
echo "enable"
|
||||
[ -d /var/log/oscam ] || mkdir -p /var/log/oscam
|
||||
service_start ${OSCAM_PATH}/oscam -b -r 2 -u
|
||||
nohup /usr/share/oscam/oscam-watchdog.sh > /var/log/oscam.log 2>&1 &
|
||||
fi
|
||||
}
|
||||
|
||||
stop() {
|
||||
enable=$(uci get oscam.config.enabled 2>/dev/null)
|
||||
if [ $enable -ne 1 ]; then
|
||||
echo "stop!"
|
||||
kill -9 $(ps | grep oscam-watchdog.sh | grep -v "grep" | awk '{print $1}') >/dev/null 2>&1
|
||||
kill $(pidof oscam) >/dev/null 2>&1 || killall -9 oscam >/dev/null 2>&1
|
||||
/etc/init.d/pcscd stop
|
||||
/etc/init.d/pcscd disable
|
||||
fi
|
||||
}
|
||||
|
||||
restart(){
|
||||
stop
|
||||
sleep 2
|
||||
start
|
||||
echo "oscam Server has restarted."
|
||||
}
|
14
oscam/files/oscam.server
Executable file
14
oscam/files/oscam.server
Executable file
@ -0,0 +1,14 @@
|
||||
# oscam.server generated automatically by Streamboard OSCAM 1.20-unstable_svn SVN r11401
|
||||
# Read more: http://www.streamboard.tv/svn/oscam/trunk/Distribution/doc/txt/oscam.server.txt
|
||||
|
||||
[reader]
|
||||
label = emulator
|
||||
protocol = emu
|
||||
device = emulator
|
||||
caid = 0D00,0D02,090F,0500,1801,0604,2600,FFFF,0E00
|
||||
detect = cd
|
||||
ident = 0D00:000000,000004,000010,000014,000020,0000C0,0000C4,0000C8,0000CC;0D02:000000,00008C,0000A0,0000A4,0000A8;090F:000000;0500:000000,030B00,023800,021110,007400,007800;1801:000000,007301,001101;0604:000000;2600:000000;FFFF:000000;0E00:000000
|
||||
group = 1
|
||||
emmcache = 2,3,2,0
|
||||
emu_auproviders = 0500:030B00;0604:010200;0E00:000000
|
||||
|
27
oscam/files/oscam.user
Executable file
27
oscam/files/oscam.user
Executable file
@ -0,0 +1,27 @@
|
||||
# oscam.user generated automatically by Streamboard OSCAM 1.20-unstable_svn SVN r11401
|
||||
# Read more: http://www.streamboard.tv/svn/oscam/trunk/Distribution/doc/txt/oscam.user.txt
|
||||
|
||||
[account]
|
||||
user = tvheadend_x
|
||||
pwd = tvheadend_x
|
||||
monlevel = 4
|
||||
au = 1
|
||||
group = 1
|
||||
max_connections = 100
|
||||
cccreshare = 1
|
||||
|
||||
[account]
|
||||
user = user1
|
||||
pwd = user1
|
||||
monlevel = 4
|
||||
au = 1
|
||||
group = 1
|
||||
max_connections = 100
|
||||
cccreshare = 1
|
||||
|
||||
[account]
|
||||
user = monitor
|
||||
pwd = monitor
|
||||
monlevel = 4
|
||||
group = 1
|
||||
|
53
quickjspp/Makefile
Normal file
53
quickjspp/Makefile
Normal file
@ -0,0 +1,53 @@
|
||||
# SPDX-License-Identifier: GPL-3.0-only
|
||||
#
|
||||
# Copyright (C) 2021 ImmortalWrt.org
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=quickjspp
|
||||
PKG_RELEASE:=$(AUTORELEASE)
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/ftk/quickjspp.git
|
||||
PKG_SOURCE_DATE:=2022-07-22
|
||||
PKG_SOURCE_VERSION:=9cee4b4d27271d54b95f6f42bfdc534ebeaaeb72
|
||||
PKG_MIRROR_HASH:=1d23111923565d8f125ca52386299d7e497328765a30d677f9437687470c89a4
|
||||
|
||||
PKG_MAINTAINER:=Tianling Shen <cnsztl@immortalwrt.org>
|
||||
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
CMAKE_INSTALL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
include $(INCLUDE_DIR)/cmake.mk
|
||||
|
||||
define Package/libquickjs
|
||||
SECTION:=lib
|
||||
CATEGORY:=Libraries
|
||||
URL:=https://bellard.org/quickjs/
|
||||
TITLE:=A small and embeddable Javascript engine
|
||||
# mips(el) & glibc require it
|
||||
DEPENDS:=+libatomic
|
||||
endef
|
||||
|
||||
define Package/libquickjs/description
|
||||
QuickJS is a small and embeddable Javascript engine. It supports the
|
||||
ES2020 specification including modules, asynchronous generators,
|
||||
proxies and BigInt.
|
||||
|
||||
It optionally supports mathematical extensions such as big decimal
|
||||
floating point numbers (BigDecimal), big binary floating point
|
||||
numbers (BigFloat) and operator overloading.
|
||||
endef
|
||||
|
||||
CMAKE_OPTIONS+= \
|
||||
-DBUILD_SHARED_LIBS=ON \
|
||||
-DBUILD_TESTING=OFF \
|
||||
-DCMAKE_EXE_LINKER_FLAGS="-latomic"
|
||||
|
||||
define Package/libquickjs/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/
|
||||
$(CP) $(PKG_INSTALL_DIR)/usr/lib/libquickjs.so $(1)/usr/lib/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,libquickjs))
|
15
quickjspp/patches/100-musl.patch
Normal file
15
quickjspp/patches/100-musl.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- a/quickjs/quickjs.c
|
||||
+++ b/quickjs/quickjs.c
|
||||
@@ -78,6 +78,12 @@
|
||||
#define CONFIG_STACK_CHECK
|
||||
#endif
|
||||
|
||||
+#ifndef FE_UPWARD
|
||||
+#define FE_UPWARD 0x800
|
||||
+#endif
|
||||
+#ifndef FE_DOWNWARD
|
||||
+#define FE_DOWNWARD 0x400
|
||||
+#endif
|
||||
|
||||
/* dump object free */
|
||||
//#define DUMP_FREE
|
11
quickjspp/patches/200-libdir.patch
Normal file
11
quickjspp/patches/200-libdir.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- a/quickjs/CMakeLists.txt
|
||||
+++ b/quickjs/CMakeLists.txt
|
||||
@@ -22,6 +22,6 @@ endif()
|
||||
include(GNUInstallDirs)
|
||||
install(TARGETS quickjs
|
||||
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/quickjs
|
||||
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/quickjs
|
||||
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/quickjs
|
||||
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||
)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user