source: freewrt/package/fwifupdown/lib/bridge@ 655dec8

Last change on this file since 655dec8 was 8ebd04e, checked in by Christian Fischer <spaetzle@…>, 19 years ago

some fixes to get set -u working

git-svn-id: svn://www.freewrt.org/trunk/freewrt@2390 afb5a338-a214-0410-bd46-81f09a774fd1

  • Property mode set to 100644
File size: 2.2 KB
Line 
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
11CFG_PREUP_IFUP_CHECK_OFF=1
12CFG_DOWN_IFUP_CHECK_OFF=1
13
14iface_type() {
15 if [ "$MODE" = "start" ]
16 then
17 [ "${IF_BRIDGE_IFACES:-""}" != "" ]
18 else
19 [ "$(brctl show 2>&- | sed -n -e "/^${IFACE}/ { s/[[:space:]].*//gp }")" = $IFACE ]
20 fi
21}
22
23bridge_ifaces() {
24 brctl show 2>&- | sed -n -e "/^${IFACE}[[:space:]]/,/^\S/{ /^\(${IFACE}[[:space:]]\|[[:space:]]\)/s/^.*[[:space:]]//p }"
25}
26
27bridge_exists() {
28 [ "$(brctl show 2>&- | sed -n -e "/^${IFACE}/ { s/[[:space:]].*//gp }")" = "$IFACE" ]
29}
30
31bridge_depup() {
32 for IF in $IF_BRIDGE_IFACES
33 do
34 is_up $IF || ifup $IF || return 1
35 done
36}
37
38bridge_addif() {
39 local err
40 for IF in $IF_BRIDGE_IFACES
41 do
42 madd $IF
43 if ! err=$(brctl addif $IFACE $IF 2>&1 1>&-)
44 then
45 mstate 1
46 merr $err
47 return 1
48 fi
49 mstate 0
50 done
51}
52
53bridge_delif() {
54 local err retval=0
55 for IF in $(bridge_ifaces)
56 do
57 mremove $IF
58 if ! err=$(brctl delif $IFACE $IF 2>&1 1>&-)
59 then
60 mstate 1
61 merr $err
62 retval=1
63 else
64 mstate 0
65 fi
66 done
67 return $retval
68}
69
70bridge_create() {
71 local err
72 if ! err=$(brctl addbr $IFACE 2>&1 1>&-)
73 then
74 mstate 1
75 merr $err
76 return 1
77 fi
78 mstate 0
79}
80
81bridge_destroy() {
82 local err
83 mdestroy
84 if ! err=$(brctl delbr $IFACE 2>&1 1>&-)
85 then
86 mstate 1
87 merr $err
88 return 1
89 fi
90 mstate 0
91}
92
93
94if_preup() {
95 mcreate
96 if ! [ -x "$(which brctl)" ]
97 then
98 mstate 1
99 merr "brctl executable not found"
100 fi
101
102 if iface_exists
103 then
104 mstate 1
105 if ! bridge_exists
106 then
107 merr "Interface of this name already exists, cannot create bridge ${IFACE}"
108 return 1
109 fi
110 merr "Bridge already created, run ifdown ${IFACE} first"
111 return 1
112 fi
113
114 bridge_create || return 1
115
116 if ! bridge_depup
117 then
118 bridge_delif
119 bridge_destroy
120 return 1
121 fi
122
123 if ! bridge_addif
124 then
125 bridge_delif
126 bridge_destroy
127 return 1
128 fi
129}
130
131if_up() {
132:
133}
134
135if_down() {
136 mdestroy
137 if ! bridge_exists
138 then
139 mstate 1
140 merr "Bridge doesn't exist, run ifup ${IFACE} first"
141 return 1
142 fi
143}
144
145if_postdown() {
146 bridge_delif
147 bridge_destroy
148}
149
150# vim:ts=4
Note: See TracBrowser for help on using the repository browser.