Re: [PATCH f17-branch] dracut: fix kickstarting with 'network --device=MAC'

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

 



On Thu, 2012-05-03 at 19:22 -0400, Will Woods wrote:
> parse-kickstart needs to check the device to see if it's a MAC and do
> the right thing when it is.
> ---
>  dracut/parse-kickstart |   34 +++++++++++++++++++++++++++++-----
>  1 files changed, 29 insertions(+), 5 deletions(-)
> 
> diff --git a/dracut/parse-kickstart b/dracut/parse-kickstart
> index e2e9223..6ef8701 100755
> --- a/dracut/parse-kickstart
> +++ b/dracut/parse-kickstart
> @@ -135,11 +135,32 @@ def init_logger():
>          pass
>      return logger
>  
> +def is_mac(addr):
> +    return addr and len(addr) == 17 and addr.count(":") == 5 # good enough
> +
> +def find_devname(mac):
> +    sysdir="/sys/class/net"
> +    for netif in os.listdir("/sys/class/net"):
> +        try:
> +            thismac = readfile("/sys/class/net/%s/address" % netif)
> +        except IOError:
> +            pass
> +        else:
> +            if thismac.lower() == mac.lower():
> +                return netif
Why do you define $sysdir and then use the "/sys/class/net" instead of
it?

> +
>  def ksnet_to_dracut(args, lineno, net, bootdev=False):
>      '''Translate the kickstart network data into dracut network data.'''
>      line = []
> -
>      ip=""
> +
> +    if is_mac(net.device): # this is a MAC - find the interface name
> +        mac = net.device
> +        net.device = find_devname(mac)
> +        if net.device is None:  # iface not active - pick a name for it
> +            net.device = "eth0" # we only get called once, so this is OK
> +            line.append("ifname=%s:%s" % (net.device, mac.lower()))
> +
>      # NOTE: dracut currently only does ipv4 *or* ipv6, so only one ip=arg..
>      if net.bootProto in (BOOTPROTO_DHCP, BOOTPROTO_BOOTP):
>          ip="dhcp"
> @@ -204,15 +225,18 @@ def readfile(f):
>  
>  def ksnet_to_ifcfg(net, filename=None):
>      '''Write an ifcfg file for the given kickstart network config'''
> -    if not net.device:
> +    dev = net.device
> +    if is_mac(dev):
> +        dev = find_devname(dev)
> +    if not dev:
>          return
>      ifcfg = dict()
>      if filename is None:
> -        filename = "/tmp/ifcfg/ifcfg-%s" % net.device
> +        filename = "/tmp/ifcfg/ifcfg-%s" % dev
>          if not os.path.isdir("/tmp/ifcfg"):
>              os.makedirs("/tmp/ifcfg")
> -    ifcfg['DEVICE'] = net.device
> -    ifcfg['HWADDR'] = readfile("/sys/class/net/%s/address" % net.device)
> +    ifcfg['DEVICE'] = dev
> +    ifcfg['HWADDR'] = readfile("/sys/class/net/%s/address" % dev)
>      ifcfg['UUID'] = readfile("/proc/sys/kernel/random/uuid")
>      ifcfg['ONBOOT'] = "yes" if net.onboot else "no"
>  

-- 
Vratislav Podzimek <vpodzime@xxxxxxxxxx>

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux