meta-google: gbmc-bridge: Prefer using stateful source

The stateless addr has some routing issues outside of the machine under
some ToR configs. Use the stateful address as a preference to avoid
these issues.

Change-Id: I6a30678fd95b5096ee6b3b8add1d1dd409f0db5f
Signed-off-by: William A. Kennington III <wak@google.com>
diff --git a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-gw-src.sh b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-gw-src.sh
index 4bd3828..6085240 100644
--- a/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-gw-src.sh
+++ b/meta-google/recipes-google/networking/gbmc-bridge/gbmc-br-gw-src.sh
@@ -16,7 +16,8 @@
 
 source /usr/share/network/lib.sh || exit
 
-gbmc_br_gw_src_ip=
+gbmc_br_gw_src_ip_stateful=
+gbmc_br_gw_src_ip_stateless=
 declare -A gbmc_br_gw_src_routes=()
 gbmc_br_gw_defgw=
 
@@ -49,6 +50,7 @@
 }
 
 gbmc_br_gw_src_update() {
+  local gbmc_br_gw_src_ip="${gbmc_br_gw_src_ip_stateful:-$gbmc_br_gw_src_ip_stateless}"
   [ -n "$gbmc_br_gw_src_ip" ] || return
 
   local route
@@ -87,9 +89,15 @@
       echo "gBMC Bridge Ensure RA Invalid IP: $ip" >&2
       return 1
     fi
-    if (( ip_bytes[8] != 0xfd || ip_bytes[9] != 0 )); then
+    # Ignore ULAs and non-gBMC addresses
+    if (( ip_bytes[0] & 0xfe == 0xfc || ip_bytes[8] != 0xfd )); then
       return 0
     fi
+    if (( ip_bytes[9] != 0 )); then
+      local -n gbmc_br_gw_src_ip=gbmc_br_gw_src_ip_stateful
+    else
+      local -n gbmc_br_gw_src_ip=gbmc_br_gw_src_ip_stateless
+    fi
     if [ "$action" = 'add' -a "$ip" != "$gbmc_br_gw_src_ip" ]; then
       gbmc_br_gw_src_ip="$ip"
       gbmc_br_gw_src_update