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

SCM Repository

ViewVC logotype

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 3426 by tg, Wed Jul 18 12:45:43 2007 UTC revision 3427 by tg, Wed Aug 8 11:08:41 2007 UTC
# Line 7  Line 7 
7  # Christian Fischer <spaetzle@freewrt.org>  # Christian Fischer <spaetzle@freewrt.org>
8  #  #
9    
10    IFACE_LOGICAL=1
 RT_PREUP_IFUP_CHECK_OFF=1  
11    
12  iface_type() {  iface_type() {
13          if [ "$MODE" = "start" ]          if [[ $MODE = start ]]; then
14          then                  [[ -n $IF_BRIDGE_IFACES ]]
15                  [ -n "$IF_BRIDGE_IFACES" ]                  return
         else  
                 [ "$(brctl show 2>&- | sed -n -e "/^${IFACE}/ { s/[[:space:]].*//gp }")" = "$IFACE" ]  
16          fi          fi
17            bridge_exists
18  }  }
19    
20  bridge_ifaces() {  bridge_ifaces() {
21          brctl show 2>&- | sed -n -e "/^${IFACE}[[:space:]]/,/^\S/{ /^\(${IFACE}[[:space:]]\|[[:space:]]\)/s/^.*[[:space:]]//p }"          brctl show 2>&- | \
22                    sed -n -e "/^${IFACE}[[:space:]]/,/^\S/{ /^\(${IFACE}[[:space:]]\|[[:space:]]\)/s/^.*[[:space:]]//p }"
23  }  }
24    
25  bridge_exists() {  bridge_exists() {
26          [ "$(brctl show 2>&- | sed -n -e "/^${IFACE}/ { s/[[:space:]].*//gp }")" = "$IFACE" ]          [[ $IFACE = $(brctl show 2>&- | sed -n -e "/^${IFACE}/ { s/[[:space:]].*//gp }") ]]
27  }  }
28    
29  bridge_depup() {  bridge_depup() {
# Line 40  bridge_addif() { Line 39  bridge_addif() {
39          local err          local err
40          for IF in $ifacelist; do          for IF in $ifacelist; do
41                  madd $IF                  madd $IF
42                  if ! err=$(brctl addif $IFACE $IF 2>&1 1>&-)                  err=$(brctl addif $IFACE $IF 2>&1 1>&-)
43                  then                  mstate $? && continue
44                          mstate 1                  merr $err
                         merr $err  
                         continue  
                 fi  
                 mstate 0  
45          done          done
46  }  }
47    
48  bridge_delif() {  bridge_delif() {
49          local err retval=0          local err retval=0
50          for IF in $(bridge_ifaces)          for IF in $(bridge_ifaces); do
         do  
51                  mremove $IF                  mremove $IF
52                  if ! err=$(brctl delif $IFACE $IF 2>&1 1>&-)                  err=$(brctl delif $IFACE $IF 2>&1 1>&-)
53                  then                  mstate $? || { merr $err; continue;}
54                          mstate 1                  # remove bridge ends without assigned ip
55                          merr $err                  ip a | grep inet | grep -q $IF && continue
56                          retval=1                  ifdown $IF
                 else  
                         mstate 0  
   
                         # remove bridge ends without assigned ip  
                         if ! ip a | grep inet | grep -q $IF  
                         then  
                                 ifdown $IF  
                         fi  
                 fi  
57          done          done
         return $retval  
58  }  }
59    
60  bridge_create() {  bridge_create() {
61          local err          local err
62          mcreate          mcreate
63          if ! err=$(brctl addbr $IFACE 2>&1 1>&-)          err=$(brctl addbr $IFACE 2>&1 1>&-)
64          then          mstate $? && return
65                  mstate 1          merr $err
66                  merr $err          return 1
                 return 1  
         fi  
         mstate 0  
67  }  }
68    
69  bridge_destroy() {  bridge_destroy() {
70          local err          local err
71          mdestroy          mdestroy
72          if ! err=$(brctl delbr $IFACE 2>&1 1>&-)          err=$(brctl delbr $IFACE 2>&1 1>&-)
73          then          mstate $? && return
74                  mstate 1          merr $err
75                  merr $err          return 1
                 return 1  
         fi  
         mstate 0  
76  }  }
77    
78  if_preup() {  prereq_preup() {
79          if ! [ -x "$(which brctl)" ]          if ! [[ -x $(whence -p brctl) ]]; then
         then  
80                  mcreate                  mcreate
81                  mstate 1                  mstate 1
82                  merr "brctl executable not found"                  merr "brctl not found"
83                  return 1                  return 1
84          fi          fi
85    
86          if iface_exists          iface_exists || return 0
87          then  
88                  mcreate          mcreate
89                  mstate 1          mstate 1
90                  if ! bridge_exists          if bridge_exists; then
91                  then                  merr "Interface already created"
                         merr "Interface of this name already exists, cannot create bridge ${IFACE}"  
                         return 1  
                 fi  
                 merr "Bridge already created"  
92                  return 1                  return 1
93          fi          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          bridge_create || return 1  if_preup() {
107            bridge_create || return
108          bridge_depup          bridge_depup
109          bridge_addif          bridge_addif
110  }  }
# Line 130  if_up() { Line 115  if_up() {
115          true >/tmp/ifupdown/ifstate/bridge/$IFACE          true >/tmp/ifupdown/ifstate/bridge/$IFACE
116  }  }
117    
 if_down() {  
         if ! bridge_exists  
         then  
                 mdestroy  
                 mstate 1  
                 merr "Bridge doesn't exist"  
                 return 1  
         fi  
 }  
   
118  if_postdown() {  if_postdown() {
119          bridge_delif          bridge_delif
120          bridge_destroy          bridge_destroy

Legend:
Removed from v.3426  
changed lines
  Added in v.3427

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