///|
fn run_alarm_listen(args : Array[String]) -> Unit {
  guard args.length() >= 2 && args[0] == "--iface" else {
    println("alarm-listen --iface  [timeout-ms] [source-mac] [--ack]")
    println(
      "  Example: alarm-listen --iface \"I226-V #2\" 30000 74:90:50:10:E9:07 --ack",
    )
    return
  }
  let timeout_ms = match parse_timeout_arg(args, 2, 30000) {
    Some(value) => value
    None => return
  }
  let ack_enabled = args.contains("--ack")
  let expected_source = if args.length() >= 4 && args[3] != "--ack" {
    Some(
      @frame.MacAddress::from_hex(args[3][:]) catch {
        err => {
          println("Invalid source MAC: \{to_repr(err)}")
          return
        }
      },
    )
  } else {
    None
  }
  let fields : Array[String] = [
    "interface=" + args[1],
    "timeout_ms=" + timeout_ms.to_string(),
    "ack_enabled=" + ack_enabled.to_string(),
  ]
  match expected_source {
    Some(mac) => fields.push("source_mac=" + mac.to_hex())
    None => ()
  }
  println(
    provider_harness_helper_handoff_text(
      "alarm-listen", "alarm path helper", "@rawnet.RawSocket::open", fields,
    ),
  )
}