Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
openrc -- prioritize services in a runlevel?
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index Networking & Security
View previous topic :: View next topic  
Author Message
1clue
Advocate
Advocate


Joined: 05 Feb 2006
Posts: 2569

PostPosted: Sat Jan 16, 2016 4:46 am    Post subject: openrc -- prioritize services in a runlevel? Reply with quote

Hi,

I have a box with 7 nics. I've renamed the interfaces according to the physical location of the port on the box. The problem is, when I list ip addresses they show up out of order.

I'm setting this box up as a VM host which will contain 2 firewalls of different operating systems and an IPS and VPN, so I have each NIC attached to a bridge and a tap.

ip address list | grep -v '^ ' | wgetpaste is here: https://bpaste.net/show/6595315b12d4

I'd like to show in this order:

  1. lo
  2. cnet0
  3. lan0-lan6 (in numerical order)
  4. tap0-tap6 (in numerical order)
  5. br0-br6 (in numerical order)


The lan interfaces show up in the same order they did by default, but the names are not intuitive, they're using enp4s0, enp0s20f0-3, enp5s0f0-1. I think it's listing them in order of the PCI bus being scanned during boot.

Is there a way to get them to show up in my preferred order?

Thanks.
Back to top
View user's profile Send private message
NeddySeagoon
Administrator
Administrator


Joined: 05 Jul 2003
Posts: 54237
Location: 56N 3W

PostPosted: Sat Jan 16, 2016 11:55 am    Post subject: Reply with quote

1clue,

Code:
ip address list | grep -v '^ ' | sort
helps a bit but that's lexical order.

You can tell udev not to apply 'persistent' device names like enp4s0, enp0s20f0-3 and so on.
You can even assign MAC address based interface names of your own choosing, you need to write udev rules.
That's probably safer that using kernel assigned names, which are allocated in interface discovery order.
There is supposed to be a race condition that makes kernel assigned names non deterministic. That might be an issue with seven NICs

In the good old days, udev used to to do MAC based interface names by default.
_________________
Regards,

NeddySeagoon

Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail.
Back to top
View user's profile Send private message
khayyam
Watchman
Watchman


Joined: 07 Jun 2012
Posts: 6227
Location: Room 101

PostPosted: Sat Jan 16, 2016 1:49 pm    Post subject: Re: openrc -- prioritize services in a runlevel? Reply with quote

1clue wrote:
I'd like to show in this order:
  1. lo
  2. cnet0
  3. lan0-lan6 (in numerical order)
  4. tap0-tap6 (in numerical order)
  5. br0-br6 (in numerical order)
[...] Is there a way to get them to show up in my preferred order?

1clue ... if I understand correctly, you mean start in a certain order? If so then see the 'rc_foo_after' example in /etc/rc.conf ... so, eg:

/etc/rc.conf:
rc_net_lan0_after="net.cnet0"
rc_net_lan1_after="net.lan0"
rc_net_lan2_after="net.lan1"

... untested, but that, along with 'before', 'need', etc, is the method.

best ... khay
Back to top
View user's profile Send private message
1clue
Advocate
Advocate


Joined: 05 Feb 2006
Posts: 2569

PostPosted: Sat Jan 16, 2016 4:49 pm    Post subject: Reply with quote

Guys,

I mean that I want to change the order they're listed in, and sort won't work because all the entries are multi-line.


I've already renamed the interfaces according to the physical order on the board. Both the old ethN and the persistent enp* names are scrambled with respect to physical order on the board.

I can't do the initialization order because different custom runlevels will have different sets of nics enabled.

I suspect what I'm trying for won't happen.

Thanks.
Back to top
View user's profile Send private message
khayyam
Watchman
Watchman


Joined: 07 Jun 2012
Posts: 6227
Location: Room 101

PostPosted: Sat Jan 16, 2016 7:52 pm    Post subject: Reply with quote

1clue wrote:
I mean that I want to change the order they're listed in, and sort won't work because all the entries are multi-line.

1clue ... in which case I don't understand the subject line: "openrc -- prioritize services in a runlevel".

Quote:
I can't do the initialization order because different custom runlevels will have different sets of nics enabled.

You can using /etc/conf.d/net.{iface}.{runlevel} ... but I'm really not sure what it is your asking.

best ... khay
Back to top
View user's profile Send private message
Cyker
Veteran
Veteran


Joined: 15 Jun 2006
Posts: 1746

PostPosted: Sun Jan 17, 2016 7:44 pm    Post subject: Reply with quote

Sorry, trying to clarify what you mean; Are you saying everything is right (Names, IP addresses etc), just the order they appear when you list them is wrong?
Back to top
View user's profile Send private message
1clue
Advocate
Advocate


Joined: 05 Feb 2006
Posts: 2569

PostPosted: Sun Jan 17, 2016 10:27 pm    Post subject: Reply with quote

@Cyker,

Yes.

I realize there's probably no way to convince the system to rearrange the default listing order, so it's a dead end.


  1. The persistent interface names were indecipherable. Past tense.
  2. The old eth* network names were in random physical order on the board (meaning looking at the back of the computer, they hopped around. Past tense.
  3. I renamed the interfaces to lan0-lan6 and cnet0 (which is a maintenance-only nic by my choice, will not have Internet access.)
  4. I'm investigating a way to sort the interfaces with multi-line output, so that IP addresses and such follow the nic correctly.


I'm fine with writing a script to do this, just gotta have time to do it.

Thanks.
Back to top
View user's profile Send private message
1clue
Advocate
Advocate


Joined: 05 Feb 2006
Posts: 2569

PostPosted: Mon Jan 18, 2016 8:20 pm    Post subject: Reply with quote

In case anyone's interested this is my solution.

It's a bit of a hack but it works for my purposes. The 'iplist' script could be replaced with 'ip address list'

Code:

# Collect interfaces in an array.  'lo' will be first so we exclude it here.
readarray -t NOLO <<< `ip link list | grep '^[0-9]*:' | sed 's/^[0-9]*: \([^:@]*\)..*/\1/'\ | grep -v '^lo$' | sort`

# iplist is a scripted pipe which sanitizes public IP addresses for use on forums, and hilights inet and inet6.
echo "`iplist lo`"
I=2
for nic in ${NOLO[@]}
do
   # sanitize and renumber the interface as we print it
   echo "`iplist $nic` | sed 's/^[0-9]*/$I/'"
   ((I++))
done
Back to top
View user's profile Send private message
khayyam
Watchman
Watchman


Joined: 07 Jun 2012
Posts: 6227
Location: Room 101

PostPosted: Mon Jan 18, 2016 11:10 pm    Post subject: Reply with quote

1clue ... I see, by "list" you mean the output of 'ip' ... a few possible improvements:

Code:
#!/bin/bash

readarray -t NOLO <<< $(ip link show | awk '!/^1/&&/^[0-9]/{gsub(/:/,"") ; print $2}' | sort)

ip link show lo

i=2
for nic in ${NOLO[@]} ; do
    ip link show $nic | sed "s/^[0-9]/$i/"
    ((i++))
done

BTW, I'm supprised yours works with single quotes because sed will treat '$I' literally.

best ... khay
Back to top
View user's profile Send private message
1clue
Advocate
Advocate


Joined: 05 Feb 2006
Posts: 2569

PostPosted: Mon Jan 18, 2016 11:40 pm    Post subject: Reply with quote

Khayyam,

Sed doesn't see $I. Bash does. Bash sees the outer double quote and performs its substitutions, then passing the value to sed.

Interesting changes, I'll look closer.

Thanks.
Back to top
View user's profile Send private message
khayyam
Watchman
Watchman


Joined: 07 Jun 2012
Posts: 6227
Location: Room 101

PostPosted: Tue Jan 19, 2016 1:47 am    Post subject: Reply with quote

1clue wrote:
Sed doesn't see $I. Bash does. Bash sees the outer double quote and performs its substitutions, then passing the value to sed.

1clue ... that is not the case ...

Code:
$ var=foo ; echo "$(echo ba | sed 's/ba/$var/')"
$var
$ var=foo ; echo "$(echo ba | sed "s/ba/$var/")"
foo

1clue wrote:
Interesting changes, I'll look closer. Thanks.

You're welcome & best ... khay
Back to top
View user's profile Send private message
1clue
Advocate
Advocate


Joined: 05 Feb 2006
Posts: 2569

PostPosted: Tue Jan 19, 2016 4:56 am    Post subject: Reply with quote

Khayyam,

I posted a working script. I've been doing it that way for more than a decade.

You can explain it some other way if you want. Let me know if you figure it out.
Back to top
View user's profile Send private message
khayyam
Watchman
Watchman


Joined: 07 Jun 2012
Posts: 6227
Location: Room 101

PostPosted: Tue Jan 19, 2016 5:52 am    Post subject: Reply with quote

1clue wrote:
I posted a working script. I've been doing it that way for more than a decade. You can explain it some other way if you want. Let me know if you figure it out.

1clue ... ok, well, here is your script exactly as posted, the only change made is substituing 'iplist' for 'ip address list'.

Code:
readarray -t NOLO <<< `ip link list | grep '^[0-9]*:' | sed 's/^[0-9]*: \([^:@]*\)..*/\1/'\ | grep -v '^lo$' | sort
 
echo "`ip address list lo`"
I=2
for nic in ${NOLO[@]} ; do
   echo "`ip address list $nic` | sed 's/^[0-9]*/$I/'"
   ((I++))
done

... and here the output of 'bash ./script'

Code:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
8: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:01:41:27:44:c6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.14/24 brd 192.168.2.255 scope global wlan0
       valid_lft forever preferred_lft forever | sed 's/^[0-9]*/2/'

Let me know when you're ready to accept valid criticism ...

best ... khay
Back to top
View user's profile Send private message
1clue
Advocate
Advocate


Joined: 05 Feb 2006
Posts: 2569

PostPosted: Tue Jan 19, 2016 7:03 am    Post subject: Reply with quote

You're right. I must have been pretty tired.

My inner script, iplist, shows the interfaces numbered correctly, my outer script (the one I showed) shows the interfaces in order but with wrong numbers. I didn't notice the inconsistency. I was going off the idea that:
Code:

X="It's a wonderful world!"
echo "X is '$X'"

prints out
Code:
X is 'It's a wonderful world!'


Corrected script:
Code:

#!/bin/bash
function scrub {
        ip address list $1 | sed 's/my:ipv6:prefix/ea7:dead:beef/g'
}

function colorize {
        egrep --color '^|inet|inet6|ea7:dead:beef'
}

readarray -t NOLO <<< `ip link list | grep '^[0-9]*:' | sed 's/^[0-9]*: \([^:@]*\)..*/\1/'\ | grep -v '^lo$' | sort`

LOLO=('lo')

scrub lo | colorize
I=2
for nic in ${NOLO[@]}
do
        scrub $nic | sed "s/^[0-9][0-9]*/$I/" | colorize
        ((I++))
done


Corrected script output:
Code:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
2: br0@NONE: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default
    link/ether 0c:c4:7a:16:8d:7e brd ff:ff:ff:ff:ff:ff
3: br1@NONE: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default
    link/ether 0c:c4:7a:16:8d:7f brd ff:ff:ff:ff:ff:ff
4: br2@NONE: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 0c:c4:7a:16:a5:ca brd ff:ff:ff:ff:ff:ff
5: br3@NONE: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default
    link/ether 0c:c4:7a:16:a5:cb brd ff:ff:ff:ff:ff:ff
6: br4@NONE: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default
    link/ether 0c:c4:7a:16:a5:c8 brd ff:ff:ff:ff:ff:ff
7: br5@NONE: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> mtu 1500 qdisc noqueue state LOWERLAYERDOWN group default
    link/ether 0c:c4:7a:16:a5:c9 brd ff:ff:ff:ff:ff:ff
8: cnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 0c:c4:7a:16:a6:7e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.253/24 brd 192.168.1.255 scope global cnet0
       valid_lft forever preferred_lft forever
    inet6 ea7:dead:beef:6fc:ec4:7aff:fe16:a67e/64 scope global mngtmpaddr dynamic
       valid_lft 2539088sec preferred_lft 551888sec
    inet6 fe80::ec4:7aff:fe16:a67e/64 scope link
       valid_lft forever preferred_lft forever
9: lan0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq master br0 state DOWN group default qlen 1000
    link/ether 0c:c4:7a:16:8d:7e brd ff:ff:ff:ff:ff:ff
10: lan1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq master br1 state DOWN group default qlen 1000
    link/ether 0c:c4:7a:16:8d:7f brd ff:ff:ff:ff:ff:ff
11: lan2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br2 state UP group default qlen 1000
    link/ether 0c:c4:7a:16:a5:ca brd ff:ff:ff:ff:ff:ff
12: lan3: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq master br3 state DOWN group default qlen 1000
    link/ether 0c:c4:7a:16:a5:cb brd ff:ff:ff:ff:ff:ff
13: lan4: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq master br4 state DOWN group default qlen 1000
    link/ether 0c:c4:7a:16:a5:c8 brd ff:ff:ff:ff:ff:ff
14: lan5: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq master br5 state DOWN group default qlen 1000
    link/ether 0c:c4:7a:16:a5:c9 brd ff:ff:ff:ff:ff:ff
15: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default
    link/sit 0.0.0.0 brd 0.0.0.0
16: tap0@NONE: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br0 state LOWERLAYERDOWN group default qlen 500
    link/ether ce:17:45:12:1a:b5 brd ff:ff:ff:ff:ff:ff
17: tap1@NONE: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br1 state LOWERLAYERDOWN group default qlen 500
    link/ether 16:00:d6:49:44:1e brd ff:ff:ff:ff:ff:ff
18: tap2@NONE: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br2 state LOWERLAYERDOWN group default qlen 500
    link/ether 2a:c9:6f:00:79:a3 brd ff:ff:ff:ff:ff:ff
19: tap3@NONE: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br3 state LOWERLAYERDOWN group default qlen 500
    link/ether 8a:e9:eb:28:e2:37 brd ff:ff:ff:ff:ff:ff
20: tap4@NONE: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br4 state LOWERLAYERDOWN group default qlen 500
    link/ether 2a:64:ca:e0:b6:36 brd ff:ff:ff:ff:ff:ff
21: tap5@NONE: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast master br5 state LOWERLAYERDOWN group default qlen 500
    link/ether d2:ba:6e:9a:e7:34 brd ff:ff:ff:ff:ff:ff
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Networking & Security All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum