nicole: Add default network configs for Tatlin

This adds VLAN4004 configuration to the nicole firmware image.
The IPv6 address will be chosen depending on the BMC position.

During the firmware upgrade the stored previous version of
`/etc/systemd/network/00-bmc-eth0.network` may prevent to start new
VLAN4004 interface.

This commit also adds a service which should fix this issue on the
first boot time after upgrade by adding necessary option to the
interface configuration file if it is not present yet.

Tested: BMC now has additional `eth0.4004` interface use static IPv6
        address and this address depend on BMC position.

(From meta-yadro rev: 83aa32ac997e6dc66cc5e2041a0a3cb723e950d9)

Change-Id: I5fc6663ddee67aafcfa9f2004083d8a4a528950f
Signed-off-by: Alexander Filippov <a.filippov@yadro.com>
Signed-off-by: Andrew Geissler <geissonator@yahoo.com>
diff --git a/meta-yadro/meta-nicole/recipes-phosphor/network/phosphor-network_%.bbappend b/meta-yadro/meta-nicole/recipes-phosphor/network/phosphor-network_%.bbappend
new file mode 100644
index 0000000..99d3031
--- /dev/null
+++ b/meta-yadro/meta-nicole/recipes-phosphor/network/phosphor-network_%.bbappend
@@ -0,0 +1 @@
+RDEPENDS_${PN}_append = " vlan-4004"
diff --git a/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/00-bmc-eth0.4004.0.network b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/00-bmc-eth0.4004.0.network
new file mode 100644
index 0000000..534cbe9
--- /dev/null
+++ b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/00-bmc-eth0.4004.0.network
@@ -0,0 +1,8 @@
+[Match]
+Name=eth0.4004
+KernelCommandLine=bmcposition=0
+[Network]
+LinkLocalAddressing=yes
+IPv6AcceptRA=true
+DHCP=no
+Address=fd59:4144:524f:5441:544c:494e:3:1/122
diff --git a/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/00-bmc-eth0.4004.1.network b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/00-bmc-eth0.4004.1.network
new file mode 100644
index 0000000..83a48ee
--- /dev/null
+++ b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/00-bmc-eth0.4004.1.network
@@ -0,0 +1,8 @@
+[Match]
+Name=eth0.4004
+KernelCommandLine=bmcposition=1
+[Network]
+LinkLocalAddressing=yes
+IPv6AcceptRA=true
+DHCP=no
+Address=fd59:4144:524f:5441:544c:494e:3:2/122
diff --git a/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/00-bmc-eth0.network b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/00-bmc-eth0.network
new file mode 100644
index 0000000..f7c6707
--- /dev/null
+++ b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/00-bmc-eth0.network
@@ -0,0 +1,9 @@
+[Match]
+Name=eth0
+[Network]
+VLAN=eth0.4004
+DHCP=true
+LinkLocalAddressing=yes
+IPv6AcceptRA=false
+[DHCP]
+ClientIdentifier=mac
diff --git a/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/eth0.4004.netdev b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/eth0.4004.netdev
new file mode 100644
index 0000000..e315f5e
--- /dev/null
+++ b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/eth0.4004.netdev
@@ -0,0 +1,5 @@
+[NetDev]
+Name=eth0.4004
+Kind=vlan
+[VLAN]
+Id=4004
diff --git a/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/setup-vlan4004.service b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/setup-vlan4004.service
new file mode 100644
index 0000000..8714624
--- /dev/null
+++ b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/setup-vlan4004.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=Setup VLAN 4004
+DefaultDependencies=no
+Conflicts=shutdown.target
+After=systemd-remount-fs.service
+Before=sysinit.target shutdown.target systemd-update-done.service
+ConditionNeedsUpdate=/etc
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+ExecStart=/usr/bin/setup-vlan4004.sh
+
+[Install]
+WantedBy=sysinit.target
diff --git a/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/setup-vlan4004.sh b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/setup-vlan4004.sh
new file mode 100755
index 0000000..1278769
--- /dev/null
+++ b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004/setup-vlan4004.sh
@@ -0,0 +1,8 @@
+#!/bin/sh -eu
+
+VLAN='VLAN=eth0.4004'
+ETH0_CFG='/etc/systemd/network/00-bmc-eth0.network'
+
+if ( ! grep -q "${VLAN}" ${ETH0_CFG} ); then
+    sed -i "/^\[Network\]$/a ${VLAN}" ${ETH0_CFG}
+fi
diff --git a/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004_1.0.bb b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004_1.0.bb
new file mode 100644
index 0000000..c7dcb3b
--- /dev/null
+++ b/meta-yadro/meta-nicole/recipes-phosphor/network/vlan-4004_1.0.bb
@@ -0,0 +1,40 @@
+SUMMARY = "Tatlin network configuration"
+DESCRIPTION = "This is default network configuration for the Tatlin's node."
+LICENSE = "Apache-2.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
+
+PR = "r1"
+
+inherit allarch
+inherit systemd
+
+RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_base-utils}"
+SYSTEMD_SERVICE_${PN} = "setup-vlan4004.service"
+
+S = "${WORKDIR}"
+SRC_URI = " \
+    file://00-bmc-eth0.4004.0.network \
+    file://00-bmc-eth0.4004.1.network \
+    file://00-bmc-eth0.network \
+    file://eth0.4004.netdev \
+    file://setup-vlan4004.service \
+    file://setup-vlan4004.sh \
+"
+
+do_install() {
+    mkdir -p ${D}${sysconfdir}/systemd/network
+    install -m 0644 eth0.4004.netdev 00-bmc-eth0.network \
+        00-bmc-eth0.4004.0.network 00-bmc-eth0.4004.1.network \
+        ${D}${sysconfdir}/systemd/network/
+    mkdir -p ${D}${bindir} ${D}${systemd_system_unitdir}
+    install setup-vlan4004.sh ${D}${bindir}/
+    install -m 0644 setup-vlan4004.service ${D}${systemd_system_unitdir}/
+}
+
+FILES_${PN} = " \
+    ${sysconfdir}/systemd/network/00-bmc-eth0.4004.0.network \
+    ${sysconfdir}/systemd/network/00-bmc-eth0.4004.1.network \
+    ${sysconfdir}/systemd/network/00-bmc-eth0.network \
+    ${sysconfdir}/systemd/network/eth0.4004.netdev \
+    ${bindir}/setup-vlan4004.sh \
+"