Merge branch 'master' into cjdns-1
Signed-off-by: William Fleurant <william@netblazr.com>
This commit is contained in:
commit
5555862222
30 changed files with 439 additions and 1218 deletions
|
@ -8,13 +8,14 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=alfred
|
||||
PKG_VERSION:=2019.2
|
||||
PKG_VERSION:=2019.4
|
||||
PKG_RELEASE:=0
|
||||
PKG_HASH:=b656f0e9a97a99c7531b6d49ebfd663451c16cdd275bbf7d48ff8daed3880bf2
|
||||
PKG_HASH:=b5525b396595004654335ac1ebf9de1aab90263e66d5bcc43fc8a708b56a18ea
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION)
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
PKG_LICENSE:=GPL-2.0-only MIT
|
||||
PKG_LICENSE_FILES:=LICENSES/preferred/GPL-2.0 LICENSES/preferred/MIT
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
config 'alfred' 'alfred'
|
||||
option interface 'br-lan'
|
||||
list interface 'br-lan'
|
||||
option mode 'master'
|
||||
option batmanif 'bat0'
|
||||
option start_vis '1'
|
||||
|
|
|
@ -54,10 +54,17 @@ wait_for_ll_address() {
|
|||
exit 1
|
||||
}
|
||||
|
||||
append_interface()
|
||||
{
|
||||
append "interfaces" "$1" ","
|
||||
wait_for_ll_address "$1"
|
||||
}
|
||||
|
||||
alfred_start() {
|
||||
local args=""
|
||||
local section="$1"
|
||||
local disabled interface mode
|
||||
local interfaces
|
||||
|
||||
# check if section is disabled
|
||||
config_get_bool disabled "$section" disabled 0
|
||||
|
@ -65,8 +72,12 @@ alfred_start() {
|
|||
|
||||
args=""
|
||||
|
||||
config_get interface "$section" interface
|
||||
append args "-i $interface"
|
||||
config_list_foreach "$section" "interface" append_interface
|
||||
if [ -z "$interfaces" ]; then
|
||||
config_get interface "$section" interface
|
||||
append_interface "$interface"
|
||||
fi
|
||||
append args "-i $interfaces"
|
||||
|
||||
config_get mode "$section" mode
|
||||
[ "$mode" = "master" ] && append args "-m"
|
||||
|
@ -75,11 +86,9 @@ alfred_start() {
|
|||
append args "-b $batmanif"
|
||||
|
||||
if [ "$batmanif" != "none" ]; then
|
||||
wait_for_dir "$batmanif" "/sys/class/net/$batmanif/mesh"
|
||||
wait_for_dir "$batmanif" "/sys/devices/virtual/net/$batmanif"
|
||||
fi
|
||||
|
||||
wait_for_ll_address "$interface"
|
||||
|
||||
append alfred_args "$args"
|
||||
enable=1
|
||||
|
||||
|
|
|
@ -8,13 +8,17 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=babeld
|
||||
PKG_VERSION:=1.8.4
|
||||
PKG_VERSION:=1.9.1
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://www.irif.fr/~jch/software/files/
|
||||
PKG_HASH:=98070dc418c190f047b8d69eb47987df30ded8f0fca353c49427d3137ad08b87
|
||||
PKG_HASH:=1e1b3c01dd929177bc8d027aff1494da75e1e567e1f60df3bb45a78d5f1ca0b4
|
||||
|
||||
PKG_MAINTAINER:=Gabriel Kerneis <gabriel@kerneis.info>, \
|
||||
Baptiste Jonglez <openwrt-pkg@bitsofnetworks.org>
|
||||
PKG_LICENSE:=MIT
|
||||
PKG_LICENSE_FILES:=LICENCE
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
|
@ -22,21 +26,17 @@ define Package/babeld
|
|||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Routing and Redirection
|
||||
TITLE:=A loop-free distance-vector routing protocol
|
||||
TITLE:=A loop-avoiding distance-vector routing protocol
|
||||
URL:=https://www.irif.fr/~jch/software/babel/
|
||||
MAINTAINER:=Gabriel Kerneis <gabriel@kerneis.info>, \
|
||||
Baptiste Jonglez <openwrt-pkg@bitsofnetworks.org>
|
||||
DEPENDS:=@IPV6
|
||||
endef
|
||||
|
||||
define Package/babeld/description
|
||||
Babel is a loop-avoiding distance-vector routing protocol roughly based
|
||||
on DSDV and AODV, but with provisions for link cost estimation and
|
||||
redistribution of routes from other routing protocols.
|
||||
While it is optimised for wireless mesh networks, Babel will also work
|
||||
efficiently on wired networks. It will generate between 1.2 and 2.4 times
|
||||
the amount of routing traffic that RIPng would generate, while
|
||||
never counting to infinity.
|
||||
Babel is a loop-avoiding distance-vector routing protocol for IPv6 and IPv4
|
||||
with fast convergence properties. It is based on the ideas in DSDV, AODV and
|
||||
Cisco's EIGRP, but is designed to work well not only in wired networks but
|
||||
also in wireless mesh networks, and has been extended with support for
|
||||
overlay networks. Babel is in the process of becoming an IETF Standard.
|
||||
endef
|
||||
|
||||
define Package/babeld/conffiles
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package babeld
|
||||
|
||||
# Detailed documentation: https://openwrt.org/docs/guide-user/services/babeld
|
||||
|
||||
# Babeld reads options from the following files (the last one takes precedence
|
||||
# if an option is defined in several places):
|
||||
# - the file defined by the option conf_file (default: /etc/babeld.conf),
|
||||
|
@ -39,7 +41,10 @@ config interface
|
|||
option 'ignore' 'true'
|
||||
## Physical interface name
|
||||
option 'ifname' 'tun-example'
|
||||
# option 'max_rtt_penalty' '90'
|
||||
## Specify the type of interface: tunnels use the RTT-based metric.
|
||||
option 'type' 'tunnel'
|
||||
## Other options that can be overriden.
|
||||
# option 'max_rtt_penalty' '96'
|
||||
|
||||
# A config interface without "option ifname" will set default options
|
||||
# for all interfaces. Interface-specific configuration always overrides
|
||||
|
@ -49,27 +54,49 @@ config interface
|
|||
# option 'update_interval' '30'
|
||||
|
||||
|
||||
# A filter consists of a type ('in', 'out' or 'redistribute'), an action
|
||||
# ('allow', 'deny' or 'metric xxx') and a set of selectors ('ip', 'eq',
|
||||
# etc.). See babeld man page ("Filtering rules") for more details.
|
||||
# Here is a sample filter wich redistributes the default route if its
|
||||
# protocol number is "boot", e.g. when it installed by dhcp. It is
|
||||
# disabled by default.
|
||||
# A filter consists of a type ('in', 'out', 'redistribute' or 'install'),
|
||||
# a set of selectors ('ip', 'eq', etc.) and a set of actions to perform
|
||||
# ('allow', 'deny', 'metric xxx', 'src-prefix xxx', 'table xxx', 'pref-src xxx').
|
||||
# See babeld man page ("Filtering rules") for more details.
|
||||
|
||||
# Below is a sample filter that redistributes the default route if its
|
||||
# protocol number is "boot", e.g. when it is installed by dhcp (see
|
||||
# /etc/iproute2/rt_protos). This filter is disabled thanks to the 'ignore'
|
||||
# setting.
|
||||
config filter
|
||||
option 'ignore' 'true'
|
||||
# Type
|
||||
# Type of filter
|
||||
option 'type' 'redistribute'
|
||||
# Selectors: ip, eq, le, ge, src_ip, src_eq, src_le, src_ge, neigh, id,
|
||||
# proto, local, if.
|
||||
option 'ip' '0.0.0.0/0'
|
||||
option 'eq' '0'
|
||||
option 'proto' '3'
|
||||
# Action (one of: allow, deny, metric XXX, src-prefix XXX).
|
||||
# Action, which can be any of: allow, deny, metric <NUMBER>, src-prefix <PREFIX>,
|
||||
# table <ID>, pref-src <IP>.
|
||||
# The action defaults to "allow" if not specified. Here, we specify a higher
|
||||
# redistribution metric than the default (0).
|
||||
option 'action' 'metric 128'
|
||||
|
||||
# Notice that the 'local' selector is a boolean.
|
||||
# Another example filter: don't redistribute local addresses in a certain IP prefix.
|
||||
# By default, babeld redistributes *all* local addresses.
|
||||
config filter
|
||||
option 'ignore' 'true'
|
||||
option 'type' 'redistribute'
|
||||
# Only apply to routes/addresses within this prefix.
|
||||
option 'ip' '198.51.100.0/24'
|
||||
# Notice that the 'local' selector is a boolean.
|
||||
option 'local' 'true'
|
||||
# No action means "allow"
|
||||
# Don't redistribute.
|
||||
option 'action' 'deny'
|
||||
|
||||
# Example install filter, to change or filter routes before they are inserted
|
||||
# into the kernel.
|
||||
config filter
|
||||
option 'ignore' 'true'
|
||||
option 'type' 'install'
|
||||
# Optional: only apply to routes within 2001:db8:cafe::/48
|
||||
option 'ip' '2001:db8:cafe::/48'
|
||||
# We specify the kernel routing table and the preferred source address to use for these routes.
|
||||
# "Allow" is implicit.
|
||||
option 'action' 'table 200 pref-src 2001:db8:ba:be1::42'
|
||||
|
|
|
@ -197,10 +197,6 @@ start_service() {
|
|||
procd_close_instance
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
killall -9 babeld
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger babeld
|
||||
}
|
||||
|
|
|
@ -9,13 +9,14 @@ include $(TOPDIR)/rules.mk
|
|||
|
||||
PKG_NAME:=batctl
|
||||
|
||||
PKG_VERSION:=2019.2
|
||||
PKG_RELEASE:=1
|
||||
PKG_HASH:=fb656208ff7d4cd8b1b422f60c9e6d8747302a347cbf6c199d7afa9b80f80ea3
|
||||
PKG_VERSION:=2019.4
|
||||
PKG_RELEASE:=0
|
||||
PKG_HASH:=a3564eb9727335352dc0cfa2f2b29474c2c837384689ac5fcb387784a56e7685
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION)
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
PKG_LICENSE:=GPL-2.0-only ISC MIT
|
||||
PKG_LICENSE_FILES:=LICENSES/preferred/GPL-2.0 LICENSES/preferred/MIT LICENSES/deprecated/ISC
|
||||
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
|
||||
|
||||
|
|
|
@ -1,324 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
Date: Thu, 13 Jun 2019 21:12:14 +0200
|
||||
Subject: batctl: Make vlan setting explicit
|
||||
|
||||
The requirement to have a VLAN master device on top of the batadv mesh
|
||||
interface is artificially limiting the capabilities of batctl. Not all
|
||||
master devices in linux which register a VLAN are from type "vlan" and are
|
||||
only registering a single VLAN.
|
||||
|
||||
For example VLAN aware bridges can create multiple VLANs. These require
|
||||
that the VLAN is identified using the VID and not the vlan device.
|
||||
|
||||
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||
|
||||
Forwarded: https://patchwork.open-mesh.org/patch/17947/
|
||||
|
||||
diff --git a/ap_isolation.c b/ap_isolation.c
|
||||
index 71dcd00eac845d488c4969b17e1339f181c6c913..7c34649225dcc9cc557cc5bb4cbfa2343f8c0763 100644
|
||||
--- a/ap_isolation.c
|
||||
+++ b/ap_isolation.c
|
||||
@@ -81,3 +81,8 @@ COMMAND_NAMED(SUBCOMMAND, ap_isolation, "ap", handle_sys_setting,
|
||||
COMMAND_FLAG_MESH_IFACE | COMMAND_FLAG_NETLINK,
|
||||
&batctl_settings_ap_isolation,
|
||||
"[0|1] \tdisplay or modify ap_isolation setting");
|
||||
+
|
||||
+COMMAND_NAMED(SUBCOMMAND_VID, ap_isolation, "ap", handle_sys_setting,
|
||||
+ COMMAND_FLAG_MESH_IFACE | COMMAND_FLAG_NETLINK,
|
||||
+ &batctl_settings_ap_isolation,
|
||||
+ "[0|1] \tdisplay or modify ap_isolation setting for vlan device or id");
|
||||
diff --git a/main.c b/main.c
|
||||
index 278683c6080e3ff4a9f3225931d0c5eb44f89595..6ca13ac0ec4c82ee969be04737a339fd702b52bd 100644
|
||||
--- a/main.c
|
||||
+++ b/main.c
|
||||
@@ -28,48 +28,75 @@ extern const struct command *__stop___command[];
|
||||
|
||||
static void print_usage(void)
|
||||
{
|
||||
- enum command_type type[] = {
|
||||
- SUBCOMMAND,
|
||||
- DEBUGTABLE,
|
||||
+ struct {
|
||||
+ const char *label;
|
||||
+ uint32_t types;
|
||||
+ } type[] = {
|
||||
+ {
|
||||
+ .label = "commands:\n",
|
||||
+ .types = BIT(SUBCOMMAND) |
|
||||
+ BIT(SUBCOMMAND_VID),
|
||||
+ },
|
||||
+ {
|
||||
+ .label = "debug tables: \tdisplay the corresponding debug table\n",
|
||||
+ .types = BIT(DEBUGTABLE),
|
||||
+ },
|
||||
+ };
|
||||
+ const char *default_prefixes[] = {
|
||||
+ "",
|
||||
+ NULL,
|
||||
+ };
|
||||
+ const char *vlan_prefixes[] = {
|
||||
+ "vlan <vdev> ",
|
||||
+ "vid <vid> ",
|
||||
+ NULL,
|
||||
};
|
||||
const struct command **p;
|
||||
- char buf[32];
|
||||
+ const char **prefixes;
|
||||
+ const char **prefix;
|
||||
+ char buf[64];
|
||||
size_t i;
|
||||
|
||||
fprintf(stderr, "Usage: batctl [options] command|debug table [parameters]\n");
|
||||
fprintf(stderr, "options:\n");
|
||||
- fprintf(stderr, " \t-m mesh interface or VLAN created on top of a mesh interface (default 'bat0')\n");
|
||||
+ fprintf(stderr, " \t-m mesh interface (default 'bat0')\n");
|
||||
fprintf(stderr, " \t-h print this help (or 'batctl <command|debug table> -h' for the parameter help)\n");
|
||||
fprintf(stderr, " \t-v print version\n");
|
||||
|
||||
for (i = 0; i < sizeof(type) / sizeof(*type); i++) {
|
||||
fprintf(stderr, "\n");
|
||||
|
||||
- switch (type[i]) {
|
||||
- case SUBCOMMAND:
|
||||
- fprintf(stderr, "commands:\n");
|
||||
- break;
|
||||
- case DEBUGTABLE:
|
||||
- fprintf(stderr, "debug tables: \tdisplay the corresponding debug table\n");
|
||||
- break;
|
||||
- }
|
||||
+ fprintf(stderr, "%s", type[i].label);
|
||||
|
||||
for (p = __start___command; p < __stop___command; p++) {
|
||||
const struct command *cmd = *p;
|
||||
|
||||
- if (cmd->type != type[i])
|
||||
+ if (!(BIT(cmd->type) & type[i].types))
|
||||
continue;
|
||||
|
||||
if (!cmd->usage)
|
||||
continue;
|
||||
|
||||
- if (strcmp(cmd->name, cmd->abbr) == 0)
|
||||
- snprintf(buf, sizeof(buf), "%s", cmd->name);
|
||||
- else
|
||||
- snprintf(buf, sizeof(buf), "%s|%s", cmd->name,
|
||||
- cmd->abbr);
|
||||
+ switch (cmd->type) {
|
||||
+ case SUBCOMMAND_VID:
|
||||
+ prefixes = vlan_prefixes;
|
||||
+ break;
|
||||
+ default:
|
||||
+ prefixes = default_prefixes;
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
- fprintf(stderr, " \t%-27s%s\n", buf, cmd->usage);
|
||||
+ for (prefix = &prefixes[0]; *prefix; prefix++) {
|
||||
+ if (strcmp(cmd->name, cmd->abbr) == 0)
|
||||
+ snprintf(buf, sizeof(buf), "%s%s",
|
||||
+ *prefix, cmd->name);
|
||||
+ else
|
||||
+ snprintf(buf, sizeof(buf), "%s%s|%s",
|
||||
+ *prefix, cmd->name, cmd->abbr);
|
||||
+
|
||||
+ fprintf(stderr, " \t%-35s%s\n", buf,
|
||||
+ cmd->usage);
|
||||
+ }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -93,13 +120,19 @@ static void version(void)
|
||||
exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
-static const struct command *find_command(const char *name)
|
||||
+static const struct command *find_command(struct state *state, const char *name)
|
||||
{
|
||||
const struct command **p;
|
||||
|
||||
for (p = __start___command; p < __stop___command; p++) {
|
||||
const struct command *cmd = *p;
|
||||
|
||||
+ if (state->vid >= 0 && cmd->type != SUBCOMMAND_VID)
|
||||
+ continue;
|
||||
+
|
||||
+ if (state->vid < 0 && cmd->type == SUBCOMMAND_VID)
|
||||
+ continue;
|
||||
+
|
||||
if (strcmp(cmd->name, name) == 0)
|
||||
return cmd;
|
||||
|
||||
@@ -110,6 +143,51 @@ static const struct command *find_command(const char *name)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+static int parse_dev_args(struct state *state, int argc, char *argv[])
|
||||
+{
|
||||
+ unsigned long vid;
|
||||
+ char *endptr;
|
||||
+
|
||||
+ /* not enough arguments to parse */
|
||||
+ if (argc < 2) {
|
||||
+ translate_mesh_iface(state);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (strcmp(argv[0], "vid") == 0) {
|
||||
+ if (argv[1] == '\0') {
|
||||
+ fprintf(stderr, "Error - unparsable vid\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ vid = strtoul(argv[1], &endptr, 0);
|
||||
+ if (!endptr || *endptr != '\0') {
|
||||
+ fprintf(stderr, "Error - unparsable vid\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ if (vid > 4095) {
|
||||
+ fprintf(stderr, "Error - too large vid (max 4095)\n");
|
||||
+ return -ERANGE;
|
||||
+ }
|
||||
+
|
||||
+ /* get mesh interface and overwrite vid afterwards */
|
||||
+ translate_mesh_iface(state);
|
||||
+ state->vid = vid;
|
||||
+
|
||||
+ return 2;
|
||||
+ } else if (strcmp(argv[0], "vlan") == 0) {
|
||||
+ state->arg_iface = argv[1];
|
||||
+ translate_mesh_iface(state);
|
||||
+
|
||||
+ return 2;
|
||||
+ } else {
|
||||
+ /* parse vlan as part of -m parameter */
|
||||
+ translate_mesh_iface(state);
|
||||
+ return 0;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
const struct command *cmd;
|
||||
@@ -117,6 +195,7 @@ int main(int argc, char **argv)
|
||||
.arg_iface = mesh_dfl_iface,
|
||||
.cmd = NULL,
|
||||
};
|
||||
+ int dev_arguments;
|
||||
int opt;
|
||||
int ret;
|
||||
|
||||
@@ -152,7 +231,15 @@ int main(int argc, char **argv)
|
||||
argc -= optind;
|
||||
optind = 0;
|
||||
|
||||
- cmd = find_command(argv[0]);
|
||||
+ /* parse arguments to identify vlan, ... */
|
||||
+ dev_arguments = parse_dev_args(&state, argc, argv);
|
||||
+ if (dev_arguments < 0)
|
||||
+ goto err;
|
||||
+
|
||||
+ argv += dev_arguments;
|
||||
+ argc -= dev_arguments;
|
||||
+
|
||||
+ cmd = find_command(&state, argv[0]);
|
||||
if (!cmd) {
|
||||
fprintf(stderr,
|
||||
"Error - no valid command or debug table specified: %s\n",
|
||||
@@ -162,8 +249,6 @@ int main(int argc, char **argv)
|
||||
|
||||
state.cmd = cmd;
|
||||
|
||||
- translate_mesh_iface(&state);
|
||||
-
|
||||
if (cmd->flags & COMMAND_FLAG_MESH_IFACE &&
|
||||
check_mesh_iface(&state) < 0) {
|
||||
fprintf(stderr,
|
||||
diff --git a/main.h b/main.h
|
||||
index 1a4701513c49ad8974b9c9189619f5dde622acd4..1d952610aefb8367bd52e24bea8c04c3d70b94ea 100644
|
||||
--- a/main.h
|
||||
+++ b/main.h
|
||||
@@ -58,6 +58,7 @@ enum command_flags {
|
||||
|
||||
enum command_type {
|
||||
SUBCOMMAND,
|
||||
+ SUBCOMMAND_VID,
|
||||
DEBUGTABLE,
|
||||
};
|
||||
|
||||
@@ -84,7 +85,7 @@ struct command {
|
||||
};
|
||||
|
||||
#define COMMAND_NAMED(_type, _name, _abbr, _handler, _flags, _arg, _usage) \
|
||||
- static const struct command command_ ## _name = { \
|
||||
+ static const struct command command_ ## _name ## _ ## _type = { \
|
||||
.type = (_type), \
|
||||
.name = (#_name), \
|
||||
.abbr = _abbr, \
|
||||
@@ -93,8 +94,8 @@ struct command {
|
||||
.arg = (_arg), \
|
||||
.usage = (_usage), \
|
||||
}; \
|
||||
- static const struct command *__command_ ## _name \
|
||||
- __attribute__((__used__)) __attribute__ ((__section__ ("__command"))) = &command_ ## _name
|
||||
+ static const struct command *__command_ ## _name ## _ ## _type \
|
||||
+ __attribute__((__used__)) __attribute__ ((__section__ ("__command"))) = &command_ ## _name ## _ ## _type
|
||||
|
||||
#define COMMAND(_type, _handler, _abbr, _flags, _arg, _usage) \
|
||||
COMMAND_NAMED(_type, _handler, _abbr, _handler, _flags, _arg, _usage)
|
||||
diff --git a/man/batctl.8 b/man/batctl.8
|
||||
index 0b430313075b5a7a4c796eba0867954e10061002..acb4288c4e6f59b322d20631ef8e3aee6f2215e5 100644
|
||||
--- a/man/batctl.8
|
||||
+++ b/man/batctl.8
|
||||
@@ -68,7 +68,7 @@ free all attached interfaces and remove batman-adv interface.
|
||||
If no parameter is given the current originator interval setting is displayed otherwise the parameter is used to set the
|
||||
originator interval. The interval is in units of milliseconds.
|
||||
.br
|
||||
-.IP "\fBap_isolation\fP|\fBap\fP [\fB0\fP|\fB1\fP]"
|
||||
+.IP "[\fBvlan <vdev>\fP|\fBvid <vid>\fP] \fBap_isolation\fP|\fBap\fP [\fB0\fP|\fB1\fP]"
|
||||
If no parameter is given the current ap isolation setting is displayed. Otherwise the parameter is used to enable or
|
||||
disable ap isolation. This command can be used in conjunction with "\-m" option to target per VLAN configurations.
|
||||
.br
|
||||
diff --git a/sys.c b/sys.c
|
||||
index 39123db87d391b8898b7454eba7708515bfb3c78..f19719cfad61f36f2a5c1078305de83eb5be142a 100644
|
||||
--- a/sys.c
|
||||
+++ b/sys.c
|
||||
@@ -141,9 +141,35 @@ int sys_simple_print_boolean(struct nl_msg *msg, void *arg,
|
||||
|
||||
static void settings_usage(struct state *state)
|
||||
{
|
||||
- fprintf(stderr, "Usage: batctl [options] %s|%s [parameters] %s\n",
|
||||
- state->cmd->name, state->cmd->abbr,
|
||||
- state->cmd->usage ? state->cmd->usage : "");
|
||||
+ const char *default_prefixes[] = {
|
||||
+ "",
|
||||
+ NULL,
|
||||
+ };
|
||||
+ const char *vlan_prefixes[] = {
|
||||
+ "vlan <vdev> ",
|
||||
+ "vid <vid> ",
|
||||
+ NULL,
|
||||
+ };
|
||||
+ const char *linestart = "Usage:";
|
||||
+ const char **prefixes;
|
||||
+ const char **prefix;
|
||||
+
|
||||
+ switch (state->cmd->type) {
|
||||
+ case SUBCOMMAND_VID:
|
||||
+ prefixes = vlan_prefixes;
|
||||
+ break;
|
||||
+ default:
|
||||
+ prefixes = default_prefixes;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ for (prefix = &prefixes[0]; *prefix; prefix++) {
|
||||
+ fprintf(stderr, "%s batctl [options] %s%s|%s [parameters] %s\n",
|
||||
+ linestart, *prefix, state->cmd->name, state->cmd->abbr,
|
||||
+ state->cmd->usage ? state->cmd->usage : "");
|
||||
+
|
||||
+ linestart = " ";
|
||||
+ }
|
||||
|
||||
fprintf(stderr, "parameters:\n");
|
||||
fprintf(stderr, " \t -h print this help\n");
|
|
@ -1,183 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
Date: Thu, 13 Jun 2019 21:12:15 +0200
|
||||
Subject: batctl: Integrate hardif setting framework
|
||||
|
||||
batctl currently supports settings which are either mesh interface or vlan
|
||||
specific. But B.A.T.M.A.N. V introduced two additional settings which are
|
||||
hard (slave) interface specific.
|
||||
|
||||
To support these, an additional command prefix called hardif is implemented
|
||||
for some sysfs commands:
|
||||
|
||||
$ batctl -m bat0 hardif eth0 ...
|
||||
|
||||
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||
|
||||
Forwarded: https://patchwork.open-mesh.org/patch/17948/
|
||||
|
||||
diff --git a/main.c b/main.c
|
||||
index 6ca13ac0ec4c82ee969be04737a339fd702b52bd..c806dbf4373fd082ff368cba391bdf14eebf4eae 100644
|
||||
--- a/main.c
|
||||
+++ b/main.c
|
||||
@@ -35,7 +35,8 @@ static void print_usage(void)
|
||||
{
|
||||
.label = "commands:\n",
|
||||
.types = BIT(SUBCOMMAND) |
|
||||
- BIT(SUBCOMMAND_VID),
|
||||
+ BIT(SUBCOMMAND_VID) |
|
||||
+ BIT(SUBCOMMAND_HIF),
|
||||
},
|
||||
{
|
||||
.label = "debug tables: \tdisplay the corresponding debug table\n",
|
||||
@@ -51,6 +52,10 @@ static void print_usage(void)
|
||||
"vid <vid> ",
|
||||
NULL,
|
||||
};
|
||||
+ const char *hardif_prefixes[] = {
|
||||
+ "hardif <netdev> ",
|
||||
+ NULL,
|
||||
+ };
|
||||
const struct command **p;
|
||||
const char **prefixes;
|
||||
const char **prefix;
|
||||
@@ -81,6 +86,9 @@ static void print_usage(void)
|
||||
case SUBCOMMAND_VID:
|
||||
prefixes = vlan_prefixes;
|
||||
break;
|
||||
+ case SUBCOMMAND_HIF:
|
||||
+ prefixes = hardif_prefixes;
|
||||
+ break;
|
||||
default:
|
||||
prefixes = default_prefixes;
|
||||
break;
|
||||
@@ -133,6 +141,12 @@ static const struct command *find_command(struct state *state, const char *name)
|
||||
if (state->vid < 0 && cmd->type == SUBCOMMAND_VID)
|
||||
continue;
|
||||
|
||||
+ if (state->hif > 0 && cmd->type != SUBCOMMAND_HIF)
|
||||
+ continue;
|
||||
+
|
||||
+ if (state->hif == 0 && cmd->type == SUBCOMMAND_HIF)
|
||||
+ continue;
|
||||
+
|
||||
if (strcmp(cmd->name, name) == 0)
|
||||
return cmd;
|
||||
|
||||
@@ -180,6 +194,18 @@ static int parse_dev_args(struct state *state, int argc, char *argv[])
|
||||
state->arg_iface = argv[1];
|
||||
translate_mesh_iface(state);
|
||||
|
||||
+ return 2;
|
||||
+ } else if (strcmp(argv[0], "hardif") == 0) {
|
||||
+ state->hif = if_nametoindex(argv[1]);
|
||||
+ if (state->hif == 0) {
|
||||
+ fprintf(stderr, "Error - hard interface not found\n");
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ snprintf(state->hard_iface, sizeof(state->hard_iface), "%s",
|
||||
+ argv[1]);
|
||||
+
|
||||
+ translate_mesh_iface(state);
|
||||
return 2;
|
||||
} else {
|
||||
/* parse vlan as part of -m parameter */
|
||||
@@ -193,6 +219,7 @@ int main(int argc, char **argv)
|
||||
const struct command *cmd;
|
||||
struct state state = {
|
||||
.arg_iface = mesh_dfl_iface,
|
||||
+ .hif = 0,
|
||||
.cmd = NULL,
|
||||
};
|
||||
int dev_arguments;
|
||||
diff --git a/main.h b/main.h
|
||||
index 1d952610aefb8367bd52e24bea8c04c3d70b94ea..a27d8486ef689206b27b1b50cb017b1b740e91c9 100644
|
||||
--- a/main.h
|
||||
+++ b/main.h
|
||||
@@ -59,6 +59,7 @@ enum command_flags {
|
||||
enum command_type {
|
||||
SUBCOMMAND,
|
||||
SUBCOMMAND_VID,
|
||||
+ SUBCOMMAND_HIF,
|
||||
DEBUGTABLE,
|
||||
};
|
||||
|
||||
@@ -66,6 +67,8 @@ struct state {
|
||||
char *arg_iface;
|
||||
char mesh_iface[IF_NAMESIZE];
|
||||
unsigned int mesh_ifindex;
|
||||
+ char hard_iface[IF_NAMESIZE];
|
||||
+ unsigned int hif;
|
||||
int vid;
|
||||
const struct command *cmd;
|
||||
|
||||
diff --git a/sys.c b/sys.c
|
||||
index f19719cfad61f36f2a5c1078305de83eb5be142a..fd34b2fa3bcf168a32bd53fc0df3f35d5532433f 100644
|
||||
--- a/sys.c
|
||||
+++ b/sys.c
|
||||
@@ -150,6 +150,10 @@ static void settings_usage(struct state *state)
|
||||
"vid <vid> ",
|
||||
NULL,
|
||||
};
|
||||
+ const char *hardif_prefixes[] = {
|
||||
+ "hardif <netdev> ",
|
||||
+ NULL,
|
||||
+ };
|
||||
const char *linestart = "Usage:";
|
||||
const char **prefixes;
|
||||
const char **prefix;
|
||||
@@ -158,6 +162,9 @@ static void settings_usage(struct state *state)
|
||||
case SUBCOMMAND_VID:
|
||||
prefixes = vlan_prefixes;
|
||||
break;
|
||||
+ case SUBCOMMAND_HIF:
|
||||
+ prefixes = hardif_prefixes;
|
||||
+ break;
|
||||
default:
|
||||
prefixes = default_prefixes;
|
||||
break;
|
||||
@@ -259,15 +266,23 @@ int handle_sys_setting(struct state *state, int argc, char **argv)
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
- /* if the specified interface is a VLAN then change the path to point
|
||||
- * to the proper "vlan%{vid}" subfolder in the sysfs tree.
|
||||
- */
|
||||
- if (state->vid >= 0)
|
||||
+ if (state->hif > 0) {
|
||||
+ /* if a hard interface was specified then change the path to
|
||||
+ * point to the proper ${hardif}/batman-adv path in the sysfs
|
||||
+ * tree.
|
||||
+ */
|
||||
+ snprintf(path_buff, PATH_BUFF_LEN, SYS_HARDIF_PATH,
|
||||
+ state->hard_iface);
|
||||
+ } else if (state->vid >= 0) {
|
||||
+ /* if the specified interface is a VLAN then change the path to
|
||||
+ * point to the proper "vlan%{vid}" subfolder in the sysfs tree.
|
||||
+ */
|
||||
snprintf(path_buff, PATH_BUFF_LEN, SYS_VLAN_PATH,
|
||||
state->mesh_iface, state->vid);
|
||||
- else
|
||||
+ } else {
|
||||
snprintf(path_buff, PATH_BUFF_LEN, SYS_BATIF_PATH_FMT,
|
||||
state->mesh_iface);
|
||||
+ }
|
||||
|
||||
if (argc == 1) {
|
||||
res = sys_read_setting(state, path_buff, settings->sysfs_name);
|
||||
diff --git a/sys.h b/sys.h
|
||||
index d4f2fcf542bc66b2b1c6ec55a9ac16e10fdc5cac..b6f0f9043a9af8e3c4d4f8bf7e4af4cab0aa5df9 100644
|
||||
--- a/sys.h
|
||||
+++ b/sys.h
|
||||
@@ -21,8 +21,9 @@
|
||||
#define SYS_BATIF_PATH_FMT "/sys/class/net/%s/mesh/"
|
||||
#define SYS_IFACE_PATH "/sys/class/net"
|
||||
#define SYS_IFACE_DIR SYS_IFACE_PATH"/%s/"
|
||||
-#define SYS_MESH_IFACE_FMT SYS_IFACE_PATH"/%s/batman_adv/mesh_iface"
|
||||
-#define SYS_IFACE_STATUS_FMT SYS_IFACE_PATH"/%s/batman_adv/iface_status"
|
||||
+#define SYS_HARDIF_PATH SYS_IFACE_DIR "batman_adv/"
|
||||
+#define SYS_MESH_IFACE_FMT SYS_HARDIF_PATH "mesh_iface"
|
||||
+#define SYS_IFACE_STATUS_FMT SYS_HARDIF_PATH "iface_status"
|
||||
#define SYS_VLAN_PATH SYS_IFACE_PATH"/%s/mesh/vlan%d/"
|
||||
#define SYS_ROUTING_ALGO_FMT SYS_IFACE_PATH"/%s/mesh/routing_algo"
|
||||
#define VLAN_ID_MAX_LEN 4
|
|
@ -1,183 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
Date: Thu, 13 Jun 2019 21:12:16 +0200
|
||||
Subject: batctl: Add elp_interval setting command
|
||||
|
||||
B.A.T.M.A.N. V introduced a hard interface specific setting called
|
||||
elp_interval. It defines the interval in milliseconds in which batman-adv
|
||||
emits probing packets for neighbor sensing (ELP).
|
||||
|
||||
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||
|
||||
Forwarded: https://patchwork.open-mesh.org/patch/17949/
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index b7bd545e92963c62128efe60c0dc401bdd9fa023..f071da20f866bff6c162d697d2e43fa9d68ee08d 100755
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -45,6 +45,7 @@ $(eval $(call add_command,bridge_loop_avoidance,y))
|
||||
$(eval $(call add_command,claimtable,y))
|
||||
$(eval $(call add_command,dat_cache,y))
|
||||
$(eval $(call add_command,distributed_arp_table,y))
|
||||
+$(eval $(call add_command,elp_interval,y))
|
||||
$(eval $(call add_command,event,y))
|
||||
$(eval $(call add_command,fragmentation,y))
|
||||
$(eval $(call add_command,gateways,y))
|
||||
diff --git a/README.rst b/README.rst
|
||||
index bc54412bc77dae1889d4f05298c34efc1966776b..92983aa6030e2a890283bca448b9203cd4d56b51 100644
|
||||
--- a/README.rst
|
||||
+++ b/README.rst
|
||||
@@ -386,6 +386,22 @@ Example::
|
||||
1000
|
||||
|
||||
|
||||
+batctl elp interval
|
||||
+===================
|
||||
+
|
||||
+display or modify the elp interval in ms for hard interface
|
||||
+
|
||||
+Usage::
|
||||
+
|
||||
+ batctl hardif $hardif elp_interval|et [interval]
|
||||
+
|
||||
+Example::
|
||||
+
|
||||
+ $ batctl hardif eth0 elp_interval 200
|
||||
+ $ batctl hardif eth0 elp_interval
|
||||
+ 200
|
||||
+
|
||||
+
|
||||
batctl loglevel
|
||||
===============
|
||||
|
||||
diff --git a/elp_interval.c b/elp_interval.c
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..0a5e98923a622f52e523696b1ec1bfb856eeca9f
|
||||
--- /dev/null
|
||||
+++ b/elp_interval.c
|
||||
@@ -0,0 +1,111 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/* Copyright (C) 2009-2019 B.A.T.M.A.N. contributors:
|
||||
+ *
|
||||
+ * Marek Lindner <mareklindner@neomailbox.ch>
|
||||
+ *
|
||||
+ * License-Filename: LICENSES/preferred/GPL-2.0
|
||||
+ */
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <stddef.h>
|
||||
+#include <stdint.h>
|
||||
+#include <string.h>
|
||||
+
|
||||
+#include "main.h"
|
||||
+#include "sys.h"
|
||||
+
|
||||
+static struct elp_interval_data {
|
||||
+ uint32_t elp_interval;
|
||||
+} elp_interval;
|
||||
+
|
||||
+static int parse_elp_interval(struct state *state, int argc, char *argv[])
|
||||
+{
|
||||
+ struct settings_data *settings = state->cmd->arg;
|
||||
+ struct elp_interval_data *data = settings->data;
|
||||
+ char *endptr;
|
||||
+
|
||||
+ if (argc != 2) {
|
||||
+ fprintf(stderr, "Error - incorrect number of arguments (expected 1)\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ data->elp_interval = strtoul(argv[1], &endptr, 0);
|
||||
+ if (!endptr || *endptr != '\0') {
|
||||
+ fprintf(stderr, "Error - the supplied argument is invalid: %s\n", argv[1]);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int print_elp_interval(struct nl_msg *msg, void *arg)
|
||||
+{
|
||||
+ struct nlattr *attrs[BATADV_ATTR_MAX + 1];
|
||||
+ struct nlmsghdr *nlh = nlmsg_hdr(msg);
|
||||
+ struct genlmsghdr *ghdr;
|
||||
+ int *result = arg;
|
||||
+
|
||||
+ if (!genlmsg_valid_hdr(nlh, 0))
|
||||
+ return NL_OK;
|
||||
+
|
||||
+ ghdr = nlmsg_data(nlh);
|
||||
+
|
||||
+ if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
|
||||
+ genlmsg_len(ghdr), batadv_netlink_policy)) {
|
||||
+ return NL_OK;
|
||||
+ }
|
||||
+
|
||||
+ if (!attrs[BATADV_ATTR_ELP_INTERVAL])
|
||||
+ return NL_OK;
|
||||
+
|
||||
+ printf("%u\n", nla_get_u32(attrs[BATADV_ATTR_ELP_INTERVAL]));
|
||||
+
|
||||
+ *result = 0;
|
||||
+ return NL_STOP;
|
||||
+}
|
||||
+
|
||||
+static int get_attrs_elp_interval(struct nl_msg *msg, void *arg)
|
||||
+{
|
||||
+ struct state *state = arg;
|
||||
+
|
||||
+ nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX, state->hif);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int get_elp_interval(struct state *state)
|
||||
+{
|
||||
+ return sys_simple_nlquery(state, BATADV_CMD_GET_HARDIF,
|
||||
+ get_attrs_elp_interval, print_elp_interval);
|
||||
+}
|
||||
+
|
||||
+static int set_attrs_elp_interval(struct nl_msg *msg, void *arg)
|
||||
+{
|
||||
+ struct state *state = arg;
|
||||
+ struct settings_data *settings = state->cmd->arg;
|
||||
+ struct elp_interval_data *data = settings->data;
|
||||
+
|
||||
+ nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX, state->hif);
|
||||
+ nla_put_u32(msg, BATADV_ATTR_ELP_INTERVAL, data->elp_interval);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int set_elp_interval(struct state *state)
|
||||
+{
|
||||
+ return sys_simple_nlquery(state, BATADV_CMD_SET_HARDIF,
|
||||
+ set_attrs_elp_interval, NULL);
|
||||
+}
|
||||
+
|
||||
+static struct settings_data batctl_settings_elp_interval = {
|
||||
+ .sysfs_name = "elp_interval",
|
||||
+ .data = &elp_interval,
|
||||
+ .parse = parse_elp_interval,
|
||||
+ .netlink_get = get_elp_interval,
|
||||
+ .netlink_set = set_elp_interval,
|
||||
+};
|
||||
+
|
||||
+COMMAND_NAMED(SUBCOMMAND_HIF, elp_interval, "et", handle_sys_setting,
|
||||
+ COMMAND_FLAG_MESH_IFACE | COMMAND_FLAG_NETLINK,
|
||||
+ &batctl_settings_elp_interval,
|
||||
+ "[interval] \tdisplay or modify elp_interval setting");
|
||||
diff --git a/man/batctl.8 b/man/batctl.8
|
||||
index acb4288c4e6f59b322d20631ef8e3aee6f2215e5..690da023fd1ac6f51915a9167e92030a650fe1bd 100644
|
||||
--- a/man/batctl.8
|
||||
+++ b/man/batctl.8
|
||||
@@ -93,6 +93,10 @@ the bonding mode.
|
||||
batctl will monitor for events from the netlink kernel interface of batman-adv. The local timestamp of the event will be printed
|
||||
when parameter \fB\-t\fP is specified. Parameter \fB\-r\fP will do the same but with relative timestamps.
|
||||
.br
|
||||
+.IP "\fBhardif <hardif>\fP \fBelp_interval\fP|\fBet\fP [\fBinterval\fP]"
|
||||
+If no parameter is given the current ELP interval setting of the hard interface is displayed otherwise the parameter is used to set the
|
||||
+ELP interval. The interval is in units of milliseconds.
|
||||
+.br
|
||||
.IP "\fBfragmentation\fP|\fBf\fP [\fB0\fP|\fB1\fP]"
|
||||
If no parameter is given the current fragmentation mode setting is displayed. Otherwise the parameter is used to enable or
|
||||
disable fragmentation.
|
|
@ -1,189 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
Date: Thu, 13 Jun 2019 21:12:17 +0200
|
||||
Subject: batctl: Add throughput_override setting command
|
||||
|
||||
B.A.T.M.A.N. V introduced a hard interface specific setting called
|
||||
throughput. It defines the throughput value to be used by B.A.T.M.A.N. V
|
||||
when estimating the link throughput using this interface. If the value is
|
||||
set to 0 then batman-adv will try to estimate the throughput by itself.
|
||||
|
||||
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||
|
||||
Forwarded: https://patchwork.open-mesh.org/patch/17950/
|
||||
|
||||
diff --git a/Makefile b/Makefile
|
||||
index f071da20f866bff6c162d697d2e43fa9d68ee08d..e3747a2a28eb34323e34a1e22f5507dd1d7cd0f6 100755
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -67,6 +67,7 @@ $(eval $(call add_command,ping,y))
|
||||
$(eval $(call add_command,routing_algo,y))
|
||||
$(eval $(call add_command,statistics,y))
|
||||
$(eval $(call add_command,tcpdump,y))
|
||||
+$(eval $(call add_command,throughput_override,y))
|
||||
$(eval $(call add_command,throughputmeter,y))
|
||||
$(eval $(call add_command,traceroute,y))
|
||||
$(eval $(call add_command,transglobal,y))
|
||||
diff --git a/README.rst b/README.rst
|
||||
index 92983aa6030e2a890283bca448b9203cd4d56b51..128f539852fa085d023fb6d26ae436e76b617bb6 100644
|
||||
--- a/README.rst
|
||||
+++ b/README.rst
|
||||
@@ -402,6 +402,23 @@ Example::
|
||||
200
|
||||
|
||||
|
||||
+batctl throughput override
|
||||
+==========================
|
||||
+
|
||||
+display or modify the throughput override in kbit/s for hard interface
|
||||
+
|
||||
+Usage::
|
||||
+
|
||||
+ batctl hardif $hardif throughput_override|to [kbit]
|
||||
+
|
||||
+Example::
|
||||
+
|
||||
+ $ batctl hardif eth0 throughput_override 15000
|
||||
+ $ batctl hardif eth0 throughput_override 15mbit
|
||||
+ $ batctl hardif eth0 throughput_override
|
||||
+ 15.0 MBit
|
||||
+
|
||||
+
|
||||
batctl loglevel
|
||||
===============
|
||||
|
||||
diff --git a/man/batctl.8 b/man/batctl.8
|
||||
index 690da023fd1ac6f51915a9167e92030a650fe1bd..b8218963712bbf0cc9470459896fc904cd393748 100644
|
||||
--- a/man/batctl.8
|
||||
+++ b/man/batctl.8
|
||||
@@ -203,6 +203,12 @@ supported routing algorithms are displayed.
|
||||
Otherwise the parameter is used to select the routing algorithm for the following
|
||||
batX interface to be created.
|
||||
.br
|
||||
+.IP "\fBhardif <hardif>\fP \fBthroughput_override|to\fP [\fBbandwidth\fP]\fP"
|
||||
+If no parameter is given the current througput override is displayed otherwise
|
||||
+the parameter is used to set the throughput override for the specified hard
|
||||
+interface.
|
||||
+Just enter any number (optionally followed by "kbit" or "mbit").
|
||||
+.br
|
||||
.IP "\fBisolation_mark\fP|\fBmark\fP"
|
||||
If no parameter is given the current isolation mark value is displayed.
|
||||
Otherwise the parameter is used to set or unset the isolation mark used by the
|
||||
diff --git a/throughput_override.c b/throughput_override.c
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..28a6588b9417cca213ebde3545a3eb425592ad89
|
||||
--- /dev/null
|
||||
+++ b/throughput_override.c
|
||||
@@ -0,0 +1,113 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/* Copyright (C) 2009-2019 B.A.T.M.A.N. contributors:
|
||||
+ *
|
||||
+ * Marek Lindner <mareklindner@neomailbox.ch>
|
||||
+ *
|
||||
+ * License-Filename: LICENSES/preferred/GPL-2.0
|
||||
+ */
|
||||
+
|
||||
+#include <errno.h>
|
||||
+#include <stddef.h>
|
||||
+#include <stdint.h>
|
||||
+#include <string.h>
|
||||
+
|
||||
+#include "functions.h"
|
||||
+#include "main.h"
|
||||
+#include "sys.h"
|
||||
+
|
||||
+static struct throughput_override_data {
|
||||
+ uint32_t throughput_override;
|
||||
+} throughput_override;
|
||||
+
|
||||
+static int parse_throughput_override(struct state *state, int argc, char *argv[])
|
||||
+{
|
||||
+ struct settings_data *settings = state->cmd->arg;
|
||||
+ struct throughput_override_data *data = settings->data;
|
||||
+ bool ret;
|
||||
+
|
||||
+ if (argc != 2) {
|
||||
+ fprintf(stderr, "Error - incorrect number of arguments (expected 1)\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ ret = parse_throughput(argv[1], "throughput override",
|
||||
+ &data->throughput_override);
|
||||
+ if (!ret)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int print_throughput_override(struct nl_msg *msg, void *arg)
|
||||
+{
|
||||
+ struct nlattr *attrs[BATADV_ATTR_MAX + 1];
|
||||
+ struct nlmsghdr *nlh = nlmsg_hdr(msg);
|
||||
+ struct genlmsghdr *ghdr;
|
||||
+ int *result = arg;
|
||||
+ uint32_t mbit;
|
||||
+
|
||||
+ if (!genlmsg_valid_hdr(nlh, 0))
|
||||
+ return NL_OK;
|
||||
+
|
||||
+ ghdr = nlmsg_data(nlh);
|
||||
+
|
||||
+ if (nla_parse(attrs, BATADV_ATTR_MAX, genlmsg_attrdata(ghdr, 0),
|
||||
+ genlmsg_len(ghdr), batadv_netlink_policy)) {
|
||||
+ return NL_OK;
|
||||
+ }
|
||||
+
|
||||
+ if (!attrs[BATADV_ATTR_THROUGHPUT_OVERRIDE])
|
||||
+ return NL_OK;
|
||||
+
|
||||
+ mbit = nla_get_u32(attrs[BATADV_ATTR_THROUGHPUT_OVERRIDE]);
|
||||
+ printf("%u.%u MBit\n", mbit / 10, mbit % 10);
|
||||
+
|
||||
+ *result = 0;
|
||||
+ return NL_STOP;
|
||||
+}
|
||||
+
|
||||
+static int get_attrs_elp_isolation(struct nl_msg *msg, void *arg)
|
||||
+{
|
||||
+ struct state *state = arg;
|
||||
+
|
||||
+ nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX, state->hif);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int get_throughput_override(struct state *state)
|
||||
+{
|
||||
+ return sys_simple_nlquery(state, BATADV_CMD_GET_HARDIF,
|
||||
+ get_attrs_elp_isolation, print_throughput_override);
|
||||
+}
|
||||
+
|
||||
+static int set_attrs_throughput_override(struct nl_msg *msg, void *arg)
|
||||
+{
|
||||
+ struct state *state = arg;
|
||||
+ struct settings_data *settings = state->cmd->arg;
|
||||
+ struct throughput_override_data *data = settings->data;
|
||||
+
|
||||
+ nla_put_u32(msg, BATADV_ATTR_HARD_IFINDEX, state->hif);
|
||||
+ nla_put_u32(msg, BATADV_ATTR_THROUGHPUT_OVERRIDE, data->throughput_override);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int set_throughput_override(struct state *state)
|
||||
+{
|
||||
+ return sys_simple_nlquery(state, BATADV_CMD_SET_HARDIF,
|
||||
+ set_attrs_throughput_override, NULL);
|
||||
+}
|
||||
+
|
||||
+static struct settings_data batctl_settings_throughput_override = {
|
||||
+ .sysfs_name = "throughput_override",
|
||||
+ .data = &throughput_override,
|
||||
+ .parse = parse_throughput_override,
|
||||
+ .netlink_get = get_throughput_override,
|
||||
+ .netlink_set = set_throughput_override,
|
||||
+};
|
||||
+
|
||||
+COMMAND_NAMED(SUBCOMMAND_HIF, throughput_override, "to", handle_sys_setting,
|
||||
+ COMMAND_FLAG_MESH_IFACE | COMMAND_FLAG_NETLINK,
|
||||
+ &batctl_settings_throughput_override,
|
||||
+ "[mbit] \tdisplay or modify throughput_override setting");
|
|
@ -9,13 +9,14 @@ include $(TOPDIR)/rules.mk
|
|||
|
||||
PKG_NAME:=batman-adv
|
||||
|
||||
PKG_VERSION:=2019.2
|
||||
PKG_RELEASE:=4
|
||||
PKG_HASH:=70c3f6a6cf88d2b25681a76768a52ed92d9fe992ba8e358368b6a8088757adc8
|
||||
PKG_VERSION:=2019.4
|
||||
PKG_RELEASE:=0
|
||||
PKG_HASH:=de07be3f46dddadc3f9608ca11814ecae534c65ccd7cbfeb9762f8e90a17f660
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://downloads.open-mesh.org/batman/releases/batman-adv-$(PKG_VERSION)
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
PKG_LICENSE:=GPL-2.0-only MIT
|
||||
PKG_LICENSE_FILES:=LICENSES/preferred/GPL-2.0 LICENSES/preferred/MIT
|
||||
PKG_EXTMOD_SUBDIRS=net/batman-adv
|
||||
|
||||
STAMP_CONFIGURED_DEPENDS := $(STAGING_DIR)/usr/include/mac80211-backport/backport/autoconf.h
|
||||
|
|
|
@ -72,42 +72,42 @@ proto_batadv_setup() {
|
|||
set_default routing_algo 'BATMAN_IV'
|
||||
|
||||
batctl routing_algo "$routing_algo"
|
||||
batctl -m "$iface" interface create
|
||||
batctl meshif "$iface" interface create
|
||||
|
||||
[ -n "$aggregated_ogms" ] && batctl -m "$iface" aggregation "$aggregated_ogms"
|
||||
[ -n "$ap_isolation" ] && batctl -m "$iface" ap_isolation "$ap_isolation"
|
||||
[ -n "$bonding" ] && batctl -m "$iface" bonding "$bonding"
|
||||
[ -n "$bridge_loop_avoidance" ] && batctl -m "$iface" bridge_loop_avoidance "$bridge_loop_avoidance" 2>&-
|
||||
[ -n "$distributed_arp_table" ] && batctl -m "$iface" distributed_arp_table "$distributed_arp_table" 2>&-
|
||||
[ -n "$fragmentation" ] && batctl -m "$iface" fragmentation "$fragmentation"
|
||||
[ -n "$aggregated_ogms" ] && batctl meshif "$iface" aggregation "$aggregated_ogms"
|
||||
[ -n "$ap_isolation" ] && batctl meshif "$iface" ap_isolation "$ap_isolation"
|
||||
[ -n "$bonding" ] && batctl meshif "$iface" bonding "$bonding"
|
||||
[ -n "$bridge_loop_avoidance" ] && batctl meshif "$iface" bridge_loop_avoidance "$bridge_loop_avoidance" 2>&-
|
||||
[ -n "$distributed_arp_table" ] && batctl meshif "$iface" distributed_arp_table "$distributed_arp_table" 2>&-
|
||||
[ -n "$fragmentation" ] && batctl meshif "$iface" fragmentation "$fragmentation"
|
||||
|
||||
case "$gw_mode" in
|
||||
server)
|
||||
if [ -n "$gw_bandwidth" ]; then
|
||||
batctl -m "$iface" gw_mode "server" "$gw_bandwidth"
|
||||
batctl meshif "$iface" gw_mode "server" "$gw_bandwidth"
|
||||
else
|
||||
batctl -m "$iface" gw_mode "server"
|
||||
batctl meshif "$iface" gw_mode "server"
|
||||
fi
|
||||
;;
|
||||
client)
|
||||
if [ -n "$gw_sel_class" ]; then
|
||||
batctl -m "$iface" gw_mode "client" "$gw_sel_class"
|
||||
batctl meshif "$iface" gw_mode "client" "$gw_sel_class"
|
||||
else
|
||||
batctl -m "$iface" gw_mode "client"
|
||||
batctl meshif "$iface" gw_mode "client"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
batctl -m "$iface" gw_mode "off"
|
||||
batctl meshif "$iface" gw_mode "off"
|
||||
;;
|
||||
esac
|
||||
|
||||
[ -n "$hop_penalty" ] && batctl -m "$iface" hop_penalty "$hop_penalty"
|
||||
[ -n "$isolation_mark" ] && batctl -m "$iface" isolation_mark "$isolation_mark"
|
||||
[ -n "$multicast_fanout" ] && batctl -m "$iface" multicast_fanout "$multicast_fanout"
|
||||
[ -n "$multicast_mode" ] && batctl -m "$iface" multicast_mode "$multicast_mode" 2>&-
|
||||
[ -n "$network_coding" ] && batctl -m "$iface" network_coding "$network_coding" 2>&-
|
||||
[ -n "$log_level" ] && batctl -m "$iface" loglevel "$log_level" 2>&-
|
||||
[ -n "$orig_interval" ] && batctl -m "$iface" orig_interval "$orig_interval"
|
||||
[ -n "$hop_penalty" ] && batctl meshif "$iface" hop_penalty "$hop_penalty"
|
||||
[ -n "$isolation_mark" ] && batctl meshif "$iface" isolation_mark "$isolation_mark"
|
||||
[ -n "$multicast_fanout" ] && batctl meshif "$iface" multicast_fanout "$multicast_fanout"
|
||||
[ -n "$multicast_mode" ] && batctl meshif "$iface" multicast_mode "$multicast_mode" 2>&-
|
||||
[ -n "$network_coding" ] && batctl meshif "$iface" network_coding "$network_coding" 2>&-
|
||||
[ -n "$log_level" ] && batctl meshif "$iface" loglevel "$log_level" 2>&-
|
||||
[ -n "$orig_interval" ] && batctl meshif "$iface" orig_interval "$orig_interval"
|
||||
|
||||
proto_init_update "$iface" 1
|
||||
proto_send_update "$config"
|
||||
|
@ -117,7 +117,7 @@ proto_batadv_teardown() {
|
|||
local config="$1"
|
||||
local iface="$config"
|
||||
|
||||
batctl -m "$iface" interface destroy
|
||||
batctl meshif "$iface" interface destroy
|
||||
}
|
||||
|
||||
add_protocol batadv
|
||||
|
|
|
@ -26,10 +26,10 @@ proto_batadv_hardif_setup() {
|
|||
|
||||
( proto_add_host_dependency "$config" '' "$master" )
|
||||
|
||||
batctl -m "$master" interface -M add "$iface"
|
||||
batctl meshif "$master" interface -M add "$iface"
|
||||
|
||||
[ -n "$elp_interval" ] && batctl -m "$master" hardif "$iface" elp_interval "$elp_interval"
|
||||
[ -n "$throughput_override" ] && batctl -m "$master" hardif "$iface" throughput_override "$throughput_override"
|
||||
[ -n "$elp_interval" ] && batctl hardif "$iface" elp_interval "$elp_interval"
|
||||
[ -n "$throughput_override" ] && batctl hardif "$iface" throughput_override "$throughput_override"
|
||||
|
||||
proto_init_update "$iface" 1
|
||||
proto_send_update "$config"
|
||||
|
@ -43,7 +43,7 @@ proto_batadv_hardif_teardown() {
|
|||
|
||||
json_get_vars master
|
||||
|
||||
batctl -m "$master" interface -M del "$iface" || true
|
||||
batctl meshif "$master" interface -M del "$iface" || true
|
||||
}
|
||||
|
||||
add_protocol batadv_hardif
|
||||
|
|
|
@ -17,7 +17,7 @@ proto_batadv_vlan_setup() {
|
|||
|
||||
json_get_vars ap_isolation
|
||||
|
||||
[ -n "$ap_isolation" ] && batctl -m "$iface" ap_isolation "$ap_isolation"
|
||||
[ -n "$ap_isolation" ] && batctl vlan "$iface" ap_isolation "$ap_isolation"
|
||||
proto_init_update "$iface" 1
|
||||
proto_send_update "$config"
|
||||
}
|
||||
|
|
|
@ -1,77 +0,0 @@
|
|||
From: Sven Eckelmann <sven@narfation.org>
|
||||
Date: Sun, 2 Jun 2019 10:57:31 +0200
|
||||
Subject: batman-adv: Fix duplicated OGMs on NETDEV_UP
|
||||
|
||||
The state of slave interfaces are handled differently depending on whether
|
||||
the interface is up or not. All active interfaces (IFF_UP) will transmit
|
||||
OGMs. But for B.A.T.M.A.N. IV, also non-active interfaces are scheduling
|
||||
(low TTL) OGMs on active interfaces. The code which setups and schedules
|
||||
the OGMs must therefore already be called when the interfaces gets added as
|
||||
slave interface and the transmit function must then check whether it has to
|
||||
send out the OGM or not on the specific slave interface.
|
||||
|
||||
But the commit 0d8468553c3c ("batman-adv: remove ogm_emit and ogm_schedule
|
||||
API calls") moved the setup code from the enable function to the activate
|
||||
function. The latter is called either when the added slave was already up
|
||||
when batadv_hardif_enable_interface processed the new interface or when a
|
||||
NETDEV_UP event was received for this slave interfac. As result, each
|
||||
NETDEV_UP would schedule a new OGM worker for the interface and thus OGMs
|
||||
would be send a lot more than expected.
|
||||
|
||||
Fixes: 0d8468553c3c ("batman-adv: remove ogm_emit and ogm_schedule API calls")
|
||||
Reported-by: Linus Lüssing <linus.luessing@c0d3.blue>
|
||||
Signed-off-by: Sven Eckelmann <sven@narfation.org>
|
||||
|
||||
Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/c92331e0df3c0c5645ee5a897eb018c5da5e4aa5
|
||||
|
||||
diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c
|
||||
index bd4138ddf7e09a0020d9842d603dc98f21e225c7..240ed70912d6a014c0a48280741989133034396c 100644
|
||||
--- a/net/batman-adv/bat_iv_ogm.c
|
||||
+++ b/net/batman-adv/bat_iv_ogm.c
|
||||
@@ -2337,7 +2337,7 @@ batadv_iv_ogm_neigh_is_sob(struct batadv_neigh_node *neigh1,
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static void batadv_iv_iface_activate(struct batadv_hard_iface *hard_iface)
|
||||
+static void batadv_iv_iface_enabled(struct batadv_hard_iface *hard_iface)
|
||||
{
|
||||
/* begin scheduling originator messages on that interface */
|
||||
batadv_iv_ogm_schedule(hard_iface);
|
||||
@@ -2683,8 +2683,8 @@ static void batadv_iv_gw_dump(struct sk_buff *msg, struct netlink_callback *cb,
|
||||
static struct batadv_algo_ops batadv_batman_iv __read_mostly = {
|
||||
.name = "BATMAN_IV",
|
||||
.iface = {
|
||||
- .activate = batadv_iv_iface_activate,
|
||||
.enable = batadv_iv_ogm_iface_enable,
|
||||
+ .enabled = batadv_iv_iface_enabled,
|
||||
.disable = batadv_iv_ogm_iface_disable,
|
||||
.update_mac = batadv_iv_ogm_iface_update_mac,
|
||||
.primary_set = batadv_iv_ogm_primary_iface_set,
|
||||
diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c
|
||||
index 79d1731b83066c60f9aef958d2bc343233bce67a..3719cfd026f04093f5d86ffe1b41a41849b2af62 100644
|
||||
--- a/net/batman-adv/hard-interface.c
|
||||
+++ b/net/batman-adv/hard-interface.c
|
||||
@@ -795,6 +795,9 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
|
||||
|
||||
batadv_hardif_recalc_extra_skbroom(soft_iface);
|
||||
|
||||
+ if (bat_priv->algo_ops->iface.enabled)
|
||||
+ bat_priv->algo_ops->iface.enabled(hard_iface);
|
||||
+
|
||||
out:
|
||||
return 0;
|
||||
|
||||
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h
|
||||
index 74b644738a36bfe063eef6df016278b45a1a0256..e0b25104cbfa9f715df364658621c29faa7ad637 100644
|
||||
--- a/net/batman-adv/types.h
|
||||
+++ b/net/batman-adv/types.h
|
||||
@@ -2129,6 +2129,9 @@ struct batadv_algo_iface_ops {
|
||||
/** @enable: init routing info when hard-interface is enabled */
|
||||
int (*enable)(struct batadv_hard_iface *hard_iface);
|
||||
|
||||
+ /** @enabled: notification when hard-interface was enabled (optional) */
|
||||
+ void (*enabled)(struct batadv_hard_iface *hard_iface);
|
||||
+
|
||||
/** @disable: de-init routing info when hard-interface is disabled */
|
||||
void (*disable)(struct batadv_hard_iface *hard_iface);
|
||||
|
|
@ -5,24 +5,7 @@
|
|||
#include <linux/version.h> /* LINUX_VERSION_CODE */
|
||||
#include <linux/types.h>
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0)
|
||||
|
||||
#define dev_get_iflink(_net_dev) ((_net_dev)->iflink)
|
||||
|
||||
#endif /* < KERNEL_VERSION(4, 1, 0) */
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 5, 0)
|
||||
|
||||
#include <linux/netdevice.h>
|
||||
|
||||
#define netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info, extack) ({\
|
||||
BUILD_BUG_ON(upper_priv != NULL); \
|
||||
BUILD_BUG_ON(upper_info != NULL); \
|
||||
BUILD_BUG_ON(extack != NULL); \
|
||||
netdev_master_upper_dev_link(dev, upper_dev); \
|
||||
})
|
||||
|
||||
#elif LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)
|
||||
|
||||
#include <linux/netdevice.h>
|
||||
|
||||
|
@ -31,27 +14,10 @@
|
|||
netdev_master_upper_dev_link(dev, upper_dev, upper_priv, upper_info); \
|
||||
})
|
||||
|
||||
#endif /* < KERNEL_VERSION(4, 5, 0) */
|
||||
#endif /* < KERNEL_VERSION(4, 15, 0) */
|
||||
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
|
||||
|
||||
/* wild hack for batadv_getlink_net only */
|
||||
#define get_link_net get_xstats_size || 1 ? fallback_net : (struct net*)netdev->rtnl_link_ops->get_xstats_size
|
||||
|
||||
#endif /* < KERNEL_VERSION(4, 0, 0) */
|
||||
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 2, 0)
|
||||
|
||||
struct sk_buff *skb_checksum_trimmed(struct sk_buff *skb,
|
||||
unsigned int transport_len,
|
||||
__sum16(*skb_chkf)(struct sk_buff *skb));
|
||||
|
||||
int ip_mc_check_igmp(struct sk_buff *skb);
|
||||
int ipv6_mc_check_mld(struct sk_buff *skb);
|
||||
|
||||
#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0)
|
||||
|
||||
#include_next <linux/igmp.h>
|
||||
#include_next <net/addrconf.h>
|
||||
|
@ -86,57 +52,7 @@ static inline int batadv_ip_mc_check_igmp2(struct sk_buff *skb,
|
|||
#define ip_mc_check_igmp(...) \
|
||||
ip_mc_check_igmp_get(__VA_ARGS__, batadv_ip_mc_check_igmp2, batadv_ip_mc_check_igmp1)(__VA_ARGS__)
|
||||
|
||||
#endif /* < KERNEL_VERSION(4, 2, 0) */
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0)
|
||||
|
||||
#define IFF_NO_QUEUE 0; dev->tx_queue_len = 0
|
||||
|
||||
static inline bool hlist_fake(struct hlist_node *h)
|
||||
{
|
||||
return h->pprev == &h->next;
|
||||
}
|
||||
|
||||
#endif /* < KERNEL_VERSION(4, 3, 0) */
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 6, 0)
|
||||
|
||||
#include <linux/ethtool.h>
|
||||
|
||||
#define ethtool_link_ksettings batadv_ethtool_link_ksettings
|
||||
|
||||
struct batadv_ethtool_link_ksettings {
|
||||
struct {
|
||||
__u32 speed;
|
||||
__u8 duplex;
|
||||
__u8 autoneg;
|
||||
} base;
|
||||
};
|
||||
|
||||
#define __ethtool_get_link_ksettings(__dev, __link_settings) \
|
||||
batadv_ethtool_get_link_ksettings(__dev, __link_settings)
|
||||
|
||||
static inline int
|
||||
batadv_ethtool_get_link_ksettings(struct net_device *dev,
|
||||
struct ethtool_link_ksettings *link_ksettings)
|
||||
{
|
||||
struct ethtool_cmd cmd;
|
||||
int ret;
|
||||
|
||||
memset(&cmd, 0, sizeof(cmd));
|
||||
ret = __ethtool_get_settings(dev, &cmd);
|
||||
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
link_ksettings->base.duplex = cmd.duplex;
|
||||
link_ksettings->base.speed = ethtool_cmd_speed(&cmd);
|
||||
link_ksettings->base.autoneg = cmd.autoneg;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* < KERNEL_VERSION(4, 6, 0) */
|
||||
#endif /* < KERNEL_VERSION(5, 1, 0) */
|
||||
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=bird1
|
||||
PKG_VERSION:=1.6.6
|
||||
PKG_VERSION:=1.6.8
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=bird-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=ftp://bird.network.cz/pub/bird
|
||||
PKG_HASH:=975b3b7aefbe1e0dc9c11e55517f0ca2d82cca1d544e2e926f78bc843aaf2d70
|
||||
PKG_HASH:=6c61ab5d2ef59d2559a8735b8252b5a0238013b43e5fb8a96c5d9d06e7bc00b2
|
||||
PKG_BUILD_DEPENDS:=ncurses readline
|
||||
PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/bird-$(PKG_VERSION)
|
||||
|
|
|
@ -7,12 +7,12 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=bird2
|
||||
PKG_VERSION:=2.0.4
|
||||
PKG_VERSION:=2.0.6
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE:=bird-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=ftp://bird.network.cz/pub/bird
|
||||
PKG_HASH:=676010b7517d4159b9af37401c26185f561ffcffeba73690a2ef2fad984714de
|
||||
PKG_HASH:=90934cce6ae90039ab1e58ade223935f9221a7e5eac05df6fb53045b77bfd3aa
|
||||
PKG_BUILD_DEPENDS:=ncurses readline
|
||||
PKG_MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/bird-$(PKG_VERSION)
|
||||
|
|
118
bmx7/Makefile
118
bmx7/Makefile
|
@ -1,70 +1,51 @@
|
|||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License along
|
||||
# with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
#
|
||||
# The full GNU General Public License is included in this distribution in
|
||||
# the file called "COPYING".
|
||||
#
|
||||
# Contibutors:
|
||||
# Axel Neumann, Simó Albert i Beltran, Pau Escrich
|
||||
#
|
||||
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=bmx7
|
||||
PKG_VERSION:=7.1.1
|
||||
PKG_RELEASE:=2
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/bmx-routing/bmx7/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_HASH:=5f88df1c95e5cb842a6016bb1604e3e7f6097c63c5c9916edc3c84e96d4f5f65
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/bmx-routing/bmx7.git
|
||||
PKG_MAINTAINER:=Axel Neumann <neumann@cgws.de>
|
||||
PKG_LICENSE:=GPL-2.0-or-later
|
||||
PKG_LICENSE_FILES:=LICENSE
|
||||
|
||||
PKG_REV:=cc245a22e54b5e110384485f18d9b805c91d8b71
|
||||
PKG_MIRROR_HASH:=378228450b7790bb07b1d478f123e9196c1040d9f55ec42e83090249574a3d6b
|
||||
PKG_VERSION:=r2019030802
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
||||
PKG_SOURCE_VERSION:=$(PKG_REV)
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE:=$(PKG_SOURCE_SUBDIR).tar.gz
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_SOURCE_SUBDIR)
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
TARGET_CFLAGS += $(FPIC)
|
||||
|
||||
MAKE_ARGS += EXTRA_CFLAGS="$(TARGET_CFLAGS) -I. -I$(STAGING_DIR)/usr/include -DCRYPTLIB=MBEDTLS_2_8_0 -DCORE_LIMIT=20000 -DTRAFFIC_DUMP -DNO_TRACE_FUNCTION_CALLS -DBMX7_LIB_IWINFO"
|
||||
MAKE_ARGS += EXTRA_CFLAGS="$(TARGET_CFLAGS) \
|
||||
-I. \
|
||||
-I$(STAGING_DIR)/usr/include \
|
||||
-DCRYPTLIB=MBEDTLS_2_8_0 \
|
||||
-DCORE_LIMIT=20000 \
|
||||
-DTRAFFIC_DUMP \
|
||||
-DNO_TRACE_FUNCTION_CALLS \
|
||||
-DBMX7_LIB_IWINFO" \
|
||||
EXTRA_LDFLAGS="$(TARGET_LDFLAGS) \
|
||||
-L$(STAGING_DIR)/usr/lib -liwinfo" \
|
||||
GIT_REV="$(PKG_REV)" \
|
||||
CC="$(TARGET_CC)" \
|
||||
INSTALL_DIR="$(PKG_INSTALL_DIR)" \
|
||||
build_all
|
||||
|
||||
MAKE_ARGS += \
|
||||
EXTRA_LDFLAGS="$(TARGET_LDFLAGS) -L$(STAGING_DIR)/usr/lib -liwinfo" \
|
||||
GIT_REV="$(PKG_REV)" \
|
||||
CC="$(TARGET_CC)" \
|
||||
INSTALL_DIR="$(PKG_INSTALL_DIR)" \
|
||||
build_all
|
||||
MAKE_PATH:=src
|
||||
|
||||
define Package/bmx7/Default
|
||||
SECTION:=net
|
||||
CATEGORY:=Network
|
||||
SUBMENU:=Routing and Redirection
|
||||
TITLE:=BMX7 layer 3 routing daemon
|
||||
URL:=http://github.com/bmx-routing/bmx7
|
||||
MAINTAINER:=Axel Neumann <neumann@cgws.de>
|
||||
URL:=https://github.com/bmx-routing/bmx7
|
||||
DEPENDS:=+zlib +libmbedtls +libiwinfo
|
||||
endef
|
||||
|
||||
define Package/bmx7/description
|
||||
BMX7 routing daemon supporting securely-entrusted IPv6 (and IPv4in6) routing
|
||||
BMX7 routing daemon supporting securely-entrusted IPv6 (and IPv4in6) routing
|
||||
endef
|
||||
|
||||
define Package/bmx7
|
||||
|
@ -81,7 +62,7 @@ endef
|
|||
define Package/bmx7-iwinfo
|
||||
$(call Package/bmx7/Default)
|
||||
DEPENDS:=bmx7 +libiwinfo
|
||||
TITLE:=link characteristics plugin based on libiwinfo (recommended!)
|
||||
TITLE:=link characteristics plugin via libiwinfo (recommended!)
|
||||
endef
|
||||
|
||||
define Package/bmx7-topology
|
||||
|
@ -114,30 +95,15 @@ define Package/bmx7-table
|
|||
TITLE:=plugin to announce routes from tables via tunnels
|
||||
endef
|
||||
|
||||
define Build/Configure
|
||||
mkdir -p $(PKG_INSTALL_DIR)
|
||||
define Package/bmx7/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/bmx7 $(1)/usr/sbin/bmx7
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(MAKE) -C $(PKG_BUILD_DIR) $(MAKE_ARGS)
|
||||
$(MAKE) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) $(MAKE_ARGS)
|
||||
endef
|
||||
|
||||
define Package/bmx7/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/config $(1)/etc/init.d
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/bmx7 $(1)/usr/sbin/bmx7
|
||||
endef
|
||||
|
||||
define Package/bmx7/postinst
|
||||
#!/bin/sh
|
||||
# # check if we are on real system
|
||||
if [ -z "$${IPKG_INSTROOT}" ]; then
|
||||
if [ -f /etc/sysupgrade.conf ] && ! grep bmx7 /etc/sysupgrade.conf; then
|
||||
echo /etc/bmx7 >> /etc/sysupgrade.conf
|
||||
fi
|
||||
fi
|
||||
endef
|
||||
|
||||
|
||||
define Package/bmx7-uci-config/conffiles
|
||||
/etc/config/bmx7
|
||||
/etc/bmx7
|
||||
|
@ -145,42 +111,48 @@ endef
|
|||
|
||||
define Package/bmx7-uci-config/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib $(1)/etc/config $(1)/etc/init.d
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/bmx7_uci_config/bmx7_config.so $(1)/usr/lib/bmx7_config.so
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/lib/bmx7_uci_config/bmx7_config.so \
|
||||
$(1)/usr/lib/bmx7_config.so
|
||||
$(INSTALL_BIN) ./files/etc/init.d/bmx7 $(1)/etc/init.d/bmx7
|
||||
$(INSTALL_DATA) ./files/etc/config/bmx7 $(1)/etc/config/bmx7
|
||||
endef
|
||||
|
||||
define Package/bmx7-iwinfo/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/bmx7_iwinfo/bmx7_iwinfo.so $(1)/usr/lib/bmx7_iwinfo.so
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/lib/bmx7_iwinfo/bmx7_iwinfo.so \
|
||||
$(1)/usr/lib/bmx7_iwinfo.so
|
||||
endef
|
||||
|
||||
define Package/bmx7-topology/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/bmx7_topology/bmx7_topology.so $(1)/usr/lib/bmx7_topology.so
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/lib/bmx7_topology/bmx7_topology.so \
|
||||
$(1)/usr/lib/bmx7_topology.so
|
||||
endef
|
||||
|
||||
define Package/bmx7-json/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/bmx7_json/bmx7_json.so $(1)/usr/lib/bmx7_json.so
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/lib/bmx7_json/bmx7_json.so \
|
||||
$(1)/usr/lib/bmx7_json.so
|
||||
endef
|
||||
|
||||
define Package/bmx7-sms/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/bmx7_sms/bmx7_sms.so $(1)/usr/lib/bmx7_sms.so
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/lib/bmx7_sms/bmx7_sms.so \
|
||||
$(1)/usr/lib/bmx7_sms.so
|
||||
endef
|
||||
|
||||
define Package/bmx7-tun/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/bmx7_tun/bmx7_tun.so $(1)/usr/lib/bmx7_tun.so
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/lib/bmx7_tun/bmx7_tun.so \
|
||||
$(1)/usr/lib/bmx7_tun.so
|
||||
endef
|
||||
|
||||
define Package/bmx7-table/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/lib/bmx7_table/bmx7_table.so $(1)/usr/lib/bmx7_table.so
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/$(MAKE_PATH)/lib/bmx7_table/bmx7_table.so \
|
||||
$(1)/usr/lib/bmx7_table.so
|
||||
endef
|
||||
|
||||
|
||||
$(eval $(call BuildPackage,bmx7))
|
||||
$(eval $(call BuildPackage,bmx7-uci-config))
|
||||
$(eval $(call BuildPackage,bmx7-iwinfo))
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
|
||||
# for more information:
|
||||
# http://bmx6.net/projects/bmx6/wiki
|
||||
# https://github.com/bmx-routing/bmx7/
|
||||
# options execute: bmx7 --help
|
||||
|
||||
config 'bmx7' 'general'
|
||||
# option 'runtimeDir' '/var/run/bmx7'
|
||||
# option 'trustedNodesDir' '/etc/bmx7/trustedNodes'
|
||||
# option 'runtimeDir' '/var/run/bmx7'
|
||||
# option 'trustedNodesDir' '/etc/bmx7/trustedNodes'
|
||||
|
||||
#config 'plugin'
|
||||
# option 'plugin' 'bmx7_config.so'
|
||||
|
@ -19,22 +18,18 @@ config 'bmx7' 'general'
|
|||
#config 'plugin'
|
||||
# option 'plugin' 'bmx7_iwinfo.so'
|
||||
|
||||
|
||||
config 'dev' 'mesh_1'
|
||||
option 'dev' 'br-lan'
|
||||
|
||||
config 'dev' 'mesh_2'
|
||||
option 'dev' 'wlan0'
|
||||
|
||||
|
||||
|
||||
#config 'plugin'
|
||||
# option 'plugin' 'bmx7_tun.so'
|
||||
|
||||
#config 'plugin'
|
||||
# option 'plugin' 'bmx7_table.so'
|
||||
|
||||
|
||||
#config 'tunDev' default
|
||||
# option 'tunDev' 'default'
|
||||
# option 'tun6Address' '2012:0:0:6666::1/64'
|
||||
|
@ -50,8 +45,3 @@ config 'dev' 'mesh_2'
|
|||
# option 'tunOut' 'ip4'
|
||||
# option 'network' '10.0.0.0/9'
|
||||
# option 'minPrefixLen' '27'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@ BIN=/usr/sbin/bmx7
|
|||
CONF=/etc/config/bmx7
|
||||
|
||||
start_service() {
|
||||
cd /root/
|
||||
cd /root/ || return
|
||||
while pgrep -f mac80211.sh ; do sleep 1; done
|
||||
|
||||
procd_open_instance "bmx7"
|
||||
|
|
|
@ -17,12 +17,12 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=cjdns
|
||||
PKG_VERSION:=20.2
|
||||
PKG_RELEASE:=2
|
||||
PKG_VERSION:=20.4
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_URL:=https://github.com/cjdelisle/cjdns.git
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_VERSION:=45c9d282dc9e4a0e0fa76562901c2f5a9d4853ad
|
||||
PKG_SOURCE_VERSION:=45cdd8b3eebb18b6239feeef3b787e40d773edfb
|
||||
PKG_LICENSE:=GPL-3.0
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_SOURCE_VERSION).tar.bz2
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_SOURCE_VERSION)
|
||||
|
@ -37,7 +37,7 @@ define Package/cjdns
|
|||
SUBMENU:=Routing and Redirection
|
||||
TITLE:=Encrypted near-zero-conf mesh routing protocol
|
||||
URL:=https://github.com/cjdelisle/cjdns
|
||||
MAINTAINER:=William Fleurant <william@netblazr.com>
|
||||
MAINTAINER:=William Fleurant <meshnet@protonmail.com>
|
||||
DEPENDS:=@!arc @IPV6 +kmod-tun +libnl-tiny +libpthread +librt \
|
||||
+libuci-lua +lua-bencode +dkjson +luasocket +lua-sha2
|
||||
endef
|
||||
|
|
|
@ -229,3 +229,11 @@ config behaviour
|
|||
option direction 'out'
|
||||
option whitelist '1'
|
||||
option table '{(*|*)}'
|
||||
|
||||
config blocks blocks
|
||||
# mDNS
|
||||
list entries '(*|239.255.255.0/24)'
|
||||
# SSDP
|
||||
list entries '(*|224.0.0.0/24)'
|
||||
# SLP
|
||||
list entries '(*|239.192.0.0/16)'
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
--- a/mcproxy/src/utils/mc_socket.cpp
|
||||
+++ b/mcproxy/src/utils/mc_socket.cpp
|
||||
Index: mcproxy-2017-08-24-93b5ace42268160ebbfff4c61818fb15fa2d9b99/mcproxy/src/utils/mc_socket.cpp
|
||||
===================================================================
|
||||
--- mcproxy-2017-08-24-93b5ace42268160ebbfff4c61818fb15fa2d9b99.orig/mcproxy/src/utils/mc_socket.cpp
|
||||
+++ mcproxy-2017-08-24-93b5ace42268160ebbfff4c61818fb15fa2d9b99/mcproxy/src/utils/mc_socket.cpp
|
||||
@@ -37,6 +37,10 @@
|
||||
#include <numeric>
|
||||
#include <unistd.h>
|
||||
|
@ -11,8 +13,10 @@
|
|||
std::string ipAddrResolver(std::string ipAddr)
|
||||
{
|
||||
std::string str[][2] = {
|
||||
Index: mcproxy-2017-08-24-93b5ace42268160ebbfff4c61818fb15fa2d9b99/mcproxy/src/utils/sourcefilter.cpp
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/mcproxy/src/utils/sourcefilter.cpp
|
||||
+++ mcproxy-2017-08-24-93b5ace42268160ebbfff4c61818fb15fa2d9b99/mcproxy/src/utils/sourcefilter.cpp
|
||||
@@ -0,0 +1,165 @@
|
||||
+/* Get source filter. Linux version.
|
||||
+ Copyright (C) 2004-2014 Free Software Foundation, Inc.
|
||||
|
@ -173,9 +177,9 @@
|
|||
+ else
|
||||
+ result = setsockopt (s, sol, MCAST_MSFILTER, gf, needed);
|
||||
+
|
||||
+ int save_errno = errno;
|
||||
+ free (gf);
|
||||
+ errno = save_errno;
|
||||
+ int save_errno = errno;
|
||||
+ free (gf);
|
||||
+ errno = save_errno;
|
||||
+
|
||||
+ return result;
|
||||
+}
|
||||
|
|
46
mcproxy/patches/0005-fix-match-filter-calls.patch
Normal file
46
mcproxy/patches/0005-fix-match-filter-calls.patch
Normal file
|
@ -0,0 +1,46 @@
|
|||
--- a/mcproxy/src/proxy/simple_mc_proxy_routing.cpp
|
||||
+++ b/mcproxy/src/proxy/simple_mc_proxy_routing.cpp
|
||||
@@ -118,13 +118,13 @@ void interface_memberships::process_upst
|
||||
for (auto source_it = cs.first.m_source_list.begin(); source_it != cs.first.m_source_list.end();) {
|
||||
|
||||
//downstream out
|
||||
- if (!cs.second->match_output_filter(interfaces::get_if_name(upstr_e.m_if_index), gaddr, source_it->saddr)) {
|
||||
+ if (!cs.second->match_output_filter(interfaces::get_if_name(upstr_e.m_if_index), source_it->saddr, gaddr)) {
|
||||
source_it = cs.first.m_source_list.erase(source_it);
|
||||
continue;
|
||||
}
|
||||
|
||||
//upstream in
|
||||
- if (!upstr_e.m_interface->match_input_filter(interfaces::get_if_name(upstr_e.m_if_index), gaddr, source_it->saddr)) {
|
||||
+ if (!upstr_e.m_interface->match_input_filter(interfaces::get_if_name(upstr_e.m_if_index), source_it->saddr, gaddr)) {
|
||||
tmp_sstate.m_source_list.insert(*source_it);
|
||||
source_it = cs.first.m_source_list.erase(source_it);
|
||||
continue;
|
||||
@@ -175,13 +175,13 @@ void interface_memberships::process_upst
|
||||
for (auto source_it = cs_it->first.m_source_list.begin(); source_it != cs_it->first.m_source_list.end();) {
|
||||
|
||||
//downstream out
|
||||
- if (!cs_it->second->match_output_filter(interfaces::get_if_name(upstr_e.m_if_index), gaddr, source_it->saddr)) {
|
||||
+ if (!cs_it->second->match_output_filter(interfaces::get_if_name(upstr_e.m_if_index), source_it->saddr, gaddr)) {
|
||||
++source_it;
|
||||
continue;
|
||||
}
|
||||
|
||||
//upstream in
|
||||
- if (!upstr_e.m_interface->match_input_filter(interfaces::get_if_name(upstr_e.m_if_index), gaddr, source_it->saddr)) {
|
||||
+ if (!upstr_e.m_interface->match_input_filter(interfaces::get_if_name(upstr_e.m_if_index), source_it->saddr, gaddr)) {
|
||||
++source_it;
|
||||
continue;
|
||||
}
|
||||
@@ -619,9 +619,9 @@ bool simple_mc_proxy_routing::check_inte
|
||||
std::string input_if_index_name = interfaces::get_if_name(input_if_index);
|
||||
if (!input_if_index_name.empty()) {
|
||||
if (interface_direction == ID_IN) {
|
||||
- return interf->match_input_filter(input_if_index_name, gaddr, saddr);
|
||||
+ return interf->match_input_filter(input_if_index_name, saddr, gaddr);
|
||||
} else if (interface_direction == ID_OUT) {
|
||||
- return interf->match_output_filter(input_if_index_name, gaddr, saddr);
|
||||
+ return interf->match_output_filter(input_if_index_name, saddr, gaddr);
|
||||
} else {
|
||||
HC_LOG_ERROR("unkown interface direction");
|
||||
return false;
|
90
mcproxy/patches/0006-block-ingress.patch
Normal file
90
mcproxy/patches/0006-block-ingress.patch
Normal file
|
@ -0,0 +1,90 @@
|
|||
Index: mcproxy-2017-08-24-93b5ace42268160ebbfff4c61818fb15fa2d9b99/mcproxy/src/proxy/proxy_instance.cpp
|
||||
===================================================================
|
||||
--- mcproxy-2017-08-24-93b5ace42268160ebbfff4c61818fb15fa2d9b99.orig/mcproxy/src/proxy/proxy_instance.cpp
|
||||
+++ mcproxy-2017-08-24-93b5ace42268160ebbfff4c61818fb15fa2d9b99/mcproxy/src/proxy/proxy_instance.cpp
|
||||
@@ -171,6 +171,9 @@ void proxy_instance::worker_thread()
|
||||
HC_LOG_TRACE("");
|
||||
while (m_running) {
|
||||
auto msg = m_job_queue.dequeue();
|
||||
+
|
||||
+ HC_LOG_DEBUG("Proxy Message: " << msg->get_message_type_name(msg->get_type()) );
|
||||
+
|
||||
switch (msg->get_type()) {
|
||||
case proxy_msg::TEST_MSG:
|
||||
(*msg)();
|
||||
@@ -193,25 +196,66 @@ void proxy_instance::worker_thread()
|
||||
}
|
||||
break;
|
||||
case proxy_msg::GROUP_RECORD_MSG: {
|
||||
- auto r = std::static_pointer_cast<group_record_msg>(msg);
|
||||
+ auto gr = std::static_pointer_cast<group_record_msg>(msg);
|
||||
|
||||
if (m_in_debug_testing_mode) {
|
||||
std::cout << "!!--ACTION: receive record" << std::endl;
|
||||
- std::cout << *r << std::endl;
|
||||
+ std::cout << *gr << std::endl;
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
- auto it = m_downstreams.find(r->get_if_index());
|
||||
+ auto slist = gr->get_slist();
|
||||
+ addr_storage saddr;
|
||||
+ if (slist.empty()) {
|
||||
+ saddr = "0.0.0.0";
|
||||
+ } else {
|
||||
+ saddr = slist.begin()->saddr;
|
||||
+ }
|
||||
+ auto it = m_downstreams.find(gr->get_if_index());
|
||||
if (it != std::end(m_downstreams)) {
|
||||
- it->second.m_querier->receive_record(msg);
|
||||
+ // Check for input filters
|
||||
+ if (!it->second.m_interface->match_input_filter(interfaces::get_if_name(gr->get_if_index()), saddr, gr->get_gaddr()))
|
||||
+ {
|
||||
+ HC_LOG_DEBUG("group report " << gr->get_gaddr() << " filtered");
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ it->second.m_querier->receive_record(msg);
|
||||
+ }
|
||||
} else {
|
||||
- HC_LOG_DEBUG("failed to find querier of interface: " << interfaces::get_if_name(std::static_pointer_cast<timer_msg>(msg)->get_if_index()));
|
||||
+ HC_LOG_DEBUG("failed to find querier of interface: " << interfaces::get_if_name( gr->get_if_index() ));
|
||||
}
|
||||
- }
|
||||
+ }
|
||||
+ break;
|
||||
+ case proxy_msg::NEW_SOURCE_MSG: {
|
||||
+ auto sm = std::static_pointer_cast<new_source_msg>(msg);
|
||||
+ // Find the interface
|
||||
+ std::shared_ptr<interface> interf;
|
||||
+ auto it = m_downstreams.find(sm->get_if_index());
|
||||
+ if (it != std::end(m_downstreams)) {
|
||||
+ interf = it->second.m_interface;
|
||||
+ } else {
|
||||
+ for (auto & e : m_upstreams) {
|
||||
+ if (e.m_if_index == sm->get_if_index()) {
|
||||
+ interf = e.m_interface;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ if ( !interf )
|
||||
+ {
|
||||
+ HC_LOG_DEBUG("failed to find interface: " << interfaces::get_if_name( sm->get_if_index() ) << " for Source message " << sm->get_saddr() << " | " << sm->get_gaddr() );
|
||||
+ break;
|
||||
+ }
|
||||
+ // Check for input filters
|
||||
+ if (!interf->match_input_filter(interfaces::get_if_name(sm->get_if_index()), sm->get_saddr(), sm->get_gaddr()))
|
||||
+ {
|
||||
+ HC_LOG_DEBUG("source " << sm->get_saddr() << " | " << sm->get_gaddr() << " filtered");
|
||||
+ } else {
|
||||
+ m_routing_management->event_new_source(msg);
|
||||
+ }
|
||||
+ }
|
||||
break;
|
||||
- case proxy_msg::NEW_SOURCE_MSG:
|
||||
- m_routing_management->event_new_source(msg);
|
||||
- break;
|
||||
case proxy_msg::NEW_SOURCE_TIMER_MSG:
|
||||
m_routing_management->timer_triggerd_maintain_routing_table(msg);
|
||||
break;
|
116
mcproxy/patches/0007-igmpv2-queries.patch
Normal file
116
mcproxy/patches/0007-igmpv2-queries.patch
Normal file
|
@ -0,0 +1,116 @@
|
|||
--- a/mcproxy/include/proxy/igmp_sender.hpp
|
||||
+++ b/mcproxy/include/proxy/igmp_sender.hpp
|
||||
@@ -37,9 +37,10 @@ class igmp_sender : public sender
|
||||
{
|
||||
private:
|
||||
bool send_igmpv3_query(unsigned int if_index, const timers_values& tv, const addr_storage& gaddr, bool s_flag, const source_list<source>& slist) const;
|
||||
+ bool send_igmpv2_query(unsigned int if_index, const timers_values& tv, const addr_storage& gaddr ) const;
|
||||
|
||||
public:
|
||||
- igmp_sender(const std::shared_ptr<const interfaces>& interfaces);
|
||||
+ igmp_sender(const std::shared_ptr<const interfaces>& interfaces, const group_mem_protocol gmp);
|
||||
|
||||
bool send_record(unsigned int if_index, mc_filter filter_mode, const addr_storage& gaddr, const source_list<source>& slist) const override;
|
||||
|
||||
--- a/mcproxy/src/proxy/igmp_sender.cpp
|
||||
+++ b/mcproxy/src/proxy/igmp_sender.cpp
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
#include <memory>
|
||||
|
||||
-igmp_sender::igmp_sender(const std::shared_ptr<const interfaces>& interfaces): sender(interfaces, IGMPv3)
|
||||
+igmp_sender::igmp_sender(const std::shared_ptr<const interfaces>& interfaces, const group_mem_protocol gmp): sender(interfaces, gmp)
|
||||
{
|
||||
HC_LOG_TRACE("");
|
||||
|
||||
@@ -119,10 +119,79 @@ bool igmp_sender::send_mc_addr_and_src_s
|
||||
return rc;
|
||||
}
|
||||
|
||||
+bool igmp_sender::send_igmpv2_query(unsigned int if_index, const timers_values& tv, const addr_storage& gaddr ) const
|
||||
+{
|
||||
+ HC_LOG_TRACE("");
|
||||
+
|
||||
+ std::unique_ptr<unsigned char[]> packet;
|
||||
+ unsigned int size;
|
||||
+
|
||||
+ size = sizeof(ip) + sizeof(router_alert_option) + sizeof(igmp);
|
||||
+ packet.reset(new unsigned char[size]);
|
||||
+
|
||||
+ addr_storage dst_addr;
|
||||
+
|
||||
+ if (gaddr == addr_storage(AF_INET)) { //is general query
|
||||
+ dst_addr = IPV4_ALL_HOST_ADDR;
|
||||
+ } else {
|
||||
+ dst_addr = gaddr;
|
||||
+ }
|
||||
+
|
||||
+ //-------------------------------------------------------------------
|
||||
+ //fill ip header
|
||||
+ ip* ip_hdr = reinterpret_cast<ip*>(packet.get());
|
||||
+
|
||||
+ ip_hdr->ip_v = 4;
|
||||
+ ip_hdr->ip_hl = (sizeof(ip) + sizeof(router_alert_option)) / 4;
|
||||
+ ip_hdr->ip_tos = 0;
|
||||
+ ip_hdr->ip_len = htons(size);
|
||||
+ ip_hdr->ip_id = 0;
|
||||
+ ip_hdr->ip_off = htons(0 | IP_DF); //dont fragment flag
|
||||
+ ip_hdr->ip_ttl = 1;
|
||||
+ ip_hdr->ip_p = IPPROTO_IGMP;
|
||||
+ ip_hdr->ip_sum = 0;
|
||||
+ ip_hdr->ip_src = m_interfaces->get_saddr(interfaces::get_if_name(if_index)).get_in_addr();
|
||||
+ ip_hdr->ip_dst = dst_addr.get_in_addr();
|
||||
+
|
||||
+ //-------------------------------------------------------------------
|
||||
+ //fill router_alert_option header
|
||||
+ router_alert_option* ra_hdr = reinterpret_cast<router_alert_option*>(reinterpret_cast<unsigned char*>(ip_hdr) + sizeof(ip));
|
||||
+ *ra_hdr = router_alert_option();
|
||||
+
|
||||
+ ip_hdr->ip_sum = m_sock.calc_checksum(reinterpret_cast<unsigned char*>(ip_hdr), sizeof(ip) + sizeof(router_alert_option));
|
||||
+
|
||||
+ //-------------------------------------------------------------------
|
||||
+ //fill igmpv3 query
|
||||
+ igmp* query = reinterpret_cast<igmp*>(reinterpret_cast<unsigned char*>(ra_hdr) + sizeof(router_alert_option));
|
||||
+
|
||||
+ query->igmp_type = IGMP_MEMBERSHIP_QUERY;
|
||||
+
|
||||
+ if (gaddr == addr_storage(AF_INET)) { //general query
|
||||
+ query->igmp_code = tv.maxrespi_to_maxrespc_igmpv3(tv.get_query_response_interval());
|
||||
+ } else {
|
||||
+ query->igmp_code = tv.maxrespi_to_maxrespc_igmpv3(tv.get_last_listener_query_time());
|
||||
+ }
|
||||
+
|
||||
+ query->igmp_cksum = 0;
|
||||
+ query->igmp_group = gaddr.get_in_addr();
|
||||
+
|
||||
+ query->igmp_cksum = m_sock.calc_checksum(reinterpret_cast<unsigned char*>(query), (sizeof(igmp) ));
|
||||
+
|
||||
+ if (!m_sock.choose_if(if_index)) {
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
+ return m_sock.send_packet(dst_addr, reinterpret_cast<unsigned char*>(ip_hdr), size);
|
||||
+}
|
||||
+
|
||||
bool igmp_sender::send_igmpv3_query(unsigned int if_index, const timers_values& tv, const addr_storage& gaddr, bool s_flag, const source_list<source>& slist) const
|
||||
{
|
||||
HC_LOG_TRACE("");
|
||||
|
||||
+ if ( (m_group_mem_protocol & IGMPv3) == 0 ) {
|
||||
+ return send_igmpv2_query( if_index, tv, gaddr );
|
||||
+ }
|
||||
+
|
||||
std::unique_ptr<unsigned char[]> packet;
|
||||
unsigned int size;
|
||||
|
||||
--- a/mcproxy/src/proxy/proxy_instance.cpp
|
||||
+++ b/mcproxy/src/proxy/proxy_instance.cpp
|
||||
@@ -119,7 +119,7 @@ bool proxy_instance::init_sender()
|
||||
{
|
||||
HC_LOG_TRACE("");
|
||||
if (is_IPv4(m_group_mem_protocol)) {
|
||||
- m_sender = std::make_shared<igmp_sender>(m_interfaces);
|
||||
+ m_sender = std::make_shared<igmp_sender>(m_interfaces, m_group_mem_protocol );
|
||||
} else if (is_IPv6(m_group_mem_protocol)) {
|
||||
m_sender = std::make_shared<mld_sender>(m_interfaces);
|
||||
} else {
|
|
@ -7,12 +7,12 @@ include $(TOPDIR)/rules.mk
|
|||
|
||||
PKG_NAME:=nodogsplash
|
||||
PKG_FIXUP:=autoreconf
|
||||
PKG_VERSION:=4.0.0
|
||||
PKG_VERSION:=4.3.3
|
||||
PKG_RELEASE:=1
|
||||
|
||||
PKG_SOURCE_URL:=https://codeload.github.com/nodogsplash/nodogsplash/tar.gz/v$(PKG_VERSION)?
|
||||
PKG_SOURCE:=nodogsplash-$(PKG_VERSION).tar.gz
|
||||
PKG_HASH:=4cc3a9200380f03c8c3a71afc1fda0006b8e7bf70129f2419768a767b734da21
|
||||
PKG_HASH:=dac942123dc8d3e9295c7f1c18974245fdaffdf694ef03ee0a21187b6d11b31e
|
||||
PKG_BUILD_DIR:=$(BUILD_DIR)/nodogsplash-$(PKG_VERSION)
|
||||
|
||||
PKG_MAINTAINER:=Moritz Warning <moritzwarning@web.de>
|
||||
|
|
|
@ -8,13 +8,13 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=olsrd
|
||||
PKG_VERSION:=0.9.7
|
||||
PKG_VERSION:=0.9.8
|
||||
PKG_RELEASE=$(PKG_SOURCE_VERSION)
|
||||
|
||||
PKG_SOURCE_PROTO:=git
|
||||
PKG_SOURCE_URL:=https://github.com/OLSR/olsrd.git
|
||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||
PKG_SOURCE_VERSION:=v0.9.7
|
||||
PKG_SOURCE_VERSION:=v0.9.8
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
||||
|
||||
PKG_BUILD_PARALLEL:=0
|
||||
|
|
Loading…
Reference in a new issue