[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#698381: unblock: ifupdown/0.7.6



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

Please unblock package ifupdown. This release fixes some important issues with ifupdown,
and also brings upstart support up to date.

ifupdown (0.7.6) unstable; urgency=low

  [ Andrew O. Shadura ]
  * Don't configure bridge interfaces as tagged VLAN interfaces
    (Closes: #696642).
  * Add "tryonce" option to DHCP-enabled methods (Closes: #694541).
  * Update manual pages.

  [ Stéphane Graber ]
  * Patches for upstart support from Ubuntu:
    - Start the job on runlevel [2345]. This is a no-op during a normal
      boot since the network will be started *before* runlevel is emitted,
      but is needed to restart the network after a change from runlevel 1
      (LP: #752481).
    - Don't bring 'lo' down (add it to --exclude).
    - Emit deconfiguring-networking (LP: #1061639).
    - Update network-interface-security job to stop when the parent job is
      stopped itself. This avoids leftover instances (LP: #1065684).
  * Set MTU of tunnel devices (LP: #1074048).
  * Actually set the new calculated value for duplicate entries
    (LP: #1086517).


unblock ifupdown/0.7.6

-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'stable'), (1, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 3.6-trunk-686-pae (SMP w/2 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) (ignored: LC_ALL set to en_GB.UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -Nru ifupdown-0.7.5/debian/changelog ifupdown-0.7.6/debian/changelog
--- ifupdown-0.7.5/debian/changelog	2012-11-02 18:31:00.000000000 +0100
+++ ifupdown-0.7.6/debian/changelog	2013-01-08 01:47:04.000000000 +0100
@@ -1,3 +1,27 @@
+ifupdown (0.7.6) unstable; urgency=low
+
+  [ Andrew O. Shadura ]
+  * Don't configure bridge interfaces as tagged VLAN interfaces
+    (Closes: #696642).
+  * Add "tryonce" option to DHCP-enabled methods (Closes: #694541).
+  * Update manual pages.
+
+  [ Stéphane Graber ]
+  * Patches for upstart support from Ubuntu:
+    - Start the job on runlevel [2345]. This is a no-op during a normal
+      boot since the network will be started *before* runlevel is emitted,
+      but is needed to restart the network after a change from runlevel 1
+      (LP: #752481).
+    - Don't bring 'lo' down (add it to --exclude).
+    - Emit deconfiguring-networking (LP: #1061639).
+    - Update network-interface-security job to stop when the parent job is
+      stopped itself. This avoids leftover instances (LP: #1065684).
+  * Set MTU of tunnel devices (LP: #1074048).
+  * Actually set the new calculated value for duplicate entries
+    (LP: #1086517).
+
+ -- Andrew O. Shadura <bugzilla@tut.by>  Sun, 06 Jan 2013 19:36:49 +0100
+
 ifupdown (0.7.5) unstable; urgency=low
 
   * Fix upstart hooks (Closes: #692110).
diff -Nru ifupdown-0.7.5/debian/ifupdown.networking.upstart ifupdown-0.7.6/debian/ifupdown.networking.upstart
--- ifupdown-0.7.5/debian/ifupdown.networking.upstart	2012-10-16 10:38:55.000000000 +0200
+++ ifupdown-0.7.6/debian/ifupdown.networking.upstart	2013-01-06 19:26:34.000000000 +0100
@@ -7,9 +7,10 @@
 
 emits static-network-up
 emits net-device-up
+emits deconfiguring-networking
 
 start on (local-filesystems
-      and (stopped udevtrigger or container))
+      and (stopped udevtrigger or container)) or runlevel [2345]
 stop on unmounted-remote-filesystems
 
 pre-start script
@@ -62,5 +63,8 @@
 
     check_network_file_systems
     check_network_swap
-    ifdown -a
+
+    # Anything that manages network interfaces *MUST* wait for this event
+    initctl emit deconfiguring-networking
+    ifdown -a --exclude=lo
 end script
diff -Nru ifupdown-0.7.5/debian/ifupdown.network-interface-security.upstart ifupdown-0.7.6/debian/ifupdown.network-interface-security.upstart
--- ifupdown-0.7.5/debian/ifupdown.network-interface-security.upstart	2012-10-16 10:38:55.000000000 +0200
+++ ifupdown-0.7.6/debian/ifupdown.network-interface-security.upstart	2013-01-06 19:36:14.000000000 +0100
@@ -12,6 +12,9 @@
 start on (starting network-interface
           or starting network-manager
           or starting networking)
+stop on (stopped network-interface JOB=$JOB INTERFACE=$INTERFACE
+          or stopped network-manager JOB=$JOB
+          or stopped networking JOB=$JOB)
 
 # In order to handle the lack of upstart feature LP: #568860, we need to
 # run multiple times, for each of the above "starting" service instances, or
diff -Nru ifupdown-0.7.5/debian/testbuild-linux ifupdown-0.7.6/debian/testbuild-linux
--- ifupdown-0.7.5/debian/testbuild-linux	2012-10-16 10:38:04.000000000 +0200
+++ ifupdown-0.7.6/debian/testbuild-linux	2013-01-07 01:42:19.000000000 +0100
@@ -344,7 +344,7 @@
 
 cat >tests/testcase.7 <<EOF
 # RUN: -a
-auto eth0 eth0.1 eth0.0201 tunnel
+auto eth0 eth0.1 eth0.0201 br0.0201 br0.0202 tunnel
 iface eth0 inet static
   address 1.2.3.4
   netmask 255.255.255.0
@@ -358,6 +358,9 @@
   netmask 64
 iface eth0.0201 inet static
   address 192.168.0.1/25
+iface br0.0201 inet manual
+  bridge_ports eth0.0201
+iface br0.0202 inet manual
 iface tunnel inet6 6to4
   local 1.2.3.4
 EOF
@@ -399,6 +402,13 @@
 ip link set dev eth0.0201   up
 
 run-parts --verbose /etc/network/if-up.d
+Configuring interface br0.0201=br0.0201 (inet)
+run-parts --verbose /etc/network/if-pre-up.d
+run-parts --verbose /etc/network/if-up.d
+if test -d /sys/class/net/br0 -a             ! -d /sys/class/net/br0.0202 ;     then         ip link set up dev br0;         ip link add link br0 name br0.0202 type vlan id 202;     fi
+Configuring interface br0.0202=br0.0202 (inet)
+run-parts --verbose /etc/network/if-pre-up.d
+run-parts --verbose /etc/network/if-up.d
 Configuring interface tunnel=tunnel (inet6)
 run-parts --verbose /etc/network/if-pre-up.d
 modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.
@@ -486,8 +496,114 @@
 run-parts --verbose /etc/network/if-up.d
 EOF
 
+cat >tests/testcase.10 <<EOF
+# RUN: -a
+auto eth0 eth1 eth2 eth3
+
+iface eth0 inet dhcp
+
+iface eth0 inet6 dhcp
+
+iface eth1 inet dhcp
+    tryonce yes
+
+iface eth1 inet6 dhcp
+    tryonce yes
+
+iface eth2 inet dhcp
+    tryonce no
+
+iface eth2 inet6 dhcp
+    tryonce no
+
+iface eth3 inet6 auto
+    dhcp yes
+    tryonce yes
+
+iface eth3 inet6 auto
+    dhcp yes
+    tryonce no
+
+iface eth3 inet6 auto
+    dhcp no
+    tryonce yes
+
+EOF
+cat >tests/up.10 <<EOF
+====stdout====
+====stderr====
+run-parts --verbose /etc/network/if-pre-up.d
+Configuring interface eth0=eth0 (inet)
+run-parts --verbose /etc/network/if-pre-up.d
+
+dhclient -1 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0 	
+run-parts --verbose /etc/network/if-up.d
+Configuring interface eth0=eth0 (inet6)
+run-parts --verbose /etc/network/if-pre-up.d
+modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.
+sysctl -q -e -w net.ipv6.conf.eth0.accept_ra=0
+
+ip link set dev eth0  up
+dhclient -6 -1 -pf /run/dhclient6.eth0.pid -lf /var/lib/dhcp/dhclient6.eth0.leases eth0
+run-parts --verbose /etc/network/if-up.d
+Configuring interface eth1=eth1 (inet)
+run-parts --verbose /etc/network/if-pre-up.d
+
+dhclient -1 -v -pf /run/dhclient.eth1.pid -lf /var/lib/dhcp/dhclient.eth1.leases eth1 	
+run-parts --verbose /etc/network/if-up.d
+Configuring interface eth1=eth1 (inet6)
+run-parts --verbose /etc/network/if-pre-up.d
+modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.
+sysctl -q -e -w net.ipv6.conf.eth1.accept_ra=0
+
+ip link set dev eth1  up
+dhclient -6 -1 -pf /run/dhclient6.eth1.pid -lf /var/lib/dhcp/dhclient6.eth1.leases eth1
+run-parts --verbose /etc/network/if-up.d
+Configuring interface eth2=eth2 (inet)
+run-parts --verbose /etc/network/if-pre-up.d
+
+dhclient  -v -pf /run/dhclient.eth2.pid -lf /var/lib/dhcp/dhclient.eth2.leases eth2 	
+run-parts --verbose /etc/network/if-up.d
+Configuring interface eth2=eth2 (inet6)
+run-parts --verbose /etc/network/if-pre-up.d
+modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.
+sysctl -q -e -w net.ipv6.conf.eth2.accept_ra=0
+
+ip link set dev eth2  up
+dhclient -6  -pf /run/dhclient6.eth2.pid -lf /var/lib/dhcp/dhclient6.eth2.leases eth2
+run-parts --verbose /etc/network/if-up.d
+Configuring interface eth3=eth3 (inet6)
+run-parts --verbose /etc/network/if-pre-up.d
+modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.
+
+sysctl -q -e -w net.ipv6.conf.eth3.accept_ra=1
+sysctl -q -e -w net.ipv6.conf.eth3.autoconf=1
+ip link set dev eth3 up
+dhclient -6 -1 -S -pf /run/dhclient6.eth3.pid -lf /var/lib/dhcp/dhclient6.eth3.leases eth3
+run-parts --verbose /etc/network/if-up.d
+Configuring interface eth3=eth3 (inet6)
+run-parts --verbose /etc/network/if-pre-up.d
+modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.
+
+sysctl -q -e -w net.ipv6.conf.eth3.accept_ra=1
+sysctl -q -e -w net.ipv6.conf.eth3.autoconf=1
+ip link set dev eth3 up
+dhclient -6  -S -pf /run/dhclient6.eth3.pid -lf /var/lib/dhcp/dhclient6.eth3.leases eth3
+run-parts --verbose /etc/network/if-up.d
+Configuring interface eth3=eth3 (inet6)
+run-parts --verbose /etc/network/if-pre-up.d
+modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.
+
+sysctl -q -e -w net.ipv6.conf.eth3.accept_ra=1
+sysctl -q -e -w net.ipv6.conf.eth3.autoconf=1
+ip link set dev eth3 up
+run-parts --verbose /etc/network/if-up.d
+run-parts --verbose /etc/network/if-up.d
+EOF
+
+
 result=true
-for test in 1 2 3 4 5 6 7 8 9; do
+for test in 1 2 3 4 5 6 7 8 9 10; do
         args="$(cat tests/testcase.$test | sed -n 's/^# RUN: //p')"
         ./ifup -nv --force -i tests/testcase.$test $args \
                 >tests/up-res-out.$test 2>tests/up-res-err.$test || 
diff -Nru ifupdown-0.7.5/ifupdown.nw ifupdown-0.7.6/ifupdown.nw
--- ifupdown-0.7.5/ifupdown.nw	2012-10-16 10:38:04.000000000 +0200
+++ ifupdown-0.7.6/ifupdown.nw	2013-01-07 01:42:19.000000000 +0100
@@ -161,7 +161,7 @@
 	$(patsubst %.defn,%.o,$(DEFNFILES)) arch$(ARCH).o meta.o link.o
 
 MAN := $(patsubst %.defn,%.man,$(DEFNFILES))
-DEFNFILES += meta.defn
+DEFNFILES += meta.defn link.defn
 
 default : executables
 all : executables docs
@@ -2144,6 +2144,7 @@
 
 				currif->option[i].value[l] = '\n';
 				strcpy(&(currif->option[i].value[l + 1]), rest);
+				strcpy(rest, currif->option[i].value);
 			}
 		}
 	}
@@ -3212,11 +3213,14 @@
 varvalue = get_var(command, namelen, ifd);
 @ 
 
-We also define an exported [[var_true()]] function to allow methods to
-have lines of code that are conditional on the value of a variable.
+We also define an exported [[var_true()]], [[var_set()]] and [[var_set_anywhere()]] functions
+to allow methods to have lines of code that are conditional on the value
+of a variable.
 
 <<exported symbols>>=
 int var_true(char *id, interface_defn *ifd);
+int var_set(char *id, interface_defn *ifd);
+int var_set_anywhere(char *id, interface_defn *ifd);
 @
 
 <<execute functions>>=
@@ -3225,7 +3229,7 @@
 
 	varvalue = get_var(id, strlen(id), ifd);
 	if (varvalue) {
-		if (strcmp(varvalue, "1") == 0 ||
+		if (atoi(varvalue) ||
 			strcasecmp(varvalue, "on") == 0 ||
 			strcasecmp(varvalue, "true") == 0 ||
 			strcasecmp(varvalue, "yes") == 0)
@@ -3239,6 +3243,34 @@
 	} else
 		return 0;
 }
+
+int var_set(char *id, interface_defn *ifd) {
+	char *varvalue;
+
+	varvalue = get_var(id, strlen(id), ifd);
+	if (varvalue) {
+		free(varvalue);
+		return 1;
+	} else {
+		return 0;
+	}
+}
+
+int var_set_anywhere(char *id, interface_defn *ifd) {
+	char *varvalue;
+	interface_defn *currif;
+
+	for (currif = defn->ifaces; currif; currif = currif->next) {
+		if (strcmp(ifd->logical_iface, currif->logical_iface) == 0) {
+			varvalue = get_var(id, strlen(id), currif);
+			if (varvalue) {
+				free(varvalue);
+				return 1;
+			}
+		}
+	}
+	return 0;
+}
 @
 
 \subsection{Mapping Scripts}
@@ -3876,7 +3908,11 @@
 Since this has all been covered in a previous section, this is pretty
 trivial.
 
-<<variables local to main>>=
+<<exported symbols>>=
+extern interfaces_file *defn;
+@ 
+
+<<main global variables>>=
 interfaces_file *defn;
 @ 
 
@@ -4064,6 +4100,7 @@
 	if (!okay && <<we're bringing interfaces up>>) {
 		interface_defn link = {
 		    .real_iface = iface,
+		    .logical_iface = liface,
 		    .max_options = 0,
 		    .address_family = &addr_link,
 		    .method = &(addr_link.method[0]),
@@ -4649,6 +4686,7 @@
 void set_preferred_lft(interface_defn *ifd, char **pparam, int argc, char ** argv);
 void get_token(interface_defn *ifd, char **pparam, int argc, char ** argv);
 void to_decimal(interface_defn *ifd, char **pparam, int argc, char ** argv);
+void map_value(interface_defn *ifd, char **pparam, int argc, char ** argv);
 @ 
 
 <<common functions implementations>>=
@@ -4873,6 +4911,28 @@
 	snprintf(*pparam, strlen(*pparam) + 1, "%ld", value);
 }
 
+void map_value(interface_defn *ifd UNUSED, char **pparam, int argc, char ** argv)
+{
+	if (argc < 2) return;
+
+	int value;
+	if (argc == 2) {
+		value = (atoi(*pparam) ||
+			strcasecmp(*pparam, "on") == 0 ||
+			strcasecmp(*pparam, "true") == 0 ||
+			strcasecmp(*pparam, "yes") == 0);
+	}
+	if ((value < argc) && (argv[value] != NULL)) {
+		*pparam = realloc(*pparam, strlen(argv[value]) + 1);
+		if (*pparam == NULL) return;
+		strcpy(*pparam, argv[value]);
+	} else {
+		*pparam = realloc(*pparam, 1);
+		if (*pparam == NULL) return;
+		*pparam[0] = 0;
+	}
+}
+
 @ 
 
 \subsection{Linux-specific functions}
@@ -5081,16 +5141,18 @@
     vendor vendor           -- Vendor class identifier (dhcpcd)
     client client           -- Client identifier (dhcpcd, udhcpc)
     hwaddress address       -- Hardware address.
+    tryonce bool            -- Try to acquire lease just once (dhclient). [yes]
 
   conversion
     hwaddress cleanup_hwaddress
+    tryonce (map_value "" -1)
 
   up
     [[ip link set dev %iface% address %hwaddress%]]
-    dhclient -1 -v -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases %iface% \
+    dhclient [[%tryonce%]] -v -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases %iface% \
 	[[-e IF_METRIC=%metric%]] \
         if (execable("/sbin/dhclient"))
-    dhclient3 -1 -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp3/dhclient.%iface%.leases %iface% \
+    dhclient3 [[%tryonce%]] -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp3/dhclient.%iface%.leases %iface% \
 	[[-e IF_METRIC=%metric%]] \
         elsif (execable("/sbin/dhclient3"))
     pump -i %iface% [[-h %hostname%]] [[-l %leasehours%]] \
@@ -5160,7 +5222,7 @@
   up
     ip tunnel add %iface% mode %mode% remote %endpoint% [[local %local%]] \
        [[ttl %ttl%]]
-    ip link set %iface% up
+    ip link set %iface% up [[mtu %mtu%]]
     ip addr add %address%/%netmask% dev %iface% [[peer %dstaddr%]]
     [[ ip route add default via %gateway% ]]
   down
@@ -5239,13 +5301,18 @@
   options
     privext int            -- Privacy extensions (RFC3041) (0=off, 1=assign, 2=prefer)
     dhcp int               -- Use stateless DHCPv6 (0=off, 1=on)
+    tryonce bool           -- For DHCPv6, try to acquire lease just once. [yes]
+
+  conversion
+    tryonce (map_value "" -1)
+
   up
     modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.
     [[sysctl -q -e -w net.ipv6.conf.%iface/.//%.use_tempaddr=%privext%]]
     sysctl -q -e -w net.ipv6.conf.%iface/.//%.accept_ra=1
     sysctl -q -e -w net.ipv6.conf.%iface/.//%.autoconf=1
     ip link set dev %iface% up
-    dhclient -6 -1 -S -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface% \
+    dhclient -6 [[%tryonce%]] -S -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface% \
         if (var_true("dhcp", ifd) && execable("/sbin/dhclient"))
   down
     ip -6 addr flush dev %iface% scope global
@@ -5322,16 +5389,18 @@
     hwaddress address      -- Hardware address
     accept_ra int          -- Accept router advertisements (0=off, 1=on) [0]
     autoconf int           -- Perform stateless autoconfiguration (0=off, 1=on)
+    tryonce bool           -- Try to acquire lease just once. [yes]
 
   conversion
     hwaddress cleanup_hwaddress
+    tryonce (map_value "" -1)
 
   up
     modprobe -q net-pf-10 > /dev/null 2>&1 || true # ignore failure.
     [[sysctl -q -e -w net.ipv6.conf.%iface/.//%.accept_ra=%accept_ra%]]
     [[sysctl -q -e -w net.ipv6.conf.%iface/.//%.autoconf=%autoconf%]]
     ip link set dev %iface% [[address %hwaddress%]] up
-    dhclient -6 -1 -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface% \
+    dhclient -6 [[%tryonce%]] -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface% \
         if (execable("/sbin/dhclient"))
 
   down
@@ -5568,16 +5637,18 @@
     vendor vendor           -- Vendor class identifier (dhcpcd)
     client client           -- Client identifier (dhcpcd, udhcpc)
     hwaddress address       -- Hardware Address.
+    tryonce bool            -- Try to acquire lease just once (dhclient). [yes]
 
   conversion
     hwaddress cleanup_hwaddress
+    tryonce (map_value "" -1)
 
   up
     [[ifconfig %iface% link %hwaddress%]]
-    dhclient -1 -v -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases %iface% \
+    dhclient [[%tryonce%]] -v -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases %iface% \
 	[[-e IF_METRIC=%metric%]] \
         if (execable("/sbin/dhclient"))
-    dhclient3 -1 -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp3/dhclient.%iface%.leases %iface% \
+    dhclient3 [[%tryonce%]] -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp3/dhclient.%iface%.leases %iface% \
 	[[-e IF_METRIC=%metric%]] \
         elsif (execable("/sbin/dhclient3"))
     udhcpc -n -p /run/udhcpc.%iface%.pid -i %iface% [[-H %hostname%]] \
@@ -5657,13 +5728,15 @@
 
   options
     hwaddress address      -- Hardware address
+    tryonce bool           -- Try to acquire lease just once. [yes]
 
   conversion
     hwaddress cleanup_hwaddress
+    tryonce (map_value "" -1)
 
   up
     ifconfig %iface% [[link %hwaddress%]] up
-    dhclient -6 -1 -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface% \
+    dhclient -6 [[%tryonce%]] -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface% \
         if (execable("/sbin/dhclient"))
 
   down
@@ -5758,13 +5831,15 @@
     vendor vendor           -- Vendor class identifier (dhcpcd)
     client client           -- Client identifier (dhcpcd, udhcpc)
     hwaddress address       -- Hardware Address (Not yet supported)
+    tryonce bool            -- Try to acquire lease just once (dhclient). [yes]
 
   conversion
     hwaddress cleanup_hwaddress
+    tryonce (map_value "" -1)
 
   up
     [[Warning: Option hwaddress: %hwaddress% not yet supported]]
-    dhclient -1 -v -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases %iface% \
+    dhclient [[%tryonce%]] -v -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases %iface% \
         if (execable("/sbin/dhclient"))
     udhcpc -n -p /run/udhcpc.%iface%.pid -i %iface% [[-H %hostname%]] \
            [[-c %client%]] \
@@ -5839,14 +5914,16 @@
 
   options
     hwaddress address      -- Hardware address (Not yet supported)
+    tryonce bool           -- Try to acquire lease just once. [yes]
 
   conversion
     hwaddress cleanup_hwaddress
+    tryonce (map_value "" -1)
 
   up
     [[Warning: Option hwaddress: %hwaddress% not yet supported]]
     inetutils-ifconfig --interface %iface% --up
-    dhclient -6 -1 -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface% \
+    dhclient -6 [[%tryonce%]] -pf /run/dhclient6.%iface%.pid -lf /var/lib/dhcp/dhclient6.%iface%.leases %iface% \
         if (execable("/sbin/dhclient"))
 
   down
@@ -5900,9 +5977,9 @@
     then \
         ip link set up dev %link%; \
         ip link add link %link% name %iface0% type vlan id %vlan_id%; \
-    fi if (iface_has("."))
+    fi if (iface_has(".") && (!var_set_anywhere("bridge_ports", ifd)))
   down
-    ip link del %iface% if (iface_has("."))
+    ip link del %iface% if (iface_has(".") && (!var_set_anywhere("bridge_ports", ifd)))
 
 architecture kfreebsd
 
diff -Nru ifupdown-0.7.5/interfaces.5.pre ifupdown-0.7.6/interfaces.5.pre
--- ifupdown-0.7.5/interfaces.5.pre	2012-06-21 23:52:38.000000000 +0200
+++ ifupdown-0.7.6/interfaces.5.pre	2013-01-06 19:26:34.000000000 +0100
@@ -137,6 +137,24 @@
 .P
 Options are usually indented for clarity (as in the example above)
 but are not required to be.
+.P
+.SH VLAN AND BRIDGE INTERFACES
+To ease the configuration of VLAN interfaces, interfaces having
+.B .
+(full stop character) in the name are configured as 802.1q tagged
+virtual LAN interface. For example, interface
+.B eth0.1
+is a virtual interface having
+.B eth0
+as physical link, with VLAN ID 1.
+.P
+For compatibility with
+.B bridge-utils
+package, if
+.B bridge_ports
+option is specified, VLAN interface configuration is
+.B not
+performed.
 .SH IFACE OPTIONS
 The following "command" options are available for every family and method.
 Each of these options can be given multiple times in a single stanza,
@@ -278,7 +296,8 @@
 .BR ifup (8),
 .BR ip (8),
 .BR ifconfig (8),
-.BR run\-parts (8).
+.BR run\-parts (8),
+.BR resolvconf (8).
 .P
 For advice on configuring this package read the
 .B Network Configuration

Reply to: