[systemd-devel] Getting delegated IPv6 prefix from systemd-networkd

2022-10-19 Thread Ian Pilcher

I've managed to get systemd-networkd to request and IPv6 prefix from my
ISP, and I can see it the journal.  Now I need to programmatically
retrieve it, so that my home-grown scripts can set up the various
routes, address, firewall rules, etc.

(I know that systemd-networkd can allocate subnets from the delegated
prefix to local interfaces, but that's not what I need to do in this
case.)

Is there an API of some sort that my scripts can use?  A file that I can
monitor/parse?  A command that I can run?

My searches thus far are coming up disturbingly empty ...

--

Google  Where SkyNet meets Idiocracy



Re: [systemd-devel] [EXT] Re: [systemd‑devel] Finding network interface name in different distro

2022-10-19 Thread Greg Oliver
On Wed, Oct 19, 2022 at 5:27 AM Ulrich Windl <
ulrich.wi...@rz.uni-regensburg.de> wrote:

> >>> Lennart Poettering  schrieb am 19.10.2022 um
> 12:21
> in
> Nachricht :
>
> [...]
> > Uninstall biosdevname. It's 2022.
>
> Make Lennart happy: Uninstall everything except systemd ;-)
>
> (Sorry, I couldn't resist)
>

That made me laugh this morning - thanks!  Although I like systemd, it was
funny :)



> >
> > It's a bit contradictory to install it explicitly and then turn it off
> > via biosdevname=0...
> >
> > Lennart
> >
> > ‑‑
> > Lennart Poettering, Berlin
>
>
>
>


[systemd-devel] Antw: [EXT] Re: [systemd‑devel] Finding network interface name in different distro

2022-10-19 Thread Ulrich Windl
>>> Lennart Poettering  schrieb am 19.10.2022 um 12:21
in
Nachricht :

[...]
> Uninstall biosdevname. It's 2022.

Make Lennart happy: Uninstall everything except systemd ;-)

(Sorry, I couldn't resist)

> 
> It's a bit contradictory to install it explicitly and then turn it off
> via biosdevname=0...
> 
> Lennart
> 
> ‑‑
> Lennart Poettering, Berlin





Re: [systemd-devel] Antw: [EXT] Finding network interface name in different distro

2022-10-19 Thread Lennart Poettering
On Di, 18.10.22 16:03, Ulrich Windl (ulrich.wi...@rz.uni-regensburg.de) wrote:

> > When changing distro or distro major versions, network interfaces'
> > names sometimes change.
> > For example on some Dell server running CentOS 7 the interface is
> > named em1 and running Alma 8 it's eno1.
>
> Wasn't the idea of "BIOS device name" that the interface's name
> matches the label printed on the chassis?

Yes, but not all devices have the necessary firmware
metadata.

Lennart

--
Lennart Poettering, Berlin


Re: [systemd-devel] Finding network interface name in different distro

2022-10-19 Thread Lennart Poettering
On Di, 18.10.22 09:10, Greg Oliver (oliver.g...@gmail.com) wrote:

> On Fri, Oct 14, 2022 at 7:42 PM Etienne Champetier <
> champetier.etie...@gmail.com> wrote:
>
> > Hi All,
> >
> > When changing distro or distro major versions, network interfaces'
> > names sometimes change.
> > For example on some Dell server running CentOS 7 the interface is
> > named em1 and running Alma 8 it's eno1.
> >
> > I'm looking for a way to find the new interface name in advance
> > without booting the new OS.
> > One way I found is to unpack the initramfs, mount bind /sys, chroot,
> > and then run
> > udevadm test-builtin net_id /sys/class/net/INTF
> > Problem is that it doesn't give me right away the name according to
> > the NamePolicy in 99-default.link
> >
> > Is there a command to get the future name right away ?
> >
>
> I do not like the biosdevname introduced stuff for machines with 4 or less
> interfaces, so another option is to disable the auto-naming:
>
> biosdevname=0 net.ifnames=0

biosdevname is pretty much obsoleted by systemd's own network naming.

Usually, if you have more than a single interface you want the
systemd naming though because otherwise probing order is usually
undefined and thus your "eth0" might sometimes be "eth1" and vice
versa...

> on the kernel cmdline will do it.  Also, the biosdevname package needs to
> be installed.  This will yield the traditional ethX, wlanX, etc interface
> names that are ordered by default the way they used to be.  Of course, this
> does not scale well when you have hotplug devices with many pci ports and
> ethernet cards if you ever need to replace one card.  Just my $.02

Uninstall biosdevname. It's 2022.

It's a bit contradictory to install it explicitly and then turn it off
via biosdevname=0...

Lennart

--
Lennart Poettering, Berlin


Re: [systemd-devel] Finding network interface name in different distro

2022-10-19 Thread Lennart Poettering
On Di, 18.10.22 11:10, Etienne Champetier (champetier.etie...@gmail.com) wrote:

> > > I think I found what I need:
> > > bash-4.4# udevadm test /sys/class/net/em1 2>/dev/null | awk  -F=
> > > '/ID_NET_NAME=/ {print $2}'
> > > eno1
> >
> > The name depends on local and distro policy, systemd version,
> > kernel version and selected network naming scheme level (see
> > systemd.net-naming-scheme man page)
>
> When running in a chroot of the new system, only the kernel varies,
> we have the right policy, naming scheme level and systemd version.
> For "classic" amd64 servers does the kernel really have an impact on
> naming ?

As kernels are improved and developed they tend to expose more sysfs
attributes on devices, that the udev interface naming logic might pick
up then.

> > Use "udevadm info /sys/class/net/" to query the udev db for
> > automatically generated names.
> >
> > Relevant udev props to look out for are:
> >
> > ID_NET_NAME_FROM_DATABASE
> > ID_NET_NAME_ONBOARD
> > ID_NET_NAME_SLOT
> > ID_NET_NAME_PATH
> > ID_NET_NAME_MAC
> >
> > These using hwdb info, firmware info, slot info, device path info or
> > MAC addresss for naming.
>
> What I'm looking for is I think ID_NET_NAME,
> ie I don't want to read the policy myself and then go find the right
> ID_NET_NAME_*
> sadly ID_NET_NAME is not always present, so I don't have a good
> solution for now.
> (I'm assuming policy kernel can be ignored on amd64 servers, maybe
> I'm wrong)

udev will rename interfaces it finds based on the data in
ID_NET_NAME. I the ID_NET_NAME prop is never set, then udev won't
rename the interface.

Lennart

--
Lennart Poettering, Berlin


Re: [systemd-devel] Antw: Re: [EXT] Finding network interface name in different distro

2022-10-19 Thread Mantas Mikulėnas
On Wed, Oct 19, 2022 at 11:46 AM Ulrich Windl <
ulrich.wi...@rz.uni-regensburg.de> wrote:

> Also I think using "p" twice (pp) was a bad choice.
>

Sure, but that's not systemd format – em1 & p4p1 is the "biosdevname"
format that was before systemd, only eno1 & ens4f0np1 is actual systemd
naming.

-- 
Mantas Mikulėnas


[systemd-devel] Antw: Re: [systemd‑devel] [EXT] Finding network interface name in different distro

2022-10-19 Thread Ulrich Windl
>>> Brian Reichert  schrieb am 18.10.2022 um 19:39 in
Nachricht <20221018173901.ga5...@numachi.com>:
>> > :
>> > > Hi All,
>> > >
>> > > When changing distro or distro major versions, network interfaces'
>> > > names sometimes change.
>> > > For example on some Dell server running CentOS 7 the interface is
>> > > named em1 and running Alma 8 it's eno1.
> 
> This doesn't answer the OP's question, but my trick for enumerating
> network devices was to use something like:
> 
>   egrep ‑v ‑e "lo:" /proc/net/dev | grep ':' | cut ‑d: ‑f

Trying your command here I get an error ("cut: option requires an argument --
'f'").
I also tried an awk-variant that even seems to perform faster:

# time awk '$1 ~ /:$/ { sub(":", "", $1); if ($1 != "lo") print $1 }'
/proc/net/dev
em1
em2
bond1
p4p1
bond0
p4p2

real0m0.001s
user0m0.001s
sys 0m0.000s
# time egrep -v -e "lo:" /proc/net/dev | grep ':' | cut -d: -f1
   em1
   em2
 bond1
  p4p1
 bond0
  p4p2

real0m0.002s
user0m0.002s
sys 0m0.002s

> 
> to get a list of non‑loopback interfaces.
> 
> In my case, I went on to bury everything under a single bond0
> interface, so a) no software had to guess a NIC name, and b) in the
> case of physical cabling, they would all Just Work.
> 
> This was work done in my kickstart file, and worked through many
> releases of Red Hat and CentOS.
> 
> I adopted this tactic as Dell kept switching up how they would
> probe/name devices...
> 
> ‑‑ 
> Brian Reichert
> BSD admin/developer at large  





[systemd-devel] Antw: Re: [EXT] Finding network interface name in different distro

2022-10-19 Thread Ulrich Windl
>>> Etienne Champetier  schrieb am 18.10.2022 um
17:15 in Nachricht
:
> Le mar. 18 oct. 2022 à 10:04, Ulrich Windl
>  a écrit :
>>
>> >>> Etienne Champetier  schrieb am 15.10.2022
um
>> 02:41 in Nachricht
>> :
>> > Hi All,
>> >
>> > When changing distro or distro major versions, network interfaces'
>> > names sometimes change.
>> > For example on some Dell server running CentOS 7 the interface is
>> > named em1 and running Alma 8 it's eno1.
>>
>> Wasn't the idea of "BIOS device name" that the interface's name matches the

> label printed on the chassis?
> 
> Some HPE Gen10 servers have the first port as eno5, on some recent
> Dell servers the first port is eno8303.
> I would love to use eno1 everywhere, but it's a mess.

A Dell PowerEdge R7415 (from 2018 or so) uses eno1 and eno2 for the embedded
NIC, ens4f0np0 and ens4f1np1 for add-on 10Gb NICs (as well as ens5f0np0 and
ens5f1np1 for an additional card). In Linux (SLES 15) the names became em1,
em2, p4p1, p4p2, p5p1, p5p2.
I'm surprised about the "eno8303".

Also I think using "p" twice (pp) was a bad choice.

> 
>> > I'm looking for a way to find the new interface name in advance
>> > without booting the new OS.
>> > One way I found is to unpack the initramfs, mount bind /sys, chroot,
>> > and then run
>> > udevadm test-builtin net_id /sys/class/net/INTF
>> > Problem is that it doesn't give me right away the name according to
>> > the NamePolicy in 99-default.link
>> >
>> > Is there a command to get the future name right away ?
>> >
>> > Thanks
>> > Etienne
>>
>>
>>
>>