[UPDATED:] Re: confusion on /sbin/ifconfig on F16

Paul Allen Newell pnewell at cs.cmu.edu
Wed May 23 05:31:57 UTC 2012


On 5/22/2012 9:38 PM, Ed Greshko wrote:
> I guess I really don't know what precisely is the problem you're having.
>
> Interface naming convention has been undergoing changes since, maybe, F14.
> Interfaces that were once called eth0 became em1 and other niceties.  I don't recall
> if the names changed on upgrades or only new installs.  Anyway, the changes didn't
> make my life miserable, so I've kind of ignored the changes.
>
> So, what is it that you are really after?  Do you just want a script, or series of
> commands, to return the IP address of a single, known interface?
>
> As in something like this?
>
> [egreshko at meimei net]$ /sbin/ifconfig p128p1 | grep 'inet ' | cut -d : -f 2 | awk '{
> print $1}'
> 192.168.0.18
>
> Maybe if you posted the output of commands on your system and asked questions based
> on the output it would make more sense....at least to me.
>

Ed:

Thanks for reply.

First problem is I think there is something wrong if "ip addr show" 
lists eth0 on x86_64 and em1 on i686. I know things are in transition, 
but I would expect that to be on a release by release, not sub-set of 
platform by platform as it makes scripts that work on one break on the 
other. I am trying to get some validation that I am not doing something 
wrong so I can submit as bug

Second problem is, given that, I can't figure out how to get "ip addr 
show" to work on both platforms. My fault for not including example as I 
was more focused on the possible bug and thinking I just needed to kick 
the ip command a few more times.

On x86_64, "ip addr show" gives:
+++

1: lo:<LOOPBACK,UP,LOWER_UP>  mtu 16436 qdisc noqueue state UNKNOWN
     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8 scope host lo
     inet6 ::1/128 scope host
        valid_lft forever preferred_lft forever
2: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link/ether 00:1e:68:26:b1:ff brd ff:ff:ff:ff:ff:ff
     inet 192.168.2.13/24 brd 192.168.2.255 scope global eth0
     inet6 fe80::21e:68ff:fe26:b1ff/64 scope link
        valid_lft forever preferred_lft forever
3: wlan0:<BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc mq state UP qlen 1000
     link/ether 00:1f:3a:c1:1c:79 brd ff:ff:ff:ff:ff:ff
     inet 192.168.2.103/24 brd 192.168.2.255 scope global wlan0
     inet6 fe80::21f:3aff:fec1:1c79/64 scope link
        valid_lft forever preferred_lft forever
+++

On i686, it gives:
+++
1: lo:<LOOPBACK,UP,LOWER_UP>  mtu 16436 qdisc noqueue state UNKNOWN
     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     inet 127.0.0.1/8 scope host lo
     inet6 ::1/128 scope host
        valid_lft forever preferred_lft forever
2: em1:<BROADCAST,MULTICAST,UP,LOWER_UP>  mtu 1500 qdisc pfifo_fast state UP qlen 1000
     link/ether 00:e0:81:00:4c:b0 brd ff:ff:ff:ff:ff:ff
     inet 192.168.2.10/24 brd 192.168.2.255 scope global em1
     inet6 fe80::2e0:81ff:fe00:4cb0/64 scope link
        valid_lft forever preferred_lft forever
+++

One uses eth0, the other em1.

I tried using the label option with a pattern, but can't figure out how to tell ip to show me any devices that match eth0 or em1. I figured out that I can tell it "label e*" but that feels like a hack since it opens me up to any future names changes that start with an e* without assures that there won't be two "e*" entries on a given machine.

So, I was able to hack up something in which:
+++
theUname=`uname -p`
theDeviceToCheck="eth0"
if [ ${theUname} != "x86_64" ]; then
     theDeviceToCheck="em1"
fi
theIpAddr=`/sbin/ip addr show ${theDeviceToCheck} | grep 'inet ' | awk '{ print $2}'
+++

SO, I am at least running (but with a groan at how)

I'd like a single command with no "if's" (ip or other) that give me 192.168.2.x (I can handle if it has "/24?) on the end.

Paul





More information about the users mailing list