root / tools / net-common.in @ dcedd81a
History | View | Annotate | Download (2.6 kB)
1 | 2c04ae0d | Dimitris Aragiorgis | #!/bin/bash |
---|---|---|---|
2 | 2c04ae0d | Dimitris Aragiorgis | # |
3 | 2c04ae0d | Dimitris Aragiorgis | |
4 | 2c04ae0d | Dimitris Aragiorgis | # Copyright (C) 2011, 2012, 2013 Google Inc. |
5 | 2c04ae0d | Dimitris Aragiorgis | # |
6 | 2c04ae0d | Dimitris Aragiorgis | # This program is free software; you can redistribute it and/or modify |
7 | 2c04ae0d | Dimitris Aragiorgis | # it under the terms of the GNU General Public License as published by |
8 | 2c04ae0d | Dimitris Aragiorgis | # the Free Software Foundation; either version 2 of the License, or |
9 | 2c04ae0d | Dimitris Aragiorgis | # (at your option) any later version. |
10 | 2c04ae0d | Dimitris Aragiorgis | # |
11 | 2c04ae0d | Dimitris Aragiorgis | # This program is distributed in the hope that it will be useful, but |
12 | 2c04ae0d | Dimitris Aragiorgis | # WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | 2c04ae0d | Dimitris Aragiorgis | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | 2c04ae0d | Dimitris Aragiorgis | # General Public License for more details. |
15 | 2c04ae0d | Dimitris Aragiorgis | # |
16 | 2c04ae0d | Dimitris Aragiorgis | # You should have received a copy of the GNU General Public License |
17 | 2c04ae0d | Dimitris Aragiorgis | # along with this program; if not, write to the Free Software |
18 | 2c04ae0d | Dimitris Aragiorgis | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
19 | 2c04ae0d | Dimitris Aragiorgis | # 02110-1301, USA. |
20 | 2c04ae0d | Dimitris Aragiorgis | |
21 | 2c04ae0d | Dimitris Aragiorgis | @SHELL_ENV_INIT@ |
22 | 2c04ae0d | Dimitris Aragiorgis | |
23 | 2c04ae0d | Dimitris Aragiorgis | function check { |
24 | 2c04ae0d | Dimitris Aragiorgis | |
25 | 2c04ae0d | Dimitris Aragiorgis | if [ -z "$INTERFACE" ]; then |
26 | 2c04ae0d | Dimitris Aragiorgis | echo "No network interface specified" |
27 | 2c04ae0d | Dimitris Aragiorgis | exit 1 |
28 | 2c04ae0d | Dimitris Aragiorgis | fi |
29 | 2c04ae0d | Dimitris Aragiorgis | |
30 | 2c04ae0d | Dimitris Aragiorgis | if [ -z "$MODE" ]; then |
31 | 2c04ae0d | Dimitris Aragiorgis | echo "MODE not specified" |
32 | 2c04ae0d | Dimitris Aragiorgis | exit 1 |
33 | 2c04ae0d | Dimitris Aragiorgis | fi |
34 | 2c04ae0d | Dimitris Aragiorgis | |
35 | 2c04ae0d | Dimitris Aragiorgis | } |
36 | 2c04ae0d | Dimitris Aragiorgis | |
37 | 2c04ae0d | Dimitris Aragiorgis | function fix_mac { |
38 | 2c04ae0d | Dimitris Aragiorgis | |
39 | 2c04ae0d | Dimitris Aragiorgis | # Fix the autogenerated MAC to have the first octet set to "fe" |
40 | 2c04ae0d | Dimitris Aragiorgis | # to discourage the bridge from using the TAP dev's MAC |
41 | 2c04ae0d | Dimitris Aragiorgis | FIXED_MAC=$(ip link show $INTERFACE | \ |
42 | 2c04ae0d | Dimitris Aragiorgis | awk '{if ($1 == "link/ether") printf("fe%s",substr($2,3,15))}') |
43 | 2c04ae0d | Dimitris Aragiorgis | # in case of a vif (xen_netback device) this action is not allowed |
44 | 2c04ae0d | Dimitris Aragiorgis | ip link set $INTERFACE address $FIXED_MAC || true |
45 | 2c04ae0d | Dimitris Aragiorgis | |
46 | 2c04ae0d | Dimitris Aragiorgis | } |
47 | 2c04ae0d | Dimitris Aragiorgis | |
48 | 2c04ae0d | Dimitris Aragiorgis | function setup_bridge { |
49 | 2c04ae0d | Dimitris Aragiorgis | |
50 | 2c04ae0d | Dimitris Aragiorgis | if [ "$MODE" = "bridged" ]; then |
51 | 2c04ae0d | Dimitris Aragiorgis | fix_mac |
52 | 2c04ae0d | Dimitris Aragiorgis | ip link set $INTERFACE up |
53 | 2c04ae0d | Dimitris Aragiorgis | ip link set $INTERFACE mtu $(</sys/class/net/${BRIDGE}/mtu) |
54 | 2c04ae0d | Dimitris Aragiorgis | |
55 | 2c04ae0d | Dimitris Aragiorgis | # Connect the interface to the bridge |
56 | 2c04ae0d | Dimitris Aragiorgis | brctl addif $BRIDGE $INTERFACE |
57 | 2c04ae0d | Dimitris Aragiorgis | fi |
58 | 2c04ae0d | Dimitris Aragiorgis | |
59 | 2c04ae0d | Dimitris Aragiorgis | } |
60 | 2c04ae0d | Dimitris Aragiorgis | |
61 | 2c04ae0d | Dimitris Aragiorgis | function setup_ovs { |
62 | 2c04ae0d | Dimitris Aragiorgis | if [ "$MODE" = "openvswitch" ]; then |
63 | 2c04ae0d | Dimitris Aragiorgis | ovs-vsctl add-port ${LINK} $INTERFACE |
64 | 2c04ae0d | Dimitris Aragiorgis | fi |
65 | 2c04ae0d | Dimitris Aragiorgis | } |
66 | 2c04ae0d | Dimitris Aragiorgis | |
67 | 2c04ae0d | Dimitris Aragiorgis | function setup_route { |
68 | 2c04ae0d | Dimitris Aragiorgis | if [ "$MODE" = "openvswitch" ]; then |
69 | 2c04ae0d | Dimitris Aragiorgis | ip link set $INTERFACE up |
70 | 2c04ae0d | Dimitris Aragiorgis | |
71 | 2c04ae0d | Dimitris Aragiorgis | if [ -z "$IP" ]; then |
72 | 2c04ae0d | Dimitris Aragiorgis | echo "Routed NIC but no IP address specified" |
73 | 2c04ae0d | Dimitris Aragiorgis | exit 1 |
74 | 2c04ae0d | Dimitris Aragiorgis | fi |
75 | 2c04ae0d | Dimitris Aragiorgis | |
76 | 2c04ae0d | Dimitris Aragiorgis | # Route traffic targeted at the IP to the interface |
77 | 2c04ae0d | Dimitris Aragiorgis | if [ -n "$LINK" ]; then |
78 | 2c04ae0d | Dimitris Aragiorgis | while ip rule del dev $INTERFACE; do :; done |
79 | 2c04ae0d | Dimitris Aragiorgis | ip rule add dev $INTERFACE table $LINK |
80 | 2c04ae0d | Dimitris Aragiorgis | ip route replace $IP table $LINK proto static dev $INTERFACE |
81 | 2c04ae0d | Dimitris Aragiorgis | |
82 | 2c04ae0d | Dimitris Aragiorgis | else |
83 | 2c04ae0d | Dimitris Aragiorgis | ip route replace $IP proto static dev $INTERFACE |
84 | 2c04ae0d | Dimitris Aragiorgis | fi |
85 | 2c04ae0d | Dimitris Aragiorgis | |
86 | 2c04ae0d | Dimitris Aragiorgis | # Allow routing and arp proxying, or ndp proxying (IPv6) |
87 | 2c04ae0d | Dimitris Aragiorgis | if [ -d "/proc/sys/net/ipv4/conf/$INTERFACE" ]; then |
88 | 2c04ae0d | Dimitris Aragiorgis | echo 1 > /proc/sys/net/ipv4/conf/$INTERFACE/proxy_arp |
89 | 2c04ae0d | Dimitris Aragiorgis | echo 1 > /proc/sys/net/ipv4/conf/$INTERFACE/forwarding |
90 | 2c04ae0d | Dimitris Aragiorgis | fi |
91 | 2c04ae0d | Dimitris Aragiorgis | |
92 | 2c04ae0d | Dimitris Aragiorgis | if [ -d "/proc/sys/net/ipv6/conf/$INTERFACE" ]; then |
93 | 2c04ae0d | Dimitris Aragiorgis | echo 1 > /proc/sys/net/ipv6/conf/$INTERFACE/proxy_ndp |
94 | 2c04ae0d | Dimitris Aragiorgis | echo 1 > /proc/sys/net/ipv6/conf/$INTERFACE/forwarding |
95 | 2c04ae0d | Dimitris Aragiorgis | fi |
96 | 2c04ae0d | Dimitris Aragiorgis | fi |
97 | 2c04ae0d | Dimitris Aragiorgis | } |