<html><head></head><body dir="auto" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><br><blockquote type="cite">On Oct 12, 2015, at 1:20, Andrei Borzenkov <arvidjaar@gmail.com> wrote:<br><br>On Mon, Oct 12, 2015 at 1:40 AM, Johannes Ernst<br><johannes.ernst@gmail.com> wrote:<br><br><blockquote type="cite">I guess I need to explain what I’m trying to do:<br><br>I want a single command to reconfigure networking for different situations<br>that a device running UBOS [2] might encounter. Example syntax:<br><br><blockquote type="cite">ubos-admin setnetconfig client<br></blockquote># sets up DHCP client on all network interfaces, advertises http and https<br>sites on device via Avahi, runs firewall<br><blockquote type="cite">ubos-admin setnetconfig static<br></blockquote># allocates static IP addresses on all network interfaces, advertises http<br>and https sites via Avahi, runs firewall<br><blockquote type="cite">ubos-admin setnetconfig gateway<br></blockquote># sets up DHCP client on first Ethernet interface (WAN), allocates static IP<br>addresses to all other interfaces (LAN), advertises via Avahi but only on<br>LAN, runs firewall and NAT<br><blockquote type="cite">ubos-admin setnetconfig cloud<br></blockquote># sets up DHCP client on all network interfaces, no Avahi, runs firewall,<br>also runs cloud-init<br><br>The idea is to take drudgery and needed competence out of network<br>configuration and make it “fool proof” by identifying the situation on a<br>high level (“this is my home gateway”, “this is just some device on my<br>network” etc) and let software make it so.<br><br>My implementation of ‘ubos-admin setnetconfig XXX’ basically goes like this:<br><br>1. Generate/update configuration files for the configuration XXX<br>2. systemctl start ubos-networking-XXX.service (where XXX=client, static,<br>gateway, …), with all the ubos-networking-XXX.service files declaring a<br>Conflict with all others, so systemd will only run one of them at a time.<br><br>To get back to the problem on the beginning of the thread, let’s take an<br>example:<br><br>ubos-networking-client.service depends on systemd-networkd.service, with a<br>config file like this:<br><br>[Match]<br>Name=*<br>[Network]<br>DHCP=ipv4<br><br>ubos-networking-gateway.service depends on systemd-networkd.service, with a<br>config file like this:<br><br>[Match]<br>Name=enp0s3<br>[Network]<br>DHCP=ipv4<br>[Match]<br>Name=*<br>[Network]<br>Address=0.0.0.0/16<br><br>Now, if the current state is “client” and the user executes “ubos-admin<br>setnetconfig gateway”, after updating the config files, the following things<br>need to occur:<br>1. ubos-networking-client.service needs to be stopped<br>2. ubos-networking-gateway.service needs to be started<br></blockquote><br>I still fail to see how ubos-networking-client.service or<br>ubos-networking-gateway.service come in play here. You changed<br>networkd configuration and need restart/reload networkd. That can be<br>done directly by ubos-admin. What is the purpose of other services?<br></blockquote><br>Just trying to make systemd do most of the work … the dependency management with Conflicts= and PropagateReload= does almost everything I need; was attempting to find out whether I overlooked something that would do the rest, but apparently not. That’s okay though :-)<br><br>Thanks for your help.<br><br><blockquote type="cite"><blockquote type="cite">3. systemd-networkd.service needs to be reloaded, because its configuration<br>has changed.<br><br>So I was wondering whether there is a mechanism to have systemd reload<br>systemd-networkd, in response to an event such as<br>ubos-networking-client.service being stopped, or<br>ubos-networking-gateway.service being started.<br><br>Does this make sense?<br><br></blockquote><br>Not really :)<br></blockquote><br></body></html>