diff --git a/macvlan/Makefile b/macvlan/Makefile new file mode 100644 index 000000000..6a2ce5cef --- /dev/null +++ b/macvlan/Makefile @@ -0,0 +1,45 @@ +# +# Copyright (C) 2018-2019 Ycarus (Yannick Chabanois) +# +# This is free software, licensed under the GNU General Public License v3 or later. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=macvlan +PKG_VERSION:=1 +PKG_RELEASE:=1 + +PKG_MAINTAINER:=Ycarus (Yannick Chabanois) +PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/macvlan + SECTION:=net + CATEGORY:=Network + TITLE:=MacVLAN configuration scripts + DEPENDS:=+kmod-macvlan + PKGARCH:=all +endef + +define Package/macvlan/description + MacVLAN configuration for OpenMPTCProuter. +endef + +define Build/Prepare +endef + +define Build/Configure +endef + +define Build/Compile +endef + +define Package/macvlan/install + $(INSTALL_DIR) $(1) + $(CP) ./files/* $(1)/ +endef + +$(eval $(call BuildPackage,macvlan)) diff --git a/macvlan/files/etc/config/macvlan b/macvlan/files/etc/config/macvlan new file mode 100644 index 000000000..e69de29bb diff --git a/macvlan/files/etc/init.d/macvlan b/macvlan/files/etc/init.d/macvlan new file mode 100755 index 000000000..2a868905d --- /dev/null +++ b/macvlan/files/etc/init.d/macvlan @@ -0,0 +1,106 @@ +#!/bin/sh /etc/rc.common + +START=4 +USE_PROCD=1 + +_setup_macaddr() { + uci -q get "network.$1_dev.macaddr" >/dev/null && return + uci -q set "network.$1_dev.macaddr=$2" +} + +_save_macaddr() { + local _ifname + local _macaddr + uci -q get "network.$1_dev.ifname" >/dev/null && { + _ifname=$(uci -q get "network.$1.ifname") + if [ -n "$(uci -q get network.$1.macaddr)" ] && [ "$(uci -q get network.$1.macaddr)" != "$(uci -q get network.$1_dev.macaddr)" ]; then + uci -q set network.$1_dev.macaddr="$(uci -q get network.$1.macaddr)" + else + _macaddr=$(ip link show dev $_ifname 2>/dev/null | grep link | awk '{print $2}') + [ -n "$_macaddr" ] && { + uci -q set network.$1_dev.macaddr=$_macaddr + uci -q set network.$1.macaddr=$_macaddr + } + fi + } + [ -z "$(uci -q get network.$1.macaddr)" ] && { + _ifname=$(uci -q get "network.$1.ifname") + [ -n "$_ifname" ] && { + _macaddr=$(ip link show dev $_ifname 2>/dev/null | grep link | awk '{print $2}') + [ -n "$_macaddr" ] && { + uci -q set network.$1.macaddr=$_macaddr + } + } + } +} + +_delete_device() { + [ "$(echo $1 | grep _dev)" != "" ] && { + local _intfdev=$(echo $1 | sed 's/_dev//') + [ "$(uci -q get network.$_intfdev.type)" != "macvlan" ] && { + logger -t "macvlan" "$_intfdev type is not MacVLAN, remove device network.$1" + uci -q batch <<-EOF + delete network.$1 + commit network + delete macvlan.$1 + commit macvlan + EOF + } + return + } +} + + +# Configuration by interface +_setup_interface() { + local _ifname + config_get _ifname "$1" masterintf + [ -z "$_ifname" ] && return + local _type + config_get _type "$1" type + config_get _proto "$1" proto + [ "$_proto" = "macvlan" ] && _type="macvlan" + [ "$_type" = "macvlan" ] || return 0 + + uci -q get "network.$1_dev.ifname" >/dev/null && { + uci -q set network.$1_dev.mtu=$(uci -q get network.$1.mtu) + [ -z "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1.masterintf=$(uci -q get network.$1_dev.ifname) + [ -n "$(uci -q get network.$1.masterintf)" ] && uci -q set network.$1_dev.ifname=$(uci -q get network.$1.masterintf) + [ -z "$(uci -q get network.$1.macaddr)" ] && uci -q set network.$1_dev.macaddr=$(uci -q get network.$1.macaddr) + uci -q commit network + return 0 + } + + uci -q batch <<-EOF + set network.$1_dev=device + set network.$1_dev.name=$1 + set network.$1_dev.type=macvlan + set network.$1_dev.ifname=$_ifname + set network.$1.ifname=$1 + set network.$1.masterintf=$_ifname + set network.$1.type=macvlan + set network.$1.defaultroute=0 + EOF + + _macaddr=$(uci -q get "network.$1.macaddr") + _setup_macaddr "$1" "${_macaddr:-auto$(date +%s)}" + uci -q set network.$1_dev.mtu=$(uci -q get network.$1.mtu) + uci -q commit network +} + +start_service() { + . /lib/functions.sh + config_load network + config_foreach _delete_device device + config_foreach _setup_interface interface + config_foreach _save_macaddr interface + uci -q commit network +} + +reload_service() { + start +} + +service_triggers() { + procd_add_reload_trigger network +} diff --git a/macvlan/files/etc/uci-defaults/40_luci-app-macvlan b/macvlan/files/etc/uci-defaults/40_luci-app-macvlan new file mode 100644 index 000000000..cc24b9c14 --- /dev/null +++ b/macvlan/files/etc/uci-defaults/40_luci-app-macvlan @@ -0,0 +1,11 @@ +#!/bin/sh + +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 diff --git a/openmptcprouter-full/Makefile b/openmptcprouter-full/Makefile index d93b43bbc..5bdd50770 100644 --- a/openmptcprouter-full/Makefile +++ b/openmptcprouter-full/Makefile @@ -44,7 +44,7 @@ MY_DEPENDS := \ luci-app-uhttpd \ luci-mod-rpc rpcd-mod-rpcsys rpcd-mod-file rpcd-mod-iwinfo \ luci-app-openvpn \ - luci-app-macvlan \ + macvlan \ shadowsocks-libev-ss-server shadowsocks-libev-ss-tunnel \ omr-6in4 ip6tables-mod-nat luci-proto-ipv6 6to4 6in4 6rd ip6tables \ speedtestc \ @@ -93,7 +93,8 @@ MY_DEPENDS := \ # lcd4linux-full # kmod-spi-gpio-custom -OMR_SUPPORTED_LANGS := ca zh-cn en fr de el he hu it ja ms no pl pt-br pt ro ru es sv uk vi +#OMR_SUPPORTED_LANGS := ar bg bn_BD ca en fi fr de el he hi hu it ja mr ms nb_NO pl pt_BR pt ro ru es sv uk vi zh_Hans zh_Hant +OMR_SUPPORTED_LANGS := ar bg ca cs de en fi fr de el he hi hu it ja ko mr ms no pl pt-br pt ro ru es sk sv tr uk vi zh-cn zh-tw define Package/$(PKG_NAME) SECTION:=OMR