From bdbe7ce8bb2a01f4ed04389d677f3724f0ece044 Mon Sep 17 00:00:00 2001 From: "William A. Kennington III" Date: Mon, 10 May 2021 16:48:43 -0700 Subject: meta-google: gbmc-bridge: Remove custom ip parsing logic Change-Id: I455ab70094cfdc79b38097a838051f51b3c852da Signed-off-by: William A. Kennington III --- .../ncsi/files/gbmc-ncsi-br-pub-addr.sh.in | 32 ++++++++++++---------- .../recipes-google/ncsi/files/gbmc-ncsi-nft.sh.in | 27 +++++++++--------- 2 files changed, 31 insertions(+), 28 deletions(-) (limited to 'meta-google/recipes-google') diff --git a/meta-google/recipes-google/ncsi/files/gbmc-ncsi-br-pub-addr.sh.in b/meta-google/recipes-google/ncsi/files/gbmc-ncsi-br-pub-addr.sh.in index e033fd2a5..949f04f45 100644 --- a/meta-google/recipes-google/ncsi/files/gbmc-ncsi-br-pub-addr.sh.in +++ b/meta-google/recipes-google/ncsi/files/gbmc-ncsi-br-pub-addr.sh.in @@ -23,35 +23,37 @@ gbmc_ncsi_br_pub_addr_update() { printf 'gBMC Bridge Pub Addr from NCSI: %s\n' \ "${gbmc_ncsi_br_pub_addr_lastip:-(deleted)}" >&2 - local pfx= + local pfx_bytes=() if [ -n "$gbmc_ncsi_br_pub_addr_lastip" ]; then - # Pad the address out to a /64 and ensure that it doesn't have extra bits - pfx="${gbmc_ncsi_br_pub_addr_lastip%::}" - while true; do - # Count `:` in `pfx` by removing them and diffing their lengths - local nos="${pfx//:/}" - (( ${#pfx} - ${#nos} >= 3 )) && break - pfx+=":0" + ip_to_bytes pfx_bytes "$gbmc_ncsi_br_pub_addr_lastip" + # Ensure we don't have more than a /64 address + local i + for (( i = 8; i < 16; ++i )); do + if (( pfx_bytes[$i] != 0 )); then + pfx_bytes=() + break + fi done - # Addresses that have more than 64bits of prefix (more than 3 separators) - # do not work with this scheme. Ignore them. - (( ${#pfx} - ${#nos} == 3 )) || pfx= fi local contents='[Network]'$'\n' - if [ -n "$pfx" ]; then + if (( ${#pfx_bytes[@]} != 0 )); then + pfx_bytes[8]=0xfd + local stateless_pfx="$(ip_bytes_to_str pfx_bytes)" + pfx_bytes[9]=0x01 + local ncsi_pfx="$(ip_bytes_to_str pfx_bytes)" local here= read -r -d '' here <= 3 )) && break - pfx+=":0" - done - + local ip_bytes=() + ip_to_bytes ip_bytes "$ip6" # If our address has enough spare bits for appending the BMC suffix # then we add a rule that allows the BMC subnet. That is, we need a /64 # as input. - if (( ${#pfx} - ${#nos} == 3 )); then - contents+=" ip6 saddr != ${pfx}:fd00::/72 ip6 daddr" - contents+=" ${pfx}:fd00::/72 goto ncsi_gbmc_br_pub_input"$'\n' + local i + for (( i = 8; i < 16; i++ )); do + if (( ip_bytes[$i] != 0 )); then + ip_bytes=() + break + fi + done + if (( ${#ip_bytes[@]} != 0 )); then + ip_bytes[8]=0xfd + local pfx="$(ip_bytes_to_str ip_bytes)" + contents+=" ip6 saddr != $pfx/72 ip6 daddr" + contents+=" $pfx/72 goto ncsi_gbmc_br_pub_input"$'\n' fi fi -- cgit v1.2.3