English Language flag
// Log In
// CVSweb
Project: FreeWRT
// Summary // Activity // Search // Tracker // Lists // News // SCM // Wiki

SCM Repository

ViewVC logotype

Contents of /branches/common-nfo/package/fwifupdown/lib/bridge

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3427 - (show annotations) (download)
Wed Aug 8 11:08:41 2007 UTC (6 years, 6 months ago) by tg
File size: 2135 byte(s)
merge in trunk rev. 3426
1 #!/bin/sh
2 #
3 # This file is part of the FreeWRT project. FreeWRT is copyrighted
4 # material, please see the LICENCE file in the top-level directory
5 # or at http://www.freewrt.org/licence for details.
6 #
7 # Christian Fischer <spaetzle@freewrt.org>
8 #
9
10 IFACE_LOGICAL=1
11
12 iface_type() {
13 if [[ $MODE = start ]]; then
14 [[ -n $IF_BRIDGE_IFACES ]]
15 return
16 fi
17 bridge_exists
18 }
19
20 bridge_ifaces() {
21 brctl show 2>&- | \
22 sed -n -e "/^${IFACE}[[:space:]]/,/^\S/{ /^\(${IFACE}[[:space:]]\|[[:space:]]\)/s/^.*[[:space:]]//p }"
23 }
24
25 bridge_exists() {
26 [[ $IFACE = $(brctl show 2>&- | sed -n -e "/^${IFACE}/ { s/[[:space:]].*//gp }") ]]
27 }
28
29 bridge_depup() {
30 for IF in $IF_BRIDGE_IFACES; do
31 # is it up?
32 is_up $IF || ifup $IF || continue
33 # up now, add it to the list
34 ifacelist="$ifacelist $IF"
35 done
36 }
37
38 bridge_addif() {
39 local err
40 for IF in $ifacelist; do
41 madd $IF
42 err=$(brctl addif $IFACE $IF 2>&1 1>&-)
43 mstate $? && continue
44 merr $err
45 done
46 }
47
48 bridge_delif() {
49 local err retval=0
50 for IF in $(bridge_ifaces); do
51 mremove $IF
52 err=$(brctl delif $IFACE $IF 2>&1 1>&-)
53 mstate $? || { merr $err; continue;}
54 # remove bridge ends without assigned ip
55 ip a | grep inet | grep -q $IF && continue
56 ifdown $IF
57 done
58 }
59
60 bridge_create() {
61 local err
62 mcreate
63 err=$(brctl addbr $IFACE 2>&1 1>&-)
64 mstate $? && return
65 merr $err
66 return 1
67 }
68
69 bridge_destroy() {
70 local err
71 mdestroy
72 err=$(brctl delbr $IFACE 2>&1 1>&-)
73 mstate $? && return
74 merr $err
75 return 1
76 }
77
78 prereq_preup() {
79 if ! [[ -x $(whence -p brctl) ]]; then
80 mcreate
81 mstate 1
82 merr "brctl not found"
83 return 1
84 fi
85
86 iface_exists || return 0
87
88 mcreate
89 mstate 1
90 if bridge_exists; then
91 merr "Interface already created"
92 return 1
93 fi
94 merr "Interface of this name already created"
95 return 1
96 }
97
98 prereq_down() {
99 bridge_exists && return
100 mdestroy
101 mstate 1
102 merr "No such device"
103 return 1
104 }
105
106 if_preup() {
107 bridge_create || return
108 bridge_depup
109 bridge_addif
110 }
111
112 if_up() {
113 # trigger bridge initialisation watchdog in ifupdown.sh
114 mkdir -p /tmp/ifupdown/ifstate/bridge
115 true >/tmp/ifupdown/ifstate/bridge/$IFACE
116 }
117
118 if_postdown() {
119 bridge_delif
120 bridge_destroy
121 }
122
123 # vim:ts=4

root@freewrt.org:443
ViewVC Help
Powered by ViewVC 1.1.20