Skip to content

Instantly share code, notes, and snippets.

@T-X
Created June 26, 2017 01:12
Show Gist options
  • Save T-X/8099e1439d3eaa1e8293651faaa311f8 to your computer and use it in GitHub Desktop.
Save T-X/8099e1439d3eaa1e8293651faaa311f8 to your computer and use it in GitHub Desktop.
#!/bin/bash
BATDIR="/mnt/batman-adv-t_x"
BATALGO="BATMAN_IV"
NUMNODES=3
modules="batman-adv"
modules_extern=
cleanup() {
modprobe -r bridge 2> /dev/null
modprobe -r veth 2> /dev/null
modprobe -r batman-adv 2> /dev/null
for n in `ip netns list | grep "^sim42" | cut -f1 -d' '`; do
ip netns delete "$n"
done
}
setup_modules() {
modprobe veth
modprobe llc
modprobe stp
modprobe crc16
modprobe libcrc32c
modprobe cfg80211
#insmod /mnt/linux/linux/net/bridge/bridge.ko
modprobe bridge
insmod $BATDIR/build/net/batman-adv/batman-adv.ko
}
setup_netns() {
for i in `seq -w 0001 $NUMNODES`; do
ip netns add sim42-$i
done
}
setup_line_topology() {
for i in `seq -w 0001 $(($NUMNODES-1))`; do
j=`printf "%.4d\n" $(($i+1))`
ip link add sim42-$i-$j type veth peer name sim42-$j-$i
ip link set dev sim42-$i-$j address 12:00:${i:0:2}:${i:2:2}:${j:0:2}:${j:2:2}
ip link set dev sim42-$j-$i address 12:00:${j:0:2}:${j:2:2}:${i:0:2}:${i:2:2}
ip link set dev sim42-$i-$j netns sim42-$i
ip link set dev sim42-$j-$i netns sim42-$j
done
}
get_netns_ifaces() {
local netns="ip netns exec sim42-$1"
$netns ip -o link | grep '^[0-9]*: sim42-.*$' | \
sed "s/^[0-9]*: \([^@:]*\)[@]*[^:]*: .*/\1/"
}
setup_batman_netns() {
local netns="ip netns exec sim42-$1"
for iface in `get_netns_ifaces $1`; do
$netns /bin/bash -c "echo '1' > /proc/sys/net/ipv6/conf/$iface/disable_ipv6"
$netns batctl -m bat$1 interface add $iface
$netns ip link set up dev $iface
done
$netns /bin/bash -c "echo '1' > /proc/sys/net/ipv6/conf/bat$1/disable_ipv6"
$netns ip link set dev bat$1 address 02:00:00:00:${1:0:2}:${1:2:2}
$netns ip link set up dev bat$1
$netns brctl addbr br$1
$netns /bin/bash -c "echo '1' > /proc/sys/net/ipv6/conf/br$1/disable_ipv6"
$netns brctl addif br$1 bat$1
$netns ip link set up dev br$1
}
setup_batman() {
batctl ra "$BATALGO"
for i in `seq -w 0001 $NUMNODES`; do
setup_batman_netns "$i"
done
}
setup() {
setup_modules
setup_netns
setup_line_topology
setup_batman
}
cleanup
setup
#!/bin/sh
netns1="ip netns exec sim42-0001"
netns2="ip netns exec sim42-0002"
netns3="ip netns exec sim42-0003"
for p in `ps -Af | grep "ping6.*sim42" | grep -v "grep" | sed "s/^[^ ]*[ ]*\([0-9]*\) .*/\1/"`; do
kill "$p"
done
./setup-batman-netns.sh 3
$netns2 batctl -m bat0002 mark 0x06/0xFFFFFFFF
$netns1 batctl -m bat0001 ll tt
$netns2 batctl -m bat0002 ll tt
$netns3 batctl -m bat0003 ll tt
ip link add sim42-bb2 type veth peer name sim42-bb3
ip link add sim42-provider type veth peer name sim42-client
ip link set dev sim42-bb2 address 22:00:00:02:00:03
ip link set dev sim42-bb3 address 22:00:00:03:00:02
ip link set dev sim42-provider address 22:00:00:00:00:02
ip link set dev sim42-client address 32:00:00:00:00:02
ip link set dev sim42-bb2 netns sim42-0002
ip link set dev sim42-bb3 netns sim42-0003
ip link set dev sim42-provider netns sim42-0002
ip link set dev sim42-client netns sim42-0002
$netns2 /bin/bash -c "echo '1' > /proc/sys/net/ipv6/conf/sim42-bb2/disable_ipv6"
$netns3 /bin/bash -c "echo '1' > /proc/sys/net/ipv6/conf/sim42-bb3/disable_ipv6"
$netns2 /bin/bash -c "echo '1' > /proc/sys/net/ipv6/conf/sim42-provider/disable_ipv6"
$netns2 brctl addif br0002 sim42-bb2
$netns3 brctl addif br0003 sim42-bb3
$netns2 brctl addif br0002 sim42-provider
$netns2 ebtables -t nat -F POSTROUTING
$netns2 ebtables -t nat -I POSTROUTING -o bat0002 -j mark --set-mark 0x06 --mark-target ACCEPT
$netns2 ip link set up dev sim42-bb2
$netns3 ip link set up dev sim42-bb3
$netns2 ip link set up dev sim42-provider
$netns2 ip link set up dev sim42-client
# Waiting for IPv6 to configure sim42-client
echo "Transmitting with isolation flag"
sleep 5
$netns2 ping6 -q -c 3 ff02::1%sim42-client > /dev/null
sleep 5
echo "Deleting isolation mark"
$netns2 ebtables -t nat -D POSTROUTING -o bat0002 -j mark --set-mark 0x06 --mark-target ACCEPT
echo "Transmitting without isolation flag"
sleep 5
$netns2 ping6 -q -c 3 ff02::1%sim42-client > /dev/null
sleep 5
$netns2 ping6 -q -i 10 ff02::1%sim42-client > /dev/null &
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment