1SUMMARY = "Configures the gbmc bridge and filter rules"
2PR = "r1"
3LICENSE = "Apache-2.0"
4LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
5
6inherit systemd
7
8FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
9SRC_URI += " \
10  file://-bmc-gbmcbr.netdev \
11  file://-bmc-gbmcbr.network.in \
12  file://-bmc-gbmcbrdummy.netdev \
13  file://-bmc-gbmcbrdummy.network \
14  file://+-bmc-gbmcbrusb.network \
15  file://ipmi.service.in \
16  file://50-gbmc-br.rules \
17  file://gbmc-br-ula.sh \
18  file://gbmc-br-from-ra.sh \
19  file://gbmc-br-ensure-ra.sh \
20  file://gbmc-br-ensure-ra.service \
21  file://gbmc-br-gw-src.sh \
22  file://gbmc-br-nft.sh \
23  "
24
25FILES:${PN}:append = " \
26  ${datadir}/gbmc-ip-monitor \
27  ${systemd_unitdir}/network \
28  ${sysconfdir}/nftables \
29  ${sysconfdir}/avahi/services \
30  "
31
32RDEPENDS:${PN}:append = " \
33  bash \
34  gbmc-ip-monitor \
35  mstpd-mstpd \
36  network-sh \
37  ndisc6-rdisc6 \
38  "
39
40SYSTEMD_SERVICE:${PN} += "gbmc-br-ensure-ra.service"
41
42GBMC_BR_MAC_ADDR ?= ""
43
44# Generated via https://cd34.com/rfc4193/ based on a MAC from a machine I own
45# and we allocated it downstream. Intended to only be used within a complete
46# system of multiple network endpoints.
47GBMC_ULA_PREFIX = "fdb5:0481:10ce:0"
48
49def mac_to_eui64(mac):
50  if not mac:
51    return ''
52  b = [int(c, 16) for c in mac.split(':')]
53  b[0] ^= 2
54  b.insert(3, 0xfe)
55  b.insert(3, 0xff)
56  idx = range(0, len(b)-1, 2)
57  return ':'.join([format((b[i] << 8) + b[i+1], '04x') for i in idx])
58
59do_install() {
60  netdir=${D}${systemd_unitdir}/network
61  install -d -m0755 $netdir
62
63  if [ ! -z "${GBMC_BR_MAC_ADDR}" ]; then
64    sfx='${@mac_to_eui64(GBMC_BR_MAC_ADDR)}'
65    addr="Address=${GBMC_ULA_PREFIX}:$sfx/64\nAddress=fe80::$sfx/64"
66    sed -i "s,@ADDR@,$addr," ${WORKDIR}/-bmc-gbmcbr.network.in
67  else
68    sed -i '/@ADDR@/d' ${WORKDIR}/-bmc-gbmcbr.network.in
69  fi
70
71  install -m0644 ${WORKDIR}/-bmc-gbmcbr.netdev $netdir/
72  install -m0644 ${WORKDIR}/-bmc-gbmcbr.network.in $netdir/-bmc-gbmcbr.network
73  install -m0644 ${WORKDIR}/-bmc-gbmcbrdummy.netdev $netdir/
74  install -m0644 ${WORKDIR}/-bmc-gbmcbrdummy.network $netdir/
75  install -m0644 ${WORKDIR}/+-bmc-gbmcbrusb.network $netdir/
76
77  nftables_dir=${D}${sysconfdir}/nftables
78  install -d -m0755 "$nftables_dir"
79  install -m0644 ${WORKDIR}/50-gbmc-br.rules $nftables_dir/
80
81  avahi_dir=${D}${sysconfdir}/avahi/services
82  install -d -m 0755 "$avahi_dir"
83  sed -i 's,@MACHINE@,${MACHINE},g' ${WORKDIR}/ipmi.service.in
84  sed -i 's,@EXTRA_ATTRS@,,g' ${WORKDIR}/ipmi.service.in
85  sed 's,@NAME@,bmc,g' ${WORKDIR}/ipmi.service.in >${avahi_dir}/bmc.ipmi.service
86  sed 's,@NAME@,${MACHINE}-bmc,g' ${WORKDIR}/ipmi.service.in >${avahi_dir}/${MACHINE}-bmc.ipmi.service
87
88  mondir=${D}${datadir}/gbmc-ip-monitor
89  install -d -m0755 "$mondir"
90  install -m0644 ${WORKDIR}/gbmc-br-ula.sh "$mondir"/
91  install -m0644 ${WORKDIR}/gbmc-br-from-ra.sh "$mondir"/
92  install -m0644 ${WORKDIR}/gbmc-br-gw-src.sh "$mondir"/
93  install -m0644 ${WORKDIR}/gbmc-br-nft.sh "$mondir"/
94
95  install -d -m0755 ${D}${libexecdir}
96  install -m0755 ${WORKDIR}/gbmc-br-ensure-ra.sh ${D}${libexecdir}/
97  install -d -m0755 ${D}${systemd_system_unitdir}
98  install -m0755 ${WORKDIR}/gbmc-br-ensure-ra.service ${D}${systemd_system_unitdir}/
99}
100
101do_rm_work:prepend() {
102  # HACK: Work around broken do_rm_work not properly calling rm with `--`
103  # It doesn't like filenames that start with `-`
104  rm -rf -- ${WORKDIR}/-*
105}
106