ifup & ifdown don't work for vlan devices when raw device name is the new "enp" convention

Bug #1628591 reported by wybren
26
This bug affects 4 people
Affects Status Importance Assigned to Milestone
ifupdown (Ubuntu)
Won't Fix
Undecided
Unassigned

Bug Description

The regular expressions used in /etc/network/if-post-down.d/vlan and /etc/network/if-pre-up.d/vlan
do not match the name of my network card enp4s0f0.
This can be fixed by broadening the regular expression.

This is only a problem when the device is a vlan device!

See below for the fix that worked on my system.

if-pre-up:

#!/bin/sh

# Most of this stuff is to enable vlans

case "$IFACE" in
  # Ignore any alias (#272891) which uses <interface>:<alabel>
  *:*)
    exit 0
  ;;
  vlan0*)
    vconfig set_name_type VLAN_PLUS_VID
    VLANID=`echo $IFACE|sed "s/vlan0*//"`
  ;;
  vlan*)
    vconfig set_name_type VLAN_PLUS_VID_NO_PAD
    VLANID=`echo $IFACE|sed "s/vlan0*//"`
  ;;
  eth*.0*|bond*.0*|wlan*.0*|em*.0*|p[0-9]*.0*|enp[0-9]*.0*)
    vconfig set_name_type DEV_PLUS_VID
    VLANID=`echo $IFACE|sed "s/eth[0-9][0-9]*\.0*//g;s/bond[0-9][0-9]*\.0*//g;s/wlan[0-9][0-9]*\.0*//g;s/em[0-9][0-9]*\.0*//g;s/p[0-9][0-9]*\(p[0-9][0-9]*\)\?\(_[0-9][0-9]*\)\?\.0*//g;s/enp[0-9]s[0-9]f[0-9]\.0*//g"`
    IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/;s/\(bond[0-9][0-9]*\)\..*/\1/;s/\(wlan[0-9][0-9]*\)\..*/\1/;s/\(em[0-9][0-9]*\)\..*/\1/;s/\(p[0-9][0-9]*\(p[0-9][0-9]*\)\?\(_[0-9][0-9]*\)\?\)\..*/\1/;s/\(enp[0-9]s[0-9]f[0-9]\)\..*/\1/"`
  ;;
  eth*.*|bond*.*|wlan*.*|em*.*|p[0-9]*.*|enp[0-9]*.*)
    vconfig set_name_type DEV_PLUS_VID_NO_PAD
    VLANID=`echo $IFACE|sed "s/eth[0-9][0-9]*\.0*//g;s/bond[0-9][0-9]*\.0*//g;s/wlan[0-9][0-9]*\.0*//g;s/em[0-9][0-9]*\.0*//g;s/p[0-9][0-9]*\(p[0-9][0-9]*\)\?\(_[0-9][0-9]*\)\?\.0*//g;s/enp[0-9]s[0-9]f[0-9]\.//g"`
    IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/;s/\(bond[0-9][0-9]*\)\..*/\1/;s/\(wlan[0-9][0-9]*\)\..*/\1/;s/\(em[0-9][0-9]*\)\..*/\1/;s/\(p[0-9][0-9]*\(p[0-9][0-9]*\)\?\(_[0-9][0-9]*\)\?\)\..*/\1/;s/\(enp[0-9]s[0-9]f[0-9]\)\..*/\1/"`
  ;;
  *.0*)
    # Silently ignore interfaces which we do not (know how to) support
    [ -z "$IF_VLAN_RAW_DEVICE" ] && exit 0
    vconfig set_name_type DEV_PLUS_VID
    VLANID=`echo $IFACE|sed "s/[^.]*\.0*//g"`
  ;;
  *.*)
    # Silently ignore interfaces which we do not (know how to) support
    [ -z "$IF_VLAN_RAW_DEVICE" ] && exit 0
    vconfig set_name_type DEV_PLUS_VID_NO_PAD
    VLANID=`echo $IFACE|sed "s/[^.]*\.0*//g"`
  ;;

  *)
    exit 0
  ;;
esac

if [ -n "$IF_VLAN_RAW_DEVICE" ] && [ ! -d /sys/class/net/$IFACE ]; then
    if [ ! -x /sbin/vconfig ]; then
        exit 0
    fi
    if ! ip link show dev "$IF_VLAN_RAW_DEVICE" > /dev/null; then
        echo "$IF_VLAN_RAW_DEVICE does not exist, unable to create $IFACE"
        exit 1
    fi
    if [ ! -e "/sys/class/net/$IFACE" ]; then
        ip link set up dev $IF_VLAN_RAW_DEVICE
        vconfig add $IF_VLAN_RAW_DEVICE $VLANID
    fi
fi

# This is not vlan specific, and should actually go somewhere else.
if [ -n "$IF_HW_MAC_ADDRESS" ]; then
    ip link set $IFACE address $IF_HW_MAC_ADDRESS
fi

if-post-down:

#!/bin/sh

# If IFACE is an automagic vlan interface (without the vlan-raw-device
# parameter) then let's try to discover the magic here.. Another way would be
# to just probe for the right device name in /proc/net/vlan

case "$IFACE" in
  # Ignore any alias (#272891)
  *:*)
    exit 0
  ;;
  eth*.0*|bond*.0*|wlan*.0*|em*.0*|p[0-9]*.0*|enp[0-9]*\.0*)
    IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/;s/\(bond[0-9][0-9]*\)\..*/\1/;s/\(wlan[0-9][0-9]*\)\..*/\1/;s/\(em[0-9][0-9]*\)\..*/\1/;s/\(p[0-9][0-9]*\(p[0-9][0-9]*\)\?\(_[0-9][0-9]*\)\?\)\..*/\1/"`
  ;;
  eth*.*|bond*.*|wlan*.*|em*.*|p[0-9]*.*|enp[0-9]*\.*)
    IF_VLAN_RAW_DEVICE=`echo $IFACE|sed "s/\(eth[0-9][0-9]*\)\..*/\1/;s/\(bond[0-9][0-9]*\)\..*/\1/;s/\(wlan[0-9][0-9]*\)\..*/\1/;s/\(em[0-9][0-9]*\)\..*/\1/;s/\(p[0-9][0-9]*\(p[0-9][0-9]*\)\?\(_[0-9][0-9]*\)\?\)\..*/\1/"`
  ;;
  # Test for vlan raw device (#196890, #292648)
  *)
    [ -z "$IF_VLAN_RAW_DEVICE" ] && exit 0
  ;;
esac
if [ ! -x /sbin/vconfig ]; then
    exit 0
fi

vconfig rem $IFACE

Revision history for this message
wybren (wybrenbuijs) wrote :

might not be clear the added code are the scripts working with my ethernet device

wybren (wybrenbuijs)
description: updated
summary: - ifup and ifdown dont work when ethernet device name does not meet
- regular conventions
+ ifup and ifdown dont work for vlan devices when raw ethernet device name
+ does not meet regular conventions
description: updated
affects: biosdevname (Ubuntu) → ifupdown (Ubuntu)
Revision history for this message
Launchpad Janitor (janitor) wrote : Re: ifup and ifdown dont work for vlan devices when raw ethernet device name does not meet regular conventions

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in ifupdown (Ubuntu):
status: New → Confirmed
summary: - ifup and ifdown dont work for vlan devices when raw ethernet device name
- does not meet regular conventions
+ ifup & ifdown don't work for vlan devices when raw device name is the
+ new "enp" convention
Revision history for this message
Andrei Coada (raziel.kernel) wrote :

As a workaround, you could add "vlan-raw-device", like this:

auto enp0s8
iface enp0s8 inet manual

auto enp0s8.7
iface enp0s8.7 inet static
  vlan-raw-device enp0s8
  address x.x.x.x/y

It's a pity that such a project doesn't pay more attention to basic features...

Revision history for this message
Andrei Coada (raziel.kernel) wrote :

In Debian 9 Stretch, works as it should.

Revision history for this message
Robie Basak (racb) wrote :

Ubuntu focuses on netplan with systemd-networkd or Network Manager, and ifupdown isn't really supported any more except for edge cases not supported by netplan. Since vlan is supported by netplan, I'm therefore marking this Won't Fix for the Ubuntu development release.

Note that ifupdown in Ubuntu barely differs from Debian now, so it seems likely to me that there would be no difference in behaviour from Debian here.

Changed in ifupdown (Ubuntu):
status: Confirmed → Won't Fix
Revision history for this message
L-reimann (l-reimann) wrote :

That's sad.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.