update 2023-01-28 01:28:48
This commit is contained in:
parent
36f450ff01
commit
77602a1cf9
|
@ -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))
|
|
@ -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))
|
|
@ -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'
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
dnsproxy --version | grep "$PKG_VERSION"
|
|
@ -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))
|
|
@ -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
|
|
@ -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 ''
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
|
@ -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))
|
|
@ -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
|
|
@ -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
|
||||||
|
}
|
|
@ -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"
|
||||||
|
|
|
@ -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))
|
|
@ -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))
|
|
@ -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))
|
|
@ -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__
|
|
@ -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))
|
|
@ -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
|
|
@ -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 "序号"
|
|
@ -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,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" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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 "Имя пользователя"
|
|
@ -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 ""
|
|
@ -0,0 +1 @@
|
||||||
|
zh_Hans
|
|
@ -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 "账号"
|
|
@ -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 "账号"
|
|
@ -0,0 +1 @@
|
||||||
|
config smtp 'default'
|
|
@ -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
|
||||||
|
}
|
|
@ -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
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"admin/services/mail": {
|
||||||
|
"title": "E-Mail",
|
||||||
|
"order": 90,
|
||||||
|
"action": {
|
||||||
|
"type": "cbi",
|
||||||
|
"path": "mail"
|
||||||
|
},
|
||||||
|
"depends": {
|
||||||
|
"acl": [ "luci-app-mail" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"luci-app-mail": {
|
||||||
|
"description": "Grant UCI access for luci-app-mail",
|
||||||
|
"read": {
|
||||||
|
"uci": [ "mail" ]
|
||||||
|
},
|
||||||
|
"write": {
|
||||||
|
"uci": [ "mail" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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();
|
||||||
|
},
|
||||||
|
});
|
|
@ -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"
|
|
@ -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 ""
|
|
@ -0,0 +1 @@
|
||||||
|
zh_Hans
|
|
@ -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 "详细输出"
|
|
@ -0,0 +1 @@
|
||||||
|
config tcpdump
|
|
@ -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")
|
|
@ -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
|
|
@ -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" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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%>
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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"
|
|
@ -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 ""
|
|
@ -0,0 +1 @@
|
||||||
|
zh_Hans
|
|
@ -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 "版本"
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
|
@ -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" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"luci-app-snmpd": {
|
||||||
|
"description": "Grant UCI access for luci-app-snmpd",
|
||||||
|
"read": {
|
||||||
|
"uci": [ "snmpd" ]
|
||||||
|
},
|
||||||
|
"write": {
|
||||||
|
"uci": [ "snmpd" ]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -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))
|
|
@ -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 */
|
||||||
|
|
|
@ -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))
|
|
@ -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))
|
|
@ -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 &
|
|
@ -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 &
|
|
@ -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
|
||||||
|
}
|
|
@ -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
|
|
@ -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
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
|
@ -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
|
||||||
|
}
|
|
@ -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'
|
|
@ -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))
|
|
@ -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))
|
|
@ -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
|
|
@ -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))
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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."
|
||||||
|
}
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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))
|
|
@ -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
|
|
@ -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