<div dir="ltr"><div>Hi,</div><div><br></div><div>I'm on embedded imx8 mm platform and trying to order services such that ptp4l (LinuxPTP) is started after a bond is created between two DSA network interfaces on my Microchip Ethernet Switch.</div><div><br></div><div>No matter what I try with BindsTo, Wants=, Requires=, Before=, After=, when the board boots and I watch the console output I see systemd start the ptp4l service before the bond is actually up which results in ptp4l failing to start.</div><div><br></div><div>I've band-aided the issue by putting a Restart=yes and RestartSec=1 in the service but feel like this is a hack.</div><div><br></div><div>As you can see below, the bond is in the process of coming up (you can see enslaving messages regarding lan1 and lan2) but it is not all the way up until after the login prompt ... at which point the service starting ptp4l (the Sync Microchip PHC with PTP Grand Master  Clock msg) already failed.  From timestamps it looks like it's taking 4 seconds or so for bond to come up:<br></div><div><br></div><div><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">[  OK  ] Started </span><span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Network Service</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>         Starting <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Network Name Resolution</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">...
</span><br>[  OK  ] Started <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Rauc Good-marking Service</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[    4.098258] imx-sdma 302c0000.dma-controller: firmware found.
<br>[    4.104259] imx-sdma 302c0000.dma-controller: loaded firmware 4.5
<br>[  OK  ] Started <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Network Name Resolution</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">[    4.135108] imx-sdma 302b0000.dma-controller: firmware found.
</span><br>.
<br>[  OK  ] Reached targe[    4.146220] imx-sdma 30bd0000.dma-controller: firmware found.
<br>t <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Network</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[  OK  ] Reached targe[    4.159060] caam-snvs 30370000.caam-snvs: violation handlers armed - init state
<br>t <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Network is Online</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[  OK  ] Reached target <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Host and Network Name Lookups</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>         Starting <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Avahi mDNS/DNS-SD Stack</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">...
</span><br>         Starting <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Enable ksz9567</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">...
</span><br>         Starting <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">The NGINX HTTP and reverse proxy server</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">...
</span><br>[  OK  ] Started <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Enable ksz9567</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[  OK  ] Started <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Avahi mDNS/DNS-SD Stack</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[  OK  ] Found device <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">/sys/subsystem/net/devices/lan2</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[  OK  ] Started <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">The NGINX HTTP and reverse proxy server</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[    4.390005] ksz9477-switch 0-005f lan2: configuring for phy/gmii link mode
<br>[    4.402902] bond1: (slave lan2): Enslaving as a backup interface with a down link
<br>[  OK  ] Found device [    4.544105] ksz9477-switch 0-005f lan1: configuring for phy/gmii link mode
<br><span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">/sys/subsystem/net/devices/lan1</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[    4.555298] bond1: (slave lan1): Enslaving as a backup interface with a down link
<br>[  OK  ] Found device <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">/sys/subsystem/net/devices/bond1</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>         Starting <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Save/Restore Sound Card State</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">...
</span><br>[  OK  ] Started <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Save/Restore Sound Card State</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[  OK  ] Reached target <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Sound Card</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[    6.714002] random: crng init done
<br>[    6.717436] random: 7 urandom warning(s) missed due to ratelimiting
<br>[  OK  ] Started <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Load/Save Random Seed</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[  OK  ] Started <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">System Logger Daemon "default" instance</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[  OK  ] Reached target <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Multi-User System</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>         Starting <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Sync Microchip PH…with PTP Grand Master Clock</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">...
</span><br>         Starting <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Update UTMP about System Runlevel Changes</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">...
</span><br>[<span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">FAILED</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">] Failed to start </span><span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Sync Micro…C with PTP Grand Master Clock</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>See 'systemctl status ptp4l.service' for details.
<br>[  OK  ] Started <span style="font-weight:bold;color:rgb(0,0,0);background-color:rgb(255,255,255)">Update UTMP about System Runlevel Changes</span><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">.
</span><br>[    7.659157] ksz9477-switch 0-005f lan1: Link is Up - 1Gbps/Full - flow control rx/tx
<br>
<br>Poky (Yocto Project Reference Distro) 3.1.7 imx8mmevk ttymxc1
<br>
<br>imx8mmevk login: [    8.936988] bond1: (slave lan1): link status up, enabling it in 0 ms
<br>[    8.943510] bond1: (slave lan1): link status definitely up, 1000 Mbps full duplex
<br>[    8.951068] bond1: (slave lan1): making interface the new active one
<br>[    8.962012] device eth0 entered promiscuous mode
<br>[    8.966708] audit: type=1700 audit(1600598644.739:2): dev=eth0 prom=256 old_prom=0 auid=4294967295 uid=0 gid=0 ses=4294967295
<br>[    8.966908] bond1: active interface up!
<br>[    8.985999] IPv6: ADDRCONF(NETDEV_CHANGE): bond1: link becomes ready<br></span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace">My ptp4l.service looks like:</span></div><div><span style="font-family:monospace"><br></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">cat ptp4l.service  </span><br>[Unit]
<br>Description=Sync Microchip PHC with PTP Grand Master Clock
<br>Requires=network-online.target multi-user.target
<br>BindsTo=sys-subsystem-net-devices-bond1.device sys-subsystem-net-devices-lan1.device sys-subsystem-net-devices-lan2.device multi-user.target
<br>After=sys-subsystem-net-devices-bond1.device sys-subsystem-net-devices-lan1.device sys-subsystem-net-devices-lan2.device multi-user.target
<br>
<br>[Service]
<br>Type=exec
<br>#NotifyAccess=all
<br>ExecStart=/usr/bin/ptp4l -f /etc/linuxptp/ptp4l.conf_e2e_one_step_g8275.2 -s -i bond1
<br>Restart=on-failure
<br>RestartSec=1
<br>
<br>[Install]
<br>WantedBy=multi-user.target<br></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><br></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace">In my .network file I specify that bond1 is required to for being "online":</span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><br></span></span></div><span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">root@imx8mmevk:/etc/systemd/network# cat 10-bond1.network  </span><br>[Match]
<br>Name=bond1
<br>
<br>[Network]
<br>#BindCarrier=eth0
<br>DHCP=yes
<br>#Address=<a href="http://192.168.0.4/24">192.168.0.4/24</a>
<br>
<br>[Link]
<br></span><div><span style="font-family:monospace">RequiredForOnline=yes<br></span></div><div><br></div><div>In .system file I tried all I know to ensure the required interfaces were created before starting ptp4l in attempt to give bonding enough time to finish but binding to things like <span style="font-family:monospace"><span style="font-family:monospace">sys-subsystem-net-devices-bond1.device wasn't enough.</span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><br></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace">Is it also possible to use carrier state in .service file?</span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><br></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace">I see <span style="font-family:monospace"><span style="color:rgb(0,0,0);background-color:rgb(255,255,255)">sys/devices/virtual/net/bond1/carrier but not sure how to only attempt to start my ptp4l service after carrier state is "1".</span></span></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><span style="font-family:monospace"><br></span></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><span style="font-family:monospace">I welcome your ideas and suggestions on how to start a service after a bond interface is really up.</span></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><span style="font-family:monospace"><br></span></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><span style="font-family:monospace">Regards,</span></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><span style="font-family:monospace"><br></span></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><span style="font-family:monospace">Brian</span></span></span></div><div><span style="font-family:monospace"><span style="font-family:monospace"><span style="font-family:monospace"><br></span></span></span></div><div><span style="font-family:monospace"></span></div><div><span style="font-family:monospace"></span></div></div>